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

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

103:                                              ; preds = %99
  %104 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -1, ptr %104, align 8, !tbaa !9
  br label %154

105:                                              ; preds = %99, %15
  %106 = load i64, ptr %59, align 8, !tbaa !9
  %107 = icmp ne i64 %106, 0
  br i1 %107, label %114, label %108

108:                                              ; preds = %105
  %109 = load ptr, ptr %18, align 8, !tbaa !5
  %110 = call i64 @lsame_(ptr noundef %109, ptr noundef @.str.2)
  %111 = icmp ne i64 %110, 0
  br i1 %111, label %114, label %112

112:                                              ; preds = %108
  %113 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -2, ptr %113, align 8, !tbaa !9
  br label %153

114:                                              ; preds = %108, %105
  %115 = load ptr, ptr %20, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = icmp slt i64 %116, 0
  br i1 %117, label %118, label %120

118:                                              ; preds = %114
  %119 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -4, ptr %119, align 8, !tbaa !9
  br label %152

120:                                              ; preds = %114
  %121 = load ptr, ptr %22, align 8, !tbaa !5
  %122 = load i64, ptr %121, align 8, !tbaa !9
  %123 = load ptr, ptr %20, align 8, !tbaa !5
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = icmp sge i64 1, %124
  br i1 %125, label %126, label %127

126:                                              ; preds = %120
  br label %130

127:                                              ; preds = %120
  %128 = load ptr, ptr %20, align 8, !tbaa !5
  %129 = load i64, ptr %128, align 8, !tbaa !9
  br label %130

130:                                              ; preds = %127, %126
  %131 = phi i64 [ 1, %126 ], [ %129, %127 ]
  %132 = icmp slt i64 %122, %131
  br i1 %132, label %133, label %135

133:                                              ; preds = %130
  %134 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -6, ptr %134, align 8, !tbaa !9
  br label %151

135:                                              ; preds = %130
  %136 = load ptr, ptr %26, align 8, !tbaa !5
  %137 = load i64, ptr %136, align 8, !tbaa !9
  %138 = icmp slt i64 %137, 1
  br i1 %138, label %148, label %139

139:                                              ; preds = %135
  %140 = load i64, ptr %61, align 8, !tbaa !9
  %141 = icmp ne i64 %140, 0
  br i1 %141, label %142, label %150

142:                                              ; preds = %139
  %143 = load ptr, ptr %26, align 8, !tbaa !5
  %144 = load i64, ptr %143, align 8, !tbaa !9
  %145 = load ptr, ptr %20, align 8, !tbaa !5
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = icmp slt i64 %144, %146
  br i1 %147, label %148, label %150

148:                                              ; preds = %142, %135
  %149 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -10, ptr %149, align 8, !tbaa !9
  br label %150

150:                                              ; preds = %148, %142, %139
  br label %151

151:                                              ; preds = %150, %133
  br label %152

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

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

154:                                              ; preds = %153, %103
  %155 = load ptr, ptr %31, align 8, !tbaa !5
  %156 = load i64, ptr %155, align 8, !tbaa !9
  %157 = icmp eq i64 %156, 0
  br i1 %157, label %158, label %259

158:                                              ; preds = %154
  %159 = load ptr, ptr %20, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = icmp eq i64 %160, 0
  br i1 %161, label %162, label %163

162:                                              ; preds = %158
  store i64 1, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %56, align 8, !tbaa !9
  br label %240

163:                                              ; preds = %158
  %164 = load ptr, ptr %20, align 8, !tbaa !5
  %165 = load i64, ptr %164, align 8, !tbaa !9
  %166 = load ptr, ptr %20, align 8, !tbaa !5
  %167 = load i64, ptr %166, align 8, !tbaa !9
  %168 = load ptr, ptr %20, align 8, !tbaa !5
  %169 = load ptr, ptr %20, align 8, !tbaa !5
  %170 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %168, ptr noundef @c__1, ptr noundef %169, ptr noundef @c__0)
  %171 = mul nsw i64 %167, %170
  %172 = add nsw i64 %165, %171
  store i64 %172, ptr %56, align 8, !tbaa !9
  %173 = load ptr, ptr %20, align 8, !tbaa !5
  %174 = load i64, ptr %173, align 8, !tbaa !9
  %175 = shl i64 %174, 1
  store i64 %175, ptr %55, align 8, !tbaa !9
  %176 = load ptr, ptr %17, align 8, !tbaa !5
  %177 = load ptr, ptr %20, align 8, !tbaa !5
  %178 = load ptr, ptr %20, align 8, !tbaa !5
  %179 = load ptr, ptr %21, align 8, !tbaa !5
  %180 = load i64, ptr %33, align 8, !tbaa !9
  %181 = getelementptr inbounds %struct.doublecomplex, ptr %179, i64 %180
  %182 = load ptr, ptr %22, align 8, !tbaa !5
  %183 = load ptr, ptr %24, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.doublecomplex, ptr %183, i64 1
  %185 = load ptr, ptr %25, align 8, !tbaa !5
  %186 = load i64, ptr %35, align 8, !tbaa !9
  %187 = getelementptr inbounds %struct.doublecomplex, ptr %185, i64 %186
  %188 = load ptr, ptr %26, align 8, !tbaa !5
  %189 = load ptr, ptr %27, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.doublecomplex, ptr %189, i64 1
  %191 = call i32 @zhseqr_(ptr noundef @.str.1, ptr noundef %176, ptr noundef %177, ptr noundef @c__1, ptr noundef %178, ptr noundef %181, ptr noundef %182, ptr noundef %184, ptr noundef %187, ptr noundef %188, ptr noundef %190, ptr noundef @c_n1, ptr noundef %51)
  %192 = load ptr, ptr %27, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.doublecomplex, ptr %192, i64 1
  %194 = getelementptr inbounds %struct.doublecomplex, ptr %193, i32 0, i32 0
  %195 = load double, ptr %194, align 8, !tbaa !11
  %196 = fptosi double %195 to i64
  store i64 %196, ptr %58, align 8, !tbaa !9
  %197 = load i64, ptr %61, align 8, !tbaa !9
  %198 = icmp ne i64 %197, 0
  br i1 %198, label %209, label %199

