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

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

; Function Attrs: nounwind uwtable
define dso_local void @zggev3_(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 double, align 8
  %77 = alloca double, align 8
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca double, align 8
  %83 = alloca i32, align 4
  %84 = 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 8, ptr %76) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.start.p0(i64 4, 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 8, ptr %82) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #5
  %85 = load ptr, ptr %22, align 8, !tbaa !5
  %86 = load i32, ptr %85, align 4, !tbaa !9
  store i32 %86, ptr %35, align 4, !tbaa !9
  %87 = load i32, ptr %35, align 4, !tbaa !9
  %88 = mul nsw i32 %87, 1
  %89 = add nsw i32 1, %88
  store i32 %89, ptr %36, align 4, !tbaa !9
  %90 = load i32, ptr %36, align 4, !tbaa !9
  %91 = load ptr, ptr %21, align 8, !tbaa !5
  %92 = sext i32 %90 to i64
  %93 = sub i64 0, %92
  %94 = getelementptr inbounds %struct.doublecomplex, ptr %91, i64 %93
  store ptr %94, ptr %21, align 8, !tbaa !5
  %95 = load ptr, ptr %24, align 8, !tbaa !5
  %96 = load i32, ptr %95, align 4, !tbaa !9
  store i32 %96, ptr %37, align 4, !tbaa !9
  %97 = load i32, ptr %37, align 4, !tbaa !9
  %98 = mul nsw i32 %97, 1
  %99 = add nsw i32 1, %98
  store i32 %99, ptr %38, align 4, !tbaa !9
  %100 = load i32, ptr %38, align 4, !tbaa !9
  %101 = load ptr, ptr %23, align 8, !tbaa !5
  %102 = sext i32 %100 to i64
  %103 = sub i64 0, %102
  %104 = getelementptr inbounds %struct.doublecomplex, ptr %101, i64 %103
  store ptr %104, ptr %23, align 8, !tbaa !5
  %105 = load ptr, ptr %25, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.doublecomplex, ptr %105, i32 -1
  store ptr %106, ptr %25, align 8, !tbaa !5
  %107 = load ptr, ptr %26, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.doublecomplex, ptr %107, i32 -1
  store ptr %108, ptr %26, align 8, !tbaa !5
  %109 = load ptr, ptr %28, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  store i32 %110, ptr %39, align 4, !tbaa !9
  %111 = load i32, ptr %39, align 4, !tbaa !9
  %112 = mul nsw i32 %111, 1
  %113 = add nsw i32 1, %112
  store i32 %113, ptr %40, align 4, !tbaa !9
  %114 = load i32, ptr %40, align 4, !tbaa !9
  %115 = load ptr, ptr %27, align 8, !tbaa !5
  %116 = sext i32 %114 to i64
  %117 = sub i64 0, %116
  %118 = getelementptr inbounds %struct.doublecomplex, ptr %115, i64 %117
  store ptr %118, ptr %27, align 8, !tbaa !5
  %119 = load ptr, ptr %30, align 8, !tbaa !5
  %120 = load i32, ptr %119, align 4, !tbaa !9
  store i32 %120, ptr %41, align 4, !tbaa !9
  %121 = load i32, ptr %41, align 4, !tbaa !9
  %122 = mul nsw i32 %121, 1
  %123 = add nsw i32 1, %122
  store i32 %123, ptr %42, align 4, !tbaa !9
  %124 = load i32, ptr %42, align 4, !tbaa !9
  %125 = load ptr, ptr %29, align 8, !tbaa !5
  %126 = sext i32 %124 to i64
  %127 = sub i64 0, %126
  %128 = getelementptr inbounds %struct.doublecomplex, ptr %125, i64 %127
  store ptr %128, ptr %29, align 8, !tbaa !5
  %129 = load ptr, ptr %31, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.doublecomplex, ptr %129, i32 -1
  store ptr %130, ptr %31, align 8, !tbaa !5
  %131 = load ptr, ptr %33, align 8, !tbaa !5
  %132 = getelementptr inbounds double, ptr %131, i32 -1
  store ptr %132, ptr %33, align 8, !tbaa !5
  %133 = load ptr, ptr %18, align 8, !tbaa !5
  %134 = call i32 @lsame_(ptr noundef %133, ptr noundef @.str)
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %136, label %137

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

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

141:                                              ; preds = %137
  store i32 2, ptr %72, align 4, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !9
  br label %143

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

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

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

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

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

153:                                              ; preds = %149
  store i32 2, ptr %74, align 4, !tbaa !9
  store i32 1, ptr %58, align 4, !tbaa !9
  br label %155

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

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

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

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

162:                                              ; preds = %159, %156
  %163 = phi i1 [ true, %156 ], [ %161, %159 ]
  %164 = zext i1 %163 to i32
  store i32 %164, ptr %83, align 4, !tbaa !9
  %165 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 0, ptr %165, align 4, !tbaa !9
  %166 = load ptr, ptr %32, align 8, !tbaa !5
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = icmp eq i32 %167, -1
  %169 = zext i1 %168 to i32
  store i32 %169, ptr %79, align 4, !tbaa !9
  %170 = load i32, ptr %72, align 4, !tbaa !9
  %171 = icmp sle i32 %170, 0
  br i1 %171, label %172, label %174

172:                                              ; preds = %162
  %173 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -1, ptr %173, align 4, !tbaa !9
  br label %273

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

177:                                              ; preds = %174
  %178 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -2, ptr %178, align 4, !tbaa !9
  br label %272

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

183:                                              ; preds = %179
  %184 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -3, ptr %184, align 4, !tbaa !9
  br label %271

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

191:                                              ; preds = %185
  br label %195

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

195:                                              ; preds = %192, %191
  %196 = phi i32 [ 1, %191 ], [ %194, %192 ]
  %197 = icmp slt i32 %187, %196
  br i1 %197, label %198, label %200

198:                                              ; preds = %195
  %199 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -5, ptr %199, align 4, !tbaa !9
  br label %270

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

206:                                              ; preds = %200
  br label %210

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

210:                                              ; preds = %207, %206
  %211 = phi i32 [ 1, %206 ], [ %209, %207 ]
  %212 = icmp slt i32 %202, %211
  br i1 %212, label %213, label %215

213:                                              ; preds = %210
  %214 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -7, ptr %214, align 4, !tbaa !9
  br label %269

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

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

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

228:                                              ; preds = %222, %215
  %229 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -11, ptr %229, align 4, !tbaa !9
  br label %268

230:                                              ; preds = %222, %219
  %231 = load ptr, ptr %30, align 8, !tbaa !5
  %232 = load i32, ptr %231, align 4, !tbaa !9
  %233 = icmp slt i32 %232, 1
  br i1 %233, label %243, label %234

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

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

243:                                              ; preds = %237, %230
  %244 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -13, ptr %244, align 4, !tbaa !9
  br label %267

245:                                              ; preds = %237, %234
  store i32 1, ptr %43, align 4, !tbaa !9
  %246 = load ptr, ptr %20, align 8, !tbaa !5
  %247 = load i32, ptr %246, align 4, !tbaa !9
  %248 = shl i32 %247, 1
  store i32 %248, ptr %44, align 4, !tbaa !9
  %249 = load ptr, ptr %32, align 8, !tbaa !5
  %250 = load i32, ptr %249, align 4, !tbaa !9
  %251 = load i32, ptr %43, align 4, !tbaa !9
  %252 = load i32, ptr %44, align 4, !tbaa !9
  %253 = icmp sge i32 %251, %252
  br i1 %253, label %254, label %256

254:                                              ; preds = %245
  %255 = load i32, ptr %43, align 4, !tbaa !9
  br label %258

256:                                              ; preds = %245
  %257 = load i32, ptr %44, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %256, %254
  %259 = phi i32 [ %255, %254 ], [ %257, %256 ]
  %260 = icmp slt i32 %250, %259
  br i1 %260, label %261, label %266

261:                                              ; preds = %258
  %262 = load i32, ptr %79, align 4, !tbaa !9
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %266, label %264

264:                                              ; preds = %261
  %265 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -15, ptr %265, align 4, !tbaa !9
  br label %266

266:                                              ; preds = %264, %261, %258
  br label %267

267:                                              ; preds = %266, %243
  br label %268

268:                                              ; preds = %267, %228
  br label %269

269:                                              ; preds = %268, %213
  br label %270

270:                                              ; preds = %269, %198
  br label %271

271:                                              ; preds = %270, %183
  br label %272

272:                                              ; preds = %271, %177
  br label %273

273:                                              ; preds = %272, %172
  %274 = load ptr, ptr %34, align 8, !tbaa !5
  %275 = load i32, ptr %274, align 4, !tbaa !9
  %276 = icmp eq i32 %275, 0
  br i1 %276, label %277, label %582

277:                                              ; preds = %273
  %278 = load ptr, ptr %20, align 8, !tbaa !5
  %279 = load ptr, ptr %20, align 8, !tbaa !5
  %280 = load ptr, ptr %23, align 8, !tbaa !5
  %281 = load i32, ptr %38, align 4, !tbaa !9
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %280, i64 %282
  %284 = load ptr, ptr %24, align 8, !tbaa !5
  %285 = load ptr, ptr %31, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.doublecomplex, ptr %285, i64 1
  %287 = load ptr, ptr %31, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %287, i64 1
  call void @zgeqrf_(ptr noundef %278, ptr noundef %279, ptr noundef %283, ptr noundef %284, ptr noundef %286, ptr noundef %288, ptr noundef @c_n1, ptr noundef %54)
  store i32 1, ptr %43, align 4, !tbaa !9
  %289 = load ptr, ptr %20, align 8, !tbaa !5
  %290 = load i32, ptr %289, align 4, !tbaa !9
  %291 = load ptr, ptr %31, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.doublecomplex, ptr %291, i64 1
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %292, i32 0, i32 0
  %294 = load double, ptr %293, align 8, !tbaa !11
  %295 = fptosi double %294 to i32
  %296 = add nsw i32 %290, %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 = %277
  %301 = load i32, ptr %43, align 4, !tbaa !9
  br label %304

302:                                              ; preds = %277
  %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 %78, align 4, !tbaa !9
  %306 = load ptr, ptr %20, align 8, !tbaa !5
  %307 = load ptr, ptr %20, align 8, !tbaa !5
  %308 = load ptr, ptr %20, align 8, !tbaa !5
  %309 = load ptr, ptr %23, align 8, !tbaa !5
  %310 = load i32, ptr %38, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds %struct.doublecomplex, ptr %309, i64 %311
  %313 = load ptr, ptr %24, align 8, !tbaa !5
  %314 = load ptr, ptr %31, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.doublecomplex, ptr %314, i64 1
  %316 = load ptr, ptr %21, align 8, !tbaa !5
  %317 = load i32, ptr %36, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds %struct.doublecomplex, ptr %316, i64 %318
  %320 = load ptr, ptr %22, align 8, !tbaa !5
  %321 = load ptr, ptr %31, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.doublecomplex, ptr %321, i64 1
  call void @zunmqr_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %306, ptr noundef %307, ptr noundef %308, ptr noundef %312, ptr noundef %313, ptr noundef %315, ptr noundef %319, ptr noundef %320, ptr noundef %322, ptr noundef @c_n1, ptr noundef %54)
  %323 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %323, ptr %43, align 4, !tbaa !9
  %324 = load ptr, ptr %20, align 8, !tbaa !5
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = load ptr, ptr %31, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.doublecomplex, ptr %326, i64 1
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %327, i32 0, i32 0
  %329 = load double, ptr %328, align 8, !tbaa !11
  %330 = fptosi double %329 to i32
  %331 = add nsw i32 %325, %330
  store i32 %331, ptr %44, align 4, !tbaa !9
  %332 = load i32, ptr %43, align 4, !tbaa !9
  %333 = load i32, ptr %44, align 4, !tbaa !9
  %334 = icmp sge i32 %332, %333
  br i1 %334, label %335, label %337

335:                                              ; preds = %304
  %336 = load i32, ptr %43, align 4, !tbaa !9
  br label %339

337:                                              ; preds = %304
  %338 = load i32, ptr %44, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %337, %335
  %340 = phi i32 [ %336, %335 ], [ %338, %337 ]
  store i32 %340, ptr %78, align 4, !tbaa !9
  %341 = load i32, ptr %57, align 4, !tbaa !9
  %342 = icmp ne i32 %341, 0
  br i1 %342, label %343, label %374

343:                                              ; preds = %339
  %344 = load ptr, ptr %20, align 8, !tbaa !5
  %345 = load ptr, ptr %20, align 8, !tbaa !5
  %346 = load ptr, ptr %20, align 8, !tbaa !5
  %347 = load ptr, ptr %27, align 8, !tbaa !5
  %348 = load i32, ptr %40, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds %struct.doublecomplex, ptr %347, i64 %349
  %351 = load ptr, ptr %28, align 8, !tbaa !5
  %352 = load ptr, ptr %31, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %352, i64 1
  %354 = load ptr, ptr %31, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.doublecomplex, ptr %354, i64 1
  call void @zungqr_(ptr noundef %344, ptr noundef %345, ptr noundef %346, ptr noundef %350, ptr noundef %351, ptr noundef %353, ptr noundef %355, ptr noundef @c_n1, ptr noundef %54)
  %356 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %356, ptr %43, align 4, !tbaa !9
  %357 = load ptr, ptr %20, align 8, !tbaa !5
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %359 = load ptr, ptr %31, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.doublecomplex, ptr %359, i64 1
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %360, i32 0, i32 0
  %362 = load double, ptr %361, align 8, !tbaa !11
  %363 = fptosi double %362 to i32
  %364 = add nsw i32 %358, %363
  store i32 %364, ptr %44, align 4, !tbaa !9
  %365 = load i32, ptr %43, align 4, !tbaa !9
  %366 = load i32, ptr %44, align 4, !tbaa !9
  %367 = icmp sge i32 %365, %366
  br i1 %367, label %368, label %370

368:                                              ; preds = %343
  %369 = load i32, ptr %43, align 4, !tbaa !9
  br label %372

370:                                              ; preds = %343
  %371 = load i32, ptr %44, align 4, !tbaa !9
  br label %372

372:                                              ; preds = %370, %368
  %373 = phi i32 [ %369, %368 ], [ %371, %370 ]
  store i32 %373, ptr %78, align 4, !tbaa !9
  br label %374

374:                                              ; preds = %372, %339
  %375 = load i32, ptr %83, align 4, !tbaa !9
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %377, label %472

377:                                              ; preds = %374
  %378 = load ptr, ptr %18, align 8, !tbaa !5
  %379 = load ptr, ptr %19, align 8, !tbaa !5
  %380 = load ptr, ptr %20, align 8, !tbaa !5
  %381 = load ptr, ptr %20, align 8, !tbaa !5
  %382 = load ptr, ptr %21, align 8, !tbaa !5
  %383 = load i32, ptr %36, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds %struct.doublecomplex, ptr %382, i64 %384
  %386 = load ptr, ptr %22, align 8, !tbaa !5
  %387 = load ptr, ptr %23, align 8, !tbaa !5
  %388 = load i32, ptr %38, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds %struct.doublecomplex, ptr %387, i64 %389
  %391 = load ptr, ptr %24, align 8, !tbaa !5
  %392 = load ptr, ptr %27, align 8, !tbaa !5
  %393 = load i32, ptr %40, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds %struct.doublecomplex, ptr %392, i64 %394
  %396 = load ptr, ptr %28, align 8, !tbaa !5
  %397 = load ptr, ptr %29, align 8, !tbaa !5
  %398 = load i32, ptr %42, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds %struct.doublecomplex, ptr %397, i64 %399
  %401 = load ptr, ptr %30, align 8, !tbaa !5
  %402 = load ptr, ptr %31, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.doublecomplex, ptr %402, i64 1
  call void @zgghd3_(ptr noundef %378, ptr noundef %379, ptr noundef %380, ptr noundef @c__1, ptr noundef %381, ptr noundef %385, ptr noundef %386, ptr noundef %390, ptr noundef %391, ptr noundef %395, ptr noundef %396, ptr noundef %400, ptr noundef %401, ptr noundef %403, ptr noundef @c_n1, ptr noundef %54)
  %404 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %404, ptr %43, align 4, !tbaa !9
  %405 = load ptr, ptr %20, align 8, !tbaa !5
  %406 = load i32, ptr %405, align 4, !tbaa !9
  %407 = load ptr, ptr %31, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %407, i64 1
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %408, i32 0, i32 0
  %410 = load double, ptr %409, align 8, !tbaa !11
  %411 = fptosi double %410 to i32
  %412 = add nsw i32 %406, %411
  store i32 %412, ptr %44, align 4, !tbaa !9
  %413 = load i32, ptr %43, align 4, !tbaa !9
  %414 = load i32, ptr %44, align 4, !tbaa !9
  %415 = icmp sge i32 %413, %414
  br i1 %415, label %416, label %418

416:                                              ; preds = %377
  %417 = load i32, ptr %43, align 4, !tbaa !9
  br label %420

418:                                              ; preds = %377
  %419 = load i32, ptr %44, align 4, !tbaa !9
  br label %420

420:                                              ; preds = %418, %416
  %421 = phi i32 [ %417, %416 ], [ %419, %418 ]
  store i32 %421, ptr %78, align 4, !tbaa !9
  %422 = load ptr, ptr %18, align 8, !tbaa !5
  %423 = load ptr, ptr %19, align 8, !tbaa !5
  %424 = load ptr, ptr %20, align 8, !tbaa !5
  %425 = load ptr, ptr %20, align 8, !tbaa !5
  %426 = load ptr, ptr %21, align 8, !tbaa !5
  %427 = load i32, ptr %36, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %426, i64 %428
  %430 = load ptr, ptr %22, align 8, !tbaa !5
  %431 = load ptr, ptr %23, align 8, !tbaa !5
  %432 = load i32, ptr %38, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %431, i64 %433
  %435 = load ptr, ptr %24, align 8, !tbaa !5
  %436 = load ptr, ptr %25, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %436, i64 1
  %438 = load ptr, ptr %26, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %438, i64 1
  %440 = load ptr, ptr %27, align 8, !tbaa !5
  %441 = load i32, ptr %40, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds %struct.doublecomplex, ptr %440, i64 %442
  %444 = load ptr, ptr %28, align 8, !tbaa !5
  %445 = load ptr, ptr %29, align 8, !tbaa !5
  %446 = load i32, ptr %42, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds %struct.doublecomplex, ptr %445, i64 %447
  %449 = load ptr, ptr %30, align 8, !tbaa !5
  %450 = load ptr, ptr %31, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %450, i64 1
  %452 = load ptr, ptr %33, align 8, !tbaa !5
  %453 = getelementptr inbounds double, ptr %452, i64 1
  call void @zhgeqz_(ptr noundef @.str.4, ptr noundef %422, ptr noundef %423, ptr noundef %424, ptr noundef @c__1, ptr noundef %425, ptr noundef %429, ptr noundef %430, ptr noundef %434, ptr noundef %435, ptr noundef %437, ptr noundef %439, ptr noundef %443, ptr noundef %444, ptr noundef %448, ptr noundef %449, ptr noundef %451, ptr noundef @c_n1, ptr noundef %453, ptr noundef %54)
  %454 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %454, ptr %43, align 4, !tbaa !9
  %455 = load ptr, ptr %20, align 8, !tbaa !5
  %456 = load i32, ptr %455, align 4, !tbaa !9
  %457 = load ptr, ptr %31, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.doublecomplex, ptr %457, i64 1
  %459 = getelementptr inbounds %struct.doublecomplex, ptr %458, i32 0, i32 0
  %460 = load double, ptr %459, align 8, !tbaa !11
  %461 = fptosi double %460 to i32
  %462 = add nsw i32 %456, %461
  store i32 %462, ptr %44, align 4, !tbaa !9
  %463 = load i32, ptr %43, align 4, !tbaa !9
  %464 = load i32, ptr %44, align 4, !tbaa !9
  %465 = icmp sge i32 %463, %464
  br i1 %465, label %466, label %468

466:                                              ; preds = %420
  %467 = load i32, ptr %43, align 4, !tbaa !9
  br label %470

468:                                              ; preds = %420
  %469 = load i32, ptr %44, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %468, %466
  %471 = phi i32 [ %467, %466 ], [ %469, %468 ]
  store i32 %471, ptr %78, align 4, !tbaa !9
  br label %567

472:                                              ; preds = %374
  %473 = load ptr, ptr %18, align 8, !tbaa !5
  %474 = load ptr, ptr %19, align 8, !tbaa !5
  %475 = load ptr, ptr %20, align 8, !tbaa !5
  %476 = load ptr, ptr %20, align 8, !tbaa !5
  %477 = load ptr, ptr %21, align 8, !tbaa !5
  %478 = load i32, ptr %36, align 4, !tbaa !9
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds %struct.doublecomplex, ptr %477, i64 %479
  %481 = load ptr, ptr %22, align 8, !tbaa !5
  %482 = load ptr, ptr %23, align 8, !tbaa !5
  %483 = load i32, ptr %38, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds %struct.doublecomplex, ptr %482, i64 %484
  %486 = load ptr, ptr %24, align 8, !tbaa !5
  %487 = load ptr, ptr %27, align 8, !tbaa !5
  %488 = load i32, ptr %40, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds %struct.doublecomplex, ptr %487, i64 %489
  %491 = load ptr, ptr %28, align 8, !tbaa !5
  %492 = load ptr, ptr %29, align 8, !tbaa !5
  %493 = load i32, ptr %42, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds %struct.doublecomplex, ptr %492, i64 %494
  %496 = load ptr, ptr %30, align 8, !tbaa !5
  %497 = load ptr, ptr %31, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.doublecomplex, ptr %497, i64 1
  call void @zgghd3_(ptr noundef %473, ptr noundef %474, ptr noundef %475, ptr noundef @c__1, ptr noundef %476, ptr noundef %480, ptr noundef %481, ptr noundef %485, ptr noundef %486, ptr noundef %490, ptr noundef %491, ptr noundef %495, ptr noundef %496, ptr noundef %498, ptr noundef @c_n1, ptr noundef %54)
  %499 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %499, ptr %43, align 4, !tbaa !9
  %500 = load ptr, ptr %20, align 8, !tbaa !5
  %501 = load i32, ptr %500, align 4, !tbaa !9
  %502 = load ptr, ptr %31, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.doublecomplex, ptr %502, i64 1
  %504 = getelementptr inbounds %struct.doublecomplex, ptr %503, i32 0, i32 0
  %505 = load double, ptr %504, align 8, !tbaa !11
  %506 = fptosi double %505 to i32
  %507 = add nsw i32 %501, %506
  store i32 %507, ptr %44, align 4, !tbaa !9
  %508 = load i32, ptr %43, align 4, !tbaa !9
  %509 = load i32, ptr %44, align 4, !tbaa !9
  %510 = icmp sge i32 %508, %509
  br i1 %510, label %511, label %513

511:                                              ; preds = %472
  %512 = load i32, ptr %43, align 4, !tbaa !9
  br label %515

513:                                              ; preds = %472
  %514 = load i32, ptr %44, align 4, !tbaa !9
  br label %515

515:                                              ; preds = %513, %511
  %516 = phi i32 [ %512, %511 ], [ %514, %513 ]
  store i32 %516, ptr %78, align 4, !tbaa !9
  %517 = load ptr, ptr %18, align 8, !tbaa !5
  %518 = load ptr, ptr %19, align 8, !tbaa !5
  %519 = load ptr, ptr %20, align 8, !tbaa !5
  %520 = load ptr, ptr %20, align 8, !tbaa !5
  %521 = load ptr, ptr %21, align 8, !tbaa !5
  %522 = load i32, ptr %36, align 4, !tbaa !9
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds %struct.doublecomplex, ptr %521, i64 %523
  %525 = load ptr, ptr %22, align 8, !tbaa !5
  %526 = load ptr, ptr %23, align 8, !tbaa !5
  %527 = load i32, ptr %38, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds %struct.doublecomplex, ptr %526, i64 %528
  %530 = load ptr, ptr %24, align 8, !tbaa !5
  %531 = load ptr, ptr %25, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.doublecomplex, ptr %531, i64 1
  %533 = load ptr, ptr %26, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.doublecomplex, ptr %533, i64 1
  %535 = load ptr, ptr %27, align 8, !tbaa !5
  %536 = load i32, ptr %40, align 4, !tbaa !9
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds %struct.doublecomplex, ptr %535, i64 %537
  %539 = load ptr, ptr %28, align 8, !tbaa !5
  %540 = load ptr, ptr %29, align 8, !tbaa !5
  %541 = load i32, ptr %42, align 4, !tbaa !9
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %540, i64 %542
  %544 = load ptr, ptr %30, align 8, !tbaa !5
  %545 = load ptr, ptr %31, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %545, i64 1
  %547 = load ptr, ptr %33, align 8, !tbaa !5
  %548 = getelementptr inbounds double, ptr %547, i64 1
  call void @zhgeqz_(ptr noundef @.str.5, ptr noundef %517, ptr noundef %518, ptr noundef %519, ptr noundef @c__1, ptr noundef %520, ptr noundef %524, ptr noundef %525, ptr noundef %529, ptr noundef %530, ptr noundef %532, ptr noundef %534, ptr noundef %538, ptr noundef %539, ptr noundef %543, ptr noundef %544, ptr noundef %546, ptr noundef @c_n1, ptr noundef %548, ptr noundef %54)
  %549 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %549, ptr %43, align 4, !tbaa !9
  %550 = load ptr, ptr %20, align 8, !tbaa !5
  %551 = load i32, ptr %550, align 4, !tbaa !9
  %552 = load ptr, ptr %31, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %552, i64 1
  %554 = getelementptr inbounds %struct.doublecomplex, ptr %553, i32 0, i32 0
  %555 = load double, ptr %554, align 8, !tbaa !11
  %556 = fptosi double %555 to i32
  %557 = add nsw i32 %551, %556
  store i32 %557, ptr %44, align 4, !tbaa !9
  %558 = load i32, ptr %43, align 4, !tbaa !9
  %559 = load i32, ptr %44, align 4, !tbaa !9
  %560 = icmp sge i32 %558, %559
  br i1 %560, label %561, label %563

561:                                              ; preds = %515
  %562 = load i32, ptr %43, align 4, !tbaa !9
  br label %565

563:                                              ; preds = %515
  %564 = load i32, ptr %44, align 4, !tbaa !9
  br label %565

565:                                              ; preds = %563, %561
  %566 = phi i32 [ %562, %561 ], [ %564, %563 ]
  store i32 %566, ptr %78, align 4, !tbaa !9
  br label %567

567:                                              ; preds = %565, %470
  %568 = load i32, ptr %78, align 4, !tbaa !9
  %569 = sitofp i32 %568 to double
  %570 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %569, ptr %570, align 8, !tbaa !11
  %571 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double 0.000000e+00, ptr %571, align 8, !tbaa !14
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %573 = load double, ptr %572, align 8, !tbaa !11
  %574 = load ptr, ptr %31, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.doublecomplex, ptr %574, i64 1
  %576 = getelementptr inbounds %struct.doublecomplex, ptr %575, i32 0, i32 0
  store double %573, ptr %576, align 8, !tbaa !11
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %578 = load double, ptr %577, align 8, !tbaa !14
  %579 = load ptr, ptr %31, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.doublecomplex, ptr %579, i64 1
  %581 = getelementptr inbounds %struct.doublecomplex, ptr %580, i32 0, i32 1
  store double %578, ptr %581, align 8, !tbaa !14
  br label %582

582:                                              ; preds = %567, %273
  %583 = load ptr, ptr %34, align 8, !tbaa !5
  %584 = load i32, ptr %583, align 4, !tbaa !9
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %591

586:                                              ; preds = %582
  %587 = load ptr, ptr %34, align 8, !tbaa !5
  %588 = load i32, ptr %587, align 4, !tbaa !9
  %589 = sub nsw i32 0, %588
  store i32 %589, ptr %43, align 4, !tbaa !9
  %590 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %43, i32 noundef 6)
  store i32 1, ptr %84, align 4
  br label %1416

591:                                              ; preds = %582
  %592 = load i32, ptr %79, align 4, !tbaa !9
  %593 = icmp ne i32 %592, 0
  br i1 %593, label %594, label %595

594:                                              ; preds = %591
  store i32 1, ptr %84, align 4
  br label %1416

595:                                              ; preds = %591
  br label %596

596:                                              ; preds = %595
  %597 = load ptr, ptr %20, align 8, !tbaa !5
  %598 = load i32, ptr %597, align 4, !tbaa !9
  %599 = icmp eq i32 %598, 0
  br i1 %599, label %600, label %601

600:                                              ; preds = %596
  store i32 1, ptr %84, align 4
  br label %1416

601:                                              ; preds = %596
  %602 = call double @dlamch_(ptr noundef @.str.5)
  %603 = call double @dlamch_(ptr noundef @.str.7)
  %604 = fmul double %602, %603
  store double %604, ptr %82, align 8, !tbaa !15
  %605 = call double @dlamch_(ptr noundef @.str.4)
  store double %605, ptr %77, align 8, !tbaa !15
  %606 = load double, ptr %77, align 8, !tbaa !15
  %607 = fdiv double 1.000000e+00, %606
  store double %607, ptr %71, align 8, !tbaa !15
  call void @dlabad_(ptr noundef %77, ptr noundef %71)
  %608 = load double, ptr %77, align 8, !tbaa !15
  %609 = call double @sqrt(double noundef %608) #5
  %610 = load double, ptr %82, align 8, !tbaa !15
  %611 = fdiv double %609, %610
  store double %611, ptr %77, align 8, !tbaa !15
  %612 = load double, ptr %77, align 8, !tbaa !15
  %613 = fdiv double 1.000000e+00, %612
  store double %613, ptr %71, align 8, !tbaa !15
  %614 = load ptr, ptr %20, align 8, !tbaa !5
  %615 = load ptr, ptr %20, align 8, !tbaa !5
  %616 = load ptr, ptr %21, align 8, !tbaa !5
  %617 = load i32, ptr %36, align 4, !tbaa !9
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds %struct.doublecomplex, ptr %616, i64 %618
  %620 = load ptr, ptr %22, align 8, !tbaa !5
  %621 = load ptr, ptr %33, align 8, !tbaa !5
  %622 = getelementptr inbounds double, ptr %621, i64 1
  %623 = call double @zlange_(ptr noundef @.str.8, ptr noundef %614, ptr noundef %615, ptr noundef %619, ptr noundef %620, ptr noundef %622)
  store double %623, ptr %52, align 8, !tbaa !15
  store i32 0, ptr %67, align 4, !tbaa !9
  %624 = load double, ptr %52, align 8, !tbaa !15
  %625 = fcmp ogt double %624, 0.000000e+00
  br i1 %625, label %626, label %632

626:                                              ; preds = %601
  %627 = load double, ptr %52, align 8, !tbaa !15
  %628 = load double, ptr %77, align 8, !tbaa !15
  %629 = fcmp olt double %627, %628
  br i1 %629, label %630, label %632

630:                                              ; preds = %626
  %631 = load double, ptr %77, align 8, !tbaa !15
  store double %631, ptr %75, align 8, !tbaa !15
  store i32 1, ptr %67, align 4, !tbaa !9
  br label %639

632:                                              ; preds = %626, %601
  %633 = load double, ptr %52, align 8, !tbaa !15
  %634 = load double, ptr %71, align 8, !tbaa !15
  %635 = fcmp ogt double %633, %634
  br i1 %635, label %636, label %638

636:                                              ; preds = %632
  %637 = load double, ptr %71, align 8, !tbaa !15
  store double %637, ptr %75, align 8, !tbaa !15
  store i32 1, ptr %67, align 4, !tbaa !9
  br label %638

638:                                              ; preds = %636, %632
  br label %639

639:                                              ; preds = %638, %630
  %640 = load i32, ptr %67, align 4, !tbaa !9
  %641 = icmp ne i32 %640, 0
  br i1 %641, label %642, label %650

642:                                              ; preds = %639
  %643 = load ptr, ptr %20, align 8, !tbaa !5
  %644 = load ptr, ptr %20, align 8, !tbaa !5
  %645 = load ptr, ptr %21, align 8, !tbaa !5
  %646 = load i32, ptr %36, align 4, !tbaa !9
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds %struct.doublecomplex, ptr %645, i64 %647
  %649 = load ptr, ptr %22, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %52, ptr noundef %75, ptr noundef %643, ptr noundef %644, ptr noundef %648, ptr noundef %649, ptr noundef %54)
  br label %650

650:                                              ; preds = %642, %639
  %651 = load ptr, ptr %20, align 8, !tbaa !5
  %652 = load ptr, ptr %20, align 8, !tbaa !5
  %653 = load ptr, ptr %23, align 8, !tbaa !5
  %654 = load i32, ptr %38, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds %struct.doublecomplex, ptr %653, i64 %655
  %657 = load ptr, ptr %24, align 8, !tbaa !5
  %658 = load ptr, ptr %33, align 8, !tbaa !5
  %659 = getelementptr inbounds double, ptr %658, i64 1
  %660 = call double @zlange_(ptr noundef @.str.8, ptr noundef %651, ptr noundef %652, ptr noundef %656, ptr noundef %657, ptr noundef %659)
  store double %660, ptr %53, align 8, !tbaa !15
  store i32 0, ptr %68, align 4, !tbaa !9
  %661 = load double, ptr %53, align 8, !tbaa !15
  %662 = fcmp ogt double %661, 0.000000e+00
  br i1 %662, label %663, label %669

663:                                              ; preds = %650
  %664 = load double, ptr %53, align 8, !tbaa !15
  %665 = load double, ptr %77, align 8, !tbaa !15
  %666 = fcmp olt double %664, %665
  br i1 %666, label %667, label %669

667:                                              ; preds = %663
  %668 = load double, ptr %77, align 8, !tbaa !15
  store double %668, ptr %76, align 8, !tbaa !15
  store i32 1, ptr %68, align 4, !tbaa !9
  br label %676

669:                                              ; preds = %663, %650
  %670 = load double, ptr %53, align 8, !tbaa !15
  %671 = load double, ptr %71, align 8, !tbaa !15
  %672 = fcmp ogt double %670, %671
  br i1 %672, label %673, label %675

673:                                              ; preds = %669
  %674 = load double, ptr %71, align 8, !tbaa !15
  store double %674, ptr %76, align 8, !tbaa !15
  store i32 1, ptr %68, align 4, !tbaa !9
  br label %675

675:                                              ; preds = %673, %669
  br label %676

676:                                              ; preds = %675, %667
  %677 = load i32, ptr %68, align 4, !tbaa !9
  %678 = icmp ne i32 %677, 0
  br i1 %678, label %679, label %687

679:                                              ; preds = %676
  %680 = load ptr, ptr %20, align 8, !tbaa !5
  %681 = load ptr, ptr %20, align 8, !tbaa !5
  %682 = load ptr, ptr %23, align 8, !tbaa !5
  %683 = load i32, ptr %38, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds %struct.doublecomplex, ptr %682, i64 %684
  %686 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %53, ptr noundef %76, ptr noundef %680, ptr noundef %681, ptr noundef %685, ptr noundef %686, ptr noundef %54)
  br label %687

687:                                              ; preds = %679, %676
  store i32 1, ptr %60, align 4, !tbaa !9
  %688 = load ptr, ptr %20, align 8, !tbaa !5
  %689 = load i32, ptr %688, align 4, !tbaa !9
  %690 = add nsw i32 %689, 1
  store i32 %690, ptr %73, align 4, !tbaa !9
  %691 = load i32, ptr %73, align 4, !tbaa !9
  %692 = load ptr, ptr %20, align 8, !tbaa !5
  %693 = load i32, ptr %692, align 4, !tbaa !9
  %694 = add nsw i32 %691, %693
  store i32 %694, ptr %62, align 4, !tbaa !9
  %695 = load ptr, ptr %20, align 8, !tbaa !5
  %696 = load ptr, ptr %21, align 8, !tbaa !5
  %697 = load i32, ptr %36, align 4, !tbaa !9
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %696, i64 %698
  %700 = load ptr, ptr %22, align 8, !tbaa !5
  %701 = load ptr, ptr %23, align 8, !tbaa !5
  %702 = load i32, ptr %38, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds %struct.doublecomplex, ptr %701, i64 %703
  %705 = load ptr, ptr %24, align 8, !tbaa !5
  %706 = load ptr, ptr %33, align 8, !tbaa !5
  %707 = load i32, ptr %60, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds double, ptr %706, i64 %708
  %710 = load ptr, ptr %33, align 8, !tbaa !5
  %711 = load i32, ptr %73, align 4, !tbaa !9
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds double, ptr %710, i64 %712
  %714 = load ptr, ptr %33, align 8, !tbaa !5
  %715 = load i32, ptr %62, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds double, ptr %714, i64 %716
  call void @zggbal_(ptr noundef @.str.10, ptr noundef %695, ptr noundef %699, ptr noundef %700, ptr noundef %704, ptr noundef %705, ptr noundef %81, ptr noundef %80, ptr noundef %709, ptr noundef %713, ptr noundef %717, ptr noundef %54)
  %718 = load i32, ptr %80, align 4, !tbaa !9
  %719 = add nsw i32 %718, 1
  %720 = load i32, ptr %81, align 4, !tbaa !9
  %721 = sub nsw i32 %719, %720
  store i32 %721, ptr %63, align 4, !tbaa !9
  %722 = load i32, ptr %83, align 4, !tbaa !9
  %723 = icmp ne i32 %722, 0
  br i1 %723, label %724, label %730

724:                                              ; preds = %687
  %725 = load ptr, ptr %20, align 8, !tbaa !5
  %726 = load i32, ptr %725, align 4, !tbaa !9
  %727 = add nsw i32 %726, 1
  %728 = load i32, ptr %81, align 4, !tbaa !9
  %729 = sub nsw i32 %727, %728
  store i32 %729, ptr %61, align 4, !tbaa !9
  br label %732

730:                                              ; preds = %687
  %731 = load i32, ptr %63, align 4, !tbaa !9
  store i32 %731, ptr %61, align 4, !tbaa !9
  br label %732

732:                                              ; preds = %730, %724
  store i32 1, ptr %55, align 4, !tbaa !9
  %733 = load i32, ptr %55, align 4, !tbaa !9
  %734 = load i32, ptr %63, align 4, !tbaa !9
  %735 = add nsw i32 %733, %734
  store i32 %735, ptr %59, align 4, !tbaa !9
  %736 = load ptr, ptr %32, align 8, !tbaa !5
  %737 = load i32, ptr %736, align 4, !tbaa !9
  %738 = add nsw i32 %737, 1
  %739 = load i32, ptr %59, align 4, !tbaa !9
  %740 = sub nsw i32 %738, %739
  store i32 %740, ptr %43, align 4, !tbaa !9
  %741 = load ptr, ptr %23, align 8, !tbaa !5
  %742 = load i32, ptr %81, align 4, !tbaa !9
  %743 = load i32, ptr %81, align 4, !tbaa !9
  %744 = load i32, ptr %37, align 4, !tbaa !9
  %745 = mul nsw i32 %743, %744
  %746 = add nsw i32 %742, %745
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds %struct.doublecomplex, ptr %741, i64 %747
  %749 = load ptr, ptr %24, align 8, !tbaa !5
  %750 = load ptr, ptr %31, align 8, !tbaa !5
  %751 = load i32, ptr %55, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %750, i64 %752
  %754 = load ptr, ptr %31, align 8, !tbaa !5
  %755 = load i32, ptr %59, align 4, !tbaa !9
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds %struct.doublecomplex, ptr %754, i64 %756
  call void @zgeqrf_(ptr noundef %63, ptr noundef %61, ptr noundef %748, ptr noundef %749, ptr noundef %753, ptr noundef %757, ptr noundef %43, ptr noundef %54)
  %758 = load ptr, ptr %32, align 8, !tbaa !5
  %759 = load i32, ptr %758, align 4, !tbaa !9
  %760 = add nsw i32 %759, 1
  %761 = load i32, ptr %59, align 4, !tbaa !9
  %762 = sub nsw i32 %760, %761
  store i32 %762, ptr %43, align 4, !tbaa !9
  %763 = load ptr, ptr %23, align 8, !tbaa !5
  %764 = load i32, ptr %81, align 4, !tbaa !9
  %765 = load i32, ptr %81, align 4, !tbaa !9
  %766 = load i32, ptr %37, align 4, !tbaa !9
  %767 = mul nsw i32 %765, %766
  %768 = add nsw i32 %764, %767
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %769
  %771 = load ptr, ptr %24, align 8, !tbaa !5
  %772 = load ptr, ptr %31, align 8, !tbaa !5
  %773 = load i32, ptr %55, align 4, !tbaa !9
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds %struct.doublecomplex, ptr %772, i64 %774
  %776 = load ptr, ptr %21, align 8, !tbaa !5
  %777 = load i32, ptr %81, align 4, !tbaa !9
  %778 = load i32, ptr %81, align 4, !tbaa !9
  %779 = load i32, ptr %35, align 4, !tbaa !9
  %780 = mul nsw i32 %778, %779
  %781 = add nsw i32 %777, %780
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds %struct.doublecomplex, ptr %776, i64 %782
  %784 = load ptr, ptr %22, align 8, !tbaa !5
  %785 = load ptr, ptr %31, align 8, !tbaa !5
  %786 = load i32, ptr %59, align 4, !tbaa !9
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds %struct.doublecomplex, ptr %785, i64 %787
  call void @zunmqr_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %63, ptr noundef %61, ptr noundef %63, ptr noundef %770, ptr noundef %771, ptr noundef %775, ptr noundef %783, ptr noundef %784, ptr noundef %788, ptr noundef %43, ptr noundef %54)
  %789 = load i32, ptr %57, align 4, !tbaa !9
  %790 = icmp ne i32 %789, 0
  br i1 %790, label %791, label %849

791:                                              ; preds = %732
  %792 = load ptr, ptr %20, align 8, !tbaa !5
  %793 = load ptr, ptr %20, align 8, !tbaa !5
  %794 = load ptr, ptr %27, align 8, !tbaa !5
  %795 = load i32, ptr %40, align 4, !tbaa !9
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds %struct.doublecomplex, ptr %794, i64 %796
  %798 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.11, ptr noundef %792, ptr noundef %793, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %797, ptr noundef %798)
  %799 = load i32, ptr %63, align 4, !tbaa !9
  %800 = icmp sgt i32 %799, 1
  br i1 %800, label %801, label %826

801:                                              ; preds = %791
  %802 = load i32, ptr %63, align 4, !tbaa !9
  %803 = sub nsw i32 %802, 1
  store i32 %803, ptr %43, align 4, !tbaa !9
  %804 = load i32, ptr %63, align 4, !tbaa !9
  %805 = sub nsw i32 %804, 1
  store i32 %805, ptr %44, align 4, !tbaa !9
  %806 = load ptr, ptr %23, align 8, !tbaa !5
  %807 = load i32, ptr %81, align 4, !tbaa !9
  %808 = add nsw i32 %807, 1
  %809 = load i32, ptr %81, align 4, !tbaa !9
  %810 = load i32, ptr %37, align 4, !tbaa !9
  %811 = mul nsw i32 %809, %810
  %812 = add nsw i32 %808, %811
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds %struct.doublecomplex, ptr %806, i64 %813
  %815 = load ptr, ptr %24, align 8, !tbaa !5
  %816 = load ptr, ptr %27, align 8, !tbaa !5
  %817 = load i32, ptr %81, align 4, !tbaa !9
  %818 = add nsw i32 %817, 1
  %819 = load i32, ptr %81, align 4, !tbaa !9
  %820 = load i32, ptr %39, align 4, !tbaa !9
  %821 = mul nsw i32 %819, %820
  %822 = add nsw i32 %818, %821
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds %struct.doublecomplex, ptr %816, i64 %823
  %825 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.2, ptr noundef %43, ptr noundef %44, ptr noundef %814, ptr noundef %815, ptr noundef %824, ptr noundef %825)
  br label %826

826:                                              ; preds = %801, %791
  %827 = load ptr, ptr %32, align 8, !tbaa !5
  %828 = load i32, ptr %827, align 4, !tbaa !9
  %829 = add nsw i32 %828, 1
  %830 = load i32, ptr %59, align 4, !tbaa !9
  %831 = sub nsw i32 %829, %830
  store i32 %831, ptr %43, align 4, !tbaa !9
  %832 = load ptr, ptr %27, align 8, !tbaa !5
  %833 = load i32, ptr %81, align 4, !tbaa !9
  %834 = load i32, ptr %81, align 4, !tbaa !9
  %835 = load i32, ptr %39, align 4, !tbaa !9
  %836 = mul nsw i32 %834, %835
  %837 = add nsw i32 %833, %836
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds %struct.doublecomplex, ptr %832, i64 %838
  %840 = load ptr, ptr %28, align 8, !tbaa !5
  %841 = load ptr, ptr %31, align 8, !tbaa !5
  %842 = load i32, ptr %55, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds %struct.doublecomplex, ptr %841, i64 %843
  %845 = load ptr, ptr %31, align 8, !tbaa !5
  %846 = load i32, ptr %59, align 4, !tbaa !9
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds %struct.doublecomplex, ptr %845, i64 %847
  call void @zungqr_(ptr noundef %63, ptr noundef %63, ptr noundef %63, ptr noundef %839, ptr noundef %840, ptr noundef %844, ptr noundef %848, ptr noundef %43, ptr noundef %54)
  br label %849

849:                                              ; preds = %826, %732
  %850 = load i32, ptr %58, align 4, !tbaa !9
  %851 = icmp ne i32 %850, 0
  br i1 %851, label %852, label %860

852:                                              ; preds = %849
  %853 = load ptr, ptr %20, align 8, !tbaa !5
  %854 = load ptr, ptr %20, align 8, !tbaa !5
  %855 = load ptr, ptr %29, align 8, !tbaa !5
  %856 = load i32, ptr %42, align 4, !tbaa !9
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds %struct.doublecomplex, ptr %855, i64 %857
  %859 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.11, ptr noundef %853, ptr noundef %854, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %858, ptr noundef %859)
  br label %860

860:                                              ; preds = %852, %849
  %861 = load i32, ptr %83, align 4, !tbaa !9
  %862 = icmp ne i32 %861, 0
  br i1 %862, label %863, label %896

863:                                              ; preds = %860
  %864 = load ptr, ptr %32, align 8, !tbaa !5
  %865 = load i32, ptr %864, align 4, !tbaa !9
  %866 = add nsw i32 %865, 1
  %867 = load i32, ptr %59, align 4, !tbaa !9
  %868 = sub nsw i32 %866, %867
  store i32 %868, ptr %43, align 4, !tbaa !9
  %869 = load ptr, ptr %18, align 8, !tbaa !5
  %870 = load ptr, ptr %19, align 8, !tbaa !5
  %871 = load ptr, ptr %20, align 8, !tbaa !5
  %872 = load ptr, ptr %21, align 8, !tbaa !5
  %873 = load i32, ptr %36, align 4, !tbaa !9
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %872, i64 %874
  %876 = load ptr, ptr %22, align 8, !tbaa !5
  %877 = load ptr, ptr %23, align 8, !tbaa !5
  %878 = load i32, ptr %38, align 4, !tbaa !9
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 %879
  %881 = load ptr, ptr %24, align 8, !tbaa !5
  %882 = load ptr, ptr %27, align 8, !tbaa !5
  %883 = load i32, ptr %40, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %882, i64 %884
  %886 = load ptr, ptr %28, align 8, !tbaa !5
  %887 = load ptr, ptr %29, align 8, !tbaa !5
  %888 = load i32, ptr %42, align 4, !tbaa !9
  %889 = sext i32 %888 to i64
  %890 = getelementptr inbounds %struct.doublecomplex, ptr %887, i64 %889
  %891 = load ptr, ptr %30, align 8, !tbaa !5
  %892 = load ptr, ptr %31, align 8, !tbaa !5
  %893 = load i32, ptr %59, align 4, !tbaa !9
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds %struct.doublecomplex, ptr %892, i64 %894
  call void @zgghd3_(ptr noundef %869, ptr noundef %870, ptr noundef %871, ptr noundef %81, ptr noundef %80, ptr noundef %875, ptr noundef %876, ptr noundef %880, ptr noundef %881, ptr noundef %885, ptr noundef %886, ptr noundef %890, ptr noundef %891, ptr noundef %895, ptr noundef %43, ptr noundef %54)
  br label %934

896:                                              ; preds = %860
  %897 = load ptr, ptr %32, align 8, !tbaa !5
  %898 = load i32, ptr %897, align 4, !tbaa !9
  %899 = add nsw i32 %898, 1
  %900 = load i32, ptr %59, align 4, !tbaa !9
  %901 = sub nsw i32 %899, %900
  store i32 %901, ptr %43, align 4, !tbaa !9
  %902 = load ptr, ptr %21, align 8, !tbaa !5
  %903 = load i32, ptr %81, align 4, !tbaa !9
  %904 = load i32, ptr %81, align 4, !tbaa !9
  %905 = load i32, ptr %35, align 4, !tbaa !9
  %906 = mul nsw i32 %904, %905
  %907 = add nsw i32 %903, %906
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds %struct.doublecomplex, ptr %902, i64 %908
  %910 = load ptr, ptr %22, align 8, !tbaa !5
  %911 = load ptr, ptr %23, align 8, !tbaa !5
  %912 = load i32, ptr %81, align 4, !tbaa !9
  %913 = load i32, ptr %81, align 4, !tbaa !9
  %914 = load i32, ptr %37, align 4, !tbaa !9
  %915 = mul nsw i32 %913, %914
  %916 = add nsw i32 %912, %915
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds %struct.doublecomplex, ptr %911, i64 %917
  %919 = load ptr, ptr %24, align 8, !tbaa !5
  %920 = load ptr, ptr %27, align 8, !tbaa !5
  %921 = load i32, ptr %40, align 4, !tbaa !9
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds %struct.doublecomplex, ptr %920, i64 %922
  %924 = load ptr, ptr %28, align 8, !tbaa !5
  %925 = load ptr, ptr %29, align 8, !tbaa !5
  %926 = load i32, ptr %42, align 4, !tbaa !9
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds %struct.doublecomplex, ptr %925, i64 %927
  %929 = load ptr, ptr %30, align 8, !tbaa !5
  %930 = load ptr, ptr %31, align 8, !tbaa !5
  %931 = load i32, ptr %59, align 4, !tbaa !9
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds %struct.doublecomplex, ptr %930, i64 %932
  call void @zgghd3_(ptr noundef @.str, ptr noundef @.str, ptr noundef %63, ptr noundef @c__1, ptr noundef %63, ptr noundef %909, ptr noundef %910, ptr noundef %918, ptr noundef %919, ptr noundef %923, ptr noundef %924, ptr noundef %928, ptr noundef %929, ptr noundef %933, ptr noundef %43, ptr noundef %54)
  br label %934

934:                                              ; preds = %896, %863
  %935 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %935, ptr %59, align 4, !tbaa !9
  %936 = load i32, ptr %83, align 4, !tbaa !9
  %937 = icmp ne i32 %936, 0
  br i1 %937, label %938, label %940

938:                                              ; preds = %934
  %939 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 83, ptr %939, align 1, !tbaa !16
  br label %942

940:                                              ; preds = %934
  %941 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 69, ptr %941, align 1, !tbaa !16
  br label %942

942:                                              ; preds = %940, %938
  %943 = load ptr, ptr %32, align 8, !tbaa !5
  %944 = load i32, ptr %943, align 4, !tbaa !9
  %945 = add nsw i32 %944, 1
  %946 = load i32, ptr %59, align 4, !tbaa !9
  %947 = sub nsw i32 %945, %946
  store i32 %947, ptr %43, align 4, !tbaa !9
  %948 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  %949 = load ptr, ptr %18, align 8, !tbaa !5
  %950 = load ptr, ptr %19, align 8, !tbaa !5
  %951 = load ptr, ptr %20, align 8, !tbaa !5
  %952 = load ptr, ptr %21, align 8, !tbaa !5
  %953 = load i32, ptr %36, align 4, !tbaa !9
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds %struct.doublecomplex, ptr %952, i64 %954
  %956 = load ptr, ptr %22, align 8, !tbaa !5
  %957 = load ptr, ptr %23, align 8, !tbaa !5
  %958 = load i32, ptr %38, align 4, !tbaa !9
  %959 = sext i32 %958 to i64
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %957, i64 %959
  %961 = load ptr, ptr %24, align 8, !tbaa !5
  %962 = load ptr, ptr %25, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.doublecomplex, ptr %962, i64 1
  %964 = load ptr, ptr %26, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %964, i64 1
  %966 = load ptr, ptr %27, align 8, !tbaa !5
  %967 = load i32, ptr %40, align 4, !tbaa !9
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %966, i64 %968
  %970 = load ptr, ptr %28, align 8, !tbaa !5
  %971 = load ptr, ptr %29, align 8, !tbaa !5
  %972 = load i32, ptr %42, align 4, !tbaa !9
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %971, i64 %973
  %975 = load ptr, ptr %30, align 8, !tbaa !5
  %976 = load ptr, ptr %31, align 8, !tbaa !5
  %977 = load i32, ptr %59, align 4, !tbaa !9
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds %struct.doublecomplex, ptr %976, i64 %978
  %980 = load ptr, ptr %33, align 8, !tbaa !5
  %981 = load i32, ptr %62, align 4, !tbaa !9
  %982 = sext i32 %981 to i64
  %983 = getelementptr inbounds double, ptr %980, i64 %982
  call void @zhgeqz_(ptr noundef %948, ptr noundef %949, ptr noundef %950, ptr noundef %951, ptr noundef %81, ptr noundef %80, ptr noundef %955, ptr noundef %956, ptr noundef %960, ptr noundef %961, ptr noundef %963, ptr noundef %965, ptr noundef %969, ptr noundef %970, ptr noundef %974, ptr noundef %975, ptr noundef %979, ptr noundef %43, ptr noundef %983, ptr noundef %54)
  %984 = load i32, ptr %54, align 4, !tbaa !9
  %985 = icmp ne i32 %984, 0
  br i1 %985, label %986, label %1021

986:                                              ; preds = %942
  %987 = load i32, ptr %54, align 4, !tbaa !9
  %988 = icmp sgt i32 %987, 0
  br i1 %988, label %989, label %997

989:                                              ; preds = %986
  %990 = load i32, ptr %54, align 4, !tbaa !9
  %991 = load ptr, ptr %20, align 8, !tbaa !5
  %992 = load i32, ptr %991, align 4, !tbaa !9
  %993 = icmp sle i32 %990, %992
  br i1 %993, label %994, label %997

994:                                              ; preds = %989
  %995 = load i32, ptr %54, align 4, !tbaa !9
  %996 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %995, ptr %996, align 4, !tbaa !9
  br label %1020

997:                                              ; preds = %989, %986
  %998 = load i32, ptr %54, align 4, !tbaa !9
  %999 = load ptr, ptr %20, align 8, !tbaa !5
  %1000 = load i32, ptr %999, align 4, !tbaa !9
  %1001 = icmp sgt i32 %998, %1000
  br i1 %1001, label %1002, label %1014

1002:                                             ; preds = %997
  %1003 = load i32, ptr %54, align 4, !tbaa !9
  %1004 = load ptr, ptr %20, align 8, !tbaa !5
  %1005 = load i32, ptr %1004, align 4, !tbaa !9
  %1006 = shl i32 %1005, 1
  %1007 = icmp sle i32 %1003, %1006
  br i1 %1007, label %1008, label %1014

1008:                                             ; preds = %1002
  %1009 = load i32, ptr %54, align 4, !tbaa !9
  %1010 = load ptr, ptr %20, align 8, !tbaa !5
  %1011 = load i32, ptr %1010, align 4, !tbaa !9
  %1012 = sub nsw i32 %1009, %1011
  %1013 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %1012, ptr %1013, align 4, !tbaa !9
  br label %1019

1014:                                             ; preds = %1002, %997
  %1015 = load ptr, ptr %20, align 8, !tbaa !5
  %1016 = load i32, ptr %1015, align 4, !tbaa !9
  %1017 = add nsw i32 %1016, 1
  %1018 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %1017, ptr %1018, align 4, !tbaa !9
  br label %1019

1019:                                             ; preds = %1014, %1008
  br label %1020

1020:                                             ; preds = %1019, %994
  br label %1385

1021:                                             ; preds = %942
  %1022 = load i32, ptr %83, align 4, !tbaa !9
  %1023 = icmp ne i32 %1022, 0
  br i1 %1023, label %1024, label %1384

1024:                                             ; preds = %1021
  %1025 = load i32, ptr %57, align 4, !tbaa !9
  %1026 = icmp ne i32 %1025, 0
  br i1 %1026, label %1027, label %1035

1027:                                             ; preds = %1024
  %1028 = load i32, ptr %58, align 4, !tbaa !9
  %1029 = icmp ne i32 %1028, 0
  br i1 %1029, label %1030, label %1032

1030:                                             ; preds = %1027
  %1031 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 66, ptr %1031, align 1, !tbaa !16
  br label %1034

1032:                                             ; preds = %1027
  %1033 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 76, ptr %1033, align 1, !tbaa !16
  br label %1034

1034:                                             ; preds = %1032, %1030
  br label %1037

1035:                                             ; preds = %1024
  %1036 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  store i8 82, ptr %1036, align 1, !tbaa !16
  br label %1037

1037:                                             ; preds = %1035, %1034
  %1038 = getelementptr inbounds [1 x i8], ptr %70, i64 0, i64 0
  %1039 = getelementptr inbounds [1 x i32], ptr %69, i64 0, i64 0
  %1040 = load ptr, ptr %20, align 8, !tbaa !5
  %1041 = load ptr, ptr %21, align 8, !tbaa !5
  %1042 = load i32, ptr %36, align 4, !tbaa !9
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds %struct.doublecomplex, ptr %1041, i64 %1043
  %1045 = load ptr, ptr %22, align 8, !tbaa !5
  %1046 = load ptr, ptr %23, align 8, !tbaa !5
  %1047 = load i32, ptr %38, align 4, !tbaa !9
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %1046, i64 %1048
  %1050 = load ptr, ptr %24, align 8, !tbaa !5
  %1051 = load ptr, ptr %27, align 8, !tbaa !5
  %1052 = load i32, ptr %40, align 4, !tbaa !9
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %1051, i64 %1053
  %1055 = load ptr, ptr %28, align 8, !tbaa !5
  %1056 = load ptr, ptr %29, align 8, !tbaa !5
  %1057 = load i32, ptr %42, align 4, !tbaa !9
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds %struct.doublecomplex, ptr %1056, i64 %1058
  %1060 = load ptr, ptr %30, align 8, !tbaa !5
  %1061 = load ptr, ptr %20, align 8, !tbaa !5
  %1062 = load ptr, ptr %31, align 8, !tbaa !5
  %1063 = load i32, ptr %59, align 4, !tbaa !9
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds %struct.doublecomplex, ptr %1062, i64 %1064
  %1066 = load ptr, ptr %33, align 8, !tbaa !5
  %1067 = load i32, ptr %62, align 4, !tbaa !9
  %1068 = sext i32 %1067 to i64
  %1069 = getelementptr inbounds double, ptr %1066, i64 %1068
  call void @ztgevc_(ptr noundef %1038, ptr noundef @.str.7, ptr noundef %1039, ptr noundef %1040, ptr noundef %1044, ptr noundef %1045, ptr noundef %1049, ptr noundef %1050, ptr noundef %1054, ptr noundef %1055, ptr noundef %1059, ptr noundef %1060, ptr noundef %1061, ptr noundef %65, ptr noundef %1065, ptr noundef %1069, ptr noundef %54)
  %1070 = load i32, ptr %54, align 4, !tbaa !9
  %1071 = icmp ne i32 %1070, 0
  br i1 %1071, label %1072, label %1077

1072:                                             ; preds = %1037
  %1073 = load ptr, ptr %20, align 8, !tbaa !5
  %1074 = load i32, ptr %1073, align 4, !tbaa !9
  %1075 = add nsw i32 %1074, 2
  %1076 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 %1075, ptr %1076, align 4, !tbaa !9
  br label %1385

1077:                                             ; preds = %1037
  %1078 = load i32, ptr %57, align 4, !tbaa !9
  %1079 = icmp ne i32 %1078, 0
  br i1 %1079, label %1080, label %1230

1080:                                             ; preds = %1077
  %1081 = load ptr, ptr %20, align 8, !tbaa !5
  %1082 = load ptr, ptr %33, align 8, !tbaa !5
  %1083 = load i32, ptr %60, align 4, !tbaa !9
  %1084 = sext i32 %1083 to i64
  %1085 = getelementptr inbounds double, ptr %1082, i64 %1084
  %1086 = load ptr, ptr %33, align 8, !tbaa !5
  %1087 = load i32, ptr %73, align 4, !tbaa !9
  %1088 = sext i32 %1087 to i64
  %1089 = getelementptr inbounds double, ptr %1086, i64 %1088
  %1090 = load ptr, ptr %20, align 8, !tbaa !5
  %1091 = load ptr, ptr %27, align 8, !tbaa !5
  %1092 = load i32, ptr %40, align 4, !tbaa !9
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds %struct.doublecomplex, ptr %1091, i64 %1093
  %1095 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zggbak_(ptr noundef @.str.10, ptr noundef @.str.2, ptr noundef %1081, ptr noundef %81, ptr noundef %80, ptr noundef %1085, ptr noundef %1089, ptr noundef %1090, ptr noundef %1094, ptr noundef %1095, ptr noundef %54)
  %1096 = load ptr, ptr %20, align 8, !tbaa !5
  %1097 = load i32, ptr %1096, align 4, !tbaa !9
  store i32 %1097, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %64, align 4, !tbaa !9
  br label %1098

1098:                                             ; preds = %1226, %1080
  %1099 = load i32, ptr %64, align 4, !tbaa !9
  %1100 = load i32, ptr %43, align 4, !tbaa !9
  %1101 = icmp sle i32 %1099, %1100
  br i1 %1101, label %1102, label %1229

1102:                                             ; preds = %1098
  store double 0.000000e+00, ptr %56, align 8, !tbaa !15
  %1103 = load ptr, ptr %20, align 8, !tbaa !5
  %1104 = load i32, ptr %1103, align 4, !tbaa !9
  store i32 %1104, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %1105

1105:                                             ; preds = %1161, %1102
  %1106 = load i32, ptr %66, align 4, !tbaa !9
  %1107 = load i32, ptr %44, align 4, !tbaa !9
  %1108 = icmp sle i32 %1106, %1107
  br i1 %1108, label %1109, label %1164

1109:                                             ; preds = %1105
  %1110 = load i32, ptr %66, align 4, !tbaa !9
  %1111 = load i32, ptr %64, align 4, !tbaa !9
  %1112 = load i32, ptr %39, align 4, !tbaa !9
  %1113 = mul nsw i32 %1111, %1112
  %1114 = add nsw i32 %1110, %1113
  store i32 %1114, ptr %45, align 4, !tbaa !9
  %1115 = load double, ptr %56, align 8, !tbaa !15
  store double %1115, ptr %49, align 8, !tbaa !15
  %1116 = load ptr, ptr %27, 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 0
  %1121 = load double, ptr %1120, align 8, !tbaa !11
  store double %1121, ptr %47, align 8, !tbaa !15
  %1122 = load double, ptr %47, align 8, !tbaa !15
  %1123 = fcmp oge double %1122, 0.000000e+00
  br i1 %1123, label %1124, label %1126

1124:                                             ; preds = %1109
  %1125 = load double, ptr %47, align 8, !tbaa !15
  br label %1129

1126:                                             ; preds = %1109
  %1127 = load double, ptr %47, align 8, !tbaa !15
  %1128 = fneg double %1127
  br label %1129

1129:                                             ; preds = %1126, %1124
  %1130 = phi double [ %1125, %1124 ], [ %1128, %1126 ]
  %1131 = load ptr, ptr %27, align 8, !tbaa !5
  %1132 = load i32, ptr %66, align 4, !tbaa !9
  %1133 = load i32, ptr %64, align 4, !tbaa !9
  %1134 = load i32, ptr %39, align 4, !tbaa !9
  %1135 = mul nsw i32 %1133, %1134
  %1136 = add nsw i32 %1132, %1135
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds %struct.doublecomplex, ptr %1131, i64 %1137
  %1139 = call { double, double } @Cd(ptr noundef %1138)
  %1140 = extractvalue { double, double } %1139, 0
  %1141 = extractvalue { double, double } %1139, 1
  store double %1141, ptr %48, align 8, !tbaa !15
  %1142 = load double, ptr %48, align 8, !tbaa !15
  %1143 = fcmp oge double %1142, 0.000000e+00
  br i1 %1143, label %1144, label %1146

1144:                                             ; preds = %1129
  %1145 = load double, ptr %48, align 8, !tbaa !15
  br label %1149

1146:                                             ; preds = %1129
  %1147 = load double, ptr %48, align 8, !tbaa !15
  %1148 = fneg double %1147
  br label %1149

1149:                                             ; preds = %1146, %1144
  %1150 = phi double [ %1145, %1144 ], [ %1148, %1146 ]
  %1151 = fadd double %1130, %1150
  store double %1151, ptr %50, align 8, !tbaa !15
  %1152 = load double, ptr %49, align 8, !tbaa !15
  %1153 = load double, ptr %50, align 8, !tbaa !15
  %1154 = fcmp oge double %1152, %1153
  br i1 %1154, label %1155, label %1157

1155:                                             ; preds = %1149
  %1156 = load double, ptr %49, align 8, !tbaa !15
  br label %1159

1157:                                             ; preds = %1149
  %1158 = load double, ptr %50, align 8, !tbaa !15
  br label %1159

1159:                                             ; preds = %1157, %1155
  %1160 = phi double [ %1156, %1155 ], [ %1158, %1157 ]
  store double %1160, ptr %56, align 8, !tbaa !15
  br label %1161

1161:                                             ; preds = %1159
  %1162 = load i32, ptr %66, align 4, !tbaa !9
  %1163 = add nsw i32 %1162, 1
  store i32 %1163, ptr %66, align 4, !tbaa !9
  br label %1105, !llvm.loop !17

1164:                                             ; preds = %1105
  %1165 = load double, ptr %56, align 8, !tbaa !15
  %1166 = load double, ptr %77, align 8, !tbaa !15
  %1167 = fcmp olt double %1165, %1166
  br i1 %1167, label %1168, label %1169

1168:                                             ; preds = %1164
  br label %1225

1169:                                             ; preds = %1164
  %1170 = load double, ptr %56, align 8, !tbaa !15
  %1171 = fdiv double 1.000000e+00, %1170
  store double %1171, ptr %56, align 8, !tbaa !15
  %1172 = load ptr, ptr %20, align 8, !tbaa !5
  %1173 = load i32, ptr %1172, align 4, !tbaa !9
  store i32 %1173, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %1174

1174:                                             ; preds = %1221, %1169
  %1175 = load i32, ptr %66, align 4, !tbaa !9
  %1176 = load i32, ptr %44, align 4, !tbaa !9
  %1177 = icmp sle i32 %1175, %1176
  br i1 %1177, label %1178, label %1224

1178:                                             ; preds = %1174
  %1179 = load i32, ptr %66, align 4, !tbaa !9
  %1180 = load i32, ptr %64, align 4, !tbaa !9
  %1181 = load i32, ptr %39, align 4, !tbaa !9
  %1182 = mul nsw i32 %1180, %1181
  %1183 = add nsw i32 %1179, %1182
  store i32 %1183, ptr %45, align 4, !tbaa !9
  %1184 = load i32, ptr %66, align 4, !tbaa !9
  %1185 = load i32, ptr %64, align 4, !tbaa !9
  %1186 = load i32, ptr %39, align 4, !tbaa !9
  %1187 = mul nsw i32 %1185, %1186
  %1188 = add nsw i32 %1184, %1187
  store i32 %1188, ptr %46, align 4, !tbaa !9
  %1189 = load double, ptr %56, align 8, !tbaa !15
  %1190 = load ptr, ptr %27, align 8, !tbaa !5
  %1191 = load i32, ptr %46, align 4, !tbaa !9
  %1192 = sext i32 %1191 to i64
  %1193 = getelementptr inbounds %struct.doublecomplex, ptr %1190, i64 %1192
  %1194 = getelementptr inbounds %struct.doublecomplex, ptr %1193, i32 0, i32 0
  %1195 = load double, ptr %1194, align 8, !tbaa !11
  %1196 = fmul double %1189, %1195
  %1197 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %1196, ptr %1197, align 8, !tbaa !11
  %1198 = load double, ptr %56, align 8, !tbaa !15
  %1199 = load ptr, ptr %27, align 8, !tbaa !5
  %1200 = load i32, ptr %46, align 4, !tbaa !9
  %1201 = sext i32 %1200 to i64
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %1199, i64 %1201
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %1202, i32 0, i32 1
  %1204 = load double, ptr %1203, align 8, !tbaa !14
  %1205 = fmul double %1198, %1204
  %1206 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double %1205, ptr %1206, align 8, !tbaa !14
  %1207 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %1208 = load double, ptr %1207, align 8, !tbaa !11
  %1209 = load ptr, ptr %27, align 8, !tbaa !5
  %1210 = load i32, ptr %45, align 4, !tbaa !9
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds %struct.doublecomplex, ptr %1209, i64 %1211
  %1213 = getelementptr inbounds %struct.doublecomplex, ptr %1212, i32 0, i32 0
  store double %1208, ptr %1213, align 8, !tbaa !11
  %1214 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %1215 = load double, ptr %1214, align 8, !tbaa !14
  %1216 = load ptr, ptr %27, align 8, !tbaa !5
  %1217 = load i32, ptr %45, align 4, !tbaa !9
  %1218 = sext i32 %1217 to i64
  %1219 = getelementptr inbounds %struct.doublecomplex, ptr %1216, i64 %1218
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %1219, i32 0, i32 1
  store double %1215, ptr %1220, align 8, !tbaa !14
  br label %1221

1221:                                             ; preds = %1178
  %1222 = load i32, ptr %66, align 4, !tbaa !9
  %1223 = add nsw i32 %1222, 1
  store i32 %1223, ptr %66, align 4, !tbaa !9
  br label %1174, !llvm.loop !19

1224:                                             ; preds = %1174
  br label %1225

1225:                                             ; preds = %1224, %1168
  br label %1226

1226:                                             ; preds = %1225
  %1227 = load i32, ptr %64, align 4, !tbaa !9
  %1228 = add nsw i32 %1227, 1
  store i32 %1228, ptr %64, align 4, !tbaa !9
  br label %1098, !llvm.loop !20

1229:                                             ; preds = %1098
  br label %1230

1230:                                             ; preds = %1229, %1077
  %1231 = load i32, ptr %58, align 4, !tbaa !9
  %1232 = icmp ne i32 %1231, 0
  br i1 %1232, label %1233, label %1383

1233:                                             ; preds = %1230
  %1234 = load ptr, ptr %20, align 8, !tbaa !5
  %1235 = load ptr, ptr %33, align 8, !tbaa !5
  %1236 = load i32, ptr %60, align 4, !tbaa !9
  %1237 = sext i32 %1236 to i64
  %1238 = getelementptr inbounds double, ptr %1235, i64 %1237
  %1239 = load ptr, ptr %33, align 8, !tbaa !5
  %1240 = load i32, ptr %73, align 4, !tbaa !9
  %1241 = sext i32 %1240 to i64
  %1242 = getelementptr inbounds double, ptr %1239, i64 %1241
  %1243 = load ptr, ptr %20, align 8, !tbaa !5
  %1244 = load ptr, ptr %29, align 8, !tbaa !5
  %1245 = load i32, ptr %42, align 4, !tbaa !9
  %1246 = sext i32 %1245 to i64
  %1247 = getelementptr inbounds %struct.doublecomplex, ptr %1244, i64 %1246
  %1248 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zggbak_(ptr noundef @.str.10, ptr noundef @.str.12, ptr noundef %1234, ptr noundef %81, ptr noundef %80, ptr noundef %1238, ptr noundef %1242, ptr noundef %1243, ptr noundef %1247, ptr noundef %1248, ptr noundef %54)
  %1249 = load ptr, ptr %20, align 8, !tbaa !5
  %1250 = load i32, ptr %1249, align 4, !tbaa !9
  store i32 %1250, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %64, align 4, !tbaa !9
  br label %1251

1251:                                             ; preds = %1379, %1233
  %1252 = load i32, ptr %64, align 4, !tbaa !9
  %1253 = load i32, ptr %43, align 4, !tbaa !9
  %1254 = icmp sle i32 %1252, %1253
  br i1 %1254, label %1255, label %1382

1255:                                             ; preds = %1251
  store double 0.000000e+00, ptr %56, align 8, !tbaa !15
  %1256 = load ptr, ptr %20, align 8, !tbaa !5
  %1257 = load i32, ptr %1256, align 4, !tbaa !9
  store i32 %1257, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %1258

1258:                                             ; preds = %1314, %1255
  %1259 = load i32, ptr %66, align 4, !tbaa !9
  %1260 = load i32, ptr %44, align 4, !tbaa !9
  %1261 = icmp sle i32 %1259, %1260
  br i1 %1261, label %1262, label %1317

1262:                                             ; preds = %1258
  %1263 = load i32, ptr %66, align 4, !tbaa !9
  %1264 = load i32, ptr %64, align 4, !tbaa !9
  %1265 = load i32, ptr %41, align 4, !tbaa !9
  %1266 = mul nsw i32 %1264, %1265
  %1267 = add nsw i32 %1263, %1266
  store i32 %1267, ptr %45, align 4, !tbaa !9
  %1268 = load double, ptr %56, align 8, !tbaa !15
  store double %1268, ptr %49, align 8, !tbaa !15
  %1269 = load ptr, ptr %29, align 8, !tbaa !5
  %1270 = load i32, ptr %45, align 4, !tbaa !9
  %1271 = sext i32 %1270 to i64
  %1272 = getelementptr inbounds %struct.doublecomplex, ptr %1269, i64 %1271
  %1273 = getelementptr inbounds %struct.doublecomplex, ptr %1272, i32 0, i32 0
  %1274 = load double, ptr %1273, align 8, !tbaa !11
  store double %1274, ptr %47, align 8, !tbaa !15
  %1275 = load double, ptr %47, align 8, !tbaa !15
  %1276 = fcmp oge double %1275, 0.000000e+00
  br i1 %1276, label %1277, label %1279

1277:                                             ; preds = %1262
  %1278 = load double, ptr %47, align 8, !tbaa !15
  br label %1282

1279:                                             ; preds = %1262
  %1280 = load double, ptr %47, align 8, !tbaa !15
  %1281 = fneg double %1280
  br label %1282

1282:                                             ; preds = %1279, %1277
  %1283 = phi double [ %1278, %1277 ], [ %1281, %1279 ]
  %1284 = load ptr, ptr %29, align 8, !tbaa !5
  %1285 = load i32, ptr %66, align 4, !tbaa !9
  %1286 = load i32, ptr %64, align 4, !tbaa !9
  %1287 = load i32, ptr %41, align 4, !tbaa !9
  %1288 = mul nsw i32 %1286, %1287
  %1289 = add nsw i32 %1285, %1288
  %1290 = sext i32 %1289 to i64
  %1291 = getelementptr inbounds %struct.doublecomplex, ptr %1284, i64 %1290
  %1292 = call { double, double } @Cd(ptr noundef %1291)
  %1293 = extractvalue { double, double } %1292, 0
  %1294 = extractvalue { double, double } %1292, 1
  store double %1294, ptr %48, align 8, !tbaa !15
  %1295 = load double, ptr %48, align 8, !tbaa !15
  %1296 = fcmp oge double %1295, 0.000000e+00
  br i1 %1296, label %1297, label %1299

1297:                                             ; preds = %1282
  %1298 = load double, ptr %48, align 8, !tbaa !15
  br label %1302

1299:                                             ; preds = %1282
  %1300 = load double, ptr %48, align 8, !tbaa !15
  %1301 = fneg double %1300
  br label %1302

1302:                                             ; preds = %1299, %1297
  %1303 = phi double [ %1298, %1297 ], [ %1301, %1299 ]
  %1304 = fadd double %1283, %1303
  store double %1304, ptr %50, align 8, !tbaa !15
  %1305 = load double, ptr %49, align 8, !tbaa !15
  %1306 = load double, ptr %50, align 8, !tbaa !15
  %1307 = fcmp oge double %1305, %1306
  br i1 %1307, label %1308, label %1310

1308:                                             ; preds = %1302
  %1309 = load double, ptr %49, align 8, !tbaa !15
  br label %1312

1310:                                             ; preds = %1302
  %1311 = load double, ptr %50, align 8, !tbaa !15
  br label %1312

1312:                                             ; preds = %1310, %1308
  %1313 = phi double [ %1309, %1308 ], [ %1311, %1310 ]
  store double %1313, ptr %56, align 8, !tbaa !15
  br label %1314

1314:                                             ; preds = %1312
  %1315 = load i32, ptr %66, align 4, !tbaa !9
  %1316 = add nsw i32 %1315, 1
  store i32 %1316, ptr %66, align 4, !tbaa !9
  br label %1258, !llvm.loop !21

1317:                                             ; preds = %1258
  %1318 = load double, ptr %56, align 8, !tbaa !15
  %1319 = load double, ptr %77, align 8, !tbaa !15
  %1320 = fcmp olt double %1318, %1319
  br i1 %1320, label %1321, label %1322

1321:                                             ; preds = %1317
  br label %1378

1322:                                             ; preds = %1317
  %1323 = load double, ptr %56, align 8, !tbaa !15
  %1324 = fdiv double 1.000000e+00, %1323
  store double %1324, ptr %56, align 8, !tbaa !15
  %1325 = load ptr, ptr %20, align 8, !tbaa !5
  %1326 = load i32, ptr %1325, align 4, !tbaa !9
  store i32 %1326, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %1327

1327:                                             ; preds = %1374, %1322
  %1328 = load i32, ptr %66, align 4, !tbaa !9
  %1329 = load i32, ptr %44, align 4, !tbaa !9
  %1330 = icmp sle i32 %1328, %1329
  br i1 %1330, label %1331, label %1377

1331:                                             ; preds = %1327
  %1332 = load i32, ptr %66, align 4, !tbaa !9
  %1333 = load i32, ptr %64, align 4, !tbaa !9
  %1334 = load i32, ptr %41, align 4, !tbaa !9
  %1335 = mul nsw i32 %1333, %1334
  %1336 = add nsw i32 %1332, %1335
  store i32 %1336, ptr %45, align 4, !tbaa !9
  %1337 = load i32, ptr %66, align 4, !tbaa !9
  %1338 = load i32, ptr %64, align 4, !tbaa !9
  %1339 = load i32, ptr %41, align 4, !tbaa !9
  %1340 = mul nsw i32 %1338, %1339
  %1341 = add nsw i32 %1337, %1340
  store i32 %1341, ptr %46, align 4, !tbaa !9
  %1342 = load double, ptr %56, align 8, !tbaa !15
  %1343 = load ptr, ptr %29, align 8, !tbaa !5
  %1344 = load i32, ptr %46, align 4, !tbaa !9
  %1345 = sext i32 %1344 to i64
  %1346 = getelementptr inbounds %struct.doublecomplex, ptr %1343, i64 %1345
  %1347 = getelementptr inbounds %struct.doublecomplex, ptr %1346, i32 0, i32 0
  %1348 = load double, ptr %1347, align 8, !tbaa !11
  %1349 = fmul double %1342, %1348
  %1350 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %1349, ptr %1350, align 8, !tbaa !11
  %1351 = load double, ptr %56, align 8, !tbaa !15
  %1352 = load ptr, ptr %29, align 8, !tbaa !5
  %1353 = load i32, ptr %46, align 4, !tbaa !9
  %1354 = sext i32 %1353 to i64
  %1355 = getelementptr inbounds %struct.doublecomplex, ptr %1352, i64 %1354
  %1356 = getelementptr inbounds %struct.doublecomplex, ptr %1355, i32 0, i32 1
  %1357 = load double, ptr %1356, align 8, !tbaa !14
  %1358 = fmul double %1351, %1357
  %1359 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double %1358, ptr %1359, align 8, !tbaa !14
  %1360 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %1361 = load double, ptr %1360, align 8, !tbaa !11
  %1362 = load ptr, ptr %29, align 8, !tbaa !5
  %1363 = load i32, ptr %45, align 4, !tbaa !9
  %1364 = sext i32 %1363 to i64
  %1365 = getelementptr inbounds %struct.doublecomplex, ptr %1362, i64 %1364
  %1366 = getelementptr inbounds %struct.doublecomplex, ptr %1365, i32 0, i32 0
  store double %1361, ptr %1366, align 8, !tbaa !11
  %1367 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %1368 = load double, ptr %1367, align 8, !tbaa !14
  %1369 = load ptr, ptr %29, align 8, !tbaa !5
  %1370 = load i32, ptr %45, align 4, !tbaa !9
  %1371 = sext i32 %1370 to i64
  %1372 = getelementptr inbounds %struct.doublecomplex, ptr %1369, i64 %1371
  %1373 = getelementptr inbounds %struct.doublecomplex, ptr %1372, i32 0, i32 1
  store double %1368, ptr %1373, align 8, !tbaa !14
  br label %1374

1374:                                             ; preds = %1331
  %1375 = load i32, ptr %66, align 4, !tbaa !9
  %1376 = add nsw i32 %1375, 1
  store i32 %1376, ptr %66, align 4, !tbaa !9
  br label %1327, !llvm.loop !22

1377:                                             ; preds = %1327
  br label %1378

1378:                                             ; preds = %1377, %1321
  br label %1379

1379:                                             ; preds = %1378
  %1380 = load i32, ptr %64, align 4, !tbaa !9
  %1381 = add nsw i32 %1380, 1
  store i32 %1381, ptr %64, align 4, !tbaa !9
  br label %1251, !llvm.loop !23

1382:                                             ; preds = %1251
  br label %1383

1383:                                             ; preds = %1382, %1230
  br label %1384

1384:                                             ; preds = %1383, %1021
  br label %1385

1385:                                             ; preds = %1384, %1072, %1020
  %1386 = load i32, ptr %67, align 4, !tbaa !9
  %1387 = icmp ne i32 %1386, 0
  br i1 %1387, label %1388, label %1393

1388:                                             ; preds = %1385
  %1389 = load ptr, ptr %20, align 8, !tbaa !5
  %1390 = load ptr, ptr %25, align 8, !tbaa !5
  %1391 = getelementptr inbounds %struct.doublecomplex, ptr %1390, i64 1
  %1392 = load ptr, ptr %20, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %75, ptr noundef %52, ptr noundef %1389, ptr noundef @c__1, ptr noundef %1391, ptr noundef %1392, ptr noundef %54)
  br label %1393

1393:                                             ; preds = %1388, %1385
  %1394 = load i32, ptr %68, align 4, !tbaa !9
  %1395 = icmp ne i32 %1394, 0
  br i1 %1395, label %1396, label %1401

1396:                                             ; preds = %1393
  %1397 = load ptr, ptr %20, align 8, !tbaa !5
  %1398 = load ptr, ptr %26, align 8, !tbaa !5
  %1399 = getelementptr inbounds %struct.doublecomplex, ptr %1398, i64 1
  %1400 = load ptr, ptr %20, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %76, ptr noundef %53, ptr noundef %1397, ptr noundef @c__1, ptr noundef %1399, ptr noundef %1400, ptr noundef %54)
  br label %1401

1401:                                             ; preds = %1396, %1393
  %1402 = load i32, ptr %78, align 4, !tbaa !9
  %1403 = sitofp i32 %1402 to double
  %1404 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %1403, ptr %1404, align 8, !tbaa !11
  %1405 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double 0.000000e+00, ptr %1405, align 8, !tbaa !14
  %1406 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %1407 = load double, ptr %1406, align 8, !tbaa !11
  %1408 = load ptr, ptr %31, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct.doublecomplex, ptr %1408, i64 1
  %1410 = getelementptr inbounds %struct.doublecomplex, ptr %1409, i32 0, i32 0
  store double %1407, ptr %1410, align 8, !tbaa !11
  %1411 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %1412 = load double, ptr %1411, align 8, !tbaa !14
  %1413 = load ptr, ptr %31, align 8, !tbaa !5
  %1414 = getelementptr inbounds %struct.doublecomplex, ptr %1413, i64 1
  %1415 = getelementptr inbounds %struct.doublecomplex, ptr %1414, i32 0, i32 1
  store double %1412, ptr %1415, align 8, !tbaa !14
  store i32 1, ptr %84, align 4
  br label %1416

1416:                                             ; preds = %1401, %600, %594, %586
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 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 @zungqr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

; Function Attrs: nounwind uwtable
define dso_local void @zggev3_(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
  %narrow540 = xor i32 %37, -1
  %38 = sext i32 %narrow540 to i64
  %39 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %38
  %40 = load i32, ptr %10, align 4, !tbaa !5
  %narrow543 = xor i32 %40, -1
  %41 = sext i32 %narrow543 to i64
  %42 = getelementptr inbounds %struct.doublecomplex, ptr %9, i64 %41
  %43 = load i32, ptr %12, align 4, !tbaa !5
  %narrow544 = xor i32 %43, -1
  %44 = sext i32 %narrow544 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 %.thread651

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

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

.thread658:                                       ; preds = %.thread651
  %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 = %.thread651
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %.thread561

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 %.not529, label %56, label %.thread570.sink.split

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

56:                                               ; preds = %.thread658, %54
  %57 = phi i32 [ %53, %.thread658 ], [ %55, %54 ]
  %.not531.not = icmp eq i32 %57, 0
  br i1 %.not531.not, label %.thread570.sink.split, label %.thread561

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

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

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

70:                                               ; preds = %67
  %71 = load i32, ptr %10, align 4, !tbaa !5
  %72 = icmp slt i32 %71, 1
  %73 = icmp ult i32 %71, %62
  %or.cond592 = and i1 %58, %73
  %or.cond594 = select i1 %72, i1 true, i1 %or.cond592
  br i1 %or.cond594, label %.thread570.sink.split, label %74

74:                                               ; preds = %70
  %75 = load i32, ptr %12, align 4, !tbaa !5
  %76 = icmp slt i32 %75, 1
  %77 = icmp ult i32 %75, %62
  %or.cond593 = and i1 %.not530653, %77
  %or.cond595 = or i1 %76, %or.cond593
  br i1 %or.cond595, label %.thread570.sink.split, label %78

78:                                               ; preds = %74
  store i32 1, ptr %18, align 4, !tbaa !5
  %79 = shl nuw i32 %62, 1
  store i32 %79, ptr %19, align 4, !tbaa !5
  %80 = tail call i32 @llvm.smax.i32(i32 %79, i32 1)
  %81 = icmp sge i32 %60, %80
  %or.cond = or i1 %61, %81
  br i1 %or.cond, label %82, label %.thread570.sink.split

82:                                               ; preds = %78
  call void @zgeqrf_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef %13, ptr noundef nonnull @c_n1, ptr noundef nonnull %22) #6
  store i32 1, ptr %18, align 4, !tbaa !5
  %83 = load i32, ptr %2, align 4, !tbaa !5
  %84 = load double, ptr %13, align 8, !tbaa !9
  %85 = fptosi double %84 to i32
  %86 = add nsw i32 %83, %85
  store i32 %86, ptr %19, align 4, !tbaa !5
  %87 = call i32 @llvm.smax.i32(i32 %86, i32 1)
  call void @zunmqr_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %13, ptr noundef nonnull @c_n1, ptr noundef nonnull %22) #6
  store i32 %87, ptr %18, align 4, !tbaa !5
  %88 = load i32, ptr %2, align 4, !tbaa !5
  %89 = load double, ptr %13, align 8, !tbaa !9
  %90 = fptosi double %89 to i32
  %91 = add nsw i32 %88, %90
  store i32 %91, ptr %19, align 4, !tbaa !5
  %92 = call i32 @llvm.smax.i32(i32 %87, i32 %91)
  br i1 %58, label %93, label %.thread565

93:                                               ; preds = %82
  call void @zungqr_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef nonnull %13, ptr noundef nonnull @c_n1, ptr noundef nonnull %22) #6
  store i32 %92, ptr %18, align 4, !tbaa !5
  %94 = load i32, ptr %2, align 4, !tbaa !5
  %95 = load double, ptr %13, align 8, !tbaa !9
  %96 = fptosi double %95 to i32
  %97 = add nsw i32 %94, %96
  store i32 %97, ptr %19, align 4, !tbaa !5
  %98 = call i32 @llvm.smax.i32(i32 %92, i32 %97)
  br label %.thread565

.thread565:                                       ; preds = %93, %82
  %.0 = phi i32 [ %98, %93 ], [ %92, %82 ]
  call void @zgghd3_(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull @c_n1, ptr noundef nonnull %22) #6
  store i32 %.0, ptr %18, align 4, !tbaa !5
  %99 = load i32, ptr %2, align 4, !tbaa !5
  %100 = load double, ptr %13, align 8, !tbaa !9
  %101 = fptosi double %100 to i32
  %102 = add nsw i32 %99, %101
  store i32 %102, ptr %19, align 4, !tbaa !5
  %103 = call i32 @llvm.smax.i32(i32 %.0, i32 %102)
  %.str.4..str.5 = select i1 %59, ptr @.str.4, ptr @.str.5
  call void @zhgeqz_(ptr noundef nonnull %.str.4..str.5, ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef 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 @c_n1, ptr noundef %15, ptr noundef nonnull %22) #6
  %104 = load i32, ptr %2, align 4, !tbaa !5
  %105 = load double, ptr %13, align 8, !tbaa !9
  %106 = fptosi double %105 to i32
  %107 = add nsw i32 %104, %106
  %108 = call i32 @llvm.smax.i32(i32 %103, i32 %107)
  store i32 %103, ptr %18, align 4
  store i32 %107, ptr %19, align 4
  %109 = uitofp nneg i32 %108 to double
  store double %109, ptr %13, align 8, !tbaa !9
  %110 = getelementptr inbounds i8, ptr %13, i64 8
  store double 0.000000e+00, ptr %110, align 8, !tbaa !12
  %.pr569.pr = load i32, ptr %16, align 4, !tbaa !5
  %.not538 = icmp eq i32 %.pr569.pr, 0
  br i1 %.not538, label %114, label %.thread570

.thread570.sink.split:                            ; preds = %78, %74, %70, %67, %64, %.thread561, %56, %54, %.thread
  %.sink = phi i32 [ -1, %.thread ], [ -1, %54 ], [ -2, %56 ], [ -3, %.thread561 ], [ -5, %64 ], [ -7, %67 ], [ -11, %70 ], [ -13, %74 ], [ -15, %78 ]
  store i32 %.sink, ptr %16, align 4, !tbaa !5
  br label %.thread570

.thread570:                                       ; preds = %.thread570.sink.split, %.thread565
  %111 = phi i32 [ %.pr569.pr, %.thread565 ], [ %.sink, %.thread570.sink.split ]
  %112 = sub nsw i32 0, %111
  store i32 %112, ptr %18, align 4, !tbaa !5
  %113 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %18, i32 noundef 6) #6
  br label %314

114:                                              ; preds = %.thread565
  %115 = icmp eq i32 %104, 0
  %or.cond671 = select i1 %61, i1 true, i1 %115
  br i1 %or.cond671, label %314, label %116

116:                                              ; preds = %114
  %117 = call double @dlamch_(ptr noundef nonnull @.str.5) #6
  %118 = call double @dlamch_(ptr noundef nonnull @.str.7) #6
  %119 = fmul double %117, %118
  %120 = call double @dlamch_(ptr noundef nonnull @.str.4) #6
  store double %120, ptr %31, align 8, !tbaa !13
  %121 = fdiv double 1.000000e+00, %120
  store double %121, ptr %28, align 8, !tbaa !13
  call void @dlabad_(ptr noundef nonnull %31, ptr noundef nonnull %28) #6
  %122 = load double, ptr %31, align 8, !tbaa !13
  %123 = call double @sqrt(double noundef %122) #6
  %124 = fdiv double %123, %119
  store double %124, ptr %31, align 8, !tbaa !13
  %125 = fdiv double 1.000000e+00, %124
  store double %125, ptr %28, align 8, !tbaa !13
  %126 = call double @zlange_(ptr noundef nonnull @.str.8, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %15) #6
  store double %126, ptr %20, 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.cond600 = select i1 %127, i1 %129, i1 false
  br i1 %or.cond600, label %133, label %130

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

133:                                              ; preds = %116, %130
  %storemerge596 = phi double [ %131, %130 ], [ %128, %116 ]
  store double %storemerge596, ptr %29, align 8, !tbaa !13
  call void @zlascl_(ptr noundef nonnull @.str.9, 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 %134

134:                                              ; preds = %130, %133
  %.not539577 = phi i1 [ false, %133 ], [ true, %130 ]
  %135 = call double @zlange_(ptr noundef nonnull @.str.8, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %15) #6
  store double %135, ptr %21, align 8, !tbaa !13
  %136 = fcmp ogt double %135, 0.000000e+00
  %137 = load double, ptr %31, align 8
  %138 = fcmp olt double %135, %137
  %or.cond602 = select i1 %136, i1 %138, i1 false
  br i1 %or.cond602, label %142, label %139

139:                                              ; preds = %134
  %140 = load double, ptr %28, align 8, !tbaa !13
  %141 = fcmp ogt double %135, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %134, %139
  %storemerge597 = phi double [ %140, %139 ], [ %137, %134 ]
  store double %storemerge597, ptr %30, align 8, !tbaa !13
  call void @zlascl_(ptr noundef nonnull @.str.9, 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 %143

143:                                              ; preds = %139, %142
  %.not541582 = phi i1 [ false, %142 ], [ true, %139 ]
  %144 = load i32, ptr %2, align 4, !tbaa !5
  %145 = add nsw i32 %144, 1
  %146 = add nsw i32 %145, %144
  %147 = sext i32 %145 to i64
  %148 = getelementptr inbounds double, ptr %47, i64 %147
  %149 = sext i32 %146 to i64
  %150 = getelementptr inbounds double, ptr %47, i64 %149
  call void @zggbal_(ptr noundef nonnull @.str.10, 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 %148, ptr noundef nonnull %150, ptr noundef nonnull %22) #6
  %151 = load i32, ptr %32, align 4, !tbaa !5
  %152 = add nsw i32 %151, 1
  %153 = load i32, ptr %33, align 4, !tbaa !5
  %154 = sub i32 %152, %153
  store i32 %154, ptr %24, align 4, !tbaa !5
  br i1 %59, label %155, label %158

155:                                              ; preds = %143
  %156 = load i32, ptr %2, align 4, !tbaa !5
  %reass.sub = sub i32 %156, %153
  %157 = add i32 %reass.sub, 1
  br label %158

158:                                              ; preds = %143, %155
  %storemerge = phi i32 [ %157, %155 ], [ %154, %143 ]
  store i32 %storemerge, ptr %23, align 4, !tbaa !5
  %159 = load i32, ptr %14, align 4, !tbaa !5
  %160 = sub i32 %159, %154
  store i32 %160, ptr %18, align 4, !tbaa !5
  %161 = add i32 %37, 1
  %162 = mul i32 %153, %161
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %163
  %165 = sext i32 %154 to i64
  %166 = getelementptr %struct.doublecomplex, ptr %46, i64 %165
  %167 = getelementptr i8, ptr %166, i64 16
  call void @zgeqrf_(ptr noundef nonnull %24, ptr noundef nonnull %23, ptr noundef %164, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef nonnull %167, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  %168 = load i32, ptr %14, align 4, !tbaa !5
  %169 = sub i32 %168, %154
  store i32 %169, ptr %18, align 4, !tbaa !5
  %170 = load i32, ptr %33, align 4, !tbaa !5
  %171 = mul i32 %170, %161
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %172
  %174 = add i32 %34, 1
  %175 = mul i32 %170, %174
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %176
  call void @zunmqr_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %24, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef %173, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %177, ptr noundef nonnull %4, ptr noundef nonnull %167, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  br i1 %58, label %178, label %201

178:                                              ; preds = %158
  call void @zlaset_(ptr noundef nonnull @.str.11, 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
  %179 = load i32, ptr %24, align 4, !tbaa !5
  %180 = icmp sgt i32 %179, 1
  br i1 %180, label %181, label %193

181:                                              ; preds = %178
  %182 = add nsw i32 %179, -1
  store i32 %182, ptr %18, align 4, !tbaa !5
  store i32 %182, ptr %19, align 4, !tbaa !5
  %183 = load i32, ptr %33, align 4, !tbaa !5
  %184 = add nsw i32 %183, 1
  %185 = mul nsw i32 %183, %37
  %186 = add nsw i32 %184, %185
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %187
  %189 = mul nsw i32 %183, %40
  %190 = add nsw i32 %184, %189
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds %struct.doublecomplex, ptr %42, i64 %191
  call void @zlacpy_(ptr noundef nonnull @.str.2, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %188, ptr noundef nonnull %6, ptr noundef %192, ptr noundef nonnull %10) #6
  br label %193

193:                                              ; preds = %181, %178
  %194 = load i32, ptr %14, align 4, !tbaa !5
  %195 = sub i32 %194, %154
  store i32 %195, ptr %18, align 4, !tbaa !5
  %196 = load i32, ptr %33, align 4, !tbaa !5
  %197 = add i32 %40, 1
  %198 = mul i32 %196, %197
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds %struct.doublecomplex, ptr %42, i64 %199
  call void @zungqr_(ptr noundef nonnull %24, ptr noundef nonnull %24, ptr noundef nonnull %24, ptr noundef %200, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef nonnull %167, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  br label %201

201:                                              ; preds = %193, %158
  br i1 %.not530653, label %202, label %203

202:                                              ; preds = %201
  call void @zlaset_(ptr noundef nonnull @.str.11, 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 %203

203:                                              ; preds = %202, %201
  %204 = load i32, ptr %14, align 4, !tbaa !5
  %205 = sub i32 %204, %154
  store i32 %205, ptr %18, align 4, !tbaa !5
  br i1 %59, label %206, label %207

206:                                              ; preds = %203
  call void @zgghd3_(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 %167, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  br label %215

207:                                              ; preds = %203
  %208 = load i32, ptr %33, align 4, !tbaa !5
  %209 = mul i32 %208, %174
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %210
  %212 = mul i32 %208, %161
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %213
  call void @zgghd3_(ptr noundef nonnull @.str, ptr noundef nonnull @.str, ptr noundef nonnull %24, ptr noundef nonnull @c__1, ptr noundef nonnull %24, ptr noundef %211, ptr noundef nonnull %4, ptr noundef %214, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %167, ptr noundef nonnull %18, ptr noundef nonnull %22) #6
  br label %215

215:                                              ; preds = %207, %206
  %.559 = phi i8 [ 69, %207 ], [ 83, %206 ]
  store i8 %.559, ptr %27, align 1, !tbaa !14
  %216 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %216, 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 %150, ptr noundef nonnull %22) #6
  %217 = load i32, ptr %22, align 4, !tbaa !5
  %.not545 = icmp eq i32 %217, 0
  br i1 %.not545, label %227, label %218

218:                                              ; preds = %215
  %219 = icmp slt i32 %217, 1
  %.pre = load i32, ptr %2, align 4, !tbaa !5
  %.not553 = icmp sgt i32 %217, %.pre
  %or.cond672 = select i1 %219, i1 true, i1 %.not553
  br i1 %or.cond672, label %220, label %.loopexit603.sink.split

220:                                              ; preds = %218
  %221 = icmp sle i32 %217, %.pre
  %222 = shl i32 %.pre, 1
  %.not554 = icmp sgt i32 %217, %222
  %or.cond560 = or i1 %221, %.not554
  br i1 %or.cond560, label %225, label %223

223:                                              ; preds = %220
  %224 = sub nsw i32 %217, %.pre
  br label %.loopexit603.sink.split

225:                                              ; preds = %220
  %226 = add nsw i32 %.pre, 1
  br label %.loopexit603.sink.split

227:                                              ; preds = %215
  br i1 %59, label %228, label %.loopexit603

228:                                              ; preds = %227
  br i1 %58, label %229, label %.thread583

229:                                              ; preds = %228
  %. = select i1 %.not530653, i8 66, i8 76
  store i8 %., ptr %27, align 1, !tbaa !14
  call void @ztgevc_(ptr noundef nonnull %27, ptr noundef nonnull @.str.7, 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 %150, ptr noundef nonnull %22) #6
  %230 = load i32, ptr %22, align 4, !tbaa !5
  %.not546 = icmp eq i32 %230, 0
  br i1 %.not546, label %235, label %232

.thread583:                                       ; preds = %228
  store i8 82, ptr %27, align 1, !tbaa !14
  call void @ztgevc_(ptr noundef nonnull %27, ptr noundef nonnull @.str.7, 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 %150, ptr noundef nonnull %22) #6
  %231 = load i32, ptr %22, align 4, !tbaa !5
  %.not546584 = icmp eq i32 %231, 0
  br i1 %.not546584, label %.thread585, label %232

232:                                              ; preds = %.thread583, %229
  %233 = load i32, ptr %2, align 4, !tbaa !5
  %234 = add nsw i32 %233, 2
  br label %.loopexit603.sink.split

235:                                              ; preds = %229
  call void @zggbak_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.2, ptr noundef nonnull %2, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %148, ptr noundef nonnull %2, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %22) #6
  %236 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %236, ptr %18, align 4, !tbaa !5
  %.not547612 = icmp slt i32 %236, 1
  br i1 %.not547612, label %.thread585, label %.lr.ph615.preheader

.lr.ph615.preheader:                              ; preds = %235
  %237 = sext i32 %40 to i64
  br label %.lr.ph615

.lr.ph615thread-pre-split:                        ; preds = %.loopexit604
  %indvars.iv.next637 = add nuw nsw i64 %indvars.iv636, 1
  %.pr = load i32, ptr %2, align 4, !tbaa !5
  br label %.lr.ph615

.lr.ph615:                                        ; preds = %.lr.ph615thread-pre-split, %.lr.ph615.preheader
  %238 = phi i32 [ %.pr, %.lr.ph615thread-pre-split ], [ %236, %.lr.ph615.preheader ]
  %indvars.iv636 = phi i64 [ %indvars.iv.next637, %.lr.ph615thread-pre-split ], [ 1, %.lr.ph615.preheader ]
  store i32 %238, ptr %19, align 4, !tbaa !5
  %.not551605 = icmp slt i32 %238, 1
  br i1 %.not551605, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph615
  %239 = mul nsw i64 %indvars.iv636, %237
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %42, i64 %239
  br label %240

240:                                              ; preds = %.lr.ph, %240
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %240 ]
  %.0512606 = phi double [ 0.000000e+00, %.lr.ph ], [ %252, %240 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %indvars.iv
  %241 = load double, ptr %gep, align 8, !tbaa !9
  %242 = call { double, double } @Cd(ptr noundef nonnull %gep)
  %243 = extractvalue { double, double } %242, 1
  %244 = insertelement <2 x double> poison, double %241, i64 0
  %245 = insertelement <2 x double> %244, double %243, i64 1
  %246 = fcmp oge <2 x double> %245, zeroinitializer
  %247 = fneg <2 x double> %245
  %248 = select <2 x i1> %246, <2 x double> %245, <2 x double> %247
  %shift = shufflevector <2 x double> %248, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %249 = fadd <2 x double> %248, %shift
  %250 = extractelement <2 x double> %249, i64 0
  %251 = fcmp oge double %.0512606, %250
  %252 = select i1 %251, double %.0512606, double %250
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %253 = load i32, ptr %19, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %.not551.not = icmp slt i64 %indvars.iv, %254
  br i1 %.not551.not, label %240, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %240, %.lr.ph615
  %.0512.lcssa = phi double [ 0.000000e+00, %.lr.ph615 ], [ %252, %240 ]
  %255 = load double, ptr %31, align 8, !tbaa !13
  %256 = fcmp olt double %.0512.lcssa, %255
  br i1 %256, label %.loopexit604, label %257

257:                                              ; preds = %._crit_edge
  %258 = fdiv double 1.000000e+00, %.0512.lcssa
  %259 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %259, ptr %19, align 4, !tbaa !5
  %.not552608 = icmp slt i32 %259, 1
  br i1 %.not552608, label %.loopexit604, label %.lr.ph611

.lr.ph611:                                        ; preds = %257
  %260 = mul nsw i64 %indvars.iv636, %237
  %261 = add nuw i32 %259, 1
  %wide.trip.count = zext i32 %261 to i64
  %invariant.gep662 = getelementptr %struct.doublecomplex, ptr %42, i64 %260
  %262 = zext nneg i32 %259 to i64
  %min.iters.check = icmp eq i32 %259, 1
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph611
  %n.vec = and i64 %262, 2147483646
  %ind.end = or i64 %262, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %258, i64 0
  %263 = 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
  %264 = getelementptr %struct.doublecomplex, ptr %invariant.gep662, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %264, align 8, !tbaa !13
  %interleaved.vec = fmul <4 x double> %263, %wide.vec
  store <4 x double> %interleaved.vec, ptr %264, align 8, !tbaa !13
  %index.next = add nuw i64 %index, 2
  %265 = icmp eq i64 %index.next, %n.vec
  br i1 %265, label %middle.block, label %vector.body, !llvm.loop !17

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph611
  %indvars.iv633.ph = phi i64 [ 1, %.lr.ph611 ], [ %ind.end, %middle.block ]
  %266 = insertelement <2 x double> poison, double %258, i64 0
  %267 = shufflevector <2 x double> %266, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv633 = phi i64 [ %indvars.iv.next634, %scalar.ph ], [ %indvars.iv633.ph, %scalar.ph.preheader ]
  %gep663 = getelementptr %struct.doublecomplex, ptr %invariant.gep662, i64 %indvars.iv633
  %268 = load <2 x double>, ptr %gep663, align 8, !tbaa !13
  %269 = fmul <2 x double> %267, %268
  store <2 x double> %269, ptr %gep663, align 8, !tbaa !13
  %indvars.iv.next634 = add nuw nsw i64 %indvars.iv633, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next634, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit604, label %scalar.ph, !llvm.loop !20

.loopexit604:                                     ; preds = %scalar.ph, %middle.block, %257, %._crit_edge
  %270 = load i32, ptr %18, align 4, !tbaa !5
  %271 = sext i32 %270 to i64
  %.not547.not = icmp slt i64 %indvars.iv636, %271
  br i1 %.not547.not, label %.lr.ph615thread-pre-split, label %.thread585, !llvm.loop !21

.thread585:                                       ; preds = %.loopexit604, %235, %.thread583
  br i1 %.not530653, label %272, label %.loopexit603

272:                                              ; preds = %.thread585
  call void @zggbak_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %148, ptr noundef nonnull %2, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %22) #6
  %273 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %273, ptr %18, align 4, !tbaa !5
  %.not548627 = icmp slt i32 %273, 1
  br i1 %.not548627, label %.loopexit603, label %.lr.ph630.preheader

.lr.ph630.preheader:                              ; preds = %272
  %274 = sext i32 %43 to i64
  br label %.lr.ph630

.lr.ph630thread-pre-split:                        ; preds = %.loopexit
  %indvars.iv.next648 = add nuw nsw i64 %indvars.iv647, 1
  %.pr657 = load i32, ptr %2, align 4, !tbaa !5
  br label %.lr.ph630

.lr.ph630:                                        ; preds = %.lr.ph630thread-pre-split, %.lr.ph630.preheader
  %275 = phi i32 [ %.pr657, %.lr.ph630thread-pre-split ], [ %273, %.lr.ph630.preheader ]
  %indvars.iv647 = phi i64 [ %indvars.iv.next648, %.lr.ph630thread-pre-split ], [ 1, %.lr.ph630.preheader ]
  store i32 %275, ptr %19, align 4, !tbaa !5
  %.not549616 = icmp slt i32 %275, 1
  br i1 %.not549616, label %._crit_edge621, label %.lr.ph620

.lr.ph620:                                        ; preds = %.lr.ph630
  %276 = mul nsw i64 %indvars.iv647, %274
  %invariant.gep664 = getelementptr %struct.doublecomplex, ptr %45, i64 %276
  br label %277

277:                                              ; preds = %.lr.ph620, %277
  %indvars.iv639 = phi i64 [ 1, %.lr.ph620 ], [ %indvars.iv.next640, %277 ]
  %.1513617 = phi double [ 0.000000e+00, %.lr.ph620 ], [ %289, %277 ]
  %gep665 = getelementptr %struct.doublecomplex, ptr %invariant.gep664, i64 %indvars.iv639
  %278 = load double, ptr %gep665, align 8, !tbaa !9
  %279 = call { double, double } @Cd(ptr noundef nonnull %gep665)
  %280 = extractvalue { double, double } %279, 1
  %281 = insertelement <2 x double> poison, double %278, i64 0
  %282 = insertelement <2 x double> %281, double %280, i64 1
  %283 = fcmp oge <2 x double> %282, zeroinitializer
  %284 = fneg <2 x double> %282
  %285 = select <2 x i1> %283, <2 x double> %282, <2 x double> %284
  %shift695 = shufflevector <2 x double> %285, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %286 = fadd <2 x double> %285, %shift695
  %287 = extractelement <2 x double> %286, i64 0
  %288 = fcmp oge double %.1513617, %287
  %289 = select i1 %288, double %.1513617, double %287
  %indvars.iv.next640 = add nuw nsw i64 %indvars.iv639, 1
  %290 = load i32, ptr %19, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %.not549.not = icmp slt i64 %indvars.iv639, %291
  br i1 %.not549.not, label %277, label %._crit_edge621, !llvm.loop !22

._crit_edge621:                                   ; preds = %277, %.lr.ph630
  %.1513.lcssa = phi double [ 0.000000e+00, %.lr.ph630 ], [ %289, %277 ]
  %292 = load double, ptr %31, align 8, !tbaa !13
  %293 = fcmp olt double %.1513.lcssa, %292
  br i1 %293, label %.loopexit, label %294

294:                                              ; preds = %._crit_edge621
  %295 = fdiv double 1.000000e+00, %.1513.lcssa
  %296 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %296, ptr %19, align 4, !tbaa !5
  %.not550623 = icmp slt i32 %296, 1
  br i1 %.not550623, label %.loopexit, label %.lr.ph626

.lr.ph626:                                        ; preds = %294
  %297 = mul nsw i64 %indvars.iv647, %274
  %298 = add nuw i32 %296, 1
  %wide.trip.count645 = zext i32 %298 to i64
  %invariant.gep666 = getelementptr %struct.doublecomplex, ptr %45, i64 %297
  %299 = zext nneg i32 %296 to i64
  %min.iters.check678 = icmp eq i32 %296, 1
  br i1 %min.iters.check678, label %scalar.ph677.preheader, label %vector.ph679

vector.ph679:                                     ; preds = %.lr.ph626
  %n.vec681 = and i64 %299, 2147483646
  %ind.end682 = or i64 %299, 1
  %broadcast.splatinsert690 = insertelement <2 x double> poison, double %295, i64 0
  %300 = shufflevector <2 x double> %broadcast.splatinsert690, <2 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body684

vector.body684:                                   ; preds = %vector.body684, %vector.ph679
  %index685 = phi i64 [ 0, %vector.ph679 ], [ %index.next693, %vector.body684 ]
  %offset.idx686 = or disjoint i64 %index685, 1
  %301 = getelementptr %struct.doublecomplex, ptr %invariant.gep666, i64 %offset.idx686
  %wide.vec687 = load <4 x double>, ptr %301, align 8, !tbaa !13
  %interleaved.vec692 = fmul <4 x double> %300, %wide.vec687
  store <4 x double> %interleaved.vec692, ptr %301, align 8, !tbaa !13
  %index.next693 = add nuw i64 %index685, 2
  %302 = icmp eq i64 %index.next693, %n.vec681
  br i1 %302, label %middle.block676, label %vector.body684, !llvm.loop !23

middle.block676:                                  ; preds = %vector.body684
  %cmp.n694 = icmp eq i64 %n.vec681, %299
  br i1 %cmp.n694, label %.loopexit, label %scalar.ph677.preheader

scalar.ph677.preheader:                           ; preds = %middle.block676, %.lr.ph626
  %indvars.iv642.ph = phi i64 [ 1, %.lr.ph626 ], [ %ind.end682, %middle.block676 ]
  %303 = insertelement <2 x double> poison, double %295, i64 0
  %304 = shufflevector <2 x double> %303, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph677

scalar.ph677:                                     ; preds = %scalar.ph677.preheader, %scalar.ph677
  %indvars.iv642 = phi i64 [ %indvars.iv.next643, %scalar.ph677 ], [ %indvars.iv642.ph, %scalar.ph677.preheader ]
  %gep667 = getelementptr %struct.doublecomplex, ptr %invariant.gep666, i64 %indvars.iv642
  %305 = load <2 x double>, ptr %gep667, align 8, !tbaa !13
  %306 = fmul <2 x double> %304, %305
  store <2 x double> %306, ptr %gep667, align 8, !tbaa !13
  %indvars.iv.next643 = add nuw nsw i64 %indvars.iv642, 1
  %exitcond646.not = icmp eq i64 %indvars.iv.next643, %wide.trip.count645
  br i1 %exitcond646.not, label %.loopexit, label %scalar.ph677, !llvm.loop !24

.loopexit:                                        ; preds = %scalar.ph677, %middle.block676, %294, %._crit_edge621
  %307 = load i32, ptr %18, align 4, !tbaa !5
  %308 = sext i32 %307 to i64
  %.not548.not = icmp slt i64 %indvars.iv647, %308
  br i1 %.not548.not, label %.lr.ph630thread-pre-split, label %.loopexit603, !llvm.loop !25

.loopexit603.sink.split:                          ; preds = %218, %232, %223, %225
  %.sink673 = phi i32 [ %226, %225 ], [ %224, %223 ], [ %234, %232 ], [ %217, %218 ]
  store i32 %.sink673, ptr %16, align 4, !tbaa !5
  br label %.loopexit603

.loopexit603:                                     ; preds = %.loopexit, %.loopexit603.sink.split, %272, %227, %.thread585
  br i1 %.not539577, label %310, label %309

309:                                              ; preds = %.loopexit603
  call void @zlascl_(ptr noundef nonnull @.str.9, 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 %310

310:                                              ; preds = %309, %.loopexit603
  br i1 %.not541582, label %312, label %311

311:                                              ; preds = %310
  call void @zlascl_(ptr noundef nonnull @.str.9, 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 %312

312:                                              ; preds = %311, %310
  %313 = uitofp nneg i32 %108 to double
  store double %313, ptr %13, align 8, !tbaa !9
  store double 0.000000e+00, ptr %110, align 8, !tbaa !12
  br label %314

314:                                              ; preds = %114, %312, %.thread570
  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 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 @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 @zgghd3_(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 @zhgeqz_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @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 @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 @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,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass