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

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

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

101:                                              ; preds = %15
  %102 = load ptr, ptr %16, align 8, !tbaa !5
  %103 = call i32 @lsame_(ptr noundef %102, ptr noundef @.str.2)
  %104 = icmp ne i32 %103, 0
  br i1 %104, label %107, label %105

105:                                              ; preds = %101
  %106 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -1, ptr %106, align 4, !tbaa !9
  br label %156

107:                                              ; preds = %101, %15
  %108 = load i32, ptr %53, align 4, !tbaa !9
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %116, label %110

110:                                              ; preds = %107
  %111 = load ptr, ptr %17, align 8, !tbaa !5
  %112 = call i32 @lsame_(ptr noundef %111, ptr noundef @.str.2)
  %113 = icmp ne i32 %112, 0
  br i1 %113, label %116, label %114

114:                                              ; preds = %110
  %115 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -2, ptr %115, align 4, !tbaa !9
  br label %155

116:                                              ; preds = %110, %107
  %117 = load ptr, ptr %19, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = icmp slt i32 %118, 0
  br i1 %119, label %120, label %122

120:                                              ; preds = %116
  %121 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -4, ptr %121, align 4, !tbaa !9
  br label %154

122:                                              ; preds = %116
  %123 = load ptr, ptr %21, align 8, !tbaa !5
  %124 = load i32, ptr %123, align 4, !tbaa !9
  %125 = load ptr, ptr %19, align 8, !tbaa !5
  %126 = load i32, ptr %125, align 4, !tbaa !9
  %127 = icmp sge i32 1, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %122
  br label %132

129:                                              ; preds = %122
  %130 = load ptr, ptr %19, align 8, !tbaa !5
  %131 = load i32, ptr %130, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %129, %128
  %133 = phi i32 [ 1, %128 ], [ %131, %129 ]
  %134 = icmp slt i32 %124, %133
  br i1 %134, label %135, label %137

135:                                              ; preds = %132
  %136 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -6, ptr %136, align 4, !tbaa !9
  br label %153

137:                                              ; preds = %132
  %138 = load ptr, ptr %25, align 8, !tbaa !5
  %139 = load i32, ptr %138, align 4, !tbaa !9
  %140 = icmp slt i32 %139, 1
  br i1 %140, label %150, label %141

141:                                              ; preds = %137
  %142 = load i32, ptr %55, align 4, !tbaa !9
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %152

144:                                              ; preds = %141
  %145 = load ptr, ptr %25, align 8, !tbaa !5
  %146 = load i32, ptr %145, align 4, !tbaa !9
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = load i32, ptr %147, align 4, !tbaa !9
  %149 = icmp slt i32 %146, %148
  br i1 %149, label %150, label %152

150:                                              ; preds = %144, %137
  %151 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -10, ptr %151, align 4, !tbaa !9
  br label %152

152:                                              ; preds = %150, %144, %141
  br label %153

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

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

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

156:                                              ; preds = %155, %105
  %157 = load ptr, ptr %30, align 8, !tbaa !5
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = icmp eq i32 %158, 0
  br i1 %159, label %160, label %262

160:                                              ; preds = %156
  %161 = load ptr, ptr %19, align 8, !tbaa !5
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = icmp eq i32 %162, 0
  br i1 %163, label %164, label %165

164:                                              ; preds = %160
  store i32 1, ptr %49, align 4, !tbaa !9
  store i32 1, ptr %50, align 4, !tbaa !9
  br label %243

165:                                              ; preds = %160
  %166 = load ptr, ptr %19, align 8, !tbaa !5
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = load ptr, ptr %19, align 8, !tbaa !5
  %169 = load i32, ptr %168, align 4, !tbaa !9
  %170 = load ptr, ptr %19, align 8, !tbaa !5
  %171 = load ptr, ptr %19, align 8, !tbaa !5
  %172 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %170, ptr noundef @c__1, ptr noundef %171, ptr noundef @c__0, i32 noundef 6, i32 noundef 1)
  %173 = mul nsw i32 %169, %172
  %174 = add nsw i32 %167, %173
  store i32 %174, ptr %50, align 4, !tbaa !9
  %175 = load ptr, ptr %19, align 8, !tbaa !5
  %176 = load i32, ptr %175, align 4, !tbaa !9
  %177 = shl i32 %176, 1
  store i32 %177, ptr %49, align 4, !tbaa !9
  %178 = load ptr, ptr %16, align 8, !tbaa !5
  %179 = load ptr, ptr %19, align 8, !tbaa !5
  %180 = load ptr, ptr %19, align 8, !tbaa !5
  %181 = load ptr, ptr %20, align 8, !tbaa !5
  %182 = load i32, ptr %32, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds %struct.doublecomplex, ptr %181, i64 %183
  %185 = load ptr, ptr %21, align 8, !tbaa !5
  %186 = load ptr, ptr %23, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.doublecomplex, ptr %186, i64 1
  %188 = load ptr, ptr %24, align 8, !tbaa !5
  %189 = load i32, ptr %34, align 4, !tbaa !9
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds %struct.doublecomplex, ptr %188, i64 %190
  %192 = load ptr, ptr %25, align 8, !tbaa !5
  %193 = load ptr, ptr %26, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.doublecomplex, ptr %193, i64 1
  call void @zhseqr_(ptr noundef @.str.1, ptr noundef %178, ptr noundef %179, ptr noundef @c__1, ptr noundef %180, ptr noundef %184, ptr noundef %185, ptr noundef %187, ptr noundef %191, ptr noundef %192, ptr noundef %194, ptr noundef @c_n1, ptr noundef %45)
  %195 = load ptr, ptr %26, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.doublecomplex, ptr %195, i64 1
  %197 = getelementptr inbounds %struct.doublecomplex, ptr %196, i32 0, i32 0
  %198 = load double, ptr %197, align 8, !tbaa !11
  %199 = fptosi double %198 to i32
  store i32 %199, ptr %52, align 4, !tbaa !9
  %200 = load i32, ptr %55, align 4, !tbaa !9
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %212, label %202