199:                                              ; preds = %163
  %200 = load i64, ptr %56, align 8, !tbaa !9
  %201 = load i64, ptr %58, align 8, !tbaa !9
  %202 = icmp sge i64 %200, %201
  br i1 %202, label %203, label %205

203:                                              ; preds = %199
  %204 = load i64, ptr %56, align 8, !tbaa !9
  br label %207

205:                                              ; preds = %199
  %206 = load i64, ptr %58, align 8, !tbaa !9
  br label %207

207:                                              ; preds = %205, %203
  %208 = phi i64 [ %204, %203 ], [ %206, %205 ]
  store i64 %208, ptr %56, align 8, !tbaa !9
  br label %239

209:                                              ; preds = %163
  %210 = load i64, ptr %56, align 8, !tbaa !9
  store i64 %210, ptr %36, align 8, !tbaa !9
  %211 = load ptr, ptr %20, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = load ptr, ptr %20, align 8, !tbaa !5
  %214 = load i64, ptr %213, align 8, !tbaa !9
  %215 = sub nsw i64 %214, 1
  %216 = load ptr, ptr %20, align 8, !tbaa !5
  %217 = load ptr, ptr %20, align 8, !tbaa !5
  %218 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.4, ptr noundef %216, ptr noundef @c__1, ptr noundef %217, ptr noundef @c_n1)
  %219 = mul nsw i64 %215, %218
  %220 = add nsw i64 %212, %219
  store i64 %220, ptr %37, align 8, !tbaa !9
  %221 = load i64, ptr %36, align 8, !tbaa !9
  %222 = load i64, ptr %37, align 8, !tbaa !9
  %223 = icmp sge i64 %221, %222
  br i1 %223, label %224, label %226

224:                                              ; preds = %209
  %225 = load i64, ptr %36, align 8, !tbaa !9
  br label %228

226:                                              ; preds = %209
  %227 = load i64, ptr %37, align 8, !tbaa !9
  br label %228

228:                                              ; preds = %226, %224
  %229 = phi i64 [ %225, %224 ], [ %227, %226 ]
  store i64 %229, ptr %56, align 8, !tbaa !9
  %230 = load i64, ptr %56, align 8, !tbaa !9
  %231 = load i64, ptr %58, align 8, !tbaa !9
  %232 = icmp sge i64 %230, %231
  br i1 %232, label %233, label %235

233:                                              ; preds = %228
  %234 = load i64, ptr %56, align 8, !tbaa !9
  br label %237

235:                                              ; preds = %228
  %236 = load i64, ptr %58, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %235, %233
  %238 = phi i64 [ %234, %233 ], [ %236, %235 ]
  store i64 %238, ptr %56, align 8, !tbaa !9
  br label %239

239:                                              ; preds = %237, %207
  br label %240

240:                                              ; preds = %239, %162
  %241 = load i64, ptr %56, align 8, !tbaa !9
  %242 = sitofp i64 %241 to double
  %243 = load ptr, ptr %27, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.doublecomplex, ptr %243, i64 1
  %245 = getelementptr inbounds %struct.doublecomplex, ptr %244, i32 0, i32 0
  store double %242, ptr %245, align 8, !tbaa !11
  %246 = load ptr, ptr %27, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %246, i64 1
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %247, i32 0, i32 1
  store double 0.000000e+00, ptr %248, align 8, !tbaa !14
  %249 = load ptr, ptr %28, align 8, !tbaa !5
  %250 = load i64, ptr %249, align 8, !tbaa !9
  %251 = load i64, ptr %55, align 8, !tbaa !9
  %252 = icmp slt i64 %250, %251
  br i1 %252, label %253, label %258

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

256:                                              ; preds = %253
  %257 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -12, ptr %257, align 8, !tbaa !9
  br label %258

258:                                              ; preds = %256, %253, %240
  br label %259

259:                                              ; preds = %258, %154
  %260 = load ptr, ptr %31, align 8, !tbaa !5
  %261 = load i64, ptr %260, align 8, !tbaa !9
  %262 = icmp ne i64 %261, 0
  br i1 %262, label %263, label %268

