; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (zggev)

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

%struct.doublecomplex = type { double, double }

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

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

137:                                              ; preds = %17
  store i32 1, ptr %72, align 4, !tbaa !9
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %145

138:                                              ; preds = %17
  %139 = load ptr, ptr %18, align 8, !tbaa !5
  %140 = call i32 @lsame_(ptr noundef %139, ptr noundef @.str.1)
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %143

142:                                              ; preds = %138
  store i32 2, ptr %72, align 4, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !9
  br label %144

143:                                              ; preds = %138
  store i32 -1, ptr %72, align 4, !tbaa !9
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %144

144:                                              ; preds = %143, %142
  br label %145

145:                                              ; preds = %144, %137
  %146 = load ptr, ptr %19, align 8, !tbaa !5
  %147 = call i32 @lsame_(ptr noundef %146, ptr noundef @.str)
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %149, label %150

149:                                              ; preds = %145
  store i32 1, ptr %74, align 4, !tbaa !9
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %157

150:                                              ; preds = %145
  %151 = load ptr, ptr %19, align 8, !tbaa !5
  %152 = call i32 @lsame_(ptr noundef %151, ptr noundef @.str.1)
  %153 = icmp ne i32 %152, 0
  br i1 %153, label %154, label %155

154:                                              ; preds = %150
  store i32 2, ptr %74, align 4, !tbaa !9
  store i32 1, ptr %58, align 4, !tbaa !9
  br label %156

155:                                              ; preds = %150
  store i32 -1, ptr %74, align 4, !tbaa !9
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %156

156:                                              ; preds = %155, %154
  br label %157

157:                                              ; preds = %156, %149
  %158 = load i32, ptr %57, align 4, !tbaa !9
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %163, label %160

160:                                              ; preds = %157
  %161 = load i32, ptr %58, align 4, !tbaa !9
  %162 = icmp ne i32 %161, 0
  br label %163

163:                                              ; preds = %160, %157
  %164 = phi i1 [ true, %157 ], [ %162, %160 ]
  %165 = zext i1 %164 to i32
  store i32 %165, ptr %84, align 4, !tbaa !9
  %166 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 0, ptr %166, align 4, !tbaa !9
  %167 = load ptr, ptr %32, align 8, !tbaa !5
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = icmp eq i32 %168, -1
  %170 = zext i1 %169 to i32
  store i32 %170, ptr %80, align 4, !tbaa !9
  %171 = load i32, ptr %72, align 4, !tbaa !9
  %172 = icmp sle i32 %171, 0
  br i1 %172, label %173, label %175

173:                                              ; preds = %163
  %174 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -1, ptr %174, align 4, !tbaa !9
  br label %252

175:                                              ; preds = %163
  %176 = load i32, ptr %74, align 4, !tbaa !9
  %177 = icmp sle i32 %176, 0
  br i1 %177, label %178, label %180

178:                                              ; preds = %175
  %179 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -2, ptr %179, align 4, !tbaa !9
  br label %251

180:                                              ; preds = %175
  %181 = load ptr, ptr %20, align 8, !tbaa !5
  %182 = load i32, ptr %181, align 4, !tbaa !9
  %183 = icmp slt i32 %182, 0
  br i1 %183, label %184, label %186

184:                                              ; preds = %180
  %185 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -3, ptr %185, align 4, !tbaa !9
  br label %250

186:                                              ; preds = %180
  %187 = load ptr, ptr %22, align 8, !tbaa !5
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = load ptr, ptr %20, align 8, !tbaa !5
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = icmp sge i32 1, %190
  br i1 %191, label %192, label %193

192:                                              ; preds = %186
  br label %196

193:                                              ; preds = %186
  %194 = load ptr, ptr %20, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %193, %192
  %197 = phi i32 [ 1, %192 ], [ %195, %193 ]
  %198 = icmp slt i32 %188, %197
  br i1 %198, label %199, label %201

199:                                              ; preds = %196
  %200 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -5, ptr %200, align 4, !tbaa !9
  br label %249

201:                                              ; preds = %196
  %202 = load ptr, ptr %24, align 8, !tbaa !5
  %203 = load i32, ptr %202, align 4, !tbaa !9
  %204 = load ptr, ptr %20, align 8, !tbaa !5
  %205 = load i32, ptr %204, align 4, !tbaa !9
  %206 = icmp sge i32 1, %205
  br i1 %206, label %207, label %208

207:                                              ; preds = %201
  br label %211

208:                                              ; preds = %201
  %209 = load ptr, ptr %20, align 8, !tbaa !5
  %210 = load i32, ptr %209, align 4, !tbaa !9
  br label %211

211:                                              ; preds = %208, %207
  %212 = phi i32 [ 1, %207 ], [ %210, %208 ]
  %213 = icmp slt i32 %203, %212
  br i1 %213, label %214, label %216

214:                                              ; preds = %211
  %215 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -7, ptr %215, align 4, !tbaa !9
  br label %248

216:                                              ; preds = %211
  %217 = load ptr, ptr %28, align 8, !tbaa !5
  %218 = load i32, ptr %217, align 4, !tbaa !9
  %219 = icmp slt i32 %218, 1
  br i1 %219, label %229, label %220

220:                                              ; preds = %216
  %221 = load i32, ptr %57, align 4, !tbaa !9
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %223, label %231

223:                                              ; preds = %220
  %224 = load ptr, ptr %28, align 8, !tbaa !5
  %225 = load i32, ptr %224, align 4, !tbaa !9
  %226 = load ptr, ptr %20, align 8, !tbaa !5
  %227 = load i32, ptr %226, align 4, !tbaa !9
  %228 = icmp slt i32 %225, %227
  br i1 %228, label %229, label %231

229:                                              ; preds = %223, %216
  %230 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -11, ptr %230, align 4, !tbaa !9
  br label %247

231:                                              ; preds = %223, %220
  %232 = load ptr, ptr %30, align 8, !tbaa !5
  %233 = load i32, ptr %232, align 4, !tbaa !9
  %234 = icmp slt i32 %233, 1
  br i1 %234, label %244, label %235

235:                                              ; preds = %231
  %236 = load i32, ptr %58, align 4, !tbaa !9
  %237 = icmp ne i32 %236, 0
  br i1 %237, label %238, label %246

238:                                              ; preds = %235
  %239 = load ptr, ptr %30, align 8, !tbaa !5
  %240 = load i32, ptr %239, align 4, !tbaa !9
  %241 = load ptr, ptr %20, align 8, !tbaa !5
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = icmp slt i32 %240, %242
  br i1 %243, label %244, label %246

244:                                              ; preds = %238, %231
  %245 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -13, ptr %245, align 4, !tbaa !9
  br label %246

246:                                              ; preds = %244, %238, %235
  br label %247

247:                                              ; preds = %246, %229
  br label %248

248:                                              ; preds = %247, %214
  br label %249

249:                                              ; preds = %248, %199
  br label %250

250:                                              ; preds = %249, %184
  br label %251

251:                                              ; preds = %250, %178
  br label %252

252:                                              ; preds = %251, %173
  %253 = load ptr, ptr %34, align 8, !tbaa !5
  %254 = load i32, ptr %253, align 4, !tbaa !9
  %255 = icmp eq i32 %254, 0
  br i1 %255, label %256, label %347

256:                                              ; preds = %252
  store i32 1, ptr %43, align 4, !tbaa !9
  %257 = load ptr, ptr %20, align 8, !tbaa !5
  %258 = load i32, ptr %257, align 4, !tbaa !9
  %259 = shl i32 %258, 1
  store i32 %259, ptr %44, align 4, !tbaa !9
  %260 = load i32, ptr %43, align 4, !tbaa !9
  %261 = load i32, ptr %44, align 4, !tbaa !9
  %262 = icmp sge i32 %260, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %256
  %264 = load i32, ptr %43, align 4, !tbaa !9
  br label %267

265:                                              ; preds = %256
  %266 = load i32, ptr %44, align 4, !tbaa !9
  br label %267

267:                                              ; preds = %265, %263
  %268 = phi i32 [ %264, %263 ], [ %266, %265 ]
  store i32 %268, ptr %76, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  %269 = load ptr, ptr %20, align 8, !tbaa !5
  %270 = load i32, ptr %269, align 4, !tbaa !9
  %271 = load ptr, ptr %20, align 8, !tbaa !5
  %272 = load i32, ptr %271, align 4, !tbaa !9
  %273 = load ptr, ptr %20, align 8, !tbaa !5
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %273, ptr noundef @c__1, ptr noundef %274, ptr noundef @c__0, i32 noundef 6, i32 noundef 1)
  %276 = mul nsw i32 %272, %275
  %277 = add nsw i32 %270, %276
  store i32 %277, ptr %44, align 4, !tbaa !9
  %278 = load i32, ptr %43, align 4, !tbaa !9
  %279 = load i32, ptr %44, align 4, !tbaa !9
  %280 = icmp sge i32 %278, %279
  br i1 %280, label %281, label %283

281:                                              ; preds = %267
  %282 = load i32, ptr %43, align 4, !tbaa !9
  br label %285

283:                                              ; preds = %267
  %284 = load i32, ptr %44, align 4, !tbaa !9
  br label %285

285:                                              ; preds = %283, %281
  %286 = phi i32 [ %282, %281 ], [ %284, %283 ]
  store i32 %286, ptr %79, align 4, !tbaa !9
  %287 = load i32, ptr %79, align 4, !tbaa !9
  store i32 %287, ptr %43, align 4, !tbaa !9
  %288 = load ptr, ptr %20, align 8, !tbaa !5
  %289 = load i32, ptr %288, align 4, !tbaa !9
  %290 = load ptr, ptr %20, align 8, !tbaa !5
  %291 = load i32, ptr %290, align 4, !tbaa !9
  %292 = load ptr, ptr %20, align 8, !tbaa !5
  %293 = load ptr, ptr %20, align 8, !tbaa !5
  %294 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %292, ptr noundef @c__1, ptr noundef %293, ptr noundef @c__0, i32 noundef 6, i32 noundef 1)
  %295 = mul nsw i32 %291, %294
  %296 = add nsw i32 %289, %295
  store i32 %296, ptr %44, align 4, !tbaa !9
  %297 = load i32, ptr %43, align 4, !tbaa !9
  %298 = load i32, ptr %44, align 4, !tbaa !9
  %299 = icmp sge i32 %297, %298
  br i1 %299, label %300, label %302

300:                                              ; preds = %285
  %301 = load i32, ptr %43, align 4, !tbaa !9
  br label %304

302:                                              ; preds = %285
  %303 = load i32, ptr %44, align 4, !tbaa !9
  br label %304

304:                                              ; preds = %302, %300
  %305 = phi i32 [ %301, %300 ], [ %303, %302 ]
  store i32 %305, ptr %79, align 4, !tbaa !9
  %306 = load i32, ptr %57, align 4, !tbaa !9
  %307 = icmp ne i32 %306, 0
  br i1 %307, label %308, label %328

308:                                              ; preds = %304
  %309 = load i32, ptr %79, align 4, !tbaa !9
  store i32 %309, ptr %43, align 4, !tbaa !9
  %310 = load ptr, ptr %20, align 8, !tbaa !5
  %311 = load i32, ptr %310, align 4, !tbaa !9
  %312 = load ptr, ptr %20, align 8, !tbaa !5
  %313 = load i32, ptr %312, align 4, !tbaa !9
  %314 = load ptr, ptr %20, align 8, !tbaa !5
  %315 = load ptr, ptr %20, align 8, !tbaa !5
  %316 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.3, ptr noundef %314, ptr noundef @c__1, ptr noundef %315, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  %317 = mul nsw i32 %313, %316
  %318 = add nsw i32 %311, %317
  store i32 %318, ptr %44, align 4, !tbaa !9
  %319 = load i32, ptr %43, align 4, !tbaa !9
  %320 = load i32, ptr %44, align 4, !tbaa !9
  %321 = icmp sge i32 %319, %320
  br i1 %321, label %322, label %324

322:                                              ; preds = %308
  %323 = load i32, ptr %43, align 4, !tbaa !9
  br label %326

324:                                              ; preds = %308
  %325 = load i32, ptr %44, align 4, !tbaa !9
  br label %326

