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

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

%struct.doublecomplex = type { double, double }

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

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

170:                                              ; preds = %29
  store i64 1, ptr %102, align 8, !tbaa !9
  store i64 0, ptr %90, align 8, !tbaa !9
  br label %178

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

175:                                              ; preds = %171
  store i64 2, ptr %102, align 8, !tbaa !9
  store i64 1, ptr %90, align 8, !tbaa !9
  br label %177

176:                                              ; preds = %171
  store i64 -1, ptr %102, align 8, !tbaa !9
  store i64 0, ptr %90, align 8, !tbaa !9
  br label %177

177:                                              ; preds = %176, %175
  br label %178

178:                                              ; preds = %177, %170
  %179 = load ptr, ptr %33, align 8, !tbaa !5
  %180 = call i64 @lsame_(ptr noundef %179, ptr noundef @.str)
  %181 = icmp ne i64 %180, 0
  br i1 %181, label %182, label %183

182:                                              ; preds = %178
  store i64 1, ptr %103, align 8, !tbaa !9
  store i64 0, ptr %91, align 8, !tbaa !9
  br label %190

183:                                              ; preds = %178
  %184 = load ptr, ptr %33, align 8, !tbaa !5
  %185 = call i64 @lsame_(ptr noundef %184, ptr noundef @.str.1)
  %186 = icmp ne i64 %185, 0
  br i1 %186, label %187, label %188

187:                                              ; preds = %183
  store i64 2, ptr %103, align 8, !tbaa !9
  store i64 1, ptr %91, align 8, !tbaa !9
  br label %189

188:                                              ; preds = %183
  store i64 -1, ptr %103, align 8, !tbaa !9
  store i64 0, ptr %91, align 8, !tbaa !9
  br label %189

189:                                              ; preds = %188, %187
  br label %190

190:                                              ; preds = %189, %182
  %191 = load i64, ptr %90, align 8, !tbaa !9
  %192 = icmp ne i64 %191, 0
  br i1 %192, label %196, label %193

193:                                              ; preds = %190
  %194 = load i64, ptr %91, align 8, !tbaa !9
  %195 = icmp ne i64 %194, 0
  br label %196

196:                                              ; preds = %193, %190
  %197 = phi i1 [ true, %190 ], [ %195, %193 ]
  %198 = zext i1 %197 to i32
  %199 = sext i32 %198 to i64
  store i64 %199, ptr %84, align 8, !tbaa !9
  %200 = load ptr, ptr %31, align 8, !tbaa !5
  %201 = call i64 @lsame_(ptr noundef %200, ptr noundef @.str)
  %202 = icmp ne i64 %201, 0
  br i1 %202, label %207, label %203

203:                                              ; preds = %196
  %204 = load ptr, ptr %31, align 8, !tbaa !5
  %205 = call i64 @lsame_(ptr noundef %204, ptr noundef @.str.2)
  %206 = icmp ne i64 %205, 0
  br label %207

207:                                              ; preds = %203, %196
  %208 = phi i1 [ true, %196 ], [ %206, %203 ]
  %209 = zext i1 %208 to i32
  %210 = sext i32 %209 to i64
  store i64 %210, ptr %95, align 8, !tbaa !9
  %211 = load ptr, ptr %34, align 8, !tbaa !5
  %212 = call i64 @lsame_(ptr noundef %211, ptr noundef @.str)
  store i64 %212, ptr %110, align 8, !tbaa !9
  %213 = load ptr, ptr %34, align 8, !tbaa !5
  %214 = call i64 @lsame_(ptr noundef %213, ptr noundef @.str.3)
  store i64 %214, ptr %106, align 8, !tbaa !9
  %215 = load ptr, ptr %34, align 8, !tbaa !5
  %216 = call i64 @lsame_(ptr noundef %215, ptr noundef @.str.1)
  store i64 %216, ptr %113, align 8, !tbaa !9
  %217 = load ptr, ptr %34, align 8, !tbaa !5
  %218 = call i64 @lsame_(ptr noundef %217, ptr noundef @.str.4)
  store i64 %218, ptr %104, align 8, !tbaa !9
  %219 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 0, ptr %219, align 8, !tbaa !9
  %220 = load ptr, ptr %55, align 8, !tbaa !5
  %221 = load i64, ptr %220, align 8, !tbaa !9
  %222 = icmp eq i64 %221, -1
  %223 = zext i1 %222 to i32
  %224 = sext i32 %223 to i64
  store i64 %224, ptr %112, align 8, !tbaa !9
  %225 = load i64, ptr %95, align 8, !tbaa !9
  %226 = icmp ne i64 %225, 0
  br i1 %226, label %237, label %227

227:                                              ; preds = %207
  %228 = load ptr, ptr %31, align 8, !tbaa !5
  %229 = call i64 @lsame_(ptr noundef %228, ptr noundef @.str.5)
  %230 = icmp ne i64 %229, 0
  br i1 %230, label %237, label %231

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

235:                                              ; preds = %231
  %236 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -1, ptr %236, align 8, !tbaa !9
  br label %335

237:                                              ; preds = %231, %227, %207
  %238 = load i64, ptr %102, align 8, !tbaa !9
  %239 = icmp sle i64 %238, 0
  br i1 %239, label %240, label %242

240:                                              ; preds = %237
  %241 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -2, ptr %241, align 8, !tbaa !9
  br label %334

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

245:                                              ; preds = %242
  %246 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -3, ptr %246, align 8, !tbaa !9
  br label %333

247:                                              ; preds = %242
  %248 = load i64, ptr %110, align 8, !tbaa !9
  %249 = icmp ne i64 %248, 0
  br i1 %249, label %261, label %250

250:                                              ; preds = %247
  %251 = load i64, ptr %106, align 8, !tbaa !9
  %252 = icmp ne i64 %251, 0
  br i1 %252, label %261, label %253

253:                                              ; preds = %250
  %254 = load i64, ptr %104, align 8, !tbaa !9
  %255 = icmp ne i64 %254, 0
  br i1 %255, label %261, label %256

256:                                              ; preds = %253
  %257 = load i64, ptr %113, align 8, !tbaa !9
  %258 = icmp ne i64 %257, 0
  br i1 %258, label %261, label %259

259:                                              ; preds = %256
  %260 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -4, ptr %260, align 8, !tbaa !9
  br label %332

261:                                              ; preds = %256, %253, %250, %247
  %262 = load ptr, ptr %35, align 8, !tbaa !5
  %263 = load i64, ptr %262, align 8, !tbaa !9
  %264 = icmp slt i64 %263, 0
  br i1 %264, label %265, label %267

265:                                              ; preds = %261
  %266 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -5, ptr %266, align 8, !tbaa !9
  br label %331

267:                                              ; preds = %261
  %268 = load ptr, ptr %37, align 8, !tbaa !5
  %269 = load i64, ptr %268, align 8, !tbaa !9
  %270 = load ptr, ptr %35, align 8, !tbaa !5
  %271 = load i64, ptr %270, align 8, !tbaa !9
  %272 = icmp sge i64 1, %271
  br i1 %272, label %273, label %274

273:                                              ; preds = %267
  br label %277

274:                                              ; preds = %267
  %275 = load ptr, ptr %35, align 8, !tbaa !5
  %276 = load i64, ptr %275, align 8, !tbaa !9
  br label %277

277:                                              ; preds = %274, %273
  %278 = phi i64 [ 1, %273 ], [ %276, %274 ]
  %279 = icmp slt i64 %269, %278
  br i1 %279, label %280, label %282

280:                                              ; preds = %277
  %281 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -7, ptr %281, align 8, !tbaa !9
  br label %330

282:                                              ; preds = %277
  %283 = load ptr, ptr %39, align 8, !tbaa !5
  %284 = load i64, ptr %283, align 8, !tbaa !9
  %285 = load ptr, ptr %35, align 8, !tbaa !5
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = icmp sge i64 1, %286
  br i1 %287, label %288, label %289

288:                                              ; preds = %282
  br label %292

289:                                              ; preds = %282
  %290 = load ptr, ptr %35, align 8, !tbaa !5
  %291 = load i64, ptr %290, align 8, !tbaa !9
  br label %292

292:                                              ; preds = %289, %288
  %293 = phi i64 [ 1, %288 ], [ %291, %289 ]
  %294 = icmp slt i64 %284, %293
  br i1 %294, label %295, label %297

295:                                              ; preds = %292
  %296 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -9, ptr %296, align 8, !tbaa !9
  br label %329

297:                                              ; preds = %292
  %298 = load ptr, ptr %43, align 8, !tbaa !5
  %299 = load i64, ptr %298, align 8, !tbaa !9
  %300 = icmp slt i64 %299, 1
  br i1 %300, label %310, label %301

301:                                              ; preds = %297
  %302 = load i64, ptr %90, align 8, !tbaa !9
  %303 = icmp ne i64 %302, 0
  br i1 %303, label %304, label %312

304:                                              ; preds = %301
  %305 = load ptr, ptr %43, align 8, !tbaa !5
  %306 = load i64, ptr %305, align 8, !tbaa !9
  %307 = load ptr, ptr %35, align 8, !tbaa !5
  %308 = load i64, ptr %307, align 8, !tbaa !9
  %309 = icmp slt i64 %306, %308
  br i1 %309, label %310, label %312

310:                                              ; preds = %304, %297
  %311 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -13, ptr %311, align 8, !tbaa !9
  br label %328

312:                                              ; preds = %304, %301
  %313 = load ptr, ptr %45, align 8, !tbaa !5
  %314 = load i64, ptr %313, align 8, !tbaa !9
  %315 = icmp slt i64 %314, 1
  br i1 %315, label %325, label %316

316:                                              ; preds = %312
  %317 = load i64, ptr %91, align 8, !tbaa !9
  %318 = icmp ne i64 %317, 0
  br i1 %318, label %319, label %327

319:                                              ; preds = %316
  %320 = load ptr, ptr %45, align 8, !tbaa !5
  %321 = load i64, ptr %320, align 8, !tbaa !9
  %322 = load ptr, ptr %35, align 8, !tbaa !5
  %323 = load i64, ptr %322, align 8, !tbaa !9
  %324 = icmp slt i64 %321, %323
  br i1 %324, label %325, label %327

325:                                              ; preds = %319, %312
  %326 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -15, ptr %326, align 8, !tbaa !9
  br label %327

327:                                              ; preds = %325, %319, %316
  br label %328

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

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

330:                                              ; preds = %329, %280
  br label %331

331:                                              ; preds = %330, %265
  br label %332

332:                                              ; preds = %331, %259
  br label %333

333:                                              ; preds = %332, %245
  br label %334

334:                                              ; preds = %333, %240
  br label %335

335:                                              ; preds = %334, %235
  %336 = load ptr, ptr %59, align 8, !tbaa !5
  %337 = load i64, ptr %336, align 8, !tbaa !9
  %338 = icmp eq i64 %337, 0
  br i1 %338, label %339, label %451

339:                                              ; preds = %335
  %340 = load ptr, ptr %35, align 8, !tbaa !5
  %341 = load i64, ptr %340, align 8, !tbaa !9
  %342 = icmp eq i64 %341, 0
  br i1 %342, label %343, label %344

343:                                              ; preds = %339
  store i64 1, ptr %108, align 8, !tbaa !9
  store i64 1, ptr %109, align 8, !tbaa !9
  br label %432

344:                                              ; preds = %339
  %345 = load ptr, ptr %35, align 8, !tbaa !5
  %346 = load i64, ptr %345, align 8, !tbaa !9
  %347 = shl i64 %346, 1
  store i64 %347, ptr %108, align 8, !tbaa !9
  %348 = load i64, ptr %106, align 8, !tbaa !9
  %349 = icmp ne i64 %348, 0
  br i1 %349, label %350, label %354

350:                                              ; preds = %344
  %351 = load ptr, ptr %35, align 8, !tbaa !5
  %352 = load i64, ptr %351, align 8, !tbaa !9
  %353 = shl i64 %352, 2
  store i64 %353, ptr %108, align 8, !tbaa !9
  br label %369

354:                                              ; preds = %344
  %355 = load i64, ptr %113, align 8, !tbaa !9
  %356 = icmp ne i64 %355, 0
  br i1 %356, label %360, label %357

357:                                              ; preds = %354
  %358 = load i64, ptr %104, align 8, !tbaa !9
  %359 = icmp ne i64 %358, 0
  br i1 %359, label %360, label %368

360:                                              ; preds = %357, %354
  %361 = load ptr, ptr %35, align 8, !tbaa !5
  %362 = load i64, ptr %361, align 8, !tbaa !9
  %363 = shl i64 %362, 1
  %364 = load ptr, ptr %35, align 8, !tbaa !5
  %365 = load i64, ptr %364, align 8, !tbaa !9
  %366 = add nsw i64 %365, 1
  %367 = mul nsw i64 %363, %366
  store i64 %367, ptr %108, align 8, !tbaa !9
  br label %368

368:                                              ; preds = %360, %357
  br label %369

369:                                              ; preds = %368, %350
  %370 = load i64, ptr %108, align 8, !tbaa !9
  store i64 %370, ptr %109, align 8, !tbaa !9
  %371 = load i64, ptr %109, align 8, !tbaa !9
  store i64 %371, ptr %68, align 8, !tbaa !9
  %372 = load ptr, ptr %35, align 8, !tbaa !5
  %373 = load i64, ptr %372, align 8, !tbaa !9
  %374 = load ptr, ptr %35, align 8, !tbaa !5
  %375 = load i64, ptr %374, align 8, !tbaa !9
  %376 = load ptr, ptr %35, align 8, !tbaa !5
  %377 = load ptr, ptr %35, align 8, !tbaa !5
  %378 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.6, ptr noundef @.str.7, ptr noundef %376, ptr noundef @c__1, ptr noundef %377, ptr noundef @c__0)
  %379 = mul nsw i64 %375, %378
  %380 = add nsw i64 %373, %379
  store i64 %380, ptr %69, align 8, !tbaa !9
  %381 = load i64, ptr %68, align 8, !tbaa !9
  %382 = load i64, ptr %69, align 8, !tbaa !9
  %383 = icmp sge i64 %381, %382
  br i1 %383, label %384, label %386

384:                                              ; preds = %369
  %385 = load i64, ptr %68, align 8, !tbaa !9
  br label %388

386:                                              ; preds = %369
  %387 = load i64, ptr %69, align 8, !tbaa !9
  br label %388

388:                                              ; preds = %386, %384
  %389 = phi i64 [ %385, %384 ], [ %387, %386 ]
  store i64 %389, ptr %109, align 8, !tbaa !9
  %390 = load i64, ptr %109, align 8, !tbaa !9
  store i64 %390, ptr %68, align 8, !tbaa !9
  %391 = load ptr, ptr %35, align 8, !tbaa !5
  %392 = load i64, ptr %391, align 8, !tbaa !9
  %393 = load ptr, ptr %35, align 8, !tbaa !5
  %394 = load i64, ptr %393, align 8, !tbaa !9
  %395 = load ptr, ptr %35, align 8, !tbaa !5
  %396 = load ptr, ptr %35, align 8, !tbaa !5
  %397 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.8, ptr noundef @.str.7, ptr noundef %395, ptr noundef @c__1, ptr noundef %396, ptr noundef @c__0)
  %398 = mul nsw i64 %394, %397
  %399 = add nsw i64 %392, %398
  store i64 %399, ptr %69, align 8, !tbaa !9
  %400 = load i64, ptr %68, align 8, !tbaa !9
  %401 = load i64, ptr %69, align 8, !tbaa !9
  %402 = icmp sge i64 %400, %401
  br i1 %402, label %403, label %405

403:                                              ; preds = %388
  %404 = load i64, ptr %68, align 8, !tbaa !9
  br label %407

405:                                              ; preds = %388
  %406 = load i64, ptr %69, align 8, !tbaa !9
  br label %407

407:                                              ; preds = %405, %403
  %408 = phi i64 [ %404, %403 ], [ %406, %405 ]
  store i64 %408, ptr %109, align 8, !tbaa !9
  %409 = load i64, ptr %90, align 8, !tbaa !9
  %410 = icmp ne i64 %409, 0
  br i1 %410, label %411, label %431

411:                                              ; preds = %407
  %412 = load i64, ptr %109, align 8, !tbaa !9
  store i64 %412, ptr %68, align 8, !tbaa !9
  %413 = load ptr, ptr %35, align 8, !tbaa !5
  %414 = load i64, ptr %413, align 8, !tbaa !9
  %415 = load ptr, ptr %35, align 8, !tbaa !5
  %416 = load i64, ptr %415, align 8, !tbaa !9
  %417 = load ptr, ptr %35, align 8, !tbaa !5
  %418 = load ptr, ptr %35, align 8, !tbaa !5
  %419 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.9, ptr noundef @.str.7, ptr noundef %417, ptr noundef @c__1, ptr noundef %418, ptr noundef @c__0)
  %420 = mul nsw i64 %416, %419
  %421 = add nsw i64 %414, %420
  store i64 %421, ptr %69, align 8, !tbaa !9
  %422 = load i64, ptr %68, align 8, !tbaa !9
  %423 = load i64, ptr %69, align 8, !tbaa !9
  %424 = icmp sge i64 %422, %423
  br i1 %424, label %425, label %427