263:                                              ; preds = %259
  %264 = load ptr, ptr %31, align 8, !tbaa !5
  %265 = load i64, ptr %264, align 8, !tbaa !9
  %266 = sub nsw i64 0, %265
  store i64 %266, ptr %36, align 8, !tbaa !9
  %267 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %36)
  store i32 0, ptr %16, align 4
  store i32 1, ptr %62, align 4
  br label %520

268:                                              ; preds = %259
  %269 = load i64, ptr %60, align 8, !tbaa !9
  %270 = icmp ne i64 %269, 0
  br i1 %270, label %271, label %272

271:                                              ; preds = %268
  store i32 0, ptr %16, align 4
  store i32 1, ptr %62, align 4
  br label %520

272:                                              ; preds = %268
  br label %273

273:                                              ; preds = %272
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = load i64, ptr %274, align 8, !tbaa !9
  %276 = icmp eq i64 %275, 0
  br i1 %276, label %277, label %279

277:                                              ; preds = %273
  %278 = load ptr, ptr %23, align 8, !tbaa !5
  store i64 0, ptr %278, align 8, !tbaa !9
  store i32 0, ptr %16, align 4
  store i32 1, ptr %62, align 4
  br label %520

279:                                              ; preds = %273
  %280 = call double @dlamch_(ptr noundef @.str.7)
  store double %280, ptr %43, align 8, !tbaa !15
  %281 = call double @dlamch_(ptr noundef @.str.1)
  store double %281, ptr %57, align 8, !tbaa !15
  %282 = load double, ptr %57, align 8, !tbaa !15
  %283 = fdiv double 1.000000e+00, %282
  store double %283, ptr %54, align 8, !tbaa !15
  %284 = call i32 @dlabad_(ptr noundef %57, ptr noundef %54)
  %285 = load double, ptr %57, align 8, !tbaa !15
  %286 = call double @sqrt(double noundef %285) #4
  %287 = load double, ptr %43, align 8, !tbaa !15
  %288 = fdiv double %286, %287
  store double %288, ptr %57, align 8, !tbaa !15
  %289 = load double, ptr %57, align 8, !tbaa !15
  %290 = fdiv double 1.000000e+00, %289
  store double %290, ptr %54, align 8, !tbaa !15
  %291 = load ptr, ptr %20, align 8, !tbaa !5
  %292 = load ptr, ptr %20, align 8, !tbaa !5
  %293 = load ptr, ptr %21, align 8, !tbaa !5
  %294 = load i64, ptr %33, align 8, !tbaa !9
  %295 = getelementptr inbounds %struct.doublecomplex, ptr %293, i64 %294
  %296 = load ptr, ptr %22, align 8, !tbaa !5
  %297 = getelementptr inbounds [1 x double], ptr %42, i64 0, i64 0
  %298 = call double @zlange_(ptr noundef @.str.8, ptr noundef %291, ptr noundef %292, ptr noundef %295, ptr noundef %296, ptr noundef %297)
  store double %298, ptr %46, align 8, !tbaa !15
  store i64 0, ptr %52, align 8, !tbaa !9
  %299 = load double, ptr %46, align 8, !tbaa !15
  %300 = fcmp ogt double %299, 0.000000e+00
  br i1 %300, label %301, label %307

301:                                              ; preds = %279
  %302 = load double, ptr %46, align 8, !tbaa !15
  %303 = load double, ptr %57, align 8, !tbaa !15
  %304 = fcmp olt double %302, %303
  br i1 %304, label %305, label %307

305:                                              ; preds = %301
  store i64 1, ptr %52, align 8, !tbaa !9
  %306 = load double, ptr %57, align 8, !tbaa !15
  store double %306, ptr %53, align 8, !tbaa !15
  br label %314

307:                                              ; preds = %301, %279
  %308 = load double, ptr %46, align 8, !tbaa !15
  %309 = load double, ptr %54, align 8, !tbaa !15
  %310 = fcmp ogt double %308, %309
  br i1 %310, label %311, label %313

311:                                              ; preds = %307
  store i64 1, ptr %52, align 8, !tbaa !9
  %312 = load double, ptr %54, align 8, !tbaa !15
  store double %312, ptr %53, align 8, !tbaa !15
  br label %313

313:                                              ; preds = %311, %307
  br label %314

314:                                              ; preds = %313, %305
  %315 = load i64, ptr %52, align 8, !tbaa !9
  %316 = icmp ne i64 %315, 0
  br i1 %316, label %317, label %325

317:                                              ; preds = %314
  %318 = load ptr, ptr %20, align 8, !tbaa !5
  %319 = load ptr, ptr %20, align 8, !tbaa !5
  %320 = load ptr, ptr %21, align 8, !tbaa !5
  %321 = load i64, ptr %33, align 8, !tbaa !9
  %322 = getelementptr inbounds %struct.doublecomplex, ptr %320, i64 %321
  %323 = load ptr, ptr %22, align 8, !tbaa !5
  %324 = call i32 @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %46, ptr noundef %53, ptr noundef %318, ptr noundef %319, ptr noundef %322, ptr noundef %323, ptr noundef %47)
  br label %325