326:                                              ; preds = %324, %322
  %327 = phi i32 [ %323, %322 ], [ %325, %324 ]
  store i32 %327, ptr %79, align 4, !tbaa !9
  br label %328

328:                                              ; preds = %326, %304
  %329 = load i32, ptr %79, align 4, !tbaa !9
  %330 = sitofp i32 %329 to double
  %331 = load ptr, ptr %31, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.doublecomplex, ptr %331, i64 1
  %333 = getelementptr inbounds %struct.doublecomplex, ptr %332, i32 0, i32 0
  store double %330, ptr %333, align 8, !tbaa !11
  %334 = load ptr, ptr %31, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %334, i64 1
  %336 = getelementptr inbounds %struct.doublecomplex, ptr %335, i32 0, i32 1
  store double 0.000000e+00, ptr %336, align 8, !tbaa !14
  %337 = load ptr, ptr %32, align 8, !tbaa !5
  %338 = load i32, ptr %337, align 4, !tbaa !9
  %339 = load i32, ptr %76, align 4, !tbaa !9
  %340 = icmp slt i32 %338, %339
  br i1 %340, label %341, label %346

341:                                              ; preds = %328
  %342 = load i32, ptr %80, align 4, !tbaa !9
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %346, label %344

344:                                              ; preds = %341
  %345 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -15, ptr %345, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %344, %341, %328
  br label %347

347:                                              ; preds = %346, %252
  %348 = load ptr, ptr %34, align 8, !tbaa !5
  %349 = load i32, ptr %348, align 4, !tbaa !9
  %350 = icmp ne i32 %349, 0
  br i1 %350, label %351, label %356

351:                                              ; preds = %347
  %352 = load ptr, ptr %34, align 8, !tbaa !5
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %354 = sub nsw i32 0, %353
  store i32 %354, ptr %43, align 4, !tbaa !9
  %355 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %43, i32 noundef 6)
  store i32 1, ptr %85, align 4
  br label %1157

356:                                              ; preds = %347
  %357 = load i32, ptr %80, align 4, !tbaa !9
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %360

359:                                              ; preds = %356
  store i32 1, ptr %85, align 4
  br label %1157

360:                                              ; preds = %356
  br label %361

361:                                              ; preds = %360
  %362 = load ptr, ptr %20, align 8, !tbaa !5
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = icmp eq i32 %363, 0
  br i1 %364, label %365, label %366

365:                                              ; preds = %361
  store i32 1, ptr %85, align 4
  br label %1157

366:                                              ; preds = %361
  %367 = call double @dlamch_(ptr noundef @.str.7)
  %368 = call double @dlamch_(ptr noundef @.str.8)
  %369 = fmul double %367, %368
  store double %369, ptr %83, align 8, !tbaa !15
  %370 = call double @dlamch_(ptr noundef @.str.9)
  store double %370, ptr %78, align 8, !tbaa !15
  %371 = load double, ptr %78, align 8, !tbaa !15
  %372 = fdiv double 1.000000e+00, %371
  store double %372, ptr %71, align 8, !tbaa !15
  call void @dlabad_(ptr noundef %78, ptr noundef %71)
  %373 = load double, ptr %78, align 8, !tbaa !15
  %374 = call double @sqrt(double noundef %373) #5
  %375 = load double, ptr %83, align 8, !tbaa !15
  %376 = fdiv double %374, %375
  store double %376, ptr %78, align 8, !tbaa !15
  %377 = load double, ptr %78, align 8, !tbaa !15
  %378 = fdiv double 1.000000e+00, %377
  store double %378, ptr %71, align 8, !tbaa !15
  %379 = load ptr, ptr %20, align 8, !tbaa !5
  %380 = load ptr, ptr %20, align 8, !tbaa !5
  %381 = load ptr, ptr %21, align 8, !tbaa !5
  %382 = load i32, ptr %36, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds %struct.doublecomplex, ptr %381, i64 %383
  %385 = load ptr, ptr %22, align 8, !tbaa !5
  %386 = load ptr, ptr %33, align 8, !tbaa !5
  %387 = getelementptr inbounds double, ptr %386, i64 1
  %388 = call double @zlange_(ptr noundef @.str.10, ptr noundef %379, ptr noundef %380, ptr noundef %384, ptr noundef %385, ptr noundef %387)
  store double %388, ptr %52, align 8, !tbaa !15
  store i32 0, ptr %67, align 4, !tbaa !9
  %389 = load double, ptr %52, align 8, !tbaa !15
  %390 = fcmp ogt double %389, 0.000000e+00
  br i1 %390, label %391, label %397

391:                                              ; preds = %366
  %392 = load double, ptr %52, align 8, !tbaa !15
  %393 = load double, ptr %78, align 8, !tbaa !15
  %394 = fcmp olt double %392, %393
  br i1 %394, label %395, label %397

395:                                              ; preds = %391
  %396 = load double, ptr %78, align 8, !tbaa !15
  store double %396, ptr %75, align 8, !tbaa !15
  store i32 1, ptr %67, align 4, !tbaa !9
  br label %404

397:                                              ; preds = %391, %366
  %398 = load double, ptr %52, align 8, !tbaa !15
  %399 = load double, ptr %71, align 8, !tbaa !15
  %400 = fcmp ogt double %398, %399
  br i1 %400, label %401, label %403

401:                                              ; preds = %397
  %402 = load double, ptr %71, align 8, !tbaa !15
  store double %402, ptr %75, align 8, !tbaa !15
  store i32 1, ptr %67, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %401, %397
  br label %404

404:                                              ; preds = %403, %395
  %405 = load i32, ptr %67, align 4, !tbaa !9
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %415

407:                                              ; preds = %404
  %408 = load ptr, ptr %20, align 8, !tbaa !5
  %409 = load ptr, ptr %20, align 8, !tbaa !5
  %410 = load ptr, ptr %21, align 8, !tbaa !5
  %411 = load i32, ptr %36, align 4, !tbaa !9
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds %struct.doublecomplex, ptr %410, i64 %412
  %414 = load ptr, ptr %22, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %52, ptr noundef %75, ptr noundef %408, ptr noundef %409, ptr noundef %413, ptr noundef %414, ptr noundef %54)
  br label %415

415:                                              ; preds = %407, %404
  %416 = load ptr, ptr %20, align 8, !tbaa !5
  %417 = load ptr, ptr %20, align 8, !tbaa !5
  %418 = load ptr, ptr %23, align 8, !tbaa !5
  %419 = load i32, ptr %38, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %418, i64 %420
  %422 = load ptr, ptr %24, align 8, !tbaa !5
  %423 = load ptr, ptr %33, align 8, !tbaa !5
  %424 = getelementptr inbounds double, ptr %423, i64 1
  %425 = call double @zlange_(ptr noundef @.str.10, ptr noundef %416, ptr noundef %417, ptr noundef %421, ptr noundef %422, ptr noundef %424)
  store double %425, ptr %53, align 8, !tbaa !15
  store i32 0, ptr %68, align 4, !tbaa !9
  %426 = load double, ptr %53, align 8, !tbaa !15
  %427 = fcmp ogt double %426, 0.000000e+00
  br i1 %427, label %428, label %434

428:                                              ; preds = %415
  %429 = load double, ptr %53, align 8, !tbaa !15
  %430 = load double, ptr %78, align 8, !tbaa !15
  %431 = fcmp olt double %429, %430
  br i1 %431, label %432, label %434

432:                                              ; preds = %428
  %433 = load double, ptr %78, align 8, !tbaa !15
  store double %433, ptr %77, align 8, !tbaa !15
  store i32 1, ptr %68, align 4, !tbaa !9
  br label %441

434:                                              ; preds = %428, %415
  %435 = load double, ptr %53, align 8, !tbaa !15
  %436 = load double, ptr %71, align 8, !tbaa !15
  %437 = fcmp ogt double %435, %436
  br i1 %437, label %438, label %440

438:                                              ; preds = %434
  %439 = load double, ptr %71, align 8, !tbaa !15
  store double %439, ptr %77, align 8, !tbaa !15
  store i32 1, ptr %68, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %438, %434
  br label %441

441:                                              ; preds = %440, %432
  %442 = load i32, ptr %68, align 4, !tbaa !9
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %444, label %452

444:                                              ; preds = %441
  %445 = load ptr, ptr %20, align 8, !tbaa !5
  %446 = load ptr, ptr %20, align 8, !tbaa !5
  %447 = load ptr, ptr %23, align 8, !tbaa !5
  %448 = load i32, ptr %38, align 4, !tbaa !9
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %447, i64 %449
  %451 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %53, ptr noundef %77, ptr noundef %445, ptr noundef %446, ptr noundef %450, ptr noundef %451, ptr noundef %54)
  br label %452

452:                                              ; preds = %444, %441
  store i32 1, ptr %60, align 4, !tbaa !9
  %453 = load ptr, ptr %20, align 8, !tbaa !5
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = add nsw i32 %454, 1
  store i32 %455, ptr %73, align 4, !tbaa !9
  %456 = load i32, ptr %73, align 4, !tbaa !9
  %457 = load ptr, ptr %20, align 8, !tbaa !5
  %458 = load i32, ptr %457, align 4, !tbaa !9
  %459 = add nsw i32 %456, %458
  store i32 %459, ptr %62, align 4, !tbaa !9
  %460 = load ptr, ptr %20, align 8, !tbaa !5
  %461 = load ptr, ptr %21, align 8, !tbaa !5
  %462 = load i32, ptr %36, align 4, !tbaa !9
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds %struct.doublecomplex, ptr %461, i64 %463
  %465 = load ptr, ptr %22, align 8, !tbaa !5
  %466 = load ptr, ptr %23, align 8, !tbaa !5
  %467 = load i32, ptr %38, align 4, !tbaa !9
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %466, i64 %468
  %470 = load ptr, ptr %24, align 8, !tbaa !5
  %471 = load ptr, ptr %33, align 8, !tbaa !5
  %472 = load i32, ptr %60, align 4, !tbaa !9
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds double, ptr %471, i64 %473
  %475 = load ptr, ptr %33, align 8, !tbaa !5
  %476 = load i32, ptr %73, align 4, !tbaa !9
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds double, ptr %475, i64 %477
  %479 = load ptr, ptr %33, align 8, !tbaa !5
  %480 = load i32, ptr %62, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %479, i64 %481
  call void @zggbal_(ptr noundef @.str.12, ptr noundef %460, ptr noundef %464, ptr noundef %465, ptr noundef %469, ptr noundef %470, ptr noundef %82, ptr noundef %81, ptr noundef %474, ptr noundef %478, ptr noundef %482, ptr noundef %54)
  %483 = load i32, ptr %81, align 4, !tbaa !9
  %484 = add nsw i32 %483, 1
  %485 = load i32, ptr %82, align 4, !tbaa !9
  %486 = sub nsw i32 %484, %485
  store i32 %486, ptr %63, align 4, !tbaa !9
  %487 = load i32, ptr %84, align 4, !tbaa !9
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %489, label %495

489:                                              ; preds = %452
  %490 = load ptr, ptr %20, align 8, !tbaa !5
  %491 = load i32, ptr %490, align 4, !tbaa !9
  %492 = add nsw i32 %491, 1
  %493 = load i32, ptr %82, align 4, !tbaa !9
  %494 = sub nsw i32 %492, %493
  store i32 %494, ptr %61, align 4, !tbaa !9
  br label %497

495:                                              ; preds = %452
  %496 = load i32, ptr %63, align 4, !tbaa !9
  store i32 %496, ptr %61, align 4, !tbaa !9
  br label %497