202:                                              ; preds = %165
  %203 = load i32, ptr %50, align 4, !tbaa !9
  %204 = load i32, ptr %52, align 4, !tbaa !9
  %205 = icmp sge i32 %203, %204
  br i1 %205, label %206, label %208

206:                                              ; preds = %202
  %207 = load i32, ptr %50, align 4, !tbaa !9
  br label %210

208:                                              ; preds = %202
  %209 = load i32, ptr %52, align 4, !tbaa !9
  br label %210

210:                                              ; preds = %208, %206
  %211 = phi i32 [ %207, %206 ], [ %209, %208 ]
  store i32 %211, ptr %50, align 4, !tbaa !9
  br label %242

212:                                              ; preds = %165
  %213 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %213, ptr %35, align 4, !tbaa !9
  %214 = load ptr, ptr %19, align 8, !tbaa !5
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = load ptr, ptr %19, align 8, !tbaa !5
  %217 = load i32, ptr %216, align 4, !tbaa !9
  %218 = sub nsw i32 %217, 1
  %219 = load ptr, ptr %19, align 8, !tbaa !5
  %220 = load ptr, ptr %19, align 8, !tbaa !5
  %221 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.4, ptr noundef %219, ptr noundef @c__1, ptr noundef %220, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  %222 = mul nsw i32 %218, %221
  %223 = add nsw i32 %215, %222
  store i32 %223, ptr %36, align 4, !tbaa !9
  %224 = load i32, ptr %35, align 4, !tbaa !9
  %225 = load i32, ptr %36, align 4, !tbaa !9
  %226 = icmp sge i32 %224, %225
  br i1 %226, label %227, label %229

227:                                              ; preds = %212
  %228 = load i32, ptr %35, align 4, !tbaa !9
  br label %231

229:                                              ; preds = %212
  %230 = load i32, ptr %36, align 4, !tbaa !9
  br label %231

231:                                              ; preds = %229, %227
  %232 = phi i32 [ %228, %227 ], [ %230, %229 ]
  store i32 %232, ptr %50, align 4, !tbaa !9
  %233 = load i32, ptr %50, align 4, !tbaa !9
  %234 = load i32, ptr %52, align 4, !tbaa !9
  %235 = icmp sge i32 %233, %234
  br i1 %235, label %236, label %238

236:                                              ; preds = %231
  %237 = load i32, ptr %50, align 4, !tbaa !9
  br label %240

238:                                              ; preds = %231
  %239 = load i32, ptr %52, align 4, !tbaa !9
  br label %240

240:                                              ; preds = %238, %236
  %241 = phi i32 [ %237, %236 ], [ %239, %238 ]
  store i32 %241, ptr %50, align 4, !tbaa !9
  br label %242

242:                                              ; preds = %240, %210
  br label %243

243:                                              ; preds = %242, %164
  %244 = load i32, ptr %50, align 4, !tbaa !9
  %245 = sitofp i32 %244 to double
  %246 = load ptr, ptr %26, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %246, i64 1
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %247, i32 0, i32 0
  store double %245, ptr %248, align 8, !tbaa !11
  %249 = load ptr, ptr %26, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.doublecomplex, ptr %249, i64 1
  %251 = getelementptr inbounds %struct.doublecomplex, ptr %250, i32 0, i32 1
  store double 0.000000e+00, ptr %251, align 8, !tbaa !14
  %252 = load ptr, ptr %27, align 8, !tbaa !5
  %253 = load i32, ptr %252, align 4, !tbaa !9
  %254 = load i32, ptr %49, align 4, !tbaa !9
  %255 = icmp slt i32 %253, %254
  br i1 %255, label %256, label %261

256:                                              ; preds = %243
  %257 = load i32, ptr %54, align 4, !tbaa !9
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %261, label %259

259:                                              ; preds = %256
  %260 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -12, ptr %260, align 4, !tbaa !9
  br label %261

261:                                              ; preds = %259, %256, %243
  br label %262

262:                                              ; preds = %261, %156
  %263 = load ptr, ptr %30, align 8, !tbaa !5
  %264 = load i32, ptr %263, align 4, !tbaa !9
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %271