325:                                              ; preds = %317, %314
  store i64 1, ptr %45, align 8, !tbaa !9
  %326 = load ptr, ptr %20, align 8, !tbaa !5
  %327 = load ptr, ptr %21, align 8, !tbaa !5
  %328 = load i64, ptr %33, align 8, !tbaa !9
  %329 = getelementptr inbounds %struct.doublecomplex, ptr %327, i64 %328
  %330 = load ptr, ptr %22, align 8, !tbaa !5
  %331 = load ptr, ptr %29, align 8, !tbaa !5
  %332 = load i64, ptr %45, align 8, !tbaa !9
  %333 = getelementptr inbounds double, ptr %331, i64 %332
  %334 = call i32 @zgebal_(ptr noundef @.str.7, ptr noundef %326, ptr noundef %329, ptr noundef %330, ptr noundef %41, ptr noundef %40, ptr noundef %333, ptr noundef %47)
  store i64 1, ptr %48, align 8, !tbaa !9
  %335 = load ptr, ptr %20, align 8, !tbaa !5
  %336 = load i64, ptr %335, align 8, !tbaa !9
  %337 = load i64, ptr %48, align 8, !tbaa !9
  %338 = add nsw i64 %336, %337
  store i64 %338, ptr %49, align 8, !tbaa !9
  %339 = load ptr, ptr %28, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  %341 = load i64, ptr %49, align 8, !tbaa !9
  %342 = sub nsw i64 %340, %341
  %343 = add nsw i64 %342, 1
  store i64 %343, ptr %36, align 8, !tbaa !9
  %344 = load ptr, ptr %20, align 8, !tbaa !5
  %345 = load ptr, ptr %21, align 8, !tbaa !5
  %346 = load i64, ptr %33, align 8, !tbaa !9
  %347 = getelementptr inbounds %struct.doublecomplex, ptr %345, i64 %346
  %348 = load ptr, ptr %22, align 8, !tbaa !5
  %349 = load ptr, ptr %27, align 8, !tbaa !5
  %350 = load i64, ptr %48, align 8, !tbaa !9
  %351 = getelementptr inbounds %struct.doublecomplex, ptr %349, i64 %350
  %352 = load ptr, ptr %27, align 8, !tbaa !5
  %353 = load i64, ptr %49, align 8, !tbaa !9
  %354 = getelementptr inbounds %struct.doublecomplex, ptr %352, i64 %353
  %355 = call i32 @zgehrd_(ptr noundef %344, ptr noundef %41, ptr noundef %40, ptr noundef %347, ptr noundef %348, ptr noundef %351, ptr noundef %354, ptr noundef %36, ptr noundef %47)
  %356 = load i64, ptr %61, align 8, !tbaa !9
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %358, label %387

358:                                              ; preds = %325
  %359 = load ptr, ptr %20, align 8, !tbaa !5
  %360 = load ptr, ptr %20, align 8, !tbaa !5
  %361 = load ptr, ptr %21, align 8, !tbaa !5
  %362 = load i64, ptr %33, align 8, !tbaa !9
  %363 = getelementptr inbounds %struct.doublecomplex, ptr %361, i64 %362
  %364 = load ptr, ptr %22, align 8, !tbaa !5
  %365 = load ptr, ptr %25, align 8, !tbaa !5
  %366 = load i64, ptr %35, align 8, !tbaa !9
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %365, i64 %366
  %368 = load ptr, ptr %26, align 8, !tbaa !5
  %369 = call i32 @zlacpy_(ptr noundef @.str.10, ptr noundef %359, ptr noundef %360, ptr noundef %363, ptr noundef %364, ptr noundef %367, ptr noundef %368)
  %370 = load ptr, ptr %28, align 8, !tbaa !5
  %371 = load i64, ptr %370, align 8, !tbaa !9
  %372 = load i64, ptr %49, align 8, !tbaa !9
  %373 = sub nsw i64 %371, %372
  %374 = add nsw i64 %373, 1
  store i64 %374, ptr %36, align 8, !tbaa !9
  %375 = load ptr, ptr %20, align 8, !tbaa !5
  %376 = load ptr, ptr %25, align 8, !tbaa !5
  %377 = load i64, ptr %35, align 8, !tbaa !9
  %378 = getelementptr inbounds %struct.doublecomplex, ptr %376, i64 %377
  %379 = load ptr, ptr %26, align 8, !tbaa !5
  %380 = load ptr, ptr %27, align 8, !tbaa !5
  %381 = load i64, ptr %48, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.doublecomplex, ptr %380, i64 %381
  %383 = load ptr, ptr %27, align 8, !tbaa !5
  %384 = load i64, ptr %49, align 8, !tbaa !9
  %385 = getelementptr inbounds %struct.doublecomplex, ptr %383, i64 %384
  %386 = call i32 @zunghr_(ptr noundef %375, ptr noundef %41, ptr noundef %40, ptr noundef %378, ptr noundef %379, ptr noundef %382, ptr noundef %385, ptr noundef %36, ptr noundef %47)
  br label %387