425:                                              ; preds = %411
  %426 = load i64, ptr %68, align 8, !tbaa !9
  br label %429

427:                                              ; preds = %411
  %428 = load i64, ptr %69, align 8, !tbaa !9
  br label %429

429:                                              ; preds = %427, %425
  %430 = phi i64 [ %426, %425 ], [ %428, %427 ]
  store i64 %430, ptr %109, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %429, %407
  br label %432

432:                                              ; preds = %431, %343
  %433 = load i64, ptr %109, align 8, !tbaa !9
  %434 = sitofp i64 %433 to double
  %435 = load ptr, ptr %54, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %435, i64 1
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %436, i32 0, i32 0
  store double %434, ptr %437, align 8, !tbaa !11
  %438 = load ptr, ptr %54, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %438, i64 1
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %439, i32 0, i32 1
  store double 0.000000e+00, ptr %440, align 8, !tbaa !14
  %441 = load ptr, ptr %55, align 8, !tbaa !5
  %442 = load i64, ptr %441, align 8, !tbaa !9
  %443 = load i64, ptr %108, align 8, !tbaa !9
  %444 = icmp slt i64 %442, %443
  br i1 %444, label %445, label %450

445:                                              ; preds = %432
  %446 = load i64, ptr %112, align 8, !tbaa !9
  %447 = icmp ne i64 %446, 0
  br i1 %447, label %450, label %448

448:                                              ; preds = %445
  %449 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 -25, ptr %449, align 8, !tbaa !9
  br label %450

450:                                              ; preds = %448, %445, %432
  br label %451

451:                                              ; preds = %450, %335
  %452 = load ptr, ptr %59, align 8, !tbaa !5
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = icmp ne i64 %453, 0
  br i1 %454, label %455, label %460

455:                                              ; preds = %451
  %456 = load ptr, ptr %59, align 8, !tbaa !5
  %457 = load i64, ptr %456, align 8, !tbaa !9
  %458 = sub nsw i64 0, %457
  store i64 %458, ptr %68, align 8, !tbaa !9
  %459 = call i32 @xerbla_(ptr noundef @.str.10, ptr noundef %68)
  store i32 0, ptr %30, align 4
  store i32 1, ptr %114, align 4
  br label %1408

460:                                              ; preds = %451
  %461 = load i64, ptr %112, align 8, !tbaa !9
  %462 = icmp ne i64 %461, 0
  br i1 %462, label %463, label %464

463:                                              ; preds = %460
  store i32 0, ptr %30, align 4
  store i32 1, ptr %114, align 4
  br label %1408

464:                                              ; preds = %460
  br label %465

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

469:                                              ; preds = %465
  store i32 0, ptr %30, align 4
  store i32 1, ptr %114, align 4
  br label %1408

470:                                              ; preds = %465
  %471 = call double @dlamch_(ptr noundef @.str.2)
  store double %471, ptr %83, align 8, !tbaa !15
  %472 = call double @dlamch_(ptr noundef @.str.5)
  store double %472, ptr %111, align 8, !tbaa !15
  %473 = load double, ptr %111, align 8, !tbaa !15
  %474 = fdiv double 1.000000e+00, %473
  store double %474, ptr %101, align 8, !tbaa !15
  %475 = call i32 @dlabad_(ptr noundef %111, ptr noundef %101)
  %476 = load double, ptr %111, align 8, !tbaa !15
  %477 = call double @sqrt(double noundef %476) #4
  %478 = load double, ptr %83, align 8, !tbaa !15
  %479 = fdiv double %477, %478
  store double %479, ptr %111, align 8, !tbaa !15
  %480 = load double, ptr %111, align 8, !tbaa !15
  %481 = fdiv double 1.000000e+00, %480
  store double %481, ptr %101, align 8, !tbaa !15
  %482 = load ptr, ptr %35, align 8, !tbaa !5
  %483 = load ptr, ptr %35, align 8, !tbaa !5
  %484 = load ptr, ptr %36, align 8, !tbaa !5
  %485 = load i64, ptr %61, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %484, i64 %485
  %487 = load ptr, ptr %37, align 8, !tbaa !5
  %488 = load ptr, ptr %56, align 8, !tbaa !5
  %489 = getelementptr inbounds double, ptr %488, i64 1
  %490 = call double @zlange_(ptr noundef @.str.11, ptr noundef %482, ptr noundef %483, ptr noundef %486, ptr noundef %487, ptr noundef %489)
  store double %490, ptr %85, align 8, !tbaa !15
  store i64 0, ptr %97, align 8, !tbaa !9
  %491 = load double, ptr %85, align 8, !tbaa !15
  %492 = fcmp ogt double %491, 0.000000e+00
  br i1 %492, label %493, label %499

493:                                              ; preds = %470
  %494 = load double, ptr %85, align 8, !tbaa !15
  %495 = load double, ptr %111, align 8, !tbaa !15
  %496 = fcmp olt double %494, %495
  br i1 %496, label %497, label %499

497:                                              ; preds = %493
  %498 = load double, ptr %111, align 8, !tbaa !15
  store double %498, ptr %105, align 8, !tbaa !15
  store i64 1, ptr %97, align 8, !tbaa !9
  br label %506

499:                                              ; preds = %493, %470
  %500 = load double, ptr %85, align 8, !tbaa !15
  %501 = load double, ptr %101, align 8, !tbaa !15
  %502 = fcmp ogt double %500, %501
  br i1 %502, label %503, label %505

503:                                              ; preds = %499
  %504 = load double, ptr %101, align 8, !tbaa !15
  store double %504, ptr %105, align 8, !tbaa !15
  store i64 1, ptr %97, align 8, !tbaa !9
  br label %505

505:                                              ; preds = %503, %499
  br label %506

506:                                              ; preds = %505, %497
  %507 = load i64, ptr %97, align 8, !tbaa !9
  %508 = icmp ne i64 %507, 0
  br i1 %508, label %509, label %517

509:                                              ; preds = %506
  %510 = load ptr, ptr %35, align 8, !tbaa !5
  %511 = load ptr, ptr %35, align 8, !tbaa !5
  %512 = load ptr, ptr %36, align 8, !tbaa !5
  %513 = load i64, ptr %61, align 8, !tbaa !9
  %514 = getelementptr inbounds %struct.doublecomplex, ptr %512, i64 %513
  %515 = load ptr, ptr %37, align 8, !tbaa !5
  %516 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %85, ptr noundef %105, ptr noundef %510, ptr noundef %511, ptr noundef %514, ptr noundef %515, ptr noundef %87)
  br label %517

517:                                              ; preds = %509, %506
  %518 = load ptr, ptr %35, align 8, !tbaa !5
  %519 = load ptr, ptr %35, align 8, !tbaa !5
  %520 = load ptr, ptr %38, align 8, !tbaa !5
  %521 = load i64, ptr %63, align 8, !tbaa !9
  %522 = getelementptr inbounds %struct.doublecomplex, ptr %520, i64 %521
  %523 = load ptr, ptr %39, align 8, !tbaa !5
  %524 = load ptr, ptr %56, align 8, !tbaa !5
  %525 = getelementptr inbounds double, ptr %524, i64 1
  %526 = call double @zlange_(ptr noundef @.str.11, ptr noundef %518, ptr noundef %519, ptr noundef %522, ptr noundef %523, ptr noundef %525)
  store double %526, ptr %86, align 8, !tbaa !15
  store i64 0, ptr %98, align 8, !tbaa !9
  %527 = load double, ptr %86, align 8, !tbaa !15
  %528 = fcmp ogt double %527, 0.000000e+00
  br i1 %528, label %529, label %535

529:                                              ; preds = %517
  %530 = load double, ptr %86, align 8, !tbaa !15
  %531 = load double, ptr %111, align 8, !tbaa !15
  %532 = fcmp olt double %530, %531
  br i1 %532, label %533, label %535

533:                                              ; preds = %529
  %534 = load double, ptr %111, align 8, !tbaa !15
  store double %534, ptr %107, align 8, !tbaa !15
  store i64 1, ptr %98, align 8, !tbaa !9
  br label %542

535:                                              ; preds = %529, %517
  %536 = load double, ptr %86, align 8, !tbaa !15
  %537 = load double, ptr %101, align 8, !tbaa !15
  %538 = fcmp ogt double %536, %537
  br i1 %538, label %539, label %541

539:                                              ; preds = %535
  %540 = load double, ptr %101, align 8, !tbaa !15
  store double %540, ptr %107, align 8, !tbaa !15
  store i64 1, ptr %98, align 8, !tbaa !9
  br label %541

541:                                              ; preds = %539, %535
  br label %542

542:                                              ; preds = %541, %533
  %543 = load i64, ptr %98, align 8, !tbaa !9
  %544 = icmp ne i64 %543, 0
  br i1 %544, label %545, label %553

545:                                              ; preds = %542
  %546 = load ptr, ptr %35, align 8, !tbaa !5
  %547 = load ptr, ptr %35, align 8, !tbaa !5
  %548 = load ptr, ptr %38, align 8, !tbaa !5
  %549 = load i64, ptr %63, align 8, !tbaa !9
  %550 = getelementptr inbounds %struct.doublecomplex, ptr %548, i64 %549
  %551 = load ptr, ptr %39, align 8, !tbaa !5
  %552 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %86, ptr noundef %107, ptr noundef %546, ptr noundef %547, ptr noundef %550, ptr noundef %551, ptr noundef %87)
  br label %553

553:                                              ; preds = %545, %542
  %554 = load ptr, ptr %31, align 8, !tbaa !5
  %555 = load ptr, ptr %35, align 8, !tbaa !5
  %556 = load ptr, ptr %36, align 8, !tbaa !5
  %557 = load i64, ptr %61, align 8, !tbaa !9
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %556, i64 %557
  %559 = load ptr, ptr %37, align 8, !tbaa !5
  %560 = load ptr, ptr %38, align 8, !tbaa !5
  %561 = load i64, ptr %63, align 8, !tbaa !9
  %562 = getelementptr inbounds %struct.doublecomplex, ptr %560, i64 %561
  %563 = load ptr, ptr %39, align 8, !tbaa !5
  %564 = load ptr, ptr %46, align 8, !tbaa !5
  %565 = load ptr, ptr %47, align 8, !tbaa !5
  %566 = load ptr, ptr %48, align 8, !tbaa !5
  %567 = getelementptr inbounds double, ptr %566, i64 1
  %568 = load ptr, ptr %49, align 8, !tbaa !5
  %569 = getelementptr inbounds double, ptr %568, i64 1
  %570 = load ptr, ptr %56, align 8, !tbaa !5
  %571 = getelementptr inbounds double, ptr %570, i64 1
  %572 = call i32 @zggbal_(ptr noundef %554, ptr noundef %555, ptr noundef %558, ptr noundef %559, ptr noundef %562, ptr noundef %563, ptr noundef %564, ptr noundef %565, ptr noundef %567, ptr noundef %569, ptr noundef %571, ptr noundef %87)
  %573 = load ptr, ptr %35, align 8, !tbaa !5
  %574 = load ptr, ptr %35, align 8, !tbaa !5
  %575 = load ptr, ptr %36, align 8, !tbaa !5
  %576 = load i64, ptr %61, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %575, i64 %576
  %578 = load ptr, ptr %37, align 8, !tbaa !5
  %579 = load ptr, ptr %56, align 8, !tbaa !5
  %580 = getelementptr inbounds double, ptr %579, i64 1
  %581 = call double @zlange_(ptr noundef @.str.13, ptr noundef %573, ptr noundef %574, ptr noundef %577, ptr noundef %578, ptr noundef %580)
  %582 = load ptr, ptr %50, align 8, !tbaa !5
  store double %581, ptr %582, align 8, !tbaa !15
  %583 = load i64, ptr %97, align 8, !tbaa !9
  %584 = icmp ne i64 %583, 0
  br i1 %584, label %585, label %597

585:                                              ; preds = %553
  %586 = load ptr, ptr %50, align 8, !tbaa !5
  %587 = load double, ptr %586, align 8, !tbaa !15
  %588 = load ptr, ptr %56, align 8, !tbaa !5
  %589 = getelementptr inbounds double, ptr %588, i64 1
  store double %587, ptr %589, align 8, !tbaa !15
  %590 = load ptr, ptr %56, align 8, !tbaa !5
  %591 = getelementptr inbounds double, ptr %590, i64 1
  %592 = call i32 @dlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %105, ptr noundef %85, ptr noundef @c__1, ptr noundef @c__1, ptr noundef %591, ptr noundef @c__1, ptr noundef %87)
  %593 = load ptr, ptr %56, align 8, !tbaa !5
  %594 = getelementptr inbounds double, ptr %593, i64 1
  %595 = load double, ptr %594, align 8, !tbaa !15
  %596 = load ptr, ptr %50, align 8, !tbaa !5
  store double %595, ptr %596, align 8, !tbaa !15
  br label %597

597:                                              ; preds = %585, %553
  %598 = load ptr, ptr %35, align 8, !tbaa !5
  %599 = load ptr, ptr %35, align 8, !tbaa !5
  %600 = load ptr, ptr %38, align 8, !tbaa !5
  %601 = load i64, ptr %63, align 8, !tbaa !9
  %602 = getelementptr inbounds %struct.doublecomplex, ptr %600, i64 %601
  %603 = load ptr, ptr %39, align 8, !tbaa !5
  %604 = load ptr, ptr %56, align 8, !tbaa !5
  %605 = getelementptr inbounds double, ptr %604, i64 1
  %606 = call double @zlange_(ptr noundef @.str.13, ptr noundef %598, ptr noundef %599, ptr noundef %602, ptr noundef %603, ptr noundef %605)
  %607 = load ptr, ptr %51, align 8, !tbaa !5
  store double %606, ptr %607, align 8, !tbaa !15
  %608 = load i64, ptr %98, align 8, !tbaa !9
  %609 = icmp ne i64 %608, 0
  br i1 %609, label %610, label %622

610:                                              ; preds = %597
  %611 = load ptr, ptr %51, align 8, !tbaa !5
  %612 = load double, ptr %611, align 8, !tbaa !15
  %613 = load ptr, ptr %56, align 8, !tbaa !5
  %614 = getelementptr inbounds double, ptr %613, i64 1
  store double %612, ptr %614, align 8, !tbaa !15
  %615 = load ptr, ptr %56, align 8, !tbaa !5
  %616 = getelementptr inbounds double, ptr %615, i64 1
  %617 = call i32 @dlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %107, ptr noundef %86, ptr noundef @c__1, ptr noundef @c__1, ptr noundef %616, ptr noundef @c__1, ptr noundef %87)
  %618 = load ptr, ptr %56, align 8, !tbaa !5
  %619 = getelementptr inbounds double, ptr %618, i64 1
  %620 = load double, ptr %619, align 8, !tbaa !15
  %621 = load ptr, ptr %51, align 8, !tbaa !5
  store double %620, ptr %621, align 8, !tbaa !15
  br label %622

622:                                              ; preds = %610, %597
  %623 = load ptr, ptr %47, align 8, !tbaa !5
  %624 = load i64, ptr %623, align 8, !tbaa !9
  %625 = add nsw i64 %624, 1
  %626 = load ptr, ptr %46, align 8, !tbaa !5
  %627 = load i64, ptr %626, align 8, !tbaa !9
  %628 = sub nsw i64 %625, %627
  store i64 %628, ptr %96, align 8, !tbaa !9
  %629 = load i64, ptr %84, align 8, !tbaa !9
  %630 = icmp ne i64 %629, 0
  br i1 %630, label %634, label %631

631:                                              ; preds = %622
  %632 = load i64, ptr %110, align 8, !tbaa !9
  %633 = icmp ne i64 %632, 0
  br i1 %633, label %641, label %634

634:                                              ; preds = %631, %622
  %635 = load ptr, ptr %35, align 8, !tbaa !5
  %636 = load i64, ptr %635, align 8, !tbaa !9
  %637 = add nsw i64 %636, 1
  %638 = load ptr, ptr %46, align 8, !tbaa !5
  %639 = load i64, ptr %638, align 8, !tbaa !9
  %640 = sub nsw i64 %637, %639
  store i64 %640, ptr %94, align 8, !tbaa !9
  br label %643

641:                                              ; preds = %631
  %642 = load i64, ptr %96, align 8, !tbaa !9
  store i64 %642, ptr %94, align 8, !tbaa !9
  br label %643

643:                                              ; preds = %641, %634
  store i64 1, ptr %88, align 8, !tbaa !9
  %644 = load i64, ptr %88, align 8, !tbaa !9
  %645 = load i64, ptr %96, align 8, !tbaa !9
  %646 = add nsw i64 %644, %645
  store i64 %646, ptr %92, align 8, !tbaa !9
  %647 = load ptr, ptr %55, align 8, !tbaa !5
  %648 = load i64, ptr %647, align 8, !tbaa !9
  %649 = add nsw i64 %648, 1
  %650 = load i64, ptr %92, align 8, !tbaa !9
  %651 = sub nsw i64 %649, %650
  store i64 %651, ptr %68, align 8, !tbaa !9
  %652 = load ptr, ptr %38, align 8, !tbaa !5
  %653 = load ptr, ptr %46, align 8, !tbaa !5
  %654 = load i64, ptr %653, align 8, !tbaa !9
  %655 = load ptr, ptr %46, align 8, !tbaa !5
  %656 = load i64, ptr %655, align 8, !tbaa !9
  %657 = load i64, ptr %62, align 8, !tbaa !9
  %658 = mul nsw i64 %656, %657
  %659 = add nsw i64 %654, %658
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %652, i64 %659
  %661 = load ptr, ptr %39, align 8, !tbaa !5
  %662 = load ptr, ptr %54, align 8, !tbaa !5
  %663 = load i64, ptr %88, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.doublecomplex, ptr %662, i64 %663
  %665 = load ptr, ptr %54, align 8, !tbaa !5
  %666 = load i64, ptr %92, align 8, !tbaa !9
  %667 = getelementptr inbounds %struct.doublecomplex, ptr %665, i64 %666
  %668 = call i32 @zgeqrf_(ptr noundef %96, ptr noundef %94, ptr noundef %660, ptr noundef %661, ptr noundef %664, ptr noundef %667, ptr noundef %68, ptr noundef %87)
  %669 = load ptr, ptr %55, align 8, !tbaa !5
  %670 = load i64, ptr %669, align 8, !tbaa !9
  %671 = add nsw i64 %670, 1
  %672 = load i64, ptr %92, align 8, !tbaa !9
  %673 = sub nsw i64 %671, %672
  store i64 %673, ptr %68, align 8, !tbaa !9
  %674 = load ptr, ptr %38, align 8, !tbaa !5
  %675 = load ptr, ptr %46, align 8, !tbaa !5
  %676 = load i64, ptr %675, align 8, !tbaa !9
  %677 = load ptr, ptr %46, align 8, !tbaa !5
  %678 = load i64, ptr %677, align 8, !tbaa !9
  %679 = load i64, ptr %62, align 8, !tbaa !9
  %680 = mul nsw i64 %678, %679
  %681 = add nsw i64 %676, %680
  %682 = getelementptr inbounds %struct.doublecomplex, ptr %674, i64 %681
  %683 = load ptr, ptr %39, align 8, !tbaa !5
  %684 = load ptr, ptr %54, align 8, !tbaa !5
  %685 = load i64, ptr %88, align 8, !tbaa !9
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %684, i64 %685
  %687 = load ptr, ptr %36, align 8, !tbaa !5
  %688 = load ptr, ptr %46, align 8, !tbaa !5
  %689 = load i64, ptr %688, align 8, !tbaa !9
  %690 = load ptr, ptr %46, align 8, !tbaa !5
  %691 = load i64, ptr %690, align 8, !tbaa !9
  %692 = load i64, ptr %60, align 8, !tbaa !9
  %693 = mul nsw i64 %691, %692
  %694 = add nsw i64 %689, %693
  %695 = getelementptr inbounds %struct.doublecomplex, ptr %687, i64 %694
  %696 = load ptr, ptr %37, align 8, !tbaa !5
  %697 = load ptr, ptr %54, align 8, !tbaa !5
  %698 = load i64, ptr %92, align 8, !tbaa !9
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %697, i64 %698
  %700 = call i32 @zunmqr_(ptr noundef @.str.14, ptr noundef @.str.15, ptr noundef %96, ptr noundef %94, ptr noundef %96, ptr noundef %682, ptr noundef %683, ptr noundef %686, ptr noundef %695, ptr noundef %696, ptr noundef %699, ptr noundef %68, ptr noundef %87)
  %701 = load i64, ptr %90, align 8, !tbaa !9
  %702 = icmp ne i64 %701, 0
  br i1 %702, label %703, label %764

703:                                              ; preds = %643
  %704 = load ptr, ptr %35, align 8, !tbaa !5
  %705 = load ptr, ptr %35, align 8, !tbaa !5
  %706 = load ptr, ptr %42, align 8, !tbaa !5
  %707 = load i64, ptr %65, align 8, !tbaa !9
  %708 = getelementptr inbounds %struct.doublecomplex, ptr %706, i64 %707
  %709 = load ptr, ptr %43, align 8, !tbaa !5
  %710 = call i32 @zlaset_(ptr noundef @.str.16, ptr noundef %704, ptr noundef %705, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %708, ptr noundef %709)
  %711 = load i64, ptr %96, align 8, !tbaa !9
  %712 = icmp sgt i64 %711, 1
  br i1 %712, label %713, label %741

713:                                              ; preds = %703
  %714 = load i64, ptr %96, align 8, !tbaa !9
  %715 = sub nsw i64 %714, 1
  store i64 %715, ptr %68, align 8, !tbaa !9
  %716 = load i64, ptr %96, align 8, !tbaa !9
  %717 = sub nsw i64 %716, 1
  store i64 %717, ptr %69, align 8, !tbaa !9
  %718 = load ptr, ptr %38, align 8, !tbaa !5
  %719 = load ptr, ptr %46, align 8, !tbaa !5
  %720 = load i64, ptr %719, align 8, !tbaa !9
  %721 = add nsw i64 %720, 1
  %722 = load ptr, ptr %46, align 8, !tbaa !5
  %723 = load i64, ptr %722, align 8, !tbaa !9
  %724 = load i64, ptr %62, align 8, !tbaa !9
  %725 = mul nsw i64 %723, %724
  %726 = add nsw i64 %721, %725
  %727 = getelementptr inbounds %struct.doublecomplex, ptr %718, i64 %726
  %728 = load ptr, ptr %39, align 8, !tbaa !5
  %729 = load ptr, ptr %42, align 8, !tbaa !5
  %730 = load ptr, ptr %46, align 8, !tbaa !5
  %731 = load i64, ptr %730, align 8, !tbaa !9
  %732 = add nsw i64 %731, 1
  %733 = load ptr, ptr %46, align 8, !tbaa !5
  %734 = load i64, ptr %733, align 8, !tbaa !9
  %735 = load i64, ptr %64, align 8, !tbaa !9
  %736 = mul nsw i64 %734, %735
  %737 = add nsw i64 %732, %736
  %738 = getelementptr inbounds %struct.doublecomplex, ptr %729, i64 %737
  %739 = load ptr, ptr %43, align 8, !tbaa !5
  %740 = call i32 @zlacpy_(ptr noundef @.str.14, ptr noundef %68, ptr noundef %69, ptr noundef %727, ptr noundef %728, ptr noundef %738, ptr noundef %739)
  br label %741

741:                                              ; preds = %713, %703
  %742 = load ptr, ptr %55, align 8, !tbaa !5
  %743 = load i64, ptr %742, align 8, !tbaa !9
  %744 = add nsw i64 %743, 1
  %745 = load i64, ptr %92, align 8, !tbaa !9
  %746 = sub nsw i64 %744, %745
  store i64 %746, ptr %68, align 8, !tbaa !9
  %747 = load ptr, ptr %42, align 8, !tbaa !5
  %748 = load ptr, ptr %46, align 8, !tbaa !5
  %749 = load i64, ptr %748, align 8, !tbaa !9
  %750 = load ptr, ptr %46, align 8, !tbaa !5
  %751 = load i64, ptr %750, align 8, !tbaa !9
  %752 = load i64, ptr %64, align 8, !tbaa !9
  %753 = mul nsw i64 %751, %752
  %754 = add nsw i64 %749, %753
  %755 = getelementptr inbounds %struct.doublecomplex, ptr %747, i64 %754
  %756 = load ptr, ptr %43, align 8, !tbaa !5
  %757 = load ptr, ptr %54, align 8, !tbaa !5
  %758 = load i64, ptr %88, align 8, !tbaa !9
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %757, i64 %758
  %760 = load ptr, ptr %54, align 8, !tbaa !5
  %761 = load i64, ptr %92, align 8, !tbaa !9
  %762 = getelementptr inbounds %struct.doublecomplex, ptr %760, i64 %761
  %763 = call i32 @zungqr_(ptr noundef %96, ptr noundef %96, ptr noundef %96, ptr noundef %755, ptr noundef %756, ptr noundef %759, ptr noundef %762, ptr noundef %68, ptr noundef %87)
  br label %764

764:                                              ; preds = %741, %643
  %765 = load i64, ptr %91, align 8, !tbaa !9
  %766 = icmp ne i64 %765, 0
  br i1 %766, label %767, label %775

767:                                              ; preds = %764
  %768 = load ptr, ptr %35, align 8, !tbaa !5
  %769 = load ptr, ptr %35, align 8, !tbaa !5
  %770 = load ptr, ptr %44, align 8, !tbaa !5
  %771 = load i64, ptr %67, align 8, !tbaa !9
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %770, i64 %771
  %773 = load ptr, ptr %45, align 8, !tbaa !5
  %774 = call i32 @zlaset_(ptr noundef @.str.16, ptr noundef %768, ptr noundef %769, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %772, ptr noundef %773)
  br label %775

775:                                              ; preds = %767, %764
  %776 = load i64, ptr %84, align 8, !tbaa !9
  %777 = icmp ne i64 %776, 0
  br i1 %777, label %781, label %778

778:                                              ; preds = %775
  %779 = load i64, ptr %110, align 8, !tbaa !9
  %780 = icmp ne i64 %779, 0
  br i1 %780, label %804, label %781

781:                                              ; preds = %778, %775
  %782 = load ptr, ptr %32, align 8, !tbaa !5
  %783 = load ptr, ptr %33, align 8, !tbaa !5
  %784 = load ptr, ptr %35, align 8, !tbaa !5
  %785 = load ptr, ptr %46, align 8, !tbaa !5
  %786 = load ptr, ptr %47, align 8, !tbaa !5
  %787 = load ptr, ptr %36, align 8, !tbaa !5
  %788 = load i64, ptr %61, align 8, !tbaa !9
  %789 = getelementptr inbounds %struct.doublecomplex, ptr %787, i64 %788
  %790 = load ptr, ptr %37, align 8, !tbaa !5
  %791 = load ptr, ptr %38, align 8, !tbaa !5
  %792 = load i64, ptr %63, align 8, !tbaa !9
  %793 = getelementptr inbounds %struct.doublecomplex, ptr %791, i64 %792
  %794 = load ptr, ptr %39, align 8, !tbaa !5
  %795 = load ptr, ptr %42, align 8, !tbaa !5
  %796 = load i64, ptr %65, align 8, !tbaa !9
  %797 = getelementptr inbounds %struct.doublecomplex, ptr %795, i64 %796
  %798 = load ptr, ptr %43, align 8, !tbaa !5
  %799 = load ptr, ptr %44, align 8, !tbaa !5
  %800 = load i64, ptr %67, align 8, !tbaa !9
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %799, i64 %800
  %802 = load ptr, ptr %45, align 8, !tbaa !5
  %803 = call i32 @zgghrd_(ptr noundef %782, ptr noundef %783, ptr noundef %784, ptr noundef %785, ptr noundef %786, ptr noundef %789, ptr noundef %790, ptr noundef %793, ptr noundef %794, ptr noundef %797, ptr noundef %798, ptr noundef %801, ptr noundef %802, ptr noundef %87)
  br label %834

804:                                              ; preds = %778
  %805 = load ptr, ptr %36, align 8, !tbaa !5
  %806 = load ptr, ptr %46, align 8, !tbaa !5
  %807 = load i64, ptr %806, align 8, !tbaa !9
  %808 = load ptr, ptr %46, align 8, !tbaa !5
  %809 = load i64, ptr %808, align 8, !tbaa !9
  %810 = load i64, ptr %60, align 8, !tbaa !9
  %811 = mul nsw i64 %809, %810
  %812 = add nsw i64 %807, %811
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %805, i64 %812
  %814 = load ptr, ptr %37, align 8, !tbaa !5
  %815 = load ptr, ptr %38, align 8, !tbaa !5
  %816 = load ptr, ptr %46, align 8, !tbaa !5
  %817 = load i64, ptr %816, align 8, !tbaa !9
  %818 = load ptr, ptr %46, align 8, !tbaa !5
  %819 = load i64, ptr %818, align 8, !tbaa !9
  %820 = load i64, ptr %62, align 8, !tbaa !9
  %821 = mul nsw i64 %819, %820
  %822 = add nsw i64 %817, %821
  %823 = getelementptr inbounds %struct.doublecomplex, ptr %815, i64 %822
  %824 = load ptr, ptr %39, align 8, !tbaa !5
  %825 = load ptr, ptr %42, align 8, !tbaa !5
  %826 = load i64, ptr %65, align 8, !tbaa !9
  %827 = getelementptr inbounds %struct.doublecomplex, ptr %825, i64 %826
  %828 = load ptr, ptr %43, align 8, !tbaa !5
  %829 = load ptr, ptr %44, align 8, !tbaa !5
  %830 = load i64, ptr %67, align 8, !tbaa !9
  %831 = getelementptr inbounds %struct.doublecomplex, ptr %829, i64 %830
  %832 = load ptr, ptr %45, align 8, !tbaa !5
  %833 = call i32 @zgghrd_(ptr noundef @.str, ptr noundef @.str, ptr noundef %96, ptr noundef @c__1, ptr noundef %96, ptr noundef %813, ptr noundef %814, ptr noundef %823, ptr noundef %824, ptr noundef %827, ptr noundef %828, ptr noundef %831, ptr noundef %832, ptr noundef %87)
  br label %834

834:                                              ; preds = %804, %781
  %835 = load i64, ptr %88, align 8, !tbaa !9
  store i64 %835, ptr %92, align 8, !tbaa !9
  %836 = load i64, ptr %84, align 8, !tbaa !9
  %837 = icmp ne i64 %836, 0
  br i1 %837, label %841, label %838

838:                                              ; preds = %834
  %839 = load i64, ptr %110, align 8, !tbaa !9
  %840 = icmp ne i64 %839, 0
  br i1 %840, label %843, label %841

841:                                              ; preds = %838, %834
  %842 = getelementptr inbounds [1 x i8], ptr %100, i64 0, i64 0
  store i8 83, ptr %842, align 1, !tbaa !16
  br label %845

843:                                              ; preds = %838
  %844 = getelementptr inbounds [1 x i8], ptr %100, i64 0, i64 0
  store i8 69, ptr %844, align 1, !tbaa !16
  br label %845

845:                                              ; preds = %843, %841
  %846 = load ptr, ptr %55, align 8, !tbaa !5
  %847 = load i64, ptr %846, align 8, !tbaa !9
  %848 = add nsw i64 %847, 1
  %849 = load i64, ptr %92, align 8, !tbaa !9
  %850 = sub nsw i64 %848, %849
  store i64 %850, ptr %68, align 8, !tbaa !9
  %851 = getelementptr inbounds [1 x i8], ptr %100, i64 0, i64 0
  %852 = load ptr, ptr %32, align 8, !tbaa !5
  %853 = load ptr, ptr %33, align 8, !tbaa !5
  %854 = load ptr, ptr %35, align 8, !tbaa !5
  %855 = load ptr, ptr %46, align 8, !tbaa !5
  %856 = load ptr, ptr %47, align 8, !tbaa !5
  %857 = load ptr, ptr %36, align 8, !tbaa !5
  %858 = load i64, ptr %61, align 8, !tbaa !9
  %859 = getelementptr inbounds %struct.doublecomplex, ptr %857, i64 %858
  %860 = load ptr, ptr %37, align 8, !tbaa !5
  %861 = load ptr, ptr %38, align 8, !tbaa !5
  %862 = load i64, ptr %63, align 8, !tbaa !9
  %863 = getelementptr inbounds %struct.doublecomplex, ptr %861, i64 %862
  %864 = load ptr, ptr %39, align 8, !tbaa !5
  %865 = load ptr, ptr %40, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.doublecomplex, ptr %865, i64 1
  %867 = load ptr, ptr %41, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %867, i64 1
  %869 = load ptr, ptr %42, align 8, !tbaa !5
  %870 = load i64, ptr %65, align 8, !tbaa !9
  %871 = getelementptr inbounds %struct.doublecomplex, ptr %869, i64 %870
  %872 = load ptr, ptr %43, align 8, !tbaa !5
  %873 = load ptr, ptr %44, align 8, !tbaa !5
  %874 = load i64, ptr %67, align 8, !tbaa !9
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %873, i64 %874
  %876 = load ptr, ptr %45, align 8, !tbaa !5
  %877 = load ptr, ptr %54, align 8, !tbaa !5
  %878 = load i64, ptr %92, align 8, !tbaa !9
  %879 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 %878
  %880 = load ptr, ptr %56, align 8, !tbaa !5
  %881 = getelementptr inbounds double, ptr %880, i64 1
  %882 = call i32 @zhgeqz_(ptr noundef %851, ptr noundef %852, ptr noundef %853, ptr noundef %854, ptr noundef %855, ptr noundef %856, ptr noundef %859, ptr noundef %860, ptr noundef %863, ptr noundef %864, ptr noundef %866, ptr noundef %868, ptr noundef %871, ptr noundef %872, ptr noundef %875, ptr noundef %876, ptr noundef %879, ptr noundef %68, ptr noundef %881, ptr noundef %87)
  %883 = load i64, ptr %87, align 8, !tbaa !9
  %884 = icmp ne i64 %883, 0
  br i1 %884, label %885, label %920

885:                                              ; preds = %845
  %886 = load i64, ptr %87, align 8, !tbaa !9
  %887 = icmp sgt i64 %886, 0
  br i1 %887, label %888, label %896

888:                                              ; preds = %885
  %889 = load i64, ptr %87, align 8, !tbaa !9
  %890 = load ptr, ptr %35, align 8, !tbaa !5
  %891 = load i64, ptr %890, align 8, !tbaa !9
  %892 = icmp sle i64 %889, %891
  br i1 %892, label %893, label %896

893:                                              ; preds = %888
  %894 = load i64, ptr %87, align 8, !tbaa !9
  %895 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 %894, ptr %895, align 8, !tbaa !9
  br label %919

896:                                              ; preds = %888, %885
  %897 = load i64, ptr %87, align 8, !tbaa !9
  %898 = load ptr, ptr %35, align 8, !tbaa !5
  %899 = load i64, ptr %898, align 8, !tbaa !9
  %900 = icmp sgt i64 %897, %899
  br i1 %900, label %901, label %913

901:                                              ; preds = %896
  %902 = load i64, ptr %87, align 8, !tbaa !9
  %903 = load ptr, ptr %35, align 8, !tbaa !5
  %904 = load i64, ptr %903, align 8, !tbaa !9
  %905 = shl i64 %904, 1
  %906 = icmp sle i64 %902, %905
  br i1 %906, label %907, label %913

907:                                              ; preds = %901
  %908 = load i64, ptr %87, align 8, !tbaa !9
  %909 = load ptr, ptr %35, align 8, !tbaa !5
  %910 = load i64, ptr %909, align 8, !tbaa !9
  %911 = sub nsw i64 %908, %910
  %912 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 %911, ptr %912, align 8, !tbaa !9
  br label %918

913:                                              ; preds = %901, %896
  %914 = load ptr, ptr %35, align 8, !tbaa !5
  %915 = load i64, ptr %914, align 8, !tbaa !9
  %916 = add nsw i64 %915, 1
  %917 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 %916, ptr %917, align 8, !tbaa !9
  br label %918

918:                                              ; preds = %913, %907
  br label %919

919:                                              ; preds = %918, %893
  br label %1399

920:                                              ; preds = %845
  %921 = load i64, ptr %84, align 8, !tbaa !9
  %922 = icmp ne i64 %921, 0
  br i1 %922, label %926, label %923

923:                                              ; preds = %920
  %924 = load i64, ptr %110, align 8, !tbaa !9
  %925 = icmp ne i64 %924, 0
  br i1 %925, label %1092, label %926

926:                                              ; preds = %923, %920
  %927 = load i64, ptr %84, align 8, !tbaa !9
  %928 = icmp ne i64 %927, 0
  br i1 %928, label %929, label %977

929:                                              ; preds = %926
  %930 = load i64, ptr %90, align 8, !tbaa !9
  %931 = icmp ne i64 %930, 0
  br i1 %931, label %932, label %940

932:                                              ; preds = %929
  %933 = load i64, ptr %91, align 8, !tbaa !9
  %934 = icmp ne i64 %933, 0
  br i1 %934, label %935, label %937

935:                                              ; preds = %932
  %936 = getelementptr inbounds [1 x i8], ptr %100, i64 0, i64 0
  store i8 66, ptr %936, align 1, !tbaa !16
  br label %939

937:                                              ; preds = %932
  %938 = getelementptr inbounds [1 x i8], ptr %100, i64 0, i64 0
  store i8 76, ptr %938, align 1, !tbaa !16
  br label %939

939:                                              ; preds = %937, %935
  br label %942

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

942:                                              ; preds = %940, %939
  %943 = getelementptr inbounds [1 x i8], ptr %100, i64 0, i64 0
  %944 = getelementptr inbounds [1 x i64], ptr %99, i64 0, i64 0
  %945 = load ptr, ptr %35, align 8, !tbaa !5
  %946 = load ptr, ptr %36, align 8, !tbaa !5
  %947 = load i64, ptr %61, align 8, !tbaa !9
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %946, i64 %947
  %949 = load ptr, ptr %37, align 8, !tbaa !5
  %950 = load ptr, ptr %38, align 8, !tbaa !5
  %951 = load i64, ptr %63, align 8, !tbaa !9
  %952 = getelementptr inbounds %struct.doublecomplex, ptr %950, i64 %951
  %953 = load ptr, ptr %39, align 8, !tbaa !5
  %954 = load ptr, ptr %42, align 8, !tbaa !5
  %955 = load i64, ptr %65, align 8, !tbaa !9
  %956 = getelementptr inbounds %struct.doublecomplex, ptr %954, i64 %955
  %957 = load ptr, ptr %43, align 8, !tbaa !5
  %958 = load ptr, ptr %44, align 8, !tbaa !5
  %959 = load i64, ptr %67, align 8, !tbaa !9
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %958, i64 %959
  %961 = load ptr, ptr %45, align 8, !tbaa !5
  %962 = load ptr, ptr %35, align 8, !tbaa !5
  %963 = load ptr, ptr %54, align 8, !tbaa !5
  %964 = load i64, ptr %92, align 8, !tbaa !9
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %963, i64 %964
  %966 = load ptr, ptr %56, align 8, !tbaa !5
  %967 = getelementptr inbounds double, ptr %966, i64 1
  %968 = call i32 @ztgevc_(ptr noundef %943, ptr noundef @.str.4, ptr noundef %944, ptr noundef %945, ptr noundef %948, ptr noundef %949, ptr noundef %952, ptr noundef %953, ptr noundef %956, ptr noundef %957, ptr noundef %960, ptr noundef %961, ptr noundef %962, ptr noundef %81, ptr noundef %965, ptr noundef %967, ptr noundef %87)
  %969 = load i64, ptr %87, align 8, !tbaa !9
  %970 = icmp ne i64 %969, 0
  br i1 %970, label %971, label %976

971:                                              ; preds = %942
  %972 = load ptr, ptr %35, align 8, !tbaa !5
  %973 = load i64, ptr %972, align 8, !tbaa !9
  %974 = add nsw i64 %973, 2
  %975 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 %974, ptr %975, align 8, !tbaa !9
  br label %1399

976:                                              ; preds = %942
  br label %977

977:                                              ; preds = %976, %926
  %978 = load i64, ptr %110, align 8, !tbaa !9
  %979 = icmp ne i64 %978, 0
  br i1 %979, label %1091, label %980

980:                                              ; preds = %977
  %981 = load ptr, ptr %35, align 8, !tbaa !5
  %982 = load i64, ptr %981, align 8, !tbaa !9
  store i64 %982, ptr %68, align 8, !tbaa !9
  store i64 1, ptr %77, align 8, !tbaa !9
  br label %983

983:                                              ; preds = %1087, %980
  %984 = load i64, ptr %77, align 8, !tbaa !9
  %985 = load i64, ptr %68, align 8, !tbaa !9
  %986 = icmp sle i64 %984, %985
  br i1 %986, label %987, label %1090

987:                                              ; preds = %983
  %988 = load ptr, ptr %35, align 8, !tbaa !5
  %989 = load i64, ptr %988, align 8, !tbaa !9
  store i64 %989, ptr %69, align 8, !tbaa !9
  store i64 1, ptr %78, align 8, !tbaa !9
  br label %990

990:                                              ; preds = %998, %987
  %991 = load i64, ptr %78, align 8, !tbaa !9
  %992 = load i64, ptr %69, align 8, !tbaa !9
  %993 = icmp sle i64 %991, %992
  br i1 %993, label %994, label %1001

994:                                              ; preds = %990
  %995 = load ptr, ptr %58, align 8, !tbaa !5
  %996 = load i64, ptr %78, align 8, !tbaa !9
  %997 = getelementptr inbounds i64, ptr %995, i64 %996
  store i64 0, ptr %997, align 8, !tbaa !9
  br label %998

998:                                              ; preds = %994
  %999 = load i64, ptr %78, align 8, !tbaa !9
  %1000 = add nsw i64 %999, 1
  store i64 %1000, ptr %78, align 8, !tbaa !9
  br label %990, !llvm.loop !17

1001:                                             ; preds = %990
  %1002 = load ptr, ptr %58, align 8, !tbaa !5
  %1003 = load i64, ptr %77, align 8, !tbaa !9
  %1004 = getelementptr inbounds i64, ptr %1002, i64 %1003
  store i64 1, ptr %1004, align 8, !tbaa !9
  %1005 = load ptr, ptr %35, align 8, !tbaa !5
  %1006 = load i64, ptr %1005, align 8, !tbaa !9
  %1007 = add nsw i64 %1006, 1
  store i64 %1007, ptr %92, align 8, !tbaa !9
  %1008 = load i64, ptr %92, align 8, !tbaa !9
  %1009 = load ptr, ptr %35, align 8, !tbaa !5
  %1010 = load i64, ptr %1009, align 8, !tbaa !9
  %1011 = add nsw i64 %1008, %1010
  store i64 %1011, ptr %93, align 8, !tbaa !9
  %1012 = load i64, ptr %106, align 8, !tbaa !9
  %1013 = icmp ne i64 %1012, 0
  br i1 %1013, label %1017, label %1014

1014:                                             ; preds = %1001
  %1015 = load i64, ptr %104, align 8, !tbaa !9
  %1016 = icmp ne i64 %1015, 0
  br i1 %1016, label %1017, label %1050

1017:                                             ; preds = %1014, %1001
  %1018 = load ptr, ptr %58, align 8, !tbaa !5
  %1019 = getelementptr inbounds i64, ptr %1018, i64 1
  %1020 = load ptr, ptr %35, align 8, !tbaa !5
  %1021 = load ptr, ptr %36, align 8, !tbaa !5
  %1022 = load i64, ptr %61, align 8, !tbaa !9
  %1023 = getelementptr inbounds %struct.doublecomplex, ptr %1021, i64 %1022
  %1024 = load ptr, ptr %37, align 8, !tbaa !5
  %1025 = load ptr, ptr %38, align 8, !tbaa !5
  %1026 = load i64, ptr %63, align 8, !tbaa !9
  %1027 = getelementptr inbounds %struct.doublecomplex, ptr %1025, i64 %1026
  %1028 = load ptr, ptr %39, align 8, !tbaa !5
  %1029 = load ptr, ptr %54, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.doublecomplex, ptr %1029, i64 1
  %1031 = load ptr, ptr %35, align 8, !tbaa !5
  %1032 = load ptr, ptr %54, align 8, !tbaa !5
  %1033 = load i64, ptr %92, align 8, !tbaa !9
  %1034 = getelementptr inbounds %struct.doublecomplex, ptr %1032, i64 %1033
  %1035 = load ptr, ptr %35, align 8, !tbaa !5
  %1036 = load ptr, ptr %54, align 8, !tbaa !5
  %1037 = load i64, ptr %93, align 8, !tbaa !9
  %1038 = getelementptr inbounds %struct.doublecomplex, ptr %1036, i64 %1037
  %1039 = load ptr, ptr %56, align 8, !tbaa !5
  %1040 = getelementptr inbounds double, ptr %1039, i64 1
  %1041 = call i32 @ztgevc_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %1019, ptr noundef %1020, ptr noundef %1023, ptr noundef %1024, ptr noundef %1027, ptr noundef %1028, ptr noundef %1030, ptr noundef %1031, ptr noundef %1034, ptr noundef %1035, ptr noundef @c__1, ptr noundef %79, ptr noundef %1038, ptr noundef %1040, ptr noundef %87)
  %1042 = load i64, ptr %87, align 8, !tbaa !9
  %1043 = icmp ne i64 %1042, 0
  br i1 %1043, label %1044, label %1049

1044:                                             ; preds = %1017
  %1045 = load ptr, ptr %35, align 8, !tbaa !5
  %1046 = load i64, ptr %1045, align 8, !tbaa !9
  %1047 = add nsw i64 %1046, 2
  %1048 = load ptr, ptr %59, align 8, !tbaa !5
  store i64 %1047, ptr %1048, align 8, !tbaa !9
  br label %1399

1049:                                             ; preds = %1017
  br label %1050

1050:                                             ; preds = %1049, %1014
  %1051 = load ptr, ptr %55, align 8, !tbaa !5
  %1052 = load i64, ptr %1051, align 8, !tbaa !9
  %1053 = load i64, ptr %93, align 8, !tbaa !9
  %1054 = sub nsw i64 %1052, %1053
  %1055 = add nsw i64 %1054, 1
  store i64 %1055, ptr %69, align 8, !tbaa !9
  %1056 = load ptr, ptr %34, align 8, !tbaa !5
  %1057 = load ptr, ptr %58, align 8, !tbaa !5
  %1058 = getelementptr inbounds i64, ptr %1057, i64 1
  %1059 = load ptr, ptr %35, align 8, !tbaa !5
  %1060 = load ptr, ptr %36, align 8, !tbaa !5
  %1061 = load i64, ptr %61, align 8, !tbaa !9
  %1062 = getelementptr inbounds %struct.doublecomplex, ptr %1060, i64 %1061
  %1063 = load ptr, ptr %37, align 8, !tbaa !5
  %1064 = load ptr, ptr %38, align 8, !tbaa !5
  %1065 = load i64, ptr %63, align 8, !tbaa !9
  %1066 = getelementptr inbounds %struct.doublecomplex, ptr %1064, i64 %1065
  %1067 = load ptr, ptr %39, align 8, !tbaa !5
  %1068 = load ptr, ptr %54, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.doublecomplex, ptr %1068, i64 1
  %1070 = load ptr, ptr %35, align 8, !tbaa !5
  %1071 = load ptr, ptr %54, align 8, !tbaa !5
  %1072 = load i64, ptr %92, align 8, !tbaa !9
  %1073 = getelementptr inbounds %struct.doublecomplex, ptr %1071, i64 %1072
  %1074 = load ptr, ptr %35, align 8, !tbaa !5
  %1075 = load ptr, ptr %52, align 8, !tbaa !5
  %1076 = load i64, ptr %77, align 8, !tbaa !9
  %1077 = getelementptr inbounds double, ptr %1075, i64 %1076
  %1078 = load ptr, ptr %53, align 8, !tbaa !5
  %1079 = load i64, ptr %77, align 8, !tbaa !9
  %1080 = getelementptr inbounds double, ptr %1078, i64 %1079
  %1081 = load ptr, ptr %54, align 8, !tbaa !5
  %1082 = load i64, ptr %93, align 8, !tbaa !9
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1081, i64 %1082
  %1084 = load ptr, ptr %57, align 8, !tbaa !5
  %1085 = getelementptr inbounds i64, ptr %1084, i64 1
  %1086 = call i32 @ztgsna_(ptr noundef %1056, ptr noundef @.str.5, ptr noundef %1058, ptr noundef %1059, ptr noundef %1062, ptr noundef %1063, ptr noundef %1066, ptr noundef %1067, ptr noundef %1069, ptr noundef %1070, ptr noundef %1073, ptr noundef %1074, ptr noundef %1077, ptr noundef %1080, ptr noundef @c__1, ptr noundef %79, ptr noundef %1083, ptr noundef %69, ptr noundef %1085, ptr noundef %87)
  br label %1087

1087:                                             ; preds = %1050
  %1088 = load i64, ptr %77, align 8, !tbaa !9
  %1089 = add nsw i64 %1088, 1
  store i64 %1089, ptr %77, align 8, !tbaa !9
  br label %983, !llvm.loop !19

1090:                                             ; preds = %983
  br label %1091

1091:                                             ; preds = %1090, %977
  br label %1092

1092:                                             ; preds = %1091, %923
  %1093 = load i64, ptr %90, align 8, !tbaa !9
  %1094 = icmp ne i64 %1093, 0
  br i1 %1094, label %1095, label %1236

1095:                                             ; preds = %1092
  %1096 = load ptr, ptr %31, align 8, !tbaa !5
  %1097 = load ptr, ptr %35, align 8, !tbaa !5
  %1098 = load ptr, ptr %46, align 8, !tbaa !5
  %1099 = load ptr, ptr %47, align 8, !tbaa !5
  %1100 = load ptr, ptr %48, align 8, !tbaa !5
  %1101 = getelementptr inbounds double, ptr %1100, i64 1
  %1102 = load ptr, ptr %49, align 8, !tbaa !5
  %1103 = getelementptr inbounds double, ptr %1102, i64 1
  %1104 = load ptr, ptr %35, align 8, !tbaa !5
  %1105 = load ptr, ptr %42, align 8, !tbaa !5
  %1106 = load i64, ptr %65, align 8, !tbaa !9
  %1107 = getelementptr inbounds %struct.doublecomplex, ptr %1105, i64 %1106
  %1108 = load ptr, ptr %43, align 8, !tbaa !5
  %1109 = call i32 @zggbak_(ptr noundef %1096, ptr noundef @.str.14, ptr noundef %1097, ptr noundef %1098, ptr noundef %1099, ptr noundef %1101, ptr noundef %1103, ptr noundef %1104, ptr noundef %1107, ptr noundef %1108, ptr noundef %87)
  %1110 = load ptr, ptr %35, align 8, !tbaa !5
  %1111 = load i64, ptr %1110, align 8, !tbaa !9
  store i64 %1111, ptr %68, align 8, !tbaa !9
  store i64 1, ptr %80, align 8, !tbaa !9
  br label %1112

1112:                                             ; preds = %1232, %1095
  %1113 = load i64, ptr %80, align 8, !tbaa !9
  %1114 = load i64, ptr %68, align 8, !tbaa !9
  %1115 = icmp sle i64 %1113, %1114
  br i1 %1115, label %1116, label %1235

1116:                                             ; preds = %1112
  store double 0.000000e+00, ptr %89, align 8, !tbaa !15
  %1117 = load ptr, ptr %35, align 8, !tbaa !5
  %1118 = load i64, ptr %1117, align 8, !tbaa !9
  store i64 %1118, ptr %69, align 8, !tbaa !9
  store i64 1, ptr %82, align 8, !tbaa !9
  br label %1119

1119:                                             ; preds = %1171, %1116
  %1120 = load i64, ptr %82, align 8, !tbaa !9
  %1121 = load i64, ptr %69, align 8, !tbaa !9
  %1122 = icmp sle i64 %1120, %1121
  br i1 %1122, label %1123, label %1174

1123:                                             ; preds = %1119
  %1124 = load i64, ptr %82, align 8, !tbaa !9
  %1125 = load i64, ptr %80, align 8, !tbaa !9
  %1126 = load i64, ptr %64, align 8, !tbaa !9
  %1127 = mul nsw i64 %1125, %1126
  %1128 = add nsw i64 %1124, %1127
  store i64 %1128, ptr %70, align 8, !tbaa !9
  %1129 = load double, ptr %89, align 8, !tbaa !15
  store double %1129, ptr %74, align 8, !tbaa !15
  %1130 = load ptr, ptr %42, align 8, !tbaa !5
  %1131 = load i64, ptr %70, align 8, !tbaa !9
  %1132 = getelementptr inbounds %struct.doublecomplex, ptr %1130, i64 %1131
  %1133 = getelementptr inbounds %struct.doublecomplex, ptr %1132, i32 0, i32 0
  %1134 = load double, ptr %1133, align 8, !tbaa !11
  store double %1134, ptr %72, align 8, !tbaa !15
  %1135 = load double, ptr %72, align 8, !tbaa !15
  %1136 = fcmp oge double %1135, 0.000000e+00
  br i1 %1136, label %1137, label %1139

1137:                                             ; preds = %1123
  %1138 = load double, ptr %72, align 8, !tbaa !15
  br label %1142

1139:                                             ; preds = %1123
  %1140 = load double, ptr %72, align 8, !tbaa !15
  %1141 = fneg double %1140
  br label %1142

1142:                                             ; preds = %1139, %1137
  %1143 = phi double [ %1138, %1137 ], [ %1141, %1139 ]
  %1144 = load ptr, ptr %42, align 8, !tbaa !5
  %1145 = load i64, ptr %82, align 8, !tbaa !9
  %1146 = load i64, ptr %80, align 8, !tbaa !9
  %1147 = load i64, ptr %64, align 8, !tbaa !9
  %1148 = mul nsw i64 %1146, %1147
  %1149 = add nsw i64 %1145, %1148
  %1150 = getelementptr inbounds %struct.doublecomplex, ptr %1144, i64 %1149
  %1151 = call double @d_imag(ptr noundef %1150)
  store double %1151, ptr %73, align 8, !tbaa !15
  %1152 = load double, ptr %73, align 8, !tbaa !15
  %1153 = fcmp oge double %1152, 0.000000e+00
  br i1 %1153, label %1154, label %1156

1154:                                             ; preds = %1142
  %1155 = load double, ptr %73, align 8, !tbaa !15
  br label %1159

1156:                                             ; preds = %1142
  %1157 = load double, ptr %73, align 8, !tbaa !15
  %1158 = fneg double %1157
  br label %1159

1159:                                             ; preds = %1156, %1154
  %1160 = phi double [ %1155, %1154 ], [ %1158, %1156 ]
  %1161 = fadd double %1143, %1160
  store double %1161, ptr %75, align 8, !tbaa !15
  %1162 = load double, ptr %74, align 8, !tbaa !15
  %1163 = load double, ptr %75, align 8, !tbaa !15
  %1164 = fcmp oge double %1162, %1163
  br i1 %1164, label %1165, label %1167

1165:                                             ; preds = %1159
  %1166 = load double, ptr %74, align 8, !tbaa !15
  br label %1169

1167:                                             ; preds = %1159
  %1168 = load double, ptr %75, align 8, !tbaa !15
  br label %1169

1169:                                             ; preds = %1167, %1165
  %1170 = phi double [ %1166, %1165 ], [ %1168, %1167 ]
  store double %1170, ptr %89, align 8, !tbaa !15
  br label %1171

1171:                                             ; preds = %1169
  %1172 = load i64, ptr %82, align 8, !tbaa !9
  %1173 = add nsw i64 %1172, 1
  store i64 %1173, ptr %82, align 8, !tbaa !9
  br label %1119, !llvm.loop !20

1174:                                             ; preds = %1119
  %1175 = load double, ptr %89, align 8, !tbaa !15
  %1176 = load double, ptr %111, align 8, !tbaa !15
  %1177 = fcmp olt double %1175, %1176
  br i1 %1177, label %1178, label %1179

1178:                                             ; preds = %1174
  br label %1231

1179:                                             ; preds = %1174
  %1180 = load double, ptr %89, align 8, !tbaa !15
  %1181 = fdiv double 1.000000e+00, %1180
  store double %1181, ptr %89, align 8, !tbaa !15
  %1182 = load ptr, ptr %35, align 8, !tbaa !5
  %1183 = load i64, ptr %1182, align 8, !tbaa !9
  store i64 %1183, ptr %69, align 8, !tbaa !9
  store i64 1, ptr %82, align 8, !tbaa !9
  br label %1184

1184:                                             ; preds = %1227, %1179
  %1185 = load i64, ptr %82, align 8, !tbaa !9
  %1186 = load i64, ptr %69, align 8, !tbaa !9
  %1187 = icmp sle i64 %1185, %1186
  br i1 %1187, label %1188, label %1230

1188:                                             ; preds = %1184
  %1189 = load i64, ptr %82, align 8, !tbaa !9
  %1190 = load i64, ptr %80, align 8, !tbaa !9
  %1191 = load i64, ptr %64, align 8, !tbaa !9
  %1192 = mul nsw i64 %1190, %1191
  %1193 = add nsw i64 %1189, %1192
  store i64 %1193, ptr %70, align 8, !tbaa !9
  %1194 = load i64, ptr %82, align 8, !tbaa !9
  %1195 = load i64, ptr %80, align 8, !tbaa !9
  %1196 = load i64, ptr %64, align 8, !tbaa !9
  %1197 = mul nsw i64 %1195, %1196
  %1198 = add nsw i64 %1194, %1197
  store i64 %1198, ptr %71, align 8, !tbaa !9
  %1199 = load double, ptr %89, align 8, !tbaa !15
  %1200 = load ptr, ptr %42, align 8, !tbaa !5
  %1201 = load i64, ptr %71, align 8, !tbaa !9
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %1200, i64 %1201
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %1202, i32 0, i32 0
  %1204 = load double, ptr %1203, align 8, !tbaa !11
  %1205 = fmul double %1199, %1204
  %1206 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  store double %1205, ptr %1206, align 8, !tbaa !11
  %1207 = load double, ptr %89, align 8, !tbaa !15
  %1208 = load ptr, ptr %42, align 8, !tbaa !5
  %1209 = load i64, ptr %71, align 8, !tbaa !9
  %1210 = getelementptr inbounds %struct.doublecomplex, ptr %1208, i64 %1209
  %1211 = getelementptr inbounds %struct.doublecomplex, ptr %1210, i32 0, i32 1
  %1212 = load double, ptr %1211, align 8, !tbaa !14
  %1213 = fmul double %1207, %1212
  %1214 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  store double %1213, ptr %1214, align 8, !tbaa !14
  %1215 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %1216 = load double, ptr %1215, align 8, !tbaa !11
  %1217 = load ptr, ptr %42, align 8, !tbaa !5
  %1218 = load i64, ptr %70, align 8, !tbaa !9
  %1219 = getelementptr inbounds %struct.doublecomplex, ptr %1217, i64 %1218
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %1219, i32 0, i32 0
  store double %1216, ptr %1220, align 8, !tbaa !11
  %1221 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %1222 = load double, ptr %1221, align 8, !tbaa !14
  %1223 = load ptr, ptr %42, align 8, !tbaa !5
  %1224 = load i64, ptr %70, align 8, !tbaa !9
  %1225 = getelementptr inbounds %struct.doublecomplex, ptr %1223, i64 %1224
  %1226 = getelementptr inbounds %struct.doublecomplex, ptr %1225, i32 0, i32 1
  store double %1222, ptr %1226, align 8, !tbaa !14
  br label %1227

1227:                                             ; preds = %1188
  %1228 = load i64, ptr %82, align 8, !tbaa !9
  %1229 = add nsw i64 %1228, 1
  store i64 %1229, ptr %82, align 8, !tbaa !9
  br label %1184, !llvm.loop !21

1230:                                             ; preds = %1184
  br label %1231

1231:                                             ; preds = %1230, %1178
  br label %1232

1232:                                             ; preds = %1231
  %1233 = load i64, ptr %80, align 8, !tbaa !9
  %1234 = add nsw i64 %1233, 1
  store i64 %1234, ptr %80, align 8, !tbaa !9
  br label %1112, !llvm.loop !22

1235:                                             ; preds = %1112
  br label %1236

1236:                                             ; preds = %1235, %1092
  %1237 = load i64, ptr %91, align 8, !tbaa !9
  %1238 = icmp ne i64 %1237, 0
  br i1 %1238, label %1239, label %1380

1239:                                             ; preds = %1236
  %1240 = load ptr, ptr %31, align 8, !tbaa !5
  %1241 = load ptr, ptr %35, align 8, !tbaa !5
  %1242 = load ptr, ptr %46, align 8, !tbaa !5
  %1243 = load ptr, ptr %47, align 8, !tbaa !5
  %1244 = load ptr, ptr %48, align 8, !tbaa !5
  %1245 = getelementptr inbounds double, ptr %1244, i64 1
  %1246 = load ptr, ptr %49, align 8, !tbaa !5
  %1247 = getelementptr inbounds double, ptr %1246, i64 1
  %1248 = load ptr, ptr %35, align 8, !tbaa !5
  %1249 = load ptr, ptr %44, align 8, !tbaa !5
  %1250 = load i64, ptr %67, align 8, !tbaa !9
  %1251 = getelementptr inbounds %struct.doublecomplex, ptr %1249, i64 %1250
  %1252 = load ptr, ptr %45, align 8, !tbaa !5
  %1253 = call i32 @zggbak_(ptr noundef %1240, ptr noundef @.str.17, ptr noundef %1241, ptr noundef %1242, ptr noundef %1243, ptr noundef %1245, ptr noundef %1247, ptr noundef %1248, ptr noundef %1251, ptr noundef %1252, ptr noundef %87)
  %1254 = load ptr, ptr %35, align 8, !tbaa !5
  %1255 = load i64, ptr %1254, align 8, !tbaa !9
  store i64 %1255, ptr %68, align 8, !tbaa !9
  store i64 1, ptr %80, align 8, !tbaa !9
  br label %1256

1256:                                             ; preds = %1376, %1239
  %1257 = load i64, ptr %80, align 8, !tbaa !9
  %1258 = load i64, ptr %68, align 8, !tbaa !9
  %1259 = icmp sle i64 %1257, %1258
  br i1 %1259, label %1260, label %1379

1260:                                             ; preds = %1256
  store double 0.000000e+00, ptr %89, align 8, !tbaa !15
  %1261 = load ptr, ptr %35, align 8, !tbaa !5
  %1262 = load i64, ptr %1261, align 8, !tbaa !9
  store i64 %1262, ptr %69, align 8, !tbaa !9
  store i64 1, ptr %82, align 8, !tbaa !9
  br label %1263

1263:                                             ; preds = %1315, %1260
  %1264 = load i64, ptr %82, align 8, !tbaa !9
  %1265 = load i64, ptr %69, align 8, !tbaa !9
  %1266 = icmp sle i64 %1264, %1265
  br i1 %1266, label %1267, label %1318

1267:                                             ; preds = %1263
  %1268 = load i64, ptr %82, align 8, !tbaa !9
  %1269 = load i64, ptr %80, align 8, !tbaa !9
  %1270 = load i64, ptr %66, align 8, !tbaa !9
  %1271 = mul nsw i64 %1269, %1270
  %1272 = add nsw i64 %1268, %1271
  store i64 %1272, ptr %70, align 8, !tbaa !9
  %1273 = load double, ptr %89, align 8, !tbaa !15
  store double %1273, ptr %74, align 8, !tbaa !15
  %1274 = load ptr, ptr %44, align 8, !tbaa !5
  %1275 = load i64, ptr %70, align 8, !tbaa !9
  %1276 = getelementptr inbounds %struct.doublecomplex, ptr %1274, i64 %1275
  %1277 = getelementptr inbounds %struct.doublecomplex, ptr %1276, i32 0, i32 0
  %1278 = load double, ptr %1277, align 8, !tbaa !11
  store double %1278, ptr %72, align 8, !tbaa !15
  %1279 = load double, ptr %72, align 8, !tbaa !15
  %1280 = fcmp oge double %1279, 0.000000e+00
  br i1 %1280, label %1281, label %1283

1281:                                             ; preds = %1267
  %1282 = load double, ptr %72, align 8, !tbaa !15
  br label %1286

1283:                                             ; preds = %1267
  %1284 = load double, ptr %72, align 8, !tbaa !15
  %1285 = fneg double %1284
  br label %1286

1286:                                             ; preds = %1283, %1281
  %1287 = phi double [ %1282, %1281 ], [ %1285, %1283 ]
  %1288 = load ptr, ptr %44, align 8, !tbaa !5
  %1289 = load i64, ptr %82, align 8, !tbaa !9
  %1290 = load i64, ptr %80, align 8, !tbaa !9
  %1291 = load i64, ptr %66, align 8, !tbaa !9
  %1292 = mul nsw i64 %1290, %1291
  %1293 = add nsw i64 %1289, %1292
  %1294 = getelementptr inbounds %struct.doublecomplex, ptr %1288, i64 %1293
  %1295 = call double @d_imag(ptr noundef %1294)
  store double %1295, ptr %73, align 8, !tbaa !15
  %1296 = load double, ptr %73, align 8, !tbaa !15
  %1297 = fcmp oge double %1296, 0.000000e+00
  br i1 %1297, label %1298, label %1300

1298:                                             ; preds = %1286
  %1299 = load double, ptr %73, align 8, !tbaa !15
  br label %1303

1300:                                             ; preds = %1286
  %1301 = load double, ptr %73, align 8, !tbaa !15
  %1302 = fneg double %1301
  br label %1303

1303:                                             ; preds = %1300, %1298
  %1304 = phi double [ %1299, %1298 ], [ %1302, %1300 ]
  %1305 = fadd double %1287, %1304
  store double %1305, ptr %75, align 8, !tbaa !15
  %1306 = load double, ptr %74, align 8, !tbaa !15
  %1307 = load double, ptr %75, align 8, !tbaa !15
  %1308 = fcmp oge double %1306, %1307
  br i1 %1308, label %1309, label %1311

1309:                                             ; preds = %1303
  %1310 = load double, ptr %74, align 8, !tbaa !15
  br label %1313

1311:                                             ; preds = %1303
  %1312 = load double, ptr %75, align 8, !tbaa !15
  br label %1313

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

1315:                                             ; preds = %1313
  %1316 = load i64, ptr %82, align 8, !tbaa !9
  %1317 = add nsw i64 %1316, 1
  store i64 %1317, ptr %82, align 8, !tbaa !9
  br label %1263, !llvm.loop !23

1318:                                             ; preds = %1263
  %1319 = load double, ptr %89, align 8, !tbaa !15
  %1320 = load double, ptr %111, align 8, !tbaa !15
  %1321 = fcmp olt double %1319, %1320
  br i1 %1321, label %1322, label %1323

1322:                                             ; preds = %1318
  br label %1375

1323:                                             ; preds = %1318
  %1324 = load double, ptr %89, align 8, !tbaa !15
  %1325 = fdiv double 1.000000e+00, %1324
  store double %1325, ptr %89, align 8, !tbaa !15
  %1326 = load ptr, ptr %35, align 8, !tbaa !5
  %1327 = load i64, ptr %1326, align 8, !tbaa !9
  store i64 %1327, ptr %69, align 8, !tbaa !9
  store i64 1, ptr %82, align 8, !tbaa !9
  br label %1328

1328:                                             ; preds = %1371, %1323
  %1329 = load i64, ptr %82, align 8, !tbaa !9
  %1330 = load i64, ptr %69, align 8, !tbaa !9
  %1331 = icmp sle i64 %1329, %1330
  br i1 %1331, label %1332, label %1374

1332:                                             ; preds = %1328
  %1333 = load i64, ptr %82, align 8, !tbaa !9
  %1334 = load i64, ptr %80, align 8, !tbaa !9
  %1335 = load i64, ptr %66, align 8, !tbaa !9
  %1336 = mul nsw i64 %1334, %1335
  %1337 = add nsw i64 %1333, %1336
  store i64 %1337, ptr %70, align 8, !tbaa !9
  %1338 = load i64, ptr %82, align 8, !tbaa !9
  %1339 = load i64, ptr %80, align 8, !tbaa !9
  %1340 = load i64, ptr %66, align 8, !tbaa !9
  %1341 = mul nsw i64 %1339, %1340
  %1342 = add nsw i64 %1338, %1341
  store i64 %1342, ptr %71, align 8, !tbaa !9
  %1343 = load double, ptr %89, align 8, !tbaa !15
  %1344 = load ptr, ptr %44, align 8, !tbaa !5
  %1345 = load i64, ptr %71, align 8, !tbaa !9
  %1346 = getelementptr inbounds %struct.doublecomplex, ptr %1344, i64 %1345
  %1347 = getelementptr inbounds %struct.doublecomplex, ptr %1346, i32 0, i32 0
  %1348 = load double, ptr %1347, align 8, !tbaa !11
  %1349 = fmul double %1343, %1348
  %1350 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  store double %1349, ptr %1350, align 8, !tbaa !11
  %1351 = load double, ptr %89, align 8, !tbaa !15
  %1352 = load ptr, ptr %44, align 8, !tbaa !5
  %1353 = load i64, ptr %71, align 8, !tbaa !9
  %1354 = getelementptr inbounds %struct.doublecomplex, ptr %1352, i64 %1353
  %1355 = getelementptr inbounds %struct.doublecomplex, ptr %1354, i32 0, i32 1
  %1356 = load double, ptr %1355, align 8, !tbaa !14
  %1357 = fmul double %1351, %1356
  %1358 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  store double %1357, ptr %1358, align 8, !tbaa !14
  %1359 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %1360 = load double, ptr %1359, align 8, !tbaa !11
  %1361 = load ptr, ptr %44, align 8, !tbaa !5
  %1362 = load i64, ptr %70, align 8, !tbaa !9
  %1363 = getelementptr inbounds %struct.doublecomplex, ptr %1361, i64 %1362
  %1364 = getelementptr inbounds %struct.doublecomplex, ptr %1363, i32 0, i32 0
  store double %1360, ptr %1364, align 8, !tbaa !11
  %1365 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %1366 = load double, ptr %1365, align 8, !tbaa !14
  %1367 = load ptr, ptr %44, align 8, !tbaa !5
  %1368 = load i64, ptr %70, align 8, !tbaa !9
  %1369 = getelementptr inbounds %struct.doublecomplex, ptr %1367, i64 %1368
  %1370 = getelementptr inbounds %struct.doublecomplex, ptr %1369, i32 0, i32 1
  store double %1366, ptr %1370, align 8, !tbaa !14
  br label %1371

1371:                                             ; preds = %1332
  %1372 = load i64, ptr %82, align 8, !tbaa !9
  %1373 = add nsw i64 %1372, 1
  store i64 %1373, ptr %82, align 8, !tbaa !9
  br label %1328, !llvm.loop !24

1374:                                             ; preds = %1328
  br label %1375

1375:                                             ; preds = %1374, %1322
  br label %1376

1376:                                             ; preds = %1375
  %1377 = load i64, ptr %80, align 8, !tbaa !9
  %1378 = add nsw i64 %1377, 1
  store i64 %1378, ptr %80, align 8, !tbaa !9
  br label %1256, !llvm.loop !25

1379:                                             ; preds = %1256
  br label %1380

1380:                                             ; preds = %1379, %1236
  %1381 = load i64, ptr %97, align 8, !tbaa !9
  %1382 = icmp ne i64 %1381, 0
  br i1 %1382, label %1383, label %1389

1383:                                             ; preds = %1380
  %1384 = load ptr, ptr %35, align 8, !tbaa !5
  %1385 = load ptr, ptr %40, align 8, !tbaa !5
  %1386 = getelementptr inbounds %struct.doublecomplex, ptr %1385, i64 1
  %1387 = load ptr, ptr %35, align 8, !tbaa !5
  %1388 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %105, ptr noundef %85, ptr noundef %1384, ptr noundef @c__1, ptr noundef %1386, ptr noundef %1387, ptr noundef %87)
  br label %1389

1389:                                             ; preds = %1383, %1380
  %1390 = load i64, ptr %98, align 8, !tbaa !9
  %1391 = icmp ne i64 %1390, 0
  br i1 %1391, label %1392, label %1398

1392:                                             ; preds = %1389
  %1393 = load ptr, ptr %35, align 8, !tbaa !5
  %1394 = load ptr, ptr %41, align 8, !tbaa !5
  %1395 = getelementptr inbounds %struct.doublecomplex, ptr %1394, i64 1
  %1396 = load ptr, ptr %35, align 8, !tbaa !5
  %1397 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %107, ptr noundef %86, ptr noundef %1393, ptr noundef @c__1, ptr noundef %1395, ptr noundef %1396, ptr noundef %87)
  br label %1398

1398:                                             ; preds = %1392, %1389
  br label %1399

1399:                                             ; preds = %1398, %1044, %971, %919
  %1400 = load i64, ptr %109, align 8, !tbaa !9
  %1401 = sitofp i64 %1400 to double
  %1402 = load ptr, ptr %54, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.doublecomplex, ptr %1402, i64 1
  %1404 = getelementptr inbounds %struct.doublecomplex, ptr %1403, i32 0, i32 0
  store double %1401, ptr %1404, align 8, !tbaa !11
  %1405 = load ptr, ptr %54, align 8, !tbaa !5
  %1406 = getelementptr inbounds %struct.doublecomplex, ptr %1405, i64 1
  %1407 = getelementptr inbounds %struct.doublecomplex, ptr %1406, i32 0, i32 1
  store double 0.000000e+00, ptr %1407, align 8, !tbaa !14
  store i32 0, ptr %30, align 4
  store i32 1, ptr %114, align 4
  br label %1408

1408:                                             ; preds = %1399, %469, %463, %455
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 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
  %1409 = load i32, ptr %30, align 4
  ret i32 %1409
}

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

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

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}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !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
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = 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
@c__0 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 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 [2 x i8], align 1
@.str.16 = 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.17 = external hidden unnamed_addr constant [2 x i8], align 1

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

61:                                               ; preds = %29
  %62 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  %.not572 = icmp eq i64 %62, 0
  br label %63

63:                                               ; preds = %61, %29
  %.not585 = phi i1 [ true, %29 ], [ %.not572, %61 ]
  %64 = phi i1 [ false, %29 ], [ %.not572, %61 ]
  %65 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str) #6
  %.not573 = icmp eq i64 %65, 0
  br i1 %.not573, label %66, label %68

66:                                               ; preds = %63
  %67 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #6
  %.not574 = icmp eq i64 %67, 0
  br label %68

68:                                               ; preds = %66, %63
  %.not586 = phi i1 [ true, %63 ], [ %.not574, %66 ]
  %69 = phi i1 [ false, %63 ], [ %.not574, %66 ]
  %.not587 = and i1 %.not585, %.not586
  %70 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not575 = icmp eq i64 %70, 0
  br i1 %.not575, label %71, label %74

71:                                               ; preds = %68
  %72 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %73 = icmp ne i64 %72, 0
  br label %74

74:                                               ; preds = %71, %68
  %75 = phi i1 [ true, %68 ], [ %73, %71 ]
  %76 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str) #6
  %77 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.3) #6
  %78 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.1) #6
  %79 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.4) #6
  store i64 0, ptr %28, align 8, !tbaa !5
  %80 = load i64, ptr %24, align 8, !tbaa !5
  %81 = icmp eq i64 %80, -1
  br i1 %75, label %86, label %82

82:                                               ; preds = %74
  %83 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.5) #6
  %.not576 = icmp eq i64 %83, 0
  br i1 %.not576, label %84, label %86

84:                                               ; preds = %82
  %85 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.4) #6
  %.not577 = icmp eq i64 %85, 0
  %brmerge = select i1 %.not577, i1 true, i1 %64
  %brmerge691 = select i1 %brmerge, i1 true, i1 %69
  %.mux = select i1 %64, i64 -2, i64 -3
  %.mux.mux = select i1 %.not577, i64 -1, i64 %.mux
  br i1 %brmerge691, label %.thread610.sink.split, label %87

86:                                               ; preds = %82, %74
  %brmerge692 = select i1 %64, i1 true, i1 %69
  %.mux693 = select i1 %64, i64 -2, i64 -3
  br i1 %brmerge692, label %.thread610.sink.split, label %87

87:                                               ; preds = %86, %84
  %88 = icmp ne i64 %76, 0
  %89 = icmp ne i64 %77, 0
  %or.cond = select i1 %88, i1 true, i1 %89
  %90 = icmp ne i64 %79, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %90
  %91 = icmp ne i64 %78, 0
  %or.cond5 = select i1 %or.cond3, i1 true, i1 %91
  br i1 %or.cond5, label %92, label %.thread610.sink.split

92:                                               ; preds = %87
  %93 = load i64, ptr %4, align 8, !tbaa !5
  %94 = icmp slt i64 %93, 0
  br i1 %94, label %.thread610.sink.split, label %95

95:                                               ; preds = %92
  %96 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %93, i64 1)
  %97 = icmp slt i64 %96, %spec.select
  br i1 %97, label %.thread610.sink.split, label %98

98:                                               ; preds = %95
  %99 = load i64, ptr %8, align 8, !tbaa !5
  %100 = icmp slt i64 %99, %spec.select
  br i1 %100, label %.thread610.sink.split, label %101

101:                                              ; preds = %98
  %102 = load i64, ptr %12, align 8, !tbaa !5
  %103 = icmp sgt i64 %102, 0
  %104 = icmp uge i64 %102, %93
  %or.cond626.not = or i1 %.not585, %104
  %or.cond632 = select i1 %103, i1 %or.cond626.not, i1 false
  br i1 %or.cond632, label %105, label %.thread610.sink.split

105:                                              ; preds = %101
  %106 = load i64, ptr %14, align 8, !tbaa !5
  %107 = icmp sgt i64 %106, 0
  %108 = icmp uge i64 %106, %93
  %or.cond627.not = or i1 %.not586, %108
  %or.cond633 = select i1 %107, i1 %or.cond627.not, i1 false
  br i1 %or.cond633, label %109, label %.thread610.sink.split

109:                                              ; preds = %105
  %.pr = load i64, ptr %28, align 8, !tbaa !5
  %110 = icmp eq i64 %.pr, 0
  br i1 %110, label %111, label %.thread610

111:                                              ; preds = %109
  %112 = icmp eq i64 %93, 0
  br i1 %112, label %137, label %113

113:                                              ; preds = %111
  %114 = shl nuw i64 %93, 1
  %.not578 = icmp eq i64 %77, 0
  br i1 %.not578, label %117, label %115

115:                                              ; preds = %113
  %116 = shl i64 %93, 2
  br label %121

117:                                              ; preds = %113
  %or.cond7 = select i1 %91, i1 true, i1 %90
  br i1 %or.cond7, label %118, label %121

118:                                              ; preds = %117
  %119 = add nuw nsw i64 %93, 1
  %120 = mul nsw i64 %114, %119
  br label %121

121:                                              ; preds = %118, %117, %115
  %.0541 = phi i64 [ %116, %115 ], [ %120, %118 ], [ %114, %117 ]
  %122 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c__0) #6
  %123 = add i64 %122, 1
  %124 = mul i64 %123, %93
  %125 = tail call i64 @llvm.smax.i64(i64 %.0541, i64 %124)
  store i64 %125, ptr %30, align 8, !tbaa !5
  %126 = load i64, ptr %4, align 8, !tbaa !5
  %127 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c__0) #6
  %128 = add i64 %127, 1
  %129 = mul i64 %128, %126
  store i64 %129, ptr %31, align 8, !tbaa !5
  %130 = tail call i64 @llvm.smax.i64(i64 %125, i64 %129)
  br i1 %.not585, label %137, label %131

131:                                              ; preds = %121
  store i64 %130, ptr %30, align 8, !tbaa !5
  %132 = load i64, ptr %4, align 8, !tbaa !5
  %133 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c__0) #6
  %134 = add i64 %133, 1
  %135 = mul i64 %134, %132
  store i64 %135, ptr %31, align 8, !tbaa !5
  %136 = tail call i64 @llvm.smax.i64(i64 %130, i64 %135)
  br label %137

137:                                              ; preds = %111, %121, %131
  %.1542 = phi i64 [ %.0541, %131 ], [ %.0541, %121 ], [ 1, %111 ]
  %.0540 = phi i64 [ %136, %131 ], [ %130, %121 ], [ 1, %111 ]
  %138 = sitofp i64 %.0540 to double
  store double %138, ptr %23, align 8, !tbaa !9
  %139 = getelementptr inbounds i8, ptr %23, i64 8
  store double 0.000000e+00, ptr %139, align 8, !tbaa !12
  %140 = load i64, ptr %24, align 8, !tbaa !5
  %141 = icmp sge i64 %140, %.1542
  %or.cond9 = select i1 %141, i1 true, i1 %81
  br i1 %or.cond9, label %.thread, label %.thread610.sink.split

.thread:                                          ; preds = %137
  %.pr607.pr = load i64, ptr %28, align 8, !tbaa !5
  %.not582 = icmp eq i64 %.pr607.pr, 0
  br i1 %.not582, label %145, label %.thread610

.thread610.sink.split:                            ; preds = %86, %84, %137, %105, %101, %98, %95, %92, %87
  %.sink = phi i64 [ %.mux.mux, %84 ], [ %.mux693, %86 ], [ -4, %87 ], [ -5, %92 ], [ -7, %95 ], [ -9, %98 ], [ -13, %101 ], [ -15, %105 ], [ -25, %137 ]
  store i64 %.sink, ptr %28, align 8, !tbaa !5
  br label %.thread610

.thread610:                                       ; preds = %.thread610.sink.split, %109, %.thread
  %142 = phi i64 [ %.pr607.pr, %.thread ], [ %.pr, %109 ], [ %.sink, %.thread610.sink.split ]
  %143 = sub nsw i64 0, %142
  store i64 %143, ptr %30, align 8, !tbaa !5
  %144 = call i32 @xerbla_(ptr noundef nonnull @.str.10, ptr noundef nonnull %30) #6
  br label %428

145:                                              ; preds = %.thread
  br i1 %81, label %428, label %146

146:                                              ; preds = %145
  %147 = load i64, ptr %4, align 8, !tbaa !5
  %148 = icmp eq i64 %147, 0
  br i1 %148, label %428, label %149

149:                                              ; preds = %146
  %150 = tail call double @dlamch_(ptr noundef nonnull @.str.2) #6
  %151 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #6
  store double %151, ptr %44, align 8, !tbaa !13
  %152 = fdiv double 1.000000e+00, %151
  store double %152, ptr %41, align 8, !tbaa !13
  %153 = call i32 @dlabad_(ptr noundef nonnull %44, ptr noundef nonnull %41) #6
  %154 = load double, ptr %44, align 8, !tbaa !13
  %155 = call double @sqrt(double noundef %154) #6
  %156 = fdiv double %155, %150
  store double %156, ptr %44, align 8, !tbaa !13
  %157 = fdiv double 1.000000e+00, %156
  store double %157, ptr %41, align 8, !tbaa !13
  %158 = call double @zlange_(ptr noundef nonnull @.str.11, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %25) #6
  store double %158, ptr %34, align 8, !tbaa !13
  %159 = fcmp ogt double %158, 0.000000e+00
  %160 = load double, ptr %44, align 8
  %161 = fcmp olt double %158, %160
  %or.cond635 = select i1 %159, i1 %161, i1 false
  br i1 %or.cond635, label %165, label %162

162:                                              ; preds = %149
  %163 = load double, ptr %41, align 8, !tbaa !13
  %164 = fcmp ogt double %158, %163
  br i1 %164, label %165, label %167

165:                                              ; preds = %149, %162
  %storemerge630 = phi double [ %163, %162 ], [ %160, %149 ]
  store double %storemerge630, ptr %42, align 8, !tbaa !13
  %166 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %34, ptr noundef nonnull %42, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %36) #6
  br label %167

167:                                              ; preds = %162, %165
  %.not583617 = phi i1 [ false, %165 ], [ true, %162 ]
  %168 = call double @zlange_(ptr noundef nonnull @.str.11, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %25) #6
  store double %168, ptr %35, align 8, !tbaa !13
  %169 = fcmp ogt double %168, 0.000000e+00
  %170 = load double, ptr %44, align 8
  %171 = fcmp olt double %168, %170
  %or.cond637 = select i1 %169, i1 %171, i1 false
  br i1 %or.cond637, label %175, label %172

172:                                              ; preds = %167
  %173 = load double, ptr %41, align 8, !tbaa !13
  %174 = fcmp ogt double %168, %173
  br i1 %174, label %175, label %177

175:                                              ; preds = %167, %172
  %storemerge631 = phi double [ %173, %172 ], [ %170, %167 ]
  store double %storemerge631, ptr %43, align 8, !tbaa !13
  %176 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %35, ptr noundef nonnull %43, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %36) #6
  br label %177

177:                                              ; preds = %172, %175
  %.not584622 = phi i1 [ false, %175 ], [ true, %172 ]
  %178 = call i32 @zggbal_(ptr noundef %0, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %25, ptr noundef nonnull %36) #6
  %179 = call double @zlange_(ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %25) #6
  store double %179, ptr %19, align 8, !tbaa !13
  br i1 %.not583617, label %183, label %180

180:                                              ; preds = %177
  store double %179, ptr %25, align 8, !tbaa !13
  %181 = call i32 @dlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %42, ptr noundef nonnull %34, ptr noundef nonnull @c__1, ptr noundef nonnull @c__1, ptr noundef nonnull %25, ptr noundef nonnull @c__1, ptr noundef nonnull %36) #6
  %182 = load double, ptr %25, align 8, !tbaa !13
  store double %182, ptr %19, align 8, !tbaa !13
  br label %183

183:                                              ; preds = %180, %177
  %184 = call double @zlange_(ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %25) #6
  store double %184, ptr %20, align 8, !tbaa !13
  br i1 %.not584622, label %188, label %185

185:                                              ; preds = %183
  store double %184, ptr %25, align 8, !tbaa !13
  %186 = call i32 @dlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %43, ptr noundef nonnull %35, ptr noundef nonnull @c__1, ptr noundef nonnull @c__1, ptr noundef nonnull %25, ptr noundef nonnull @c__1, ptr noundef nonnull %36) #6
  %187 = load double, ptr %25, align 8, !tbaa !13
  store double %187, ptr %20, align 8, !tbaa !13
  br label %188

188:                                              ; preds = %185, %183
  %189 = load i64, ptr %16, align 8, !tbaa !5
  %190 = add nsw i64 %189, 1
  %191 = load i64, ptr %15, align 8, !tbaa !5
  %192 = sub i64 %190, %191
  store i64 %192, ptr %38, align 8, !tbaa !5
  %or.cond11 = and i1 %.not587, %88
  br i1 %or.cond11, label %196, label %193

193:                                              ; preds = %188
  %194 = load i64, ptr %4, align 8, !tbaa !5
  %reass.sub = sub i64 %194, %191
  %195 = add i64 %reass.sub, 1
  br label %196

196:                                              ; preds = %188, %193
  %storemerge = phi i64 [ %195, %193 ], [ %192, %188 ]
  store i64 %storemerge, ptr %37, align 8, !tbaa !5
  %197 = load i64, ptr %24, align 8, !tbaa !5
  %198 = sub i64 %197, %192
  store i64 %198, ptr %30, align 8, !tbaa !5
  %199 = add i64 %48, 1
  %200 = mul i64 %191, %199
  %201 = getelementptr inbounds %struct.doublecomplex, ptr %50, i64 %200
  %202 = getelementptr %struct.doublecomplex, ptr %23, i64 %192
  %203 = call i32 @zgeqrf_(ptr noundef nonnull %38, ptr noundef nonnull %37, ptr noundef %201, ptr noundef nonnull %8, ptr noundef nonnull %23, ptr noundef %202, ptr noundef nonnull %30, ptr noundef nonnull %36) #6
  %204 = load i64, ptr %24, align 8, !tbaa !5
  %205 = sub i64 %204, %192
  store i64 %205, ptr %30, align 8, !tbaa !5
  %206 = load i64, ptr %15, align 8, !tbaa !5
  %207 = mul i64 %206, %199
  %208 = getelementptr inbounds %struct.doublecomplex, ptr %50, i64 %207
  %209 = add i64 %45, 1
  %210 = mul i64 %206, %209
  %211 = getelementptr inbounds %struct.doublecomplex, ptr %47, i64 %210
  %212 = call i32 @zunmqr_(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, ptr noundef nonnull %38, ptr noundef nonnull %37, ptr noundef nonnull %38, ptr noundef %208, ptr noundef nonnull %8, ptr noundef nonnull %23, ptr noundef %211, ptr noundef nonnull %6, ptr noundef %202, ptr noundef nonnull %30, ptr noundef nonnull %36) #6
  br i1 %.not585, label %236, label %213

213:                                              ; preds = %196
  %214 = call i32 @zlaset_(ptr noundef nonnull @.str.16, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %11, ptr noundef nonnull %12) #6
  %215 = load i64, ptr %38, align 8, !tbaa !5
  %216 = icmp sgt i64 %215, 1
  br i1 %216, label %217, label %228

217:                                              ; preds = %213
  %218 = add nsw i64 %215, -1
  store i64 %218, ptr %30, align 8, !tbaa !5
  store i64 %218, ptr %31, align 8, !tbaa !5
  %219 = load i64, ptr %15, align 8, !tbaa !5
  %220 = add nsw i64 %219, 1
  %221 = mul nsw i64 %219, %48
  %222 = getelementptr %struct.doublecomplex, ptr %50, i64 %220
  %223 = getelementptr %struct.doublecomplex, ptr %222, i64 %221
  %224 = mul nsw i64 %219, %51
  %225 = getelementptr %struct.doublecomplex, ptr %53, i64 %220
  %226 = getelementptr %struct.doublecomplex, ptr %225, i64 %224
  %227 = call i32 @zlacpy_(ptr noundef nonnull @.str.14, ptr noundef nonnull %30, ptr noundef nonnull %31, ptr noundef %223, ptr noundef nonnull %8, ptr noundef %226, ptr noundef nonnull %12) #6
  br label %228

228:                                              ; preds = %217, %213
  %229 = load i64, ptr %24, align 8, !tbaa !5
  %230 = sub i64 %229, %192
  store i64 %230, ptr %30, align 8, !tbaa !5
  %231 = load i64, ptr %15, align 8, !tbaa !5
  %232 = add i64 %51, 1
  %233 = mul i64 %231, %232
  %234 = getelementptr inbounds %struct.doublecomplex, ptr %53, i64 %233
  %235 = call i32 @zungqr_(ptr noundef nonnull %38, ptr noundef nonnull %38, ptr noundef nonnull %38, ptr noundef %234, ptr noundef nonnull %12, ptr noundef nonnull %23, ptr noundef %202, ptr noundef nonnull %30, ptr noundef nonnull %36) #6
  br label %236

236:                                              ; preds = %228, %196
  br i1 %.not586, label %239, label %237

237:                                              ; preds = %236
  %238 = call i32 @zlaset_(ptr noundef nonnull @.str.16, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %13, ptr noundef nonnull %14) #6
  br label %239

239:                                              ; preds = %237, %236
  br i1 %or.cond11, label %242, label %240

240:                                              ; preds = %239
  %241 = call i32 @zgghrd_(ptr noundef %1, ptr noundef %2, ptr noundef nonnull %4, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %36) #6
  br label %249

242:                                              ; preds = %239
  %243 = load i64, ptr %15, align 8, !tbaa !5
  %244 = mul i64 %243, %209
  %245 = getelementptr inbounds %struct.doublecomplex, ptr %47, i64 %244
  %246 = mul i64 %243, %199
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %50, i64 %246
  %248 = call i32 @zgghrd_(ptr noundef nonnull @.str, ptr noundef nonnull @.str, ptr noundef nonnull %38, ptr noundef nonnull @c__1, ptr noundef nonnull %38, ptr noundef %245, ptr noundef nonnull %6, ptr noundef %247, ptr noundef nonnull %8, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %36) #6
  br label %249

249:                                              ; preds = %242, %240
  %.604 = phi i8 [ 69, %242 ], [ 83, %240 ]
  store i8 %.604, ptr %40, align 1, !tbaa !14
  %250 = load i64, ptr %24, align 8, !tbaa !5
  store i64 %250, ptr %30, align 8, !tbaa !5
  %251 = call i32 @zhgeqz_(ptr noundef nonnull %40, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %4, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %23, ptr noundef nonnull %30, ptr noundef %25, ptr noundef nonnull %36) #6
  %252 = load i64, ptr %36, align 8, !tbaa !5
  %.not589 = icmp eq i64 %252, 0
  br i1 %.not589, label %263, label %253

253:                                              ; preds = %249
  %254 = icmp slt i64 %252, 1
  %.pre = load i64, ptr %4, align 8, !tbaa !5
  %.not600 = icmp sgt i64 %252, %.pre
  %or.cond690 = select i1 %254, i1 true, i1 %.not600
  br i1 %or.cond690, label %256, label %255

255:                                              ; preds = %253
  store i64 %252, ptr %28, align 8, !tbaa !5
  br label %427

256:                                              ; preds = %253
  %257 = icmp sle i64 %252, %.pre
  %258 = shl i64 %.pre, 1
  %.not601 = icmp sgt i64 %252, %258
  %or.cond605 = or i1 %257, %.not601
  br i1 %or.cond605, label %261, label %259

259:                                              ; preds = %256
  %260 = sub nsw i64 %252, %.pre
  store i64 %260, ptr %28, align 8, !tbaa !5
  br label %427

261:                                              ; preds = %256
  %262 = add nsw i64 %.pre, 1
  store i64 %262, ptr %28, align 8, !tbaa !5
  br label %427

263:                                              ; preds = %249
  br i1 %or.cond11, label %.loopexit641, label %264

264:                                              ; preds = %263
  br i1 %.not587, label %276, label %265

265:                                              ; preds = %264
  br i1 %.not585, label %269, label %266

266:                                              ; preds = %265
  br i1 %.not586, label %268, label %267

267:                                              ; preds = %266
  store i8 66, ptr %40, align 1, !tbaa !14
  br label %270

268:                                              ; preds = %266
  store i8 76, ptr %40, align 1, !tbaa !14
  br label %270

269:                                              ; preds = %265
  store i8 82, ptr %40, align 1, !tbaa !14
  br label %270

270:                                              ; preds = %267, %268, %269
  %271 = call i32 @ztgevc_(ptr noundef nonnull %40, ptr noundef nonnull @.str.4, ptr noundef nonnull %39, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %4, ptr noundef nonnull %33, ptr noundef nonnull %23, ptr noundef %25, ptr noundef nonnull %36) #6
  %272 = load i64, ptr %36, align 8, !tbaa !5
  %.not590 = icmp eq i64 %272, 0
  br i1 %.not590, label %276, label %273

273:                                              ; preds = %270
  %274 = load i64, ptr %4, align 8, !tbaa !5
  %275 = add nsw i64 %274, 2
  store i64 %275, ptr %28, align 8, !tbaa !5
  br label %427

276:                                              ; preds = %270, %264
  br i1 %88, label %.loopexit641, label %277

277:                                              ; preds = %276
  %278 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %278, ptr %30, align 8, !tbaa !5
  %.not591644 = icmp slt i64 %278, 1
  br i1 %.not591644, label %.loopexit641, label %.lr.ph647

.lr.ph647:                                        ; preds = %277
  %or.cond19 = select i1 %89, i1 true, i1 %90
  br i1 %or.cond19, label %.lr.ph647.split.us, label %.lr.ph647.split

.lr.ph647.split.us:                               ; preds = %.lr.ph647, %287
  %.0556645.us = phi i64 [ %293, %287 ], [ 1, %.lr.ph647 ]
  %279 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %279, ptr %31, align 8, !tbaa !5
  %.not592642.us = icmp slt i64 %279, 1
  br i1 %.not592642.us, label %._crit_edge.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %.lr.ph647.split.us
  %280 = shl nuw i64 %279, 3
  call void @llvm.memset.p0.i64(ptr align 8 %27, i8 0, i64 %280, i1 false), !tbaa !5
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %.lr.ph.us.preheader, %.lr.ph647.split.us
  %281 = getelementptr inbounds i64, ptr %59, i64 %.0556645.us
  store i64 1, ptr %281, align 8, !tbaa !5
  %282 = load i64, ptr %4, align 8, !tbaa !5
  %reass.add.us = shl i64 %282, 1
  %283 = getelementptr %struct.doublecomplex, ptr %23, i64 %282
  %284 = getelementptr %struct.doublecomplex, ptr %23, i64 %reass.add.us
  %285 = call i32 @ztgevc_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %27, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %23, ptr noundef nonnull %4, ptr noundef %283, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef nonnull %284, ptr noundef %25, ptr noundef nonnull %36) #6
  %286 = load i64, ptr %36, align 8, !tbaa !5
  %.not593.us = icmp eq i64 %286, 0
  br i1 %.not593.us, label %287, label %.split.us

287:                                              ; preds = %._crit_edge.us
  %288 = load i64, ptr %24, align 8, !tbaa !5
  %289 = sub i64 %288, %reass.add.us
  store i64 %289, ptr %31, align 8, !tbaa !5
  %290 = getelementptr inbounds double, ptr %57, i64 %.0556645.us
  %291 = getelementptr inbounds double, ptr %58, i64 %.0556645.us
  %292 = call i32 @ztgsna_(ptr noundef %3, ptr noundef nonnull @.str.5, ptr noundef nonnull %27, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %23, ptr noundef nonnull %4, ptr noundef %283, ptr noundef nonnull %4, ptr noundef nonnull %290, ptr noundef nonnull %291, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %284, ptr noundef nonnull %31, ptr noundef %26, ptr noundef nonnull %36) #6
  %293 = add nuw nsw i64 %.0556645.us, 1
  %294 = load i64, ptr %30, align 8, !tbaa !5
  %.not591.us.not = icmp slt i64 %.0556645.us, %294
  br i1 %.not591.us.not, label %.lr.ph647.split.us, label %.loopexit641, !llvm.loop !15

.lr.ph647.split:                                  ; preds = %.lr.ph647, %._crit_edge
  %.0556645 = phi i64 [ %306, %._crit_edge ], [ 1, %.lr.ph647 ]
  %295 = load i64, ptr %4, align 8, !tbaa !5
  %.not592642 = icmp slt i64 %295, 1
  br i1 %.not592642, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.lr.ph647.split
  %296 = shl nuw i64 %295, 3
  call void @llvm.memset.p0.i64(ptr align 8 %27, i8 0, i64 %296, i1 false), !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %.lr.ph647.split
  %297 = getelementptr inbounds i64, ptr %59, i64 %.0556645
  store i64 1, ptr %297, align 8, !tbaa !5
  %298 = load i64, ptr %4, align 8, !tbaa !5
  %reass.add = shl i64 %298, 1
  %299 = load i64, ptr %24, align 8, !tbaa !5
  %300 = sub i64 %299, %reass.add
  store i64 %300, ptr %31, align 8, !tbaa !5
  %301 = getelementptr %struct.doublecomplex, ptr %23, i64 %298
  %302 = getelementptr inbounds double, ptr %57, i64 %.0556645
  %303 = getelementptr inbounds double, ptr %58, i64 %.0556645
  %304 = getelementptr %struct.doublecomplex, ptr %23, i64 %reass.add
  %305 = call i32 @ztgsna_(ptr noundef %3, ptr noundef nonnull @.str.5, ptr noundef %27, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %23, ptr noundef nonnull %4, ptr noundef %301, ptr noundef nonnull %4, ptr noundef nonnull %302, ptr noundef nonnull %303, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %304, ptr noundef nonnull %31, ptr noundef %26, ptr noundef nonnull %36) #6
  %306 = add nuw nsw i64 %.0556645, 1
  %307 = load i64, ptr %30, align 8, !tbaa !5
  %.not591.not = icmp slt i64 %.0556645, %307
  br i1 %.not591.not, label %.lr.ph647.split, label %.loopexit641, !llvm.loop !15

.split.us:                                        ; preds = %._crit_edge.us
  %308 = load i64, ptr %4, align 8, !tbaa !5
  %309 = add nsw i64 %308, 2
  store i64 %309, ptr %28, align 8, !tbaa !5
  br label %427

.loopexit641:                                     ; preds = %._crit_edge, %287, %277, %276, %263
  br i1 %.not585, label %.loopexit640, label %310

310:                                              ; preds = %.loopexit641
  %311 = call i32 @zggbak_(ptr noundef %0, ptr noundef nonnull @.str.14, ptr noundef nonnull %4, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef %17, ptr noundef %18, ptr noundef nonnull %4, ptr noundef %11, ptr noundef nonnull %12, ptr noundef nonnull %36) #6
  %312 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %312, ptr %30, align 8, !tbaa !5
  %.not594660 = icmp slt i64 %312, 1
  br i1 %.not594660, label %.loopexit640, label %.lr.ph663.preheader

.lr.ph663.preheader:                              ; preds = %310
  %313 = shl i64 %51, 4
  br label %.lr.ph663

.lr.ph663thread-pre-split:                        ; preds = %.loopexit639
  %314 = add nuw nsw i64 %.0553661, 1
  %.pr686 = load i64, ptr %4, align 8, !tbaa !5
  %indvar.next = add i64 %indvar, 1
  br label %.lr.ph663

.lr.ph663:                                        ; preds = %.lr.ph663.preheader, %.lr.ph663thread-pre-split
  %indvar = phi i64 [ 0, %.lr.ph663.preheader ], [ %indvar.next, %.lr.ph663thread-pre-split ]
  %315 = phi i64 [ %312, %.lr.ph663.preheader ], [ %.pr686, %.lr.ph663thread-pre-split ]
  %.0553661 = phi i64 [ 1, %.lr.ph663.preheader ], [ %314, %.lr.ph663thread-pre-split ]
  %316 = mul i64 %313, %indvar
  %scevgep = getelementptr i8, ptr %11, i64 %316
  %317 = or disjoint i64 %316, 8
  %scevgep696 = getelementptr i8, ptr %11, i64 %317
  store i64 %315, ptr %31, align 8, !tbaa !5
  %.not598648 = icmp slt i64 %315, 1
  br i1 %.not598648, label %._crit_edge653, label %.lr.ph652

.lr.ph652:                                        ; preds = %.lr.ph663
  %318 = mul nsw i64 %.0553661, %51
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %53, i64 %318
  br label %319

319:                                              ; preds = %.lr.ph652, %319
  %.0549650 = phi double [ 0.000000e+00, %.lr.ph652 ], [ %330, %319 ]
  %.0551649 = phi i64 [ 1, %.lr.ph652 ], [ %331, %319 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0551649
  %320 = load double, ptr %gep, align 8, !tbaa !9
  %321 = call double @d_imag(ptr noundef nonnull %gep) #6
  %322 = insertelement <2 x double> poison, double %320, i64 0
  %323 = insertelement <2 x double> %322, double %321, i64 1
  %324 = fcmp oge <2 x double> %323, zeroinitializer
  %325 = fneg <2 x double> %323
  %326 = select <2 x i1> %324, <2 x double> %323, <2 x double> %325
  %shift = shufflevector <2 x double> %326, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %327 = fadd <2 x double> %326, %shift
  %328 = extractelement <2 x double> %327, i64 0
  %329 = fcmp oge double %.0549650, %328
  %330 = select i1 %329, double %.0549650, double %328
  %331 = add nuw nsw i64 %.0551649, 1
  %332 = load i64, ptr %31, align 8, !tbaa !5
  %.not598.not = icmp slt i64 %.0551649, %332
  br i1 %.not598.not, label %319, label %._crit_edge653, !llvm.loop !17

._crit_edge653:                                   ; preds = %319, %.lr.ph663
  %.0549.lcssa = phi double [ 0.000000e+00, %.lr.ph663 ], [ %330, %319 ]
  %333 = load double, ptr %44, align 8, !tbaa !13
  %334 = fcmp olt double %.0549.lcssa, %333
  br i1 %334, label %.loopexit639, label %335

335:                                              ; preds = %._crit_edge653
  %336 = fdiv double 1.000000e+00, %.0549.lcssa
  %337 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %337, ptr %31, align 8, !tbaa !5
  %.not599654 = icmp slt i64 %337, 1
  br i1 %.not599654, label %.loopexit639, label %.lr.ph657

.lr.ph657:                                        ; preds = %335
  %338 = mul nsw i64 %.0553661, %51
  %invariant.gep658 = getelementptr %struct.doublecomplex, ptr %53, i64 %338
  %min.iters.check = icmp ult i64 %337, 12
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph657
  %339 = add nsw i64 %337, -1
  %mul.result = shl i64 %339, 4
  %340 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %341 = icmp ult ptr %340, %scevgep
  %mul.result698 = shl i64 %339, 4
  %mul.overflow699 = icmp ugt i64 %339, 1152921504606846975
  %342 = getelementptr i8, ptr %scevgep696, i64 %mul.result698
  %343 = icmp ult ptr %342, %scevgep696
  %344 = or i1 %343, %mul.overflow699
  %345 = or i1 %341, %344
  br i1 %345, label %scalar.ph.preheader, label %vector.ph

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

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.lr.ph657
  %.1552655.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph657 ], [ %ind.end, %middle.block ]
  %xtraiter = and i64 %337, 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
  %gep659.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep658, i64 %.1552655.ph
  %349 = load <2 x double>, ptr %gep659.prol, align 8, !tbaa !13
  %350 = insertelement <2 x double> poison, double %336, i64 0
  %351 = shufflevector <2 x double> %350, <2 x double> poison, <2 x i32> zeroinitializer
  %352 = fmul <2 x double> %351, %349
  store <2 x double> %352, ptr %gep659.prol, align 8, !tbaa !13
  %353 = add nuw nsw i64 %.1552655.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.1552655.unr = phi i64 [ %.1552655.ph, %scalar.ph.preheader ], [ %353, %scalar.ph.prol ]
  %354 = icmp eq i64 %337, %.1552655.ph
  br i1 %354, label %.loopexit639, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %355 = insertelement <2 x double> poison, double %336, i64 0
  %356 = shufflevector <2 x double> %355, <2 x double> poison, <2 x i32> zeroinitializer
  %357 = insertelement <2 x double> poison, double %336, i64 0
  %358 = shufflevector <2 x double> %357, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %.1552655 = phi i64 [ %.1552655.unr, %scalar.ph.preheader.new ], [ %364, %scalar.ph ]
  %gep659 = getelementptr %struct.doublecomplex, ptr %invariant.gep658, i64 %.1552655
  %359 = load <2 x double>, ptr %gep659, align 8, !tbaa !13
  %360 = fmul <2 x double> %356, %359
  store <2 x double> %360, ptr %gep659, align 8, !tbaa !13
  %361 = add nuw i64 %.1552655, 1
  %gep659.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep658, i64 %361
  %362 = load <2 x double>, ptr %gep659.1, align 8, !tbaa !13
  %363 = fmul <2 x double> %358, %362
  store <2 x double> %363, ptr %gep659.1, align 8, !tbaa !13
  %364 = add nuw i64 %.1552655, 2
  %exitcond.not.1 = icmp eq i64 %361, %337
  br i1 %exitcond.not.1, label %.loopexit639, label %scalar.ph, !llvm.loop !21

.loopexit639:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %335, %._crit_edge653
  %365 = load i64, ptr %30, align 8, !tbaa !5
  %.not594.not = icmp slt i64 %.0553661, %365
  br i1 %.not594.not, label %.lr.ph663thread-pre-split, label %.loopexit640, !llvm.loop !22

.loopexit640:                                     ; preds = %.loopexit639, %310, %.loopexit641
  br i1 %.not586, label %.loopexit638, label %366

366:                                              ; preds = %.loopexit640
  %367 = call i32 @zggbak_(ptr noundef %0, ptr noundef nonnull @.str.17, ptr noundef nonnull %4, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef %17, ptr noundef %18, ptr noundef nonnull %4, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %36) #6
  %368 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %368, ptr %30, align 8, !tbaa !5
  %.not595679 = icmp slt i64 %368, 1
  br i1 %.not595679, label %.loopexit638, label %.lr.ph682.preheader

.lr.ph682.preheader:                              ; preds = %366
  %369 = shl i64 %54, 4
  br label %.lr.ph682

.lr.ph682thread-pre-split:                        ; preds = %.loopexit
  %370 = add nuw nsw i64 %.1554680, 1
  %.pr687 = load i64, ptr %4, align 8, !tbaa !5
  %indvar.next703 = add i64 %indvar702, 1
  br label %.lr.ph682

.lr.ph682:                                        ; preds = %.lr.ph682.preheader, %.lr.ph682thread-pre-split
  %indvar702 = phi i64 [ 0, %.lr.ph682.preheader ], [ %indvar.next703, %.lr.ph682thread-pre-split ]
  %371 = phi i64 [ %368, %.lr.ph682.preheader ], [ %.pr687, %.lr.ph682thread-pre-split ]
  %.1554680 = phi i64 [ 1, %.lr.ph682.preheader ], [ %370, %.lr.ph682thread-pre-split ]
  %372 = mul i64 %369, %indvar702
  %scevgep704 = getelementptr i8, ptr %13, i64 %372
  %373 = or disjoint i64 %372, 8
  %scevgep708 = getelementptr i8, ptr %13, i64 %373
  store i64 %371, ptr %31, align 8, !tbaa !5
  %.not596664 = icmp slt i64 %371, 1
  br i1 %.not596664, label %._crit_edge669, label %.lr.ph668

.lr.ph668:                                        ; preds = %.lr.ph682
  %374 = mul nsw i64 %.1554680, %54
  %invariant.gep671 = getelementptr %struct.doublecomplex, ptr %56, i64 %374
  br label %375

375:                                              ; preds = %.lr.ph668, %375
  %.1550666 = phi double [ 0.000000e+00, %.lr.ph668 ], [ %386, %375 ]
  %.2665 = phi i64 [ 1, %.lr.ph668 ], [ %387, %375 ]
  %gep672 = getelementptr %struct.doublecomplex, ptr %invariant.gep671, i64 %.2665
  %376 = load double, ptr %gep672, align 8, !tbaa !9
  %377 = call double @d_imag(ptr noundef nonnull %gep672) #6
  %378 = insertelement <2 x double> poison, double %376, i64 0
  %379 = insertelement <2 x double> %378, double %377, i64 1
  %380 = fcmp oge <2 x double> %379, zeroinitializer
  %381 = fneg <2 x double> %379
  %382 = select <2 x i1> %380, <2 x double> %379, <2 x double> %381
  %shift731 = shufflevector <2 x double> %382, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %383 = fadd <2 x double> %382, %shift731
  %384 = extractelement <2 x double> %383, i64 0
  %385 = fcmp oge double %.1550666, %384
  %386 = select i1 %385, double %.1550666, double %384
  %387 = add nuw nsw i64 %.2665, 1
  %388 = load i64, ptr %31, align 8, !tbaa !5
  %.not596.not = icmp slt i64 %.2665, %388
  br i1 %.not596.not, label %375, label %._crit_edge669, !llvm.loop !23

._crit_edge669:                                   ; preds = %375, %.lr.ph682
  %.1550.lcssa = phi double [ 0.000000e+00, %.lr.ph682 ], [ %386, %375 ]
  %389 = load double, ptr %44, align 8, !tbaa !13
  %390 = fcmp olt double %.1550.lcssa, %389
  br i1 %390, label %.loopexit, label %391

391:                                              ; preds = %._crit_edge669
  %392 = fdiv double 1.000000e+00, %.1550.lcssa
  %393 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %393, ptr %31, align 8, !tbaa !5
  %.not597673 = icmp slt i64 %393, 1
  br i1 %.not597673, label %.loopexit, label %.lr.ph676

.lr.ph676:                                        ; preds = %391
  %394 = mul nsw i64 %.1554680, %54
  %invariant.gep677 = getelementptr %struct.doublecomplex, ptr %56, i64 %394
  %min.iters.check714 = icmp ult i64 %393, 12
  br i1 %min.iters.check714, label %scalar.ph713.preheader, label %vector.scevcheck701

vector.scevcheck701:                              ; preds = %.lr.ph676
  %395 = add nsw i64 %393, -1
  %mul.result706 = shl i64 %395, 4
  %396 = getelementptr i8, ptr %scevgep704, i64 %mul.result706
  %397 = icmp ult ptr %396, %scevgep704
  %mul.result710 = shl i64 %395, 4
  %mul.overflow711 = icmp ugt i64 %395, 1152921504606846975
  %398 = getelementptr i8, ptr %scevgep708, i64 %mul.result710
  %399 = icmp ult ptr %398, %scevgep708
  %400 = or i1 %399, %mul.overflow711
  %401 = or i1 %397, %400
  br i1 %401, label %scalar.ph713.preheader, label %vector.ph715

vector.ph715:                                     ; preds = %vector.scevcheck701
  %n.vec717 = and i64 %393, 2305843009213693950
  %ind.end718 = or i64 %393, 1
  %broadcast.splatinsert726 = insertelement <2 x double> poison, double %392, i64 0
  %402 = shufflevector <2 x double> %broadcast.splatinsert726, <2 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body720

vector.body720:                                   ; preds = %vector.body720, %vector.ph715
  %index721 = phi i64 [ 0, %vector.ph715 ], [ %index.next729, %vector.body720 ]
  %offset.idx722 = or disjoint i64 %index721, 1
  %403 = getelementptr %struct.doublecomplex, ptr %invariant.gep677, i64 %offset.idx722
  %wide.vec723 = load <4 x double>, ptr %403, align 8, !tbaa !13
  %interleaved.vec728 = fmul <4 x double> %402, %wide.vec723
  store <4 x double> %interleaved.vec728, ptr %403, align 8, !tbaa !13
  %index.next729 = add nuw i64 %index721, 2
  %404 = icmp eq i64 %index.next729, %n.vec717
  br i1 %404, label %middle.block712, label %vector.body720, !llvm.loop !24

middle.block712:                                  ; preds = %vector.body720
  %cmp.n730 = icmp eq i64 %393, %n.vec717
  br i1 %cmp.n730, label %.loopexit, label %scalar.ph713.preheader

scalar.ph713.preheader:                           ; preds = %middle.block712, %vector.scevcheck701, %.lr.ph676
  %.3674.ph = phi i64 [ 1, %vector.scevcheck701 ], [ 1, %.lr.ph676 ], [ %ind.end718, %middle.block712 ]
  %xtraiter734 = and i64 %393, 1
  %lcmp.mod735.not = icmp eq i64 %xtraiter734, 0
  br i1 %lcmp.mod735.not, label %scalar.ph713.prol.loopexit, label %scalar.ph713.prol

scalar.ph713.prol:                                ; preds = %scalar.ph713.preheader
  %gep678.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep677, i64 %.3674.ph
  %405 = load <2 x double>, ptr %gep678.prol, align 8, !tbaa !13
  %406 = insertelement <2 x double> poison, double %392, i64 0
  %407 = shufflevector <2 x double> %406, <2 x double> poison, <2 x i32> zeroinitializer
  %408 = fmul <2 x double> %407, %405
  store <2 x double> %408, ptr %gep678.prol, align 8, !tbaa !13
  %409 = add nuw nsw i64 %.3674.ph, 1
  br label %scalar.ph713.prol.loopexit

scalar.ph713.prol.loopexit:                       ; preds = %scalar.ph713.prol, %scalar.ph713.preheader
  %.3674.unr = phi i64 [ %.3674.ph, %scalar.ph713.preheader ], [ %409, %scalar.ph713.prol ]
  %410 = icmp eq i64 %393, %.3674.ph
  br i1 %410, label %.loopexit, label %scalar.ph713.preheader.new

scalar.ph713.preheader.new:                       ; preds = %scalar.ph713.prol.loopexit
  %411 = insertelement <2 x double> poison, double %392, i64 0
  %412 = shufflevector <2 x double> %411, <2 x double> poison, <2 x i32> zeroinitializer
  %413 = insertelement <2 x double> poison, double %392, i64 0
  %414 = shufflevector <2 x double> %413, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph713

scalar.ph713:                                     ; preds = %scalar.ph713, %scalar.ph713.preheader.new
  %.3674 = phi i64 [ %.3674.unr, %scalar.ph713.preheader.new ], [ %420, %scalar.ph713 ]
  %gep678 = getelementptr %struct.doublecomplex, ptr %invariant.gep677, i64 %.3674
  %415 = load <2 x double>, ptr %gep678, align 8, !tbaa !13
  %416 = fmul <2 x double> %412, %415
  store <2 x double> %416, ptr %gep678, align 8, !tbaa !13
  %417 = add nuw i64 %.3674, 1
  %gep678.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep677, i64 %417
  %418 = load <2 x double>, ptr %gep678.1, align 8, !tbaa !13
  %419 = fmul <2 x double> %414, %418
  store <2 x double> %419, ptr %gep678.1, align 8, !tbaa !13
  %420 = add nuw i64 %.3674, 2
  %exitcond685.not.1 = icmp eq i64 %417, %393
  br i1 %exitcond685.not.1, label %.loopexit, label %scalar.ph713, !llvm.loop !25

.loopexit:                                        ; preds = %scalar.ph713.prol.loopexit, %scalar.ph713, %middle.block712, %391, %._crit_edge669
  %421 = load i64, ptr %30, align 8, !tbaa !5
  %.not595.not = icmp slt i64 %.1554680, %421
  br i1 %.not595.not, label %.lr.ph682thread-pre-split, label %.loopexit638, !llvm.loop !26

.loopexit638:                                     ; preds = %.loopexit, %366, %.loopexit640
  br i1 %.not583617, label %424, label %422

422:                                              ; preds = %.loopexit638
  %423 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %42, ptr noundef nonnull %34, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %9, ptr noundef nonnull %4, ptr noundef nonnull %36) #6
  br label %424

424:                                              ; preds = %422, %.loopexit638
  br i1 %.not584622, label %427, label %425

425:                                              ; preds = %424
  %426 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %43, ptr noundef nonnull %35, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %10, ptr noundef nonnull %4, ptr noundef nonnull %36) #6
  br label %427

427:                                              ; preds = %424, %425, %255, %261, %259, %.split.us, %273
  store double %138, ptr %23, align 8, !tbaa !9
  store double 0.000000e+00, ptr %139, align 8, !tbaa !12
  br label %428

428:                                              ; preds = %146, %145, %427, %.thread610
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  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 @dlascl_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = distinct !{!18, !16, !19, !20}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !16, !19}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16, !19, !20}
!25 = distinct !{!25, !16, !19}
!26 = distinct !{!26, !16}


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