266:                                              ; preds = %262
  %267 = load ptr, ptr %30, align 8, !tbaa !5
  %268 = load i32, ptr %267, align 4, !tbaa !9
  %269 = sub nsw i32 0, %268
  store i32 %269, ptr %35, align 4, !tbaa !9
  %270 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %35, i32 noundef 6)
  store i32 1, ptr %61, align 4
  br label %535

271:                                              ; preds = %262
  %272 = load i32, ptr %54, align 4, !tbaa !9
  %273 = icmp ne i32 %272, 0
  br i1 %273, label %274, label %275

274:                                              ; preds = %271
  store i32 1, ptr %61, align 4
  br label %535

275:                                              ; preds = %271
  br label %276

276:                                              ; preds = %275
  %277 = load ptr, ptr %19, align 8, !tbaa !5
  %278 = load i32, ptr %277, align 4, !tbaa !9
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %280, label %282

280:                                              ; preds = %276
  %281 = load ptr, ptr %22, align 8, !tbaa !5
  store i32 0, ptr %281, align 4, !tbaa !9
  store i32 1, ptr %61, align 4
  br label %535

282:                                              ; preds = %276
  %283 = call double @dlamch_(ptr noundef @.str.7)
  store double %283, ptr %59, align 8, !tbaa !15
  %284 = call double @dlamch_(ptr noundef @.str.1)
  store double %284, ptr %51, align 8, !tbaa !15
  %285 = load double, ptr %51, align 8, !tbaa !15
  %286 = fdiv double 1.000000e+00, %285
  store double %286, ptr %48, align 8, !tbaa !15
  call void @dlabad_(ptr noundef %51, ptr noundef %48)
  %287 = load double, ptr %51, align 8, !tbaa !15
  %288 = call double @sqrt(double noundef %287) #4
  %289 = load double, ptr %59, align 8, !tbaa !15
  %290 = fdiv double %288, %289
  store double %290, ptr %51, align 8, !tbaa !15
  %291 = load double, ptr %51, align 8, !tbaa !15
  %292 = fdiv double 1.000000e+00, %291
  store double %292, ptr %48, align 8, !tbaa !15
  %293 = load ptr, ptr %19, align 8, !tbaa !5
  %294 = load ptr, ptr %19, align 8, !tbaa !5
  %295 = load ptr, ptr %20, align 8, !tbaa !5
  %296 = load i32, ptr %32, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds %struct.doublecomplex, ptr %295, i64 %297
  %299 = load ptr, ptr %21, align 8, !tbaa !5
  %300 = getelementptr inbounds [1 x double], ptr %58, i64 0, i64 0
  %301 = call double @zlange_(ptr noundef @.str.8, ptr noundef %293, ptr noundef %294, ptr noundef %298, ptr noundef %299, ptr noundef %300)
  store double %301, ptr %38, align 8, !tbaa !15
  store i32 0, ptr %46, align 4, !tbaa !9
  %302 = load double, ptr %38, align 8, !tbaa !15
  %303 = fcmp ogt double %302, 0.000000e+00
  br i1 %303, label %304, label %310

304:                                              ; preds = %282
  %305 = load double, ptr %38, align 8, !tbaa !15
  %306 = load double, ptr %51, align 8, !tbaa !15
  %307 = fcmp olt double %305, %306
  br i1 %307, label %308, label %310

308:                                              ; preds = %304
  store i32 1, ptr %46, align 4, !tbaa !9
  %309 = load double, ptr %51, align 8, !tbaa !15
  store double %309, ptr %47, align 8, !tbaa !15
  br label %317

310:                                              ; preds = %304, %282
  %311 = load double, ptr %38, align 8, !tbaa !15
  %312 = load double, ptr %48, align 8, !tbaa !15
  %313 = fcmp ogt double %311, %312
  br i1 %313, label %314, label %316

314:                                              ; preds = %310
  store i32 1, ptr %46, align 4, !tbaa !9
  %315 = load double, ptr %48, align 8, !tbaa !15
  store double %315, ptr %47, align 8, !tbaa !15
  br label %316

316:                                              ; preds = %314, %310
  br label %317

317:                                              ; preds = %316, %308
  %318 = load i32, ptr %46, align 4, !tbaa !9
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %328

320:                                              ; preds = %317
  %321 = load ptr, ptr %19, align 8, !tbaa !5
  %322 = load ptr, ptr %19, align 8, !tbaa !5
  %323 = load ptr, ptr %20, align 8, !tbaa !5
  %324 = load i32, ptr %32, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %323, i64 %325
  %327 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %38, ptr noundef %47, ptr noundef %321, ptr noundef %322, ptr noundef %326, ptr noundef %327, ptr noundef %39)
  br label %328

328:                                              ; preds = %320, %317
  store i32 1, ptr %37, align 4, !tbaa !9
  %329 = load ptr, ptr %19, align 8, !tbaa !5
  %330 = load ptr, ptr %20, align 8, !tbaa !5
  %331 = load i32, ptr %32, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds %struct.doublecomplex, ptr %330, i64 %332
  %334 = load ptr, ptr %21, align 8, !tbaa !5
  %335 = load ptr, ptr %28, align 8, !tbaa !5
  %336 = load i32, ptr %37, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds double, ptr %335, i64 %337
  call void @zgebal_(ptr noundef @.str.7, ptr noundef %329, ptr noundef %333, ptr noundef %334, ptr noundef %57, ptr noundef %56, ptr noundef %338, ptr noundef %39)
  store i32 1, ptr %40, align 4, !tbaa !9
  %339 = load ptr, ptr %19, align 8, !tbaa !5
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = load i32, ptr %40, align 4, !tbaa !9
  %342 = add nsw i32 %340, %341
  store i32 %342, ptr %41, align 4, !tbaa !9
  %343 = load ptr, ptr %27, align 8, !tbaa !5
  %344 = load i32, ptr %343, align 4, !tbaa !9
  %345 = load i32, ptr %41, align 4, !tbaa !9
  %346 = sub nsw i32 %344, %345
  %347 = add nsw i32 %346, 1
  store i32 %347, ptr %35, align 4, !tbaa !9
  %348 = load ptr, ptr %19, align 8, !tbaa !5
  %349 = load ptr, ptr %20, align 8, !tbaa !5
  %350 = load i32, ptr %32, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds %struct.doublecomplex, ptr %349, i64 %351
  %353 = load ptr, ptr %21, align 8, !tbaa !5
  %354 = load ptr, ptr %26, align 8, !tbaa !5
  %355 = load i32, ptr %40, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds %struct.doublecomplex, ptr %354, i64 %356
  %358 = load ptr, ptr %26, align 8, !tbaa !5
  %359 = load i32, ptr %41, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %358, i64 %360
  call void @zgehrd_(ptr noundef %348, ptr noundef %57, ptr noundef %56, ptr noundef %352, ptr noundef %353, ptr noundef %357, ptr noundef %361, ptr noundef %35, ptr noundef %39)
  %362 = load i32, ptr %55, align 4, !tbaa !9
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %364, label %396

364:                                              ; preds = %328
  %365 = load ptr, ptr %19, align 8, !tbaa !5
  %366 = load ptr, ptr %19, align 8, !tbaa !5
  %367 = load ptr, ptr %20, align 8, !tbaa !5
  %368 = load i32, ptr %32, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds %struct.doublecomplex, ptr %367, i64 %369
  %371 = load ptr, ptr %21, align 8, !tbaa !5
  %372 = load ptr, ptr %24, align 8, !tbaa !5
  %373 = load i32, ptr %34, align 4, !tbaa !9
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds %struct.doublecomplex, ptr %372, i64 %374
  %376 = load ptr, ptr %25, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.10, ptr noundef %365, ptr noundef %366, ptr noundef %370, ptr noundef %371, ptr noundef %375, ptr noundef %376)
  %377 = load ptr, ptr %27, align 8, !tbaa !5
  %378 = load i32, ptr %377, align 4, !tbaa !9
  %379 = load i32, ptr %41, align 4, !tbaa !9
  %380 = sub nsw i32 %378, %379
  %381 = add nsw i32 %380, 1
  store i32 %381, ptr %35, align 4, !tbaa !9
  %382 = load ptr, ptr %19, align 8, !tbaa !5
  %383 = load ptr, ptr %24, align 8, !tbaa !5
  %384 = load i32, ptr %34, align 4, !tbaa !9
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds %struct.doublecomplex, ptr %383, i64 %385
  %387 = load ptr, ptr %25, align 8, !tbaa !5
  %388 = load ptr, ptr %26, align 8, !tbaa !5
  %389 = load i32, ptr %40, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %388, i64 %390
  %392 = load ptr, ptr %26, align 8, !tbaa !5
  %393 = load i32, ptr %41, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds %struct.doublecomplex, ptr %392, i64 %394
  call void @zunghr_(ptr noundef %382, ptr noundef %57, ptr noundef %56, ptr noundef %386, ptr noundef %387, ptr noundef %391, ptr noundef %395, ptr noundef %35, ptr noundef %39)
  br label %396

396:                                              ; preds = %364, %328
  %397 = load ptr, ptr %22, align 8, !tbaa !5
  store i32 0, ptr %397, align 4, !tbaa !9
  %398 = load i32, ptr %40, align 4, !tbaa !9
  store i32 %398, ptr %41, align 4, !tbaa !9
  %399 = load ptr, ptr %27, align 8, !tbaa !5
  %400 = load i32, ptr %399, align 4, !tbaa !9
  %401 = load i32, ptr %41, align 4, !tbaa !9
  %402 = sub nsw i32 %400, %401
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %35, align 4, !tbaa !9
  %404 = load ptr, ptr %16, align 8, !tbaa !5
  %405 = load ptr, ptr %19, align 8, !tbaa !5
  %406 = load ptr, ptr %20, align 8, !tbaa !5
  %407 = load i32, ptr %32, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %406, i64 %408
  %410 = load ptr, ptr %21, align 8, !tbaa !5
  %411 = load ptr, ptr %23, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.doublecomplex, ptr %411, i64 1
  %413 = load ptr, ptr %24, align 8, !tbaa !5
  %414 = load i32, ptr %34, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds %struct.doublecomplex, ptr %413, i64 %415
  %417 = load ptr, ptr %25, align 8, !tbaa !5
  %418 = load ptr, ptr %26, align 8, !tbaa !5
  %419 = load i32, ptr %41, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %418, i64 %420
  call void @zhseqr_(ptr noundef @.str.1, ptr noundef %404, ptr noundef %405, ptr noundef %57, ptr noundef %56, ptr noundef %409, ptr noundef %410, ptr noundef %412, ptr noundef %416, ptr noundef %417, ptr noundef %421, ptr noundef %35, ptr noundef %45)
  %422 = load i32, ptr %45, align 4, !tbaa !9
  %423 = icmp sgt i32 %422, 0
  br i1 %423, label %424, label %427