387:                                              ; preds = %358, %325
  %388 = load ptr, ptr %23, align 8, !tbaa !5
  store i64 0, ptr %388, align 8, !tbaa !9
  %389 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %389, ptr %49, align 8, !tbaa !9
  %390 = load ptr, ptr %28, align 8, !tbaa !5
  %391 = load i64, ptr %390, align 8, !tbaa !9
  %392 = load i64, ptr %49, align 8, !tbaa !9
  %393 = sub nsw i64 %391, %392
  %394 = add nsw i64 %393, 1
  store i64 %394, ptr %36, align 8, !tbaa !9
  %395 = load ptr, ptr %17, align 8, !tbaa !5
  %396 = load ptr, ptr %20, align 8, !tbaa !5
  %397 = load ptr, ptr %21, align 8, !tbaa !5
  %398 = load i64, ptr %33, align 8, !tbaa !9
  %399 = getelementptr inbounds %struct.doublecomplex, ptr %397, i64 %398
  %400 = load ptr, ptr %22, align 8, !tbaa !5
  %401 = load ptr, ptr %24, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.doublecomplex, ptr %401, i64 1
  %403 = load ptr, ptr %25, align 8, !tbaa !5
  %404 = load i64, ptr %35, align 8, !tbaa !9
  %405 = getelementptr inbounds %struct.doublecomplex, ptr %403, i64 %404
  %406 = load ptr, ptr %26, align 8, !tbaa !5
  %407 = load ptr, ptr %27, align 8, !tbaa !5
  %408 = load i64, ptr %49, align 8, !tbaa !9
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %407, i64 %408
  %410 = call i32 @zhseqr_(ptr noundef @.str.1, ptr noundef %395, ptr noundef %396, ptr noundef %41, ptr noundef %40, ptr noundef %399, ptr noundef %400, ptr noundef %402, ptr noundef %405, ptr noundef %406, ptr noundef %409, ptr noundef %36, ptr noundef %51)
  %411 = load i64, ptr %51, align 8, !tbaa !9
  %412 = icmp sgt i64 %411, 0
  br i1 %412, label %413, label %416

413:                                              ; preds = %387
  %414 = load i64, ptr %51, align 8, !tbaa !9
  %415 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 %414, ptr %415, align 8, !tbaa !9
  br label %416

416:                                              ; preds = %413, %387
  %417 = load i64, ptr %59, align 8, !tbaa !9
  %418 = icmp ne i64 %417, 0
  br i1 %418, label %419, label %476

419:                                              ; preds = %416
  %420 = load ptr, ptr %31, align 8, !tbaa !5
  %421 = load i64, ptr %420, align 8, !tbaa !9
  %422 = icmp eq i64 %421, 0
  br i1 %422, label %423, label %476

423:                                              ; preds = %419
  %424 = load i64, ptr %52, align 8, !tbaa !9
  %425 = icmp ne i64 %424, 0
  br i1 %425, label %426, label %432

426:                                              ; preds = %423
  %427 = load ptr, ptr %20, align 8, !tbaa !5
  %428 = load ptr, ptr %24, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %428, i64 1
  %430 = load ptr, ptr %20, align 8, !tbaa !5
  %431 = call i32 @zlascl_(ptr noundef @.str.9, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %53, ptr noundef %46, ptr noundef %427, ptr noundef @c__1, ptr noundef %429, ptr noundef %430, ptr noundef %47)
  br label %432

432:                                              ; preds = %426, %423
  %433 = load ptr, ptr %20, align 8, !tbaa !5
  %434 = load i64, ptr %433, align 8, !tbaa !9
  store i64 %434, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %435

435:                                              ; preds = %448, %432
  %436 = load i64, ptr %38, align 8, !tbaa !9
  %437 = load i64, ptr %36, align 8, !tbaa !9
  %438 = icmp sle i64 %436, %437
  br i1 %438, label %439, label %451

439:                                              ; preds = %435
  %440 = load ptr, ptr %19, align 8, !tbaa !5
  %441 = load ptr, ptr %24, align 8, !tbaa !5
  %442 = load i64, ptr %38, align 8, !tbaa !9
  %443 = getelementptr inbounds %struct.doublecomplex, ptr %441, i64 %442
  %444 = call i64 (ptr, ...) %440(ptr noundef %443)
  %445 = load ptr, ptr %30, align 8, !tbaa !5
  %446 = load i64, ptr %38, align 8, !tbaa !9
  %447 = getelementptr inbounds i64, ptr %445, i64 %446
  store i64 %444, ptr %447, align 8, !tbaa !9
  br label %448

448:                                              ; preds = %439
  %449 = load i64, ptr %38, align 8, !tbaa !9
  %450 = add nsw i64 %449, 1
  store i64 %450, ptr %38, align 8, !tbaa !9
  br label %435, !llvm.loop !16

451:                                              ; preds = %435
  %452 = load ptr, ptr %28, align 8, !tbaa !5
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = load i64, ptr %49, align 8, !tbaa !9
  %455 = sub nsw i64 %453, %454
  %456 = add nsw i64 %455, 1
  store i64 %456, ptr %36, align 8, !tbaa !9
  %457 = load ptr, ptr %17, align 8, !tbaa !5
  %458 = load ptr, ptr %30, align 8, !tbaa !5
  %459 = getelementptr inbounds i64, ptr %458, i64 1
  %460 = load ptr, ptr %20, align 8, !tbaa !5
  %461 = load ptr, ptr %21, align 8, !tbaa !5
  %462 = load i64, ptr %33, align 8, !tbaa !9
  %463 = getelementptr inbounds %struct.doublecomplex, ptr %461, i64 %462
  %464 = load ptr, ptr %22, align 8, !tbaa !5
  %465 = load ptr, ptr %25, align 8, !tbaa !5
  %466 = load i64, ptr %35, align 8, !tbaa !9
  %467 = getelementptr inbounds %struct.doublecomplex, ptr %465, i64 %466
  %468 = load ptr, ptr %26, align 8, !tbaa !5
  %469 = load ptr, ptr %24, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.doublecomplex, ptr %469, i64 1
  %471 = load ptr, ptr %23, align 8, !tbaa !5
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = load i64, ptr %49, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %472, i64 %473
  %475 = call i32 @ztrsen_(ptr noundef @.str.2, ptr noundef %457, ptr noundef %459, ptr noundef %460, ptr noundef %463, ptr noundef %464, ptr noundef %467, ptr noundef %468, ptr noundef %470, ptr noundef %471, ptr noundef %39, ptr noundef %44, ptr noundef %474, ptr noundef %36, ptr noundef %50)
  br label %476

476:                                              ; preds = %451, %419, %416
  %477 = load i64, ptr %61, align 8, !tbaa !9
  %478 = icmp ne i64 %477, 0
  br i1 %478, label %479, label %490

479:                                              ; preds = %476
  %480 = load ptr, ptr %20, align 8, !tbaa !5
  %481 = load ptr, ptr %29, align 8, !tbaa !5
  %482 = load i64, ptr %45, align 8, !tbaa !9
  %483 = getelementptr inbounds double, ptr %481, i64 %482
  %484 = load ptr, ptr %20, align 8, !tbaa !5
  %485 = load ptr, ptr %25, align 8, !tbaa !5
  %486 = load i64, ptr %35, align 8, !tbaa !9
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %485, i64 %486
  %488 = load ptr, ptr %26, align 8, !tbaa !5
  %489 = call i32 @zgebak_(ptr noundef @.str.7, ptr noundef @.str.11, ptr noundef %480, ptr noundef %41, ptr noundef %40, ptr noundef %483, ptr noundef %484, ptr noundef %487, ptr noundef %488, ptr noundef %47)
  br label %490

490:                                              ; preds = %479, %476
  %491 = load i64, ptr %52, align 8, !tbaa !9
  %492 = icmp ne i64 %491, 0
  br i1 %492, label %493, label %511

493:                                              ; preds = %490
  %494 = load ptr, ptr %20, align 8, !tbaa !5
  %495 = load ptr, ptr %20, align 8, !tbaa !5
  %496 = load ptr, ptr %21, align 8, !tbaa !5
  %497 = load i64, ptr %33, align 8, !tbaa !9
  %498 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 %497
  %499 = load ptr, ptr %22, align 8, !tbaa !5
  %500 = call i32 @zlascl_(ptr noundef @.str.12, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %53, ptr noundef %46, ptr noundef %494, ptr noundef %495, ptr noundef %498, ptr noundef %499, ptr noundef %47)
  %501 = load ptr, ptr %22, align 8, !tbaa !5
  %502 = load i64, ptr %501, align 8, !tbaa !9
  %503 = add nsw i64 %502, 1
  store i64 %503, ptr %36, align 8, !tbaa !9
  %504 = load ptr, ptr %20, align 8, !tbaa !5
  %505 = load ptr, ptr %21, align 8, !tbaa !5
  %506 = load i64, ptr %33, align 8, !tbaa !9
  %507 = getelementptr inbounds %struct.doublecomplex, ptr %505, i64 %506
  %508 = load ptr, ptr %24, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %508, i64 1
  %510 = call i32 @f2c_zcopy(ptr noundef %504, ptr noundef %507, ptr noundef %36, ptr noundef %509, ptr noundef @c__1)
  br label %511

511:                                              ; preds = %493, %490
  %512 = load i64, ptr %56, align 8, !tbaa !9
  %513 = sitofp i64 %512 to double
  %514 = load ptr, ptr %27, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.doublecomplex, ptr %514, i64 1
  %516 = getelementptr inbounds %struct.doublecomplex, ptr %515, i32 0, i32 0
  store double %513, ptr %516, align 8, !tbaa !11
  %517 = load ptr, ptr %27, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %517, i64 1
  %519 = getelementptr inbounds %struct.doublecomplex, ptr %518, i32 0, i32 1
  store double 0.000000e+00, ptr %519, align 8, !tbaa !14
  store i32 0, ptr %16, align 4
  store i32 1, ptr %62, align 4
  br label %520

520:                                              ; preds = %511, %277, %271, %263
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  %521 = load i32, ptr %16, align 4
  ret i32 %521
}

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

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

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

declare i32 @f2c_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 = !{!"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"}


; 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
@c_n1 = external hidden global i64, align 8
@.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 noundef i32 @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 i64, align 8
  %17 = alloca double, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca [1 x double], align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #5
  %29 = getelementptr inbounds i8, ptr %7, i64 -16
  %30 = getelementptr inbounds i8, ptr %13, i64 -8
  store i64 0, ptr %14, align 8, !tbaa !5
  %31 = load i64, ptr %11, align 8, !tbaa !5
  %32 = icmp eq i64 %31, -1
  %33 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %34 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %.not = icmp ne i64 %33, 0
  br i1 %.not, label %37, label %35