497:                                              ; preds = %495, %489
  store i32 1, ptr %55, align 4, !tbaa !9
  %498 = load i32, ptr %55, align 4, !tbaa !9
  %499 = load i32, ptr %63, align 4, !tbaa !9
  %500 = add nsw i32 %498, %499
  store i32 %500, ptr %59, align 4, !tbaa !9
  %501 = load ptr, ptr %32, align 8, !tbaa !5
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = add nsw i32 %502, 1
  %504 = load i32, ptr %59, align 4, !tbaa !9
  %505 = sub nsw i32 %503, %504
  store i32 %505, ptr %43, align 4, !tbaa !9
  %506 = load ptr, ptr %23, align 8, !tbaa !5
  %507 = load i32, ptr %82, align 4, !tbaa !9
  %508 = load i32, ptr %82, align 4, !tbaa !9
  %509 = load i32, ptr %37, align 4, !tbaa !9
  %510 = mul nsw i32 %508, %509
  %511 = add nsw i32 %507, %510
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %506, i64 %512
  %514 = load ptr, ptr %24, align 8, !tbaa !5
  %515 = load ptr, ptr %31, align 8, !tbaa !5
  %516 = load i32, ptr %55, align 4, !tbaa !9
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %515, i64 %517
  %519 = load ptr, ptr %31, align 8, !tbaa !5
  %520 = load i32, ptr %59, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds %struct.doublecomplex, ptr %519, i64 %521
  call void @zgeqrf_(ptr noundef %63, ptr noundef %61, ptr noundef %513, ptr noundef %514, ptr noundef %518, ptr noundef %522, ptr noundef %43, ptr noundef %54)
  %523 = load ptr, ptr %32, align 8, !tbaa !5
  %524 = load i32, ptr %523, align 4, !tbaa !9
  %525 = add nsw i32 %524, 1
  %526 = load i32, ptr %59, align 4, !tbaa !9
  %527 = sub nsw i32 %525, %526
  store i32 %527, ptr %43, align 4, !tbaa !9
  %528 = load ptr, ptr %23, align 8, !tbaa !5
  %529 = load i32, ptr %82, align 4, !tbaa !9
  %530 = load i32, ptr %82, align 4, !tbaa !9
  %531 = load i32, ptr %37, align 4, !tbaa !9
  %532 = mul nsw i32 %530, %531
  %533 = add nsw i32 %529, %532
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds %struct.doublecomplex, ptr %528, i64 %534
  %536 = load ptr, ptr %24, align 8, !tbaa !5
  %537 = load ptr, ptr %31, align 8, !tbaa !5
  %538 = load i32, ptr %55, align 4, !tbaa !9
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds %struct.doublecomplex, ptr %537, i64 %539
  %541 = load ptr, ptr %21, align 8, !tbaa !5
  %542 = load i32, ptr %82, align 4, !tbaa !9
  %543 = load i32, ptr %82, align 4, !tbaa !9
  %544 = load i32, ptr %35, align 4, !tbaa !9
  %545 = mul nsw i32 %543, %544
  %546 = add nsw i32 %542, %545
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds %struct.doublecomplex, ptr %541, i64 %547
  %549 = load ptr, ptr %22, align 8, !tbaa !5
  %550 = load ptr, ptr %31, align 8, !tbaa !5
  %551 = load i32, ptr %59, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %550, i64 %552
  call void @zunmqr_(ptr noundef @.str.13, ptr noundef @.str.14, ptr noundef %63, ptr noundef %61, ptr noundef %63, ptr noundef %535, ptr noundef %536, ptr noundef %540, ptr noundef %548, ptr noundef %549, ptr noundef %553, ptr noundef %43, ptr noundef %54)
  %554 = load i32, ptr %57, align 4, !tbaa !9
  %555 = icmp ne i32 %554, 0
  br i1 %555, label %556, label %614

556:                                              ; preds = %497
  %557 = load ptr, ptr %20, align 8, !tbaa !5
  %558 = load ptr, ptr %20, align 8, !tbaa !5
  %559 = load ptr, ptr %27, align 8, !tbaa !5
  %560 = load i32, ptr %40, align 4, !tbaa !9
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds %struct.doublecomplex, ptr %559, i64 %561
  %563 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.15, ptr noundef %557, ptr noundef %558, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %562, ptr noundef %563)
  %564 = load i32, ptr %63, align 4, !tbaa !9
  %565 = icmp sgt i32 %564, 1
  br i1 %565, label %566, label %591

566:                                              ; preds = %556
  %567 = load i32, ptr %63, align 4, !tbaa !9
  %568 = sub nsw i32 %567, 1
  store i32 %568, ptr %43, align 4, !tbaa !9
  %569 = load i32, ptr %63, align 4, !tbaa !9
  %570 = sub nsw i32 %569, 1
  store i32 %570, ptr %44, align 4, !tbaa !9
  %571 = load ptr, ptr %23, align 8, !tbaa !5
  %572 = load i32, ptr %82, align 4, !tbaa !9
  %573 = add nsw i32 %572, 1
  %574 = load i32, ptr %82, align 4, !tbaa !9
  %575 = load i32, ptr %37, align 4, !tbaa !9
  %576 = mul nsw i32 %574, %575
  %577 = add nsw i32 %573, %576
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds %struct.doublecomplex, ptr %571, i64 %578
  %580 = load ptr, ptr %24, align 8, !tbaa !5
  %581 = load ptr, ptr %27, align 8, !tbaa !5
  %582 = load i32, ptr %82, align 4, !tbaa !9
  %583 = add nsw i32 %582, 1
  %584 = load i32, ptr %82, align 4, !tbaa !9
  %585 = load i32, ptr %39, align 4, !tbaa !9
  %586 = mul nsw i32 %584, %585
  %587 = add nsw i32 %583, %586
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 %588
  %590 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.13, ptr noundef %43, ptr noundef %44, ptr noundef %579, ptr noundef %580, ptr noundef %589, ptr noundef %590)
  br label %591

591:                                              ; preds = %566, %556
  %592 = load ptr, ptr %32, align 8, !tbaa !5
  %593 = load i32, ptr %592, align 4, !tbaa !9
  %594 = add nsw i32 %593, 1
  %595 = load i32, ptr %59, align 4, !tbaa !9
  %596 = sub nsw i32 %594, %595
  store i32 %596, ptr %43, align 4, !tbaa !9
  %597 = load ptr, ptr %27, align 8, !tbaa !5
  %598 = load i32, ptr %82, align 4, !tbaa !9
  %599 = load i32, ptr %82, align 4, !tbaa !9
  %600 = load i32, ptr %39, align 4, !tbaa !9
  %601 = mul nsw i32 %599, %600
  %602 = add nsw i32 %598, %601
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %597, i64 %603
  %605 = load ptr, ptr %28, align 8, !tbaa !5
  %606 = load ptr, ptr %31, align 8, !tbaa !5
  %607 = load i32, ptr %55, align 4, !tbaa !9
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds %struct.doublecomplex, ptr %606, i64 %608
  %610 = load ptr, ptr %31, align 8, !tbaa !5
  %611 = load i32, ptr %59, align 4, !tbaa !9
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds %struct.doublecomplex, ptr %610, i64 %612
  call void @zungqr_(ptr noundef %63, ptr noundef %63, ptr noundef %63, ptr noundef %604, ptr noundef %605, ptr noundef %609, ptr noundef %613, ptr noundef %43, ptr noundef %54)
  br label %614

614:                                              ; preds = %591, %497
  %615 = load i32, ptr %58, align 4, !tbaa !9
  %616 = icmp ne i32 %615, 0
  br i1 %616, label %617, label %625

617:                                              ; preds = %614
  %618 = load ptr, ptr %20, align 8, !tbaa !5
  %619 = load ptr, ptr %20, align 8, !tbaa !5
  %620 = load ptr, ptr %29, align 8, !tbaa !5
  %621 = load i32, ptr %42, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds %struct.doublecomplex, ptr %620, i64 %622
  %624 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.15, ptr noundef %618, ptr noundef %619, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %623, ptr noundef %624)
  br label %625

625:                                              ; preds = %617, %614
  %626 = load i32, ptr %84, align 4, !tbaa !9
  %627 = icmp ne i32 %626, 0
  br i1 %627, label %628, label %652

628:                                              ; preds = %625
  %629 = load ptr, ptr %18, align 8, !tbaa !5
  %630 = load ptr, ptr %19, align 8, !tbaa !5
  %631 = load ptr, ptr %20, align 8, !tbaa !5
  %632 = load ptr, ptr %21, align 8, !tbaa !5
  %633 = load i32, ptr %36, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %632, i64 %634
  %636 = load ptr, ptr %22, align 8, !tbaa !5
  %637 = load ptr, ptr %23, align 8, !tbaa !5
  %638 = load i32, ptr %38, align 4, !tbaa !9
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %637, i64 %639
  %641 = load ptr, ptr %24, align 8, !tbaa !5
  %642 = load ptr, ptr %27, align 8, !tbaa !5
  %643 = load i32, ptr %40, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %642, i64 %644
  %646 = load ptr, ptr %28, align 8, !tbaa !5
  %647 = load ptr, ptr %29, align 8, !tbaa !5
  %648 = load i32, ptr %42, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds %struct.doublecomplex, ptr %647, i64 %649
  %651 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zgghrd_(ptr noundef %629, ptr noundef %630, ptr noundef %631, ptr noundef %82, ptr noundef %81, ptr noundef %635, ptr noundef %636, ptr noundef %640, ptr noundef %641, ptr noundef %645, ptr noundef %646, ptr noundef %650, ptr noundef %651, ptr noundef %54)
  br label %681

652:                                              ; preds = %625
  %653 = load ptr, ptr %21, align 8, !tbaa !5
  %654 = load i32, ptr %82, align 4, !tbaa !9
  %655 = load i32, ptr %82, align 4, !tbaa !9
  %656 = load i32, ptr %35, align 4, !tbaa !9
  %657 = mul nsw i32 %655, %656
  %658 = add nsw i32 %654, %657
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %653, i64 %659
  %661 = load ptr, ptr %22, align 8, !tbaa !5
  %662 = load ptr, ptr %23, align 8, !tbaa !5
  %663 = load i32, ptr %82, align 4, !tbaa !9
  %664 = load i32, ptr %82, align 4, !tbaa !9
  %665 = load i32, ptr %37, align 4, !tbaa !9
  %666 = mul nsw i32 %664, %665
  %667 = add nsw i32 %663, %666
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds %struct.doublecomplex, ptr %662, i64 %668
  %670 = load ptr, ptr %24, align 8, !tbaa !5
  %671 = load ptr, ptr %27, align 8, !tbaa !5
  %672 = load i32, ptr %40, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %671, i64 %673
  %675 = load ptr, ptr %28, align 8, !tbaa !5
  %676 = load ptr, ptr %29, align 8, !tbaa !5
  %677 = load i32, ptr %42, align 4, !tbaa !9
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds %struct.doublecomplex, ptr %676, i64 %678
  %680 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zgghrd_(ptr noundef @.str, ptr noundef @.str, ptr noundef %63, ptr noundef @c__1, ptr noundef %63, ptr noundef %660, ptr noundef %661, ptr noundef %669, ptr noundef %670, ptr noundef %674, ptr noundef %675, ptr noundef %679, ptr noundef %680, ptr noundef %54)
  br label %681

681:                                              ; preds = %652, %628
  %682 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %682, ptr %59, align 4, !tbaa !9
  %683 = load i32, ptr %84, align 4, !tbaa !9
  %684 = icmp ne i32 %683, 0
  br i1 %684, label %685, label %687

685:                                              ; preds = %681
  %686 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 83, ptr %686, align 1, !tbaa !16
  br label %689

687:                                              ; preds = %681
  %688 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 69, ptr %688, align 1, !tbaa !16
  br label %689