424:                                              ; preds = %396
  %425 = load i32, ptr %45, align 4, !tbaa !9
  %426 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 %425, ptr %426, align 4, !tbaa !9
  br label %427

427:                                              ; preds = %424, %396
  %428 = load i32, ptr %53, align 4, !tbaa !9
  %429 = icmp ne i32 %428, 0
  br i1 %429, label %430, label %490

430:                                              ; preds = %427
  %431 = load ptr, ptr %30, align 8, !tbaa !5
  %432 = load i32, ptr %431, align 4, !tbaa !9
  %433 = icmp eq i32 %432, 0
  br i1 %433, label %434, label %490

434:                                              ; preds = %430
  %435 = load i32, ptr %46, align 4, !tbaa !9
  %436 = icmp ne i32 %435, 0
  br i1 %436, label %437, label %442

437:                                              ; preds = %434
  %438 = load ptr, ptr %19, align 8, !tbaa !5
  %439 = load ptr, ptr %23, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %439, i64 1
  %441 = load ptr, ptr %19, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %47, ptr noundef %38, ptr noundef %438, ptr noundef @c__1, ptr noundef %440, ptr noundef %441, ptr noundef %39)
  br label %442

442:                                              ; preds = %437, %434
  %443 = load ptr, ptr %19, align 8, !tbaa !5
  %444 = load i32, ptr %443, align 4, !tbaa !9
  store i32 %444, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %445

445:                                              ; preds = %460, %442
  %446 = load i32, ptr %42, align 4, !tbaa !9
  %447 = load i32, ptr %35, align 4, !tbaa !9
  %448 = icmp sle i32 %446, %447
  br i1 %448, label %449, label %463

449:                                              ; preds = %445
  %450 = load ptr, ptr %18, align 8, !tbaa !5
  %451 = load ptr, ptr %23, align 8, !tbaa !5
  %452 = load i32, ptr %42, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %451, i64 %453
  %455 = call i32 (ptr, ...) %450(ptr noundef %454)
  %456 = load ptr, ptr %29, align 8, !tbaa !5
  %457 = load i32, ptr %42, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds i32, ptr %456, i64 %458
  store i32 %455, ptr %459, align 4, !tbaa !9
  br label %460

460:                                              ; preds = %449
  %461 = load i32, ptr %42, align 4, !tbaa !9
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %42, align 4, !tbaa !9
  br label %445, !llvm.loop !16

463:                                              ; preds = %445
  %464 = load ptr, ptr %27, align 8, !tbaa !5
  %465 = load i32, ptr %464, align 4, !tbaa !9
  %466 = load i32, ptr %41, align 4, !tbaa !9
  %467 = sub nsw i32 %465, %466
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %35, align 4, !tbaa !9
  %469 = load ptr, ptr %16, align 8, !tbaa !5
  %470 = load ptr, ptr %29, align 8, !tbaa !5
  %471 = getelementptr inbounds i32, ptr %470, i64 1
  %472 = load ptr, ptr %19, align 8, !tbaa !5
  %473 = load ptr, ptr %20, align 8, !tbaa !5
  %474 = load i32, ptr %32, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds %struct.doublecomplex, ptr %473, i64 %475
  %477 = load ptr, ptr %21, align 8, !tbaa !5
  %478 = load ptr, ptr %24, align 8, !tbaa !5
  %479 = load i32, ptr %34, align 4, !tbaa !9
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %478, i64 %480
  %482 = load ptr, ptr %25, align 8, !tbaa !5
  %483 = load ptr, ptr %23, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %483, i64 1
  %485 = load ptr, ptr %22, align 8, !tbaa !5
  %486 = load ptr, ptr %26, align 8, !tbaa !5
  %487 = load i32, ptr %41, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds %struct.doublecomplex, ptr %486, i64 %488
  call void @ztrsen_(ptr noundef @.str.2, ptr noundef %469, ptr noundef %471, ptr noundef %472, ptr noundef %476, ptr noundef %477, ptr noundef %481, ptr noundef %482, ptr noundef %484, ptr noundef %485, ptr noundef %43, ptr noundef %60, ptr noundef %489, ptr noundef %35, ptr noundef %44)
  br label %490

