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

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

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

134:                                              ; preds = %21
  store i64 1, ptr %77, align 8, !tbaa !9
  store i64 0, ptr %70, align 8, !tbaa !9
  br label %142

135:                                              ; preds = %21
  %136 = load ptr, ptr %23, align 8, !tbaa !5
  %137 = call i64 @lsame_(ptr noundef %136, ptr noundef @.str.1)
  %138 = icmp ne i64 %137, 0
  br i1 %138, label %139, label %140

139:                                              ; preds = %135
  store i64 2, ptr %77, align 8, !tbaa !9
  store i64 1, ptr %70, align 8, !tbaa !9
  br label %141

140:                                              ; preds = %135
  store i64 -1, ptr %77, align 8, !tbaa !9
  store i64 0, ptr %70, align 8, !tbaa !9
  br label %141

141:                                              ; preds = %140, %139
  br label %142

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

146:                                              ; preds = %142
  store i64 1, ptr %79, align 8, !tbaa !9
  store i64 0, ptr %71, align 8, !tbaa !9
  br label %154

147:                                              ; preds = %142
  %148 = load ptr, ptr %24, align 8, !tbaa !5
  %149 = call i64 @lsame_(ptr noundef %148, ptr noundef @.str.1)
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %152

151:                                              ; preds = %147
  store i64 2, ptr %79, align 8, !tbaa !9
  store i64 1, ptr %71, align 8, !tbaa !9
  br label %153

152:                                              ; preds = %147
  store i64 -1, ptr %79, align 8, !tbaa !9
  store i64 0, ptr %71, align 8, !tbaa !9
  br label %153

153:                                              ; preds = %152, %151
  br label %154

154:                                              ; preds = %153, %146
  %155 = load ptr, ptr %25, align 8, !tbaa !5
  %156 = call i64 @lsame_(ptr noundef %155, ptr noundef @.str.2)
  store i64 %156, ptr %85, align 8, !tbaa !9
  %157 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 0, ptr %157, align 8, !tbaa !9
  %158 = load ptr, ptr %40, align 8, !tbaa !5
  %159 = load i64, ptr %158, align 8, !tbaa !9
  %160 = icmp eq i64 %159, -1
  %161 = zext i1 %160 to i32
  %162 = sext i32 %161 to i64
  store i64 %162, ptr %86, align 8, !tbaa !9
  %163 = load i64, ptr %77, align 8, !tbaa !9
  %164 = icmp sle i64 %163, 0
  br i1 %164, label %165, label %167

165:                                              ; preds = %154
  %166 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -1, ptr %166, align 8, !tbaa !9
  br label %254

167:                                              ; preds = %154
  %168 = load i64, ptr %79, align 8, !tbaa !9
  %169 = icmp sle i64 %168, 0
  br i1 %169, label %170, label %172

170:                                              ; preds = %167
  %171 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -2, ptr %171, align 8, !tbaa !9
  br label %253

172:                                              ; preds = %167
  %173 = load i64, ptr %85, align 8, !tbaa !9
  %174 = icmp ne i64 %173, 0
  br i1 %174, label %181, label %175

175:                                              ; preds = %172
  %176 = load ptr, ptr %25, align 8, !tbaa !5
  %177 = call i64 @lsame_(ptr noundef %176, ptr noundef @.str)
  %178 = icmp ne i64 %177, 0
  br i1 %178, label %181, label %179

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

181:                                              ; preds = %175, %172
  %182 = load ptr, ptr %27, align 8, !tbaa !5
  %183 = load i64, ptr %182, align 8, !tbaa !9
  %184 = icmp slt i64 %183, 0
  br i1 %184, label %185, label %187

185:                                              ; preds = %181
  %186 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -5, ptr %186, align 8, !tbaa !9
  br label %251

187:                                              ; preds = %181
  %188 = load ptr, ptr %29, align 8, !tbaa !5
  %189 = load i64, ptr %188, align 8, !tbaa !9
  %190 = load ptr, ptr %27, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = icmp sge i64 1, %191
  br i1 %192, label %193, label %194

193:                                              ; preds = %187
  br label %197

194:                                              ; preds = %187
  %195 = load ptr, ptr %27, align 8, !tbaa !5
  %196 = load i64, ptr %195, align 8, !tbaa !9
  br label %197

197:                                              ; preds = %194, %193
  %198 = phi i64 [ 1, %193 ], [ %196, %194 ]
  %199 = icmp slt i64 %189, %198
  br i1 %199, label %200, label %202

200:                                              ; preds = %197
  %201 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -7, ptr %201, align 8, !tbaa !9
  br label %250

202:                                              ; preds = %197
  %203 = load ptr, ptr %31, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = load ptr, ptr %27, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = icmp sge i64 1, %206
  br i1 %207, label %208, label %209

208:                                              ; preds = %202
  br label %212

209:                                              ; preds = %202
  %210 = load ptr, ptr %27, align 8, !tbaa !5
  %211 = load i64, ptr %210, align 8, !tbaa !9
  br label %212

212:                                              ; preds = %209, %208
  %213 = phi i64 [ 1, %208 ], [ %211, %209 ]
  %214 = icmp slt i64 %204, %213
  br i1 %214, label %215, label %217

215:                                              ; preds = %212
  %216 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -9, ptr %216, align 8, !tbaa !9
  br label %249

217:                                              ; preds = %212
  %218 = load ptr, ptr %36, align 8, !tbaa !5
  %219 = load i64, ptr %218, align 8, !tbaa !9
  %220 = icmp slt i64 %219, 1
  br i1 %220, label %230, label %221

221:                                              ; preds = %217
  %222 = load i64, ptr %70, align 8, !tbaa !9
  %223 = icmp ne i64 %222, 0
  br i1 %223, label %224, label %232

224:                                              ; preds = %221
  %225 = load ptr, ptr %36, align 8, !tbaa !5
  %226 = load i64, ptr %225, align 8, !tbaa !9
  %227 = load ptr, ptr %27, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  %229 = icmp slt i64 %226, %228
  br i1 %229, label %230, label %232

230:                                              ; preds = %224, %217
  %231 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -14, ptr %231, align 8, !tbaa !9
  br label %248

232:                                              ; preds = %224, %221
  %233 = load ptr, ptr %38, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = icmp slt i64 %234, 1
  br i1 %235, label %245, label %236

236:                                              ; preds = %232
  %237 = load i64, ptr %71, align 8, !tbaa !9
  %238 = icmp ne i64 %237, 0
  br i1 %238, label %239, label %247

239:                                              ; preds = %236
  %240 = load ptr, ptr %38, align 8, !tbaa !5
  %241 = load i64, ptr %240, align 8, !tbaa !9
  %242 = load ptr, ptr %27, align 8, !tbaa !5
  %243 = load i64, ptr %242, align 8, !tbaa !9
  %244 = icmp slt i64 %241, %243
  br i1 %244, label %245, label %247

245:                                              ; preds = %239, %232
  %246 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -16, ptr %246, align 8, !tbaa !9
  br label %247

247:                                              ; preds = %245, %239, %236
  br label %248

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

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

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

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

252:                                              ; preds = %251, %179
  br label %253

253:                                              ; preds = %252, %170
  br label %254

254:                                              ; preds = %253, %165
  %255 = load ptr, ptr %43, align 8, !tbaa !5
  %256 = load i64, ptr %255, align 8, !tbaa !9
  %257 = icmp eq i64 %256, 0
  br i1 %257, label %258, label %349

258:                                              ; preds = %254
  store i64 1, ptr %52, align 8, !tbaa !9
  %259 = load ptr, ptr %27, align 8, !tbaa !5
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = shl i64 %260, 1
  store i64 %261, ptr %53, align 8, !tbaa !9
  %262 = load i64, ptr %52, align 8, !tbaa !9
  %263 = load i64, ptr %53, align 8, !tbaa !9
  %264 = icmp sge i64 %262, %263
  br i1 %264, label %265, label %267

265:                                              ; preds = %258
  %266 = load i64, ptr %52, align 8, !tbaa !9
  br label %269

267:                                              ; preds = %258
  %268 = load i64, ptr %53, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %267, %265
  %270 = phi i64 [ %266, %265 ], [ %268, %267 ]
  store i64 %270, ptr %81, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  %271 = load ptr, ptr %27, align 8, !tbaa !5
  %272 = load i64, ptr %271, align 8, !tbaa !9
  %273 = load ptr, ptr %27, align 8, !tbaa !5
  %274 = load i64, ptr %273, align 8, !tbaa !9
  %275 = load ptr, ptr %27, align 8, !tbaa !5
  %276 = load ptr, ptr %27, align 8, !tbaa !5
  %277 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %275, ptr noundef @c__1, ptr noundef %276, ptr noundef @c__0)
  %278 = mul nsw i64 %274, %277
  %279 = add nsw i64 %272, %278
  store i64 %279, ptr %53, align 8, !tbaa !9
  %280 = load i64, ptr %52, align 8, !tbaa !9
  %281 = load i64, ptr %53, align 8, !tbaa !9
  %282 = icmp sge i64 %280, %281
  br i1 %282, label %283, label %285

283:                                              ; preds = %269
  %284 = load i64, ptr %52, align 8, !tbaa !9
  br label %287

285:                                              ; preds = %269
  %286 = load i64, ptr %53, align 8, !tbaa !9
  br label %287

287:                                              ; preds = %285, %283
  %288 = phi i64 [ %284, %283 ], [ %286, %285 ]
  store i64 %288, ptr %87, align 8, !tbaa !9
  %289 = load i64, ptr %87, align 8, !tbaa !9
  store i64 %289, ptr %52, align 8, !tbaa !9
  %290 = load ptr, ptr %27, align 8, !tbaa !5
  %291 = load i64, ptr %290, align 8, !tbaa !9
  %292 = load ptr, ptr %27, align 8, !tbaa !5
  %293 = load i64, ptr %292, align 8, !tbaa !9
  %294 = load ptr, ptr %27, align 8, !tbaa !5
  %295 = load ptr, ptr %27, align 8, !tbaa !5
  %296 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.4, ptr noundef %294, ptr noundef @c__1, ptr noundef %295, ptr noundef @c_n1)
  %297 = mul nsw i64 %293, %296
  %298 = add nsw i64 %291, %297
  store i64 %298, ptr %53, align 8, !tbaa !9
  %299 = load i64, ptr %52, align 8, !tbaa !9
  %300 = load i64, ptr %53, align 8, !tbaa !9
  %301 = icmp sge i64 %299, %300
  br i1 %301, label %302, label %304

302:                                              ; preds = %287
  %303 = load i64, ptr %52, align 8, !tbaa !9
  br label %306

304:                                              ; preds = %287
  %305 = load i64, ptr %53, align 8, !tbaa !9
  br label %306

306:                                              ; preds = %304, %302
  %307 = phi i64 [ %303, %302 ], [ %305, %304 ]
  store i64 %307, ptr %87, align 8, !tbaa !9
  %308 = load i64, ptr %70, align 8, !tbaa !9
  %309 = icmp ne i64 %308, 0
  br i1 %309, label %310, label %330

310:                                              ; preds = %306
  %311 = load i64, ptr %87, align 8, !tbaa !9
  store i64 %311, ptr %52, align 8, !tbaa !9
  %312 = load ptr, ptr %27, align 8, !tbaa !5
  %313 = load i64, ptr %312, align 8, !tbaa !9
  %314 = load ptr, ptr %27, align 8, !tbaa !5
  %315 = load i64, ptr %314, align 8, !tbaa !9
  %316 = load ptr, ptr %27, align 8, !tbaa !5
  %317 = load ptr, ptr %27, align 8, !tbaa !5
  %318 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.6, ptr noundef @.str.4, ptr noundef %316, ptr noundef @c__1, ptr noundef %317, ptr noundef @c_n1)
  %319 = mul nsw i64 %315, %318
  %320 = add nsw i64 %313, %319
  store i64 %320, ptr %53, align 8, !tbaa !9
  %321 = load i64, ptr %52, align 8, !tbaa !9
  %322 = load i64, ptr %53, align 8, !tbaa !9
  %323 = icmp sge i64 %321, %322
  br i1 %323, label %324, label %326

324:                                              ; preds = %310
  %325 = load i64, ptr %52, align 8, !tbaa !9
  br label %328

326:                                              ; preds = %310
  %327 = load i64, ptr %53, align 8, !tbaa !9
  br label %328

328:                                              ; preds = %326, %324
  %329 = phi i64 [ %325, %324 ], [ %327, %326 ]
  store i64 %329, ptr %87, align 8, !tbaa !9
  br label %330

330:                                              ; preds = %328, %306
  %331 = load i64, ptr %87, align 8, !tbaa !9
  %332 = sitofp i64 %331 to double
  %333 = load ptr, ptr %39, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %333, i64 1
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %334, i32 0, i32 0
  store double %332, ptr %335, align 8, !tbaa !11
  %336 = load ptr, ptr %39, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.doublecomplex, ptr %336, i64 1
  %338 = getelementptr inbounds %struct.doublecomplex, ptr %337, i32 0, i32 1
  store double 0.000000e+00, ptr %338, align 8, !tbaa !14
  %339 = load ptr, ptr %40, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  %341 = load i64, ptr %81, align 8, !tbaa !9
  %342 = icmp slt i64 %340, %341
  br i1 %342, label %343, label %348

343:                                              ; preds = %330
  %344 = load i64, ptr %86, align 8, !tbaa !9
  %345 = icmp ne i64 %344, 0
  br i1 %345, label %348, label %346

346:                                              ; preds = %343
  %347 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -18, ptr %347, align 8, !tbaa !9
  br label %348

348:                                              ; preds = %346, %343, %330
  br label %349

349:                                              ; preds = %348, %254
  %350 = load ptr, ptr %43, align 8, !tbaa !5
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = icmp ne i64 %351, 0
  br i1 %352, label %353, label %358

353:                                              ; preds = %349
  %354 = load ptr, ptr %43, align 8, !tbaa !5
  %355 = load i64, ptr %354, align 8, !tbaa !9
  %356 = sub nsw i64 0, %355
  store i64 %356, ptr %52, align 8, !tbaa !9
  %357 = call i32 @xerbla_(ptr noundef @.str.7, ptr noundef %52)
  store i32 0, ptr %22, align 4
  store i32 1, ptr %88, align 4
  br label %908

358:                                              ; preds = %349
  %359 = load i64, ptr %86, align 8, !tbaa !9
  %360 = icmp ne i64 %359, 0
  br i1 %360, label %361, label %362

361:                                              ; preds = %358
  store i32 0, ptr %22, align 4
  store i32 1, ptr %88, align 4
  br label %908

362:                                              ; preds = %358
  br label %363

363:                                              ; preds = %362
  %364 = load ptr, ptr %27, align 8, !tbaa !5
  %365 = load i64, ptr %364, align 8, !tbaa !9
  %366 = icmp eq i64 %365, 0
  br i1 %366, label %367, label %369

367:                                              ; preds = %363
  %368 = load ptr, ptr %32, align 8, !tbaa !5
  store i64 0, ptr %368, align 8, !tbaa !9
  store i32 0, ptr %22, align 4
  store i32 1, ptr %88, align 4
  br label %908

369:                                              ; preds = %363
  %370 = call double @dlamch_(ptr noundef @.str.8)
  store double %370, ptr %58, align 8, !tbaa !15
  %371 = call double @dlamch_(ptr noundef @.str.2)
  store double %371, ptr %84, align 8, !tbaa !15
  %372 = load double, ptr %84, align 8, !tbaa !15
  %373 = fdiv double 1.000000e+00, %372
  store double %373, ptr %76, align 8, !tbaa !15
  %374 = call i32 @dlabad_(ptr noundef %84, ptr noundef %76)
  %375 = load double, ptr %84, align 8, !tbaa !15
  %376 = call double @sqrt(double noundef %375) #4
  %377 = load double, ptr %58, align 8, !tbaa !15
  %378 = fdiv double %376, %377
  store double %378, ptr %84, align 8, !tbaa !15
  %379 = load double, ptr %84, align 8, !tbaa !15
  %380 = fdiv double 1.000000e+00, %379
  store double %380, ptr %76, align 8, !tbaa !15
  %381 = load ptr, ptr %27, align 8, !tbaa !5
  %382 = load ptr, ptr %27, align 8, !tbaa !5
  %383 = load ptr, ptr %28, align 8, !tbaa !5
  %384 = load i64, ptr %45, align 8, !tbaa !9
  %385 = getelementptr inbounds %struct.doublecomplex, ptr %383, i64 %384
  %386 = load ptr, ptr %29, align 8, !tbaa !5
  %387 = load ptr, ptr %41, align 8, !tbaa !5
  %388 = getelementptr inbounds double, ptr %387, i64 1
  %389 = call double @zlange_(ptr noundef @.str.9, ptr noundef %381, ptr noundef %382, ptr noundef %385, ptr noundef %386, ptr noundef %388)
  store double %389, ptr %59, align 8, !tbaa !15
  store i64 0, ptr %74, align 8, !tbaa !9
  %390 = load double, ptr %59, align 8, !tbaa !15
  %391 = fcmp ogt double %390, 0.000000e+00
  br i1 %391, label %392, label %398

392:                                              ; preds = %369
  %393 = load double, ptr %59, align 8, !tbaa !15
  %394 = load double, ptr %84, align 8, !tbaa !15
  %395 = fcmp olt double %393, %394
  br i1 %395, label %396, label %398

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

398:                                              ; preds = %392, %369
  %399 = load double, ptr %59, align 8, !tbaa !15
  %400 = load double, ptr %76, align 8, !tbaa !15
  %401 = fcmp ogt double %399, %400
  br i1 %401, label %402, label %404

402:                                              ; preds = %398
  %403 = load double, ptr %76, align 8, !tbaa !15
  store double %403, ptr %80, align 8, !tbaa !15
  store i64 1, ptr %74, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %402, %398
  br label %405

405:                                              ; preds = %404, %396
  %406 = load i64, ptr %74, align 8, !tbaa !9
  %407 = icmp ne i64 %406, 0
  br i1 %407, label %408, label %416

408:                                              ; preds = %405
  %409 = load ptr, ptr %27, align 8, !tbaa !5
  %410 = load ptr, ptr %27, align 8, !tbaa !5
  %411 = load ptr, ptr %28, align 8, !tbaa !5
  %412 = load i64, ptr %45, align 8, !tbaa !9
  %413 = getelementptr inbounds %struct.doublecomplex, ptr %411, i64 %412
  %414 = load ptr, ptr %29, align 8, !tbaa !5
  %415 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %59, ptr noundef %80, ptr noundef %409, ptr noundef %410, ptr noundef %413, ptr noundef %414, ptr noundef %62)
  br label %416

416:                                              ; preds = %408, %405
  %417 = load ptr, ptr %27, align 8, !tbaa !5
  %418 = load ptr, ptr %27, align 8, !tbaa !5
  %419 = load ptr, ptr %30, align 8, !tbaa !5
  %420 = load i64, ptr %47, align 8, !tbaa !9
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %419, i64 %420
  %422 = load ptr, ptr %31, align 8, !tbaa !5
  %423 = load ptr, ptr %41, align 8, !tbaa !5
  %424 = getelementptr inbounds double, ptr %423, i64 1
  %425 = call double @zlange_(ptr noundef @.str.9, ptr noundef %417, ptr noundef %418, ptr noundef %421, ptr noundef %422, ptr noundef %424)
  store double %425, ptr %60, align 8, !tbaa !15
  store i64 0, ptr %75, align 8, !tbaa !9
  %426 = load double, ptr %60, align 8, !tbaa !15
  %427 = fcmp ogt double %426, 0.000000e+00
  br i1 %427, label %428, label %434

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

432:                                              ; preds = %428
  %433 = load double, ptr %84, align 8, !tbaa !15
  store double %433, ptr %83, align 8, !tbaa !15
  store i64 1, ptr %75, align 8, !tbaa !9
  br label %441

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

438:                                              ; preds = %434
  %439 = load double, ptr %76, align 8, !tbaa !15
  store double %439, ptr %83, align 8, !tbaa !15
  store i64 1, ptr %75, align 8, !tbaa !9
  br label %440

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

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

444:                                              ; preds = %441
  %445 = load ptr, ptr %27, align 8, !tbaa !5
  %446 = load ptr, ptr %27, align 8, !tbaa !5
  %447 = load ptr, ptr %30, align 8, !tbaa !5
  %448 = load i64, ptr %47, align 8, !tbaa !9
  %449 = getelementptr inbounds %struct.doublecomplex, ptr %447, i64 %448
  %450 = load ptr, ptr %31, align 8, !tbaa !5
  %451 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %60, ptr noundef %83, ptr noundef %445, ptr noundef %446, ptr noundef %449, ptr noundef %450, ptr noundef %62)
  br label %452

452:                                              ; preds = %444, %441
  store i64 1, ptr %67, align 8, !tbaa !9
  %453 = load ptr, ptr %27, align 8, !tbaa !5
  %454 = load i64, ptr %453, align 8, !tbaa !9
  %455 = add nsw i64 %454, 1
  store i64 %455, ptr %78, align 8, !tbaa !9
  %456 = load i64, ptr %78, align 8, !tbaa !9
  %457 = load ptr, ptr %27, align 8, !tbaa !5
  %458 = load i64, ptr %457, align 8, !tbaa !9
  %459 = add nsw i64 %456, %458
  store i64 %459, ptr %72, align 8, !tbaa !9
  %460 = load ptr, ptr %27, align 8, !tbaa !5
  %461 = load ptr, ptr %28, align 8, !tbaa !5
  %462 = load i64, ptr %45, align 8, !tbaa !9
  %463 = getelementptr inbounds %struct.doublecomplex, ptr %461, i64 %462
  %464 = load ptr, ptr %29, align 8, !tbaa !5
  %465 = load ptr, ptr %30, align 8, !tbaa !5
  %466 = load i64, ptr %47, align 8, !tbaa !9
  %467 = getelementptr inbounds %struct.doublecomplex, ptr %465, i64 %466
  %468 = load ptr, ptr %31, align 8, !tbaa !5
  %469 = load ptr, ptr %41, align 8, !tbaa !5
  %470 = load i64, ptr %67, align 8, !tbaa !9
  %471 = getelementptr inbounds double, ptr %469, i64 %470
  %472 = load ptr, ptr %41, align 8, !tbaa !5
  %473 = load i64, ptr %78, align 8, !tbaa !9
  %474 = getelementptr inbounds double, ptr %472, i64 %473
  %475 = load ptr, ptr %41, align 8, !tbaa !5
  %476 = load i64, ptr %72, align 8, !tbaa !9
  %477 = getelementptr inbounds double, ptr %475, i64 %476
  %478 = call i32 @zggbal_(ptr noundef @.str.8, ptr noundef %460, ptr noundef %463, ptr noundef %464, ptr noundef %467, ptr noundef %468, ptr noundef %57, ptr noundef %56, ptr noundef %471, ptr noundef %474, ptr noundef %477, ptr noundef %62)
  %479 = load i64, ptr %56, align 8, !tbaa !9
  %480 = add nsw i64 %479, 1
  %481 = load i64, ptr %57, align 8, !tbaa !9
  %482 = sub nsw i64 %480, %481
  store i64 %482, ptr %73, align 8, !tbaa !9
  %483 = load ptr, ptr %27, align 8, !tbaa !5
  %484 = load i64, ptr %483, align 8, !tbaa !9
  %485 = add nsw i64 %484, 1
  %486 = load i64, ptr %57, align 8, !tbaa !9
  %487 = sub nsw i64 %485, %486
  store i64 %487, ptr %68, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  %488 = load i64, ptr %63, align 8, !tbaa !9
  %489 = load i64, ptr %73, align 8, !tbaa !9
  %490 = add nsw i64 %488, %489
  store i64 %490, ptr %64, align 8, !tbaa !9
  %491 = load ptr, ptr %40, align 8, !tbaa !5
  %492 = load i64, ptr %491, align 8, !tbaa !9
  %493 = add nsw i64 %492, 1
  %494 = load i64, ptr %64, align 8, !tbaa !9
  %495 = sub nsw i64 %493, %494
  store i64 %495, ptr %52, align 8, !tbaa !9
  %496 = load ptr, ptr %30, align 8, !tbaa !5
  %497 = load i64, ptr %57, align 8, !tbaa !9
  %498 = load i64, ptr %57, align 8, !tbaa !9
  %499 = load i64, ptr %46, align 8, !tbaa !9
  %500 = mul nsw i64 %498, %499
  %501 = add nsw i64 %497, %500
  %502 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 %501
  %503 = load ptr, ptr %31, align 8, !tbaa !5
  %504 = load ptr, ptr %39, align 8, !tbaa !5
  %505 = load i64, ptr %63, align 8, !tbaa !9
  %506 = getelementptr inbounds %struct.doublecomplex, ptr %504, i64 %505
  %507 = load ptr, ptr %39, align 8, !tbaa !5
  %508 = load i64, ptr %64, align 8, !tbaa !9
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %507, i64 %508
  %510 = call i32 @zgeqrf_(ptr noundef %73, ptr noundef %68, ptr noundef %502, ptr noundef %503, ptr noundef %506, ptr noundef %509, ptr noundef %52, ptr noundef %62)
  %511 = load ptr, ptr %40, align 8, !tbaa !5
  %512 = load i64, ptr %511, align 8, !tbaa !9
  %513 = add nsw i64 %512, 1
  %514 = load i64, ptr %64, align 8, !tbaa !9
  %515 = sub nsw i64 %513, %514
  store i64 %515, ptr %52, align 8, !tbaa !9
  %516 = load ptr, ptr %30, align 8, !tbaa !5
  %517 = load i64, ptr %57, align 8, !tbaa !9
  %518 = load i64, ptr %57, align 8, !tbaa !9
  %519 = load i64, ptr %46, align 8, !tbaa !9
  %520 = mul nsw i64 %518, %519
  %521 = add nsw i64 %517, %520
  %522 = getelementptr inbounds %struct.doublecomplex, ptr %516, i64 %521
  %523 = load ptr, ptr %31, align 8, !tbaa !5
  %524 = load ptr, ptr %39, align 8, !tbaa !5
  %525 = load i64, ptr %63, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 %525
  %527 = load ptr, ptr %28, align 8, !tbaa !5
  %528 = load i64, ptr %57, align 8, !tbaa !9
  %529 = load i64, ptr %57, align 8, !tbaa !9
  %530 = load i64, ptr %44, align 8, !tbaa !9
  %531 = mul nsw i64 %529, %530
  %532 = add nsw i64 %528, %531
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %527, i64 %532
  %534 = load ptr, ptr %29, align 8, !tbaa !5
  %535 = load ptr, ptr %39, align 8, !tbaa !5
  %536 = load i64, ptr %64, align 8, !tbaa !9
  %537 = getelementptr inbounds %struct.doublecomplex, ptr %535, i64 %536
  %538 = call i32 @zunmqr_(ptr noundef @.str.11, ptr noundef @.str.12, ptr noundef %73, ptr noundef %68, ptr noundef %73, ptr noundef %522, ptr noundef %523, ptr noundef %526, ptr noundef %533, ptr noundef %534, ptr noundef %537, ptr noundef %52, ptr noundef %62)
  %539 = load i64, ptr %70, align 8, !tbaa !9
  %540 = icmp ne i64 %539, 0
  br i1 %540, label %541, label %596

541:                                              ; preds = %452
  %542 = load ptr, ptr %27, align 8, !tbaa !5
  %543 = load ptr, ptr %27, align 8, !tbaa !5
  %544 = load ptr, ptr %35, align 8, !tbaa !5
  %545 = load i64, ptr %49, align 8, !tbaa !9
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %544, i64 %545
  %547 = load ptr, ptr %36, align 8, !tbaa !5
  %548 = call i32 @zlaset_(ptr noundef @.str.13, ptr noundef %542, ptr noundef %543, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %546, ptr noundef %547)
  %549 = load i64, ptr %73, align 8, !tbaa !9
  %550 = icmp sgt i64 %549, 1
  br i1 %550, label %551, label %575

551:                                              ; preds = %541
  %552 = load i64, ptr %73, align 8, !tbaa !9
  %553 = sub nsw i64 %552, 1
  store i64 %553, ptr %52, align 8, !tbaa !9
  %554 = load i64, ptr %73, align 8, !tbaa !9
  %555 = sub nsw i64 %554, 1
  store i64 %555, ptr %53, align 8, !tbaa !9
  %556 = load ptr, ptr %30, align 8, !tbaa !5
  %557 = load i64, ptr %57, align 8, !tbaa !9
  %558 = add nsw i64 %557, 1
  %559 = load i64, ptr %57, align 8, !tbaa !9
  %560 = load i64, ptr %46, align 8, !tbaa !9
  %561 = mul nsw i64 %559, %560
  %562 = add nsw i64 %558, %561
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %556, i64 %562
  %564 = load ptr, ptr %31, align 8, !tbaa !5
  %565 = load ptr, ptr %35, align 8, !tbaa !5
  %566 = load i64, ptr %57, align 8, !tbaa !9
  %567 = add nsw i64 %566, 1
  %568 = load i64, ptr %57, align 8, !tbaa !9
  %569 = load i64, ptr %48, align 8, !tbaa !9
  %570 = mul nsw i64 %568, %569
  %571 = add nsw i64 %567, %570
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %565, i64 %571
  %573 = load ptr, ptr %36, align 8, !tbaa !5
  %574 = call i32 @zlacpy_(ptr noundef @.str.11, ptr noundef %52, ptr noundef %53, ptr noundef %563, ptr noundef %564, ptr noundef %572, ptr noundef %573)
  br label %575

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

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

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

607:                                              ; preds = %599, %596
  %608 = load ptr, ptr %23, align 8, !tbaa !5
  %609 = load ptr, ptr %24, align 8, !tbaa !5
  %610 = load ptr, ptr %27, align 8, !tbaa !5
  %611 = load ptr, ptr %28, align 8, !tbaa !5
  %612 = load i64, ptr %45, align 8, !tbaa !9
  %613 = getelementptr inbounds %struct.doublecomplex, ptr %611, i64 %612
  %614 = load ptr, ptr %29, align 8, !tbaa !5
  %615 = load ptr, ptr %30, align 8, !tbaa !5
  %616 = load i64, ptr %47, align 8, !tbaa !9
  %617 = getelementptr inbounds %struct.doublecomplex, ptr %615, i64 %616
  %618 = load ptr, ptr %31, align 8, !tbaa !5
  %619 = load ptr, ptr %35, align 8, !tbaa !5
  %620 = load i64, ptr %49, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.doublecomplex, ptr %619, i64 %620
  %622 = load ptr, ptr %36, align 8, !tbaa !5
  %623 = load ptr, ptr %37, align 8, !tbaa !5
  %624 = load i64, ptr %51, align 8, !tbaa !9
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %623, i64 %624
  %626 = load ptr, ptr %38, align 8, !tbaa !5
  %627 = call i32 @zgghrd_(ptr noundef %608, ptr noundef %609, ptr noundef %610, ptr noundef %57, ptr noundef %56, ptr noundef %613, ptr noundef %614, ptr noundef %617, ptr noundef %618, ptr noundef %621, ptr noundef %622, ptr noundef %625, ptr noundef %626, ptr noundef %62)
  %628 = load ptr, ptr %32, align 8, !tbaa !5
  store i64 0, ptr %628, align 8, !tbaa !9
  %629 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %629, ptr %64, align 8, !tbaa !9
  %630 = load ptr, ptr %40, align 8, !tbaa !5
  %631 = load i64, ptr %630, align 8, !tbaa !9
  %632 = add nsw i64 %631, 1
  %633 = load i64, ptr %64, align 8, !tbaa !9
  %634 = sub nsw i64 %632, %633
  store i64 %634, ptr %52, align 8, !tbaa !9
  %635 = load ptr, ptr %23, align 8, !tbaa !5
  %636 = load ptr, ptr %24, align 8, !tbaa !5
  %637 = load ptr, ptr %27, align 8, !tbaa !5
  %638 = load ptr, ptr %28, align 8, !tbaa !5
  %639 = load i64, ptr %45, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %638, i64 %639
  %641 = load ptr, ptr %29, align 8, !tbaa !5
  %642 = load ptr, ptr %30, align 8, !tbaa !5
  %643 = load i64, ptr %47, align 8, !tbaa !9
  %644 = getelementptr inbounds %struct.doublecomplex, ptr %642, i64 %643
  %645 = load ptr, ptr %31, align 8, !tbaa !5
  %646 = load ptr, ptr %33, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.doublecomplex, ptr %646, i64 1
  %648 = load ptr, ptr %34, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %648, i64 1
  %650 = load ptr, ptr %35, align 8, !tbaa !5
  %651 = load i64, ptr %49, align 8, !tbaa !9
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %650, i64 %651
  %653 = load ptr, ptr %36, align 8, !tbaa !5
  %654 = load ptr, ptr %37, align 8, !tbaa !5
  %655 = load i64, ptr %51, align 8, !tbaa !9
  %656 = getelementptr inbounds %struct.doublecomplex, ptr %654, i64 %655
  %657 = load ptr, ptr %38, align 8, !tbaa !5
  %658 = load ptr, ptr %39, align 8, !tbaa !5
  %659 = load i64, ptr %64, align 8, !tbaa !9
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %658, i64 %659
  %661 = load ptr, ptr %41, align 8, !tbaa !5
  %662 = load i64, ptr %72, align 8, !tbaa !9
  %663 = getelementptr inbounds double, ptr %661, i64 %662
  %664 = call i32 @zhgeqz_(ptr noundef @.str.2, ptr noundef %635, ptr noundef %636, ptr noundef %637, ptr noundef %57, ptr noundef %56, ptr noundef %640, ptr noundef %641, ptr noundef %644, ptr noundef %645, ptr noundef %647, ptr noundef %649, ptr noundef %652, ptr noundef %653, ptr noundef %656, ptr noundef %657, ptr noundef %660, ptr noundef %52, ptr noundef %663, ptr noundef %62)
  %665 = load i64, ptr %62, align 8, !tbaa !9
  %666 = icmp ne i64 %665, 0
  br i1 %666, label %667, label %702

667:                                              ; preds = %607
  %668 = load i64, ptr %62, align 8, !tbaa !9
  %669 = icmp sgt i64 %668, 0
  br i1 %669, label %670, label %678

670:                                              ; preds = %667
  %671 = load i64, ptr %62, align 8, !tbaa !9
  %672 = load ptr, ptr %27, align 8, !tbaa !5
  %673 = load i64, ptr %672, align 8, !tbaa !9
  %674 = icmp sle i64 %671, %673
  br i1 %674, label %675, label %678

675:                                              ; preds = %670
  %676 = load i64, ptr %62, align 8, !tbaa !9
  %677 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 %676, ptr %677, align 8, !tbaa !9
  br label %701

678:                                              ; preds = %670, %667
  %679 = load i64, ptr %62, align 8, !tbaa !9
  %680 = load ptr, ptr %27, align 8, !tbaa !5
  %681 = load i64, ptr %680, align 8, !tbaa !9
  %682 = icmp sgt i64 %679, %681
  br i1 %682, label %683, label %695

683:                                              ; preds = %678
  %684 = load i64, ptr %62, align 8, !tbaa !9
  %685 = load ptr, ptr %27, align 8, !tbaa !5
  %686 = load i64, ptr %685, align 8, !tbaa !9
  %687 = shl i64 %686, 1
  %688 = icmp sle i64 %684, %687
  br i1 %688, label %689, label %695

689:                                              ; preds = %683
  %690 = load i64, ptr %62, align 8, !tbaa !9
  %691 = load ptr, ptr %27, align 8, !tbaa !5
  %692 = load i64, ptr %691, align 8, !tbaa !9
  %693 = sub nsw i64 %690, %692
  %694 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 %693, ptr %694, align 8, !tbaa !9
  br label %700

695:                                              ; preds = %683, %678
  %696 = load ptr, ptr %27, align 8, !tbaa !5
  %697 = load i64, ptr %696, align 8, !tbaa !9
  %698 = add nsw i64 %697, 1
  %699 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 %698, ptr %699, align 8, !tbaa !9
  br label %700

700:                                              ; preds = %695, %689
  br label %701

701:                                              ; preds = %700, %675
  br label %899

702:                                              ; preds = %607
  %703 = load i64, ptr %85, align 8, !tbaa !9
  %704 = icmp ne i64 %703, 0
  br i1 %704, label %705, label %789

705:                                              ; preds = %702
  %706 = load i64, ptr %74, align 8, !tbaa !9
  %707 = icmp ne i64 %706, 0
  br i1 %707, label %708, label %714

708:                                              ; preds = %705
  %709 = load ptr, ptr %27, align 8, !tbaa !5
  %710 = load ptr, ptr %33, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.doublecomplex, ptr %710, i64 1
  %712 = load ptr, ptr %27, align 8, !tbaa !5
  %713 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %59, ptr noundef %80, ptr noundef %709, ptr noundef @c__1, ptr noundef %711, ptr noundef %712, ptr noundef %62)
  br label %714

714:                                              ; preds = %708, %705
  %715 = load i64, ptr %75, align 8, !tbaa !9
  %716 = icmp ne i64 %715, 0
  br i1 %716, label %717, label %723

717:                                              ; preds = %714
  %718 = load ptr, ptr %27, align 8, !tbaa !5
  %719 = load ptr, ptr %34, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.doublecomplex, ptr %719, i64 1
  %721 = load ptr, ptr %27, align 8, !tbaa !5
  %722 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %60, ptr noundef %83, ptr noundef %718, ptr noundef @c__1, ptr noundef %720, ptr noundef %721, ptr noundef %62)
  br label %723

723:                                              ; preds = %717, %714
  %724 = load ptr, ptr %27, align 8, !tbaa !5
  %725 = load i64, ptr %724, align 8, !tbaa !9
  store i64 %725, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %54, align 8, !tbaa !9
  br label %726

726:                                              ; preds = %742, %723
  %727 = load i64, ptr %54, align 8, !tbaa !9
  %728 = load i64, ptr %52, align 8, !tbaa !9
  %729 = icmp sle i64 %727, %728
  br i1 %729, label %730, label %745

730:                                              ; preds = %726
  %731 = load ptr, ptr %26, align 8, !tbaa !5
  %732 = load ptr, ptr %33, align 8, !tbaa !5
  %733 = load i64, ptr %54, align 8, !tbaa !9
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %732, i64 %733
  %735 = load ptr, ptr %34, align 8, !tbaa !5
  %736 = load i64, ptr %54, align 8, !tbaa !9
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %735, i64 %736
  %738 = call i64 (ptr, ptr, ...) %731(ptr noundef %734, ptr noundef %737)
  %739 = load ptr, ptr %42, align 8, !tbaa !5
  %740 = load i64, ptr %54, align 8, !tbaa !9
  %741 = getelementptr inbounds i64, ptr %739, i64 %740
  store i64 %738, ptr %741, align 8, !tbaa !9
  br label %742

742:                                              ; preds = %730
  %743 = load i64, ptr %54, align 8, !tbaa !9
  %744 = add nsw i64 %743, 1
  store i64 %744, ptr %54, align 8, !tbaa !9
  br label %726, !llvm.loop !16

745:                                              ; preds = %726
  %746 = load ptr, ptr %40, align 8, !tbaa !5
  %747 = load i64, ptr %746, align 8, !tbaa !9
  %748 = load i64, ptr %64, align 8, !tbaa !9
  %749 = sub nsw i64 %747, %748
  %750 = add nsw i64 %749, 1
  store i64 %750, ptr %52, align 8, !tbaa !9
  %751 = load ptr, ptr %42, align 8, !tbaa !5
  %752 = getelementptr inbounds i64, ptr %751, i64 1
  %753 = load ptr, ptr %27, align 8, !tbaa !5
  %754 = load ptr, ptr %28, align 8, !tbaa !5
  %755 = load i64, ptr %45, align 8, !tbaa !9
  %756 = getelementptr inbounds %struct.doublecomplex, ptr %754, i64 %755
  %757 = load ptr, ptr %29, align 8, !tbaa !5
  %758 = load ptr, ptr %30, align 8, !tbaa !5
  %759 = load i64, ptr %47, align 8, !tbaa !9
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %758, i64 %759
  %761 = load ptr, ptr %31, align 8, !tbaa !5
  %762 = load ptr, ptr %33, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.doublecomplex, ptr %762, i64 1
  %764 = load ptr, ptr %34, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %764, i64 1
  %766 = load ptr, ptr %35, align 8, !tbaa !5
  %767 = load i64, ptr %49, align 8, !tbaa !9
  %768 = getelementptr inbounds %struct.doublecomplex, ptr %766, i64 %767
  %769 = load ptr, ptr %36, align 8, !tbaa !5
  %770 = load ptr, ptr %37, align 8, !tbaa !5
  %771 = load i64, ptr %51, align 8, !tbaa !9
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %770, i64 %771
  %773 = load ptr, ptr %38, align 8, !tbaa !5
  %774 = load ptr, ptr %32, align 8, !tbaa !5
  %775 = getelementptr inbounds [2 x double], ptr %55, i64 0, i64 0
  %776 = load ptr, ptr %39, align 8, !tbaa !5
  %777 = load i64, ptr %64, align 8, !tbaa !9
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %776, i64 %777
  %779 = getelementptr inbounds [1 x i64], ptr %61, i64 0, i64 0
  %780 = call i32 @ztgsen_(ptr noundef @c__0, ptr noundef %70, ptr noundef %71, ptr noundef %752, ptr noundef %753, ptr noundef %756, ptr noundef %757, ptr noundef %760, ptr noundef %761, ptr noundef %763, ptr noundef %765, ptr noundef %768, ptr noundef %769, ptr noundef %772, ptr noundef %773, ptr noundef %774, ptr noundef %65, ptr noundef %66, ptr noundef %775, ptr noundef %778, ptr noundef %52, ptr noundef %779, ptr noundef @c__1, ptr noundef %62)
  %781 = load i64, ptr %62, align 8, !tbaa !9
  %782 = icmp eq i64 %781, 1
  br i1 %782, label %783, label %788

783:                                              ; preds = %745
  %784 = load ptr, ptr %27, align 8, !tbaa !5
  %785 = load i64, ptr %784, align 8, !tbaa !9
  %786 = add nsw i64 %785, 3
  %787 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 %786, ptr %787, align 8, !tbaa !9
  br label %788

788:                                              ; preds = %783, %745
  br label %789

789:                                              ; preds = %788, %702
  %790 = load i64, ptr %70, align 8, !tbaa !9
  %791 = icmp ne i64 %790, 0
  br i1 %791, label %792, label %806

792:                                              ; preds = %789
  %793 = load ptr, ptr %27, align 8, !tbaa !5
  %794 = load ptr, ptr %41, align 8, !tbaa !5
  %795 = load i64, ptr %67, align 8, !tbaa !9
  %796 = getelementptr inbounds double, ptr %794, i64 %795
  %797 = load ptr, ptr %41, align 8, !tbaa !5
  %798 = load i64, ptr %78, align 8, !tbaa !9
  %799 = getelementptr inbounds double, ptr %797, i64 %798
  %800 = load ptr, ptr %27, align 8, !tbaa !5
  %801 = load ptr, ptr %35, align 8, !tbaa !5
  %802 = load i64, ptr %49, align 8, !tbaa !9
  %803 = getelementptr inbounds %struct.doublecomplex, ptr %801, i64 %802
  %804 = load ptr, ptr %36, align 8, !tbaa !5
  %805 = call i32 @zggbak_(ptr noundef @.str.8, ptr noundef @.str.11, ptr noundef %793, ptr noundef %57, ptr noundef %56, ptr noundef %796, ptr noundef %799, ptr noundef %800, ptr noundef %803, ptr noundef %804, ptr noundef %62)
  br label %806

806:                                              ; preds = %792, %789
  %807 = load i64, ptr %71, align 8, !tbaa !9
  %808 = icmp ne i64 %807, 0
  br i1 %808, label %809, label %823

809:                                              ; preds = %806
  %810 = load ptr, ptr %27, align 8, !tbaa !5
  %811 = load ptr, ptr %41, align 8, !tbaa !5
  %812 = load i64, ptr %67, align 8, !tbaa !9
  %813 = getelementptr inbounds double, ptr %811, i64 %812
  %814 = load ptr, ptr %41, align 8, !tbaa !5
  %815 = load i64, ptr %78, align 8, !tbaa !9
  %816 = getelementptr inbounds double, ptr %814, i64 %815
  %817 = load ptr, ptr %27, align 8, !tbaa !5
  %818 = load ptr, ptr %37, align 8, !tbaa !5
  %819 = load i64, ptr %51, align 8, !tbaa !9
  %820 = getelementptr inbounds %struct.doublecomplex, ptr %818, i64 %819
  %821 = load ptr, ptr %38, align 8, !tbaa !5
  %822 = call i32 @zggbak_(ptr noundef @.str.8, ptr noundef @.str.14, ptr noundef %810, ptr noundef %57, ptr noundef %56, ptr noundef %813, ptr noundef %816, ptr noundef %817, ptr noundef %820, ptr noundef %821, ptr noundef %62)
  br label %823

823:                                              ; preds = %809, %806
  %824 = load i64, ptr %74, align 8, !tbaa !9
  %825 = icmp ne i64 %824, 0
  br i1 %825, label %826, label %839

826:                                              ; preds = %823
  %827 = load ptr, ptr %27, align 8, !tbaa !5
  %828 = load ptr, ptr %27, align 8, !tbaa !5
  %829 = load ptr, ptr %28, align 8, !tbaa !5
  %830 = load i64, ptr %45, align 8, !tbaa !9
  %831 = getelementptr inbounds %struct.doublecomplex, ptr %829, i64 %830
  %832 = load ptr, ptr %29, align 8, !tbaa !5
  %833 = call i32 @zlascl_(ptr noundef @.str.15, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %80, ptr noundef %59, ptr noundef %827, ptr noundef %828, ptr noundef %831, ptr noundef %832, ptr noundef %62)
  %834 = load ptr, ptr %27, align 8, !tbaa !5
  %835 = load ptr, ptr %33, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.doublecomplex, ptr %835, i64 1
  %837 = load ptr, ptr %27, align 8, !tbaa !5
  %838 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %80, ptr noundef %59, ptr noundef %834, ptr noundef @c__1, ptr noundef %836, ptr noundef %837, ptr noundef %62)
  br label %839

839:                                              ; preds = %826, %823
  %840 = load i64, ptr %75, align 8, !tbaa !9
  %841 = icmp ne i64 %840, 0
  br i1 %841, label %842, label %855

842:                                              ; preds = %839
  %843 = load ptr, ptr %27, align 8, !tbaa !5
  %844 = load ptr, ptr %27, align 8, !tbaa !5
  %845 = load ptr, ptr %30, align 8, !tbaa !5
  %846 = load i64, ptr %47, align 8, !tbaa !9
  %847 = getelementptr inbounds %struct.doublecomplex, ptr %845, i64 %846
  %848 = load ptr, ptr %31, align 8, !tbaa !5
  %849 = call i32 @zlascl_(ptr noundef @.str.15, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %83, ptr noundef %60, ptr noundef %843, ptr noundef %844, ptr noundef %847, ptr noundef %848, ptr noundef %62)
  %850 = load ptr, ptr %27, align 8, !tbaa !5
  %851 = load ptr, ptr %34, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.doublecomplex, ptr %851, i64 1
  %853 = load ptr, ptr %27, align 8, !tbaa !5
  %854 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %83, ptr noundef %60, ptr noundef %850, ptr noundef @c__1, ptr noundef %852, ptr noundef %853, ptr noundef %62)
  br label %855

855:                                              ; preds = %842, %839
  %856 = load i64, ptr %85, align 8, !tbaa !9
  %857 = icmp ne i64 %856, 0
  br i1 %857, label %858, label %898

858:                                              ; preds = %855
  store i64 1, ptr %82, align 8, !tbaa !9
  %859 = load ptr, ptr %32, align 8, !tbaa !5
  store i64 0, ptr %859, align 8, !tbaa !9
  %860 = load ptr, ptr %27, align 8, !tbaa !5
  %861 = load i64, ptr %860, align 8, !tbaa !9
  store i64 %861, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %54, align 8, !tbaa !9
  br label %862

862:                                              ; preds = %894, %858
  %863 = load i64, ptr %54, align 8, !tbaa !9
  %864 = load i64, ptr %52, align 8, !tbaa !9
  %865 = icmp sle i64 %863, %864
  br i1 %865, label %866, label %897

866:                                              ; preds = %862
  %867 = load ptr, ptr %26, align 8, !tbaa !5
  %868 = load ptr, ptr %33, align 8, !tbaa !5
  %869 = load i64, ptr %54, align 8, !tbaa !9
  %870 = getelementptr inbounds %struct.doublecomplex, ptr %868, i64 %869
  %871 = load ptr, ptr %34, align 8, !tbaa !5
  %872 = load i64, ptr %54, align 8, !tbaa !9
  %873 = getelementptr inbounds %struct.doublecomplex, ptr %871, i64 %872
  %874 = call i64 (ptr, ptr, ...) %867(ptr noundef %870, ptr noundef %873)
  store i64 %874, ptr %69, align 8, !tbaa !9
  %875 = load i64, ptr %69, align 8, !tbaa !9
  %876 = icmp ne i64 %875, 0
  br i1 %876, label %877, label %881

877:                                              ; preds = %866
  %878 = load ptr, ptr %32, align 8, !tbaa !5
  %879 = load i64, ptr %878, align 8, !tbaa !9
  %880 = add nsw i64 %879, 1
  store i64 %880, ptr %878, align 8, !tbaa !9
  br label %881

881:                                              ; preds = %877, %866
  %882 = load i64, ptr %69, align 8, !tbaa !9
  %883 = icmp ne i64 %882, 0
  br i1 %883, label %884, label %892

884:                                              ; preds = %881
  %885 = load i64, ptr %82, align 8, !tbaa !9
  %886 = icmp ne i64 %885, 0
  br i1 %886, label %892, label %887

887:                                              ; preds = %884
  %888 = load ptr, ptr %27, align 8, !tbaa !5
  %889 = load i64, ptr %888, align 8, !tbaa !9
  %890 = add nsw i64 %889, 2
  %891 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 %890, ptr %891, align 8, !tbaa !9
  br label %892

892:                                              ; preds = %887, %884, %881
  %893 = load i64, ptr %69, align 8, !tbaa !9
  store i64 %893, ptr %82, align 8, !tbaa !9
  br label %894

894:                                              ; preds = %892
  %895 = load i64, ptr %54, align 8, !tbaa !9
  %896 = add nsw i64 %895, 1
  store i64 %896, ptr %54, align 8, !tbaa !9
  br label %862, !llvm.loop !18

897:                                              ; preds = %862
  br label %898

898:                                              ; preds = %897, %855
  br label %899

899:                                              ; preds = %898, %701
  %900 = load i64, ptr %87, align 8, !tbaa !9
  %901 = sitofp i64 %900 to double
  %902 = load ptr, ptr %39, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %902, i64 1
  %904 = getelementptr inbounds %struct.doublecomplex, ptr %903, i32 0, i32 0
  store double %901, ptr %904, align 8, !tbaa !11
  %905 = load ptr, ptr %39, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.doublecomplex, ptr %905, i64 1
  %907 = getelementptr inbounds %struct.doublecomplex, ptr %906, i32 0, i32 1
  store double 0.000000e+00, ptr %907, align 8, !tbaa !14
  store i32 0, ptr %22, align 4
  store i32 1, ptr %88, align 4
  br label %908

908:                                              ; preds = %899, %367, %361, %353
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  %909 = load i32, ptr %22, align 4
  ret i32 %909
}

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

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

%struct.doublecomplex = type { double, double }

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

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

54:                                               ; preds = %21
  store i64 0, ptr %34, align 8, !tbaa !5
  br label %59

55:                                               ; preds = %21
  %56 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not342 = icmp eq i64 %56, 0
  br i1 %.not342, label %58, label %57

57:                                               ; preds = %55
  store i64 1, ptr %34, align 8, !tbaa !5
  br label %59

58:                                               ; preds = %55
  store i64 0, ptr %34, align 8, !tbaa !5
  br label %59

59:                                               ; preds = %57, %58, %54
  %.not347 = phi i1 [ false, %54 ], [ true, %57 ], [ false, %58 ]
  %.not351 = phi i1 [ true, %54 ], [ false, %57 ], [ true, %58 ]
  %60 = phi i1 [ false, %54 ], [ false, %57 ], [ true, %58 ]
  %61 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #5
  %.not343 = icmp eq i64 %61, 0
  br i1 %.not343, label %63, label %62

62:                                               ; preds = %59
  store i64 0, ptr %35, align 8, !tbaa !5
  br label %67

63:                                               ; preds = %59
  %64 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %.not344 = icmp eq i64 %64, 0
  br i1 %.not344, label %66, label %65

65:                                               ; preds = %63
  store i64 1, ptr %35, align 8, !tbaa !5
  br label %67

66:                                               ; preds = %63
  store i64 0, ptr %35, align 8, !tbaa !5
  br label %67

67:                                               ; preds = %65, %66, %62
  %.not348 = phi i1 [ false, %62 ], [ true, %65 ], [ false, %66 ]
  %.not357 = phi i1 [ true, %62 ], [ false, %65 ], [ true, %66 ]
  %68 = phi i1 [ false, %62 ], [ false, %65 ], [ true, %66 ]
  %69 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.2) #5
  store i64 0, ptr %20, align 8, !tbaa !5
  %70 = load i64, ptr %17, align 8, !tbaa !5
  %71 = icmp eq i64 %70, -1
  %brmerge = or i1 %60, %68
  %.mux = select i1 %60, i64 -1, i64 -2
  br i1 %brmerge, label %.thread373.sink.split, label %72

72:                                               ; preds = %67
  %.not345 = icmp eq i64 %69, 0
  br i1 %.not345, label %73, label %75

73:                                               ; preds = %72
  %74 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str) #5
  %.not346 = icmp eq i64 %74, 0
  br i1 %.not346, label %.thread373.sink.split, label %75

75:                                               ; preds = %73, %72
  %76 = load i64, ptr %4, align 8, !tbaa !5
  %77 = icmp slt i64 %76, 0
  br i1 %77, label %.thread373.sink.split, label %78

78:                                               ; preds = %75
  %79 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %76, i64 1)
  %80 = icmp slt i64 %79, %spec.select
  br i1 %80, label %.thread373.sink.split, label %81

81:                                               ; preds = %78
  %82 = load i64, ptr %8, align 8, !tbaa !5
  %83 = icmp slt i64 %82, %spec.select
  br i1 %83, label %.thread373.sink.split, label %84

84:                                               ; preds = %81
  %85 = load i64, ptr %13, align 8, !tbaa !5
  %86 = icmp slt i64 %85, 1
  %87 = icmp ult i64 %85, %76
  %or.cond391 = and i1 %87, %.not347
  %or.cond406 = or i1 %86, %or.cond391
  br i1 %or.cond406, label %.thread373.sink.split, label %88

88:                                               ; preds = %84
  %89 = load i64, ptr %15, align 8, !tbaa !5
  %90 = icmp slt i64 %89, 1
  %91 = icmp ult i64 %89, %76
  %or.cond392 = and i1 %91, %.not348
  %or.cond407 = or i1 %90, %or.cond392
  br i1 %or.cond407, label %.thread373.sink.split, label %92

