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

; 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
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1

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

156:                                              ; preds = %26
  store i64 1, ptr %88, align 8, !tbaa !9
  store i64 0, ptr %81, align 8, !tbaa !9
  br label %164

157:                                              ; preds = %26
  %158 = load ptr, ptr %28, align 8, !tbaa !5
  %159 = call i64 @lsame_(ptr noundef %158, ptr noundef @.str.1)
  %160 = icmp ne i64 %159, 0
  br i1 %160, label %161, label %162

161:                                              ; preds = %157
  store i64 2, ptr %88, align 8, !tbaa !9
  store i64 1, ptr %81, align 8, !tbaa !9
  br label %163

162:                                              ; preds = %157
  store i64 -1, ptr %88, align 8, !tbaa !9
  store i64 0, ptr %81, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %162, %161
  br label %164

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

168:                                              ; preds = %164
  store i64 1, ptr %90, align 8, !tbaa !9
  store i64 0, ptr %82, align 8, !tbaa !9
  br label %176

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

173:                                              ; preds = %169
  store i64 2, ptr %90, align 8, !tbaa !9
  store i64 1, ptr %82, align 8, !tbaa !9
  br label %175

174:                                              ; preds = %169
  store i64 -1, ptr %90, align 8, !tbaa !9
  store i64 0, ptr %82, align 8, !tbaa !9
  br label %175

175:                                              ; preds = %174, %173
  br label %176

176:                                              ; preds = %175, %168
  %177 = load ptr, ptr %30, align 8, !tbaa !5
  %178 = call i64 @lsame_(ptr noundef %177, ptr noundef @.str.2)
  store i64 %178, ptr %101, align 8, !tbaa !9
  %179 = load ptr, ptr %32, align 8, !tbaa !5
  %180 = call i64 @lsame_(ptr noundef %179, ptr noundef @.str)
  store i64 %180, ptr %98, align 8, !tbaa !9
  %181 = load ptr, ptr %32, align 8, !tbaa !5
  %182 = call i64 @lsame_(ptr noundef %181, ptr noundef @.str.3)
  store i64 %182, ptr %93, align 8, !tbaa !9
  %183 = load ptr, ptr %32, align 8, !tbaa !5
  %184 = call i64 @lsame_(ptr noundef %183, ptr noundef @.str.1)
  store i64 %184, ptr %103, align 8, !tbaa !9
  %185 = load ptr, ptr %32, align 8, !tbaa !5
  %186 = call i64 @lsame_(ptr noundef %185, ptr noundef @.str.4)
  store i64 %186, ptr %91, align 8, !tbaa !9
  %187 = load ptr, ptr %48, align 8, !tbaa !5
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = icmp eq i64 %188, -1
  br i1 %189, label %194, label %190

190:                                              ; preds = %176
  %191 = load ptr, ptr %51, align 8, !tbaa !5
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = icmp eq i64 %192, -1
  br label %194

194:                                              ; preds = %190, %176
  %195 = phi i1 [ true, %176 ], [ %193, %190 ]
  %196 = zext i1 %195 to i32
  %197 = sext i32 %196 to i64
  store i64 %197, ptr %102, align 8, !tbaa !9
  %198 = load i64, ptr %98, align 8, !tbaa !9
  %199 = icmp ne i64 %198, 0
  br i1 %199, label %200, label %201

200:                                              ; preds = %194
  store i64 0, ptr %71, align 8, !tbaa !9
  br label %216

201:                                              ; preds = %194
  %202 = load i64, ptr %93, align 8, !tbaa !9
  %203 = icmp ne i64 %202, 0
  br i1 %203, label %204, label %205

204:                                              ; preds = %201
  store i64 1, ptr %71, align 8, !tbaa !9
  br label %215

205:                                              ; preds = %201
  %206 = load i64, ptr %103, align 8, !tbaa !9
  %207 = icmp ne i64 %206, 0
  br i1 %207, label %208, label %209

208:                                              ; preds = %205
  store i64 2, ptr %71, align 8, !tbaa !9
  br label %214

209:                                              ; preds = %205
  %210 = load i64, ptr %91, align 8, !tbaa !9
  %211 = icmp ne i64 %210, 0
  br i1 %211, label %212, label %213

212:                                              ; preds = %209
  store i64 4, ptr %71, align 8, !tbaa !9
  br label %213

213:                                              ; preds = %212, %209
  br label %214

214:                                              ; preds = %213, %208
  br label %215

215:                                              ; preds = %214, %204
  br label %216

216:                                              ; preds = %215, %200
  %217 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 0, ptr %217, align 8, !tbaa !9
  %218 = load i64, ptr %88, align 8, !tbaa !9
  %219 = icmp sle i64 %218, 0
  br i1 %219, label %220, label %222

220:                                              ; preds = %216
  %221 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -1, ptr %221, align 8, !tbaa !9
  br label %330

222:                                              ; preds = %216
  %223 = load i64, ptr %90, align 8, !tbaa !9
  %224 = icmp sle i64 %223, 0
  br i1 %224, label %225, label %227

225:                                              ; preds = %222
  %226 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -2, ptr %226, align 8, !tbaa !9
  br label %329

227:                                              ; preds = %222
  %228 = load i64, ptr %101, align 8, !tbaa !9
  %229 = icmp ne i64 %228, 0
  br i1 %229, label %236, label %230

230:                                              ; preds = %227
  %231 = load ptr, ptr %30, align 8, !tbaa !5
  %232 = call i64 @lsame_(ptr noundef %231, ptr noundef @.str)
  %233 = icmp ne i64 %232, 0
  br i1 %233, label %236, label %234

234:                                              ; preds = %230
  %235 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -3, ptr %235, align 8, !tbaa !9
  br label %328

236:                                              ; preds = %230, %227
  %237 = load i64, ptr %98, align 8, !tbaa !9
  %238 = icmp ne i64 %237, 0
  br i1 %238, label %248, label %239

239:                                              ; preds = %236
  %240 = load i64, ptr %93, align 8, !tbaa !9
  %241 = icmp ne i64 %240, 0
  br i1 %241, label %248, label %242

242:                                              ; preds = %239
  %243 = load i64, ptr %103, align 8, !tbaa !9
  %244 = icmp ne i64 %243, 0
  br i1 %244, label %248, label %245

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

248:                                              ; preds = %245, %242, %239, %236
  %249 = load i64, ptr %101, align 8, !tbaa !9
  %250 = icmp ne i64 %249, 0
  br i1 %250, label %256, label %251

251:                                              ; preds = %248
  %252 = load i64, ptr %98, align 8, !tbaa !9
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %256, label %254

254:                                              ; preds = %251, %245
  %255 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -5, ptr %255, align 8, !tbaa !9
  br label %327

256:                                              ; preds = %251, %248
  %257 = load ptr, ptr %33, align 8, !tbaa !5
  %258 = load i64, ptr %257, align 8, !tbaa !9
  %259 = icmp slt i64 %258, 0
  br i1 %259, label %260, label %262

260:                                              ; preds = %256
  %261 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -6, ptr %261, align 8, !tbaa !9
  br label %326

262:                                              ; preds = %256
  %263 = load ptr, ptr %35, align 8, !tbaa !5
  %264 = load i64, ptr %263, align 8, !tbaa !9
  %265 = load ptr, ptr %33, align 8, !tbaa !5
  %266 = load i64, ptr %265, align 8, !tbaa !9
  %267 = icmp sge i64 1, %266
  br i1 %267, label %268, label %269

268:                                              ; preds = %262
  br label %272

269:                                              ; preds = %262
  %270 = load ptr, ptr %33, align 8, !tbaa !5
  %271 = load i64, ptr %270, align 8, !tbaa !9
  br label %272

272:                                              ; preds = %269, %268
  %273 = phi i64 [ 1, %268 ], [ %271, %269 ]
  %274 = icmp slt i64 %264, %273
  br i1 %274, label %275, label %277

275:                                              ; preds = %272
  %276 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -8, ptr %276, align 8, !tbaa !9
  br label %325

277:                                              ; preds = %272
  %278 = load ptr, ptr %37, align 8, !tbaa !5
  %279 = load i64, ptr %278, align 8, !tbaa !9
  %280 = load ptr, ptr %33, align 8, !tbaa !5
  %281 = load i64, ptr %280, align 8, !tbaa !9
  %282 = icmp sge i64 1, %281
  br i1 %282, label %283, label %284

283:                                              ; preds = %277
  br label %287

284:                                              ; preds = %277
  %285 = load ptr, ptr %33, align 8, !tbaa !5
  %286 = load i64, ptr %285, align 8, !tbaa !9
  br label %287

287:                                              ; preds = %284, %283
  %288 = phi i64 [ 1, %283 ], [ %286, %284 ]
  %289 = icmp slt i64 %279, %288
  br i1 %289, label %290, label %292

290:                                              ; preds = %287
  %291 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -10, ptr %291, align 8, !tbaa !9
  br label %324

292:                                              ; preds = %287
  %293 = load ptr, ptr %42, align 8, !tbaa !5
  %294 = load i64, ptr %293, align 8, !tbaa !9
  %295 = icmp slt i64 %294, 1
  br i1 %295, label %305, label %296

296:                                              ; preds = %292
  %297 = load i64, ptr %81, align 8, !tbaa !9
  %298 = icmp ne i64 %297, 0
  br i1 %298, label %299, label %307

299:                                              ; preds = %296
  %300 = load ptr, ptr %42, align 8, !tbaa !5
  %301 = load i64, ptr %300, align 8, !tbaa !9
  %302 = load ptr, ptr %33, align 8, !tbaa !5
  %303 = load i64, ptr %302, align 8, !tbaa !9
  %304 = icmp slt i64 %301, %303
  br i1 %304, label %305, label %307

305:                                              ; preds = %299, %292
  %306 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -15, ptr %306, align 8, !tbaa !9
  br label %323

307:                                              ; preds = %299, %296
  %308 = load ptr, ptr %44, align 8, !tbaa !5
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = icmp slt i64 %309, 1
  br i1 %310, label %320, label %311

311:                                              ; preds = %307
  %312 = load i64, ptr %82, align 8, !tbaa !9
  %313 = icmp ne i64 %312, 0
  br i1 %313, label %314, label %322

314:                                              ; preds = %311
  %315 = load ptr, ptr %44, align 8, !tbaa !5
  %316 = load i64, ptr %315, align 8, !tbaa !9
  %317 = load ptr, ptr %33, align 8, !tbaa !5
  %318 = load i64, ptr %317, align 8, !tbaa !9
  %319 = icmp slt i64 %316, %318
  br i1 %319, label %320, label %322

320:                                              ; preds = %314, %307
  %321 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -17, ptr %321, align 8, !tbaa !9
  br label %322

322:                                              ; preds = %320, %314, %311
  br label %323

323:                                              ; preds = %322, %305
  br label %324

324:                                              ; preds = %323, %290
  br label %325

325:                                              ; preds = %324, %275
  br label %326

326:                                              ; preds = %325, %260
  br label %327

327:                                              ; preds = %326, %254
  br label %328

328:                                              ; preds = %327, %234
  br label %329

329:                                              ; preds = %328, %225
  br label %330

330:                                              ; preds = %329, %220
  %331 = load ptr, ptr %53, align 8, !tbaa !5
  %332 = load i64, ptr %331, align 8, !tbaa !9
  %333 = icmp eq i64 %332, 0
  br i1 %333, label %334, label %454

334:                                              ; preds = %330
  %335 = load ptr, ptr %33, align 8, !tbaa !5
  %336 = load i64, ptr %335, align 8, !tbaa !9
  %337 = icmp sgt i64 %336, 0
  br i1 %337, label %338, label %408