490:                                              ; preds = %463, %430, %427
  %491 = load i32, ptr %55, align 4, !tbaa !9
  %492 = icmp ne i32 %491, 0
  br i1 %492, label %493, label %505

493:                                              ; preds = %490
  %494 = load ptr, ptr %19, align 8, !tbaa !5
  %495 = load ptr, ptr %28, align 8, !tbaa !5
  %496 = load i32, ptr %37, align 4, !tbaa !9
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds double, ptr %495, i64 %497
  %499 = load ptr, ptr %19, align 8, !tbaa !5
  %500 = load ptr, ptr %24, align 8, !tbaa !5
  %501 = load i32, ptr %34, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds %struct.doublecomplex, ptr %500, i64 %502
  %504 = load ptr, ptr %25, align 8, !tbaa !5
  call void @zgebak_(ptr noundef @.str.7, ptr noundef @.str.11, ptr noundef %494, ptr noundef %57, ptr noundef %56, ptr noundef %498, ptr noundef %499, ptr noundef %503, ptr noundef %504, ptr noundef %39)
  br label %505

505:                                              ; preds = %493, %490
  %506 = load i32, ptr %46, align 4, !tbaa !9
  %507 = icmp ne i32 %506, 0
  br i1 %507, label %508, label %526

508:                                              ; preds = %505
  %509 = load ptr, ptr %19, align 8, !tbaa !5
  %510 = load ptr, ptr %19, align 8, !tbaa !5
  %511 = load ptr, ptr %20, align 8, !tbaa !5
  %512 = load i32, ptr %32, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds %struct.doublecomplex, ptr %511, i64 %513
  %515 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %47, ptr noundef %38, ptr noundef %509, ptr noundef %510, ptr noundef %514, ptr noundef %515, ptr noundef %39)
  %516 = load ptr, ptr %21, align 8, !tbaa !5
  %517 = load i32, ptr %516, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %35, align 4, !tbaa !9
  %519 = load ptr, ptr %19, align 8, !tbaa !5
  %520 = load ptr, ptr %20, align 8, !tbaa !5
  %521 = load i32, ptr %32, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds %struct.doublecomplex, ptr %520, i64 %522
  %524 = load ptr, ptr %23, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 1
  call void @zcopy_(ptr noundef %519, ptr noundef %523, ptr noundef %35, ptr noundef %525, ptr noundef @c__1)
  br label %526

526:                                              ; preds = %508, %505
  %527 = load i32, ptr %50, align 4, !tbaa !9
  %528 = sitofp i32 %527 to double
  %529 = load ptr, ptr %26, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.doublecomplex, ptr %529, i64 1
  %531 = getelementptr inbounds %struct.doublecomplex, ptr %530, i32 0, i32 0
  store double %528, ptr %531, align 8, !tbaa !11
  %532 = load ptr, ptr %26, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %532, i64 1
  %534 = getelementptr inbounds %struct.doublecomplex, ptr %533, i32 0, i32 1
  store double 0.000000e+00, ptr %534, align 8, !tbaa !14
  store i32 1, ptr %61, align 4
  br label %535

535:                                              ; preds = %526, %280, %274, %266
  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 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, 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 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  ret void
}

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

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

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

declare void @zcopy_(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 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{!13, !13, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}


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

; Function Attrs: nounwind uwtable
define dso_local void @zgees_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %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 nocapture noundef readonly %11, ptr noundef %12, ptr noundef %13, ptr nocapture noundef %14) local_unnamed_addr #0 {
  %16 = alloca i32, align 4
  %17 = alloca double, align 8
  %18 = alloca i32, align 4
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca [1 x double], align 8
  %28 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 4, 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
  %29 = getelementptr inbounds i8, ptr %7, i64 -16
  %30 = getelementptr inbounds i8, ptr %10, i64 -16
  %31 = getelementptr inbounds i8, ptr %13, i64 -4
  store i32 0, ptr %14, align 4, !tbaa !5
  %32 = load i32, ptr %11, align 4, !tbaa !5
  %33 = icmp eq i32 %32, -1
  %34 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %35 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %.not = icmp ne i32 %34, 0
  br i1 %.not, label %38, label %36

36:                                               ; preds = %15
  %37 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not207 = icmp eq i32 %37, 0
  br i1 %.not207, label %.thread221.sink.split, label %38

38:                                               ; preds = %36, %15
  %.not208 = icmp eq i32 %35, 0
  br i1 %.not208, label %39, label %41

39:                                               ; preds = %38
  %40 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #5
  %.not209 = icmp eq i32 %40, 0
  br i1 %.not209, label %.thread221.sink.split, label %41

41:                                               ; preds = %39, %38
  %42 = load i32, ptr %3, align 4, !tbaa !5
  %43 = icmp slt i32 %42, 0
  br i1 %43, label %.thread221.sink.split, label %44

44:                                               ; preds = %41
  %45 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %42, i32 1)
  %46 = icmp slt i32 %45, %spec.select
  br i1 %46, label %.thread221.sink.split, label %47

47:                                               ; preds = %44
  %48 = load i32, ptr %9, align 4, !tbaa !5
  %49 = icmp slt i32 %48, 1
  %50 = icmp ult i32 %48, %42
  %or.cond232 = and i1 %.not, %50
  %or.cond233 = or i1 %49, %or.cond232
  br i1 %or.cond233, label %.thread221.sink.split, label %51

51:                                               ; preds = %47
  %.pr = load i32, ptr %14, align 4, !tbaa !5
  %52 = icmp eq i32 %.pr, 0
  br i1 %52, label %53, label %.thread221

53:                                               ; preds = %51
  %54 = icmp eq i32 %42, 0
  br i1 %54, label %74, label %55

55:                                               ; preds = %53
  %56 = tail call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef nonnull %3, ptr noundef nonnull @c__0, i32 noundef 6, i32 noundef 1) #5
  %57 = add i32 %56, 1
  %58 = mul i32 %57, %42
  %59 = load i32, ptr %3, align 4, !tbaa !5
  %60 = shl i32 %59, 1
  call void @zhseqr_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull @c_n1, ptr noundef nonnull %21) #5
  %61 = load double, ptr %10, align 8, !tbaa !9
  %62 = fptosi double %61 to i32
  br i1 %.not, label %65, label %63

63:                                               ; preds = %55
  %64 = call i32 @llvm.smax.i32(i32 %58, i32 %62)
  br label %74

65:                                               ; preds = %55
  store i32 %58, ptr %16, align 4, !tbaa !5
  %66 = load i32, ptr %3, align 4, !tbaa !5
  %67 = add nsw i32 %66, -1
  %68 = call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef nonnull %3, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #5
  %69 = mul nsw i32 %67, %68
  %70 = add nsw i32 %69, %66
  %71 = load i32, ptr %16, align 4
  %72 = call i32 @llvm.smax.i32(i32 %71, i32 %70)
  %73 = call i32 @llvm.smax.i32(i32 %72, i32 %62)
  br label %74

74:                                               ; preds = %53, %63, %65
  %.0196 = phi i32 [ %60, %65 ], [ %60, %63 ], [ 1, %53 ]
  %.0 = phi i32 [ %73, %65 ], [ %64, %63 ], [ 1, %53 ]
  %75 = sitofp i32 %.0 to double
  store double %75, ptr %10, align 8, !tbaa !9
  %76 = getelementptr inbounds i8, ptr %10, i64 8
  store double 0.000000e+00, ptr %76, align 8, !tbaa !12
  %77 = load i32, ptr %11, align 4, !tbaa !5
  %78 = icmp sge i32 %77, %.0196
  %or.cond = select i1 %78, i1 true, i1 %33
  br i1 %or.cond, label %.thread, label %.thread221.sink.split

.thread:                                          ; preds = %74
  %.pr218.pr = load i32, ptr %14, align 4, !tbaa !5
  %.not213 = icmp eq i32 %.pr218.pr, 0
  br i1 %.not213, label %82, label %.thread221

.thread221.sink.split:                            ; preds = %74, %47, %44, %41, %39, %36
  %.sink = phi i32 [ -1, %36 ], [ -2, %39 ], [ -4, %41 ], [ -6, %44 ], [ -10, %47 ], [ -12, %74 ]
  store i32 %.sink, ptr %14, align 4, !tbaa !5
  br label %.thread221

.thread221:                                       ; preds = %.thread221.sink.split, %51, %.thread
  %79 = phi i32 [ %.pr218.pr, %.thread ], [ %.pr, %51 ], [ %.sink, %.thread221.sink.split ]
  %80 = sub nsw i32 0, %79
  store i32 %80, ptr %16, align 4, !tbaa !5
  %81 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %16, i32 noundef 6) #5
  br label %139

82:                                               ; preds = %.thread
  br i1 %33, label %139, label %83

83:                                               ; preds = %82
  %84 = load i32, ptr %3, align 4, !tbaa !5
  %85 = icmp eq i32 %84, 0
  br i1 %85, label %86, label %87

86:                                               ; preds = %83
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %139

87:                                               ; preds = %83
  %88 = call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %89 = call double @dlamch_(ptr noundef nonnull @.str.1) #5
  store double %89, ptr %24, align 8, !tbaa !13
  %90 = fdiv double 1.000000e+00, %89
  store double %90, ptr %23, align 8, !tbaa !13
  call void @dlabad_(ptr noundef nonnull %24, ptr noundef nonnull %23) #5
  %91 = load double, ptr %24, align 8, !tbaa !13
  %92 = call double @sqrt(double noundef %91) #5
  %93 = fdiv double %92, %88
  store double %93, ptr %24, align 8, !tbaa !13
  %94 = fdiv double 1.000000e+00, %93
  store double %94, ptr %23, align 8, !tbaa !13
  %95 = call double @zlange_(ptr noundef nonnull @.str.8, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %27) #5
  store double %95, ptr %17, align 8, !tbaa !13
  %96 = fcmp ogt double %95, 0.000000e+00
  %97 = load double, ptr %24, align 8
  %98 = fcmp olt double %95, %97
  %or.cond235 = select i1 %96, i1 %98, i1 false
  br i1 %or.cond235, label %102, label %99

99:                                               ; preds = %87
  %100 = load double, ptr %23, align 8, !tbaa !13
  %101 = fcmp ogt double %95, %100
  br i1 %101, label %102, label %103

102:                                              ; preds = %87, %99
  %storemerge = phi double [ %100, %99 ], [ %97, %87 ]
  store double %storemerge, ptr %22, align 8, !tbaa !13
  call void @zlascl_(ptr noundef nonnull @.str.9, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %17, ptr noundef nonnull %22, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %18) #5
  br label %103

103:                                              ; preds = %99, %102
  %.not214228 = phi i1 [ false, %102 ], [ true, %99 ]
  call void @zgebal_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %12, ptr noundef nonnull %18) #5
  %104 = load i32, ptr %3, align 4, !tbaa !5
  %105 = load i32, ptr %11, align 4, !tbaa !5
  %106 = sub i32 %105, %104
  store i32 %106, ptr %16, align 4, !tbaa !5
  %107 = sext i32 %104 to i64
  %108 = getelementptr %struct.doublecomplex, ptr %30, i64 %107
  %109 = getelementptr i8, ptr %108, i64 16
  call void @zgehrd_(ptr noundef nonnull %3, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %10, ptr noundef nonnull %109, ptr noundef nonnull %16, ptr noundef nonnull %18) #5
  br i1 %.not, label %110, label %113

110:                                              ; preds = %103
  call void @zlacpy_(ptr noundef nonnull @.str.10, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %8, ptr noundef nonnull %9) #5
  %111 = load i32, ptr %11, align 4, !tbaa !5
  %112 = sub i32 %111, %104
  store i32 %112, ptr %16, align 4, !tbaa !5
  call void @zunghr_(ptr noundef nonnull %3, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %109, ptr noundef nonnull %16, ptr noundef nonnull %18) #5
  br label %113

113:                                              ; preds = %110, %103
  store i32 0, ptr %6, align 4, !tbaa !5
  %114 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %114, ptr %16, align 4, !tbaa !5
  call void @zhseqr_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %16, ptr noundef nonnull %21) #5
  %115 = load i32, ptr %21, align 4, !tbaa !5
  %116 = icmp sgt i32 %115, 0
  br i1 %116, label %117, label %118

117:                                              ; preds = %113
  store i32 %115, ptr %14, align 4, !tbaa !5
  br label %118

118:                                              ; preds = %117, %113
  br i1 %.not208, label %132, label %119

119:                                              ; preds = %118
  %120 = load i32, ptr %14, align 4, !tbaa !5
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %122, label %132

122:                                              ; preds = %119
  br i1 %.not214228, label %124, label %123

123:                                              ; preds = %122
  call void @zlascl_(ptr noundef nonnull @.str.9, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %22, ptr noundef nonnull %17, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef %7, ptr noundef nonnull %3, ptr noundef nonnull %18) #5
  br label %124

124:                                              ; preds = %123, %122
  %125 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %125, ptr %16, align 4, !tbaa !5
  %.not216236 = icmp slt i32 %125, 1
  br i1 %.not216236, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %124, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 1, %124 ]
  %126 = getelementptr inbounds %struct.doublecomplex, ptr %29, i64 %indvars.iv
  %127 = call i32 (ptr, ...) %2(ptr noundef nonnull %126) #5
  %128 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv
  store i32 %127, ptr %128, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %129 = load i32, ptr %16, align 4, !tbaa !5
  %130 = sext i32 %129 to i64
  %.not216.not = icmp slt i64 %indvars.iv, %130
  br i1 %.not216.not, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %124
  %131 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %131, ptr %16, align 4, !tbaa !5
  call void @ztrsen_(ptr noundef nonnull @.str.2, ptr noundef %0, ptr noundef %13, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %7, ptr noundef nonnull %6, ptr noundef nonnull %19, ptr noundef nonnull %28, ptr noundef nonnull %10, ptr noundef nonnull %16, ptr noundef nonnull %20) #5
  br label %132

132:                                              ; preds = %._crit_edge, %119, %118
  br i1 %.not, label %133, label %134

133:                                              ; preds = %132
  call void @zgebak_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.11, ptr noundef nonnull %3, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %12, ptr noundef nonnull %3, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %18) #5
  br label %134

134:                                              ; preds = %133, %132
  br i1 %.not214228, label %138, label %135

135:                                              ; preds = %134
  call void @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %22, ptr noundef nonnull %17, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %18) #5
  %136 = load i32, ptr %5, align 4, !tbaa !5
  %137 = add nsw i32 %136, 1
  store i32 %137, ptr %16, align 4, !tbaa !5
  call void @zcopy_(ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %16, ptr noundef %7, ptr noundef nonnull @c__1) #5
  br label %138

138:                                              ; preds = %135, %134
  store double %75, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %76, align 8, !tbaa !12
  br label %139

139:                                              ; preds = %82, %138, %86, %.thread221
  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 4, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  ret void
}

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

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

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

declare void @zcopy_(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 i32 @llvm.smax.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!11, !11, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}


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