689:                                              ; preds = %687, %685
  %690 = load ptr, ptr %32, align 8, !tbaa !5
  %691 = load i32, ptr %690, align 4, !tbaa !9
  %692 = add nsw i32 %691, 1
  %693 = load i32, ptr %59, align 4, !tbaa !9
  %694 = sub nsw i32 %692, %693
  store i32 %694, ptr %43, align 4, !tbaa !9
  %695 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  %696 = load ptr, ptr %18, align 8, !tbaa !5
  %697 = load ptr, ptr %19, align 8, !tbaa !5
  %698 = load ptr, ptr %20, align 8, !tbaa !5
  %699 = load ptr, ptr %21, align 8, !tbaa !5
  %700 = load i32, ptr %36, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds %struct.doublecomplex, ptr %699, i64 %701
  %703 = load ptr, ptr %22, align 8, !tbaa !5
  %704 = load ptr, ptr %23, align 8, !tbaa !5
  %705 = load i32, ptr %38, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds %struct.doublecomplex, ptr %704, i64 %706
  %708 = load ptr, ptr %24, align 8, !tbaa !5
  %709 = load ptr, ptr %25, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %709, i64 1
  %711 = load ptr, ptr %26, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %711, i64 1
  %713 = load ptr, ptr %27, align 8, !tbaa !5
  %714 = load i32, ptr %40, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %715
  %717 = load ptr, ptr %28, align 8, !tbaa !5
  %718 = load ptr, ptr %29, align 8, !tbaa !5
  %719 = load i32, ptr %42, align 4, !tbaa !9
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds %struct.doublecomplex, ptr %718, i64 %720
  %722 = load ptr, ptr %30, align 8, !tbaa !5
  %723 = load ptr, ptr %31, align 8, !tbaa !5
  %724 = load i32, ptr %59, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %723, i64 %725
  %727 = load ptr, ptr %33, align 8, !tbaa !5
  %728 = load i32, ptr %62, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds double, ptr %727, i64 %729
  call void @zhgeqz_(ptr noundef %695, ptr noundef %696, ptr noundef %697, ptr noundef %698, ptr noundef %82, ptr noundef %81, ptr noundef %702, ptr noundef %703, ptr noundef %707, ptr noundef %708, ptr noundef %710, ptr noundef %712, ptr noundef %716, ptr noundef %717, ptr noundef %721, ptr noundef %722, ptr noundef %726, ptr noundef %43, ptr noundef %730, ptr noundef %54)
  %731 = load i32, ptr %54, align 4, !tbaa !9
  %732 = icmp ne i32 %731, 0
  br i1 %732, label %733, label %768

733:                                              ; preds = %689
  %734 = load i32, ptr %54, align 4, !tbaa !9
  %735 = icmp sgt i32 %734, 0
  br i1 %735, label %736, label %744

736:                                              ; preds = %733
  %737 = load i32, ptr %54, align 4, !tbaa !9
  %738 = load ptr, ptr %20, align 8, !tbaa !5
  %739 = load i32, ptr %738, align 4, !tbaa !9
  %740 = icmp sle i32 %737, %739
  br i1 %740, label %741, label %744

741:                                              ; preds = %736
  %742 = load i32, ptr %54, align 4, !tbaa !9
  %743 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %742, ptr %743, align 4, !tbaa !9
  br label %767

744:                                              ; preds = %736, %733
  %745 = load i32, ptr %54, align 4, !tbaa !9
  %746 = load ptr, ptr %20, align 8, !tbaa !5
  %747 = load i32, ptr %746, align 4, !tbaa !9
  %748 = icmp sgt i32 %745, %747
  br i1 %748, label %749, label %761

749:                                              ; preds = %744
  %750 = load i32, ptr %54, align 4, !tbaa !9
  %751 = load ptr, ptr %20, align 8, !tbaa !5
  %752 = load i32, ptr %751, align 4, !tbaa !9
  %753 = shl i32 %752, 1
  %754 = icmp sle i32 %750, %753
  br i1 %754, label %755, label %761

755:                                              ; preds = %749
  %756 = load i32, ptr %54, align 4, !tbaa !9
  %757 = load ptr, ptr %20, align 8, !tbaa !5
  %758 = load i32, ptr %757, align 4, !tbaa !9
  %759 = sub nsw i32 %756, %758
  %760 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %759, ptr %760, align 4, !tbaa !9
  br label %766

761:                                              ; preds = %749, %744
  %762 = load ptr, ptr %20, align 8, !tbaa !5
  %763 = load i32, ptr %762, align 4, !tbaa !9
  %764 = add nsw i32 %763, 1
  %765 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %764, ptr %765, align 4, !tbaa !9
  br label %766

766:                                              ; preds = %761, %755
  br label %767

767:                                              ; preds = %766, %741
  br label %1132

768:                                              ; preds = %689
  %769 = load i32, ptr %84, align 4, !tbaa !9
  %770 = icmp ne i32 %769, 0
  br i1 %770, label %771, label %1131

771:                                              ; preds = %768
  %772 = load i32, ptr %57, align 4, !tbaa !9
  %773 = icmp ne i32 %772, 0
  br i1 %773, label %774, label %782

774:                                              ; preds = %771
  %775 = load i32, ptr %58, align 4, !tbaa !9
  %776 = icmp ne i32 %775, 0
  br i1 %776, label %777, label %779

777:                                              ; preds = %774
  %778 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 66, ptr %778, align 1, !tbaa !16
  br label %781

779:                                              ; preds = %774
  %780 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 76, ptr %780, align 1, !tbaa !16
  br label %781

781:                                              ; preds = %779, %777
  br label %784

782:                                              ; preds = %771
  %783 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 82, ptr %783, align 1, !tbaa !16
  br label %784

784:                                              ; preds = %782, %781
  %785 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  %786 = getelementptr inbounds [1 x i32], ptr %69, i64 0, i64 0
  %787 = load ptr, ptr %20, align 8, !tbaa !5
  %788 = load ptr, ptr %21, align 8, !tbaa !5
  %789 = load i32, ptr %36, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds %struct.doublecomplex, ptr %788, i64 %790
  %792 = load ptr, ptr %22, align 8, !tbaa !5
  %793 = load ptr, ptr %23, align 8, !tbaa !5
  %794 = load i32, ptr %38, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %793, i64 %795
  %797 = load ptr, ptr %24, align 8, !tbaa !5
  %798 = load ptr, ptr %27, align 8, !tbaa !5
  %799 = load i32, ptr %40, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %798, i64 %800
  %802 = load ptr, ptr %28, align 8, !tbaa !5
  %803 = load ptr, ptr %29, align 8, !tbaa !5
  %804 = load i32, ptr %42, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds %struct.doublecomplex, ptr %803, i64 %805
  %807 = load ptr, ptr %30, align 8, !tbaa !5
  %808 = load ptr, ptr %20, align 8, !tbaa !5
  %809 = load ptr, ptr %31, align 8, !tbaa !5
  %810 = load i32, ptr %59, align 4, !tbaa !9
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds %struct.doublecomplex, ptr %809, i64 %811
  %813 = load ptr, ptr %33, align 8, !tbaa !5
  %814 = load i32, ptr %62, align 4, !tbaa !9
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds double, ptr %813, i64 %815
  call void @ztgevc_(ptr noundef %785, ptr noundef @.str.8, ptr noundef %786, ptr noundef %787, ptr noundef %791, ptr noundef %792, ptr noundef %796, ptr noundef %797, ptr noundef %801, ptr noundef %802, ptr noundef %806, ptr noundef %807, ptr noundef %808, ptr noundef %65, ptr noundef %812, ptr noundef %816, ptr noundef %54)
  %817 = load i32, ptr %54, align 4, !tbaa !9
  %818 = icmp ne i32 %817, 0
  br i1 %818, label %819, label %824

819:                                              ; preds = %784
  %820 = load ptr, ptr %20, align 8, !tbaa !5
  %821 = load i32, ptr %820, align 4, !tbaa !9
  %822 = add nsw i32 %821, 2
  %823 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %822, ptr %823, align 4, !tbaa !9
  br label %1132

824:                                              ; preds = %784
  %825 = load i32, ptr %57, align 4, !tbaa !9
  %826 = icmp ne i32 %825, 0
  br i1 %826, label %827, label %977

827:                                              ; preds = %824
  %828 = load ptr, ptr %20, align 8, !tbaa !5
  %829 = load ptr, ptr %33, align 8, !tbaa !5
  %830 = load i32, ptr %60, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds double, ptr %829, i64 %831
  %833 = load ptr, ptr %33, align 8, !tbaa !5
  %834 = load i32, ptr %73, align 4, !tbaa !9
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds double, ptr %833, i64 %835
  %837 = load ptr, ptr %20, align 8, !tbaa !5
  %838 = load ptr, ptr %27, align 8, !tbaa !5
  %839 = load i32, ptr %40, align 4, !tbaa !9
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds %struct.doublecomplex, ptr %838, i64 %840
  %842 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zggbak_(ptr noundef @.str.12, ptr noundef @.str.13, ptr noundef %828, ptr noundef %82, ptr noundef %81, ptr noundef %832, ptr noundef %836, ptr noundef %837, ptr noundef %841, ptr noundef %842, ptr noundef %54)
  %843 = load ptr, ptr %20, align 8, !tbaa !5
  %844 = load i32, ptr %843, align 4, !tbaa !9
  store i32 %844, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %64, align 4, !tbaa !9
  br label %845

845:                                              ; preds = %973, %827
  %846 = load i32, ptr %64, align 4, !tbaa !9
  %847 = load i32, ptr %43, align 4, !tbaa !9
  %848 = icmp sle i32 %846, %847
  br i1 %848, label %849, label %976

849:                                              ; preds = %845
  store double 0.000000e+00, ptr %56, align 8, !tbaa !15
  %850 = load ptr, ptr %20, align 8, !tbaa !5
  %851 = load i32, ptr %850, align 4, !tbaa !9
  store i32 %851, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %852

852:                                              ; preds = %908, %849
  %853 = load i32, ptr %66, align 4, !tbaa !9
  %854 = load i32, ptr %44, align 4, !tbaa !9
  %855 = icmp sle i32 %853, %854
  br i1 %855, label %856, label %911

856:                                              ; preds = %852
  %857 = load i32, ptr %66, align 4, !tbaa !9
  %858 = load i32, ptr %64, align 4, !tbaa !9
  %859 = load i32, ptr %39, align 4, !tbaa !9
  %860 = mul nsw i32 %858, %859
  %861 = add nsw i32 %857, %860
  store i32 %861, ptr %45, align 4, !tbaa !9
  %862 = load double, ptr %56, align 8, !tbaa !15
  store double %862, ptr %49, align 8, !tbaa !15
  %863 = load ptr, ptr %27, align 8, !tbaa !5
  %864 = load i32, ptr %45, align 4, !tbaa !9
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds %struct.doublecomplex, ptr %863, i64 %865
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %866, i32 0, i32 0
  %868 = load double, ptr %867, align 8, !tbaa !11
  store double %868, ptr %47, align 8, !tbaa !15
  %869 = load double, ptr %47, align 8, !tbaa !15
  %870 = fcmp oge double %869, 0.000000e+00
  br i1 %870, label %871, label %873

871:                                              ; preds = %856
  %872 = load double, ptr %47, align 8, !tbaa !15
  br label %876

873:                                              ; preds = %856
  %874 = load double, ptr %47, align 8, !tbaa !15
  %875 = fneg double %874
  br label %876

876:                                              ; preds = %873, %871
  %877 = phi double [ %872, %871 ], [ %875, %873 ]
  %878 = load ptr, ptr %27, align 8, !tbaa !5
  %879 = load i32, ptr %66, align 4, !tbaa !9
  %880 = load i32, ptr %64, align 4, !tbaa !9
  %881 = load i32, ptr %39, align 4, !tbaa !9
  %882 = mul nsw i32 %880, %881
  %883 = add nsw i32 %879, %882
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %878, i64 %884
  %886 = call { double, double } @Cd(ptr noundef %885)
  %887 = extractvalue { double, double } %886, 0
  %888 = extractvalue { double, double } %886, 1
  store double %888, ptr %48, align 8, !tbaa !15
  %889 = load double, ptr %48, align 8, !tbaa !15
  %890 = fcmp oge double %889, 0.000000e+00
  br i1 %890, label %891, label %893

891:                                              ; preds = %876
  %892 = load double, ptr %48, align 8, !tbaa !15
  br label %896

893:                                              ; preds = %876
  %894 = load double, ptr %48, align 8, !tbaa !15
  %895 = fneg double %894
  br label %896

896:                                              ; preds = %893, %891
  %897 = phi double [ %892, %891 ], [ %895, %893 ]
  %898 = fadd double %877, %897
  store double %898, ptr %50, align 8, !tbaa !15
  %899 = load double, ptr %49, align 8, !tbaa !15
  %900 = load double, ptr %50, align 8, !tbaa !15
  %901 = fcmp oge double %899, %900
  br i1 %901, label %902, label %904

902:                                              ; preds = %896
  %903 = load double, ptr %49, align 8, !tbaa !15
  br label %906

904:                                              ; preds = %896
  %905 = load double, ptr %50, align 8, !tbaa !15
  br label %906