338:                                              ; preds = %334
  %339 = load ptr, ptr %33, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  %341 = shl i64 %340, 1
  store i64 %341, ptr %99, align 8, !tbaa !9
  %342 = load ptr, ptr %33, align 8, !tbaa !5
  %343 = load i64, ptr %342, align 8, !tbaa !9
  %344 = load ptr, ptr %33, align 8, !tbaa !5
  %345 = load ptr, ptr %33, align 8, !tbaa !5
  %346 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.6, ptr noundef %344, ptr noundef @c__1, ptr noundef %345, ptr noundef @c__0)
  %347 = add nsw i64 %346, 1
  %348 = mul nsw i64 %343, %347
  store i64 %348, ptr %97, align 8, !tbaa !9
  %349 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %349, ptr %62, align 8, !tbaa !9
  %350 = load ptr, ptr %33, align 8, !tbaa !5
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = load ptr, ptr %33, align 8, !tbaa !5
  %353 = load ptr, ptr %33, align 8, !tbaa !5
  %354 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.7, ptr noundef @.str.6, ptr noundef %352, ptr noundef @c__1, ptr noundef %353, ptr noundef @c_n1)
  %355 = add nsw i64 %354, 1
  %356 = mul nsw i64 %351, %355
  store i64 %356, ptr %63, align 8, !tbaa !9
  %357 = load i64, ptr %62, align 8, !tbaa !9
  %358 = load i64, ptr %63, align 8, !tbaa !9
  %359 = icmp sge i64 %357, %358
  br i1 %359, label %360, label %362

360:                                              ; preds = %338
  %361 = load i64, ptr %62, align 8, !tbaa !9
  br label %364

362:                                              ; preds = %338
  %363 = load i64, ptr %63, align 8, !tbaa !9
  br label %364

364:                                              ; preds = %362, %360
  %365 = phi i64 [ %361, %360 ], [ %363, %362 ]
  store i64 %365, ptr %97, align 8, !tbaa !9
  %366 = load i64, ptr %81, align 8, !tbaa !9
  %367 = icmp ne i64 %366, 0
  br i1 %367, label %368, label %386

368:                                              ; preds = %364
  %369 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %369, ptr %62, align 8, !tbaa !9
  %370 = load ptr, ptr %33, align 8, !tbaa !5
  %371 = load i64, ptr %370, align 8, !tbaa !9
  %372 = load ptr, ptr %33, align 8, !tbaa !5
  %373 = load ptr, ptr %33, align 8, !tbaa !5
  %374 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.8, ptr noundef @.str.6, ptr noundef %372, ptr noundef @c__1, ptr noundef %373, ptr noundef @c_n1)
  %375 = add nsw i64 %374, 1
  %376 = mul nsw i64 %371, %375
  store i64 %376, ptr %63, align 8, !tbaa !9
  %377 = load i64, ptr %62, align 8, !tbaa !9
  %378 = load i64, ptr %63, align 8, !tbaa !9
  %379 = icmp sge i64 %377, %378
  br i1 %379, label %380, label %382

380:                                              ; preds = %368
  %381 = load i64, ptr %62, align 8, !tbaa !9
  br label %384

382:                                              ; preds = %368
  %383 = load i64, ptr %63, align 8, !tbaa !9
  br label %384

384:                                              ; preds = %382, %380
  %385 = phi i64 [ %381, %380 ], [ %383, %382 ]
  store i64 %385, ptr %97, align 8, !tbaa !9
  br label %386

386:                                              ; preds = %384, %364
  %387 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %387, ptr %77, align 8, !tbaa !9
  %388 = load i64, ptr %71, align 8, !tbaa !9
  %389 = icmp sge i64 %388, 1
  br i1 %389, label %390, label %407

390:                                              ; preds = %386
  %391 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %391, ptr %62, align 8, !tbaa !9
  %392 = load ptr, ptr %33, align 8, !tbaa !5
  %393 = load i64, ptr %392, align 8, !tbaa !9
  %394 = load ptr, ptr %33, align 8, !tbaa !5
  %395 = load i64, ptr %394, align 8, !tbaa !9
  %396 = mul nsw i64 %393, %395
  %397 = sdiv i64 %396, 2
  store i64 %397, ptr %63, align 8, !tbaa !9
  %398 = load i64, ptr %62, align 8, !tbaa !9
  %399 = load i64, ptr %63, align 8, !tbaa !9
  %400 = icmp sge i64 %398, %399
  br i1 %400, label %401, label %403

401:                                              ; preds = %390
  %402 = load i64, ptr %62, align 8, !tbaa !9
  br label %405

403:                                              ; preds = %390
  %404 = load i64, ptr %63, align 8, !tbaa !9
  br label %405

405:                                              ; preds = %403, %401
  %406 = phi i64 [ %402, %401 ], [ %404, %403 ]
  store i64 %406, ptr %77, align 8, !tbaa !9
  br label %407

407:                                              ; preds = %405, %386
  br label %409

408:                                              ; preds = %334
  store i64 1, ptr %99, align 8, !tbaa !9
  store i64 1, ptr %97, align 8, !tbaa !9
  store i64 1, ptr %77, align 8, !tbaa !9
  br label %409

409:                                              ; preds = %408, %407
  %410 = load i64, ptr %77, align 8, !tbaa !9
  %411 = sitofp i64 %410 to double
  %412 = load ptr, ptr %47, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.doublecomplex, ptr %412, i64 1
  %414 = getelementptr inbounds %struct.doublecomplex, ptr %413, i32 0, i32 0
  store double %411, ptr %414, align 8, !tbaa !11
  %415 = load ptr, ptr %47, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.doublecomplex, ptr %415, i64 1
  %417 = getelementptr inbounds %struct.doublecomplex, ptr %416, i32 0, i32 1
  store double 0.000000e+00, ptr %417, align 8, !tbaa !14
  %418 = load i64, ptr %98, align 8, !tbaa !9
  %419 = icmp ne i64 %418, 0
  br i1 %419, label %424, label %420

420:                                              ; preds = %409
  %421 = load ptr, ptr %33, align 8, !tbaa !5
  %422 = load i64, ptr %421, align 8, !tbaa !9
  %423 = icmp eq i64 %422, 0
  br i1 %423, label %424, label %425

424:                                              ; preds = %420, %409
  store i64 1, ptr %92, align 8, !tbaa !9
  br label %429

425:                                              ; preds = %420
  %426 = load ptr, ptr %33, align 8, !tbaa !5
  %427 = load i64, ptr %426, align 8, !tbaa !9
  %428 = add nsw i64 %427, 2
  store i64 %428, ptr %92, align 8, !tbaa !9
  br label %429

429:                                              ; preds = %425, %424
  %430 = load i64, ptr %92, align 8, !tbaa !9
  %431 = load ptr, ptr %50, align 8, !tbaa !5
  %432 = getelementptr inbounds i64, ptr %431, i64 1
  store i64 %430, ptr %432, align 8, !tbaa !9
  %433 = load ptr, ptr %48, align 8, !tbaa !5
  %434 = load i64, ptr %433, align 8, !tbaa !9
  %435 = load i64, ptr %99, align 8, !tbaa !9
  %436 = icmp slt i64 %434, %435
  br i1 %436, label %437, label %442

437:                                              ; preds = %429
  %438 = load i64, ptr %102, align 8, !tbaa !9
  %439 = icmp ne i64 %438, 0
  br i1 %439, label %442, label %440

440:                                              ; preds = %437
  %441 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -21, ptr %441, align 8, !tbaa !9
  br label %453

442:                                              ; preds = %437, %429
  %443 = load ptr, ptr %51, align 8, !tbaa !5
  %444 = load i64, ptr %443, align 8, !tbaa !9
  %445 = load i64, ptr %92, align 8, !tbaa !9
  %446 = icmp slt i64 %444, %445
  br i1 %446, label %447, label %452

447:                                              ; preds = %442
  %448 = load i64, ptr %102, align 8, !tbaa !9
  %449 = icmp ne i64 %448, 0
  br i1 %449, label %452, label %450

450:                                              ; preds = %447
  %451 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -24, ptr %451, align 8, !tbaa !9
  br label %452

452:                                              ; preds = %450, %447, %442
  br label %453

453:                                              ; preds = %452, %440
  br label %454

454:                                              ; preds = %453, %330
  %455 = load ptr, ptr %53, align 8, !tbaa !5
  %456 = load i64, ptr %455, align 8, !tbaa !9
  %457 = icmp ne i64 %456, 0
  br i1 %457, label %458, label %463

458:                                              ; preds = %454
  %459 = load ptr, ptr %53, align 8, !tbaa !5
  %460 = load i64, ptr %459, align 8, !tbaa !9
  %461 = sub nsw i64 0, %460
  store i64 %461, ptr %62, align 8, !tbaa !9
  %462 = call i32 @xerbla_(ptr noundef @.str.9, ptr noundef %62)
  store i32 0, ptr %27, align 4
  store i32 1, ptr %104, align 4
  br label %1075

463:                                              ; preds = %454
  %464 = load i64, ptr %102, align 8, !tbaa !9
  %465 = icmp ne i64 %464, 0
  br i1 %465, label %466, label %467

466:                                              ; preds = %463
  store i32 0, ptr %27, align 4
  store i32 1, ptr %104, align 4
  br label %1075

467:                                              ; preds = %463
  br label %468

468:                                              ; preds = %467
  %469 = load ptr, ptr %33, align 8, !tbaa !5
  %470 = load i64, ptr %469, align 8, !tbaa !9
  %471 = icmp eq i64 %470, 0
  br i1 %471, label %472, label %474

472:                                              ; preds = %468
  %473 = load ptr, ptr %38, align 8, !tbaa !5
  store i64 0, ptr %473, align 8, !tbaa !9
  store i32 0, ptr %27, align 4
  store i32 1, ptr %104, align 4
  br label %1075

474:                                              ; preds = %468
  %475 = call double @dlamch_(ptr noundef @.str.10)
  store double %475, ptr %70, align 8, !tbaa !15
  %476 = call double @dlamch_(ptr noundef @.str.2)
  store double %476, ptr %100, align 8, !tbaa !15
  %477 = load double, ptr %100, align 8, !tbaa !15
  %478 = fdiv double 1.000000e+00, %477
  store double %478, ptr %87, align 8, !tbaa !15
  %479 = call i32 @dlabad_(ptr noundef %100, ptr noundef %87)
  %480 = load double, ptr %100, align 8, !tbaa !15
  %481 = call double @sqrt(double noundef %480) #4
  %482 = load double, ptr %70, align 8, !tbaa !15
  %483 = fdiv double %481, %482
  store double %483, ptr %100, align 8, !tbaa !15
  %484 = load double, ptr %100, align 8, !tbaa !15
  %485 = fdiv double 1.000000e+00, %484
  store double %485, ptr %87, align 8, !tbaa !15
  %486 = load ptr, ptr %33, align 8, !tbaa !5
  %487 = load ptr, ptr %33, align 8, !tbaa !5
  %488 = load ptr, ptr %34, align 8, !tbaa !5
  %489 = load i64, ptr %55, align 8, !tbaa !9
  %490 = getelementptr inbounds %struct.doublecomplex, ptr %488, i64 %489
  %491 = load ptr, ptr %35, align 8, !tbaa !5
  %492 = load ptr, ptr %49, align 8, !tbaa !5
  %493 = getelementptr inbounds double, ptr %492, i64 1
  %494 = call double @zlange_(ptr noundef @.str.11, ptr noundef %486, ptr noundef %487, ptr noundef %490, ptr noundef %491, ptr noundef %493)
  store double %494, ptr %72, align 8, !tbaa !15
  store i64 0, ptr %85, align 8, !tbaa !9
  %495 = load double, ptr %72, align 8, !tbaa !15
  %496 = fcmp ogt double %495, 0.000000e+00
  br i1 %496, label %497, label %503

497:                                              ; preds = %474
  %498 = load double, ptr %72, align 8, !tbaa !15
  %499 = load double, ptr %100, align 8, !tbaa !15
  %500 = fcmp olt double %498, %499
  br i1 %500, label %501, label %503

501:                                              ; preds = %497
  %502 = load double, ptr %100, align 8, !tbaa !15
  store double %502, ptr %95, align 8, !tbaa !15
  store i64 1, ptr %85, align 8, !tbaa !9
  br label %510

503:                                              ; preds = %497, %474
  %504 = load double, ptr %72, align 8, !tbaa !15
  %505 = load double, ptr %87, align 8, !tbaa !15
  %506 = fcmp ogt double %504, %505
  br i1 %506, label %507, label %509

507:                                              ; preds = %503
  %508 = load double, ptr %87, align 8, !tbaa !15
  store double %508, ptr %95, align 8, !tbaa !15
  store i64 1, ptr %85, align 8, !tbaa !9
  br label %509

509:                                              ; preds = %507, %503
  br label %510

510:                                              ; preds = %509, %501
  %511 = load i64, ptr %85, align 8, !tbaa !9
  %512 = icmp ne i64 %511, 0
  br i1 %512, label %513, label %521

513:                                              ; preds = %510
  %514 = load ptr, ptr %33, align 8, !tbaa !5
  %515 = load ptr, ptr %33, align 8, !tbaa !5
  %516 = load ptr, ptr %34, align 8, !tbaa !5
  %517 = load i64, ptr %55, align 8, !tbaa !9
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %516, i64 %517
  %519 = load ptr, ptr %35, align 8, !tbaa !5
  %520 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %72, ptr noundef %95, ptr noundef %514, ptr noundef %515, ptr noundef %518, ptr noundef %519, ptr noundef %74)
  br label %521

521:                                              ; preds = %513, %510
  %522 = load ptr, ptr %33, align 8, !tbaa !5
  %523 = load ptr, ptr %33, align 8, !tbaa !5
  %524 = load ptr, ptr %36, align 8, !tbaa !5
  %525 = load i64, ptr %57, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 %525
  %527 = load ptr, ptr %37, align 8, !tbaa !5
  %528 = load ptr, ptr %49, align 8, !tbaa !5
  %529 = getelementptr inbounds double, ptr %528, i64 1
  %530 = call double @zlange_(ptr noundef @.str.11, ptr noundef %522, ptr noundef %523, ptr noundef %526, ptr noundef %527, ptr noundef %529)
  store double %530, ptr %73, align 8, !tbaa !15
  store i64 0, ptr %86, align 8, !tbaa !9
  %531 = load double, ptr %73, align 8, !tbaa !15
  %532 = fcmp ogt double %531, 0.000000e+00
  br i1 %532, label %533, label %539

533:                                              ; preds = %521
  %534 = load double, ptr %73, align 8, !tbaa !15
  %535 = load double, ptr %100, align 8, !tbaa !15
  %536 = fcmp olt double %534, %535
  br i1 %536, label %537, label %539

537:                                              ; preds = %533
  %538 = load double, ptr %100, align 8, !tbaa !15
  store double %538, ptr %96, align 8, !tbaa !15
  store i64 1, ptr %86, align 8, !tbaa !9
  br label %546

539:                                              ; preds = %533, %521
  %540 = load double, ptr %73, align 8, !tbaa !15
  %541 = load double, ptr %87, align 8, !tbaa !15
  %542 = fcmp ogt double %540, %541
  br i1 %542, label %543, label %545

543:                                              ; preds = %539
  %544 = load double, ptr %87, align 8, !tbaa !15
  store double %544, ptr %96, align 8, !tbaa !15
  store i64 1, ptr %86, align 8, !tbaa !9
  br label %545

545:                                              ; preds = %543, %539
  br label %546

546:                                              ; preds = %545, %537
  %547 = load i64, ptr %86, align 8, !tbaa !9
  %548 = icmp ne i64 %547, 0
  br i1 %548, label %549, label %557

549:                                              ; preds = %546
  %550 = load ptr, ptr %33, align 8, !tbaa !5
  %551 = load ptr, ptr %33, align 8, !tbaa !5
  %552 = load ptr, ptr %36, align 8, !tbaa !5
  %553 = load i64, ptr %57, align 8, !tbaa !9
  %554 = getelementptr inbounds %struct.doublecomplex, ptr %552, i64 %553
  %555 = load ptr, ptr %37, align 8, !tbaa !5
  %556 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %73, ptr noundef %96, ptr noundef %550, ptr noundef %551, ptr noundef %554, ptr noundef %555, ptr noundef %74)
  br label %557

557:                                              ; preds = %549, %546
  store i64 1, ptr %78, align 8, !tbaa !9
  %558 = load ptr, ptr %33, align 8, !tbaa !5
  %559 = load i64, ptr %558, align 8, !tbaa !9
  %560 = add nsw i64 %559, 1
  store i64 %560, ptr %89, align 8, !tbaa !9
  %561 = load i64, ptr %89, align 8, !tbaa !9
  %562 = load ptr, ptr %33, align 8, !tbaa !5
  %563 = load i64, ptr %562, align 8, !tbaa !9
  %564 = add nsw i64 %561, %563
  store i64 %564, ptr %83, align 8, !tbaa !9
  %565 = load ptr, ptr %33, align 8, !tbaa !5
  %566 = load ptr, ptr %34, align 8, !tbaa !5
  %567 = load i64, ptr %55, align 8, !tbaa !9
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %566, i64 %567
  %569 = load ptr, ptr %35, align 8, !tbaa !5
  %570 = load ptr, ptr %36, align 8, !tbaa !5
  %571 = load i64, ptr %57, align 8, !tbaa !9
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %570, i64 %571
  %573 = load ptr, ptr %37, align 8, !tbaa !5
  %574 = load ptr, ptr %49, align 8, !tbaa !5
  %575 = load i64, ptr %78, align 8, !tbaa !9
  %576 = getelementptr inbounds double, ptr %574, i64 %575
  %577 = load ptr, ptr %49, align 8, !tbaa !5
  %578 = load i64, ptr %89, align 8, !tbaa !9
  %579 = getelementptr inbounds double, ptr %577, i64 %578
  %580 = load ptr, ptr %49, align 8, !tbaa !5
  %581 = load i64, ptr %83, align 8, !tbaa !9
  %582 = getelementptr inbounds double, ptr %580, i64 %581
  %583 = call i32 @zggbal_(ptr noundef @.str.10, ptr noundef %565, ptr noundef %568, ptr noundef %569, ptr noundef %572, ptr noundef %573, ptr noundef %69, ptr noundef %68, ptr noundef %576, ptr noundef %579, ptr noundef %582, ptr noundef %74)
  %584 = load i64, ptr %68, align 8, !tbaa !9
  %585 = add nsw i64 %584, 1
  %586 = load i64, ptr %69, align 8, !tbaa !9
  %587 = sub nsw i64 %585, %586
  store i64 %587, ptr %84, align 8, !tbaa !9
  %588 = load ptr, ptr %33, align 8, !tbaa !5
  %589 = load i64, ptr %588, align 8, !tbaa !9
  %590 = add nsw i64 %589, 1
  %591 = load i64, ptr %69, align 8, !tbaa !9
  %592 = sub nsw i64 %590, %591
  store i64 %592, ptr %79, align 8, !tbaa !9
  store i64 1, ptr %75, align 8, !tbaa !9
  %593 = load i64, ptr %75, align 8, !tbaa !9
  %594 = load i64, ptr %84, align 8, !tbaa !9
  %595 = add nsw i64 %593, %594
  store i64 %595, ptr %76, align 8, !tbaa !9
  %596 = load ptr, ptr %48, align 8, !tbaa !5
  %597 = load i64, ptr %596, align 8, !tbaa !9
  %598 = add nsw i64 %597, 1
  %599 = load i64, ptr %76, align 8, !tbaa !9
  %600 = sub nsw i64 %598, %599
  store i64 %600, ptr %62, align 8, !tbaa !9
  %601 = load ptr, ptr %36, align 8, !tbaa !5
  %602 = load i64, ptr %69, align 8, !tbaa !9
  %603 = load i64, ptr %69, align 8, !tbaa !9
  %604 = load i64, ptr %56, align 8, !tbaa !9
  %605 = mul nsw i64 %603, %604
  %606 = add nsw i64 %602, %605
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %601, i64 %606
  %608 = load ptr, ptr %37, align 8, !tbaa !5
  %609 = load ptr, ptr %47, align 8, !tbaa !5
  %610 = load i64, ptr %75, align 8, !tbaa !9
  %611 = getelementptr inbounds %struct.doublecomplex, ptr %609, i64 %610
  %612 = load ptr, ptr %47, align 8, !tbaa !5
  %613 = load i64, ptr %76, align 8, !tbaa !9
  %614 = getelementptr inbounds %struct.doublecomplex, ptr %612, i64 %613
  %615 = call i32 @zgeqrf_(ptr noundef %84, ptr noundef %79, ptr noundef %607, ptr noundef %608, ptr noundef %611, ptr noundef %614, ptr noundef %62, ptr noundef %74)
  %616 = load ptr, ptr %48, align 8, !tbaa !5
  %617 = load i64, ptr %616, align 8, !tbaa !9
  %618 = add nsw i64 %617, 1
  %619 = load i64, ptr %76, align 8, !tbaa !9
  %620 = sub nsw i64 %618, %619
  store i64 %620, ptr %62, align 8, !tbaa !9
  %621 = load ptr, ptr %36, align 8, !tbaa !5
  %622 = load i64, ptr %69, align 8, !tbaa !9
  %623 = load i64, ptr %69, align 8, !tbaa !9
  %624 = load i64, ptr %56, align 8, !tbaa !9
  %625 = mul nsw i64 %623, %624
  %626 = add nsw i64 %622, %625
  %627 = getelementptr inbounds %struct.doublecomplex, ptr %621, i64 %626
  %628 = load ptr, ptr %37, align 8, !tbaa !5
  %629 = load ptr, ptr %47, align 8, !tbaa !5
  %630 = load i64, ptr %75, align 8, !tbaa !9
  %631 = getelementptr inbounds %struct.doublecomplex, ptr %629, i64 %630
  %632 = load ptr, ptr %34, align 8, !tbaa !5
  %633 = load i64, ptr %69, align 8, !tbaa !9
  %634 = load i64, ptr %69, align 8, !tbaa !9
  %635 = load i64, ptr %54, align 8, !tbaa !9
  %636 = mul nsw i64 %634, %635
  %637 = add nsw i64 %633, %636
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %632, i64 %637
  %639 = load ptr, ptr %35, align 8, !tbaa !5
  %640 = load ptr, ptr %47, align 8, !tbaa !5
  %641 = load i64, ptr %76, align 8, !tbaa !9
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %640, i64 %641
  %643 = call i32 @zunmqr_(ptr noundef @.str.13, ptr noundef @.str.14, ptr noundef %84, ptr noundef %79, ptr noundef %84, ptr noundef %627, ptr noundef %628, ptr noundef %631, ptr noundef %638, ptr noundef %639, ptr noundef %642, ptr noundef %62, ptr noundef %74)
  %644 = load i64, ptr %81, align 8, !tbaa !9
  %645 = icmp ne i64 %644, 0
  br i1 %645, label %646, label %701

646:                                              ; preds = %557
  %647 = load ptr, ptr %33, align 8, !tbaa !5
  %648 = load ptr, ptr %33, align 8, !tbaa !5
  %649 = load ptr, ptr %41, align 8, !tbaa !5
  %650 = load i64, ptr %59, align 8, !tbaa !9
  %651 = getelementptr inbounds %struct.doublecomplex, ptr %649, i64 %650
  %652 = load ptr, ptr %42, align 8, !tbaa !5
  %653 = call i32 @zlaset_(ptr noundef @.str.15, ptr noundef %647, ptr noundef %648, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %651, ptr noundef %652)
  %654 = load i64, ptr %84, align 8, !tbaa !9
  %655 = icmp sgt i64 %654, 1
  br i1 %655, label %656, label %680

656:                                              ; preds = %646
  %657 = load i64, ptr %84, align 8, !tbaa !9
  %658 = sub nsw i64 %657, 1
  store i64 %658, ptr %62, align 8, !tbaa !9
  %659 = load i64, ptr %84, align 8, !tbaa !9
  %660 = sub nsw i64 %659, 1
  store i64 %660, ptr %63, align 8, !tbaa !9
  %661 = load ptr, ptr %36, align 8, !tbaa !5
  %662 = load i64, ptr %69, align 8, !tbaa !9
  %663 = add nsw i64 %662, 1
  %664 = load i64, ptr %69, align 8, !tbaa !9
  %665 = load i64, ptr %56, align 8, !tbaa !9
  %666 = mul nsw i64 %664, %665
  %667 = add nsw i64 %663, %666
  %668 = getelementptr inbounds %struct.doublecomplex, ptr %661, i64 %667
  %669 = load ptr, ptr %37, align 8, !tbaa !5
  %670 = load ptr, ptr %41, align 8, !tbaa !5
  %671 = load i64, ptr %69, align 8, !tbaa !9
  %672 = add nsw i64 %671, 1
  %673 = load i64, ptr %69, align 8, !tbaa !9
  %674 = load i64, ptr %58, align 8, !tbaa !9
  %675 = mul nsw i64 %673, %674
  %676 = add nsw i64 %672, %675
  %677 = getelementptr inbounds %struct.doublecomplex, ptr %670, i64 %676
  %678 = load ptr, ptr %42, align 8, !tbaa !5
  %679 = call i32 @zlacpy_(ptr noundef @.str.13, ptr noundef %62, ptr noundef %63, ptr noundef %668, ptr noundef %669, ptr noundef %677, ptr noundef %678)
  br label %680