92:                                               ; preds = %88
  %.pr = load i64, ptr %20, align 8, !tbaa !5
  %93 = icmp eq i64 %.pr, 0
  br i1 %93, label %94, label %.thread373

94:                                               ; preds = %92
  %95 = shl nuw i64 %76, 1
  %96 = tail call i64 @llvm.smax.i64(i64 %95, i64 1)
  %97 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c__0) #5
  %98 = add i64 %97, 1
  %99 = mul i64 %98, %76
  %100 = tail call i64 @llvm.smax.i64(i64 %99, i64 1)
  store i64 %100, ptr %22, align 8, !tbaa !5
  %101 = load i64, ptr %4, align 8, !tbaa !5
  %102 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c_n1) #5
  %103 = add i64 %102, 1
  %104 = mul i64 %103, %101
  store i64 %104, ptr %23, align 8, !tbaa !5
  %105 = tail call i64 @llvm.smax.i64(i64 %100, i64 %104)
  br i1 %.not351, label %112, label %106

106:                                              ; preds = %94
  store i64 %105, ptr %22, align 8, !tbaa !5
  %107 = load i64, ptr %4, align 8, !tbaa !5
  %108 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.4, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c_n1) #5
  %109 = add i64 %108, 1
  %110 = mul i64 %109, %107
  store i64 %110, ptr %23, align 8, !tbaa !5
  %111 = tail call i64 @llvm.smax.i64(i64 %105, i64 %110)
  br label %112

112:                                              ; preds = %106, %94
  %.0 = phi i64 [ %111, %106 ], [ %105, %94 ]
  %113 = uitofp nneg i64 %.0 to double
  store double %113, ptr %16, align 8, !tbaa !9
  %114 = getelementptr inbounds i8, ptr %16, i64 8
  store double 0.000000e+00, ptr %114, align 8, !tbaa !12
  %115 = load i64, ptr %17, align 8, !tbaa !5
  %116 = icmp sge i64 %115, %96
  %or.cond = select i1 %116, i1 true, i1 %71
  br i1 %or.cond, label %.thread, label %.thread373.sink.split

.thread:                                          ; preds = %112
  %.pr370.pr = load i64, ptr %20, align 8, !tbaa !5
  %.not353 = icmp eq i64 %.pr370.pr, 0
  br i1 %.not353, label %120, label %.thread373

.thread373.sink.split:                            ; preds = %67, %112, %88, %84, %81, %78, %75, %73
  %.sink = phi i64 [ %.mux, %67 ], [ -3, %73 ], [ -5, %75 ], [ -7, %78 ], [ -9, %81 ], [ -14, %84 ], [ -16, %88 ], [ -18, %112 ]
  store i64 %.sink, ptr %20, align 8, !tbaa !5
  br label %.thread373

.thread373:                                       ; preds = %.thread373.sink.split, %92, %.thread
  %117 = phi i64 [ %.pr370.pr, %.thread ], [ %.pr, %92 ], [ %.sink, %.thread373.sink.split ]
  %118 = sub nsw i64 0, %117
  store i64 %118, ptr %22, align 8, !tbaa !5
  %119 = call i32 @xerbla_(ptr noundef nonnull @.str.7, ptr noundef nonnull %22) #5
  br label %272

120:                                              ; preds = %.thread
  br i1 %71, label %272, label %121

121:                                              ; preds = %120
  %122 = load i64, ptr %4, align 8, !tbaa !5
  %123 = icmp eq i64 %122, 0
  br i1 %123, label %124, label %125

124:                                              ; preds = %121
  store i64 0, ptr %9, align 8, !tbaa !5
  br label %272

125:                                              ; preds = %121
  %126 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #5
  %127 = tail call double @dlamch_(ptr noundef nonnull @.str.2) #5
  store double %127, ptr %40, align 8, !tbaa !13
  %128 = fdiv double 1.000000e+00, %127
  store double %128, ptr %37, align 8, !tbaa !13
  %129 = call i32 @dlabad_(ptr noundef nonnull %40, ptr noundef nonnull %37) #5
  %130 = load double, ptr %40, align 8, !tbaa !13
  %131 = call double @sqrt(double noundef %130) #5
  %132 = fdiv double %131, %126
  store double %132, ptr %40, align 8, !tbaa !13
  %133 = fdiv double 1.000000e+00, %132
  store double %133, ptr %37, align 8, !tbaa !13
  %134 = call double @zlange_(ptr noundef nonnull @.str.9, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %18) #5
  store double %134, ptr %27, align 8, !tbaa !13
  %135 = fcmp ogt double %134, 0.000000e+00
  %136 = load double, ptr %40, align 8
  %137 = fcmp olt double %134, %136
  %or.cond395 = select i1 %135, i1 %137, i1 false
  br i1 %or.cond395, label %141, label %138

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

141:                                              ; preds = %125, %138
  %storemerge = phi double [ %139, %138 ], [ %136, %125 ]
  store double %storemerge, ptr %38, align 8, !tbaa !13
  %142 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %38, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %30) #5
  br label %143

143:                                              ; preds = %138, %141
  %.not354380 = phi i1 [ false, %141 ], [ true, %138 ]
  %144 = call double @zlange_(ptr noundef nonnull @.str.9, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %18) #5
  store double %144, ptr %28, align 8, !tbaa !13
  %145 = fcmp ogt double %144, 0.000000e+00
  %146 = load double, ptr %40, align 8
  %147 = fcmp olt double %144, %146
  %or.cond397 = select i1 %145, i1 %147, i1 false
  br i1 %or.cond397, label %151, label %148

148:                                              ; preds = %143
  %149 = load double, ptr %37, align 8, !tbaa !13
  %150 = fcmp ogt double %144, %149
  br i1 %150, label %151, label %153

151:                                              ; preds = %143, %148
  %storemerge393 = phi double [ %149, %148 ], [ %146, %143 ]
  store double %storemerge393, ptr %39, align 8, !tbaa !13
  %152 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %28, ptr noundef nonnull %39, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %30) #5
  br label %153

153:                                              ; preds = %148, %151
  %.not355385 = phi i1 [ false, %151 ], [ true, %148 ]
  %154 = load i64, ptr %4, align 8, !tbaa !5
  %155 = getelementptr double, ptr %18, i64 %154
  %.idx = shl i64 %154, 4
  %156 = getelementptr i8, ptr %18, i64 %.idx
  %157 = call i32 @zggbal_(ptr noundef nonnull @.str.8, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %18, ptr noundef %155, ptr noundef %156, ptr noundef nonnull %30) #5
  %158 = load i64, ptr %25, align 8, !tbaa !5
  %159 = add nsw i64 %158, 1
  %160 = load i64, ptr %26, align 8, !tbaa !5
  %161 = sub i64 %159, %160
  store i64 %161, ptr %36, align 8, !tbaa !5
  %162 = load i64, ptr %4, align 8, !tbaa !5
  %reass.sub = sub i64 %162, %160
  %163 = add i64 %reass.sub, 1
  store i64 %163, ptr %33, align 8, !tbaa !5
  %164 = load i64, ptr %17, align 8, !tbaa !5
  %165 = sub i64 %164, %161
  store i64 %165, ptr %22, align 8, !tbaa !5
  %166 = add i64 %44, 1
  %167 = mul i64 %160, %166
  %168 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %167
  %169 = getelementptr %struct.doublecomplex, ptr %16, i64 %161
  %170 = call i32 @zgeqrf_(ptr noundef nonnull %36, ptr noundef nonnull %33, ptr noundef %168, ptr noundef nonnull %8, ptr noundef nonnull %16, ptr noundef %169, ptr noundef nonnull %22, ptr noundef nonnull %30) #5
  %171 = load i64, ptr %17, align 8, !tbaa !5
  %172 = sub i64 %171, %161
  store i64 %172, ptr %22, align 8, !tbaa !5
  %173 = load i64, ptr %26, align 8, !tbaa !5
  %174 = mul i64 %173, %166
  %175 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %174
  %176 = add i64 %41, 1
  %177 = mul i64 %173, %176
  %178 = getelementptr inbounds %struct.doublecomplex, ptr %43, i64 %177
  %179 = call i32 @zunmqr_(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.12, ptr noundef nonnull %36, ptr noundef nonnull %33, ptr noundef nonnull %36, ptr noundef %175, ptr noundef nonnull %8, ptr noundef nonnull %16, ptr noundef %178, ptr noundef nonnull %6, ptr noundef %169, ptr noundef nonnull %22, ptr noundef nonnull %30) #5
  br i1 %.not351, label %203, label %180

180:                                              ; preds = %153
  %181 = call i32 @zlaset_(ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %12, ptr noundef nonnull %13) #5
  %182 = load i64, ptr %36, align 8, !tbaa !5
  %183 = icmp sgt i64 %182, 1
  br i1 %183, label %184, label %195

184:                                              ; preds = %180
  %185 = add nsw i64 %182, -1
  store i64 %185, ptr %22, align 8, !tbaa !5
  store i64 %185, ptr %23, align 8, !tbaa !5
  %186 = load i64, ptr %26, align 8, !tbaa !5
  %187 = add nsw i64 %186, 1
  %188 = mul nsw i64 %186, %44
  %189 = getelementptr %struct.doublecomplex, ptr %46, i64 %187
  %190 = getelementptr %struct.doublecomplex, ptr %189, i64 %188
  %191 = mul nsw i64 %186, %49
  %192 = getelementptr %struct.doublecomplex, ptr %51, i64 %187
  %193 = getelementptr %struct.doublecomplex, ptr %192, i64 %191
  %194 = call i32 @zlacpy_(ptr noundef nonnull @.str.11, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef %190, ptr noundef nonnull %8, ptr noundef %193, ptr noundef nonnull %13) #5
  br label %195

195:                                              ; preds = %184, %180
  %196 = load i64, ptr %17, align 8, !tbaa !5
  %197 = sub i64 %196, %161
  store i64 %197, ptr %22, align 8, !tbaa !5
  %198 = load i64, ptr %26, align 8, !tbaa !5
  %199 = add i64 %49, 1
  %200 = mul i64 %198, %199
  %201 = getelementptr inbounds %struct.doublecomplex, ptr %51, i64 %200
  %202 = call i32 @zungqr_(ptr noundef nonnull %36, ptr noundef nonnull %36, ptr noundef nonnull %36, ptr noundef %201, ptr noundef nonnull %13, ptr noundef nonnull %16, ptr noundef %169, ptr noundef nonnull %22, ptr noundef nonnull %30) #5
  br label %203

203:                                              ; preds = %195, %153
  br i1 %.not357, label %206, label %204

204:                                              ; preds = %203
  %205 = call i32 @zlaset_(ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %14, ptr noundef nonnull %15) #5
  br label %206

206:                                              ; preds = %204, %203
  %207 = call i32 @zgghrd_(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %4, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull %30) #5
  store i64 0, ptr %9, align 8, !tbaa !5
  %208 = load i64, ptr %17, align 8, !tbaa !5
  store i64 %208, ptr %22, align 8, !tbaa !5
  %209 = call i32 @zhgeqz_(ptr noundef nonnull @.str.2, ptr noundef %0, ptr noundef %1, ptr noundef nonnull %4, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %22, ptr noundef %156, ptr noundef nonnull %30) #5
  %210 = load i64, ptr %30, align 8, !tbaa !5
  %.not358 = icmp eq i64 %210, 0
  br i1 %.not358, label %220, label %211

211:                                              ; preds = %206
  %212 = icmp slt i64 %210, 1
  %.pre = load i64, ptr %4, align 8, !tbaa !5
  %.not365 = icmp sgt i64 %210, %.pre
  %or.cond408 = select i1 %212, i1 true, i1 %.not365
  br i1 %or.cond408, label %213, label %.loopexit.sink.split

213:                                              ; preds = %211
  %214 = icmp sle i64 %210, %.pre
  %215 = shl i64 %.pre, 1
  %.not366 = icmp sgt i64 %210, %215
  %or.cond368 = or i1 %214, %.not366
  br i1 %or.cond368, label %218, label %216

216:                                              ; preds = %213
  %217 = sub nsw i64 %210, %.pre
  br label %.loopexit.sink.split

218:                                              ; preds = %213
  %219 = add nsw i64 %.pre, 1
  br label %.loopexit.sink.split

220:                                              ; preds = %206
  br i1 %.not345, label %242, label %221

221:                                              ; preds = %220
  br i1 %.not354380, label %224, label %222

222:                                              ; preds = %221
  %223 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %38, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %10, ptr noundef nonnull %4, ptr noundef nonnull %30) #5
  br label %224

224:                                              ; preds = %222, %221
  br i1 %.not355385, label %227, label %225

225:                                              ; preds = %224
  %226 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %28, ptr noundef nonnull %39, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %11, ptr noundef nonnull %4, ptr noundef nonnull %30) #5
  br label %227

227:                                              ; preds = %225, %224
  %228 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %228, ptr %22, align 8, !tbaa !5
  %.not360398 = icmp slt i64 %228, 1
  br i1 %.not360398, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %227, %.lr.ph
  %.0325399 = phi i64 [ %233, %.lr.ph ], [ 1, %227 ]
  %229 = getelementptr inbounds %struct.doublecomplex, ptr %47, i64 %.0325399
  %230 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %.0325399
  %231 = call i64 (ptr, ptr, ...) %3(ptr noundef nonnull %229, ptr noundef nonnull %230) #5
  %232 = getelementptr inbounds i64, ptr %52, i64 %.0325399
  store i64 %231, ptr %232, align 8, !tbaa !5
  %233 = add nuw nsw i64 %.0325399, 1
  %234 = load i64, ptr %22, align 8, !tbaa !5
  %.not360.not = icmp slt i64 %.0325399, %234
  br i1 %.not360.not, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %227
  %235 = load i64, ptr %17, align 8, !tbaa !5
  store i64 %235, ptr %22, align 8, !tbaa !5
  %236 = call i32 @ztgsen_(ptr noundef nonnull @c__0, ptr noundef nonnull %34, ptr noundef nonnull %35, ptr noundef %19, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull %9, ptr noundef nonnull %31, ptr noundef nonnull %32, ptr noundef nonnull %24, ptr noundef nonnull %16, ptr noundef nonnull %22, ptr noundef nonnull %29, ptr noundef nonnull @c__1, ptr noundef nonnull %30) #5
  %237 = load i64, ptr %30, align 8, !tbaa !5
  %238 = icmp eq i64 %237, 1
  br i1 %238, label %239, label %242

239:                                              ; preds = %._crit_edge
  %240 = load i64, ptr %4, align 8, !tbaa !5
  %241 = add nsw i64 %240, 3
  store i64 %241, ptr %20, align 8, !tbaa !5
  br label %242

242:                                              ; preds = %._crit_edge, %239, %220
  %243 = load i64, ptr %34, align 8, !tbaa !5
  %.not361 = icmp eq i64 %243, 0
  br i1 %.not361, label %246, label %244

244:                                              ; preds = %242
  %245 = call i32 @zggbak_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.11, ptr noundef nonnull %4, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %18, ptr noundef %155, ptr noundef nonnull %4, ptr noundef %12, ptr noundef nonnull %13, ptr noundef nonnull %30) #5
  br label %246

246:                                              ; preds = %244, %242
  %247 = load i64, ptr %35, align 8, !tbaa !5
  %.not362 = icmp eq i64 %247, 0
  br i1 %.not362, label %250, label %248

248:                                              ; preds = %246
  %249 = call i32 @zggbak_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.14, ptr noundef nonnull %4, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %18, ptr noundef %155, ptr noundef nonnull %4, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull %30) #5
  br label %250

250:                                              ; preds = %248, %246
  br i1 %.not354380, label %254, label %251

251:                                              ; preds = %250
  %252 = call i32 @zlascl_(ptr noundef nonnull @.str.15, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %38, ptr noundef nonnull %27, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %30) #5
  %253 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %38, ptr noundef nonnull %27, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %10, ptr noundef nonnull %4, ptr noundef nonnull %30) #5
  br label %254

254:                                              ; preds = %251, %250
  br i1 %.not355385, label %258, label %255

255:                                              ; preds = %254
  %256 = call i32 @zlascl_(ptr noundef nonnull @.str.15, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %39, ptr noundef nonnull %28, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %30) #5
  %257 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %39, ptr noundef nonnull %28, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %11, ptr noundef nonnull %4, ptr noundef nonnull %30) #5
  br label %258

258:                                              ; preds = %255, %254
  br i1 %.not345, label %.loopexit, label %259

259:                                              ; preds = %258
  store i64 0, ptr %9, align 8, !tbaa !5
  %260 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %260, ptr %22, align 8, !tbaa !5
  %.not363400 = icmp slt i64 %260, 1
  br i1 %.not363400, label %.loopexit, label %.lr.ph404

.lr.ph404:                                        ; preds = %259, %.thread386
  %.0320402 = phi i64 [ %263, %.thread386 ], [ 1, %259 ]
  %.1326401 = phi i64 [ %270, %.thread386 ], [ 1, %259 ]
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %47, i64 %.1326401
  %262 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %.1326401
  %263 = call i64 (ptr, ptr, ...) %3(ptr noundef nonnull %261, ptr noundef nonnull %262) #5
  %.not364 = icmp eq i64 %263, 0
  br i1 %.not364, label %.thread386, label %264

264:                                              ; preds = %.lr.ph404
  %265 = load i64, ptr %9, align 8, !tbaa !5
  %266 = add nsw i64 %265, 1
  store i64 %266, ptr %9, align 8, !tbaa !5
  %.not405 = icmp eq i64 %.0320402, 0
  br i1 %.not405, label %267, label %.thread386

267:                                              ; preds = %264
  %268 = load i64, ptr %4, align 8, !tbaa !5
  %269 = add nsw i64 %268, 2
  store i64 %269, ptr %20, align 8, !tbaa !5
  br label %.thread386

.thread386:                                       ; preds = %.lr.ph404, %267, %264
  %270 = add nuw nsw i64 %.1326401, 1
  %271 = load i64, ptr %22, align 8, !tbaa !5
  %.not363.not = icmp slt i64 %.1326401, %271
  br i1 %.not363.not, label %.lr.ph404, label %.loopexit, !llvm.loop !16

.loopexit.sink.split:                             ; preds = %211, %216, %218
  %.sink409 = phi i64 [ %219, %218 ], [ %217, %216 ], [ %210, %211 ]
  store i64 %.sink409, ptr %20, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.thread386, %.loopexit.sink.split, %259, %258
  store double %113, ptr %16, align 8, !tbaa !9
  store double 0.000000e+00, ptr %114, align 8, !tbaa !12
  br label %272

272:                                              ; preds = %120, %.loopexit, %124, %.thread373
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  ret i32 0
}

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

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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