906:                                              ; preds = %904, %902
  %907 = phi double [ %903, %902 ], [ %905, %904 ]
  store double %907, ptr %56, align 8, !tbaa !15
  br label %908

908:                                              ; preds = %906
  %909 = load i32, ptr %66, align 4, !tbaa !9
  %910 = add nsw i32 %909, 1
  store i32 %910, ptr %66, align 4, !tbaa !9
  br label %852, !llvm.loop !17

911:                                              ; preds = %852
  %912 = load double, ptr %56, align 8, !tbaa !15
  %913 = load double, ptr %78, align 8, !tbaa !15
  %914 = fcmp olt double %912, %913
  br i1 %914, label %915, label %916

915:                                              ; preds = %911
  br label %972

916:                                              ; preds = %911
  %917 = load double, ptr %56, align 8, !tbaa !15
  %918 = fdiv double 1.000000e+00, %917
  store double %918, ptr %56, align 8, !tbaa !15
  %919 = load ptr, ptr %20, align 8, !tbaa !5
  %920 = load i32, ptr %919, align 4, !tbaa !9
  store i32 %920, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %921

921:                                              ; preds = %968, %916
  %922 = load i32, ptr %66, align 4, !tbaa !9
  %923 = load i32, ptr %44, align 4, !tbaa !9
  %924 = icmp sle i32 %922, %923
  br i1 %924, label %925, label %971

925:                                              ; preds = %921
  %926 = load i32, ptr %66, align 4, !tbaa !9
  %927 = load i32, ptr %64, align 4, !tbaa !9
  %928 = load i32, ptr %39, align 4, !tbaa !9
  %929 = mul nsw i32 %927, %928
  %930 = add nsw i32 %926, %929
  store i32 %930, ptr %45, align 4, !tbaa !9
  %931 = load i32, ptr %66, align 4, !tbaa !9
  %932 = load i32, ptr %64, align 4, !tbaa !9
  %933 = load i32, ptr %39, align 4, !tbaa !9
  %934 = mul nsw i32 %932, %933
  %935 = add nsw i32 %931, %934
  store i32 %935, ptr %46, align 4, !tbaa !9
  %936 = load double, ptr %56, align 8, !tbaa !15
  %937 = load ptr, ptr %27, align 8, !tbaa !5
  %938 = load i32, ptr %46, align 4, !tbaa !9
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds %struct.doublecomplex, ptr %937, i64 %939
  %941 = getelementptr inbounds %struct.doublecomplex, ptr %940, i32 0, i32 0
  %942 = load double, ptr %941, align 8, !tbaa !11
  %943 = fmul double %936, %942
  %944 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %943, ptr %944, align 8, !tbaa !11
  %945 = load double, ptr %56, align 8, !tbaa !15
  %946 = load ptr, ptr %27, align 8, !tbaa !5
  %947 = load i32, ptr %46, align 4, !tbaa !9
  %948 = sext i32 %947 to i64
  %949 = getelementptr inbounds %struct.doublecomplex, ptr %946, i64 %948
  %950 = getelementptr inbounds %struct.doublecomplex, ptr %949, i32 0, i32 1
  %951 = load double, ptr %950, align 8, !tbaa !14
  %952 = fmul double %945, %951
  %953 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double %952, ptr %953, align 8, !tbaa !14
  %954 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %955 = load double, ptr %954, align 8, !tbaa !11
  %956 = load ptr, ptr %27, align 8, !tbaa !5
  %957 = load i32, ptr %45, align 4, !tbaa !9
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds %struct.doublecomplex, ptr %956, i64 %958
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %959, i32 0, i32 0
  store double %955, ptr %960, align 8, !tbaa !11
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %962 = load double, ptr %961, align 8, !tbaa !14
  %963 = load ptr, ptr %27, align 8, !tbaa !5
  %964 = load i32, ptr %45, align 4, !tbaa !9
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds %struct.doublecomplex, ptr %963, i64 %965
  %967 = getelementptr inbounds %struct.doublecomplex, ptr %966, i32 0, i32 1
  store double %962, ptr %967, align 8, !tbaa !14
  br label %968

968:                                              ; preds = %925
  %969 = load i32, ptr %66, align 4, !tbaa !9
  %970 = add nsw i32 %969, 1
  store i32 %970, ptr %66, align 4, !tbaa !9
  br label %921, !llvm.loop !19

971:                                              ; preds = %921
  br label %972

972:                                              ; preds = %971, %915
  br label %973

973:                                              ; preds = %972
  %974 = load i32, ptr %64, align 4, !tbaa !9
  %975 = add nsw i32 %974, 1
  store i32 %975, ptr %64, align 4, !tbaa !9
  br label %845, !llvm.loop !20

976:                                              ; preds = %845
  br label %977

977:                                              ; preds = %976, %824
  %978 = load i32, ptr %58, align 4, !tbaa !9
  %979 = icmp ne i32 %978, 0
  br i1 %979, label %980, label %1130

980:                                              ; preds = %977
  %981 = load ptr, ptr %20, align 8, !tbaa !5
  %982 = load ptr, ptr %33, align 8, !tbaa !5
  %983 = load i32, ptr %60, align 4, !tbaa !9
  %984 = sext i32 %983 to i64
  %985 = getelementptr inbounds double, ptr %982, i64 %984
  %986 = load ptr, ptr %33, align 8, !tbaa !5
  %987 = load i32, ptr %73, align 4, !tbaa !9
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds double, ptr %986, i64 %988
  %990 = load ptr, ptr %20, align 8, !tbaa !5
  %991 = load ptr, ptr %29, align 8, !tbaa !5
  %992 = load i32, ptr %42, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds %struct.doublecomplex, ptr %991, i64 %993
  %995 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zggbak_(ptr noundef @.str.12, ptr noundef @.str.16, ptr noundef %981, ptr noundef %82, ptr noundef %81, ptr noundef %985, ptr noundef %989, ptr noundef %990, ptr noundef %994, ptr noundef %995, ptr noundef %54)
  %996 = load ptr, ptr %20, align 8, !tbaa !5
  %997 = load i32, ptr %996, align 4, !tbaa !9
  store i32 %997, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %64, align 4, !tbaa !9
  br label %998

998:                                              ; preds = %1126, %980
  %999 = load i32, ptr %64, align 4, !tbaa !9
  %1000 = load i32, ptr %43, align 4, !tbaa !9
  %1001 = icmp sle i32 %999, %1000
  br i1 %1001, label %1002, label %1129

1002:                                             ; preds = %998
  store double 0.000000e+00, ptr %56, align 8, !tbaa !15
  %1003 = load ptr, ptr %20, align 8, !tbaa !5
  %1004 = load i32, ptr %1003, align 4, !tbaa !9
  store i32 %1004, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %1005

1005:                                             ; preds = %1061, %1002
  %1006 = load i32, ptr %66, align 4, !tbaa !9
  %1007 = load i32, ptr %44, align 4, !tbaa !9
  %1008 = icmp sle i32 %1006, %1007
  br i1 %1008, label %1009, label %1064

1009:                                             ; preds = %1005
  %1010 = load i32, ptr %66, align 4, !tbaa !9
  %1011 = load i32, ptr %64, align 4, !tbaa !9
  %1012 = load i32, ptr %41, align 4, !tbaa !9
  %1013 = mul nsw i32 %1011, %1012
  %1014 = add nsw i32 %1010, %1013
  store i32 %1014, ptr %45, align 4, !tbaa !9
  %1015 = load double, ptr %56, align 8, !tbaa !15
  store double %1015, ptr %49, align 8, !tbaa !15
  %1016 = load ptr, ptr %29, align 8, !tbaa !5
  %1017 = load i32, ptr %45, align 4, !tbaa !9
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds %struct.doublecomplex, ptr %1016, i64 %1018
  %1020 = getelementptr inbounds %struct.doublecomplex, ptr %1019, i32 0, i32 0
  %1021 = load double, ptr %1020, align 8, !tbaa !11
  store double %1021, ptr %47, align 8, !tbaa !15
  %1022 = load double, ptr %47, align 8, !tbaa !15
  %1023 = fcmp oge double %1022, 0.000000e+00
  br i1 %1023, label %1024, label %1026

1024:                                             ; preds = %1009
  %1025 = load double, ptr %47, align 8, !tbaa !15
  br label %1029

1026:                                             ; preds = %1009
  %1027 = load double, ptr %47, align 8, !tbaa !15
  %1028 = fneg double %1027
  br label %1029

1029:                                             ; preds = %1026, %1024
  %1030 = phi double [ %1025, %1024 ], [ %1028, %1026 ]
  %1031 = load ptr, ptr %29, align 8, !tbaa !5
  %1032 = load i32, ptr %66, align 4, !tbaa !9
  %1033 = load i32, ptr %64, align 4, !tbaa !9
  %1034 = load i32, ptr %41, align 4, !tbaa !9
  %1035 = mul nsw i32 %1033, %1034
  %1036 = add nsw i32 %1032, %1035
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds %struct.doublecomplex, ptr %1031, i64 %1037
  %1039 = call { double, double } @Cd(ptr noundef %1038)
  %1040 = extractvalue { double, double } %1039, 0
  %1041 = extractvalue { double, double } %1039, 1
  store double %1041, ptr %48, align 8, !tbaa !15
  %1042 = load double, ptr %48, align 8, !tbaa !15
  %1043 = fcmp oge double %1042, 0.000000e+00
  br i1 %1043, label %1044, label %1046

1044:                                             ; preds = %1029
  %1045 = load double, ptr %48, align 8, !tbaa !15
  br label %1049

1046:                                             ; preds = %1029
  %1047 = load double, ptr %48, align 8, !tbaa !15
  %1048 = fneg double %1047
  br label %1049

1049:                                             ; preds = %1046, %1044
  %1050 = phi double [ %1045, %1044 ], [ %1048, %1046 ]
  %1051 = fadd double %1030, %1050
  store double %1051, ptr %50, align 8, !tbaa !15
  %1052 = load double, ptr %49, align 8, !tbaa !15
  %1053 = load double, ptr %50, align 8, !tbaa !15
  %1054 = fcmp oge double %1052, %1053
  br i1 %1054, label %1055, label %1057

1055:                                             ; preds = %1049
  %1056 = load double, ptr %49, align 8, !tbaa !15
  br label %1059

1057:                                             ; preds = %1049
  %1058 = load double, ptr %50, align 8, !tbaa !15
  br label %1059

1059:                                             ; preds = %1057, %1055
  %1060 = phi double [ %1056, %1055 ], [ %1058, %1057 ]
  store double %1060, ptr %56, align 8, !tbaa !15
  br label %1061

1061:                                             ; preds = %1059
  %1062 = load i32, ptr %66, align 4, !tbaa !9
  %1063 = add nsw i32 %1062, 1
  store i32 %1063, ptr %66, align 4, !tbaa !9
  br label %1005, !llvm.loop !21

1064:                                             ; preds = %1005
  %1065 = load double, ptr %56, align 8, !tbaa !15
  %1066 = load double, ptr %78, align 8, !tbaa !15
  %1067 = fcmp olt double %1065, %1066
  br i1 %1067, label %1068, label %1069

1068:                                             ; preds = %1064
  br label %1125

1069:                                             ; preds = %1064
  %1070 = load double, ptr %56, align 8, !tbaa !15
  %1071 = fdiv double 1.000000e+00, %1070
  store double %1071, ptr %56, align 8, !tbaa !15
  %1072 = load ptr, ptr %20, align 8, !tbaa !5
  %1073 = load i32, ptr %1072, align 4, !tbaa !9
  store i32 %1073, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %1074

1074:                                             ; preds = %1121, %1069
  %1075 = load i32, ptr %66, align 4, !tbaa !9
  %1076 = load i32, ptr %44, align 4, !tbaa !9
  %1077 = icmp sle i32 %1075, %1076
  br i1 %1077, label %1078, label %1124

1078:                                             ; preds = %1074
  %1079 = load i32, ptr %66, align 4, !tbaa !9
  %1080 = load i32, ptr %64, align 4, !tbaa !9
  %1081 = load i32, ptr %41, align 4, !tbaa !9
  %1082 = mul nsw i32 %1080, %1081
  %1083 = add nsw i32 %1079, %1082
  store i32 %1083, ptr %45, align 4, !tbaa !9
  %1084 = load i32, ptr %66, align 4, !tbaa !9
  %1085 = load i32, ptr %64, align 4, !tbaa !9
  %1086 = load i32, ptr %41, align 4, !tbaa !9
  %1087 = mul nsw i32 %1085, %1086
  %1088 = add nsw i32 %1084, %1087
  store i32 %1088, ptr %46, align 4, !tbaa !9
  %1089 = load double, ptr %56, align 8, !tbaa !15
  %1090 = load ptr, ptr %29, align 8, !tbaa !5
  %1091 = load i32, ptr %46, align 4, !tbaa !9
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds %struct.doublecomplex, ptr %1090, i64 %1092
  %1094 = getelementptr inbounds %struct.doublecomplex, ptr %1093, i32 0, i32 0
  %1095 = load double, ptr %1094, align 8, !tbaa !11
  %1096 = fmul double %1089, %1095
  %1097 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %1096, ptr %1097, align 8, !tbaa !11
  %1098 = load double, ptr %56, align 8, !tbaa !15
  %1099 = load ptr, ptr %29, align 8, !tbaa !5
  %1100 = load i32, ptr %46, align 4, !tbaa !9
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds %struct.doublecomplex, ptr %1099, i64 %1101
  %1103 = getelementptr inbounds %struct.doublecomplex, ptr %1102, i32 0, i32 1
  %1104 = load double, ptr %1103, align 8, !tbaa !14
  %1105 = fmul double %1098, %1104
  %1106 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double %1105, ptr %1106, align 8, !tbaa !14
  %1107 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %1108 = load double, ptr %1107, align 8, !tbaa !11
  %1109 = load ptr, ptr %29, align 8, !tbaa !5
  %1110 = load i32, ptr %45, align 4, !tbaa !9
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds %struct.doublecomplex, ptr %1109, i64 %1111
  %1113 = getelementptr inbounds %struct.doublecomplex, ptr %1112, i32 0, i32 0
  store double %1108, ptr %1113, align 8, !tbaa !11
  %1114 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %1115 = load double, ptr %1114, align 8, !tbaa !14
  %1116 = load ptr, ptr %29, align 8, !tbaa !5
  %1117 = load i32, ptr %45, align 4, !tbaa !9
  %1118 = sext i32 %1117 to i64
  %1119 = getelementptr inbounds %struct.doublecomplex, ptr %1116, i64 %1118
  %1120 = getelementptr inbounds %struct.doublecomplex, ptr %1119, i32 0, i32 1
  store double %1115, ptr %1120, align 8, !tbaa !14
  br label %1121

1121:                                             ; preds = %1078
  %1122 = load i32, ptr %66, align 4, !tbaa !9
  %1123 = add nsw i32 %1122, 1
  store i32 %1123, ptr %66, align 4, !tbaa !9
  br label %1074, !llvm.loop !22

1124:                                             ; preds = %1074
  br label %1125

1125:                                             ; preds = %1124, %1068
  br label %1126

1126:                                             ; preds = %1125
  %1127 = load i32, ptr %64, align 4, !tbaa !9
  %1128 = add nsw i32 %1127, 1
  store i32 %1128, ptr %64, align 4, !tbaa !9
  br label %998, !llvm.loop !23

1129:                                             ; preds = %998
  br label %1130

1130:                                             ; preds = %1129, %977
  br label %1131

1131:                                             ; preds = %1130, %768
  br label %1132

1132:                                             ; preds = %1131, %819, %767
  %1133 = load i32, ptr %67, align 4, !tbaa !9
  %1134 = icmp ne i32 %1133, 0
  br i1 %1134, label %1135, label %1140

1135:                                             ; preds = %1132
  %1136 = load ptr, ptr %20, align 8, !tbaa !5
  %1137 = load ptr, ptr %25, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.doublecomplex, ptr %1137, i64 1
  %1139 = load ptr, ptr %20, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %75, ptr noundef %52, ptr noundef %1136, ptr noundef @c__1, ptr noundef %1138, ptr noundef %1139, ptr noundef %54)
  br label %1140

1140:                                             ; preds = %1135, %1132
  %1141 = load i32, ptr %68, align 4, !tbaa !9
  %1142 = icmp ne i32 %1141, 0
  br i1 %1142, label %1143, label %1148

1143:                                             ; preds = %1140
  %1144 = load ptr, ptr %20, align 8, !tbaa !5
  %1145 = load ptr, ptr %26, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.doublecomplex, ptr %1145, i64 1
  %1147 = load ptr, ptr %20, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %77, ptr noundef %53, ptr noundef %1144, ptr noundef @c__1, ptr noundef %1146, ptr noundef %1147, ptr noundef %54)
  br label %1148

1148:                                             ; preds = %1143, %1140
  %1149 = load i32, ptr %79, align 4, !tbaa !9
  %1150 = sitofp i32 %1149 to double
  %1151 = load ptr, ptr %31, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.doublecomplex, ptr %1151, i64 1
  %1153 = getelementptr inbounds %struct.doublecomplex, ptr %1152, i32 0, i32 0
  store double %1150, ptr %1153, align 8, !tbaa !11
  %1154 = load ptr, ptr %31, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %1154, i64 1
  %1156 = getelementptr inbounds %struct.doublecomplex, ptr %1155, i32 0, i32 1
  store double 0.000000e+00, ptr %1156, align 8, !tbaa !14
  store i32 1, ptr %85, align 4
  br label %1157

1157:                                             ; preds = %1148, %365, %359, %351
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  ret void
}

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

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

declare void @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: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) #4

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

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

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

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


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

%struct.doublecomplex = type { double, double }

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

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

49:                                               ; preds = %17
  %50 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %.not410 = icmp ne i32 %50, 0
  %51 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #6
  %.not411 = icmp eq i32 %51, 0
  br i1 %.not411, label %54, label %.thread

.thread531:                                       ; preds = %17
  %52 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #6
  %.not411532 = icmp eq i32 %52, 0
  br i1 %.not411532, label %.thread538, label %.thread.thread

.thread538:                                       ; preds = %.thread531
  %53 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %56

.thread.thread:                                   ; preds = %.thread531
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %.thread439

54:                                               ; preds = %49
  %55 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  store i32 0, ptr %16, align 4, !tbaa !5
  br i1 %.not410, label %56, label %.thread451.sink.split

.thread:                                          ; preds = %49
  store i32 0, ptr %16, align 4, !tbaa !5
  br i1 %.not410, label %.thread439, label %.thread451.sink.split

56:                                               ; preds = %.thread538, %54
  %57 = phi i32 [ %53, %.thread538 ], [ %55, %54 ]
  %.not412.not = icmp eq i32 %57, 0
  br i1 %.not412.not, label %.thread451.sink.split, label %.thread439

.thread439:                                       ; preds = %.thread.thread, %.thread, %56
  %.not411533 = phi i1 [ true, %56 ], [ false, %.thread ], [ false, %.thread.thread ]
  %58 = phi i1 [ %.not, %56 ], [ %.not410, %.thread ], [ false, %.thread.thread ]
  %59 = phi i1 [ true, %56 ], [ %.not410, %.thread ], [ false, %.thread.thread ]
  %.in = load i32, ptr %14, align 4, !tbaa !5
  %60 = icmp eq i32 %.in, -1
  %61 = load i32, ptr %2, align 4, !tbaa !5
  %62 = icmp slt i32 %61, 0
  br i1 %62, label %.thread451.sink.split, label %63

63:                                               ; preds = %.thread439
  %64 = load i32, ptr %4, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %61, i32 1)
  %65 = icmp slt i32 %64, %spec.select
  br i1 %65, label %.thread451.sink.split, label %66

66:                                               ; preds = %63
  %67 = load i32, ptr %6, align 4, !tbaa !5
  %68 = icmp slt i32 %67, %spec.select
  br i1 %68, label %.thread451.sink.split, label %69

69:                                               ; preds = %66
  %70 = load i32, ptr %10, align 4, !tbaa !5
  %71 = icmp slt i32 %70, 1
  %72 = icmp ult i32 %70, %61
  %or.cond473 = and i1 %58, %72
  %or.cond475 = select i1 %71, i1 true, i1 %or.cond473
  br i1 %or.cond475, label %.thread451.sink.split, label %73

73:                                               ; preds = %69
  %74 = load i32, ptr %12, align 4, !tbaa !5
  %75 = icmp slt i32 %74, 1
  %76 = icmp ult i32 %74, %61
  %or.cond474 = and i1 %.not411533, %76
  %or.cond476 = or i1 %75, %or.cond474
  br i1 %or.cond476, label %.thread451.sink.split, label %77

77:                                               ; preds = %73
  %78 = shl nuw i32 %61, 1
  %79 = tail call i32 @llvm.smax.i32(i32 %78, i32 1)
  %80 = tail call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c__0, i32 noundef 6, i32 noundef 1) #6
  %81 = add i32 %80, 1
  %82 = mul i32 %81, %61
  %83 = tail call i32 @llvm.smax.i32(i32 %82, i32 1)
  store i32 %83, ptr %18, align 4, !tbaa !5
  %84 = load i32, ptr %2, align 4, !tbaa !5
  %85 = tail call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c__0, i32 noundef 6, i32 noundef 1) #6
  %86 = add i32 %85, 1
  %87 = mul i32 %86, %84
  store i32 %87, ptr %19, align 4, !tbaa !5
  %88 = tail call i32 @llvm.smax.i32(i32 %83, i32 %87)
  br i1 %58, label %89, label %95

89:                                               ; preds = %77
  store i32 %88, ptr %18, align 4, !tbaa !5
  %90 = load i32, ptr %2, align 4, !tbaa !5
  %91 = tail call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #6
  %92 = add i32 %91, 1
  %93 = mul i32 %92, %90
  store i32 %93, ptr %19, align 4, !tbaa !5
  %94 = tail call i32 @llvm.smax.i32(i32 %88, i32 %93)
  br label %95

95:                                               ; preds = %89, %77
  %.0 = phi i32 [ %94, %89 ], [ %88, %77 ]
  %96 = uitofp nneg i32 %.0 to double
  store double %96, ptr %13, align 8, !tbaa !9
  %97 = getelementptr inbounds i8, ptr %13, i64 8
  store double 0.000000e+00, ptr %97, align 8, !tbaa !12
  %98 = load i32, ptr %14, align 4, !tbaa !5
  %99 = icmp sge i32 %98, %79
  %or.cond = select i1 %99, i1 true, i1 %60
  br i1 %or.cond, label %.thread443, label %.thread451.sink.split

.thread443:                                       ; preds = %95
  %.pr447.pr = load i32, ptr %16, align 4, !tbaa !5
  %.not416 = icmp eq i32 %.pr447.pr, 0
  br i1 %.not416, label %103, label %.thread451

.thread451.sink.split:                            ; preds = %95, %73, %69, %66, %63, %.thread439, %56, %54, %.thread
  %.sink = phi i32 [ -1, %.thread ], [ -1, %54 ], [ -2, %56 ], [ -3, %.thread439 ], [ -5, %63 ], [ -7, %66 ], [ -11, %69 ], [ -13, %73 ], [ -15, %95 ]
  store i32 %.sink, ptr %16, align 4, !tbaa !5
  br label %.thread451

.thread451:                                       ; preds = %.thread451.sink.split, %.thread443
  %100 = phi i32 [ %.pr447.pr, %.thread443 ], [ %.sink, %.thread451.sink.split ]
  %101 = sub nsw i32 0, %100
  store i32 %101, ptr %18, align 4, !tbaa !5
  %102 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %18, i32 noundef 6) #6
  br label %302

103:                                              ; preds = %.thread443
  br i1 %60, label %302, label %104

104:                                              ; preds = %103
  %105 = load i32, ptr %2, align 4, !tbaa !5
  %106 = icmp eq i32 %105, 0
  br i1 %106, label %302, label %107