680:                                              ; preds = %656, %646
  %681 = load ptr, ptr %48, align 8, !tbaa !5
  %682 = load i64, ptr %681, align 8, !tbaa !9
  %683 = add nsw i64 %682, 1
  %684 = load i64, ptr %76, align 8, !tbaa !9
  %685 = sub nsw i64 %683, %684
  store i64 %685, ptr %62, align 8, !tbaa !9
  %686 = load ptr, ptr %41, align 8, !tbaa !5
  %687 = load i64, ptr %69, align 8, !tbaa !9
  %688 = load i64, ptr %69, align 8, !tbaa !9
  %689 = load i64, ptr %58, align 8, !tbaa !9
  %690 = mul nsw i64 %688, %689
  %691 = add nsw i64 %687, %690
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %686, i64 %691
  %693 = load ptr, ptr %42, align 8, !tbaa !5
  %694 = load ptr, ptr %47, align 8, !tbaa !5
  %695 = load i64, ptr %75, align 8, !tbaa !9
  %696 = getelementptr inbounds %struct.doublecomplex, ptr %694, i64 %695
  %697 = load ptr, ptr %47, align 8, !tbaa !5
  %698 = load i64, ptr %76, align 8, !tbaa !9
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %697, i64 %698
  %700 = call i32 @zungqr_(ptr noundef %84, ptr noundef %84, ptr noundef %84, ptr noundef %692, ptr noundef %693, ptr noundef %696, ptr noundef %699, ptr noundef %62, ptr noundef %74)
  br label %701

701:                                              ; preds = %680, %557
  %702 = load i64, ptr %82, align 8, !tbaa !9
  %703 = icmp ne i64 %702, 0
  br i1 %703, label %704, label %712

704:                                              ; preds = %701
  %705 = load ptr, ptr %33, align 8, !tbaa !5
  %706 = load ptr, ptr %33, align 8, !tbaa !5
  %707 = load ptr, ptr %43, align 8, !tbaa !5
  %708 = load i64, ptr %61, align 8, !tbaa !9
  %709 = getelementptr inbounds %struct.doublecomplex, ptr %707, i64 %708
  %710 = load ptr, ptr %44, align 8, !tbaa !5
  %711 = call i32 @zlaset_(ptr noundef @.str.15, ptr noundef %705, ptr noundef %706, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %709, ptr noundef %710)
  br label %712

712:                                              ; preds = %704, %701
  %713 = load ptr, ptr %28, align 8, !tbaa !5
  %714 = load ptr, ptr %29, align 8, !tbaa !5
  %715 = load ptr, ptr %33, align 8, !tbaa !5
  %716 = load ptr, ptr %34, align 8, !tbaa !5
  %717 = load i64, ptr %55, align 8, !tbaa !9
  %718 = getelementptr inbounds %struct.doublecomplex, ptr %716, i64 %717
  %719 = load ptr, ptr %35, align 8, !tbaa !5
  %720 = load ptr, ptr %36, align 8, !tbaa !5
  %721 = load i64, ptr %57, align 8, !tbaa !9
  %722 = getelementptr inbounds %struct.doublecomplex, ptr %720, i64 %721
  %723 = load ptr, ptr %37, align 8, !tbaa !5
  %724 = load ptr, ptr %41, align 8, !tbaa !5
  %725 = load i64, ptr %59, align 8, !tbaa !9
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %724, i64 %725
  %727 = load ptr, ptr %42, align 8, !tbaa !5
  %728 = load ptr, ptr %43, align 8, !tbaa !5
  %729 = load i64, ptr %61, align 8, !tbaa !9
  %730 = getelementptr inbounds %struct.doublecomplex, ptr %728, i64 %729
  %731 = load ptr, ptr %44, align 8, !tbaa !5
  %732 = call i32 @zgghrd_(ptr noundef %713, ptr noundef %714, ptr noundef %715, ptr noundef %69, ptr noundef %68, ptr noundef %718, ptr noundef %719, ptr noundef %722, ptr noundef %723, ptr noundef %726, ptr noundef %727, ptr noundef %730, ptr noundef %731, ptr noundef %74)
  %733 = load ptr, ptr %38, align 8, !tbaa !5
  store i64 0, ptr %733, align 8, !tbaa !9
  %734 = load i64, ptr %75, align 8, !tbaa !9
  store i64 %734, ptr %76, align 8, !tbaa !9
  %735 = load ptr, ptr %48, align 8, !tbaa !5
  %736 = load i64, ptr %735, align 8, !tbaa !9
  %737 = add nsw i64 %736, 1
  %738 = load i64, ptr %76, align 8, !tbaa !9
  %739 = sub nsw i64 %737, %738
  store i64 %739, ptr %62, align 8, !tbaa !9
  %740 = load ptr, ptr %28, align 8, !tbaa !5
  %741 = load ptr, ptr %29, align 8, !tbaa !5
  %742 = load ptr, ptr %33, align 8, !tbaa !5
  %743 = load ptr, ptr %34, align 8, !tbaa !5
  %744 = load i64, ptr %55, align 8, !tbaa !9
  %745 = getelementptr inbounds %struct.doublecomplex, ptr %743, i64 %744
  %746 = load ptr, ptr %35, align 8, !tbaa !5
  %747 = load ptr, ptr %36, align 8, !tbaa !5
  %748 = load i64, ptr %57, align 8, !tbaa !9
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %747, i64 %748
  %750 = load ptr, ptr %37, align 8, !tbaa !5
  %751 = load ptr, ptr %39, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.doublecomplex, ptr %751, i64 1
  %753 = load ptr, ptr %40, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.doublecomplex, ptr %753, i64 1
  %755 = load ptr, ptr %41, align 8, !tbaa !5
  %756 = load i64, ptr %59, align 8, !tbaa !9
  %757 = getelementptr inbounds %struct.doublecomplex, ptr %755, i64 %756
  %758 = load ptr, ptr %42, align 8, !tbaa !5
  %759 = load ptr, ptr %43, align 8, !tbaa !5
  %760 = load i64, ptr %61, align 8, !tbaa !9
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %759, i64 %760
  %762 = load ptr, ptr %44, align 8, !tbaa !5
  %763 = load ptr, ptr %47, align 8, !tbaa !5
  %764 = load i64, ptr %76, align 8, !tbaa !9
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %764
  %766 = load ptr, ptr %49, align 8, !tbaa !5
  %767 = load i64, ptr %83, align 8, !tbaa !9
  %768 = getelementptr inbounds double, ptr %766, i64 %767
  %769 = call i32 @zhgeqz_(ptr noundef @.str.2, ptr noundef %740, ptr noundef %741, ptr noundef %742, ptr noundef %69, ptr noundef %68, ptr noundef %745, ptr noundef %746, ptr noundef %749, ptr noundef %750, ptr noundef %752, ptr noundef %754, ptr noundef %757, ptr noundef %758, ptr noundef %761, ptr noundef %762, ptr noundef %765, ptr noundef %62, ptr noundef %768, ptr noundef %74)
  %770 = load i64, ptr %74, align 8, !tbaa !9
  %771 = icmp ne i64 %770, 0
  br i1 %771, label %772, label %807

772:                                              ; preds = %712
  %773 = load i64, ptr %74, align 8, !tbaa !9
  %774 = icmp sgt i64 %773, 0
  br i1 %774, label %775, label %783

775:                                              ; preds = %772
  %776 = load i64, ptr %74, align 8, !tbaa !9
  %777 = load ptr, ptr %33, align 8, !tbaa !5
  %778 = load i64, ptr %777, align 8, !tbaa !9
  %779 = icmp sle i64 %776, %778
  br i1 %779, label %780, label %783

780:                                              ; preds = %775
  %781 = load i64, ptr %74, align 8, !tbaa !9
  %782 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 %781, ptr %782, align 8, !tbaa !9
  br label %806

783:                                              ; preds = %775, %772
  %784 = load i64, ptr %74, align 8, !tbaa !9
  %785 = load ptr, ptr %33, align 8, !tbaa !5
  %786 = load i64, ptr %785, align 8, !tbaa !9
  %787 = icmp sgt i64 %784, %786
  br i1 %787, label %788, label %800

788:                                              ; preds = %783
  %789 = load i64, ptr %74, align 8, !tbaa !9
  %790 = load ptr, ptr %33, align 8, !tbaa !5
  %791 = load i64, ptr %790, align 8, !tbaa !9
  %792 = shl i64 %791, 1
  %793 = icmp sle i64 %789, %792
  br i1 %793, label %794, label %800

794:                                              ; preds = %788
  %795 = load i64, ptr %74, align 8, !tbaa !9
  %796 = load ptr, ptr %33, align 8, !tbaa !5
  %797 = load i64, ptr %796, align 8, !tbaa !9
  %798 = sub nsw i64 %795, %797
  %799 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 %798, ptr %799, align 8, !tbaa !9
  br label %805

800:                                              ; preds = %788, %783
  %801 = load ptr, ptr %33, align 8, !tbaa !5
  %802 = load i64, ptr %801, align 8, !tbaa !9
  %803 = add nsw i64 %802, 1
  %804 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 %803, ptr %804, align 8, !tbaa !9
  br label %805

805:                                              ; preds = %800, %794
  br label %806

806:                                              ; preds = %805, %780
  br label %1063

807:                                              ; preds = %712
  %808 = load i64, ptr %101, align 8, !tbaa !9
  %809 = icmp ne i64 %808, 0
  br i1 %809, label %810, label %953

810:                                              ; preds = %807
  %811 = load i64, ptr %85, align 8, !tbaa !9
  %812 = icmp ne i64 %811, 0
  br i1 %812, label %813, label %819

813:                                              ; preds = %810
  %814 = load ptr, ptr %33, align 8, !tbaa !5
  %815 = load ptr, ptr %39, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.doublecomplex, ptr %815, i64 1
  %817 = load ptr, ptr %33, align 8, !tbaa !5
  %818 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %95, ptr noundef %72, ptr noundef %814, ptr noundef @c__1, ptr noundef %816, ptr noundef %817, ptr noundef %74)
  br label %819

819:                                              ; preds = %813, %810
  %820 = load i64, ptr %86, align 8, !tbaa !9
  %821 = icmp ne i64 %820, 0
  br i1 %821, label %822, label %828

822:                                              ; preds = %819
  %823 = load ptr, ptr %33, align 8, !tbaa !5
  %824 = load ptr, ptr %40, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.doublecomplex, ptr %824, i64 1
  %826 = load ptr, ptr %33, align 8, !tbaa !5
  %827 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %96, ptr noundef %73, ptr noundef %823, ptr noundef @c__1, ptr noundef %825, ptr noundef %826, ptr noundef %74)
  br label %828

828:                                              ; preds = %822, %819
  %829 = load ptr, ptr %33, align 8, !tbaa !5
  %830 = load i64, ptr %829, align 8, !tbaa !9
  store i64 %830, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %64, align 8, !tbaa !9
  br label %831

831:                                              ; preds = %847, %828
  %832 = load i64, ptr %64, align 8, !tbaa !9
  %833 = load i64, ptr %62, align 8, !tbaa !9
  %834 = icmp sle i64 %832, %833
  br i1 %834, label %835, label %850

835:                                              ; preds = %831
  %836 = load ptr, ptr %31, align 8, !tbaa !5
  %837 = load ptr, ptr %39, align 8, !tbaa !5
  %838 = load i64, ptr %64, align 8, !tbaa !9
  %839 = getelementptr inbounds %struct.doublecomplex, ptr %837, i64 %838
  %840 = load ptr, ptr %40, align 8, !tbaa !5
  %841 = load i64, ptr %64, align 8, !tbaa !9
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %840, i64 %841
  %843 = call i64 (ptr, ptr, ...) %836(ptr noundef %839, ptr noundef %842)
  %844 = load ptr, ptr %52, align 8, !tbaa !5
  %845 = load i64, ptr %64, align 8, !tbaa !9
  %846 = getelementptr inbounds i64, ptr %844, i64 %845
  store i64 %843, ptr %846, align 8, !tbaa !9
  br label %847

847:                                              ; preds = %835
  %848 = load i64, ptr %64, align 8, !tbaa !9
  %849 = add nsw i64 %848, 1
  store i64 %849, ptr %64, align 8, !tbaa !9
  br label %831, !llvm.loop !16

850:                                              ; preds = %831
  %851 = load ptr, ptr %48, align 8, !tbaa !5
  %852 = load i64, ptr %851, align 8, !tbaa !9
  %853 = load i64, ptr %76, align 8, !tbaa !9
  %854 = sub nsw i64 %852, %853
  %855 = add nsw i64 %854, 1
  store i64 %855, ptr %62, align 8, !tbaa !9
  %856 = load ptr, ptr %52, align 8, !tbaa !5
  %857 = getelementptr inbounds i64, ptr %856, i64 1
  %858 = load ptr, ptr %33, align 8, !tbaa !5
  %859 = load ptr, ptr %34, align 8, !tbaa !5
  %860 = load i64, ptr %55, align 8, !tbaa !9
  %861 = getelementptr inbounds %struct.doublecomplex, ptr %859, i64 %860
  %862 = load ptr, ptr %35, align 8, !tbaa !5
  %863 = load ptr, ptr %36, align 8, !tbaa !5
  %864 = load i64, ptr %57, align 8, !tbaa !9
  %865 = getelementptr inbounds %struct.doublecomplex, ptr %863, i64 %864
  %866 = load ptr, ptr %37, align 8, !tbaa !5
  %867 = load ptr, ptr %39, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %867, i64 1
  %869 = load ptr, ptr %40, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.doublecomplex, ptr %869, i64 1
  %871 = load ptr, ptr %41, align 8, !tbaa !5
  %872 = load i64, ptr %59, align 8, !tbaa !9
  %873 = getelementptr inbounds %struct.doublecomplex, ptr %871, i64 %872
  %874 = load ptr, ptr %42, align 8, !tbaa !5
  %875 = load ptr, ptr %43, align 8, !tbaa !5
  %876 = load i64, ptr %61, align 8, !tbaa !9
  %877 = getelementptr inbounds %struct.doublecomplex, ptr %875, i64 %876
  %878 = load ptr, ptr %44, align 8, !tbaa !5
  %879 = load ptr, ptr %38, align 8, !tbaa !5
  %880 = getelementptr inbounds [2 x double], ptr %67, i64 0, i64 0
  %881 = load ptr, ptr %47, align 8, !tbaa !5
  %882 = load i64, ptr %76, align 8, !tbaa !9
  %883 = getelementptr inbounds %struct.doublecomplex, ptr %881, i64 %882
  %884 = load ptr, ptr %50, align 8, !tbaa !5
  %885 = getelementptr inbounds i64, ptr %884, i64 1
  %886 = load ptr, ptr %51, align 8, !tbaa !5
  %887 = call i32 @ztgsen_(ptr noundef %71, ptr noundef %81, ptr noundef %82, ptr noundef %857, ptr noundef %858, ptr noundef %861, ptr noundef %862, ptr noundef %865, ptr noundef %866, ptr noundef %868, ptr noundef %870, ptr noundef %873, ptr noundef %874, ptr noundef %877, ptr noundef %878, ptr noundef %879, ptr noundef %65, ptr noundef %66, ptr noundef %880, ptr noundef %883, ptr noundef %62, ptr noundef %885, ptr noundef %886, ptr noundef %74)
  %888 = load i64, ptr %71, align 8, !tbaa !9
  %889 = icmp sge i64 %888, 1
  br i1 %889, label %890, label %910

890:                                              ; preds = %850
  %891 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %891, ptr %62, align 8, !tbaa !9
  %892 = load ptr, ptr %38, align 8, !tbaa !5
  %893 = load i64, ptr %892, align 8, !tbaa !9
  %894 = shl i64 %893, 1
  %895 = load ptr, ptr %33, align 8, !tbaa !5
  %896 = load i64, ptr %895, align 8, !tbaa !9
  %897 = load ptr, ptr %38, align 8, !tbaa !5
  %898 = load i64, ptr %897, align 8, !tbaa !9
  %899 = sub nsw i64 %896, %898
  %900 = mul nsw i64 %894, %899
  store i64 %900, ptr %63, align 8, !tbaa !9
  %901 = load i64, ptr %62, align 8, !tbaa !9
  %902 = load i64, ptr %63, align 8, !tbaa !9
  %903 = icmp sge i64 %901, %902
  br i1 %903, label %904, label %906

904:                                              ; preds = %890
  %905 = load i64, ptr %62, align 8, !tbaa !9
  br label %908

906:                                              ; preds = %890
  %907 = load i64, ptr %63, align 8, !tbaa !9
  br label %908

908:                                              ; preds = %906, %904
  %909 = phi i64 [ %905, %904 ], [ %907, %906 ]
  store i64 %909, ptr %97, align 8, !tbaa !9
  br label %910

910:                                              ; preds = %908, %850
  %911 = load i64, ptr %74, align 8, !tbaa !9
  %912 = icmp eq i64 %911, -21
  br i1 %912, label %913, label %915

913:                                              ; preds = %910
  %914 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 -21, ptr %914, align 8, !tbaa !9
  br label %952

915:                                              ; preds = %910
  %916 = load i64, ptr %71, align 8, !tbaa !9
  %917 = icmp eq i64 %916, 1
  br i1 %917, label %921, label %918

918:                                              ; preds = %915
  %919 = load i64, ptr %71, align 8, !tbaa !9
  %920 = icmp eq i64 %919, 4
  br i1 %920, label %921, label %928

921:                                              ; preds = %918, %915
  %922 = load double, ptr %65, align 8, !tbaa !15
  %923 = load ptr, ptr %45, align 8, !tbaa !5
  %924 = getelementptr inbounds double, ptr %923, i64 1
  store double %922, ptr %924, align 8, !tbaa !15
  %925 = load double, ptr %66, align 8, !tbaa !15
  %926 = load ptr, ptr %45, align 8, !tbaa !5
  %927 = getelementptr inbounds double, ptr %926, i64 2
  store double %925, ptr %927, align 8, !tbaa !15
  br label %928

928:                                              ; preds = %921, %918
  %929 = load i64, ptr %71, align 8, !tbaa !9
  %930 = icmp eq i64 %929, 2
  br i1 %930, label %934, label %931

931:                                              ; preds = %928
  %932 = load i64, ptr %71, align 8, !tbaa !9
  %933 = icmp eq i64 %932, 4
  br i1 %933, label %934, label %943

934:                                              ; preds = %931, %928
  %935 = getelementptr inbounds [2 x double], ptr %67, i64 0, i64 0
  %936 = load double, ptr %935, align 16, !tbaa !15
  %937 = load ptr, ptr %46, align 8, !tbaa !5
  %938 = getelementptr inbounds double, ptr %937, i64 1
  store double %936, ptr %938, align 8, !tbaa !15
  %939 = getelementptr inbounds [2 x double], ptr %67, i64 0, i64 1
  %940 = load double, ptr %939, align 8, !tbaa !15
  %941 = load ptr, ptr %46, align 8, !tbaa !5
  %942 = getelementptr inbounds double, ptr %941, i64 2
  store double %940, ptr %942, align 8, !tbaa !15
  br label %943

943:                                              ; preds = %934, %931
  %944 = load i64, ptr %74, align 8, !tbaa !9
  %945 = icmp eq i64 %944, 1
  br i1 %945, label %946, label %951

946:                                              ; preds = %943
  %947 = load ptr, ptr %33, align 8, !tbaa !5
  %948 = load i64, ptr %947, align 8, !tbaa !9
  %949 = add nsw i64 %948, 3
  %950 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 %949, ptr %950, align 8, !tbaa !9
  br label %951

951:                                              ; preds = %946, %943
  br label %952

952:                                              ; preds = %951, %913
  br label %953

953:                                              ; preds = %952, %807
  %954 = load i64, ptr %81, align 8, !tbaa !9
  %955 = icmp ne i64 %954, 0
  br i1 %955, label %956, label %970

956:                                              ; preds = %953
  %957 = load ptr, ptr %33, align 8, !tbaa !5
  %958 = load ptr, ptr %49, align 8, !tbaa !5
  %959 = load i64, ptr %78, align 8, !tbaa !9
  %960 = getelementptr inbounds double, ptr %958, i64 %959
  %961 = load ptr, ptr %49, align 8, !tbaa !5
  %962 = load i64, ptr %89, align 8, !tbaa !9
  %963 = getelementptr inbounds double, ptr %961, i64 %962
  %964 = load ptr, ptr %33, align 8, !tbaa !5
  %965 = load ptr, ptr %41, align 8, !tbaa !5
  %966 = load i64, ptr %59, align 8, !tbaa !9
  %967 = getelementptr inbounds %struct.doublecomplex, ptr %965, i64 %966
  %968 = load ptr, ptr %42, align 8, !tbaa !5
  %969 = call i32 @zggbak_(ptr noundef @.str.10, ptr noundef @.str.13, ptr noundef %957, ptr noundef %69, ptr noundef %68, ptr noundef %960, ptr noundef %963, ptr noundef %964, ptr noundef %967, ptr noundef %968, ptr noundef %74)
  br label %970

970:                                              ; preds = %956, %953
  %971 = load i64, ptr %82, align 8, !tbaa !9
  %972 = icmp ne i64 %971, 0
  br i1 %972, label %973, label %987

973:                                              ; preds = %970
  %974 = load ptr, ptr %33, align 8, !tbaa !5
  %975 = load ptr, ptr %49, align 8, !tbaa !5
  %976 = load i64, ptr %78, align 8, !tbaa !9
  %977 = getelementptr inbounds double, ptr %975, i64 %976
  %978 = load ptr, ptr %49, align 8, !tbaa !5
  %979 = load i64, ptr %89, align 8, !tbaa !9
  %980 = getelementptr inbounds double, ptr %978, i64 %979
  %981 = load ptr, ptr %33, align 8, !tbaa !5
  %982 = load ptr, ptr %43, align 8, !tbaa !5
  %983 = load i64, ptr %61, align 8, !tbaa !9
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %982, i64 %983
  %985 = load ptr, ptr %44, align 8, !tbaa !5
  %986 = call i32 @zggbak_(ptr noundef @.str.10, ptr noundef @.str.16, ptr noundef %974, ptr noundef %69, ptr noundef %68, ptr noundef %977, ptr noundef %980, ptr noundef %981, ptr noundef %984, ptr noundef %985, ptr noundef %74)
  br label %987

987:                                              ; preds = %973, %970
  %988 = load i64, ptr %85, align 8, !tbaa !9
  %989 = icmp ne i64 %988, 0
  br i1 %989, label %990, label %1003

990:                                              ; preds = %987
  %991 = load ptr, ptr %33, align 8, !tbaa !5
  %992 = load ptr, ptr %33, align 8, !tbaa !5
  %993 = load ptr, ptr %34, align 8, !tbaa !5
  %994 = load i64, ptr %55, align 8, !tbaa !9
  %995 = getelementptr inbounds %struct.doublecomplex, ptr %993, i64 %994
  %996 = load ptr, ptr %35, align 8, !tbaa !5
  %997 = call i32 @zlascl_(ptr noundef @.str.17, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %95, ptr noundef %72, ptr noundef %991, ptr noundef %992, ptr noundef %995, ptr noundef %996, ptr noundef %74)
  %998 = load ptr, ptr %33, align 8, !tbaa !5
  %999 = load ptr, ptr %39, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.doublecomplex, ptr %999, i64 1
  %1001 = load ptr, ptr %33, align 8, !tbaa !5
  %1002 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %95, ptr noundef %72, ptr noundef %998, ptr noundef @c__1, ptr noundef %1000, ptr noundef %1001, ptr noundef %74)
  br label %1003

1003:                                             ; preds = %990, %987
  %1004 = load i64, ptr %86, align 8, !tbaa !9
  %1005 = icmp ne i64 %1004, 0
  br i1 %1005, label %1006, label %1019

1006:                                             ; preds = %1003
  %1007 = load ptr, ptr %33, align 8, !tbaa !5
  %1008 = load ptr, ptr %33, align 8, !tbaa !5
  %1009 = load ptr, ptr %36, align 8, !tbaa !5
  %1010 = load i64, ptr %57, align 8, !tbaa !9
  %1011 = getelementptr inbounds %struct.doublecomplex, ptr %1009, i64 %1010
  %1012 = load ptr, ptr %37, align 8, !tbaa !5
  %1013 = call i32 @zlascl_(ptr noundef @.str.17, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %96, ptr noundef %73, ptr noundef %1007, ptr noundef %1008, ptr noundef %1011, ptr noundef %1012, ptr noundef %74)
  %1014 = load ptr, ptr %33, align 8, !tbaa !5
  %1015 = load ptr, ptr %40, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.doublecomplex, ptr %1015, i64 1
  %1017 = load ptr, ptr %33, align 8, !tbaa !5
  %1018 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %96, ptr noundef %73, ptr noundef %1014, ptr noundef @c__1, ptr noundef %1016, ptr noundef %1017, ptr noundef %74)
  br label %1019

1019:                                             ; preds = %1006, %1003
  %1020 = load i64, ptr %101, align 8, !tbaa !9
  %1021 = icmp ne i64 %1020, 0
  br i1 %1021, label %1022, label %1062

1022:                                             ; preds = %1019
  store i64 1, ptr %94, align 8, !tbaa !9
  %1023 = load ptr, ptr %38, align 8, !tbaa !5
  store i64 0, ptr %1023, align 8, !tbaa !9
  %1024 = load ptr, ptr %33, align 8, !tbaa !5
  %1025 = load i64, ptr %1024, align 8, !tbaa !9
  store i64 %1025, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %64, align 8, !tbaa !9
  br label %1026

1026:                                             ; preds = %1058, %1022
  %1027 = load i64, ptr %64, align 8, !tbaa !9
  %1028 = load i64, ptr %62, align 8, !tbaa !9
  %1029 = icmp sle i64 %1027, %1028
  br i1 %1029, label %1030, label %1061

1030:                                             ; preds = %1026
  %1031 = load ptr, ptr %31, align 8, !tbaa !5
  %1032 = load ptr, ptr %39, align 8, !tbaa !5
  %1033 = load i64, ptr %64, align 8, !tbaa !9
  %1034 = getelementptr inbounds %struct.doublecomplex, ptr %1032, i64 %1033
  %1035 = load ptr, ptr %40, align 8, !tbaa !5
  %1036 = load i64, ptr %64, align 8, !tbaa !9
  %1037 = getelementptr inbounds %struct.doublecomplex, ptr %1035, i64 %1036
  %1038 = call i64 (ptr, ptr, ...) %1031(ptr noundef %1034, ptr noundef %1037)
  store i64 %1038, ptr %80, align 8, !tbaa !9
  %1039 = load i64, ptr %80, align 8, !tbaa !9
  %1040 = icmp ne i64 %1039, 0
  br i1 %1040, label %1041, label %1045

1041:                                             ; preds = %1030
  %1042 = load ptr, ptr %38, align 8, !tbaa !5
  %1043 = load i64, ptr %1042, align 8, !tbaa !9
  %1044 = add nsw i64 %1043, 1
  store i64 %1044, ptr %1042, align 8, !tbaa !9
  br label %1045

1045:                                             ; preds = %1041, %1030
  %1046 = load i64, ptr %80, align 8, !tbaa !9
  %1047 = icmp ne i64 %1046, 0
  br i1 %1047, label %1048, label %1056

1048:                                             ; preds = %1045
  %1049 = load i64, ptr %94, align 8, !tbaa !9
  %1050 = icmp ne i64 %1049, 0
  br i1 %1050, label %1056, label %1051

1051:                                             ; preds = %1048
  %1052 = load ptr, ptr %33, align 8, !tbaa !5
  %1053 = load i64, ptr %1052, align 8, !tbaa !9
  %1054 = add nsw i64 %1053, 2
  %1055 = load ptr, ptr %53, align 8, !tbaa !5
  store i64 %1054, ptr %1055, align 8, !tbaa !9
  br label %1056

1056:                                             ; preds = %1051, %1048, %1045
  %1057 = load i64, ptr %80, align 8, !tbaa !9
  store i64 %1057, ptr %94, align 8, !tbaa !9
  br label %1058

1058:                                             ; preds = %1056
  %1059 = load i64, ptr %64, align 8, !tbaa !9
  %1060 = add nsw i64 %1059, 1
  store i64 %1060, ptr %64, align 8, !tbaa !9
  br label %1026, !llvm.loop !18

1061:                                             ; preds = %1026
  br label %1062

1062:                                             ; preds = %1061, %1019
  br label %1063

1063:                                             ; preds = %1062, %806
  %1064 = load i64, ptr %97, align 8, !tbaa !9
  %1065 = sitofp i64 %1064 to double
  %1066 = load ptr, ptr %47, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.doublecomplex, ptr %1066, i64 1
  %1068 = getelementptr inbounds %struct.doublecomplex, ptr %1067, i32 0, i32 0
  store double %1065, ptr %1068, align 8, !tbaa !11
  %1069 = load ptr, ptr %47, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.doublecomplex, ptr %1069, i64 1
  %1071 = getelementptr inbounds %struct.doublecomplex, ptr %1070, i32 0, i32 1
  store double 0.000000e+00, ptr %1071, align 8, !tbaa !14
  %1072 = load i64, ptr %92, align 8, !tbaa !9
  %1073 = load ptr, ptr %50, align 8, !tbaa !5
  %1074 = getelementptr inbounds i64, ptr %1073, i64 1
  store i64 %1072, ptr %1074, align 8, !tbaa !9
  store i32 0, ptr %27, align 4
  store i32 1, ptr %104, align 4
  br label %1075

1075:                                             ; preds = %1063, %472, %466, %458
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 16, 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
  %1076 = load i32, ptr %27, align 4
  ret i32 %1076
}

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

declare i32 @zunmqr_(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 @zlaset_(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 @zungqr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare i32 @zggbak_(ptr noundef, 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"}
!18 = distinct !{!18, !17}


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@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
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1

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

59:                                               ; preds = %26
  store i64 0, ptr %39, align 8, !tbaa !5
  br label %64

60:                                               ; preds = %26
  %61 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not404 = icmp eq i64 %61, 0
  br i1 %.not404, label %63, label %62

62:                                               ; preds = %60
  store i64 1, ptr %39, align 8, !tbaa !5
  br label %64

63:                                               ; preds = %60
  store i64 0, ptr %39, align 8, !tbaa !5
  br label %64

64:                                               ; preds = %62, %63, %59
  %.not412 = phi i1 [ false, %59 ], [ true, %62 ], [ false, %63 ]
  %.not415 = phi i1 [ true, %59 ], [ false, %62 ], [ true, %63 ]
  %65 = phi i1 [ false, %59 ], [ false, %62 ], [ true, %63 ]
  %66 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #5
  %.not405 = icmp eq i64 %66, 0
  br i1 %.not405, label %68, label %67

67:                                               ; preds = %64
  store i64 0, ptr %40, align 8, !tbaa !5
  br label %72

68:                                               ; preds = %64
  %69 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %.not406 = icmp eq i64 %69, 0
  br i1 %.not406, label %71, label %70

70:                                               ; preds = %68
  store i64 1, ptr %40, align 8, !tbaa !5
  br label %72

71:                                               ; preds = %68
  store i64 0, ptr %40, align 8, !tbaa !5
  br label %72

72:                                               ; preds = %70, %71, %67
  %.not413 = phi i1 [ false, %67 ], [ true, %70 ], [ false, %71 ]
  %.not422 = phi i1 [ true, %67 ], [ false, %70 ], [ true, %71 ]
  %73 = phi i1 [ false, %67 ], [ false, %70 ], [ true, %71 ]
  %74 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.2) #5
  %75 = tail call i64 @lsame_(ptr noundef %4, ptr noundef nonnull @.str) #5
  %76 = tail call i64 @lsame_(ptr noundef %4, ptr noundef nonnull @.str.3) #5
  %77 = tail call i64 @lsame_(ptr noundef %4, ptr noundef nonnull @.str.1) #5
  %78 = tail call i64 @lsame_(ptr noundef %4, ptr noundef nonnull @.str.4) #5
  %79 = load i64, ptr %20, align 8, !tbaa !5
  %80 = icmp eq i64 %79, -1
  br i1 %80, label %84, label %81

81:                                               ; preds = %72
  %82 = load i64, ptr %23, align 8, !tbaa !5
  %83 = icmp eq i64 %82, -1
  br label %84

84:                                               ; preds = %81, %72
  %85 = phi i1 [ true, %72 ], [ %83, %81 ]
  %86 = icmp eq i64 %75, 0
  br i1 %86, label %88, label %87

87:                                               ; preds = %84
  store i64 0, ptr %34, align 8, !tbaa !5
  br label %94

88:                                               ; preds = %84
  %.not407 = icmp eq i64 %76, 0
  br i1 %.not407, label %90, label %89

89:                                               ; preds = %88
  store i64 1, ptr %34, align 8, !tbaa !5
  br label %94

90:                                               ; preds = %88
  %.not408 = icmp eq i64 %77, 0
  br i1 %.not408, label %92, label %91

91:                                               ; preds = %90
  store i64 2, ptr %34, align 8, !tbaa !5
  br label %94

92:                                               ; preds = %90
  %.not409 = icmp eq i64 %78, 0
  br i1 %.not409, label %94, label %93

93:                                               ; preds = %92
  store i64 4, ptr %34, align 8, !tbaa !5
  br label %94

94:                                               ; preds = %89, %92, %93, %91, %87
  %95 = phi i1 [ true, %89 ], [ false, %92 ], [ true, %93 ], [ true, %91 ], [ false, %87 ]
  store i64 0, ptr %25, align 8, !tbaa !5
  %brmerge = or i1 %65, %73
  %.mux = select i1 %65, i64 -1, i64 -2
  br i1 %brmerge, label %.thread442.sink.split, label %96

96:                                               ; preds = %94
  %.not411 = icmp eq i64 %74, 0
  br i1 %.not411, label %97, label %99

97:                                               ; preds = %96
  %98 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str) #5
  %.not410 = icmp eq i64 %98, 0
  br i1 %.not410, label %.thread442.sink.split, label %99

99:                                               ; preds = %97, %96
  %100 = icmp eq i64 %76, 0
  %or.cond.not = select i1 %86, i1 %100, i1 false
  %101 = icmp eq i64 %77, 0
  %or.cond3 = select i1 %or.cond.not, i1 %101, i1 false
  %102 = icmp eq i64 %78, 0
  %or.cond5 = select i1 %or.cond3, i1 %102, i1 false
  %103 = or i64 %75, %74
  %or.cond7.not = icmp eq i64 %103, 0
  %or.cond433 = select i1 %or.cond5, i1 true, i1 %or.cond7.not
  br i1 %or.cond433, label %.thread442.sink.split, label %104

104:                                              ; preds = %99
  %105 = load i64, ptr %5, align 8, !tbaa !5
  %106 = icmp slt i64 %105, 0
  br i1 %106, label %.thread442.sink.split, label %107

107:                                              ; preds = %104
  %108 = load i64, ptr %7, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %105, i64 1)
  %109 = icmp slt i64 %108, %spec.select
  br i1 %109, label %.thread442.sink.split, label %110

110:                                              ; preds = %107
  %111 = load i64, ptr %9, align 8, !tbaa !5
  %112 = icmp slt i64 %111, %spec.select
  br i1 %112, label %.thread442.sink.split, label %113

113:                                              ; preds = %110
  %114 = load i64, ptr %14, align 8, !tbaa !5
  %115 = icmp slt i64 %114, 1
  %116 = icmp ult i64 %114, %105
  %or.cond462 = and i1 %116, %.not412
  %or.cond479 = or i1 %115, %or.cond462
  br i1 %or.cond479, label %.thread442.sink.split, label %117

117:                                              ; preds = %113
  %118 = load i64, ptr %16, align 8, !tbaa !5
  %119 = icmp slt i64 %118, 1
  %120 = icmp ult i64 %118, %105
  %or.cond463 = and i1 %120, %.not413
  %or.cond480 = or i1 %119, %or.cond463
  br i1 %or.cond480, label %.thread442.sink.split, label %121

121:                                              ; preds = %117
  %.pr = load i64, ptr %25, align 8, !tbaa !5
  %122 = icmp eq i64 %.pr, 0
  br i1 %122, label %123, label %.thread442

123:                                              ; preds = %121
  %.not478 = icmp eq i64 %105, 0
  br i1 %.not478, label %146, label %124

124:                                              ; preds = %123
  %125 = shl nuw i64 %105, 1
  %126 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef nonnull %5, ptr noundef nonnull @c__0) #5
  %127 = add nsw i64 %126, 1
  %128 = mul nsw i64 %127, %105
  store i64 %128, ptr %27, align 8, !tbaa !5
  %129 = load i64, ptr %5, align 8, !tbaa !5
  %130 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.6, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef nonnull %5, ptr noundef nonnull @c_n1) #5
  %131 = add nsw i64 %130, 1
  %132 = mul nsw i64 %131, %129
  store i64 %132, ptr %28, align 8, !tbaa !5
  %133 = tail call i64 @llvm.smax.i64(i64 %128, i64 %132)
  br i1 %.not415, label %140, label %134

134:                                              ; preds = %124
  store i64 %133, ptr %27, align 8, !tbaa !5
  %135 = load i64, ptr %5, align 8, !tbaa !5
  %136 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.6, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef nonnull %5, ptr noundef nonnull @c_n1) #5
  %137 = add nsw i64 %136, 1
  %138 = mul nsw i64 %137, %135
  store i64 %138, ptr %28, align 8, !tbaa !5
  %139 = tail call i64 @llvm.smax.i64(i64 %133, i64 %138)
  br label %140

140:                                              ; preds = %134, %124
  %.0377 = phi i64 [ %139, %134 ], [ %133, %124 ]
  br i1 %95, label %141, label %146

141:                                              ; preds = %140
  store i64 %.0377, ptr %27, align 8, !tbaa !5
  %142 = load i64, ptr %5, align 8, !tbaa !5
  %143 = mul nsw i64 %142, %142
  %144 = lshr i64 %143, 1
  store i64 %144, ptr %28, align 8, !tbaa !5
  %145 = tail call i64 @llvm.smax.i64(i64 %.0377, i64 %144)
  br label %146

146:                                              ; preds = %123, %140, %141
  %.0385 = phi i64 [ %145, %141 ], [ %.0377, %140 ], [ 1, %123 ]
  %.1 = phi i64 [ %.0377, %141 ], [ %.0377, %140 ], [ 1, %123 ]
  %.0376 = phi i64 [ %125, %141 ], [ %125, %140 ], [ 1, %123 ]
  %147 = sitofp i64 %.0385 to double
  store double %147, ptr %19, align 8, !tbaa !9
  %148 = getelementptr inbounds i8, ptr %19, i64 8
  store double 0.000000e+00, ptr %148, align 8, !tbaa !12
  br i1 %86, label %149, label %153

149:                                              ; preds = %146
  %150 = load i64, ptr %5, align 8, !tbaa !5
  %151 = icmp eq i64 %150, 0
  %152 = add nsw i64 %150, 2
  %spec.select436 = select i1 %151, i64 1, i64 %152
  br label %153

153:                                              ; preds = %149, %146
  %.0379 = phi i64 [ 1, %146 ], [ %spec.select436, %149 ]
  store i64 %.0379, ptr %22, align 8, !tbaa !5
  %154 = load i64, ptr %20, align 8, !tbaa !5
  %155 = icmp sge i64 %154, %.0376
  %or.cond9 = select i1 %155, i1 true, i1 %85
  br i1 %or.cond9, label %156, label %.thread442.sink.split

156:                                              ; preds = %153
  %157 = load i64, ptr %23, align 8, !tbaa !5
  %158 = icmp sge i64 %157, %.0379
  %or.cond11 = select i1 %158, i1 true, i1 %85
  br i1 %or.cond11, label %.thread, label %.thread442.sink.split

.thread:                                          ; preds = %156
  %.pr438.pr = load i64, ptr %25, align 8, !tbaa !5
  %.not418 = icmp eq i64 %.pr438.pr, 0
  br i1 %.not418, label %162, label %.thread442

.thread442.sink.split:                            ; preds = %94, %156, %153, %117, %113, %110, %107, %104, %99, %97
  %.sink = phi i64 [ %.mux, %94 ], [ -3, %97 ], [ -5, %99 ], [ -6, %104 ], [ -8, %107 ], [ -10, %110 ], [ -15, %113 ], [ -17, %117 ], [ -21, %153 ], [ -24, %156 ]
  store i64 %.sink, ptr %25, align 8, !tbaa !5
  br label %.thread442

.thread442:                                       ; preds = %.thread442.sink.split, %121, %.thread
  %159 = phi i64 [ %.pr438.pr, %.thread ], [ %.pr, %121 ], [ %.sink, %.thread442.sink.split ]
  %160 = sub nsw i64 0, %159
  store i64 %160, ptr %27, align 8, !tbaa !5
  %161 = call i32 @xerbla_(ptr noundef nonnull @.str.9, ptr noundef nonnull %27) #5
  br label %334

162:                                              ; preds = %.thread
  br i1 %85, label %334, label %163

163:                                              ; preds = %162
  %164 = load i64, ptr %5, align 8, !tbaa !5
  %165 = icmp eq i64 %164, 0
  br i1 %165, label %166, label %167

166:                                              ; preds = %163
  store i64 0, ptr %10, align 8, !tbaa !5
  br label %334

167:                                              ; preds = %163
  %168 = tail call double @dlamch_(ptr noundef nonnull @.str.10) #5
  %169 = tail call double @dlamch_(ptr noundef nonnull @.str.2) #5
  store double %169, ptr %45, align 8, !tbaa !13
  %170 = fdiv double 1.000000e+00, %169
  store double %170, ptr %42, align 8, !tbaa !13
  %171 = call i32 @dlabad_(ptr noundef nonnull %45, ptr noundef nonnull %42) #5
  %172 = load double, ptr %45, align 8, !tbaa !13
  %173 = call double @sqrt(double noundef %172) #5
  %174 = fdiv double %173, %168
  store double %174, ptr %45, align 8, !tbaa !13
  %175 = fdiv double 1.000000e+00, %174
  store double %175, ptr %42, align 8, !tbaa !13
  %176 = call double @zlange_(ptr noundef nonnull @.str.11, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %21) #5
  store double %176, ptr %35, align 8, !tbaa !13
  %177 = fcmp ogt double %176, 0.000000e+00
  %178 = load double, ptr %45, align 8
  %179 = fcmp olt double %176, %178
  %or.cond = select i1 %177, i1 %179, i1 false
  br i1 %or.cond, label %183, label %180

180:                                              ; preds = %167
  %181 = load double, ptr %42, align 8, !tbaa !13
  %182 = fcmp ogt double %176, %181
  br i1 %182, label %183, label %185

183:                                              ; preds = %167, %180
  %storemerge = phi double [ %181, %180 ], [ %178, %167 ]
  store double %storemerge, ptr %43, align 8, !tbaa !13
  %184 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %35, ptr noundef nonnull %43, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %37) #5
  br label %185

185:                                              ; preds = %180, %183
  %.not419450 = phi i1 [ false, %183 ], [ true, %180 ]
  %186 = call double @zlange_(ptr noundef nonnull @.str.11, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %21) #5
  store double %186, ptr %36, align 8, !tbaa !13
  %187 = fcmp ogt double %186, 0.000000e+00
  %188 = load double, ptr %45, align 8
  %189 = fcmp olt double %186, %188
  %or.cond469 = select i1 %187, i1 %189, i1 false
  br i1 %or.cond469, label %193, label %190

190:                                              ; preds = %185
  %191 = load double, ptr %42, align 8, !tbaa !13
  %192 = fcmp ogt double %186, %191
  br i1 %192, label %193, label %195

193:                                              ; preds = %185, %190
  %storemerge466 = phi double [ %191, %190 ], [ %188, %185 ]
  store double %storemerge466, ptr %44, align 8, !tbaa !13
  %194 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %36, ptr noundef nonnull %44, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %37) #5
  br label %195

195:                                              ; preds = %190, %193
  %.not420455 = phi i1 [ false, %193 ], [ true, %190 ]
  %196 = load i64, ptr %5, align 8, !tbaa !5
  %197 = getelementptr double, ptr %21, i64 %196
  %.idx = shl i64 %196, 4
  %198 = getelementptr i8, ptr %21, i64 %.idx
  %199 = call i32 @zggbal_(ptr noundef nonnull @.str.10, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %21, ptr noundef %197, ptr noundef %198, ptr noundef nonnull %37) #5
  %200 = load i64, ptr %32, align 8, !tbaa !5
  %201 = add nsw i64 %200, 1
  %202 = load i64, ptr %33, align 8, !tbaa !5
  %203 = sub i64 %201, %202
  store i64 %203, ptr %41, align 8, !tbaa !5
  %204 = load i64, ptr %5, align 8, !tbaa !5
  %reass.sub = sub i64 %204, %202
  %205 = add i64 %reass.sub, 1
  store i64 %205, ptr %38, align 8, !tbaa !5
  %206 = load i64, ptr %20, align 8, !tbaa !5
  %207 = sub i64 %206, %203
  store i64 %207, ptr %27, align 8, !tbaa !5
  %208 = add i64 %49, 1
  %209 = mul i64 %202, %208
  %210 = getelementptr inbounds %struct.doublecomplex, ptr %51, i64 %209
  %211 = getelementptr %struct.doublecomplex, ptr %19, i64 %203
  %212 = call i32 @zgeqrf_(ptr noundef nonnull %41, ptr noundef nonnull %38, ptr noundef %210, ptr noundef nonnull %9, ptr noundef nonnull %19, ptr noundef %211, ptr noundef nonnull %27, ptr noundef nonnull %37) #5
  %213 = load i64, ptr %20, align 8, !tbaa !5
  %214 = sub i64 %213, %203
  store i64 %214, ptr %27, align 8, !tbaa !5
  %215 = load i64, ptr %33, align 8, !tbaa !5
  %216 = mul i64 %215, %208
  %217 = getelementptr inbounds %struct.doublecomplex, ptr %51, i64 %216
  %218 = add i64 %46, 1
  %219 = mul i64 %215, %218
  %220 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %219
  %221 = call i32 @zunmqr_(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14, ptr noundef nonnull %41, ptr noundef nonnull %38, ptr noundef nonnull %41, ptr noundef %217, ptr noundef nonnull %9, ptr noundef nonnull %19, ptr noundef %220, ptr noundef nonnull %7, ptr noundef %211, ptr noundef nonnull %27, ptr noundef nonnull %37) #5
  br i1 %.not415, label %245, label %222

222:                                              ; preds = %195
  %223 = call i32 @zlaset_(ptr noundef nonnull @.str.15, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %13, ptr noundef nonnull %14) #5
  %224 = load i64, ptr %41, align 8, !tbaa !5
  %225 = icmp sgt i64 %224, 1
  br i1 %225, label %226, label %237

226:                                              ; preds = %222
  %227 = add nsw i64 %224, -1
  store i64 %227, ptr %27, align 8, !tbaa !5
  store i64 %227, ptr %28, align 8, !tbaa !5
  %228 = load i64, ptr %33, align 8, !tbaa !5
  %229 = add nsw i64 %228, 1
  %230 = mul nsw i64 %228, %49
  %231 = getelementptr %struct.doublecomplex, ptr %51, i64 %229
  %232 = getelementptr %struct.doublecomplex, ptr %231, i64 %230
  %233 = mul nsw i64 %228, %54
  %234 = getelementptr %struct.doublecomplex, ptr %56, i64 %229
  %235 = getelementptr %struct.doublecomplex, ptr %234, i64 %233
  %236 = call i32 @zlacpy_(ptr noundef nonnull @.str.13, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef %232, ptr noundef nonnull %9, ptr noundef %235, ptr noundef nonnull %14) #5
  br label %237

237:                                              ; preds = %226, %222
  %238 = load i64, ptr %20, align 8, !tbaa !5
  %239 = sub i64 %238, %203
  store i64 %239, ptr %27, align 8, !tbaa !5
  %240 = load i64, ptr %33, align 8, !tbaa !5
  %241 = add i64 %54, 1
  %242 = mul i64 %240, %241
  %243 = getelementptr inbounds %struct.doublecomplex, ptr %56, i64 %242
  %244 = call i32 @zungqr_(ptr noundef nonnull %41, ptr noundef nonnull %41, ptr noundef nonnull %41, ptr noundef %243, ptr noundef nonnull %14, ptr noundef nonnull %19, ptr noundef %211, ptr noundef nonnull %27, ptr noundef nonnull %37) #5
  br label %245

245:                                              ; preds = %237, %195
  br i1 %.not422, label %248, label %246

246:                                              ; preds = %245
  %247 = call i32 @zlaset_(ptr noundef nonnull @.str.15, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %15, ptr noundef nonnull %16) #5
  br label %248

248:                                              ; preds = %246, %245
  %249 = call i32 @zgghrd_(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %5, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %13, ptr noundef nonnull %14, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %37) #5
  store i64 0, ptr %10, align 8, !tbaa !5
  %250 = load i64, ptr %20, align 8, !tbaa !5
  store i64 %250, ptr %27, align 8, !tbaa !5
  %251 = call i32 @zhgeqz_(ptr noundef nonnull @.str.2, ptr noundef %0, ptr noundef %1, ptr noundef nonnull %5, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %19, ptr noundef nonnull %27, ptr noundef %198, ptr noundef nonnull %37) #5
  %252 = load i64, ptr %37, align 8, !tbaa !5
  %.not423 = icmp eq i64 %252, 0
  br i1 %.not423, label %262, label %253

253:                                              ; preds = %248
  %254 = icmp slt i64 %252, 1
  %.pre = load i64, ptr %5, align 8, !tbaa !5
  %.not431 = icmp sgt i64 %252, %.pre
  %or.cond481 = select i1 %254, i1 true, i1 %.not431
  br i1 %or.cond481, label %255, label %.loopexit.sink.split

255:                                              ; preds = %253
  %256 = icmp sle i64 %252, %.pre
  %257 = shl i64 %.pre, 1
  %.not432 = icmp sgt i64 %252, %257
  %or.cond435 = or i1 %256, %.not432
  br i1 %or.cond435, label %260, label %258

258:                                              ; preds = %255
  %259 = sub nsw i64 %252, %.pre
  br label %.loopexit.sink.split

260:                                              ; preds = %255
  %261 = add nsw i64 %.pre, 1
  br label %.loopexit.sink.split

262:                                              ; preds = %248
  br i1 %.not411, label %303, label %263

263:                                              ; preds = %262
  br i1 %.not419450, label %266, label %264

264:                                              ; preds = %263
  %265 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %43, ptr noundef nonnull %35, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef %11, ptr noundef nonnull %5, ptr noundef nonnull %37) #5
  br label %266

266:                                              ; preds = %264, %263
  br i1 %.not420455, label %269, label %267

267:                                              ; preds = %266
  %268 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %44, ptr noundef nonnull %36, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef %12, ptr noundef nonnull %5, ptr noundef nonnull %37) #5
  br label %269

269:                                              ; preds = %267, %266
  %270 = load i64, ptr %5, align 8, !tbaa !5
  store i64 %270, ptr %27, align 8, !tbaa !5
  %.not425470 = icmp slt i64 %270, 1
  br i1 %.not425470, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %269, %.lr.ph
  %.0386471 = phi i64 [ %275, %.lr.ph ], [ 1, %269 ]
  %271 = getelementptr inbounds %struct.doublecomplex, ptr %52, i64 %.0386471
  %272 = getelementptr inbounds %struct.doublecomplex, ptr %53, i64 %.0386471
  %273 = call i64 (ptr, ptr, ...) %3(ptr noundef nonnull %271, ptr noundef nonnull %272) #5
  %274 = getelementptr inbounds i64, ptr %57, i64 %.0386471
  store i64 %273, ptr %274, align 8, !tbaa !5
  %275 = add nuw nsw i64 %.0386471, 1
  %276 = load i64, ptr %27, align 8, !tbaa !5
  %.not425.not = icmp slt i64 %.0386471, %276
  br i1 %.not425.not, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %269
  %277 = load i64, ptr %20, align 8, !tbaa !5
  store i64 %277, ptr %27, align 8, !tbaa !5
  %278 = call i32 @ztgsen_(ptr noundef nonnull %34, ptr noundef nonnull %39, ptr noundef nonnull %40, ptr noundef %24, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %10, ptr noundef nonnull %29, ptr noundef nonnull %30, ptr noundef nonnull %31, ptr noundef nonnull %19, ptr noundef nonnull %27, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %37) #5
  %279 = load i64, ptr %34, align 8
  %280 = icmp sgt i64 %279, 0
  br i1 %280, label %281, label %288

281:                                              ; preds = %._crit_edge
  store i64 %.1, ptr %27, align 8, !tbaa !5
  %282 = load i64, ptr %10, align 8, !tbaa !5
  %283 = shl i64 %282, 1
  %284 = load i64, ptr %5, align 8, !tbaa !5
  %285 = sub nsw i64 %284, %282
  %286 = mul nsw i64 %285, %283
  store i64 %286, ptr %28, align 8, !tbaa !5
  %287 = call i64 @llvm.smax.i64(i64 %.1, i64 %286)
  br label %288

288:                                              ; preds = %281, %._crit_edge
  %.3 = phi i64 [ %287, %281 ], [ %.1, %._crit_edge ]
  %289 = load i64, ptr %37, align 8, !tbaa !5
  %290 = icmp eq i64 %289, -21
  br i1 %290, label %.sink.split, label %291

291:                                              ; preds = %288
  switch i64 %279, label %298 [
    i64 4, label %292
    i64 1, label %292
    i64 2, label %296
  ]

292:                                              ; preds = %291, %291
  %293 = load double, ptr %29, align 8, !tbaa !13
  store double %293, ptr %17, align 8, !tbaa !13
  %294 = load double, ptr %30, align 8, !tbaa !13
  %295 = getelementptr inbounds i8, ptr %17, i64 8
  store double %294, ptr %295, align 8, !tbaa !13
  switch i64 %279, label %298 [
    i64 4, label %296
    i64 2, label %296
  ]

296:                                              ; preds = %291, %292, %292
  %297 = load <2 x double>, ptr %31, align 16, !tbaa !13
  store <2 x double> %297, ptr %18, align 8, !tbaa !13
  br label %298

298:                                              ; preds = %291, %292, %296
  %299 = icmp eq i64 %289, 1
  br i1 %299, label %300, label %303

300:                                              ; preds = %298
  %301 = load i64, ptr %5, align 8, !tbaa !5
  %302 = add nsw i64 %301, 3
  br label %.sink.split

.sink.split:                                      ; preds = %288, %300
  %.sink482 = phi i64 [ %302, %300 ], [ -21, %288 ]
  store i64 %.sink482, ptr %25, align 8, !tbaa !5
  br label %303

303:                                              ; preds = %.sink.split, %298, %262
  %.4 = phi i64 [ %.3, %298 ], [ %.1, %262 ], [ %.3, %.sink.split ]
  %304 = load i64, ptr %39, align 8, !tbaa !5
  %.not427 = icmp eq i64 %304, 0
  br i1 %.not427, label %307, label %305

305:                                              ; preds = %303
  %306 = call i32 @zggbak_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.13, ptr noundef nonnull %5, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %21, ptr noundef %197, ptr noundef nonnull %5, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %37) #5
  br label %307

307:                                              ; preds = %305, %303
  %308 = load i64, ptr %40, align 8, !tbaa !5
  %.not428 = icmp eq i64 %308, 0
  br i1 %.not428, label %311, label %309

309:                                              ; preds = %307
  %310 = call i32 @zggbak_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.16, ptr noundef nonnull %5, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %21, ptr noundef %197, ptr noundef nonnull %5, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %37) #5
  br label %311

311:                                              ; preds = %309, %307
  br i1 %.not419450, label %315, label %312

312:                                              ; preds = %311
  %313 = call i32 @zlascl_(ptr noundef nonnull @.str.17, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %43, ptr noundef nonnull %35, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %37) #5
  %314 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %43, ptr noundef nonnull %35, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef %11, ptr noundef nonnull %5, ptr noundef nonnull %37) #5
  br label %315

315:                                              ; preds = %312, %311
  br i1 %.not420455, label %319, label %316

316:                                              ; preds = %315
  %317 = call i32 @zlascl_(ptr noundef nonnull @.str.17, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %44, ptr noundef nonnull %36, ptr noundef nonnull %5, ptr noundef nonnull %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %37) #5
  %318 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %44, ptr noundef nonnull %36, ptr noundef nonnull %5, ptr noundef nonnull @c__1, ptr noundef %12, ptr noundef nonnull %5, ptr noundef nonnull %37) #5
  br label %319

319:                                              ; preds = %316, %315
  br i1 %.not411, label %.loopexit, label %320

320:                                              ; preds = %319
  store i64 0, ptr %10, align 8, !tbaa !5
  %321 = load i64, ptr %5, align 8, !tbaa !5
  store i64 %321, ptr %27, align 8, !tbaa !5
  %.not429472 = icmp slt i64 %321, 1
  br i1 %.not429472, label %.loopexit, label %.lr.ph476

.lr.ph476:                                        ; preds = %320, %.thread456
  %.0378474 = phi i64 [ %324, %.thread456 ], [ 1, %320 ]
  %.1387473 = phi i64 [ %331, %.thread456 ], [ 1, %320 ]
  %322 = getelementptr inbounds %struct.doublecomplex, ptr %52, i64 %.1387473
  %323 = getelementptr inbounds %struct.doublecomplex, ptr %53, i64 %.1387473
  %324 = call i64 (ptr, ptr, ...) %3(ptr noundef nonnull %322, ptr noundef nonnull %323) #5
  %.not430 = icmp eq i64 %324, 0
  br i1 %.not430, label %.thread456, label %325

325:                                              ; preds = %.lr.ph476
  %326 = load i64, ptr %10, align 8, !tbaa !5
  %327 = add nsw i64 %326, 1
  store i64 %327, ptr %10, align 8, !tbaa !5
  %.not477 = icmp eq i64 %.0378474, 0
  br i1 %.not477, label %328, label %.thread456

328:                                              ; preds = %325
  %329 = load i64, ptr %5, align 8, !tbaa !5
  %330 = add nsw i64 %329, 2
  store i64 %330, ptr %25, align 8, !tbaa !5
  br label %.thread456

.thread456:                                       ; preds = %.lr.ph476, %328, %325
  %331 = add nuw nsw i64 %.1387473, 1
  %332 = load i64, ptr %27, align 8, !tbaa !5
  %.not429.not = icmp slt i64 %.1387473, %332
  br i1 %.not429.not, label %.lr.ph476, label %.loopexit, !llvm.loop !16

.loopexit.sink.split:                             ; preds = %253, %258, %260
  %.sink483 = phi i64 [ %261, %260 ], [ %259, %258 ], [ %252, %253 ]
  store i64 %.sink483, ptr %25, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.thread456, %.loopexit.sink.split, %320, %319
  %.5 = phi i64 [ %.4, %319 ], [ %.4, %320 ], [ %.1, %.loopexit.sink.split ], [ %.4, %.thread456 ]
  %333 = sitofp i64 %.5 to double
  store double %333, ptr %19, align 8, !tbaa !9
  store double 0.000000e+00, ptr %148, align 8, !tbaa !12
  store i64 %.0379, ptr %22, align 8, !tbaa !5
  br label %334

334:                                              ; preds = %162, %.loopexit, %166, %.thread442
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #5
  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
  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 @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 @zggbal_(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 @zgeqrf_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @zunmqr_(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 @zlaset_(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 @zungqr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare i32 @zggbak_(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

; 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"}
!16 = distinct !{!16, !15}


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