35:                                               ; preds = %15
  %36 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not208 = icmp eq i64 %36, 0
  br i1 %.not208, label %.thread222.sink.split, label %37

37:                                               ; preds = %35, %15
  %.not209 = icmp eq i64 %34, 0
  br i1 %.not209, label %38, label %40

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

40:                                               ; preds = %38, %37
  %41 = load i64, ptr %3, align 8, !tbaa !5
  %42 = icmp slt i64 %41, 0
  br i1 %42, label %.thread222.sink.split, label %43

43:                                               ; preds = %40
  %44 = load i64, ptr %5, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %41, i64 1)
  %45 = icmp slt i64 %44, %spec.select
  br i1 %45, label %.thread222.sink.split, label %46

46:                                               ; preds = %43
  %47 = load i64, ptr %9, align 8, !tbaa !5
  %48 = icmp slt i64 %47, 1
  %49 = icmp ult i64 %47, %41
  %or.cond233 = and i1 %.not, %49
  %or.cond234 = or i1 %48, %or.cond233
  br i1 %or.cond234, label %.thread222.sink.split, label %50

50:                                               ; preds = %46
  %.pr = load i64, ptr %14, align 8, !tbaa !5
  %51 = icmp eq i64 %.pr, 0
  br i1 %51, label %52, label %.thread222

52:                                               ; preds = %50
  %53 = icmp eq i64 %41, 0
  br i1 %53, label %74, label %54

54:                                               ; preds = %52
  %55 = tail call i64 @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) #5
  %56 = add i64 %55, 1
  %57 = mul i64 %56, %41
  %58 = load i64, ptr %3, align 8, !tbaa !5
  %59 = shl i64 %58, 1
  %60 = call i32 @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 %25) #5
  %61 = load double, ptr %10, align 8, !tbaa !9
  %62 = fptosi double %61 to i64
  br i1 %.not, label %65, label %63

63:                                               ; preds = %54
  %64 = call i64 @llvm.smax.i64(i64 %57, i64 %62)
  br label %74

65:                                               ; preds = %54
  store i64 %57, ptr %16, align 8, !tbaa !5
  %66 = load i64, ptr %3, align 8, !tbaa !5
  %67 = add nsw i64 %66, -1
  %68 = call i64 @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) #5
  %69 = mul nsw i64 %67, %68
  %70 = add nsw i64 %69, %66
  %71 = load i64, ptr %16, align 8
  %72 = call i64 @llvm.smax.i64(i64 %71, i64 %70)
  %73 = call i64 @llvm.smax.i64(i64 %72, i64 %62)
  br label %74

74:                                               ; preds = %52, %63, %65
  %.0198 = phi i64 [ %59, %65 ], [ %59, %63 ], [ 1, %52 ]
  %.0197 = phi i64 [ %73, %65 ], [ %64, %63 ], [ 1, %52 ]
  %75 = sitofp i64 %.0197 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 i64, ptr %11, align 8, !tbaa !5
  %78 = icmp sge i64 %77, %.0198
  %or.cond = select i1 %78, i1 true, i1 %32
  br i1 %or.cond, label %.thread, label %.thread222.sink.split

.thread:                                          ; preds = %74
  %.pr219.pr = load i64, ptr %14, align 8, !tbaa !5
  %.not214 = icmp eq i64 %.pr219.pr, 0
  br i1 %.not214, label %82, label %.thread222

.thread222.sink.split:                            ; preds = %74, %46, %43, %40, %38, %35
  %.sink = phi i64 [ -1, %35 ], [ -2, %38 ], [ -4, %40 ], [ -6, %43 ], [ -10, %46 ], [ -12, %74 ]
  store i64 %.sink, ptr %14, align 8, !tbaa !5
  br label %.thread222

.thread222:                                       ; preds = %.thread222.sink.split, %50, %.thread
  %79 = phi i64 [ %.pr219.pr, %.thread ], [ %.pr, %50 ], [ %.sink, %.thread222.sink.split ]
  %80 = sub nsw i64 0, %79
  store i64 %80, ptr %16, align 8, !tbaa !5
  %81 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %16) #5
  br label %149

82:                                               ; preds = %.thread
  br i1 %32, label %149, label %83

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

86:                                               ; preds = %83
  store i64 0, ptr %6, align 8, !tbaa !5
  br label %149

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 %28, align 8, !tbaa !13
  %90 = fdiv double 1.000000e+00, %89
  store double %90, ptr %27, align 8, !tbaa !13
  %91 = call i32 @dlabad_(ptr noundef nonnull %28, ptr noundef nonnull %27) #5
  %92 = load double, ptr %28, align 8, !tbaa !13
  %93 = call double @sqrt(double noundef %92) #5
  %94 = fdiv double %93, %88
  store double %94, ptr %28, align 8, !tbaa !13
  %95 = fdiv double 1.000000e+00, %94
  store double %95, ptr %27, align 8, !tbaa !13
  %96 = 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 %20) #5
  store double %96, ptr %22, align 8, !tbaa !13
  %97 = fcmp ogt double %96, 0.000000e+00
  %98 = load double, ptr %28, align 8
  %99 = fcmp olt double %96, %98
  %or.cond236 = select i1 %97, i1 %99, i1 false
  br i1 %or.cond236, label %103, label %100

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

103:                                              ; preds = %87, %100
  %storemerge = phi double [ %101, %100 ], [ %98, %87 ]
  store double %storemerge, ptr %26, align 8, !tbaa !13
  %104 = call i32 @zlascl_(ptr noundef nonnull @.str.9, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %22, ptr noundef nonnull %26, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %23) #5
  br label %105

105:                                              ; preds = %100, %103
  %.not215229 = phi i1 [ false, %103 ], [ true, %100 ]
  %106 = call i32 @zgebal_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %19, ptr noundef nonnull %18, ptr noundef %12, ptr noundef nonnull %23) #5
  %107 = load i64, ptr %3, align 8, !tbaa !5
  %108 = load i64, ptr %11, align 8, !tbaa !5
  %109 = sub i64 %108, %107
  store i64 %109, ptr %16, align 8, !tbaa !5
  %110 = getelementptr %struct.doublecomplex, ptr %10, i64 %107
  %111 = call i32 @zgehrd_(ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %18, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %10, ptr noundef %110, ptr noundef nonnull %16, ptr noundef nonnull %23) #5
  br i1 %.not, label %112, label %117

112:                                              ; preds = %105
  %113 = call i32 @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
  %114 = load i64, ptr %11, align 8, !tbaa !5
  %115 = sub i64 %114, %107
  store i64 %115, ptr %16, align 8, !tbaa !5
  %116 = call i32 @zunghr_(ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %18, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %110, ptr noundef nonnull %16, ptr noundef nonnull %23) #5
  br label %117

117:                                              ; preds = %112, %105
  store i64 0, ptr %6, align 8, !tbaa !5
  %118 = load i64, ptr %11, align 8, !tbaa !5
  store i64 %118, ptr %16, align 8, !tbaa !5
  %119 = call i32 @zhseqr_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %18, 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 %25) #5
  %120 = load i64, ptr %25, align 8, !tbaa !5
  %121 = icmp sgt i64 %120, 0
  br i1 %121, label %122, label %123

122:                                              ; preds = %117
  store i64 %120, ptr %14, align 8, !tbaa !5
  br label %123

123:                                              ; preds = %122, %117
  br i1 %.not209, label %139, label %124

124:                                              ; preds = %123
  %125 = load i64, ptr %14, align 8, !tbaa !5
  %126 = icmp eq i64 %125, 0
  br i1 %126, label %127, label %139

127:                                              ; preds = %124
  br i1 %.not215229, label %130, label %128

128:                                              ; preds = %127
  %129 = call i32 @zlascl_(ptr noundef nonnull @.str.9, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %26, ptr noundef nonnull %22, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef %7, ptr noundef nonnull %3, ptr noundef nonnull %23) #5
  br label %130

130:                                              ; preds = %128, %127
  %131 = load i64, ptr %3, align 8, !tbaa !5
  store i64 %131, ptr %16, align 8, !tbaa !5
  %.not217237 = icmp slt i64 %131, 1
  br i1 %.not217237, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %130, %.lr.ph
  %.0200238 = phi i64 [ %135, %.lr.ph ], [ 1, %130 ]
  %132 = getelementptr inbounds %struct.doublecomplex, ptr %29, i64 %.0200238
  %133 = call i64 (ptr, ...) %2(ptr noundef nonnull %132) #5
  %134 = getelementptr inbounds i64, ptr %30, i64 %.0200238
  store i64 %133, ptr %134, align 8, !tbaa !5
  %135 = add nuw nsw i64 %.0200238, 1
  %136 = load i64, ptr %16, align 8, !tbaa !5
  %.not217.not = icmp slt i64 %.0200238, %136
  br i1 %.not217.not, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %130
  %137 = load i64, ptr %11, align 8, !tbaa !5
  store i64 %137, ptr %16, align 8, !tbaa !5
  %138 = call i32 @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 %17, ptr noundef nonnull %21, ptr noundef nonnull %10, ptr noundef nonnull %16, ptr noundef nonnull %24) #5
  br label %139

139:                                              ; preds = %._crit_edge, %124, %123
  br i1 %.not, label %140, label %142

140:                                              ; preds = %139
  %141 = call i32 @zgebak_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.11, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %18, ptr noundef %12, ptr noundef nonnull %3, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %23) #5
  br label %142

142:                                              ; preds = %140, %139
  br i1 %.not215229, label %148, label %143

143:                                              ; preds = %142
  %144 = call i32 @zlascl_(ptr noundef nonnull @.str.12, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %26, ptr noundef nonnull %22, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %23) #5
  %145 = load i64, ptr %5, align 8, !tbaa !5
  %146 = add nsw i64 %145, 1
  store i64 %146, ptr %16, align 8, !tbaa !5
  %147 = call i32 @f2c_zcopy(ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %16, ptr noundef %7, ptr noundef nonnull @c__1) #5
  br label %148

148:                                              ; preds = %143, %142
  store double %75, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %76, align 8, !tbaa !12
  br label %149

149:                                              ; preds = %82, %148, %86, %.thread222
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #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 @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) 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 @zgebal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @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 i32 @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 i32 @f2c_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 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"}


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