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

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

%struct.doublecomplex = type { double, double }

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

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

130:                                              ; preds = %17
  store i64 1, ptr %77, align 8, !tbaa !9
  store i64 0, ptr %65, align 8, !tbaa !9
  br label %138

131:                                              ; preds = %17
  %132 = load ptr, ptr %19, align 8, !tbaa !5
  %133 = call i64 @lsame_(ptr noundef %132, ptr noundef @.str.1)
  %134 = icmp ne i64 %133, 0
  br i1 %134, label %135, label %136

135:                                              ; preds = %131
  store i64 2, ptr %77, align 8, !tbaa !9
  store i64 1, ptr %65, align 8, !tbaa !9
  br label %137

136:                                              ; preds = %131
  store i64 -1, ptr %77, align 8, !tbaa !9
  store i64 0, ptr %65, align 8, !tbaa !9
  br label %137

137:                                              ; preds = %136, %135
  br label %138

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

142:                                              ; preds = %138
  store i64 1, ptr %79, align 8, !tbaa !9
  store i64 0, ptr %66, align 8, !tbaa !9
  br label %150

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

147:                                              ; preds = %143
  store i64 2, ptr %79, align 8, !tbaa !9
  store i64 1, ptr %66, align 8, !tbaa !9
  br label %149

148:                                              ; preds = %143
  store i64 -1, ptr %79, align 8, !tbaa !9
  store i64 0, ptr %66, align 8, !tbaa !9
  br label %149

149:                                              ; preds = %148, %147
  br label %150

150:                                              ; preds = %149, %142
  %151 = load i64, ptr %65, align 8, !tbaa !9
  %152 = icmp ne i64 %151, 0
  br i1 %152, label %156, label %153

153:                                              ; preds = %150
  %154 = load i64, ptr %66, align 8, !tbaa !9
  %155 = icmp ne i64 %154, 0
  br label %156

156:                                              ; preds = %153, %150
  %157 = phi i1 [ true, %150 ], [ %155, %153 ]
  %158 = zext i1 %157 to i32
  %159 = sext i32 %158 to i64
  store i64 %159, ptr %59, align 8, !tbaa !9
  %160 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 0, ptr %160, align 8, !tbaa !9
  %161 = load ptr, ptr %33, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = icmp eq i64 %162, -1
  %164 = zext i1 %163 to i32
  %165 = sext i32 %164 to i64
  store i64 %165, ptr %85, align 8, !tbaa !9
  %166 = load i64, ptr %77, align 8, !tbaa !9
  %167 = icmp sle i64 %166, 0
  br i1 %167, label %168, label %170

168:                                              ; preds = %156
  %169 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -1, ptr %169, align 8, !tbaa !9
  br label %247

170:                                              ; preds = %156
  %171 = load i64, ptr %79, align 8, !tbaa !9
  %172 = icmp sle i64 %171, 0
  br i1 %172, label %173, label %175

173:                                              ; preds = %170
  %174 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -2, ptr %174, align 8, !tbaa !9
  br label %246

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

179:                                              ; preds = %175
  %180 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -3, ptr %180, align 8, !tbaa !9
  br label %245

181:                                              ; preds = %175
  %182 = load ptr, ptr %23, align 8, !tbaa !5
  %183 = load i64, ptr %182, align 8, !tbaa !9
  %184 = load ptr, ptr %21, align 8, !tbaa !5
  %185 = load i64, ptr %184, align 8, !tbaa !9
  %186 = icmp sge i64 1, %185
  br i1 %186, label %187, label %188

187:                                              ; preds = %181
  br label %191

188:                                              ; preds = %181
  %189 = load ptr, ptr %21, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  br label %191

191:                                              ; preds = %188, %187
  %192 = phi i64 [ 1, %187 ], [ %190, %188 ]
  %193 = icmp slt i64 %183, %192
  br i1 %193, label %194, label %196

194:                                              ; preds = %191
  %195 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -5, ptr %195, align 8, !tbaa !9
  br label %244

196:                                              ; preds = %191
  %197 = load ptr, ptr %25, align 8, !tbaa !5
  %198 = load i64, ptr %197, align 8, !tbaa !9
  %199 = load ptr, ptr %21, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = icmp sge i64 1, %200
  br i1 %201, label %202, label %203

202:                                              ; preds = %196
  br label %206

203:                                              ; preds = %196
  %204 = load ptr, ptr %21, align 8, !tbaa !5
  %205 = load i64, ptr %204, align 8, !tbaa !9
  br label %206

206:                                              ; preds = %203, %202
  %207 = phi i64 [ 1, %202 ], [ %205, %203 ]
  %208 = icmp slt i64 %198, %207
  br i1 %208, label %209, label %211

209:                                              ; preds = %206
  %210 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -7, ptr %210, align 8, !tbaa !9
  br label %243

211:                                              ; preds = %206
  %212 = load ptr, ptr %29, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = icmp slt i64 %213, 1
  br i1 %214, label %224, label %215

215:                                              ; preds = %211
  %216 = load i64, ptr %65, align 8, !tbaa !9
  %217 = icmp ne i64 %216, 0
  br i1 %217, label %218, label %226

218:                                              ; preds = %215
  %219 = load ptr, ptr %29, align 8, !tbaa !5
  %220 = load i64, ptr %219, align 8, !tbaa !9
  %221 = load ptr, ptr %21, align 8, !tbaa !5
  %222 = load i64, ptr %221, align 8, !tbaa !9
  %223 = icmp slt i64 %220, %222
  br i1 %223, label %224, label %226

224:                                              ; preds = %218, %211
  %225 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -11, ptr %225, align 8, !tbaa !9
  br label %242

226:                                              ; preds = %218, %215
  %227 = load ptr, ptr %31, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  %229 = icmp slt i64 %228, 1
  br i1 %229, label %239, label %230

230:                                              ; preds = %226
  %231 = load i64, ptr %66, align 8, !tbaa !9
  %232 = icmp ne i64 %231, 0
  br i1 %232, label %233, label %241

233:                                              ; preds = %230
  %234 = load ptr, ptr %31, align 8, !tbaa !5
  %235 = load i64, ptr %234, align 8, !tbaa !9
  %236 = load ptr, ptr %21, align 8, !tbaa !5
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = icmp slt i64 %235, %237
  br i1 %238, label %239, label %241

239:                                              ; preds = %233, %226
  %240 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -13, ptr %240, align 8, !tbaa !9
  br label %241

241:                                              ; preds = %239, %233, %230
  br label %242

242:                                              ; preds = %241, %224
  br label %243

243:                                              ; preds = %242, %209
  br label %244

244:                                              ; preds = %243, %194
  br label %245

245:                                              ; preds = %244, %179
  br label %246

246:                                              ; preds = %245, %173
  br label %247

247:                                              ; preds = %246, %168
  %248 = load ptr, ptr %35, align 8, !tbaa !5
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = icmp eq i64 %249, 0
  br i1 %250, label %251, label %342

251:                                              ; preds = %247
  store i64 1, ptr %44, align 8, !tbaa !9
  %252 = load ptr, ptr %21, align 8, !tbaa !5
  %253 = load i64, ptr %252, align 8, !tbaa !9
  %254 = shl i64 %253, 1
  store i64 %254, ptr %45, align 8, !tbaa !9
  %255 = load i64, ptr %44, align 8, !tbaa !9
  %256 = load i64, ptr %45, align 8, !tbaa !9
  %257 = icmp sge i64 %255, %256
  br i1 %257, label %258, label %260

258:                                              ; preds = %251
  %259 = load i64, ptr %44, align 8, !tbaa !9
  br label %262

260:                                              ; preds = %251
  %261 = load i64, ptr %45, align 8, !tbaa !9
  br label %262

262:                                              ; preds = %260, %258
  %263 = phi i64 [ %259, %258 ], [ %261, %260 ]
  store i64 %263, ptr %81, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  %264 = load ptr, ptr %21, align 8, !tbaa !5
  %265 = load i64, ptr %264, align 8, !tbaa !9
  %266 = load ptr, ptr %21, align 8, !tbaa !5
  %267 = load i64, ptr %266, align 8, !tbaa !9
  %268 = load ptr, ptr %21, align 8, !tbaa !5
  %269 = load ptr, ptr %21, align 8, !tbaa !5
  %270 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %268, ptr noundef @c__1, ptr noundef %269, ptr noundef @c__0)
  %271 = mul nsw i64 %267, %270
  %272 = add nsw i64 %265, %271
  store i64 %272, ptr %45, align 8, !tbaa !9
  %273 = load i64, ptr %44, align 8, !tbaa !9
  %274 = load i64, ptr %45, align 8, !tbaa !9
  %275 = icmp sge i64 %273, %274
  br i1 %275, label %276, label %278

276:                                              ; preds = %262
  %277 = load i64, ptr %44, align 8, !tbaa !9
  br label %280

278:                                              ; preds = %262
  %279 = load i64, ptr %45, align 8, !tbaa !9
  br label %280

280:                                              ; preds = %278, %276
  %281 = phi i64 [ %277, %276 ], [ %279, %278 ]
  store i64 %281, ptr %84, align 8, !tbaa !9
  %282 = load i64, ptr %84, align 8, !tbaa !9
  store i64 %282, ptr %44, align 8, !tbaa !9
  %283 = load ptr, ptr %21, align 8, !tbaa !5
  %284 = load i64, ptr %283, align 8, !tbaa !9
  %285 = load ptr, ptr %21, align 8, !tbaa !5
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = load ptr, ptr %21, align 8, !tbaa !5
  %288 = load ptr, ptr %21, align 8, !tbaa !5
  %289 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %287, ptr noundef @c__1, ptr noundef %288, ptr noundef @c__0)
  %290 = mul nsw i64 %286, %289
  %291 = add nsw i64 %284, %290
  store i64 %291, ptr %45, align 8, !tbaa !9
  %292 = load i64, ptr %44, align 8, !tbaa !9
  %293 = load i64, ptr %45, align 8, !tbaa !9
  %294 = icmp sge i64 %292, %293
  br i1 %294, label %295, label %297

295:                                              ; preds = %280
  %296 = load i64, ptr %44, align 8, !tbaa !9
  br label %299

297:                                              ; preds = %280
  %298 = load i64, ptr %45, align 8, !tbaa !9
  br label %299

299:                                              ; preds = %297, %295
  %300 = phi i64 [ %296, %295 ], [ %298, %297 ]
  store i64 %300, ptr %84, align 8, !tbaa !9
  %301 = load i64, ptr %65, align 8, !tbaa !9
  %302 = icmp ne i64 %301, 0
  br i1 %302, label %303, label %323

303:                                              ; preds = %299
  %304 = load i64, ptr %84, align 8, !tbaa !9
  store i64 %304, ptr %44, align 8, !tbaa !9
  %305 = load ptr, ptr %21, align 8, !tbaa !5
  %306 = load i64, ptr %305, align 8, !tbaa !9
  %307 = load ptr, ptr %21, align 8, !tbaa !5
  %308 = load i64, ptr %307, align 8, !tbaa !9
  %309 = load ptr, ptr %21, align 8, !tbaa !5
  %310 = load ptr, ptr %21, align 8, !tbaa !5
  %311 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.3, ptr noundef %309, ptr noundef @c__1, ptr noundef %310, ptr noundef @c_n1)
  %312 = mul nsw i64 %308, %311
  %313 = add nsw i64 %306, %312
  store i64 %313, ptr %45, align 8, !tbaa !9
  %314 = load i64, ptr %44, align 8, !tbaa !9
  %315 = load i64, ptr %45, align 8, !tbaa !9
  %316 = icmp sge i64 %314, %315
  br i1 %316, label %317, label %319

317:                                              ; preds = %303
  %318 = load i64, ptr %44, align 8, !tbaa !9
  br label %321

319:                                              ; preds = %303
  %320 = load i64, ptr %45, align 8, !tbaa !9
  br label %321

321:                                              ; preds = %319, %317
  %322 = phi i64 [ %318, %317 ], [ %320, %319 ]
  store i64 %322, ptr %84, align 8, !tbaa !9
  br label %323

323:                                              ; preds = %321, %299
  %324 = load i64, ptr %84, align 8, !tbaa !9
  %325 = sitofp i64 %324 to double
  %326 = load ptr, ptr %32, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.doublecomplex, ptr %326, i64 1
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %327, i32 0, i32 0
  store double %325, ptr %328, align 8, !tbaa !11
  %329 = load ptr, ptr %32, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.doublecomplex, ptr %329, i64 1
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %330, i32 0, i32 1
  store double 0.000000e+00, ptr %331, align 8, !tbaa !14
  %332 = load ptr, ptr %33, align 8, !tbaa !5
  %333 = load i64, ptr %332, align 8, !tbaa !9
  %334 = load i64, ptr %81, align 8, !tbaa !9
  %335 = icmp slt i64 %333, %334
  br i1 %335, label %336, label %341

336:                                              ; preds = %323
  %337 = load i64, ptr %85, align 8, !tbaa !9
  %338 = icmp ne i64 %337, 0
  br i1 %338, label %341, label %339

339:                                              ; preds = %336
  %340 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 -15, ptr %340, align 8, !tbaa !9
  br label %341

341:                                              ; preds = %339, %336, %323
  br label %342

342:                                              ; preds = %341, %247
  %343 = load ptr, ptr %35, align 8, !tbaa !5
  %344 = load i64, ptr %343, align 8, !tbaa !9
  %345 = icmp ne i64 %344, 0
  br i1 %345, label %346, label %351

346:                                              ; preds = %342
  %347 = load ptr, ptr %35, align 8, !tbaa !5
  %348 = load i64, ptr %347, align 8, !tbaa !9
  %349 = sub nsw i64 0, %348
  store i64 %349, ptr %44, align 8, !tbaa !9
  %350 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %44)
  store i32 0, ptr %18, align 4
  store i32 1, ptr %86, align 4
  br label %1105

351:                                              ; preds = %342
  %352 = load i64, ptr %85, align 8, !tbaa !9
  %353 = icmp ne i64 %352, 0
  br i1 %353, label %354, label %355

354:                                              ; preds = %351
  store i32 0, ptr %18, align 4
  store i32 1, ptr %86, align 4
  br label %1105

355:                                              ; preds = %351
  br label %356

356:                                              ; preds = %355
  %357 = load ptr, ptr %21, align 8, !tbaa !5
  %358 = load i64, ptr %357, align 8, !tbaa !9
  %359 = icmp eq i64 %358, 0
  br i1 %359, label %360, label %361

360:                                              ; preds = %356
  store i32 0, ptr %18, align 4
  store i32 1, ptr %86, align 4
  br label %1105

361:                                              ; preds = %356
  %362 = call double @dlamch_(ptr noundef @.str.7)
  %363 = call double @dlamch_(ptr noundef @.str.8)
  %364 = fmul double %362, %363
  store double %364, ptr %58, align 8, !tbaa !15
  %365 = call double @dlamch_(ptr noundef @.str.9)
  store double %365, ptr %83, align 8, !tbaa !15
  %366 = load double, ptr %83, align 8, !tbaa !15
  %367 = fdiv double 1.000000e+00, %366
  store double %367, ptr %76, align 8, !tbaa !15
  %368 = call i32 @dlabad_(ptr noundef %83, ptr noundef %76)
  %369 = load double, ptr %83, align 8, !tbaa !15
  %370 = call double @sqrt(double noundef %369) #4
  %371 = load double, ptr %58, align 8, !tbaa !15
  %372 = fdiv double %370, %371
  store double %372, ptr %83, align 8, !tbaa !15
  %373 = load double, ptr %83, align 8, !tbaa !15
  %374 = fdiv double 1.000000e+00, %373
  store double %374, ptr %76, align 8, !tbaa !15
  %375 = load ptr, ptr %21, align 8, !tbaa !5
  %376 = load ptr, ptr %21, align 8, !tbaa !5
  %377 = load ptr, ptr %22, align 8, !tbaa !5
  %378 = load i64, ptr %37, align 8, !tbaa !9
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %377, i64 %378
  %380 = load ptr, ptr %23, align 8, !tbaa !5
  %381 = load ptr, ptr %34, align 8, !tbaa !5
  %382 = getelementptr inbounds double, ptr %381, i64 1
  %383 = call double @zlange_(ptr noundef @.str.10, ptr noundef %375, ptr noundef %376, ptr noundef %379, ptr noundef %380, ptr noundef %382)
  store double %383, ptr %60, align 8, !tbaa !15
  store i64 0, ptr %72, align 8, !tbaa !9
  %384 = load double, ptr %60, align 8, !tbaa !15
  %385 = fcmp ogt double %384, 0.000000e+00
  br i1 %385, label %386, label %392

386:                                              ; preds = %361
  %387 = load double, ptr %60, align 8, !tbaa !15
  %388 = load double, ptr %83, align 8, !tbaa !15
  %389 = fcmp olt double %387, %388
  br i1 %389, label %390, label %392

390:                                              ; preds = %386
  %391 = load double, ptr %83, align 8, !tbaa !15
  store double %391, ptr %80, align 8, !tbaa !15
  store i64 1, ptr %72, align 8, !tbaa !9
  br label %399

392:                                              ; preds = %386, %361
  %393 = load double, ptr %60, align 8, !tbaa !15
  %394 = load double, ptr %76, align 8, !tbaa !15
  %395 = fcmp ogt double %393, %394
  br i1 %395, label %396, label %398

396:                                              ; preds = %392
  %397 = load double, ptr %76, align 8, !tbaa !15
  store double %397, ptr %80, align 8, !tbaa !15
  store i64 1, ptr %72, align 8, !tbaa !9
  br label %398

398:                                              ; preds = %396, %392
  br label %399

399:                                              ; preds = %398, %390
  %400 = load i64, ptr %72, align 8, !tbaa !9
  %401 = icmp ne i64 %400, 0
  br i1 %401, label %402, label %410

402:                                              ; preds = %399
  %403 = load ptr, ptr %21, align 8, !tbaa !5
  %404 = load ptr, ptr %21, align 8, !tbaa !5
  %405 = load ptr, ptr %22, align 8, !tbaa !5
  %406 = load i64, ptr %37, align 8, !tbaa !9
  %407 = getelementptr inbounds %struct.doublecomplex, ptr %405, i64 %406
  %408 = load ptr, ptr %23, align 8, !tbaa !5
  %409 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %60, ptr noundef %80, ptr noundef %403, ptr noundef %404, ptr noundef %407, ptr noundef %408, ptr noundef %62)
  br label %410

410:                                              ; preds = %402, %399
  %411 = load ptr, ptr %21, align 8, !tbaa !5
  %412 = load ptr, ptr %21, align 8, !tbaa !5
  %413 = load ptr, ptr %24, align 8, !tbaa !5
  %414 = load i64, ptr %39, align 8, !tbaa !9
  %415 = getelementptr inbounds %struct.doublecomplex, ptr %413, i64 %414
  %416 = load ptr, ptr %25, align 8, !tbaa !5
  %417 = load ptr, ptr %34, align 8, !tbaa !5
  %418 = getelementptr inbounds double, ptr %417, i64 1
  %419 = call double @zlange_(ptr noundef @.str.10, ptr noundef %411, ptr noundef %412, ptr noundef %415, ptr noundef %416, ptr noundef %418)
  store double %419, ptr %61, align 8, !tbaa !15
  store i64 0, ptr %73, align 8, !tbaa !9
  %420 = load double, ptr %61, align 8, !tbaa !15
  %421 = fcmp ogt double %420, 0.000000e+00
  br i1 %421, label %422, label %428

422:                                              ; preds = %410
  %423 = load double, ptr %61, align 8, !tbaa !15
  %424 = load double, ptr %83, align 8, !tbaa !15
  %425 = fcmp olt double %423, %424
  br i1 %425, label %426, label %428

426:                                              ; preds = %422
  %427 = load double, ptr %83, align 8, !tbaa !15
  store double %427, ptr %82, align 8, !tbaa !15
  store i64 1, ptr %73, align 8, !tbaa !9
  br label %435

428:                                              ; preds = %422, %410
  %429 = load double, ptr %61, align 8, !tbaa !15
  %430 = load double, ptr %76, align 8, !tbaa !15
  %431 = fcmp ogt double %429, %430
  br i1 %431, label %432, label %434

432:                                              ; preds = %428
  %433 = load double, ptr %76, align 8, !tbaa !15
  store double %433, ptr %82, align 8, !tbaa !15
  store i64 1, ptr %73, align 8, !tbaa !9
  br label %434

434:                                              ; preds = %432, %428
  br label %435

435:                                              ; preds = %434, %426
  %436 = load i64, ptr %73, align 8, !tbaa !9
  %437 = icmp ne i64 %436, 0
  br i1 %437, label %438, label %446

438:                                              ; preds = %435
  %439 = load ptr, ptr %21, align 8, !tbaa !5
  %440 = load ptr, ptr %21, align 8, !tbaa !5
  %441 = load ptr, ptr %24, align 8, !tbaa !5
  %442 = load i64, ptr %39, align 8, !tbaa !9
  %443 = getelementptr inbounds %struct.doublecomplex, ptr %441, i64 %442
  %444 = load ptr, ptr %25, align 8, !tbaa !5
  %445 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %61, ptr noundef %82, ptr noundef %439, ptr noundef %440, ptr noundef %443, ptr noundef %444, ptr noundef %62)
  br label %446

446:                                              ; preds = %438, %435
  store i64 1, ptr %68, align 8, !tbaa !9
  %447 = load ptr, ptr %21, align 8, !tbaa !5
  %448 = load i64, ptr %447, align 8, !tbaa !9
  %449 = add nsw i64 %448, 1
  store i64 %449, ptr %78, align 8, !tbaa !9
  %450 = load i64, ptr %78, align 8, !tbaa !9
  %451 = load ptr, ptr %21, align 8, !tbaa !5
  %452 = load i64, ptr %451, align 8, !tbaa !9
  %453 = add nsw i64 %450, %452
  store i64 %453, ptr %70, align 8, !tbaa !9
  %454 = load ptr, ptr %21, align 8, !tbaa !5
  %455 = load ptr, ptr %22, align 8, !tbaa !5
  %456 = load i64, ptr %37, align 8, !tbaa !9
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %455, i64 %456
  %458 = load ptr, ptr %23, align 8, !tbaa !5
  %459 = load ptr, ptr %24, align 8, !tbaa !5
  %460 = load i64, ptr %39, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct.doublecomplex, ptr %459, i64 %460
  %462 = load ptr, ptr %25, align 8, !tbaa !5
  %463 = load ptr, ptr %34, align 8, !tbaa !5
  %464 = load i64, ptr %68, align 8, !tbaa !9
  %465 = getelementptr inbounds double, ptr %463, i64 %464
  %466 = load ptr, ptr %34, align 8, !tbaa !5
  %467 = load i64, ptr %78, align 8, !tbaa !9
  %468 = getelementptr inbounds double, ptr %466, i64 %467
  %469 = load ptr, ptr %34, align 8, !tbaa !5
  %470 = load i64, ptr %70, align 8, !tbaa !9
  %471 = getelementptr inbounds double, ptr %469, i64 %470
  %472 = call i32 @zggbal_(ptr noundef @.str.12, ptr noundef %454, ptr noundef %457, ptr noundef %458, ptr noundef %461, ptr noundef %462, ptr noundef %57, ptr noundef %56, ptr noundef %465, ptr noundef %468, ptr noundef %471, ptr noundef %62)
  %473 = load i64, ptr %56, align 8, !tbaa !9
  %474 = add nsw i64 %473, 1
  %475 = load i64, ptr %57, align 8, !tbaa !9
  %476 = sub nsw i64 %474, %475
  store i64 %476, ptr %71, align 8, !tbaa !9
  %477 = load i64, ptr %59, align 8, !tbaa !9
  %478 = icmp ne i64 %477, 0
  br i1 %478, label %479, label %485

479:                                              ; preds = %446
  %480 = load ptr, ptr %21, align 8, !tbaa !5
  %481 = load i64, ptr %480, align 8, !tbaa !9
  %482 = add nsw i64 %481, 1
  %483 = load i64, ptr %57, align 8, !tbaa !9
  %484 = sub nsw i64 %482, %483
  store i64 %484, ptr %69, align 8, !tbaa !9
  br label %487

485:                                              ; preds = %446
  %486 = load i64, ptr %71, align 8, !tbaa !9
  store i64 %486, ptr %69, align 8, !tbaa !9
  br label %487

487:                                              ; preds = %485, %479
  store i64 1, ptr %63, align 8, !tbaa !9
  %488 = load i64, ptr %63, align 8, !tbaa !9
  %489 = load i64, ptr %71, align 8, !tbaa !9
  %490 = add nsw i64 %488, %489
  store i64 %490, ptr %67, align 8, !tbaa !9
  %491 = load ptr, ptr %33, align 8, !tbaa !5
  %492 = load i64, ptr %491, align 8, !tbaa !9
  %493 = add nsw i64 %492, 1
  %494 = load i64, ptr %67, align 8, !tbaa !9
  %495 = sub nsw i64 %493, %494
  store i64 %495, ptr %44, align 8, !tbaa !9
  %496 = load ptr, ptr %24, align 8, !tbaa !5
  %497 = load i64, ptr %57, align 8, !tbaa !9
  %498 = load i64, ptr %57, align 8, !tbaa !9
  %499 = load i64, ptr %38, align 8, !tbaa !9
  %500 = mul nsw i64 %498, %499
  %501 = add nsw i64 %497, %500
  %502 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 %501
  %503 = load ptr, ptr %25, align 8, !tbaa !5
  %504 = load ptr, ptr %32, align 8, !tbaa !5
  %505 = load i64, ptr %63, align 8, !tbaa !9
  %506 = getelementptr inbounds %struct.doublecomplex, ptr %504, i64 %505
  %507 = load ptr, ptr %32, align 8, !tbaa !5
  %508 = load i64, ptr %67, align 8, !tbaa !9
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %507, i64 %508
  %510 = call i32 @zgeqrf_(ptr noundef %71, ptr noundef %69, ptr noundef %502, ptr noundef %503, ptr noundef %506, ptr noundef %509, ptr noundef %44, ptr noundef %62)
  %511 = load ptr, ptr %33, align 8, !tbaa !5
  %512 = load i64, ptr %511, align 8, !tbaa !9
  %513 = add nsw i64 %512, 1
  %514 = load i64, ptr %67, align 8, !tbaa !9
  %515 = sub nsw i64 %513, %514
  store i64 %515, ptr %44, align 8, !tbaa !9
  %516 = load ptr, ptr %24, align 8, !tbaa !5
  %517 = load i64, ptr %57, align 8, !tbaa !9
  %518 = load i64, ptr %57, align 8, !tbaa !9
  %519 = load i64, ptr %38, align 8, !tbaa !9
  %520 = mul nsw i64 %518, %519
  %521 = add nsw i64 %517, %520
  %522 = getelementptr inbounds %struct.doublecomplex, ptr %516, i64 %521
  %523 = load ptr, ptr %25, align 8, !tbaa !5
  %524 = load ptr, ptr %32, align 8, !tbaa !5
  %525 = load i64, ptr %63, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 %525
  %527 = load ptr, ptr %22, align 8, !tbaa !5
  %528 = load i64, ptr %57, align 8, !tbaa !9
  %529 = load i64, ptr %57, align 8, !tbaa !9
  %530 = load i64, ptr %36, align 8, !tbaa !9
  %531 = mul nsw i64 %529, %530
  %532 = add nsw i64 %528, %531
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %527, i64 %532
  %534 = load ptr, ptr %23, align 8, !tbaa !5
  %535 = load ptr, ptr %32, align 8, !tbaa !5
  %536 = load i64, ptr %67, align 8, !tbaa !9
  %537 = getelementptr inbounds %struct.doublecomplex, ptr %535, i64 %536
  %538 = call i32 @zunmqr_(ptr noundef @.str.13, ptr noundef @.str.14, ptr noundef %71, ptr noundef %69, ptr noundef %71, ptr noundef %522, ptr noundef %523, ptr noundef %526, ptr noundef %533, ptr noundef %534, ptr noundef %537, ptr noundef %44, ptr noundef %62)
  %539 = load i64, ptr %65, align 8, !tbaa !9
  %540 = icmp ne i64 %539, 0
  br i1 %540, label %541, label %596

541:                                              ; preds = %487
  %542 = load ptr, ptr %21, align 8, !tbaa !5
  %543 = load ptr, ptr %21, align 8, !tbaa !5
  %544 = load ptr, ptr %28, align 8, !tbaa !5
  %545 = load i64, ptr %41, align 8, !tbaa !9
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %544, i64 %545
  %547 = load ptr, ptr %29, align 8, !tbaa !5
  %548 = call i32 @zlaset_(ptr noundef @.str.15, ptr noundef %542, ptr noundef %543, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %546, ptr noundef %547)
  %549 = load i64, ptr %71, align 8, !tbaa !9
  %550 = icmp sgt i64 %549, 1
  br i1 %550, label %551, label %575

551:                                              ; preds = %541
  %552 = load i64, ptr %71, align 8, !tbaa !9
  %553 = sub nsw i64 %552, 1
  store i64 %553, ptr %44, align 8, !tbaa !9
  %554 = load i64, ptr %71, align 8, !tbaa !9
  %555 = sub nsw i64 %554, 1
  store i64 %555, ptr %45, align 8, !tbaa !9
  %556 = load ptr, ptr %24, align 8, !tbaa !5
  %557 = load i64, ptr %57, align 8, !tbaa !9
  %558 = add nsw i64 %557, 1
  %559 = load i64, ptr %57, align 8, !tbaa !9
  %560 = load i64, ptr %38, align 8, !tbaa !9
  %561 = mul nsw i64 %559, %560
  %562 = add nsw i64 %558, %561
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %556, i64 %562
  %564 = load ptr, ptr %25, align 8, !tbaa !5
  %565 = load ptr, ptr %28, align 8, !tbaa !5
  %566 = load i64, ptr %57, align 8, !tbaa !9
  %567 = add nsw i64 %566, 1
  %568 = load i64, ptr %57, align 8, !tbaa !9
  %569 = load i64, ptr %40, align 8, !tbaa !9
  %570 = mul nsw i64 %568, %569
  %571 = add nsw i64 %567, %570
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %565, i64 %571
  %573 = load ptr, ptr %29, align 8, !tbaa !5
  %574 = call i32 @zlacpy_(ptr noundef @.str.13, ptr noundef %44, ptr noundef %45, ptr noundef %563, ptr noundef %564, ptr noundef %572, ptr noundef %573)
  br label %575

575:                                              ; preds = %551, %541
  %576 = load ptr, ptr %33, align 8, !tbaa !5
  %577 = load i64, ptr %576, align 8, !tbaa !9
  %578 = add nsw i64 %577, 1
  %579 = load i64, ptr %67, align 8, !tbaa !9
  %580 = sub nsw i64 %578, %579
  store i64 %580, ptr %44, align 8, !tbaa !9
  %581 = load ptr, ptr %28, align 8, !tbaa !5
  %582 = load i64, ptr %57, align 8, !tbaa !9
  %583 = load i64, ptr %57, align 8, !tbaa !9
  %584 = load i64, ptr %40, align 8, !tbaa !9
  %585 = mul nsw i64 %583, %584
  %586 = add nsw i64 %582, %585
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 %586
  %588 = load ptr, ptr %29, align 8, !tbaa !5
  %589 = load ptr, ptr %32, align 8, !tbaa !5
  %590 = load i64, ptr %63, align 8, !tbaa !9
  %591 = getelementptr inbounds %struct.doublecomplex, ptr %589, i64 %590
  %592 = load ptr, ptr %32, align 8, !tbaa !5
  %593 = load i64, ptr %67, align 8, !tbaa !9
  %594 = getelementptr inbounds %struct.doublecomplex, ptr %592, i64 %593
  %595 = call i32 @zungqr_(ptr noundef %71, ptr noundef %71, ptr noundef %71, ptr noundef %587, ptr noundef %588, ptr noundef %591, ptr noundef %594, ptr noundef %44, ptr noundef %62)
  br label %596

596:                                              ; preds = %575, %487
  %597 = load i64, ptr %66, align 8, !tbaa !9
  %598 = icmp ne i64 %597, 0
  br i1 %598, label %599, label %607

599:                                              ; preds = %596
  %600 = load ptr, ptr %21, align 8, !tbaa !5
  %601 = load ptr, ptr %21, align 8, !tbaa !5
  %602 = load ptr, ptr %30, align 8, !tbaa !5
  %603 = load i64, ptr %43, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %602, i64 %603
  %605 = load ptr, ptr %31, align 8, !tbaa !5
  %606 = call i32 @zlaset_(ptr noundef @.str.15, ptr noundef %600, ptr noundef %601, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %604, ptr noundef %605)
  br label %607

607:                                              ; preds = %599, %596
  %608 = load i64, ptr %59, align 8, !tbaa !9
  %609 = icmp ne i64 %608, 0
  br i1 %609, label %610, label %631

610:                                              ; preds = %607
  %611 = load ptr, ptr %19, align 8, !tbaa !5
  %612 = load ptr, ptr %20, align 8, !tbaa !5
  %613 = load ptr, ptr %21, align 8, !tbaa !5
  %614 = load ptr, ptr %22, align 8, !tbaa !5
  %615 = load i64, ptr %37, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %615
  %617 = load ptr, ptr %23, align 8, !tbaa !5
  %618 = load ptr, ptr %24, align 8, !tbaa !5
  %619 = load i64, ptr %39, align 8, !tbaa !9
  %620 = getelementptr inbounds %struct.doublecomplex, ptr %618, i64 %619
  %621 = load ptr, ptr %25, align 8, !tbaa !5
  %622 = load ptr, ptr %28, align 8, !tbaa !5
  %623 = load i64, ptr %41, align 8, !tbaa !9
  %624 = getelementptr inbounds %struct.doublecomplex, ptr %622, i64 %623
  %625 = load ptr, ptr %29, align 8, !tbaa !5
  %626 = load ptr, ptr %30, align 8, !tbaa !5
  %627 = load i64, ptr %43, align 8, !tbaa !9
  %628 = getelementptr inbounds %struct.doublecomplex, ptr %626, i64 %627
  %629 = load ptr, ptr %31, align 8, !tbaa !5
  %630 = call i32 @zgghrd_(ptr noundef %611, ptr noundef %612, ptr noundef %613, ptr noundef %57, ptr noundef %56, ptr noundef %616, ptr noundef %617, ptr noundef %620, ptr noundef %621, ptr noundef %624, ptr noundef %625, ptr noundef %628, ptr noundef %629, ptr noundef %62)
  br label %657

631:                                              ; preds = %607
  %632 = load ptr, ptr %22, align 8, !tbaa !5
  %633 = load i64, ptr %57, align 8, !tbaa !9
  %634 = load i64, ptr %57, align 8, !tbaa !9
  %635 = load i64, ptr %36, align 8, !tbaa !9
  %636 = mul nsw i64 %634, %635
  %637 = add nsw i64 %633, %636
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %632, i64 %637
  %639 = load ptr, ptr %23, align 8, !tbaa !5
  %640 = load ptr, ptr %24, align 8, !tbaa !5
  %641 = load i64, ptr %57, align 8, !tbaa !9
  %642 = load i64, ptr %57, align 8, !tbaa !9
  %643 = load i64, ptr %38, align 8, !tbaa !9
  %644 = mul nsw i64 %642, %643
  %645 = add nsw i64 %641, %644
  %646 = getelementptr inbounds %struct.doublecomplex, ptr %640, i64 %645
  %647 = load ptr, ptr %25, align 8, !tbaa !5
  %648 = load ptr, ptr %28, align 8, !tbaa !5
  %649 = load i64, ptr %41, align 8, !tbaa !9
  %650 = getelementptr inbounds %struct.doublecomplex, ptr %648, i64 %649
  %651 = load ptr, ptr %29, align 8, !tbaa !5
  %652 = load ptr, ptr %30, align 8, !tbaa !5
  %653 = load i64, ptr %43, align 8, !tbaa !9
  %654 = getelementptr inbounds %struct.doublecomplex, ptr %652, i64 %653
  %655 = load ptr, ptr %31, align 8, !tbaa !5
  %656 = call i32 @zgghrd_(ptr noundef @.str, ptr noundef @.str, ptr noundef %71, ptr noundef @c__1, ptr noundef %71, ptr noundef %638, ptr noundef %639, ptr noundef %646, ptr noundef %647, ptr noundef %650, ptr noundef %651, ptr noundef %654, ptr noundef %655, ptr noundef %62)
  br label %657

657:                                              ; preds = %631, %610
  %658 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %658, ptr %67, align 8, !tbaa !9
  %659 = load i64, ptr %59, align 8, !tbaa !9
  %660 = icmp ne i64 %659, 0
  br i1 %660, label %661, label %663

661:                                              ; preds = %657
  %662 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  store i8 83, ptr %662, align 1, !tbaa !16
  br label %665

663:                                              ; preds = %657
  %664 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  store i8 69, ptr %664, align 1, !tbaa !16
  br label %665

665:                                              ; preds = %663, %661
  %666 = load ptr, ptr %33, align 8, !tbaa !5
  %667 = load i64, ptr %666, align 8, !tbaa !9
  %668 = add nsw i64 %667, 1
  %669 = load i64, ptr %67, align 8, !tbaa !9
  %670 = sub nsw i64 %668, %669
  store i64 %670, ptr %44, align 8, !tbaa !9
  %671 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  %672 = load ptr, ptr %19, align 8, !tbaa !5
  %673 = load ptr, ptr %20, align 8, !tbaa !5
  %674 = load ptr, ptr %21, align 8, !tbaa !5
  %675 = load ptr, ptr %22, align 8, !tbaa !5
  %676 = load i64, ptr %37, align 8, !tbaa !9
  %677 = getelementptr inbounds %struct.doublecomplex, ptr %675, i64 %676
  %678 = load ptr, ptr %23, align 8, !tbaa !5
  %679 = load ptr, ptr %24, align 8, !tbaa !5
  %680 = load i64, ptr %39, align 8, !tbaa !9
  %681 = getelementptr inbounds %struct.doublecomplex, ptr %679, i64 %680
  %682 = load ptr, ptr %25, align 8, !tbaa !5
  %683 = load ptr, ptr %26, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.doublecomplex, ptr %683, i64 1
  %685 = load ptr, ptr %27, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %685, i64 1
  %687 = load ptr, ptr %28, align 8, !tbaa !5
  %688 = load i64, ptr %41, align 8, !tbaa !9
  %689 = getelementptr inbounds %struct.doublecomplex, ptr %687, i64 %688
  %690 = load ptr, ptr %29, align 8, !tbaa !5
  %691 = load ptr, ptr %30, align 8, !tbaa !5
  %692 = load i64, ptr %43, align 8, !tbaa !9
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %691, i64 %692
  %694 = load ptr, ptr %31, align 8, !tbaa !5
  %695 = load ptr, ptr %32, align 8, !tbaa !5
  %696 = load i64, ptr %67, align 8, !tbaa !9
  %697 = getelementptr inbounds %struct.doublecomplex, ptr %695, i64 %696
  %698 = load ptr, ptr %34, align 8, !tbaa !5
  %699 = load i64, ptr %70, align 8, !tbaa !9
  %700 = getelementptr inbounds double, ptr %698, i64 %699
  %701 = call i32 @zhgeqz_(ptr noundef %671, ptr noundef %672, ptr noundef %673, ptr noundef %674, ptr noundef %57, ptr noundef %56, ptr noundef %677, ptr noundef %678, ptr noundef %681, ptr noundef %682, ptr noundef %684, ptr noundef %686, ptr noundef %689, ptr noundef %690, ptr noundef %693, ptr noundef %694, ptr noundef %697, ptr noundef %44, ptr noundef %700, ptr noundef %62)
  %702 = load i64, ptr %62, align 8, !tbaa !9
  %703 = icmp ne i64 %702, 0
  br i1 %703, label %704, label %739

704:                                              ; preds = %665
  %705 = load i64, ptr %62, align 8, !tbaa !9
  %706 = icmp sgt i64 %705, 0
  br i1 %706, label %707, label %715

707:                                              ; preds = %704
  %708 = load i64, ptr %62, align 8, !tbaa !9
  %709 = load ptr, ptr %21, align 8, !tbaa !5
  %710 = load i64, ptr %709, align 8, !tbaa !9
  %711 = icmp sle i64 %708, %710
  br i1 %711, label %712, label %715

712:                                              ; preds = %707
  %713 = load i64, ptr %62, align 8, !tbaa !9
  %714 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 %713, ptr %714, align 8, !tbaa !9
  br label %738

715:                                              ; preds = %707, %704
  %716 = load i64, ptr %62, align 8, !tbaa !9
  %717 = load ptr, ptr %21, align 8, !tbaa !5
  %718 = load i64, ptr %717, align 8, !tbaa !9
  %719 = icmp sgt i64 %716, %718
  br i1 %719, label %720, label %732

720:                                              ; preds = %715
  %721 = load i64, ptr %62, align 8, !tbaa !9
  %722 = load ptr, ptr %21, align 8, !tbaa !5
  %723 = load i64, ptr %722, align 8, !tbaa !9
  %724 = shl i64 %723, 1
  %725 = icmp sle i64 %721, %724
  br i1 %725, label %726, label %732

726:                                              ; preds = %720
  %727 = load i64, ptr %62, align 8, !tbaa !9
  %728 = load ptr, ptr %21, align 8, !tbaa !5
  %729 = load i64, ptr %728, align 8, !tbaa !9
  %730 = sub nsw i64 %727, %729
  %731 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 %730, ptr %731, align 8, !tbaa !9
  br label %737

732:                                              ; preds = %720, %715
  %733 = load ptr, ptr %21, align 8, !tbaa !5
  %734 = load i64, ptr %733, align 8, !tbaa !9
  %735 = add nsw i64 %734, 1
  %736 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 %735, ptr %736, align 8, !tbaa !9
  br label %737

737:                                              ; preds = %732, %726
  br label %738

738:                                              ; preds = %737, %712
  br label %1096

739:                                              ; preds = %665
  %740 = load i64, ptr %59, align 8, !tbaa !9
  %741 = icmp ne i64 %740, 0
  br i1 %741, label %742, label %1077

742:                                              ; preds = %739
  %743 = load i64, ptr %65, align 8, !tbaa !9
  %744 = icmp ne i64 %743, 0
  br i1 %744, label %745, label %753

745:                                              ; preds = %742
  %746 = load i64, ptr %66, align 8, !tbaa !9
  %747 = icmp ne i64 %746, 0
  br i1 %747, label %748, label %750

748:                                              ; preds = %745
  %749 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  store i8 66, ptr %749, align 1, !tbaa !16
  br label %752

750:                                              ; preds = %745
  %751 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  store i8 76, ptr %751, align 1, !tbaa !16
  br label %752

752:                                              ; preds = %750, %748
  br label %755

753:                                              ; preds = %742
  %754 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  store i8 82, ptr %754, align 1, !tbaa !16
  br label %755

755:                                              ; preds = %753, %752
  %756 = getelementptr inbounds [1 x i8], ptr %75, i64 0, i64 0
  %757 = getelementptr inbounds [1 x i64], ptr %74, i64 0, i64 0
  %758 = load ptr, ptr %21, align 8, !tbaa !5
  %759 = load ptr, ptr %22, align 8, !tbaa !5
  %760 = load i64, ptr %37, align 8, !tbaa !9
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %759, i64 %760
  %762 = load ptr, ptr %23, align 8, !tbaa !5
  %763 = load ptr, ptr %24, align 8, !tbaa !5
  %764 = load i64, ptr %39, align 8, !tbaa !9
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %764
  %766 = load ptr, ptr %25, align 8, !tbaa !5
  %767 = load ptr, ptr %28, align 8, !tbaa !5
  %768 = load i64, ptr %41, align 8, !tbaa !9
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %767, i64 %768
  %770 = load ptr, ptr %29, align 8, !tbaa !5
  %771 = load ptr, ptr %30, align 8, !tbaa !5
  %772 = load i64, ptr %43, align 8, !tbaa !9
  %773 = getelementptr inbounds %struct.doublecomplex, ptr %771, i64 %772
  %774 = load ptr, ptr %31, align 8, !tbaa !5
  %775 = load ptr, ptr %21, align 8, !tbaa !5
  %776 = load ptr, ptr %32, align 8, !tbaa !5
  %777 = load i64, ptr %67, align 8, !tbaa !9
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %776, i64 %777
  %779 = load ptr, ptr %34, align 8, !tbaa !5
  %780 = load i64, ptr %70, align 8, !tbaa !9
  %781 = getelementptr inbounds double, ptr %779, i64 %780
  %782 = call i32 @ztgevc_(ptr noundef %756, ptr noundef @.str.8, ptr noundef %757, ptr noundef %758, ptr noundef %761, ptr noundef %762, ptr noundef %765, ptr noundef %766, ptr noundef %769, ptr noundef %770, ptr noundef %773, ptr noundef %774, ptr noundef %775, ptr noundef %54, ptr noundef %778, ptr noundef %781, ptr noundef %62)
  %783 = load i64, ptr %62, align 8, !tbaa !9
  %784 = icmp ne i64 %783, 0
  br i1 %784, label %785, label %790

785:                                              ; preds = %755
  %786 = load ptr, ptr %21, align 8, !tbaa !5
  %787 = load i64, ptr %786, align 8, !tbaa !9
  %788 = add nsw i64 %787, 2
  %789 = load ptr, ptr %35, align 8, !tbaa !5
  store i64 %788, ptr %789, align 8, !tbaa !9
  br label %1096

790:                                              ; preds = %755
  %791 = load i64, ptr %65, align 8, !tbaa !9
  %792 = icmp ne i64 %791, 0
  br i1 %792, label %793, label %933

793:                                              ; preds = %790
  %794 = load ptr, ptr %21, align 8, !tbaa !5
  %795 = load ptr, ptr %34, align 8, !tbaa !5
  %796 = load i64, ptr %68, align 8, !tbaa !9
  %797 = getelementptr inbounds double, ptr %795, i64 %796
  %798 = load ptr, ptr %34, align 8, !tbaa !5
  %799 = load i64, ptr %78, align 8, !tbaa !9
  %800 = getelementptr inbounds double, ptr %798, i64 %799
  %801 = load ptr, ptr %21, align 8, !tbaa !5
  %802 = load ptr, ptr %28, align 8, !tbaa !5
  %803 = load i64, ptr %41, align 8, !tbaa !9
  %804 = getelementptr inbounds %struct.doublecomplex, ptr %802, i64 %803
  %805 = load ptr, ptr %29, align 8, !tbaa !5
  %806 = call i32 @zggbak_(ptr noundef @.str.12, ptr noundef @.str.13, ptr noundef %794, ptr noundef %57, ptr noundef %56, ptr noundef %797, ptr noundef %800, ptr noundef %801, ptr noundef %804, ptr noundef %805, ptr noundef %62)
  %807 = load ptr, ptr %21, align 8, !tbaa !5
  %808 = load i64, ptr %807, align 8, !tbaa !9
  store i64 %808, ptr %44, align 8, !tbaa !9
  store i64 1, ptr %53, align 8, !tbaa !9
  br label %809

809:                                              ; preds = %929, %793
  %810 = load i64, ptr %53, align 8, !tbaa !9
  %811 = load i64, ptr %44, align 8, !tbaa !9
  %812 = icmp sle i64 %810, %811
  br i1 %812, label %813, label %932

813:                                              ; preds = %809
  store double 0.000000e+00, ptr %64, align 8, !tbaa !15
  %814 = load ptr, ptr %21, align 8, !tbaa !5
  %815 = load i64, ptr %814, align 8, !tbaa !9
  store i64 %815, ptr %45, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  br label %816

816:                                              ; preds = %868, %813
  %817 = load i64, ptr %55, align 8, !tbaa !9
  %818 = load i64, ptr %45, align 8, !tbaa !9
  %819 = icmp sle i64 %817, %818
  br i1 %819, label %820, label %871

820:                                              ; preds = %816
  %821 = load i64, ptr %55, align 8, !tbaa !9
  %822 = load i64, ptr %53, align 8, !tbaa !9
  %823 = load i64, ptr %40, align 8, !tbaa !9
  %824 = mul nsw i64 %822, %823
  %825 = add nsw i64 %821, %824
  store i64 %825, ptr %46, align 8, !tbaa !9
  %826 = load double, ptr %64, align 8, !tbaa !15
  store double %826, ptr %50, align 8, !tbaa !15
  %827 = load ptr, ptr %28, align 8, !tbaa !5
  %828 = load i64, ptr %46, align 8, !tbaa !9
  %829 = getelementptr inbounds %struct.doublecomplex, ptr %827, i64 %828
  %830 = getelementptr inbounds %struct.doublecomplex, ptr %829, i32 0, i32 0
  %831 = load double, ptr %830, align 8, !tbaa !11
  store double %831, ptr %48, align 8, !tbaa !15
  %832 = load double, ptr %48, align 8, !tbaa !15
  %833 = fcmp oge double %832, 0.000000e+00
  br i1 %833, label %834, label %836

834:                                              ; preds = %820
  %835 = load double, ptr %48, align 8, !tbaa !15
  br label %839

836:                                              ; preds = %820
  %837 = load double, ptr %48, align 8, !tbaa !15
  %838 = fneg double %837
  br label %839

839:                                              ; preds = %836, %834
  %840 = phi double [ %835, %834 ], [ %838, %836 ]
  %841 = load ptr, ptr %28, align 8, !tbaa !5
  %842 = load i64, ptr %55, align 8, !tbaa !9
  %843 = load i64, ptr %53, align 8, !tbaa !9
  %844 = load i64, ptr %40, align 8, !tbaa !9
  %845 = mul nsw i64 %843, %844
  %846 = add nsw i64 %842, %845
  %847 = getelementptr inbounds %struct.doublecomplex, ptr %841, i64 %846
  %848 = call double @d_imag(ptr noundef %847)
  store double %848, ptr %49, align 8, !tbaa !15
  %849 = load double, ptr %49, align 8, !tbaa !15
  %850 = fcmp oge double %849, 0.000000e+00
  br i1 %850, label %851, label %853

851:                                              ; preds = %839
  %852 = load double, ptr %49, align 8, !tbaa !15
  br label %856

853:                                              ; preds = %839
  %854 = load double, ptr %49, align 8, !tbaa !15
  %855 = fneg double %854
  br label %856

856:                                              ; preds = %853, %851
  %857 = phi double [ %852, %851 ], [ %855, %853 ]
  %858 = fadd double %840, %857
  store double %858, ptr %51, align 8, !tbaa !15
  %859 = load double, ptr %50, align 8, !tbaa !15
  %860 = load double, ptr %51, align 8, !tbaa !15
  %861 = fcmp oge double %859, %860
  br i1 %861, label %862, label %864

862:                                              ; preds = %856
  %863 = load double, ptr %50, align 8, !tbaa !15
  br label %866

864:                                              ; preds = %856
  %865 = load double, ptr %51, align 8, !tbaa !15
  br label %866

866:                                              ; preds = %864, %862
  %867 = phi double [ %863, %862 ], [ %865, %864 ]
  store double %867, ptr %64, align 8, !tbaa !15
  br label %868

868:                                              ; preds = %866
  %869 = load i64, ptr %55, align 8, !tbaa !9
  %870 = add nsw i64 %869, 1
  store i64 %870, ptr %55, align 8, !tbaa !9
  br label %816, !llvm.loop !17

871:                                              ; preds = %816
  %872 = load double, ptr %64, align 8, !tbaa !15
  %873 = load double, ptr %83, align 8, !tbaa !15
  %874 = fcmp olt double %872, %873
  br i1 %874, label %875, label %876

875:                                              ; preds = %871
  br label %928

876:                                              ; preds = %871
  %877 = load double, ptr %64, align 8, !tbaa !15
  %878 = fdiv double 1.000000e+00, %877
  store double %878, ptr %64, align 8, !tbaa !15
  %879 = load ptr, ptr %21, align 8, !tbaa !5
  %880 = load i64, ptr %879, align 8, !tbaa !9
  store i64 %880, ptr %45, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  br label %881

881:                                              ; preds = %924, %876
  %882 = load i64, ptr %55, align 8, !tbaa !9
  %883 = load i64, ptr %45, align 8, !tbaa !9
  %884 = icmp sle i64 %882, %883
  br i1 %884, label %885, label %927

885:                                              ; preds = %881
  %886 = load i64, ptr %55, align 8, !tbaa !9
  %887 = load i64, ptr %53, align 8, !tbaa !9
  %888 = load i64, ptr %40, align 8, !tbaa !9
  %889 = mul nsw i64 %887, %888
  %890 = add nsw i64 %886, %889
  store i64 %890, ptr %46, align 8, !tbaa !9
  %891 = load i64, ptr %55, align 8, !tbaa !9
  %892 = load i64, ptr %53, align 8, !tbaa !9
  %893 = load i64, ptr %40, align 8, !tbaa !9
  %894 = mul nsw i64 %892, %893
  %895 = add nsw i64 %891, %894
  store i64 %895, ptr %47, align 8, !tbaa !9
  %896 = load double, ptr %64, align 8, !tbaa !15
  %897 = load ptr, ptr %28, align 8, !tbaa !5
  %898 = load i64, ptr %47, align 8, !tbaa !9
  %899 = getelementptr inbounds %struct.doublecomplex, ptr %897, i64 %898
  %900 = getelementptr inbounds %struct.doublecomplex, ptr %899, i32 0, i32 0
  %901 = load double, ptr %900, align 8, !tbaa !11
  %902 = fmul double %896, %901
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  store double %902, ptr %903, align 8, !tbaa !11
  %904 = load double, ptr %64, align 8, !tbaa !15
  %905 = load ptr, ptr %28, align 8, !tbaa !5
  %906 = load i64, ptr %47, align 8, !tbaa !9
  %907 = getelementptr inbounds %struct.doublecomplex, ptr %905, i64 %906
  %908 = getelementptr inbounds %struct.doublecomplex, ptr %907, i32 0, i32 1
  %909 = load double, ptr %908, align 8, !tbaa !14
  %910 = fmul double %904, %909
  %911 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  store double %910, ptr %911, align 8, !tbaa !14
  %912 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %913 = load double, ptr %912, align 8, !tbaa !11
  %914 = load ptr, ptr %28, align 8, !tbaa !5
  %915 = load i64, ptr %46, align 8, !tbaa !9
  %916 = getelementptr inbounds %struct.doublecomplex, ptr %914, i64 %915
  %917 = getelementptr inbounds %struct.doublecomplex, ptr %916, i32 0, i32 0
  store double %913, ptr %917, align 8, !tbaa !11
  %918 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %919 = load double, ptr %918, align 8, !tbaa !14
  %920 = load ptr, ptr %28, align 8, !tbaa !5
  %921 = load i64, ptr %46, align 8, !tbaa !9
  %922 = getelementptr inbounds %struct.doublecomplex, ptr %920, i64 %921
  %923 = getelementptr inbounds %struct.doublecomplex, ptr %922, i32 0, i32 1
  store double %919, ptr %923, align 8, !tbaa !14
  br label %924

924:                                              ; preds = %885
  %925 = load i64, ptr %55, align 8, !tbaa !9
  %926 = add nsw i64 %925, 1
  store i64 %926, ptr %55, align 8, !tbaa !9
  br label %881, !llvm.loop !19

927:                                              ; preds = %881
  br label %928

928:                                              ; preds = %927, %875
  br label %929

929:                                              ; preds = %928
  %930 = load i64, ptr %53, align 8, !tbaa !9
  %931 = add nsw i64 %930, 1
  store i64 %931, ptr %53, align 8, !tbaa !9
  br label %809, !llvm.loop !20

932:                                              ; preds = %809
  br label %933

933:                                              ; preds = %932, %790
  %934 = load i64, ptr %66, align 8, !tbaa !9
  %935 = icmp ne i64 %934, 0
  br i1 %935, label %936, label %1076

936:                                              ; preds = %933
  %937 = load ptr, ptr %21, align 8, !tbaa !5
  %938 = load ptr, ptr %34, align 8, !tbaa !5
  %939 = load i64, ptr %68, align 8, !tbaa !9
  %940 = getelementptr inbounds double, ptr %938, i64 %939
  %941 = load ptr, ptr %34, align 8, !tbaa !5
  %942 = load i64, ptr %78, align 8, !tbaa !9
  %943 = getelementptr inbounds double, ptr %941, i64 %942
  %944 = load ptr, ptr %21, align 8, !tbaa !5
  %945 = load ptr, ptr %30, align 8, !tbaa !5
  %946 = load i64, ptr %43, align 8, !tbaa !9
  %947 = getelementptr inbounds %struct.doublecomplex, ptr %945, i64 %946
  %948 = load ptr, ptr %31, align 8, !tbaa !5
  %949 = call i32 @zggbak_(ptr noundef @.str.12, ptr noundef @.str.16, ptr noundef %937, ptr noundef %57, ptr noundef %56, ptr noundef %940, ptr noundef %943, ptr noundef %944, ptr noundef %947, ptr noundef %948, ptr noundef %62)
  %950 = load ptr, ptr %21, align 8, !tbaa !5
  %951 = load i64, ptr %950, align 8, !tbaa !9
  store i64 %951, ptr %44, align 8, !tbaa !9
  store i64 1, ptr %53, align 8, !tbaa !9
  br label %952

952:                                              ; preds = %1072, %936
  %953 = load i64, ptr %53, align 8, !tbaa !9
  %954 = load i64, ptr %44, align 8, !tbaa !9
  %955 = icmp sle i64 %953, %954
  br i1 %955, label %956, label %1075

956:                                              ; preds = %952
  store double 0.000000e+00, ptr %64, align 8, !tbaa !15
  %957 = load ptr, ptr %21, align 8, !tbaa !5
  %958 = load i64, ptr %957, align 8, !tbaa !9
  store i64 %958, ptr %45, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  br label %959

959:                                              ; preds = %1011, %956
  %960 = load i64, ptr %55, align 8, !tbaa !9
  %961 = load i64, ptr %45, align 8, !tbaa !9
  %962 = icmp sle i64 %960, %961
  br i1 %962, label %963, label %1014

963:                                              ; preds = %959
  %964 = load i64, ptr %55, align 8, !tbaa !9
  %965 = load i64, ptr %53, align 8, !tbaa !9
  %966 = load i64, ptr %42, align 8, !tbaa !9
  %967 = mul nsw i64 %965, %966
  %968 = add nsw i64 %964, %967
  store i64 %968, ptr %46, align 8, !tbaa !9
  %969 = load double, ptr %64, align 8, !tbaa !15
  store double %969, ptr %50, align 8, !tbaa !15
  %970 = load ptr, ptr %30, align 8, !tbaa !5
  %971 = load i64, ptr %46, align 8, !tbaa !9
  %972 = getelementptr inbounds %struct.doublecomplex, ptr %970, i64 %971
  %973 = getelementptr inbounds %struct.doublecomplex, ptr %972, i32 0, i32 0
  %974 = load double, ptr %973, align 8, !tbaa !11
  store double %974, ptr %48, align 8, !tbaa !15
  %975 = load double, ptr %48, align 8, !tbaa !15
  %976 = fcmp oge double %975, 0.000000e+00
  br i1 %976, label %977, label %979

977:                                              ; preds = %963
  %978 = load double, ptr %48, align 8, !tbaa !15
  br label %982

979:                                              ; preds = %963
  %980 = load double, ptr %48, align 8, !tbaa !15
  %981 = fneg double %980
  br label %982

982:                                              ; preds = %979, %977
  %983 = phi double [ %978, %977 ], [ %981, %979 ]
  %984 = load ptr, ptr %30, align 8, !tbaa !5
  %985 = load i64, ptr %55, align 8, !tbaa !9
  %986 = load i64, ptr %53, align 8, !tbaa !9
  %987 = load i64, ptr %42, align 8, !tbaa !9
  %988 = mul nsw i64 %986, %987
  %989 = add nsw i64 %985, %988
  %990 = getelementptr inbounds %struct.doublecomplex, ptr %984, i64 %989
  %991 = call double @d_imag(ptr noundef %990)
  store double %991, ptr %49, align 8, !tbaa !15
  %992 = load double, ptr %49, align 8, !tbaa !15
  %993 = fcmp oge double %992, 0.000000e+00
  br i1 %993, label %994, label %996

994:                                              ; preds = %982
  %995 = load double, ptr %49, align 8, !tbaa !15
  br label %999

996:                                              ; preds = %982
  %997 = load double, ptr %49, align 8, !tbaa !15
  %998 = fneg double %997
  br label %999

999:                                              ; preds = %996, %994
  %1000 = phi double [ %995, %994 ], [ %998, %996 ]
  %1001 = fadd double %983, %1000
  store double %1001, ptr %51, align 8, !tbaa !15
  %1002 = load double, ptr %50, align 8, !tbaa !15
  %1003 = load double, ptr %51, align 8, !tbaa !15
  %1004 = fcmp oge double %1002, %1003
  br i1 %1004, label %1005, label %1007

1005:                                             ; preds = %999
  %1006 = load double, ptr %50, align 8, !tbaa !15
  br label %1009

1007:                                             ; preds = %999
  %1008 = load double, ptr %51, align 8, !tbaa !15
  br label %1009

1009:                                             ; preds = %1007, %1005
  %1010 = phi double [ %1006, %1005 ], [ %1008, %1007 ]
  store double %1010, ptr %64, align 8, !tbaa !15
  br label %1011

1011:                                             ; preds = %1009
  %1012 = load i64, ptr %55, align 8, !tbaa !9
  %1013 = add nsw i64 %1012, 1
  store i64 %1013, ptr %55, align 8, !tbaa !9
  br label %959, !llvm.loop !21

1014:                                             ; preds = %959
  %1015 = load double, ptr %64, align 8, !tbaa !15
  %1016 = load double, ptr %83, align 8, !tbaa !15
  %1017 = fcmp olt double %1015, %1016
  br i1 %1017, label %1018, label %1019

1018:                                             ; preds = %1014
  br label %1071

1019:                                             ; preds = %1014
  %1020 = load double, ptr %64, align 8, !tbaa !15
  %1021 = fdiv double 1.000000e+00, %1020
  store double %1021, ptr %64, align 8, !tbaa !15
  %1022 = load ptr, ptr %21, align 8, !tbaa !5
  %1023 = load i64, ptr %1022, align 8, !tbaa !9
  store i64 %1023, ptr %45, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  br label %1024

1024:                                             ; preds = %1067, %1019
  %1025 = load i64, ptr %55, align 8, !tbaa !9
  %1026 = load i64, ptr %45, align 8, !tbaa !9
  %1027 = icmp sle i64 %1025, %1026
  br i1 %1027, label %1028, label %1070

1028:                                             ; preds = %1024
  %1029 = load i64, ptr %55, align 8, !tbaa !9
  %1030 = load i64, ptr %53, align 8, !tbaa !9
  %1031 = load i64, ptr %42, align 8, !tbaa !9
  %1032 = mul nsw i64 %1030, %1031
  %1033 = add nsw i64 %1029, %1032
  store i64 %1033, ptr %46, align 8, !tbaa !9
  %1034 = load i64, ptr %55, align 8, !tbaa !9
  %1035 = load i64, ptr %53, align 8, !tbaa !9
  %1036 = load i64, ptr %42, align 8, !tbaa !9
  %1037 = mul nsw i64 %1035, %1036
  %1038 = add nsw i64 %1034, %1037
  store i64 %1038, ptr %47, align 8, !tbaa !9
  %1039 = load double, ptr %64, align 8, !tbaa !15
  %1040 = load ptr, ptr %30, align 8, !tbaa !5
  %1041 = load i64, ptr %47, align 8, !tbaa !9
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %1040, i64 %1041
  %1043 = getelementptr inbounds %struct.doublecomplex, ptr %1042, i32 0, i32 0
  %1044 = load double, ptr %1043, align 8, !tbaa !11
  %1045 = fmul double %1039, %1044
  %1046 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  store double %1045, ptr %1046, align 8, !tbaa !11
  %1047 = load double, ptr %64, align 8, !tbaa !15
  %1048 = load ptr, ptr %30, align 8, !tbaa !5
  %1049 = load i64, ptr %47, align 8, !tbaa !9
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %1048, i64 %1049
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %1050, i32 0, i32 1
  %1052 = load double, ptr %1051, align 8, !tbaa !14
  %1053 = fmul double %1047, %1052
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  store double %1053, ptr %1054, align 8, !tbaa !14
  %1055 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %1056 = load double, ptr %1055, align 8, !tbaa !11
  %1057 = load ptr, ptr %30, align 8, !tbaa !5
  %1058 = load i64, ptr %46, align 8, !tbaa !9
  %1059 = getelementptr inbounds %struct.doublecomplex, ptr %1057, i64 %1058
  %1060 = getelementptr inbounds %struct.doublecomplex, ptr %1059, i32 0, i32 0
  store double %1056, ptr %1060, align 8, !tbaa !11
  %1061 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %1062 = load double, ptr %1061, align 8, !tbaa !14
  %1063 = load ptr, ptr %30, align 8, !tbaa !5
  %1064 = load i64, ptr %46, align 8, !tbaa !9
  %1065 = getelementptr inbounds %struct.doublecomplex, ptr %1063, i64 %1064
  %1066 = getelementptr inbounds %struct.doublecomplex, ptr %1065, i32 0, i32 1
  store double %1062, ptr %1066, align 8, !tbaa !14
  br label %1067

1067:                                             ; preds = %1028
  %1068 = load i64, ptr %55, align 8, !tbaa !9
  %1069 = add nsw i64 %1068, 1
  store i64 %1069, ptr %55, align 8, !tbaa !9
  br label %1024, !llvm.loop !22

1070:                                             ; preds = %1024
  br label %1071

1071:                                             ; preds = %1070, %1018
  br label %1072

1072:                                             ; preds = %1071
  %1073 = load i64, ptr %53, align 8, !tbaa !9
  %1074 = add nsw i64 %1073, 1
  store i64 %1074, ptr %53, align 8, !tbaa !9
  br label %952, !llvm.loop !23

1075:                                             ; preds = %952
  br label %1076

1076:                                             ; preds = %1075, %933
  br label %1077

1077:                                             ; preds = %1076, %739
  %1078 = load i64, ptr %72, align 8, !tbaa !9
  %1079 = icmp ne i64 %1078, 0
  br i1 %1079, label %1080, label %1086

1080:                                             ; preds = %1077
  %1081 = load ptr, ptr %21, align 8, !tbaa !5
  %1082 = load ptr, ptr %26, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1082, i64 1
  %1084 = load ptr, ptr %21, align 8, !tbaa !5
  %1085 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %80, ptr noundef %60, ptr noundef %1081, ptr noundef @c__1, ptr noundef %1083, ptr noundef %1084, ptr noundef %62)
  br label %1086

1086:                                             ; preds = %1080, %1077
  %1087 = load i64, ptr %73, align 8, !tbaa !9
  %1088 = icmp ne i64 %1087, 0
  br i1 %1088, label %1089, label %1095

1089:                                             ; preds = %1086
  %1090 = load ptr, ptr %21, align 8, !tbaa !5
  %1091 = load ptr, ptr %27, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.doublecomplex, ptr %1091, i64 1
  %1093 = load ptr, ptr %21, align 8, !tbaa !5
  %1094 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %82, ptr noundef %61, ptr noundef %1090, ptr noundef @c__1, ptr noundef %1092, ptr noundef %1093, ptr noundef %62)
  br label %1095

1095:                                             ; preds = %1089, %1086
  br label %1096

1096:                                             ; preds = %1095, %785, %738
  %1097 = load i64, ptr %84, align 8, !tbaa !9
  %1098 = sitofp i64 %1097 to double
  %1099 = load ptr, ptr %32, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.doublecomplex, ptr %1099, i64 1
  %1101 = getelementptr inbounds %struct.doublecomplex, ptr %1100, i32 0, i32 0
  store double %1098, ptr %1101, align 8, !tbaa !11
  %1102 = load ptr, ptr %32, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.doublecomplex, ptr %1102, i64 1
  %1104 = getelementptr inbounds %struct.doublecomplex, ptr %1103, i32 0, i32 1
  store double 0.000000e+00, ptr %1104, align 8, !tbaa !14
  store i32 0, ptr %18, align 4
  store i32 1, ptr %86, align 4
  br label %1105

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

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

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

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

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

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

declare double @d_imag(ptr noundef) #2

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

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

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

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


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

%struct.doublecomplex = type { double, double }

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

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

47:                                               ; preds = %17
  %48 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not411 = icmp ne i64 %48, 0
  %49 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #5
  %.not412 = icmp eq i64 %49, 0
  br i1 %.not412, label %52, label %.thread

.thread518:                                       ; preds = %17
  %50 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #5
  %.not412519 = icmp eq i64 %50, 0
  br i1 %.not412519, label %.thread525, label %.thread.thread

.thread525:                                       ; preds = %.thread518
  %51 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  store i64 0, ptr %16, align 8, !tbaa !5
  br label %54

.thread.thread:                                   ; preds = %.thread518
  store i64 0, ptr %16, align 8, !tbaa !5
  br label %.thread437

52:                                               ; preds = %47
  %53 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  store i64 0, ptr %16, align 8, !tbaa !5
  br i1 %.not411, label %54, label %.thread449.sink.split

.thread:                                          ; preds = %47
  store i64 0, ptr %16, align 8, !tbaa !5
  br i1 %.not411, label %.thread437, label %.thread449.sink.split

54:                                               ; preds = %.thread525, %52
  %55 = phi i64 [ %51, %.thread525 ], [ %53, %52 ]
  %.not413.not = icmp eq i64 %55, 0
  br i1 %.not413.not, label %.thread449.sink.split, label %.thread437

.thread437:                                       ; preds = %.thread.thread, %.thread, %54
  %.not412520 = phi i1 [ true, %54 ], [ false, %.thread ], [ false, %.thread.thread ]
  %56 = phi i1 [ %.not, %54 ], [ %.not411, %.thread ], [ false, %.thread.thread ]
  %57 = phi i1 [ true, %54 ], [ %.not411, %.thread ], [ false, %.thread.thread ]
  %.in = load i64, ptr %14, align 8, !tbaa !5
  %58 = icmp eq i64 %.in, -1
  %59 = load i64, ptr %2, align 8, !tbaa !5
  %60 = icmp slt i64 %59, 0
  br i1 %60, label %.thread449.sink.split, label %61

61:                                               ; preds = %.thread437
  %62 = load i64, ptr %4, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %59, i64 1)
  %63 = icmp slt i64 %62, %spec.select
  br i1 %63, label %.thread449.sink.split, label %64

64:                                               ; preds = %61
  %65 = load i64, ptr %6, align 8, !tbaa !5
  %66 = icmp slt i64 %65, %spec.select
  br i1 %66, label %.thread449.sink.split, label %67

67:                                               ; preds = %64
  %68 = load i64, ptr %10, align 8, !tbaa !5
  %69 = icmp slt i64 %68, 1
  %70 = icmp ult i64 %68, %59
  %or.cond471 = and i1 %56, %70
  %or.cond473 = select i1 %69, i1 true, i1 %or.cond471
  br i1 %or.cond473, label %.thread449.sink.split, label %71

71:                                               ; preds = %67
  %72 = load i64, ptr %12, align 8, !tbaa !5
  %73 = icmp slt i64 %72, 1
  %74 = icmp ult i64 %72, %59
  %or.cond472 = and i1 %.not412520, %74
  %or.cond474 = or i1 %73, %or.cond472
  br i1 %or.cond474, label %.thread449.sink.split, label %75

75:                                               ; preds = %71
  %76 = shl nuw i64 %59, 1
  %77 = tail call i64 @llvm.smax.i64(i64 %76, i64 1)
  %78 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c__0) #5
  %79 = add i64 %78, 1
  %80 = mul i64 %79, %59
  %81 = tail call i64 @llvm.smax.i64(i64 %80, i64 1)
  store i64 %81, ptr %18, align 8, !tbaa !5
  %82 = load i64, ptr %2, align 8, !tbaa !5
  %83 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c__0) #5
  %84 = add i64 %83, 1
  %85 = mul i64 %84, %82
  store i64 %85, ptr %19, align 8, !tbaa !5
  %86 = tail call i64 @llvm.smax.i64(i64 %81, i64 %85)
  br i1 %56, label %87, label %93

87:                                               ; preds = %75
  store i64 %86, ptr %18, align 8, !tbaa !5
  %88 = load i64, ptr %2, align 8, !tbaa !5
  %89 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #5
  %90 = add i64 %89, 1
  %91 = mul i64 %90, %88
  store i64 %91, ptr %19, align 8, !tbaa !5
  %92 = tail call i64 @llvm.smax.i64(i64 %86, i64 %91)
  br label %93

93:                                               ; preds = %87, %75
  %.0384 = phi i64 [ %92, %87 ], [ %86, %75 ]
  %94 = uitofp nneg i64 %.0384 to double
  store double %94, ptr %13, align 8, !tbaa !9
  %95 = getelementptr inbounds i8, ptr %13, i64 8
  store double 0.000000e+00, ptr %95, align 8, !tbaa !12
  %96 = load i64, ptr %14, align 8, !tbaa !5
  %97 = icmp sge i64 %96, %77
  %or.cond = select i1 %97, i1 true, i1 %58
  br i1 %or.cond, label %.thread441, label %.thread449.sink.split

.thread441:                                       ; preds = %93
  %.pr445.pr = load i64, ptr %16, align 8, !tbaa !5
  %.not417 = icmp eq i64 %.pr445.pr, 0
  br i1 %.not417, label %101, label %.thread449

.thread449.sink.split:                            ; preds = %93, %71, %67, %64, %61, %.thread437, %54, %52, %.thread
  %.sink = phi i64 [ -1, %.thread ], [ -1, %52 ], [ -2, %54 ], [ -3, %.thread437 ], [ -5, %61 ], [ -7, %64 ], [ -11, %67 ], [ -13, %71 ], [ -15, %93 ]
  store i64 %.sink, ptr %16, align 8, !tbaa !5
  br label %.thread449

.thread449:                                       ; preds = %.thread449.sink.split, %.thread441
  %98 = phi i64 [ %.pr445.pr, %.thread441 ], [ %.sink, %.thread449.sink.split ]
  %99 = sub nsw i64 0, %98
  store i64 %99, ptr %18, align 8, !tbaa !5
  %100 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %18) #5
  br label %342

101:                                              ; preds = %.thread441
  br i1 %58, label %342, label %102

102:                                              ; preds = %101
  %103 = load i64, ptr %2, align 8, !tbaa !5
  %104 = icmp eq i64 %103, 0
  br i1 %104, label %342, label %105

105:                                              ; preds = %102
  %106 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %107 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #5
  %108 = fmul double %106, %107
  %109 = tail call double @dlamch_(ptr noundef nonnull @.str.9) #5
  store double %109, ptr %33, align 8, !tbaa !13
  %110 = fdiv double 1.000000e+00, %109
  store double %110, ptr %30, align 8, !tbaa !13
  %111 = call i32 @dlabad_(ptr noundef nonnull %33, ptr noundef nonnull %30) #5
  %112 = load double, ptr %33, align 8, !tbaa !13
  %113 = call double @sqrt(double noundef %112) #5
  %114 = fdiv double %113, %108
  store double %114, ptr %33, align 8, !tbaa !13
  %115 = fdiv double 1.000000e+00, %114
  store double %115, ptr %30, align 8, !tbaa !13
  %116 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %15) #5
  store double %116, ptr %23, align 8, !tbaa !13
  %117 = fcmp ogt double %116, 0.000000e+00
  %118 = load double, ptr %33, align 8
  %119 = fcmp olt double %116, %118
  %or.cond479 = select i1 %117, i1 %119, i1 false
  br i1 %or.cond479, label %123, label %120

120:                                              ; preds = %105
  %121 = load double, ptr %30, align 8, !tbaa !13
  %122 = fcmp ogt double %116, %121
  br i1 %122, label %123, label %125

123:                                              ; preds = %105, %120
  %storemerge475 = phi double [ %121, %120 ], [ %118, %105 ]
  store double %storemerge475, ptr %31, align 8, !tbaa !13
  %124 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %23, ptr noundef nonnull %31, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %25) #5
  br label %125

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

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

133:                                              ; preds = %125, %130
  %storemerge476 = phi double [ %131, %130 ], [ %128, %125 ]
  store double %storemerge476, ptr %32, align 8, !tbaa !13
  %134 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %24, ptr noundef nonnull %32, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %25) #5
  br label %135

135:                                              ; preds = %130, %133
  %.not419461 = phi i1 [ false, %133 ], [ true, %130 ]
  %136 = load i64, ptr %2, align 8, !tbaa !5
  %137 = getelementptr double, ptr %15, i64 %136
  %.idx = shl i64 %136, 4
  %138 = getelementptr i8, ptr %15, i64 %.idx
  %139 = call i32 @zggbal_(ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %22, ptr noundef nonnull %21, ptr noundef %15, ptr noundef %137, ptr noundef %138, ptr noundef nonnull %25) #5
  %140 = load i64, ptr %21, align 8, !tbaa !5
  %141 = add nsw i64 %140, 1
  %142 = load i64, ptr %22, align 8, !tbaa !5
  %143 = sub i64 %141, %142
  store i64 %143, ptr %27, align 8, !tbaa !5
  br i1 %57, label %144, label %147

144:                                              ; preds = %135
  %145 = load i64, ptr %2, align 8, !tbaa !5
  %reass.sub = sub i64 %145, %142
  %146 = add i64 %reass.sub, 1
  br label %147

147:                                              ; preds = %135, %144
  %storemerge = phi i64 [ %146, %144 ], [ %143, %135 ]
  store i64 %storemerge, ptr %26, align 8, !tbaa !5
  %148 = load i64, ptr %14, align 8, !tbaa !5
  %149 = sub i64 %148, %143
  store i64 %149, ptr %18, align 8, !tbaa !5
  %150 = add i64 %37, 1
  %151 = mul i64 %142, %150
  %152 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %151
  %153 = getelementptr %struct.doublecomplex, ptr %13, i64 %143
  %154 = call i32 @zgeqrf_(ptr noundef nonnull %27, ptr noundef nonnull %26, ptr noundef %152, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %153, ptr noundef nonnull %18, ptr noundef nonnull %25) #5
  %155 = load i64, ptr %14, align 8, !tbaa !5
  %156 = sub i64 %155, %143
  store i64 %156, ptr %18, align 8, !tbaa !5
  %157 = load i64, ptr %22, align 8, !tbaa !5
  %158 = mul i64 %157, %150
  %159 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %158
  %160 = add i64 %34, 1
  %161 = mul i64 %157, %160
  %162 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %161
  %163 = call i32 @zunmqr_(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14, ptr noundef nonnull %27, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef %159, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %162, ptr noundef nonnull %4, ptr noundef %153, ptr noundef nonnull %18, ptr noundef nonnull %25) #5
  br i1 %56, label %164, label %187

164:                                              ; preds = %147
  %165 = call i32 @zlaset_(ptr noundef nonnull @.str.15, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %9, ptr noundef nonnull %10) #5
  %166 = load i64, ptr %27, align 8, !tbaa !5
  %167 = icmp sgt i64 %166, 1
  br i1 %167, label %168, label %179

168:                                              ; preds = %164
  %169 = add nsw i64 %166, -1
  store i64 %169, ptr %18, align 8, !tbaa !5
  store i64 %169, ptr %19, align 8, !tbaa !5
  %170 = load i64, ptr %22, align 8, !tbaa !5
  %171 = add nsw i64 %170, 1
  %172 = mul nsw i64 %170, %37
  %173 = getelementptr %struct.doublecomplex, ptr %39, i64 %171
  %174 = getelementptr %struct.doublecomplex, ptr %173, i64 %172
  %175 = mul nsw i64 %170, %40
  %176 = getelementptr %struct.doublecomplex, ptr %42, i64 %171
  %177 = getelementptr %struct.doublecomplex, ptr %176, i64 %175
  %178 = call i32 @zlacpy_(ptr noundef nonnull @.str.13, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %174, ptr noundef nonnull %6, ptr noundef %177, ptr noundef nonnull %10) #5
  br label %179

179:                                              ; preds = %168, %164
  %180 = load i64, ptr %14, align 8, !tbaa !5
  %181 = sub i64 %180, %143
  store i64 %181, ptr %18, align 8, !tbaa !5
  %182 = load i64, ptr %22, align 8, !tbaa !5
  %183 = add i64 %40, 1
  %184 = mul i64 %182, %183
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %42, i64 %184
  %186 = call i32 @zungqr_(ptr noundef nonnull %27, ptr noundef nonnull %27, ptr noundef nonnull %27, ptr noundef %185, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef %153, ptr noundef nonnull %18, ptr noundef nonnull %25) #5
  br label %187

187:                                              ; preds = %179, %147
  br i1 %.not412520, label %188, label %190

188:                                              ; preds = %187
  %189 = call i32 @zlaset_(ptr noundef nonnull @.str.15, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %11, ptr noundef nonnull %12) #5
  br label %190

190:                                              ; preds = %188, %187
  br i1 %57, label %191, label %193

191:                                              ; preds = %190
  %192 = call i32 @zgghrd_(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %22, ptr noundef nonnull %21, 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 %25) #5
  br label %200

193:                                              ; preds = %190
  %194 = load i64, ptr %22, align 8, !tbaa !5
  %195 = mul i64 %194, %160
  %196 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %195
  %197 = mul i64 %194, %150
  %198 = getelementptr inbounds %struct.doublecomplex, ptr %39, i64 %197
  %199 = call i32 @zgghrd_(ptr noundef nonnull @.str, ptr noundef nonnull @.str, ptr noundef nonnull %27, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef %196, ptr noundef nonnull %4, ptr noundef %198, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %25) #5
  br label %200

200:                                              ; preds = %193, %191
  %.435 = phi i8 [ 69, %193 ], [ 83, %191 ]
  store i8 %.435, ptr %29, align 1, !tbaa !14
  %201 = load i64, ptr %14, align 8, !tbaa !5
  store i64 %201, ptr %18, align 8, !tbaa !5
  %202 = call i32 @zhgeqz_(ptr noundef nonnull %29, ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %22, ptr noundef nonnull %21, 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 %138, ptr noundef nonnull %25) #5
  %203 = load i64, ptr %25, align 8, !tbaa !5
  %.not421 = icmp eq i64 %203, 0
  br i1 %.not421, label %214, label %204

204:                                              ; preds = %200
  %205 = icmp slt i64 %203, 1
  %.pre = load i64, ptr %2, align 8, !tbaa !5
  %.not429 = icmp sgt i64 %203, %.pre
  %or.cond529 = select i1 %205, i1 true, i1 %.not429
  br i1 %or.cond529, label %207, label %206

206:                                              ; preds = %204
  store i64 %203, ptr %16, align 8, !tbaa !5
  br label %341

207:                                              ; preds = %204
  %208 = icmp sle i64 %203, %.pre
  %209 = shl i64 %.pre, 1
  %.not430 = icmp sgt i64 %203, %209
  %or.cond436 = or i1 %208, %.not430
  br i1 %or.cond436, label %212, label %210

210:                                              ; preds = %207
  %211 = sub nsw i64 %203, %.pre
  store i64 %211, ptr %16, align 8, !tbaa !5
  br label %341

212:                                              ; preds = %207
  %213 = add nsw i64 %.pre, 1
  store i64 %213, ptr %16, align 8, !tbaa !5
  br label %341

214:                                              ; preds = %200
  br i1 %57, label %215, label %.loopexit482

215:                                              ; preds = %214
  br i1 %56, label %216, label %.thread462

216:                                              ; preds = %215
  %. = select i1 %.not412520, i8 66, i8 76
  store i8 %., ptr %29, align 1, !tbaa !14
  %217 = call i32 @ztgevc_(ptr noundef nonnull %29, ptr noundef nonnull @.str.8, ptr noundef nonnull %28, 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 %20, ptr noundef nonnull %13, ptr noundef %138, ptr noundef nonnull %25) #5
  %218 = load i64, ptr %25, align 8, !tbaa !5
  %.not422 = icmp eq i64 %218, 0
  br i1 %.not422, label %224, label %221

.thread462:                                       ; preds = %215
  store i8 82, ptr %29, align 1, !tbaa !14
  %219 = call i32 @ztgevc_(ptr noundef nonnull %29, ptr noundef nonnull @.str.8, ptr noundef nonnull %28, 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 %20, ptr noundef nonnull %13, ptr noundef %138, ptr noundef nonnull %25) #5
  %220 = load i64, ptr %25, align 8, !tbaa !5
  %.not422463 = icmp eq i64 %220, 0
  br i1 %.not422463, label %.thread464, label %221

221:                                              ; preds = %.thread462, %216
  %222 = load i64, ptr %2, align 8, !tbaa !5
  %223 = add nsw i64 %222, 2
  store i64 %223, ptr %16, align 8, !tbaa !5
  br label %341

224:                                              ; preds = %216
  %225 = call i32 @zggbak_(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.13, ptr noundef nonnull %2, ptr noundef nonnull %22, ptr noundef nonnull %21, ptr noundef %15, ptr noundef %137, ptr noundef nonnull %2, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %25) #5
  %226 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %226, ptr %18, align 8, !tbaa !5
  %.not423493 = icmp slt i64 %226, 1
  br i1 %.not423493, label %.thread464, label %.lr.ph496.preheader

.lr.ph496.preheader:                              ; preds = %224
  %227 = shl i64 %40, 4
  br label %.lr.ph496

.lr.ph496thread-pre-split:                        ; preds = %.loopexit483
  %228 = add nuw nsw i64 %.0395494, 1
  %.pr = load i64, ptr %2, align 8, !tbaa !5
  %indvar.next = add i64 %indvar, 1
  br label %.lr.ph496

.lr.ph496:                                        ; preds = %.lr.ph496.preheader, %.lr.ph496thread-pre-split
  %indvar = phi i64 [ 0, %.lr.ph496.preheader ], [ %indvar.next, %.lr.ph496thread-pre-split ]
  %229 = phi i64 [ %226, %.lr.ph496.preheader ], [ %.pr, %.lr.ph496thread-pre-split ]
  %.0395494 = phi i64 [ 1, %.lr.ph496.preheader ], [ %228, %.lr.ph496thread-pre-split ]
  %230 = mul i64 %227, %indvar
  %scevgep = getelementptr i8, ptr %9, i64 %230
  %231 = or disjoint i64 %230, 8
  %scevgep531 = getelementptr i8, ptr %9, i64 %231
  store i64 %229, ptr %19, align 8, !tbaa !5
  %.not427484 = icmp slt i64 %229, 1
  br i1 %.not427484, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph496
  %232 = mul nsw i64 %.0395494, %40
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %42, i64 %232
  br label %233

233:                                              ; preds = %.lr.ph, %233
  %.0391486 = phi double [ 0.000000e+00, %.lr.ph ], [ %244, %233 ]
  %.0393485 = phi i64 [ 1, %.lr.ph ], [ %245, %233 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0393485
  %234 = load double, ptr %gep, align 8, !tbaa !9
  %235 = call double @d_imag(ptr noundef nonnull %gep) #5
  %236 = insertelement <2 x double> poison, double %234, i64 0
  %237 = insertelement <2 x double> %236, double %235, i64 1
  %238 = fcmp oge <2 x double> %237, zeroinitializer
  %239 = fneg <2 x double> %237
  %240 = select <2 x i1> %238, <2 x double> %237, <2 x double> %239
  %shift = shufflevector <2 x double> %240, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %241 = fadd <2 x double> %240, %shift
  %242 = extractelement <2 x double> %241, i64 0
  %243 = fcmp oge double %.0391486, %242
  %244 = select i1 %243, double %.0391486, double %242
  %245 = add nuw nsw i64 %.0393485, 1
  %246 = load i64, ptr %19, align 8, !tbaa !5
  %.not427.not = icmp slt i64 %.0393485, %246
  br i1 %.not427.not, label %233, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %233, %.lr.ph496
  %.0391.lcssa = phi double [ 0.000000e+00, %.lr.ph496 ], [ %244, %233 ]
  %247 = load double, ptr %33, align 8, !tbaa !13
  %248 = fcmp olt double %.0391.lcssa, %247
  br i1 %248, label %.loopexit483, label %249

249:                                              ; preds = %._crit_edge
  %250 = fdiv double 1.000000e+00, %.0391.lcssa
  %251 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %251, ptr %19, align 8, !tbaa !5
  %.not428487 = icmp slt i64 %251, 1
  br i1 %.not428487, label %.loopexit483, label %.lr.ph490

.lr.ph490:                                        ; preds = %249
  %252 = mul nsw i64 %.0395494, %40
  %invariant.gep491 = getelementptr %struct.doublecomplex, ptr %42, i64 %252
  %min.iters.check = icmp ult i64 %251, 12
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph490
  %253 = add nsw i64 %251, -1
  %mul.result = shl i64 %253, 4
  %254 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %255 = icmp ult ptr %254, %scevgep
  %mul.result533 = shl i64 %253, 4
  %mul.overflow534 = icmp ugt i64 %253, 1152921504606846975
  %256 = getelementptr i8, ptr %scevgep531, i64 %mul.result533
  %257 = icmp ult ptr %256, %scevgep531
  %258 = or i1 %257, %mul.overflow534
  %259 = or i1 %255, %258
  br i1 %259, label %scalar.ph.preheader, label %vector.ph

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

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.lr.ph490
  %.1394488.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph490 ], [ %ind.end, %middle.block ]
  %xtraiter = and i64 %251, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %gep492.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep491, i64 %.1394488.ph
  %263 = load <2 x double>, ptr %gep492.prol, align 8, !tbaa !13
  %264 = insertelement <2 x double> poison, double %250, i64 0
  %265 = shufflevector <2 x double> %264, <2 x double> poison, <2 x i32> zeroinitializer
  %266 = fmul <2 x double> %265, %263
  store <2 x double> %266, ptr %gep492.prol, align 8, !tbaa !13
  %267 = add nuw nsw i64 %.1394488.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.1394488.unr = phi i64 [ %.1394488.ph, %scalar.ph.preheader ], [ %267, %scalar.ph.prol ]
  %268 = icmp eq i64 %251, %.1394488.ph
  br i1 %268, label %.loopexit483, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %269 = insertelement <2 x double> poison, double %250, i64 0
  %270 = shufflevector <2 x double> %269, <2 x double> poison, <2 x i32> zeroinitializer
  %271 = insertelement <2 x double> poison, double %250, i64 0
  %272 = shufflevector <2 x double> %271, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %.1394488 = phi i64 [ %.1394488.unr, %scalar.ph.preheader.new ], [ %278, %scalar.ph ]
  %gep492 = getelementptr %struct.doublecomplex, ptr %invariant.gep491, i64 %.1394488
  %273 = load <2 x double>, ptr %gep492, align 8, !tbaa !13
  %274 = fmul <2 x double> %270, %273
  store <2 x double> %274, ptr %gep492, align 8, !tbaa !13
  %275 = add nuw i64 %.1394488, 1
  %gep492.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep491, i64 %275
  %276 = load <2 x double>, ptr %gep492.1, align 8, !tbaa !13
  %277 = fmul <2 x double> %272, %276
  store <2 x double> %277, ptr %gep492.1, align 8, !tbaa !13
  %278 = add nuw i64 %.1394488, 2
  %exitcond.not.1 = icmp eq i64 %275, %251
  br i1 %exitcond.not.1, label %.loopexit483, label %scalar.ph, !llvm.loop !20

.loopexit483:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %249, %._crit_edge
  %279 = load i64, ptr %18, align 8, !tbaa !5
  %.not423.not = icmp slt i64 %.0395494, %279
  br i1 %.not423.not, label %.lr.ph496thread-pre-split, label %.thread464, !llvm.loop !21

.thread464:                                       ; preds = %.loopexit483, %224, %.thread462
  br i1 %.not412520, label %280, label %.loopexit482

280:                                              ; preds = %.thread464
  %281 = call i32 @zggbak_(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.16, ptr noundef nonnull %2, ptr noundef nonnull %22, ptr noundef nonnull %21, ptr noundef %15, ptr noundef %137, ptr noundef nonnull %2, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %25) #5
  %282 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %282, ptr %18, align 8, !tbaa !5
  %.not424512 = icmp slt i64 %282, 1
  br i1 %.not424512, label %.loopexit482, label %.lr.ph515.preheader

.lr.ph515.preheader:                              ; preds = %280
  %283 = shl i64 %43, 4
  br label %.lr.ph515

.lr.ph515thread-pre-split:                        ; preds = %.loopexit
  %284 = add nuw nsw i64 %.1396513, 1
  %.pr524 = load i64, ptr %2, align 8, !tbaa !5
  %indvar.next538 = add i64 %indvar537, 1
  br label %.lr.ph515

.lr.ph515:                                        ; preds = %.lr.ph515.preheader, %.lr.ph515thread-pre-split
  %indvar537 = phi i64 [ 0, %.lr.ph515.preheader ], [ %indvar.next538, %.lr.ph515thread-pre-split ]
  %285 = phi i64 [ %282, %.lr.ph515.preheader ], [ %.pr524, %.lr.ph515thread-pre-split ]
  %.1396513 = phi i64 [ 1, %.lr.ph515.preheader ], [ %284, %.lr.ph515thread-pre-split ]
  %286 = mul i64 %283, %indvar537
  %scevgep539 = getelementptr i8, ptr %11, i64 %286
  %287 = or disjoint i64 %286, 8
  %scevgep543 = getelementptr i8, ptr %11, i64 %287
  store i64 %285, ptr %19, align 8, !tbaa !5
  %.not425497 = icmp slt i64 %285, 1
  br i1 %.not425497, label %._crit_edge502, label %.lr.ph501

.lr.ph501:                                        ; preds = %.lr.ph515
  %288 = mul nsw i64 %.1396513, %43
  %invariant.gep504 = getelementptr %struct.doublecomplex, ptr %45, i64 %288
  br label %289

289:                                              ; preds = %.lr.ph501, %289
  %.1392499 = phi double [ 0.000000e+00, %.lr.ph501 ], [ %300, %289 ]
  %.2498 = phi i64 [ 1, %.lr.ph501 ], [ %301, %289 ]
  %gep505 = getelementptr %struct.doublecomplex, ptr %invariant.gep504, i64 %.2498
  %290 = load double, ptr %gep505, align 8, !tbaa !9
  %291 = call double @d_imag(ptr noundef nonnull %gep505) #5
  %292 = insertelement <2 x double> poison, double %290, i64 0
  %293 = insertelement <2 x double> %292, double %291, i64 1
  %294 = fcmp oge <2 x double> %293, zeroinitializer
  %295 = fneg <2 x double> %293
  %296 = select <2 x i1> %294, <2 x double> %293, <2 x double> %295
  %shift566 = shufflevector <2 x double> %296, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %297 = fadd <2 x double> %296, %shift566
  %298 = extractelement <2 x double> %297, i64 0
  %299 = fcmp oge double %.1392499, %298
  %300 = select i1 %299, double %.1392499, double %298
  %301 = add nuw nsw i64 %.2498, 1
  %302 = load i64, ptr %19, align 8, !tbaa !5
  %.not425.not = icmp slt i64 %.2498, %302
  br i1 %.not425.not, label %289, label %._crit_edge502, !llvm.loop !22

._crit_edge502:                                   ; preds = %289, %.lr.ph515
  %.1392.lcssa = phi double [ 0.000000e+00, %.lr.ph515 ], [ %300, %289 ]
  %303 = load double, ptr %33, align 8, !tbaa !13
  %304 = fcmp olt double %.1392.lcssa, %303
  br i1 %304, label %.loopexit, label %305

305:                                              ; preds = %._crit_edge502
  %306 = fdiv double 1.000000e+00, %.1392.lcssa
  %307 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %307, ptr %19, align 8, !tbaa !5
  %.not426506 = icmp slt i64 %307, 1
  br i1 %.not426506, label %.loopexit, label %.lr.ph509

.lr.ph509:                                        ; preds = %305
  %308 = mul nsw i64 %.1396513, %43
  %invariant.gep510 = getelementptr %struct.doublecomplex, ptr %45, i64 %308
  %min.iters.check549 = icmp ult i64 %307, 12
  br i1 %min.iters.check549, label %scalar.ph548.preheader, label %vector.scevcheck536

vector.scevcheck536:                              ; preds = %.lr.ph509
  %309 = add nsw i64 %307, -1
  %mul.result541 = shl i64 %309, 4
  %310 = getelementptr i8, ptr %scevgep539, i64 %mul.result541
  %311 = icmp ult ptr %310, %scevgep539
  %mul.result545 = shl i64 %309, 4
  %mul.overflow546 = icmp ugt i64 %309, 1152921504606846975
  %312 = getelementptr i8, ptr %scevgep543, i64 %mul.result545
  %313 = icmp ult ptr %312, %scevgep543
  %314 = or i1 %313, %mul.overflow546
  %315 = or i1 %311, %314
  br i1 %315, label %scalar.ph548.preheader, label %vector.ph550

vector.ph550:                                     ; preds = %vector.scevcheck536
  %n.vec552 = and i64 %307, 2305843009213693950
  %ind.end553 = or i64 %307, 1
  %broadcast.splatinsert561 = insertelement <2 x double> poison, double %306, i64 0
  %316 = shufflevector <2 x double> %broadcast.splatinsert561, <2 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body555

vector.body555:                                   ; preds = %vector.body555, %vector.ph550
  %index556 = phi i64 [ 0, %vector.ph550 ], [ %index.next564, %vector.body555 ]
  %offset.idx557 = or disjoint i64 %index556, 1
  %317 = getelementptr %struct.doublecomplex, ptr %invariant.gep510, i64 %offset.idx557
  %wide.vec558 = load <4 x double>, ptr %317, align 8, !tbaa !13
  %interleaved.vec563 = fmul <4 x double> %316, %wide.vec558
  store <4 x double> %interleaved.vec563, ptr %317, align 8, !tbaa !13
  %index.next564 = add nuw i64 %index556, 2
  %318 = icmp eq i64 %index.next564, %n.vec552
  br i1 %318, label %middle.block547, label %vector.body555, !llvm.loop !23

middle.block547:                                  ; preds = %vector.body555
  %cmp.n565 = icmp eq i64 %307, %n.vec552
  br i1 %cmp.n565, label %.loopexit, label %scalar.ph548.preheader

scalar.ph548.preheader:                           ; preds = %middle.block547, %vector.scevcheck536, %.lr.ph509
  %.3507.ph = phi i64 [ 1, %vector.scevcheck536 ], [ 1, %.lr.ph509 ], [ %ind.end553, %middle.block547 ]
  %xtraiter568 = and i64 %307, 1
  %lcmp.mod569.not = icmp eq i64 %xtraiter568, 0
  br i1 %lcmp.mod569.not, label %scalar.ph548.prol.loopexit, label %scalar.ph548.prol

scalar.ph548.prol:                                ; preds = %scalar.ph548.preheader
  %gep511.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep510, i64 %.3507.ph
  %319 = load <2 x double>, ptr %gep511.prol, align 8, !tbaa !13
  %320 = insertelement <2 x double> poison, double %306, i64 0
  %321 = shufflevector <2 x double> %320, <2 x double> poison, <2 x i32> zeroinitializer
  %322 = fmul <2 x double> %321, %319
  store <2 x double> %322, ptr %gep511.prol, align 8, !tbaa !13
  %323 = add nuw nsw i64 %.3507.ph, 1
  br label %scalar.ph548.prol.loopexit

scalar.ph548.prol.loopexit:                       ; preds = %scalar.ph548.prol, %scalar.ph548.preheader
  %.3507.unr = phi i64 [ %.3507.ph, %scalar.ph548.preheader ], [ %323, %scalar.ph548.prol ]
  %324 = icmp eq i64 %307, %.3507.ph
  br i1 %324, label %.loopexit, label %scalar.ph548.preheader.new

scalar.ph548.preheader.new:                       ; preds = %scalar.ph548.prol.loopexit
  %325 = insertelement <2 x double> poison, double %306, i64 0
  %326 = shufflevector <2 x double> %325, <2 x double> poison, <2 x i32> zeroinitializer
  %327 = insertelement <2 x double> poison, double %306, i64 0
  %328 = shufflevector <2 x double> %327, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph548

scalar.ph548:                                     ; preds = %scalar.ph548, %scalar.ph548.preheader.new
  %.3507 = phi i64 [ %.3507.unr, %scalar.ph548.preheader.new ], [ %334, %scalar.ph548 ]
  %gep511 = getelementptr %struct.doublecomplex, ptr %invariant.gep510, i64 %.3507
  %329 = load <2 x double>, ptr %gep511, align 8, !tbaa !13
  %330 = fmul <2 x double> %326, %329
  store <2 x double> %330, ptr %gep511, align 8, !tbaa !13
  %331 = add nuw i64 %.3507, 1
  %gep511.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep510, i64 %331
  %332 = load <2 x double>, ptr %gep511.1, align 8, !tbaa !13
  %333 = fmul <2 x double> %328, %332
  store <2 x double> %333, ptr %gep511.1, align 8, !tbaa !13
  %334 = add nuw i64 %.3507, 2
  %exitcond517.not.1 = icmp eq i64 %331, %307
  br i1 %exitcond517.not.1, label %.loopexit, label %scalar.ph548, !llvm.loop !24

.loopexit:                                        ; preds = %scalar.ph548.prol.loopexit, %scalar.ph548, %middle.block547, %305, %._crit_edge502
  %335 = load i64, ptr %18, align 8, !tbaa !5
  %.not424.not = icmp slt i64 %.1396513, %335
  br i1 %.not424.not, label %.lr.ph515thread-pre-split, label %.loopexit482, !llvm.loop !25

.loopexit482:                                     ; preds = %.loopexit, %280, %.thread464, %214
  br i1 %.not418456, label %338, label %336

336:                                              ; preds = %.loopexit482
  %337 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %31, ptr noundef nonnull %23, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef %7, ptr noundef nonnull %2, ptr noundef nonnull %25) #5
  br label %338

338:                                              ; preds = %336, %.loopexit482
  br i1 %.not419461, label %341, label %339

339:                                              ; preds = %338
  %340 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %32, ptr noundef nonnull %24, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef %8, ptr noundef nonnull %2, ptr noundef nonnull %25) #5
  br label %341

341:                                              ; preds = %338, %339, %206, %212, %210, %221
  store double %94, ptr %13, align 8, !tbaa !9
  store double 0.000000e+00, ptr %95, align 8, !tbaa !12
  br label %342

342:                                              ; preds = %102, %101, %341, %.thread449
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  ret i32 0
}

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

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!11, !11, i64 0}
!14 = !{!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, !18}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16, !18, !19}
!24 = distinct !{!24, !16, !18}
!25 = distinct !{!25, !16}


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