107:                                              ; preds = %104
  %108 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #6
  %109 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #6
  %110 = fmul double %108, %109
  %111 = tail call double @dlamch_(ptr noundef nonnull @.str.9) #6
  store double %111, ptr %31, align 8, !tbaa !13
  %112 = fdiv double 1.000000e+00, %111
  store double %112, ptr %28, align 8, !tbaa !13
  call void @dlabad_(ptr noundef nonnull %31, ptr noundef nonnull %28) #6
  %113 = load double, ptr %31, align 8, !tbaa !13
  %114 = call double @sqrt(double noundef %113) #6
  %115 = fdiv double %114, %110
  store double %115, ptr %31, align 8, !tbaa !13
  %116 = fdiv double 1.000000e+00, %115
  store double %116, ptr %28, align 8, !tbaa !13
  %117 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %15) #6
  store double %117, ptr %20, align 8, !tbaa !13
  %118 = fcmp ogt double %117, 0.000000e+00
  %119 = load double, ptr %31, align 8
  %120 = fcmp olt double %117, %119
  %or.cond481 = select i1 %118, i1 %120, i1 false
  br i1 %or.cond481, label %124, label %121

121:                                              ; preds = %107
  %122 = load double, ptr %28, align 8, !tbaa !13
  %123 = fcmp ogt double %117, %122
  br i1 %123, label %124, label %125

124:                                              ; preds = %107, %121
  %storemerge477 = phi double [ %122, %121 ], [ %119, %107 ]
  store double %storemerge477, ptr %29, align 8, !tbaa !13
  call void @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %20, ptr noundef nonnull %29, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %22) #6
  br label %125

125:                                              ; preds = %121, %124
  %.not417458 = phi i1 [ false, %124 ], [ true, %121 ]
  %126 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %15) #6
  store double %126, ptr %21, align 8, !tbaa !13
  %127 = fcmp ogt double %126, 0.000000e+00
  %128 = load double, ptr %31, align 8
  %129 = fcmp olt double %126, %128
  %or.cond483 = select i1 %127, i1 %129, i1 false
  br i1 %or.cond483, label %133, label %130

130:                                              ; preds = %125
  %131 = load double, ptr %28, align 8, !tbaa !13
  %132 = fcmp ogt double %126, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %125, %130
  %storemerge478 = phi double [ %131, %130 ], [ %128, %125 ]
  store double %storemerge478, ptr %30, align 8, !tbaa !13
  call void @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %21, ptr noundef nonnull %30, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %22) #6
  br label %134

134:                                              ; preds = %130, %133
  %.not419463 = phi i1 [ false, %133 ], [ true, %130 ]
  %135 = load i32, ptr %2, align 4, !tbaa !5
  %136 = add nsw i32 %135, 1
  %137 = add nsw i32 %136, %135
  %138 = sext i32 %136 to i64
  %139 = getelementptr inbounds double, ptr %47, i64 %138
  %140 = sext i32 %137 to i64
  %141 = getelementptr inbounds double, ptr %47, i64 %140
  call void @zggbal_(ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %139, ptr noundef nonnull %141, ptr noundef nonnull %22) #6
  %142 = load i32, ptr %32, align 4, !tbaa !5
  %143 = add nsw i32 %142, 1
  %144 = load i32, ptr %33, align 4, !tbaa !5
  %145 = sub i32 %143, %144
  store i32 %145, ptr %24, align 4, !tbaa !5
  br i1 %59, label %146, label %149

146:                                              ; preds = %134
  %147 = load i32, ptr %2, align 4, !tbaa !5
  %reass.sub = sub i32 %147, %144
  %148 = add i32 %reass.sub, 1
  br label %149

149:                                              ; preds = %134, %146
  %storemerge = phi i32 [ %148, %146 ], [ %145, %134 ]
  store i32 %storemerge, ptr %23, align 4, !tbaa !5
  %150 = load i32, ptr %14, align 4, !tbaa !5
  %151 = sub i32 %150, %145
  store i32 %151, ptr %18, align 4, !tbaa !5
  %152 = add i32 %37, 1
  %153 = mul i32 %144, %152
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %154
  %156 = sext i32 %145 to i64
  %157 = getelementptr %struct.doublecomplex, ptr %46, i64 %156
  %158 = getelementptr i8, ptr %157, i64 16
  call void @zgeqrf_(ptr noundef nonnull %24, ptr noundef nonnull %23, ptr noundef %155, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef nonnull %158, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  %159 = load i32, ptr %14, align 4, !tbaa !5
  %160 = sub i32 %159, %145
  store i32 %160, ptr %18, align 4, !tbaa !5
  %161 = load i32, ptr %33, align 4, !tbaa !5
  %162 = mul i32 %161, %152
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %163
  %165 = add i32 %34, 1
  %166 = mul i32 %161, %165
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %167
  call void @zunmqr_(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14, ptr noundef nonnull %24, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef %164, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %168, ptr noundef nonnull %4, ptr noundef nonnull %158, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  br i1 %58, label %169, label %192

169:                                              ; preds = %149
  call void @zlaset_(ptr noundef nonnull @.str.15, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %9, ptr noundef nonnull %10) #6
  %170 = load i32, ptr %24, align 4, !tbaa !5
  %171 = icmp sgt i32 %170, 1
  br i1 %171, label %172, label %184

172:                                              ; preds = %169
  %173 = add nsw i32 %170, -1
  store i32 %173, ptr %18, align 4, !tbaa !5
  store i32 %173, ptr %19, align 4, !tbaa !5
  %174 = load i32, ptr %33, align 4, !tbaa !5
  %175 = add nsw i32 %174, 1
  %176 = mul nsw i32 %174, %37
  %177 = add nsw i32 %175, %176
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %178
  %180 = mul nsw i32 %174, %40
  %181 = add nsw i32 %175, %180
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds %struct.doublecomplex, ptr %42, i64 %182
  call void @zlacpy_(ptr noundef nonnull @.str.13, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %179, ptr noundef nonnull %6, ptr noundef %183, ptr noundef nonnull %10) #6
  br label %184

184:                                              ; preds = %172, %169
  %185 = load i32, ptr %14, align 4, !tbaa !5
  %186 = sub i32 %185, %145
  store i32 %186, ptr %18, align 4, !tbaa !5
  %187 = load i32, ptr %33, align 4, !tbaa !5
  %188 = add i32 %40, 1
  %189 = mul i32 %187, %188
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds %struct.doublecomplex, ptr %42, i64 %190
  call void @zungqr_(ptr noundef nonnull %24, ptr noundef nonnull %24, ptr noundef nonnull %24, ptr noundef %191, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef nonnull %158, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  br label %192

192:                                              ; preds = %184, %149
  br i1 %.not411533, label %193, label %194

193:                                              ; preds = %192
  call void @zlaset_(ptr noundef nonnull @.str.15, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %11, ptr noundef nonnull %12) #6
  br label %194

194:                                              ; preds = %193, %192
  br i1 %59, label %195, label %196

195:                                              ; preds = %194
  call void @zgghrd_(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %22) #6
  br label %204

196:                                              ; preds = %194
  %197 = load i32, ptr %33, align 4, !tbaa !5
  %198 = mul i32 %197, %165
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %199
  %201 = mul i32 %197, %152
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %202
  call void @zgghrd_(ptr noundef nonnull @.str, ptr noundef nonnull @.str, ptr noundef nonnull %24, ptr noundef nonnull @c__1, ptr noundef nonnull %24, ptr noundef %200, ptr noundef nonnull %4, ptr noundef %203, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %22) #6
  br label %204

204:                                              ; preds = %196, %195
  %.437 = phi i8 [ 69, %196 ], [ 83, %195 ]
  store i8 %.437, ptr %27, align 1, !tbaa !14
  %205 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %205, ptr %18, align 4, !tbaa !5
  call void @zhgeqz_(ptr noundef nonnull %27, ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %18, ptr noundef nonnull %141, ptr noundef nonnull %22) #6
  %206 = load i32, ptr %22, align 4, !tbaa !5
  %.not423 = icmp eq i32 %206, 0
  br i1 %.not423, label %216, label %207

207:                                              ; preds = %204
  %208 = icmp slt i32 %206, 1
  %.pre = load i32, ptr %2, align 4, !tbaa !5
  %.not431 = icmp sgt i32 %206, %.pre
  %or.cond548 = select i1 %208, i1 true, i1 %.not431
  br i1 %or.cond548, label %209, label %.loopexit484.sink.split

209:                                              ; preds = %207
  %210 = icmp sle i32 %206, %.pre
  %211 = shl i32 %.pre, 1
  %.not432 = icmp sgt i32 %206, %211
  %or.cond438 = or i1 %210, %.not432
  br i1 %or.cond438, label %214, label %212

212:                                              ; preds = %209
  %213 = sub nsw i32 %206, %.pre
  br label %.loopexit484.sink.split

214:                                              ; preds = %209
  %215 = add nsw i32 %.pre, 1
  br label %.loopexit484.sink.split

216:                                              ; preds = %204
  br i1 %59, label %217, label %.loopexit484

217:                                              ; preds = %216
  br i1 %58, label %218, label %.thread464

218:                                              ; preds = %217
  %. = select i1 %.not411533, i8 66, i8 76
  store i8 %., ptr %27, align 1, !tbaa !14
  call void @ztgevc_(ptr noundef nonnull %27, ptr noundef nonnull @.str.8, ptr noundef nonnull %26, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %2, ptr noundef nonnull %25, ptr noundef nonnull %13, ptr noundef nonnull %141, ptr noundef nonnull %22) #6
  %219 = load i32, ptr %22, align 4, !tbaa !5
  %.not424 = icmp eq i32 %219, 0
  br i1 %.not424, label %224, label %221

.thread464:                                       ; preds = %217
  store i8 82, ptr %27, align 1, !tbaa !14
  call void @ztgevc_(ptr noundef nonnull %27, ptr noundef nonnull @.str.8, ptr noundef nonnull %26, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %2, ptr noundef nonnull %25, ptr noundef nonnull %13, ptr noundef nonnull %141, ptr noundef nonnull %22) #6
  %220 = load i32, ptr %22, align 4, !tbaa !5
  %.not424465 = icmp eq i32 %220, 0
  br i1 %.not424465, label %.thread466, label %221

221:                                              ; preds = %.thread464, %218
  %222 = load i32, ptr %2, align 4, !tbaa !5
  %223 = add nsw i32 %222, 2
  br label %.loopexit484.sink.split

224:                                              ; preds = %218
  call void @zggbak_(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.13, ptr noundef nonnull %2, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %139, ptr noundef nonnull %2, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %22) #6
  %225 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %225, ptr %18, align 4, !tbaa !5
  %.not425493 = icmp slt i32 %225, 1
  br i1 %.not425493, label %.thread466, label %.lr.ph496.preheader

.lr.ph496.preheader:                              ; preds = %224
  %226 = sext i32 %40 to i64
  br label %.lr.ph496

.lr.ph496thread-pre-split:                        ; preds = %.loopexit485
  %indvars.iv.next518 = add nuw nsw i64 %indvars.iv517, 1
  %.pr = load i32, ptr %2, align 4, !tbaa !5
  br label %.lr.ph496

.lr.ph496:                                        ; preds = %.lr.ph496thread-pre-split, %.lr.ph496.preheader
  %227 = phi i32 [ %.pr, %.lr.ph496thread-pre-split ], [ %225, %.lr.ph496.preheader ]
  %indvars.iv517 = phi i64 [ %indvars.iv.next518, %.lr.ph496thread-pre-split ], [ 1, %.lr.ph496.preheader ]
  store i32 %227, ptr %19, align 4, !tbaa !5
  %.not429486 = icmp slt i32 %227, 1
  br i1 %.not429486, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph496
  %228 = mul nsw i64 %indvars.iv517, %226
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %42, i64 %228
  br label %229

229:                                              ; preds = %.lr.ph, %229
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %229 ]
  %.0393487 = phi double [ 0.000000e+00, %.lr.ph ], [ %241, %229 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %indvars.iv
  %230 = load double, ptr %gep, align 8, !tbaa !9
  %231 = call { double, double } @Cd(ptr noundef nonnull %gep)
  %232 = extractvalue { double, double } %231, 1
  %233 = insertelement <2 x double> poison, double %230, i64 0
  %234 = insertelement <2 x double> %233, double %232, i64 1
  %235 = fcmp oge <2 x double> %234, zeroinitializer
  %236 = fneg <2 x double> %234
  %237 = select <2 x i1> %235, <2 x double> %234, <2 x double> %236
  %shift = shufflevector <2 x double> %237, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %238 = fadd <2 x double> %237, %shift
  %239 = extractelement <2 x double> %238, i64 0
  %240 = fcmp oge double %.0393487, %239
  %241 = select i1 %240, double %.0393487, double %239
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %242 = load i32, ptr %19, align 4, !tbaa !5
  %243 = sext i32 %242 to i64
  %.not429.not = icmp slt i64 %indvars.iv, %243
  br i1 %.not429.not, label %229, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %229, %.lr.ph496
  %.0393.lcssa = phi double [ 0.000000e+00, %.lr.ph496 ], [ %241, %229 ]
  %244 = load double, ptr %31, align 8, !tbaa !13
  %245 = fcmp olt double %.0393.lcssa, %244
  br i1 %245, label %.loopexit485, label %246

246:                                              ; preds = %._crit_edge
  %247 = fdiv double 1.000000e+00, %.0393.lcssa
  %248 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %248, ptr %19, align 4, !tbaa !5
  %.not430489 = icmp slt i32 %248, 1
  br i1 %.not430489, label %.loopexit485, label %.lr.ph492

.lr.ph492:                                        ; preds = %246
  %249 = mul nsw i64 %indvars.iv517, %226
  %250 = add nuw i32 %248, 1
  %wide.trip.count = zext i32 %250 to i64
  %invariant.gep542 = getelementptr %struct.doublecomplex, ptr %42, i64 %249
  %251 = zext nneg i32 %248 to i64
  %min.iters.check = icmp eq i32 %248, 1
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph492
  %n.vec = and i64 %251, 2147483646
  %ind.end = or i64 %251, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %247, i64 0
  %252 = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %253 = getelementptr %struct.doublecomplex, ptr %invariant.gep542, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %253, align 8, !tbaa !13
  %interleaved.vec = fmul <4 x double> %252, %wide.vec
  store <4 x double> %interleaved.vec, ptr %253, align 8, !tbaa !13
  %index.next = add nuw i64 %index, 2
  %254 = icmp eq i64 %index.next, %n.vec
  br i1 %254, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %251
  br i1 %cmp.n, label %.loopexit485, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph492
  %indvars.iv514.ph = phi i64 [ 1, %.lr.ph492 ], [ %ind.end, %middle.block ]
  %255 = insertelement <2 x double> poison, double %247, i64 0
  %256 = shufflevector <2 x double> %255, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv514 = phi i64 [ %indvars.iv.next515, %scalar.ph ], [ %indvars.iv514.ph, %scalar.ph.preheader ]
  %gep543 = getelementptr %struct.doublecomplex, ptr %invariant.gep542, i64 %indvars.iv514
  %257 = load <2 x double>, ptr %gep543, align 8, !tbaa !13
  %258 = fmul <2 x double> %256, %257
  store <2 x double> %258, ptr %gep543, align 8, !tbaa !13
  %indvars.iv.next515 = add nuw nsw i64 %indvars.iv514, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next515, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit485, label %scalar.ph, !llvm.loop !20

.loopexit485:                                     ; preds = %scalar.ph, %middle.block, %246, %._crit_edge
  %259 = load i32, ptr %18, align 4, !tbaa !5
  %260 = sext i32 %259 to i64
  %.not425.not = icmp slt i64 %indvars.iv517, %260
  br i1 %.not425.not, label %.lr.ph496thread-pre-split, label %.thread466, !llvm.loop !21

.thread466:                                       ; preds = %.loopexit485, %224, %.thread464
  br i1 %.not411533, label %261, label %.loopexit484

261:                                              ; preds = %.thread466
  call void @zggbak_(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.16, ptr noundef nonnull %2, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %139, ptr noundef nonnull %2, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %22) #6
  %262 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %262, ptr %18, align 4, !tbaa !5
  %.not426508 = icmp slt i32 %262, 1
  br i1 %.not426508, label %.loopexit484, label %.lr.ph511.preheader

.lr.ph511.preheader:                              ; preds = %261
  %263 = sext i32 %43 to i64
  br label %.lr.ph511

.lr.ph511thread-pre-split:                        ; preds = %.loopexit
  %indvars.iv.next529 = add nuw nsw i64 %indvars.iv528, 1
  %.pr537 = load i32, ptr %2, align 4, !tbaa !5
  br label %.lr.ph511

.lr.ph511:                                        ; preds = %.lr.ph511thread-pre-split, %.lr.ph511.preheader
  %264 = phi i32 [ %.pr537, %.lr.ph511thread-pre-split ], [ %262, %.lr.ph511.preheader ]
  %indvars.iv528 = phi i64 [ %indvars.iv.next529, %.lr.ph511thread-pre-split ], [ 1, %.lr.ph511.preheader ]
  store i32 %264, ptr %19, align 4, !tbaa !5
  %.not427497 = icmp slt i32 %264, 1
  br i1 %.not427497, label %._crit_edge502, label %.lr.ph501

.lr.ph501:                                        ; preds = %.lr.ph511
  %265 = mul nsw i64 %indvars.iv528, %263
  %invariant.gep544 = getelementptr %struct.doublecomplex, ptr %45, i64 %265
  br label %266

266:                                              ; preds = %.lr.ph501, %266
  %indvars.iv520 = phi i64 [ 1, %.lr.ph501 ], [ %indvars.iv.next521, %266 ]
  %.1394498 = phi double [ 0.000000e+00, %.lr.ph501 ], [ %278, %266 ]
  %gep545 = getelementptr %struct.doublecomplex, ptr %invariant.gep544, i64 %indvars.iv520
  %267 = load double, ptr %gep545, align 8, !tbaa !9
  %268 = call { double, double } @Cd(ptr noundef nonnull %gep545)
  %269 = extractvalue { double, double } %268, 1
  %270 = insertelement <2 x double> poison, double %267, i64 0
  %271 = insertelement <2 x double> %270, double %269, i64 1
  %272 = fcmp oge <2 x double> %271, zeroinitializer
  %273 = fneg <2 x double> %271
  %274 = select <2 x i1> %272, <2 x double> %271, <2 x double> %273
  %shift571 = shufflevector <2 x double> %274, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %275 = fadd <2 x double> %274, %shift571
  %276 = extractelement <2 x double> %275, i64 0
  %277 = fcmp oge double %.1394498, %276
  %278 = select i1 %277, double %.1394498, double %276
  %indvars.iv.next521 = add nuw nsw i64 %indvars.iv520, 1
  %279 = load i32, ptr %19, align 4, !tbaa !5
  %280 = sext i32 %279 to i64
  %.not427.not = icmp slt i64 %indvars.iv520, %280
  br i1 %.not427.not, label %266, label %._crit_edge502, !llvm.loop !22

._crit_edge502:                                   ; preds = %266, %.lr.ph511
  %.1394.lcssa = phi double [ 0.000000e+00, %.lr.ph511 ], [ %278, %266 ]
  %281 = load double, ptr %31, align 8, !tbaa !13
  %282 = fcmp olt double %.1394.lcssa, %281
  br i1 %282, label %.loopexit, label %283

283:                                              ; preds = %._crit_edge502
  %284 = fdiv double 1.000000e+00, %.1394.lcssa
  %285 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %285, ptr %19, align 4, !tbaa !5
  %.not428504 = icmp slt i32 %285, 1
  br i1 %.not428504, label %.loopexit, label %.lr.ph507

.lr.ph507:                                        ; preds = %283
  %286 = mul nsw i64 %indvars.iv528, %263
  %287 = add nuw i32 %285, 1
  %wide.trip.count526 = zext i32 %287 to i64
  %invariant.gep546 = getelementptr %struct.doublecomplex, ptr %45, i64 %286
  %288 = zext nneg i32 %285 to i64
  %min.iters.check554 = icmp eq i32 %285, 1
  br i1 %min.iters.check554, label %scalar.ph553.preheader, label %vector.ph555

vector.ph555:                                     ; preds = %.lr.ph507
  %n.vec557 = and i64 %288, 2147483646
  %ind.end558 = or i64 %288, 1
  %broadcast.splatinsert566 = insertelement <2 x double> poison, double %284, i64 0
  %289 = shufflevector <2 x double> %broadcast.splatinsert566, <2 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body560

vector.body560:                                   ; preds = %vector.body560, %vector.ph555
  %index561 = phi i64 [ 0, %vector.ph555 ], [ %index.next569, %vector.body560 ]
  %offset.idx562 = or disjoint i64 %index561, 1
  %290 = getelementptr %struct.doublecomplex, ptr %invariant.gep546, i64 %offset.idx562
  %wide.vec563 = load <4 x double>, ptr %290, align 8, !tbaa !13
  %interleaved.vec568 = fmul <4 x double> %289, %wide.vec563
  store <4 x double> %interleaved.vec568, ptr %290, align 8, !tbaa !13
  %index.next569 = add nuw i64 %index561, 2
  %291 = icmp eq i64 %index.next569, %n.vec557
  br i1 %291, label %middle.block552, label %vector.body560, !llvm.loop !23

middle.block552:                                  ; preds = %vector.body560
  %cmp.n570 = icmp eq i64 %n.vec557, %288
  br i1 %cmp.n570, label %.loopexit, label %scalar.ph553.preheader

scalar.ph553.preheader:                           ; preds = %middle.block552, %.lr.ph507
  %indvars.iv523.ph = phi i64 [ 1, %.lr.ph507 ], [ %ind.end558, %middle.block552 ]
  %292 = insertelement <2 x double> poison, double %284, i64 0
  %293 = shufflevector <2 x double> %292, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph553

scalar.ph553:                                     ; preds = %scalar.ph553.preheader, %scalar.ph553
  %indvars.iv523 = phi i64 [ %indvars.iv.next524, %scalar.ph553 ], [ %indvars.iv523.ph, %scalar.ph553.preheader ]
  %gep547 = getelementptr %struct.doublecomplex, ptr %invariant.gep546, i64 %indvars.iv523
  %294 = load <2 x double>, ptr %gep547, align 8, !tbaa !13
  %295 = fmul <2 x double> %293, %294
  store <2 x double> %295, ptr %gep547, align 8, !tbaa !13
  %indvars.iv.next524 = add nuw nsw i64 %indvars.iv523, 1
  %exitcond527.not = icmp eq i64 %indvars.iv.next524, %wide.trip.count526
  br i1 %exitcond527.not, label %.loopexit, label %scalar.ph553, !llvm.loop !24

.loopexit:                                        ; preds = %scalar.ph553, %middle.block552, %283, %._crit_edge502
  %296 = load i32, ptr %18, align 4, !tbaa !5
  %297 = sext i32 %296 to i64
  %.not426.not = icmp slt i64 %indvars.iv528, %297
  br i1 %.not426.not, label %.lr.ph511thread-pre-split, label %.loopexit484, !llvm.loop !25

.loopexit484.sink.split:                          ; preds = %207, %221, %212, %214
  %.sink549 = phi i32 [ %215, %214 ], [ %213, %212 ], [ %223, %221 ], [ %206, %207 ]
  store i32 %.sink549, ptr %16, align 4, !tbaa !5
  br label %.loopexit484

.loopexit484:                                     ; preds = %.loopexit, %.loopexit484.sink.split, %261, %216, %.thread466
  br i1 %.not417458, label %299, label %298

298:                                              ; preds = %.loopexit484
  call void @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %29, ptr noundef nonnull %20, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef %7, ptr noundef nonnull %2, ptr noundef nonnull %22) #6
  br label %299

299:                                              ; preds = %298, %.loopexit484
  br i1 %.not419463, label %301, label %300

300:                                              ; preds = %299
  call void @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %30, ptr noundef nonnull %21, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef %8, ptr noundef nonnull %2, ptr noundef nonnull %22) #6
  br label %301

301:                                              ; preds = %300, %299
  store double %96, ptr %13, align 8, !tbaa !9
  store double 0.000000e+00, ptr %97, align 8, !tbaa !12
  br label %302

302:                                              ; preds = %104, %103, %301, %.thread451
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  ret void
}

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

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

declare void @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: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) local_unnamed_addr #4

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!11, !11, i64 0}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16, !18, !19}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !16, !19, !18}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16, !18, !19}
!24 = distinct !{!24, !16, !19, !18}
!25 = distinct !{!25, !16}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass