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

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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i32, align 4
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1
@c_n1 = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4
@c__4 = external hidden global i32, align 4
@.str.7 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [10 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
@c_b26 = external hidden global double, align 8
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c_b1 = external hidden global %struct.doublecomplex, align 8

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

161:                                              ; preds = %24
  %162 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -1, ptr %162, align 4, !tbaa !9
  br label %295

163:                                              ; preds = %24
  %164 = load i32, ptr %81, align 4, !tbaa !9
  %165 = icmp ne i32 %164, 0
  br i1 %165, label %174, label %166

166:                                              ; preds = %163
  %167 = load i32, ptr %85, align 4, !tbaa !9
  %168 = icmp ne i32 %167, 0
  br i1 %168, label %174, label %169

169:                                              ; preds = %166
  %170 = load i32, ptr %82, align 4, !tbaa !9
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %174, label %172

172:                                              ; preds = %169
  %173 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -2, ptr %173, align 4, !tbaa !9
  br label %294

174:                                              ; preds = %169, %166, %163
  %175 = load i32, ptr %76, align 4, !tbaa !9
  %176 = icmp ne i32 %175, 0
  br i1 %176, label %183, label %177

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

181:                                              ; preds = %177
  %182 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -3, ptr %182, align 4, !tbaa !9
  br label %293

183:                                              ; preds = %177, %174
  %184 = load ptr, ptr %28, align 8, !tbaa !5
  %185 = load i32, ptr %184, align 4, !tbaa !9
  %186 = icmp slt i32 %185, 0
  br i1 %186, label %187, label %189

187:                                              ; preds = %183
  %188 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -4, ptr %188, align 4, !tbaa !9
  br label %292

189:                                              ; preds = %183
  %190 = load ptr, ptr %29, align 8, !tbaa !5
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = icmp slt i32 %191, 0
  br i1 %192, label %193, label %195

193:                                              ; preds = %189
  %194 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -5, ptr %194, align 4, !tbaa !9
  br label %291

195:                                              ; preds = %189
  %196 = load ptr, ptr %31, align 8, !tbaa !5
  %197 = load i32, ptr %196, align 4, !tbaa !9
  %198 = load ptr, ptr %29, align 8, !tbaa !5
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = add nsw i32 %199, 1
  %201 = icmp slt i32 %197, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %195
  %203 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -7, ptr %203, align 4, !tbaa !9
  br label %290

204:                                              ; preds = %195
  %205 = load i32, ptr %78, align 4, !tbaa !9
  %206 = icmp ne i32 %205, 0
  br i1 %206, label %207, label %222

207:                                              ; preds = %204
  %208 = load ptr, ptr %33, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = load ptr, ptr %28, align 8, !tbaa !5
  %211 = load i32, ptr %210, align 4, !tbaa !9
  %212 = icmp sge i32 1, %211
  br i1 %212, label %213, label %214

213:                                              ; preds = %207
  br label %217

214:                                              ; preds = %207
  %215 = load ptr, ptr %28, align 8, !tbaa !5
  %216 = load i32, ptr %215, align 4, !tbaa !9
  br label %217

217:                                              ; preds = %214, %213
  %218 = phi i32 [ 1, %213 ], [ %216, %214 ]
  %219 = icmp slt i32 %209, %218
  br i1 %219, label %220, label %222

220:                                              ; preds = %217
  %221 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -9, ptr %221, align 4, !tbaa !9
  br label %289

222:                                              ; preds = %217, %204
  %223 = load i32, ptr %85, align 4, !tbaa !9
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %238

225:                                              ; preds = %222
  %226 = load ptr, ptr %28, align 8, !tbaa !5
  %227 = load i32, ptr %226, align 4, !tbaa !9
  %228 = icmp sgt i32 %227, 0
  br i1 %228, label %229, label %237

229:                                              ; preds = %225
  %230 = load ptr, ptr %35, align 8, !tbaa !5
  %231 = load double, ptr %230, align 8, !tbaa !11
  %232 = load ptr, ptr %34, align 8, !tbaa !5
  %233 = load double, ptr %232, align 8, !tbaa !11
  %234 = fcmp ole double %231, %233
  br i1 %234, label %235, label %237

235:                                              ; preds = %229
  %236 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -11, ptr %236, align 4, !tbaa !9
  br label %237

237:                                              ; preds = %235, %229, %225
  br label %288

238:                                              ; preds = %222
  %239 = load i32, ptr %82, align 4, !tbaa !9
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %241, label %287

241:                                              ; preds = %238
  %242 = load ptr, ptr %36, align 8, !tbaa !5
  %243 = load i32, ptr %242, align 4, !tbaa !9
  %244 = icmp slt i32 %243, 1
  br i1 %244, label %258, label %245

245:                                              ; preds = %241
  %246 = load ptr, ptr %36, align 8, !tbaa !5
  %247 = load i32, ptr %246, align 4, !tbaa !9
  %248 = load ptr, ptr %28, align 8, !tbaa !5
  %249 = load i32, ptr %248, align 4, !tbaa !9
  %250 = icmp sge i32 1, %249
  br i1 %250, label %251, label %252

251:                                              ; preds = %245
  br label %255

252:                                              ; preds = %245
  %253 = load ptr, ptr %28, align 8, !tbaa !5
  %254 = load i32, ptr %253, align 4, !tbaa !9
  br label %255

255:                                              ; preds = %252, %251
  %256 = phi i32 [ 1, %251 ], [ %254, %252 ]
  %257 = icmp sgt i32 %247, %256
  br i1 %257, label %258, label %260

258:                                              ; preds = %255, %241
  %259 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -12, ptr %259, align 4, !tbaa !9
  br label %286

260:                                              ; preds = %255
  %261 = load ptr, ptr %37, align 8, !tbaa !5
  %262 = load i32, ptr %261, align 4, !tbaa !9
  %263 = load ptr, ptr %28, align 8, !tbaa !5
  %264 = load i32, ptr %263, align 4, !tbaa !9
  %265 = load ptr, ptr %36, align 8, !tbaa !5
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = icmp sle i32 %264, %266
  br i1 %267, label %268, label %271

268:                                              ; preds = %260
  %269 = load ptr, ptr %28, align 8, !tbaa !5
  %270 = load i32, ptr %269, align 4, !tbaa !9
  br label %274

271:                                              ; preds = %260
  %272 = load ptr, ptr %36, align 8, !tbaa !5
  %273 = load i32, ptr %272, align 4, !tbaa !9
  br label %274

274:                                              ; preds = %271, %268
  %275 = phi i32 [ %270, %268 ], [ %273, %271 ]
  %276 = icmp slt i32 %262, %275
  br i1 %276, label %283, label %277

277:                                              ; preds = %274
  %278 = load ptr, ptr %37, align 8, !tbaa !5
  %279 = load i32, ptr %278, align 4, !tbaa !9
  %280 = load ptr, ptr %28, align 8, !tbaa !5
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = icmp sgt i32 %279, %281
  br i1 %282, label %283, label %285

283:                                              ; preds = %277, %274
  %284 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -13, ptr %284, align 4, !tbaa !9
  br label %285

285:                                              ; preds = %283, %277
  br label %286

286:                                              ; preds = %285, %258
  br label %287

287:                                              ; preds = %286, %238
  br label %288

288:                                              ; preds = %287, %237
  br label %289

289:                                              ; preds = %288, %220
  br label %290

290:                                              ; preds = %289, %202
  br label %291

291:                                              ; preds = %290, %193
  br label %292

292:                                              ; preds = %291, %187
  br label %293

293:                                              ; preds = %292, %181
  br label %294

294:                                              ; preds = %293, %172
  br label %295

295:                                              ; preds = %294, %161
  %296 = load ptr, ptr %48, align 8, !tbaa !5
  %297 = load i32, ptr %296, align 4, !tbaa !9
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %315

299:                                              ; preds = %295
  %300 = load ptr, ptr %42, align 8, !tbaa !5
  %301 = load i32, ptr %300, align 4, !tbaa !9
  %302 = icmp slt i32 %301, 1
  br i1 %302, label %312, label %303

303:                                              ; preds = %299
  %304 = load i32, ptr %78, align 4, !tbaa !9
  %305 = icmp ne i32 %304, 0
  br i1 %305, label %306, label %314

306:                                              ; preds = %303
  %307 = load ptr, ptr %42, align 8, !tbaa !5
  %308 = load i32, ptr %307, align 4, !tbaa !9
  %309 = load ptr, ptr %28, align 8, !tbaa !5
  %310 = load i32, ptr %309, align 4, !tbaa !9
  %311 = icmp slt i32 %308, %310
  br i1 %311, label %312, label %314

312:                                              ; preds = %306, %299
  %313 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -18, ptr %313, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %312, %306, %303
  br label %315

315:                                              ; preds = %314, %295
  %316 = load ptr, ptr %48, align 8, !tbaa !5
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = icmp eq i32 %317, 0
  br i1 %318, label %319, label %367

319:                                              ; preds = %315
  %320 = load ptr, ptr %28, align 8, !tbaa !5
  %321 = load i32, ptr %320, align 4, !tbaa !9
  %322 = icmp sle i32 %321, 1
  br i1 %322, label %323, label %332

323:                                              ; preds = %319
  store i32 1, ptr %75, align 4, !tbaa !9
  %324 = load i32, ptr %75, align 4, !tbaa !9
  %325 = sitofp i32 %324 to double
  %326 = load ptr, ptr %43, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.doublecomplex, ptr %326, i64 1
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %327, i32 0, i32 0
  store double %325, ptr %328, align 8, !tbaa !13
  %329 = load ptr, ptr %43, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.doublecomplex, ptr %329, i64 1
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %330, i32 0, i32 1
  store double 0.000000e+00, ptr %331, align 8, !tbaa !15
  br label %356

332:                                              ; preds = %319
  %333 = load ptr, ptr %25, align 8, !tbaa !5
  %334 = load ptr, ptr %28, align 8, !tbaa !5
  %335 = load ptr, ptr %29, align 8, !tbaa !5
  %336 = call i32 @ilaenv2stage_(ptr noundef @c__2, ptr noundef @.str.6, ptr noundef %333, ptr noundef %334, ptr noundef %335, ptr noundef @c_n1, ptr noundef @c_n1)
  store i32 %336, ptr %79, align 4, !tbaa !9
  %337 = load ptr, ptr %25, align 8, !tbaa !5
  %338 = load ptr, ptr %28, align 8, !tbaa !5
  %339 = load ptr, ptr %29, align 8, !tbaa !5
  %340 = call i32 @ilaenv2stage_(ptr noundef @c__3, ptr noundef @.str.6, ptr noundef %337, ptr noundef %338, ptr noundef %339, ptr noundef %79, ptr noundef @c_n1)
  store i32 %340, ptr %74, align 4, !tbaa !9
  %341 = load ptr, ptr %25, align 8, !tbaa !5
  %342 = load ptr, ptr %28, align 8, !tbaa !5
  %343 = load ptr, ptr %29, align 8, !tbaa !5
  %344 = call i32 @ilaenv2stage_(ptr noundef @c__4, ptr noundef @.str.6, ptr noundef %341, ptr noundef %342, ptr noundef %343, ptr noundef %79, ptr noundef @c_n1)
  store i32 %344, ptr %77, align 4, !tbaa !9
  %345 = load i32, ptr %74, align 4, !tbaa !9
  %346 = load i32, ptr %77, align 4, !tbaa !9
  %347 = add nsw i32 %345, %346
  store i32 %347, ptr %75, align 4, !tbaa !9
  %348 = load i32, ptr %75, align 4, !tbaa !9
  %349 = sitofp i32 %348 to double
  %350 = load ptr, ptr %43, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.doublecomplex, ptr %350, i64 1
  %352 = getelementptr inbounds %struct.doublecomplex, ptr %351, i32 0, i32 0
  store double %349, ptr %352, align 8, !tbaa !13
  %353 = load ptr, ptr %43, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.doublecomplex, ptr %353, i64 1
  %355 = getelementptr inbounds %struct.doublecomplex, ptr %354, i32 0, i32 1
  store double 0.000000e+00, ptr %355, align 8, !tbaa !15
  br label %356

356:                                              ; preds = %332, %323
  %357 = load ptr, ptr %44, align 8, !tbaa !5
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %359 = load i32, ptr %75, align 4, !tbaa !9
  %360 = icmp slt i32 %358, %359
  br i1 %360, label %361, label %366

361:                                              ; preds = %356
  %362 = load i32, ptr %96, align 4, !tbaa !9
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %366, label %364

364:                                              ; preds = %361
  %365 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 -20, ptr %365, align 4, !tbaa !9
  br label %366

366:                                              ; preds = %364, %361, %356
  br label %367

367:                                              ; preds = %366, %315
  %368 = load ptr, ptr %48, align 8, !tbaa !5
  %369 = load i32, ptr %368, align 4, !tbaa !9
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %376

371:                                              ; preds = %367
  %372 = load ptr, ptr %48, align 8, !tbaa !5
  %373 = load i32, ptr %372, align 4, !tbaa !9
  %374 = sub nsw i32 0, %373
  store i32 %374, ptr %55, align 4, !tbaa !9
  %375 = call i32 @xerbla_(ptr noundef @.str.7, ptr noundef %55, i32 noundef 13)
  store i32 1, ptr %102, align 4
  br label %1056

376:                                              ; preds = %367
  %377 = load i32, ptr %96, align 4, !tbaa !9
  %378 = icmp ne i32 %377, 0
  br i1 %378, label %379, label %380

379:                                              ; preds = %376
  store i32 1, ptr %102, align 4
  br label %1056

380:                                              ; preds = %376
  br label %381

381:                                              ; preds = %380
  %382 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 0, ptr %382, align 4, !tbaa !9
  %383 = load ptr, ptr %28, align 8, !tbaa !5
  %384 = load i32, ptr %383, align 4, !tbaa !9
  %385 = icmp eq i32 %384, 0
  br i1 %385, label %386, label %387

386:                                              ; preds = %381
  store i32 1, ptr %102, align 4
  br label %1056

387:                                              ; preds = %381
  %388 = load ptr, ptr %28, align 8, !tbaa !5
  %389 = load i32, ptr %388, align 4, !tbaa !9
  %390 = icmp eq i32 %389, 1
  br i1 %390, label %391, label %476

391:                                              ; preds = %387
  %392 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 1, ptr %392, align 4, !tbaa !9
  %393 = load i32, ptr %76, align 4, !tbaa !9
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %395, label %412

395:                                              ; preds = %391
  %396 = load i32, ptr %49, align 4, !tbaa !9
  %397 = add nsw i32 %396, 1
  store i32 %397, ptr %55, align 4, !tbaa !9
  %398 = load ptr, ptr %30, align 8, !tbaa !5
  %399 = load i32, ptr %55, align 4, !tbaa !9
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds %struct.doublecomplex, ptr %398, i64 %400
  %402 = getelementptr inbounds %struct.doublecomplex, ptr %401, i32 0, i32 0
  %403 = load double, ptr %402, align 8, !tbaa !13
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %66, i32 0, i32 0
  store double %403, ptr %404, align 8, !tbaa !13
  %405 = load ptr, ptr %30, align 8, !tbaa !5
  %406 = load i32, ptr %55, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %405, i64 %407
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %408, i32 0, i32 1
  %410 = load double, ptr %409, align 8, !tbaa !15
  %411 = getelementptr inbounds %struct.doublecomplex, ptr %66, i32 0, i32 1
  store double %410, ptr %411, align 8, !tbaa !15
  br label %432

412:                                              ; preds = %391
  %413 = load ptr, ptr %29, align 8, !tbaa !5
  %414 = load i32, ptr %413, align 4, !tbaa !9
  %415 = add nsw i32 %414, 1
  %416 = load i32, ptr %49, align 4, !tbaa !9
  %417 = add nsw i32 %415, %416
  store i32 %417, ptr %55, align 4, !tbaa !9
  %418 = load ptr, ptr %30, align 8, !tbaa !5
  %419 = load i32, ptr %55, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %418, i64 %420
  %422 = getelementptr inbounds %struct.doublecomplex, ptr %421, i32 0, i32 0
  %423 = load double, ptr %422, align 8, !tbaa !13
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %66, i32 0, i32 0
  store double %423, ptr %424, align 8, !tbaa !13
  %425 = load ptr, ptr %30, align 8, !tbaa !5
  %426 = load i32, ptr %55, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds %struct.doublecomplex, ptr %425, i64 %427
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %428, i32 0, i32 1
  %430 = load double, ptr %429, align 8, !tbaa !15
  %431 = getelementptr inbounds %struct.doublecomplex, ptr %66, i32 0, i32 1
  store double %430, ptr %431, align 8, !tbaa !15
  br label %432

432:                                              ; preds = %412, %395
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %66, i32 0, i32 0
  %434 = load double, ptr %433, align 8, !tbaa !13
  store double %434, ptr %101, align 8, !tbaa !11
  %435 = load i32, ptr %85, align 4, !tbaa !9
  %436 = icmp ne i32 %435, 0
  br i1 %436, label %437, label %450

437:                                              ; preds = %432
  %438 = load ptr, ptr %34, align 8, !tbaa !5
  %439 = load double, ptr %438, align 8, !tbaa !11
  %440 = load double, ptr %101, align 8, !tbaa !11
  %441 = fcmp olt double %439, %440
  br i1 %441, label %442, label %447

442:                                              ; preds = %437
  %443 = load ptr, ptr %35, align 8, !tbaa !5
  %444 = load double, ptr %443, align 8, !tbaa !11
  %445 = load double, ptr %101, align 8, !tbaa !11
  %446 = fcmp oge double %444, %445
  br i1 %446, label %449, label %447

447:                                              ; preds = %442, %437
  %448 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 0, ptr %448, align 4, !tbaa !9
  br label %449

449:                                              ; preds = %447, %442
  br label %450

450:                                              ; preds = %449, %432
  %451 = load ptr, ptr %39, align 8, !tbaa !5
  %452 = load i32, ptr %451, align 4, !tbaa !9
  %453 = icmp eq i32 %452, 1
  br i1 %453, label %454, label %475

454:                                              ; preds = %450
  %455 = getelementptr inbounds %struct.doublecomplex, ptr %66, i32 0, i32 0
  %456 = load double, ptr %455, align 8, !tbaa !13
  %457 = load ptr, ptr %40, align 8, !tbaa !5
  %458 = getelementptr inbounds double, ptr %457, i64 1
  store double %456, ptr %458, align 8, !tbaa !11
  %459 = load i32, ptr %78, align 4, !tbaa !9
  %460 = icmp ne i32 %459, 0
  br i1 %460, label %461, label %474

461:                                              ; preds = %454
  %462 = load i32, ptr %53, align 4, !tbaa !9
  %463 = add nsw i32 %462, 1
  store i32 %463, ptr %55, align 4, !tbaa !9
  %464 = load ptr, ptr %41, align 8, !tbaa !5
  %465 = load i32, ptr %55, align 4, !tbaa !9
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds %struct.doublecomplex, ptr %464, i64 %466
  %468 = getelementptr inbounds %struct.doublecomplex, ptr %467, i32 0, i32 0
  store double 1.000000e+00, ptr %468, align 8, !tbaa !13
  %469 = load ptr, ptr %41, align 8, !tbaa !5
  %470 = load i32, ptr %55, align 4, !tbaa !9
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds %struct.doublecomplex, ptr %469, i64 %471
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %472, i32 0, i32 1
  store double 0.000000e+00, ptr %473, align 8, !tbaa !15
  br label %474

474:                                              ; preds = %461, %454
  br label %475

475:                                              ; preds = %474, %450
  store i32 1, ptr %102, align 4
  br label %1056

476:                                              ; preds = %387
  %477 = call double @dlamch_(ptr noundef @.str.8)
  store double %477, ptr %86, align 8, !tbaa !11
  %478 = call double @dlamch_(ptr noundef @.str.9)
  store double %478, ptr %97, align 8, !tbaa !11
  %479 = load double, ptr %86, align 8, !tbaa !11
  %480 = load double, ptr %97, align 8, !tbaa !11
  %481 = fdiv double %479, %480
  store double %481, ptr %95, align 8, !tbaa !11
  %482 = load double, ptr %95, align 8, !tbaa !11
  %483 = fdiv double 1.000000e+00, %482
  store double %483, ptr %88, align 8, !tbaa !11
  %484 = load double, ptr %95, align 8, !tbaa !11
  %485 = call double @sqrt(double noundef %484) #4
  store double %485, ptr %63, align 8, !tbaa !11
  %486 = load double, ptr %88, align 8, !tbaa !11
  %487 = call double @sqrt(double noundef %486) #4
  store double %487, ptr %57, align 8, !tbaa !11
  %488 = load double, ptr %86, align 8, !tbaa !11
  %489 = call double @sqrt(double noundef %488) #4
  %490 = call double @sqrt(double noundef %489) #4
  %491 = fdiv double 1.000000e+00, %490
  store double %491, ptr %58, align 8, !tbaa !11
  %492 = load double, ptr %57, align 8, !tbaa !11
  %493 = load double, ptr %58, align 8, !tbaa !11
  %494 = fcmp ole double %492, %493
  br i1 %494, label %495, label %497

495:                                              ; preds = %476
  %496 = load double, ptr %57, align 8, !tbaa !11
  br label %499

497:                                              ; preds = %476
  %498 = load double, ptr %58, align 8, !tbaa !11
  br label %499

499:                                              ; preds = %497, %495
  %500 = phi double [ %496, %495 ], [ %498, %497 ]
  store double %500, ptr %64, align 8, !tbaa !11
  store i32 0, ptr %83, align 4, !tbaa !9
  %501 = load ptr, ptr %38, align 8, !tbaa !5
  %502 = load double, ptr %501, align 8, !tbaa !11
  store double %502, ptr %87, align 8, !tbaa !11
  %503 = load i32, ptr %85, align 4, !tbaa !9
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %505, label %510

505:                                              ; preds = %499
  %506 = load ptr, ptr %34, align 8, !tbaa !5
  %507 = load double, ptr %506, align 8, !tbaa !11
  store double %507, ptr %98, align 8, !tbaa !11
  %508 = load ptr, ptr %35, align 8, !tbaa !5
  %509 = load double, ptr %508, align 8, !tbaa !11
  store double %509, ptr %99, align 8, !tbaa !11
  br label %511

510:                                              ; preds = %499
  store double 0.000000e+00, ptr %98, align 8, !tbaa !11
  store double 0.000000e+00, ptr %99, align 8, !tbaa !11
  br label %511

511:                                              ; preds = %510, %505
  %512 = load ptr, ptr %27, align 8, !tbaa !5
  %513 = load ptr, ptr %28, align 8, !tbaa !5
  %514 = load ptr, ptr %29, align 8, !tbaa !5
  %515 = load ptr, ptr %30, align 8, !tbaa !5
  %516 = load i32, ptr %50, align 4, !tbaa !9
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %515, i64 %517
  %519 = load ptr, ptr %31, align 8, !tbaa !5
  %520 = load ptr, ptr %45, align 8, !tbaa !5
  %521 = getelementptr inbounds double, ptr %520, i64 1
  %522 = call double @zlanhb_(ptr noundef @.str.10, ptr noundef %512, ptr noundef %513, ptr noundef %514, ptr noundef %518, ptr noundef %519, ptr noundef %521)
  store double %522, ptr %61, align 8, !tbaa !11
  %523 = load double, ptr %61, align 8, !tbaa !11
  %524 = fcmp ogt double %523, 0.000000e+00
  br i1 %524, label %525, label %533

525:                                              ; preds = %511
  %526 = load double, ptr %61, align 8, !tbaa !11
  %527 = load double, ptr %63, align 8, !tbaa !11
  %528 = fcmp olt double %526, %527
  br i1 %528, label %529, label %533

529:                                              ; preds = %525
  store i32 1, ptr %83, align 4, !tbaa !9
  %530 = load double, ptr %63, align 8, !tbaa !11
  %531 = load double, ptr %61, align 8, !tbaa !11
  %532 = fdiv double %530, %531
  store double %532, ptr %71, align 8, !tbaa !11
  br label %542

533:                                              ; preds = %525, %511
  %534 = load double, ptr %61, align 8, !tbaa !11
  %535 = load double, ptr %64, align 8, !tbaa !11
  %536 = fcmp ogt double %534, %535
  br i1 %536, label %537, label %541

537:                                              ; preds = %533
  store i32 1, ptr %83, align 4, !tbaa !9
  %538 = load double, ptr %64, align 8, !tbaa !11
  %539 = load double, ptr %61, align 8, !tbaa !11
  %540 = fdiv double %538, %539
  store double %540, ptr %71, align 8, !tbaa !11
  br label %541

541:                                              ; preds = %537, %533
  br label %542

542:                                              ; preds = %541, %529
  %543 = load i32, ptr %83, align 4, !tbaa !9
  %544 = icmp eq i32 %543, 1
  br i1 %544, label %545, label %592

545:                                              ; preds = %542
  %546 = load i32, ptr %76, align 4, !tbaa !9
  %547 = icmp ne i32 %546, 0
  br i1 %547, label %548, label %559

548:                                              ; preds = %545
  %549 = load ptr, ptr %29, align 8, !tbaa !5
  %550 = load ptr, ptr %29, align 8, !tbaa !5
  %551 = load ptr, ptr %28, align 8, !tbaa !5
  %552 = load ptr, ptr %28, align 8, !tbaa !5
  %553 = load ptr, ptr %30, align 8, !tbaa !5
  %554 = load i32, ptr %50, align 4, !tbaa !9
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds %struct.doublecomplex, ptr %553, i64 %555
  %557 = load ptr, ptr %31, align 8, !tbaa !5
  %558 = load ptr, ptr %48, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.11, ptr noundef %549, ptr noundef %550, ptr noundef @c_b26, ptr noundef %71, ptr noundef %551, ptr noundef %552, ptr noundef %556, ptr noundef %557, ptr noundef %558)
  br label %570

559:                                              ; preds = %545
  %560 = load ptr, ptr %29, align 8, !tbaa !5
  %561 = load ptr, ptr %29, align 8, !tbaa !5
  %562 = load ptr, ptr %28, align 8, !tbaa !5
  %563 = load ptr, ptr %28, align 8, !tbaa !5
  %564 = load ptr, ptr %30, align 8, !tbaa !5
  %565 = load i32, ptr %50, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds %struct.doublecomplex, ptr %564, i64 %566
  %568 = load ptr, ptr %31, align 8, !tbaa !5
  %569 = load ptr, ptr %48, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.12, ptr noundef %560, ptr noundef %561, ptr noundef @c_b26, ptr noundef %71, ptr noundef %562, ptr noundef %563, ptr noundef %567, ptr noundef %568, ptr noundef %569)
  br label %570

570:                                              ; preds = %559, %548
  %571 = load ptr, ptr %38, align 8, !tbaa !5
  %572 = load double, ptr %571, align 8, !tbaa !11
  %573 = fcmp ogt double %572, 0.000000e+00
  br i1 %573, label %574, label %579

574:                                              ; preds = %570
  %575 = load ptr, ptr %38, align 8, !tbaa !5
  %576 = load double, ptr %575, align 8, !tbaa !11
  %577 = load double, ptr %71, align 8, !tbaa !11
  %578 = fmul double %576, %577
  store double %578, ptr %87, align 8, !tbaa !11
  br label %579

579:                                              ; preds = %574, %570
  %580 = load i32, ptr %85, align 4, !tbaa !9
  %581 = icmp ne i32 %580, 0
  br i1 %581, label %582, label %591

582:                                              ; preds = %579
  %583 = load ptr, ptr %34, align 8, !tbaa !5
  %584 = load double, ptr %583, align 8, !tbaa !11
  %585 = load double, ptr %71, align 8, !tbaa !11
  %586 = fmul double %584, %585
  store double %586, ptr %98, align 8, !tbaa !11
  %587 = load ptr, ptr %35, align 8, !tbaa !5
  %588 = load double, ptr %587, align 8, !tbaa !11
  %589 = load double, ptr %71, align 8, !tbaa !11
  %590 = fmul double %588, %589
  store double %590, ptr %99, align 8, !tbaa !11
  br label %591

591:                                              ; preds = %582, %579
  br label %592

592:                                              ; preds = %591, %542
  store i32 1, ptr %59, align 4, !tbaa !9
  %593 = load i32, ptr %59, align 4, !tbaa !9
  %594 = load ptr, ptr %28, align 8, !tbaa !5
  %595 = load i32, ptr %594, align 4, !tbaa !9
  %596 = add nsw i32 %593, %595
  store i32 %596, ptr %60, align 4, !tbaa !9
  %597 = load i32, ptr %60, align 4, !tbaa !9
  %598 = load ptr, ptr %28, align 8, !tbaa !5
  %599 = load i32, ptr %598, align 4, !tbaa !9
  %600 = add nsw i32 %597, %599
  store i32 %600, ptr %91, align 4, !tbaa !9
  store i32 1, ptr %100, align 4, !tbaa !9
  %601 = load i32, ptr %100, align 4, !tbaa !9
  %602 = load i32, ptr %74, align 4, !tbaa !9
  %603 = add nsw i32 %601, %602
  store i32 %603, ptr %92, align 4, !tbaa !9
  %604 = load ptr, ptr %44, align 8, !tbaa !5
  %605 = load i32, ptr %604, align 4, !tbaa !9
  %606 = load i32, ptr %92, align 4, !tbaa !9
  %607 = sub nsw i32 %605, %606
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %94, align 4, !tbaa !9
  %609 = load ptr, ptr %25, align 8, !tbaa !5
  %610 = load ptr, ptr %27, align 8, !tbaa !5
  %611 = load ptr, ptr %28, align 8, !tbaa !5
  %612 = load ptr, ptr %29, align 8, !tbaa !5
  %613 = load ptr, ptr %30, align 8, !tbaa !5
  %614 = load i32, ptr %50, align 4, !tbaa !9
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds %struct.doublecomplex, ptr %613, i64 %615
  %617 = load ptr, ptr %31, align 8, !tbaa !5
  %618 = load ptr, ptr %45, align 8, !tbaa !5
  %619 = load i32, ptr %59, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds double, ptr %618, i64 %620
  %622 = load ptr, ptr %45, align 8, !tbaa !5
  %623 = load i32, ptr %60, align 4, !tbaa !9
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds double, ptr %622, i64 %624
  %626 = load ptr, ptr %43, align 8, !tbaa !5
  %627 = load i32, ptr %100, align 4, !tbaa !9
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds %struct.doublecomplex, ptr %626, i64 %628
  %630 = load ptr, ptr %43, align 8, !tbaa !5
  %631 = load i32, ptr %92, align 4, !tbaa !9
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds %struct.doublecomplex, ptr %630, i64 %632
  call void @zhetrd_hb2st_(ptr noundef @.str.4, ptr noundef %609, ptr noundef %610, ptr noundef %611, ptr noundef %612, ptr noundef %616, ptr noundef %617, ptr noundef %621, ptr noundef %625, ptr noundef %629, ptr noundef %74, ptr noundef %633, ptr noundef %94, ptr noundef %72)
  store i32 0, ptr %65, align 4, !tbaa !9
  %634 = load i32, ptr %82, align 4, !tbaa !9
  %635 = icmp ne i32 %634, 0
  br i1 %635, label %636, label %648

636:                                              ; preds = %592
  %637 = load ptr, ptr %36, align 8, !tbaa !5
  %638 = load i32, ptr %637, align 4, !tbaa !9
  %639 = icmp eq i32 %638, 1
  br i1 %639, label %640, label %647

640:                                              ; preds = %636
  %641 = load ptr, ptr %37, align 8, !tbaa !5
  %642 = load i32, ptr %641, align 4, !tbaa !9
  %643 = load ptr, ptr %28, align 8, !tbaa !5
  %644 = load i32, ptr %643, align 4, !tbaa !9
  %645 = icmp eq i32 %642, %644
  br i1 %645, label %646, label %647

646:                                              ; preds = %640
  store i32 1, ptr %65, align 4, !tbaa !9
  br label %647

647:                                              ; preds = %646, %640, %636
  br label %648

648:                                              ; preds = %647, %592
  %649 = load i32, ptr %81, align 4, !tbaa !9
  %650 = icmp ne i32 %649, 0
  br i1 %650, label %654, label %651

651:                                              ; preds = %648
  %652 = load i32, ptr %65, align 4, !tbaa !9
  %653 = icmp ne i32 %652, 0
  br i1 %653, label %654, label %765

654:                                              ; preds = %651, %648
  %655 = load ptr, ptr %38, align 8, !tbaa !5
  %656 = load double, ptr %655, align 8, !tbaa !11
  %657 = fcmp ole double %656, 0.000000e+00
  br i1 %657, label %658, label %765

658:                                              ; preds = %654
  %659 = load ptr, ptr %28, align 8, !tbaa !5
  %660 = load ptr, ptr %45, align 8, !tbaa !5
  %661 = load i32, ptr %59, align 4, !tbaa !9
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds double, ptr %660, i64 %662
  %664 = load ptr, ptr %40, align 8, !tbaa !5
  %665 = getelementptr inbounds double, ptr %664, i64 1
  call void @dcopy_(ptr noundef %659, ptr noundef %663, ptr noundef @c__1, ptr noundef %665, ptr noundef @c__1)
  %666 = load i32, ptr %91, align 4, !tbaa !9
  %667 = load ptr, ptr %28, align 8, !tbaa !5
  %668 = load i32, ptr %667, align 4, !tbaa !9
  %669 = shl i32 %668, 1
  %670 = add nsw i32 %666, %669
  store i32 %670, ptr %70, align 4, !tbaa !9
  %671 = load i32, ptr %78, align 4, !tbaa !9
  %672 = icmp ne i32 %671, 0
  br i1 %672, label %693, label %673

673:                                              ; preds = %658
  %674 = load ptr, ptr %28, align 8, !tbaa !5
  %675 = load i32, ptr %674, align 4, !tbaa !9
  %676 = sub nsw i32 %675, 1
  store i32 %676, ptr %55, align 4, !tbaa !9
  %677 = load ptr, ptr %45, align 8, !tbaa !5
  %678 = load i32, ptr %60, align 4, !tbaa !9
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds double, ptr %677, i64 %679
  %681 = load ptr, ptr %45, align 8, !tbaa !5
  %682 = load i32, ptr %70, align 4, !tbaa !9
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds double, ptr %681, i64 %683
  call void @dcopy_(ptr noundef %55, ptr noundef %680, ptr noundef @c__1, ptr noundef %684, ptr noundef @c__1)
  %685 = load ptr, ptr %28, align 8, !tbaa !5
  %686 = load ptr, ptr %40, align 8, !tbaa !5
  %687 = getelementptr inbounds double, ptr %686, i64 1
  %688 = load ptr, ptr %45, align 8, !tbaa !5
  %689 = load i32, ptr %70, align 4, !tbaa !9
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds double, ptr %688, i64 %690
  %692 = load ptr, ptr %48, align 8, !tbaa !5
  call void @dsterf_(ptr noundef %685, ptr noundef %687, ptr noundef %691, ptr noundef %692)
  br label %755

693:                                              ; preds = %658
  %694 = load ptr, ptr %28, align 8, !tbaa !5
  %695 = load ptr, ptr %28, align 8, !tbaa !5
  %696 = load ptr, ptr %32, align 8, !tbaa !5
  %697 = load i32, ptr %52, align 4, !tbaa !9
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %696, i64 %698
  %700 = load ptr, ptr %33, align 8, !tbaa !5
  %701 = load ptr, ptr %41, align 8, !tbaa !5
  %702 = load i32, ptr %54, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds %struct.doublecomplex, ptr %701, i64 %703
  %705 = load ptr, ptr %42, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.1, ptr noundef %694, ptr noundef %695, ptr noundef %699, ptr noundef %700, ptr noundef %704, ptr noundef %705)
  %706 = load ptr, ptr %28, align 8, !tbaa !5
  %707 = load i32, ptr %706, align 4, !tbaa !9
  %708 = sub nsw i32 %707, 1
  store i32 %708, ptr %55, align 4, !tbaa !9
  %709 = load ptr, ptr %45, align 8, !tbaa !5
  %710 = load i32, ptr %60, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds double, ptr %709, i64 %711
  %713 = load ptr, ptr %45, align 8, !tbaa !5
  %714 = load i32, ptr %70, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds double, ptr %713, i64 %715
  call void @dcopy_(ptr noundef %55, ptr noundef %712, ptr noundef @c__1, ptr noundef %716, ptr noundef @c__1)
  %717 = load ptr, ptr %25, align 8, !tbaa !5
  %718 = load ptr, ptr %28, align 8, !tbaa !5
  %719 = load ptr, ptr %40, align 8, !tbaa !5
  %720 = getelementptr inbounds double, ptr %719, i64 1
  %721 = load ptr, ptr %45, align 8, !tbaa !5
  %722 = load i32, ptr %70, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds double, ptr %721, i64 %723
  %725 = load ptr, ptr %41, align 8, !tbaa !5
  %726 = load i32, ptr %54, align 4, !tbaa !9
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %725, i64 %727
  %729 = load ptr, ptr %42, align 8, !tbaa !5
  %730 = load ptr, ptr %45, align 8, !tbaa !5
  %731 = load i32, ptr %91, align 4, !tbaa !9
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds double, ptr %730, i64 %732
  %734 = load ptr, ptr %48, align 8, !tbaa !5
  call void @zsteqr_(ptr noundef %717, ptr noundef %718, ptr noundef %720, ptr noundef %724, ptr noundef %728, ptr noundef %729, ptr noundef %733, ptr noundef %734)
  %735 = load ptr, ptr %48, align 8, !tbaa !5
  %736 = load i32, ptr %735, align 4, !tbaa !9
  %737 = icmp eq i32 %736, 0
  br i1 %737, label %738, label %754

738:                                              ; preds = %693
  %739 = load ptr, ptr %28, align 8, !tbaa !5
  %740 = load i32, ptr %739, align 4, !tbaa !9
  store i32 %740, ptr %55, align 4, !tbaa !9
  store i32 1, ptr %68, align 4, !tbaa !9
  br label %741

741:                                              ; preds = %750, %738
  %742 = load i32, ptr %68, align 4, !tbaa !9
  %743 = load i32, ptr %55, align 4, !tbaa !9
  %744 = icmp sle i32 %742, %743
  br i1 %744, label %745, label %753

745:                                              ; preds = %741
  %746 = load ptr, ptr %47, align 8, !tbaa !5
  %747 = load i32, ptr %68, align 4, !tbaa !9
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds i32, ptr %746, i64 %748
  store i32 0, ptr %749, align 4, !tbaa !9
  br label %750

750:                                              ; preds = %745
  %751 = load i32, ptr %68, align 4, !tbaa !9
  %752 = add nsw i32 %751, 1
  store i32 %752, ptr %68, align 4, !tbaa !9
  br label %741, !llvm.loop !16

753:                                              ; preds = %741
  br label %754

754:                                              ; preds = %753, %693
  br label %755

755:                                              ; preds = %754, %673
  %756 = load ptr, ptr %48, align 8, !tbaa !5
  %757 = load i32, ptr %756, align 4, !tbaa !9
  %758 = icmp eq i32 %757, 0
  br i1 %758, label %759, label %763

759:                                              ; preds = %755
  %760 = load ptr, ptr %28, align 8, !tbaa !5
  %761 = load i32, ptr %760, align 4, !tbaa !9
  %762 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 %761, ptr %762, align 4, !tbaa !9
  br label %891

763:                                              ; preds = %755
  %764 = load ptr, ptr %48, align 8, !tbaa !5
  store i32 0, ptr %764, align 4, !tbaa !9
  br label %765

765:                                              ; preds = %763, %654, %651
  %766 = load i32, ptr %78, align 4, !tbaa !9
  %767 = icmp ne i32 %766, 0
  br i1 %767, label %768, label %770

768:                                              ; preds = %765
  %769 = getelementptr inbounds [1 x i8], ptr %73, i64 0, i64 0
  store i8 66, ptr %769, align 1, !tbaa !18
  br label %772

770:                                              ; preds = %765
  %771 = getelementptr inbounds [1 x i8], ptr %73, i64 0, i64 0
  store i8 69, ptr %771, align 1, !tbaa !18
  br label %772

772:                                              ; preds = %770, %768
  store i32 1, ptr %84, align 4, !tbaa !9
  %773 = load i32, ptr %84, align 4, !tbaa !9
  %774 = load ptr, ptr %28, align 8, !tbaa !5
  %775 = load i32, ptr %774, align 4, !tbaa !9
  %776 = add nsw i32 %773, %775
  store i32 %776, ptr %90, align 4, !tbaa !9
  %777 = load i32, ptr %90, align 4, !tbaa !9
  %778 = load ptr, ptr %28, align 8, !tbaa !5
  %779 = load i32, ptr %778, align 4, !tbaa !9
  %780 = add nsw i32 %777, %779
  store i32 %780, ptr %89, align 4, !tbaa !9
  %781 = load ptr, ptr %26, align 8, !tbaa !5
  %782 = getelementptr inbounds [1 x i8], ptr %73, i64 0, i64 0
  %783 = load ptr, ptr %28, align 8, !tbaa !5
  %784 = load ptr, ptr %36, align 8, !tbaa !5
  %785 = load ptr, ptr %37, align 8, !tbaa !5
  %786 = load ptr, ptr %45, align 8, !tbaa !5
  %787 = load i32, ptr %59, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds double, ptr %786, i64 %788
  %790 = load ptr, ptr %45, align 8, !tbaa !5
  %791 = load i32, ptr %60, align 4, !tbaa !9
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds double, ptr %790, i64 %792
  %794 = load ptr, ptr %39, align 8, !tbaa !5
  %795 = load ptr, ptr %40, align 8, !tbaa !5
  %796 = getelementptr inbounds double, ptr %795, i64 1
  %797 = load ptr, ptr %46, align 8, !tbaa !5
  %798 = load i32, ptr %84, align 4, !tbaa !9
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds i32, ptr %797, i64 %799
  %801 = load ptr, ptr %46, align 8, !tbaa !5
  %802 = load i32, ptr %90, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds i32, ptr %801, i64 %803
  %805 = load ptr, ptr %45, align 8, !tbaa !5
  %806 = load i32, ptr %91, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds double, ptr %805, i64 %807
  %809 = load ptr, ptr %46, align 8, !tbaa !5
  %810 = load i32, ptr %89, align 4, !tbaa !9
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds i32, ptr %809, i64 %811
  %813 = load ptr, ptr %48, align 8, !tbaa !5
  call void @dstebz_(ptr noundef %781, ptr noundef %782, ptr noundef %783, ptr noundef %98, ptr noundef %99, ptr noundef %784, ptr noundef %785, ptr noundef %87, ptr noundef %789, ptr noundef %793, ptr noundef %794, ptr noundef %93, ptr noundef %796, ptr noundef %800, ptr noundef %804, ptr noundef %808, ptr noundef %812, ptr noundef %813)
  %814 = load i32, ptr %78, align 4, !tbaa !9
  %815 = icmp ne i32 %814, 0
  br i1 %815, label %816, label %890

816:                                              ; preds = %772
  %817 = load ptr, ptr %28, align 8, !tbaa !5
  %818 = load ptr, ptr %45, align 8, !tbaa !5
  %819 = load i32, ptr %59, align 4, !tbaa !9
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds double, ptr %818, i64 %820
  %822 = load ptr, ptr %45, align 8, !tbaa !5
  %823 = load i32, ptr %60, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds double, ptr %822, i64 %824
  %826 = load ptr, ptr %39, align 8, !tbaa !5
  %827 = load ptr, ptr %40, align 8, !tbaa !5
  %828 = getelementptr inbounds double, ptr %827, i64 1
  %829 = load ptr, ptr %46, align 8, !tbaa !5
  %830 = load i32, ptr %84, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds i32, ptr %829, i64 %831
  %833 = load ptr, ptr %46, align 8, !tbaa !5
  %834 = load i32, ptr %90, align 4, !tbaa !9
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds i32, ptr %833, i64 %835
  %837 = load ptr, ptr %41, align 8, !tbaa !5
  %838 = load i32, ptr %54, align 4, !tbaa !9
  %839 = sext i32 %838 to i64
  %840 = getelementptr inbounds %struct.doublecomplex, ptr %837, i64 %839
  %841 = load ptr, ptr %42, align 8, !tbaa !5
  %842 = load ptr, ptr %45, align 8, !tbaa !5
  %843 = load i32, ptr %91, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds double, ptr %842, i64 %844
  %846 = load ptr, ptr %46, align 8, !tbaa !5
  %847 = load i32, ptr %89, align 4, !tbaa !9
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds i32, ptr %846, i64 %848
  %850 = load ptr, ptr %47, align 8, !tbaa !5
  %851 = getelementptr inbounds i32, ptr %850, i64 1
  %852 = load ptr, ptr %48, align 8, !tbaa !5
  call void @zstein_(ptr noundef %817, ptr noundef %821, ptr noundef %825, ptr noundef %826, ptr noundef %828, ptr noundef %832, ptr noundef %836, ptr noundef %840, ptr noundef %841, ptr noundef %845, ptr noundef %849, ptr noundef %851, ptr noundef %852)
  %853 = load ptr, ptr %39, align 8, !tbaa !5
  %854 = load i32, ptr %853, align 4, !tbaa !9
  store i32 %854, ptr %55, align 4, !tbaa !9
  store i32 1, ptr %69, align 4, !tbaa !9
  br label %855

855:                                              ; preds = %886, %816
  %856 = load i32, ptr %69, align 4, !tbaa !9
  %857 = load i32, ptr %55, align 4, !tbaa !9
  %858 = icmp sle i32 %856, %857
  br i1 %858, label %859, label %889

859:                                              ; preds = %855
  %860 = load ptr, ptr %28, align 8, !tbaa !5
  %861 = load ptr, ptr %41, align 8, !tbaa !5
  %862 = load i32, ptr %69, align 4, !tbaa !9
  %863 = load i32, ptr %53, align 4, !tbaa !9
  %864 = mul nsw i32 %862, %863
  %865 = add nsw i32 %864, 1
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %861, i64 %866
  %868 = load ptr, ptr %43, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.doublecomplex, ptr %868, i64 1
  call void @zcopy_(ptr noundef %860, ptr noundef %867, ptr noundef @c__1, ptr noundef %869, ptr noundef @c__1)
  %870 = load ptr, ptr %28, align 8, !tbaa !5
  %871 = load ptr, ptr %28, align 8, !tbaa !5
  %872 = load ptr, ptr %32, align 8, !tbaa !5
  %873 = load i32, ptr %52, align 4, !tbaa !9
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %872, i64 %874
  %876 = load ptr, ptr %33, align 8, !tbaa !5
  %877 = load ptr, ptr %43, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 1
  %879 = load ptr, ptr %41, align 8, !tbaa !5
  %880 = load i32, ptr %69, align 4, !tbaa !9
  %881 = load i32, ptr %53, align 4, !tbaa !9
  %882 = mul nsw i32 %880, %881
  %883 = add nsw i32 %882, 1
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %879, i64 %884
  call void @zgemv_(ptr noundef @.str.4, ptr noundef %870, ptr noundef %871, ptr noundef @c_b2, ptr noundef %875, ptr noundef %876, ptr noundef %878, ptr noundef @c__1, ptr noundef @c_b1, ptr noundef %885, ptr noundef @c__1)
  br label %886

886:                                              ; preds = %859
  %887 = load i32, ptr %69, align 4, !tbaa !9
  %888 = add nsw i32 %887, 1
  store i32 %888, ptr %69, align 4, !tbaa !9
  br label %855, !llvm.loop !19

889:                                              ; preds = %855
  br label %890

890:                                              ; preds = %889, %772
  br label %891

891:                                              ; preds = %890, %759
  %892 = load i32, ptr %83, align 4, !tbaa !9
  %893 = icmp eq i32 %892, 1
  br i1 %893, label %894, label %910

894:                                              ; preds = %891
  %895 = load ptr, ptr %48, align 8, !tbaa !5
  %896 = load i32, ptr %895, align 4, !tbaa !9
  %897 = icmp eq i32 %896, 0
  br i1 %897, label %898, label %901

898:                                              ; preds = %894
  %899 = load ptr, ptr %39, align 8, !tbaa !5
  %900 = load i32, ptr %899, align 4, !tbaa !9
  store i32 %900, ptr %62, align 4, !tbaa !9
  br label %905

901:                                              ; preds = %894
  %902 = load ptr, ptr %48, align 8, !tbaa !5
  %903 = load i32, ptr %902, align 4, !tbaa !9
  %904 = sub nsw i32 %903, 1
  store i32 %904, ptr %62, align 4, !tbaa !9
  br label %905

905:                                              ; preds = %901, %898
  %906 = load double, ptr %71, align 8, !tbaa !11
  %907 = fdiv double 1.000000e+00, %906
  store double %907, ptr %57, align 8, !tbaa !11
  %908 = load ptr, ptr %40, align 8, !tbaa !5
  %909 = getelementptr inbounds double, ptr %908, i64 1
  call void @dscal_(ptr noundef %62, ptr noundef %57, ptr noundef %909, ptr noundef @c__1)
  br label %910

910:                                              ; preds = %905, %891
  %911 = load i32, ptr %78, align 4, !tbaa !9
  %912 = icmp ne i32 %911, 0
  br i1 %912, label %913, label %1047

913:                                              ; preds = %910
  %914 = load ptr, ptr %39, align 8, !tbaa !5
  %915 = load i32, ptr %914, align 4, !tbaa !9
  %916 = sub nsw i32 %915, 1
  store i32 %916, ptr %55, align 4, !tbaa !9
  store i32 1, ptr %69, align 4, !tbaa !9
  br label %917

917:                                              ; preds = %1043, %913
  %918 = load i32, ptr %69, align 4, !tbaa !9
  %919 = load i32, ptr %55, align 4, !tbaa !9
  %920 = icmp sle i32 %918, %919
  br i1 %920, label %921, label %1046

921:                                              ; preds = %917
  store i32 0, ptr %68, align 4, !tbaa !9
  %922 = load ptr, ptr %40, align 8, !tbaa !5
  %923 = load i32, ptr %69, align 4, !tbaa !9
  %924 = sext i32 %923 to i64
  %925 = getelementptr inbounds double, ptr %922, i64 %924
  %926 = load double, ptr %925, align 8, !tbaa !11
  store double %926, ptr %101, align 8, !tbaa !11
  %927 = load ptr, ptr %39, align 8, !tbaa !5
  %928 = load i32, ptr %927, align 4, !tbaa !9
  store i32 %928, ptr %56, align 4, !tbaa !9
  %929 = load i32, ptr %69, align 4, !tbaa !9
  %930 = add nsw i32 %929, 1
  store i32 %930, ptr %80, align 4, !tbaa !9
  br label %931

931:                                              ; preds = %951, %921
  %932 = load i32, ptr %80, align 4, !tbaa !9
  %933 = load i32, ptr %56, align 4, !tbaa !9
  %934 = icmp sle i32 %932, %933
  br i1 %934, label %935, label %954

935:                                              ; preds = %931
  %936 = load ptr, ptr %40, align 8, !tbaa !5
  %937 = load i32, ptr %80, align 4, !tbaa !9
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds double, ptr %936, i64 %938
  %940 = load double, ptr %939, align 8, !tbaa !11
  %941 = load double, ptr %101, align 8, !tbaa !11
  %942 = fcmp olt double %940, %941
  br i1 %942, label %943, label %950

943:                                              ; preds = %935
  %944 = load i32, ptr %80, align 4, !tbaa !9
  store i32 %944, ptr %68, align 4, !tbaa !9
  %945 = load ptr, ptr %40, align 8, !tbaa !5
  %946 = load i32, ptr %80, align 4, !tbaa !9
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds double, ptr %945, i64 %947
  %949 = load double, ptr %948, align 8, !tbaa !11
  store double %949, ptr %101, align 8, !tbaa !11
  br label %950

950:                                              ; preds = %943, %935
  br label %951

951:                                              ; preds = %950
  %952 = load i32, ptr %80, align 4, !tbaa !9
  %953 = add nsw i32 %952, 1
  store i32 %953, ptr %80, align 4, !tbaa !9
  br label %931, !llvm.loop !20

954:                                              ; preds = %931
  %955 = load i32, ptr %68, align 4, !tbaa !9
  %956 = icmp ne i32 %955, 0
  br i1 %956, label %957, label %1042

957:                                              ; preds = %954
  %958 = load ptr, ptr %46, align 8, !tbaa !5
  %959 = load i32, ptr %84, align 4, !tbaa !9
  %960 = load i32, ptr %68, align 4, !tbaa !9
  %961 = add nsw i32 %959, %960
  %962 = sub nsw i32 %961, 1
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds i32, ptr %958, i64 %963
  %965 = load i32, ptr %964, align 4, !tbaa !9
  store i32 %965, ptr %67, align 4, !tbaa !9
  %966 = load ptr, ptr %40, align 8, !tbaa !5
  %967 = load i32, ptr %69, align 4, !tbaa !9
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds double, ptr %966, i64 %968
  %970 = load double, ptr %969, align 8, !tbaa !11
  %971 = load ptr, ptr %40, align 8, !tbaa !5
  %972 = load i32, ptr %68, align 4, !tbaa !9
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds double, ptr %971, i64 %973
  store double %970, ptr %974, align 8, !tbaa !11
  %975 = load ptr, ptr %46, align 8, !tbaa !5
  %976 = load i32, ptr %84, align 4, !tbaa !9
  %977 = load i32, ptr %69, align 4, !tbaa !9
  %978 = add nsw i32 %976, %977
  %979 = sub nsw i32 %978, 1
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds i32, ptr %975, i64 %980
  %982 = load i32, ptr %981, align 4, !tbaa !9
  %983 = load ptr, ptr %46, align 8, !tbaa !5
  %984 = load i32, ptr %84, align 4, !tbaa !9
  %985 = load i32, ptr %68, align 4, !tbaa !9
  %986 = add nsw i32 %984, %985
  %987 = sub nsw i32 %986, 1
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds i32, ptr %983, i64 %988
  store i32 %982, ptr %989, align 4, !tbaa !9
  %990 = load double, ptr %101, align 8, !tbaa !11
  %991 = load ptr, ptr %40, align 8, !tbaa !5
  %992 = load i32, ptr %69, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds double, ptr %991, i64 %993
  store double %990, ptr %994, align 8, !tbaa !11
  %995 = load i32, ptr %67, align 4, !tbaa !9
  %996 = load ptr, ptr %46, align 8, !tbaa !5
  %997 = load i32, ptr %84, align 4, !tbaa !9
  %998 = load i32, ptr %69, align 4, !tbaa !9
  %999 = add nsw i32 %997, %998
  %1000 = sub nsw i32 %999, 1
  %1001 = sext i32 %1000 to i64
  %1002 = getelementptr inbounds i32, ptr %996, i64 %1001
  store i32 %995, ptr %1002, align 4, !tbaa !9
  %1003 = load ptr, ptr %28, align 8, !tbaa !5
  %1004 = load ptr, ptr %41, align 8, !tbaa !5
  %1005 = load i32, ptr %68, align 4, !tbaa !9
  %1006 = load i32, ptr %53, align 4, !tbaa !9
  %1007 = mul nsw i32 %1005, %1006
  %1008 = add nsw i32 %1007, 1
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds %struct.doublecomplex, ptr %1004, i64 %1009
  %1011 = load ptr, ptr %41, align 8, !tbaa !5
  %1012 = load i32, ptr %69, align 4, !tbaa !9
  %1013 = load i32, ptr %53, align 4, !tbaa !9
  %1014 = mul nsw i32 %1012, %1013
  %1015 = add nsw i32 %1014, 1
  %1016 = sext i32 %1015 to i64
  %1017 = getelementptr inbounds %struct.doublecomplex, ptr %1011, i64 %1016
  call void @zswap_(ptr noundef %1003, ptr noundef %1010, ptr noundef @c__1, ptr noundef %1017, ptr noundef @c__1)
  %1018 = load ptr, ptr %48, align 8, !tbaa !5
  %1019 = load i32, ptr %1018, align 4, !tbaa !9
  %1020 = icmp ne i32 %1019, 0
  br i1 %1020, label %1021, label %1041

1021:                                             ; preds = %957
  %1022 = load ptr, ptr %47, align 8, !tbaa !5
  %1023 = load i32, ptr %68, align 4, !tbaa !9
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds i32, ptr %1022, i64 %1024
  %1026 = load i32, ptr %1025, align 4, !tbaa !9
  store i32 %1026, ptr %67, align 4, !tbaa !9
  %1027 = load ptr, ptr %47, align 8, !tbaa !5
  %1028 = load i32, ptr %69, align 4, !tbaa !9
  %1029 = sext i32 %1028 to i64
  %1030 = getelementptr inbounds i32, ptr %1027, i64 %1029
  %1031 = load i32, ptr %1030, align 4, !tbaa !9
  %1032 = load ptr, ptr %47, align 8, !tbaa !5
  %1033 = load i32, ptr %68, align 4, !tbaa !9
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i32, ptr %1032, i64 %1034
  store i32 %1031, ptr %1035, align 4, !tbaa !9
  %1036 = load i32, ptr %67, align 4, !tbaa !9
  %1037 = load ptr, ptr %47, align 8, !tbaa !5
  %1038 = load i32, ptr %69, align 4, !tbaa !9
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds i32, ptr %1037, i64 %1039
  store i32 %1036, ptr %1040, align 4, !tbaa !9
  br label %1041

1041:                                             ; preds = %1021, %957
  br label %1042

1042:                                             ; preds = %1041, %954
  br label %1043

1043:                                             ; preds = %1042
  %1044 = load i32, ptr %69, align 4, !tbaa !9
  %1045 = add nsw i32 %1044, 1
  store i32 %1045, ptr %69, align 4, !tbaa !9
  br label %917, !llvm.loop !21

1046:                                             ; preds = %917
  br label %1047

1047:                                             ; preds = %1046, %910
  %1048 = load i32, ptr %75, align 4, !tbaa !9
  %1049 = sitofp i32 %1048 to double
  %1050 = load ptr, ptr %43, align 8, !tbaa !5
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %1050, i64 1
  %1052 = getelementptr inbounds %struct.doublecomplex, ptr %1051, i32 0, i32 0
  store double %1049, ptr %1052, align 8, !tbaa !13
  %1053 = load ptr, ptr %43, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %1053, i64 1
  %1055 = getelementptr inbounds %struct.doublecomplex, ptr %1054, i32 0, i32 1
  store double 0.000000e+00, ptr %1055, align 8, !tbaa !15
  store i32 1, ptr %102, align 4
  br label %1056

1056:                                             ; preds = %1047, %475, %386, %379, %371
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 4, 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 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 4, 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
  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 @ilaenv2stage_(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

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

declare double @zlanhb_(ptr noundef, 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 @zhetrd_hb2st_(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 @dcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dsterf_(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 @zsteqr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare void @zstein_(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 @zcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @zgemv_(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 @dscal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i32, align 4
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1
@c_n1 = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4
@c__4 = external hidden global i32, align 4
@.str.7 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [10 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
@c_b26 = external hidden global double, align 8
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c_b1 = external hidden global %struct.doublecomplex, align 8

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

59:                                               ; preds = %24
  %60 = icmp ne i32 %52, 0
  %61 = icmp ne i32 %53, 0
  %or.cond = select i1 %60, i1 true, i1 %61
  %62 = icmp ne i32 %54, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %62
  br i1 %or.cond3, label %63, label %.thread444.sink.split

63:                                               ; preds = %59
  %.not407 = icmp eq i32 %55, 0
  br i1 %.not407, label %64, label %66

64:                                               ; preds = %63
  %65 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #6
  %.not408 = icmp eq i32 %65, 0
  br i1 %.not408, label %.thread444.sink.split, label %66

66:                                               ; preds = %64, %63
  %67 = load i32, ptr %3, align 4, !tbaa !5
  %68 = icmp slt i32 %67, 0
  br i1 %68, label %.thread444.sink.split, label %69

69:                                               ; preds = %66
  %70 = load i32, ptr %4, align 4, !tbaa !5
  %71 = icmp slt i32 %70, 0
  br i1 %71, label %.thread444.sink.split, label %72

72:                                               ; preds = %69
  %73 = load i32, ptr %6, align 4, !tbaa !5
  %.not409 = icmp sgt i32 %73, %70
  br i1 %.not409, label %74, label %.thread444.sink.split

74:                                               ; preds = %72
  %.not410 = icmp ne i32 %51, 0
  br i1 %.not410, label %75, label %78

75:                                               ; preds = %74
  %76 = load i32, ptr %8, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %67, i32 1)
  %77 = icmp slt i32 %76, %spec.select
  br i1 %77, label %.thread444.sink.split, label %78

78:                                               ; preds = %75, %74
  br i1 %61, label %79, label %84

79:                                               ; preds = %78
  %.not460 = icmp eq i32 %67, 0
  br i1 %.not460, label %93, label %80

80:                                               ; preds = %79
  %81 = load double, ptr %10, align 8, !tbaa !9
  %82 = load double, ptr %9, align 8, !tbaa !9
  %83 = fcmp ugt double %81, %82
  br i1 %83, label %93, label %.thread444.sink.split

84:                                               ; preds = %78
  br i1 %62, label %85, label %93

85:                                               ; preds = %84
  %86 = load i32, ptr %11, align 4, !tbaa !5
  %87 = icmp slt i32 %86, 1
  %spec.select432 = tail call i32 @llvm.umax.i32(i32 %67, i32 1)
  %88 = icmp ugt i32 %86, %spec.select432
  %or.cond462 = or i1 %87, %88
  br i1 %or.cond462, label %.thread444.sink.split, label %89

89:                                               ; preds = %85
  %90 = load i32, ptr %12, align 4, !tbaa !5
  %. = tail call i32 @llvm.umin.i32(i32 %67, i32 %86)
  %91 = icmp slt i32 %90, %.
  %92 = icmp ugt i32 %90, %67
  %or.cond459 = or i1 %91, %92
  br i1 %or.cond459, label %.thread444.sink.split, label %93

93:                                               ; preds = %89, %80, %79, %84
  %.pr = load i32, ptr %23, align 4, !tbaa !5
  %94 = icmp eq i32 %.pr, 0
  br i1 %94, label %95, label %.thread444

95:                                               ; preds = %93
  %96 = load i32, ptr %17, align 4, !tbaa !5
  %97 = icmp slt i32 %96, 1
  %98 = icmp ult i32 %96, %67
  %or.cond500 = and i1 %.not410, %98
  %or.cond502 = or i1 %97, %or.cond500
  br i1 %or.cond502, label %.thread444.sink.split, label %.thread

.thread:                                          ; preds = %95
  %99 = icmp ult i32 %67, 2
  br i1 %99, label %107, label %100

100:                                              ; preds = %.thread
  %101 = tail call i32 @ilaenv2stage_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str.6, ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #6
  store i32 %101, ptr %32, align 4, !tbaa !5
  %102 = call i32 @ilaenv2stage_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str.6, ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %32, ptr noundef nonnull @c_n1) #6
  store i32 %102, ptr %31, align 4, !tbaa !5
  %103 = call i32 @ilaenv2stage_(ptr noundef nonnull @c__4, ptr noundef nonnull @.str.6, ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %32, ptr noundef nonnull @c_n1) #6
  %104 = load i32, ptr %31, align 4, !tbaa !5
  %105 = add nsw i32 %104, %103
  %106 = sitofp i32 %105 to double
  br label %107

107:                                              ; preds = %.thread, %100
  %.sink = phi double [ %106, %100 ], [ 1.000000e+00, %.thread ]
  %.0389 = phi i32 [ %105, %100 ], [ 1, %.thread ]
  store double %.sink, ptr %18, align 8
  %108 = getelementptr inbounds i8, ptr %18, i64 8
  store double 0.000000e+00, ptr %108, align 8
  %109 = load i32, ptr %19, align 4, !tbaa !5
  %110 = icmp sge i32 %109, %.0389
  %or.cond5 = select i1 %110, i1 true, i1 %57
  br i1 %or.cond5, label %.thread439, label %.thread444.sink.split

.thread439:                                       ; preds = %107
  %.pr441.pr = load i32, ptr %23, align 4, !tbaa !5
  %.not413 = icmp eq i32 %.pr441.pr, 0
  br i1 %.not413, label %114, label %.thread444

.thread444.sink.split:                            ; preds = %107, %95, %89, %85, %80, %75, %72, %69, %66, %64, %59, %24
  %.sink501 = phi i32 [ -1, %24 ], [ -2, %59 ], [ -3, %64 ], [ -4, %66 ], [ -5, %69 ], [ -7, %72 ], [ -9, %75 ], [ -11, %80 ], [ -12, %85 ], [ -13, %89 ], [ -18, %95 ], [ -20, %107 ]
  store i32 %.sink501, ptr %23, align 4, !tbaa !5
  br label %.thread444

.thread444:                                       ; preds = %.thread444.sink.split, %93, %.thread439
  %111 = phi i32 [ %.pr441.pr, %.thread439 ], [ %.pr, %93 ], [ %.sink501, %.thread444.sink.split ]
  %112 = sub nsw i32 0, %111
  store i32 %112, ptr %25, align 4, !tbaa !5
  %113 = call i32 @xerbla_(ptr noundef nonnull @.str.7, ptr noundef nonnull %25, i32 noundef 13) #6
  br label %288

114:                                              ; preds = %.thread439
  br i1 %57, label %288, label %115

115:                                              ; preds = %114
  store i32 0, ptr %14, align 4, !tbaa !5
  %116 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %116, label %134 [
    i32 0, label %288
    i32 1, label %117
  ]

117:                                              ; preds = %115
  store i32 1, ptr %14, align 4, !tbaa !5
  br i1 %.not407, label %118, label %123

118:                                              ; preds = %117
  %119 = load i32, ptr %4, align 4, !tbaa !5
  %120 = add i32 %39, %119
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %121
  br label %123

123:                                              ; preds = %117, %118
  %.sroa.0.0.in = phi ptr [ %122, %118 ], [ %5, %117 ]
  %.sroa.0.0 = load double, ptr %.sroa.0.0.in, align 8, !tbaa !11
  %.not429 = icmp eq i32 %53, 0
  br i1 %.not429, label %130, label %124

124:                                              ; preds = %123
  %125 = load double, ptr %9, align 8, !tbaa !9
  %126 = fcmp olt double %125, %.sroa.0.0
  br i1 %126, label %127, label %.thread449

127:                                              ; preds = %124
  %128 = load double, ptr %10, align 8, !tbaa !9
  %129 = fcmp ult double %128, %.sroa.0.0
  br i1 %129, label %.thread449, label %130

.thread449:                                       ; preds = %124, %127
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %288

130:                                              ; preds = %123, %127
  store double %.sroa.0.0, ptr %15, align 8, !tbaa !9
  br i1 %.not410, label %131, label %288

131:                                              ; preds = %130
  store double 1.000000e+00, ptr %16, align 8, !tbaa !11
  %132 = sext i32 %44 to i64
  %133 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %132, i32 1
  store double 0.000000e+00, ptr %133, align 8, !tbaa !13
  br label %288

134:                                              ; preds = %115
  %135 = call double @dlamch_(ptr noundef nonnull @.str.8) #6
  %136 = call double @dlamch_(ptr noundef nonnull @.str.9) #6
  %137 = fdiv double %135, %136
  %138 = fdiv double 1.000000e+00, %137
  %139 = call double @sqrt(double noundef %137) #6
  %140 = call double @sqrt(double noundef %138) #6
  store double %140, ptr %26, align 8, !tbaa !9
  %141 = call double @sqrt(double noundef %135) #6
  %142 = call double @sqrt(double noundef %141) #6
  %143 = fdiv double 1.000000e+00, %142
  %144 = fcmp ole double %140, %143
  %145 = select i1 %144, double %140, double %143
  %146 = load double, ptr %13, align 8, !tbaa !9
  store double %146, ptr %33, align 8, !tbaa !9
  %.not414 = icmp eq i32 %53, 0
  br i1 %.not414, label %150, label %147

147:                                              ; preds = %134
  %148 = load double, ptr %9, align 8, !tbaa !9
  %149 = load double, ptr %10, align 8, !tbaa !9
  br label %150

150:                                              ; preds = %134, %147
  %.sink495 = phi double [ %148, %147 ], [ 0.000000e+00, %134 ]
  %storemerge = phi double [ %149, %147 ], [ 0.000000e+00, %134 ]
  store double %.sink495, ptr %36, align 8
  store double %storemerge, ptr %37, align 8, !tbaa !9
  %151 = call double @zlanhb_(ptr noundef nonnull @.str.10, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %20) #6
  %152 = fcmp ogt double %151, 0.000000e+00
  %153 = fcmp olt double %151, %139
  %or.cond433 = select i1 %152, i1 %153, i1 false
  br i1 %or.cond433, label %156, label %154

154:                                              ; preds = %150
  %155 = fcmp ogt double %151, %145
  br i1 %155, label %156, label %169

156:                                              ; preds = %154, %150
  %.pn = phi double [ %139, %150 ], [ %145, %154 ]
  %storemerge461 = fdiv double %.pn, %151
  store double %storemerge461, ptr %28, align 8, !tbaa !9
  %.str.12..str.11 = select i1 %.not407, ptr @.str.12, ptr @.str.11
  call void @zlascl_(ptr noundef nonnull %.str.12..str.11, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef nonnull @c_b26, ptr noundef nonnull %28, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %23) #6
  %157 = load double, ptr %13, align 8, !tbaa !9
  %158 = fcmp ogt double %157, 0.000000e+00
  br i1 %158, label %159, label %162

159:                                              ; preds = %156
  %160 = load double, ptr %28, align 8, !tbaa !9
  %161 = fmul double %157, %160
  store double %161, ptr %33, align 8, !tbaa !9
  br label %162

162:                                              ; preds = %159, %156
  br i1 %.not414, label %169, label %163

163:                                              ; preds = %162
  %164 = load double, ptr %9, align 8, !tbaa !9
  %165 = load double, ptr %28, align 8, !tbaa !9
  %166 = fmul double %164, %165
  store double %166, ptr %36, align 8, !tbaa !9
  %167 = load double, ptr %10, align 8, !tbaa !9
  %168 = fmul double %165, %167
  store double %168, ptr %37, align 8, !tbaa !9
  br label %169

169:                                              ; preds = %154, %162, %163
  %170 = phi i1 [ true, %162 ], [ true, %163 ], [ false, %154 ]
  %171 = load i32, ptr %3, align 4, !tbaa !5
  %172 = add nsw i32 %171, 1
  %173 = add nsw i32 %172, %171
  %174 = load i32, ptr %31, align 4, !tbaa !5
  %175 = load i32, ptr %19, align 4, !tbaa !5
  %176 = sub i32 %175, %174
  store i32 %176, ptr %35, align 4, !tbaa !5
  %177 = sext i32 %172 to i64
  %178 = getelementptr inbounds double, ptr %48, i64 %177
  %179 = sext i32 %174 to i64
  %180 = getelementptr %struct.doublecomplex, ptr %47, i64 %179
  %181 = getelementptr i8, ptr %180, i64 16
  call void @zhetrd_hb2st_(ptr noundef nonnull @.str.4, ptr noundef %0, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %20, ptr noundef nonnull %178, ptr noundef nonnull %18, ptr noundef nonnull %31, ptr noundef nonnull %181, ptr noundef nonnull %35, ptr noundef nonnull %29) #6
  %.not416 = icmp eq i32 %54, 0
  br i1 %.not416, label %189, label %182

182:                                              ; preds = %169
  %183 = load i32, ptr %11, align 4, !tbaa !5
  %184 = icmp eq i32 %183, 1
  br i1 %184, label %185, label %189

185:                                              ; preds = %182
  %186 = load i32, ptr %12, align 4, !tbaa !5
  %187 = load i32, ptr %3, align 4, !tbaa !5
  %188 = icmp eq i32 %186, %187
  br label %189

189:                                              ; preds = %185, %182, %169
  %190 = phi i1 [ false, %182 ], [ false, %169 ], [ %188, %185 ]
  %or.cond7 = or i1 %60, %190
  br i1 %or.cond7, label %191, label %218

191:                                              ; preds = %189
  %192 = load double, ptr %13, align 8, !tbaa !9
  %193 = fcmp ugt double %192, 0.000000e+00
  br i1 %193, label %218, label %194

194:                                              ; preds = %191
  call void @dcopy_(ptr noundef nonnull %3, ptr noundef %20, ptr noundef nonnull @c__1, ptr noundef %15, ptr noundef nonnull @c__1) #6
  %195 = load i32, ptr %3, align 4, !tbaa !5
  %196 = shl i32 %195, 1
  %197 = add nsw i32 %196, %173
  br i1 %.not410, label %202, label %198

198:                                              ; preds = %194
  %199 = add nsw i32 %195, -1
  store i32 %199, ptr %25, align 4, !tbaa !5
  %200 = sext i32 %197 to i64
  %201 = getelementptr inbounds double, ptr %48, i64 %200
  call void @dcopy_(ptr noundef nonnull %25, ptr noundef nonnull %178, ptr noundef nonnull @c__1, ptr noundef nonnull %201, ptr noundef nonnull @c__1) #6
  call void @dsterf_(ptr noundef nonnull %3, ptr noundef %15, ptr noundef nonnull %201, ptr noundef nonnull %23) #6
  br label %.loopexit464

202:                                              ; preds = %194
  call void @zlacpy_(ptr noundef nonnull @.str.1, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %16, ptr noundef nonnull %17) #6
  %203 = load i32, ptr %3, align 4, !tbaa !5
  %204 = add nsw i32 %203, -1
  store i32 %204, ptr %25, align 4, !tbaa !5
  %205 = sext i32 %197 to i64
  %206 = getelementptr inbounds double, ptr %48, i64 %205
  call void @dcopy_(ptr noundef nonnull %25, ptr noundef nonnull %178, ptr noundef nonnull @c__1, ptr noundef nonnull %206, ptr noundef nonnull @c__1) #6
  %207 = sext i32 %173 to i64
  %208 = getelementptr inbounds double, ptr %48, i64 %207
  call void @zsteqr_(ptr noundef %0, ptr noundef nonnull %3, ptr noundef %15, ptr noundef nonnull %206, ptr noundef %16, ptr noundef nonnull %17, ptr noundef nonnull %208, ptr noundef nonnull %23) #6
  %209 = load i32, ptr %23, align 4, !tbaa !5
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %.thread454

211:                                              ; preds = %202
  %212 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %212, ptr %25, align 4, !tbaa !5
  %.not418465 = icmp slt i32 %212, 1
  br i1 %.not418465, label %.loopexit464, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %211
  %213 = zext nneg i32 %212 to i64
  %214 = shl nuw nsw i64 %213, 2
  call void @llvm.memset.p0.i64(ptr align 4 %22, i8 0, i64 %214, i1 false), !tbaa !5
  br label %.loopexit464

.loopexit464:                                     ; preds = %.lr.ph.preheader, %211, %198
  %.pr453 = load i32, ptr %23, align 4, !tbaa !5
  %215 = icmp eq i32 %.pr453, 0
  br i1 %215, label %216, label %.thread454

216:                                              ; preds = %.loopexit464
  %217 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %217, ptr %14, align 4, !tbaa !5
  br label %.loopexit463

.thread454:                                       ; preds = %202, %.loopexit464
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %218

218:                                              ; preds = %189, %.thread454, %191
  %.435 = select i1 %.not410, i8 66, i8 69
  store i8 %.435, ptr %30, align 1, !tbaa !14
  %219 = load i32, ptr %3, align 4, !tbaa !5
  %220 = add nsw i32 %219, 1
  %221 = add nsw i32 %220, %219
  %222 = sext i32 %220 to i64
  %223 = getelementptr inbounds i32, ptr %49, i64 %222
  %224 = sext i32 %173 to i64
  %225 = getelementptr inbounds double, ptr %48, i64 %224
  %226 = sext i32 %221 to i64
  %227 = getelementptr inbounds i32, ptr %49, i64 %226
  call void @dstebz_(ptr noundef %1, ptr noundef nonnull %30, ptr noundef nonnull %3, ptr noundef nonnull %36, ptr noundef nonnull %37, ptr noundef %11, ptr noundef %12, ptr noundef nonnull %33, ptr noundef %20, ptr noundef nonnull %178, ptr noundef nonnull %14, ptr noundef nonnull %34, ptr noundef %15, ptr noundef %21, ptr noundef nonnull %223, ptr noundef nonnull %225, ptr noundef nonnull %227, ptr noundef nonnull %23) #6
  br i1 %.not410, label %228, label %.loopexit463

228:                                              ; preds = %218
  call void @zstein_(ptr noundef nonnull %3, ptr noundef %20, ptr noundef nonnull %178, ptr noundef nonnull %14, ptr noundef %15, ptr noundef %21, ptr noundef nonnull %223, ptr noundef %16, ptr noundef nonnull %17, ptr noundef nonnull %225, ptr noundef nonnull %227, ptr noundef %22, ptr noundef nonnull %23) #6
  %229 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %229, ptr %25, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %46, i64 16
  %.not421467 = icmp slt i32 %229, 1
  br i1 %.not421467, label %.loopexit463, label %.lr.ph469.preheader

.lr.ph469.preheader:                              ; preds = %228
  %230 = sext i32 %43 to i64
  br label %.lr.ph469

.lr.ph469:                                        ; preds = %.lr.ph469.preheader, %.lr.ph469
  %indvars.iv = phi i64 [ 1, %.lr.ph469.preheader ], [ %indvars.iv.next, %.lr.ph469 ]
  %231 = mul nsw i64 %indvars.iv, %230
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %231
  call void @zcopy_(ptr noundef nonnull %3, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull %18, ptr noundef nonnull @c__1) #6
  call void @zgemv_(ptr noundef nonnull @.str.4, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b2, ptr noundef %7, ptr noundef %8, ptr noundef nonnull %18, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b1, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %232 = load i32, ptr %25, align 4, !tbaa !5
  %233 = sext i32 %232 to i64
  %.not421.not = icmp slt i64 %indvars.iv, %233
  br i1 %.not421.not, label %.lr.ph469, label %.loopexit463, !llvm.loop !15

.loopexit463:                                     ; preds = %.lr.ph469, %228, %218, %216
  br i1 %170, label %234, label %244

234:                                              ; preds = %.loopexit463
  %235 = load i32, ptr %23, align 4, !tbaa !5
  %236 = icmp eq i32 %235, 0
  br i1 %236, label %237, label %239

237:                                              ; preds = %234
  %238 = load i32, ptr %14, align 4, !tbaa !5
  br label %241

239:                                              ; preds = %234
  %240 = add nsw i32 %235, -1
  br label %241

241:                                              ; preds = %239, %237
  %storemerge422 = phi i32 [ %240, %239 ], [ %238, %237 ]
  store i32 %storemerge422, ptr %27, align 4, !tbaa !5
  %242 = load double, ptr %28, align 8, !tbaa !9
  %243 = fdiv double 1.000000e+00, %242
  store double %243, ptr %26, align 8, !tbaa !9
  call void @dscal_(ptr noundef nonnull %27, ptr noundef nonnull %26, ptr noundef %15, ptr noundef nonnull @c__1) #6
  br label %244

244:                                              ; preds = %241, %.loopexit463
  br i1 %.not410, label %245, label %.loopexit

245:                                              ; preds = %244
  %246 = load i32, ptr %14, align 4, !tbaa !5
  %247 = add nsw i32 %246, -1
  store i32 %247, ptr %25, align 4, !tbaa !5
  %invariant.gep476 = getelementptr i8, ptr %46, i64 16
  %.not424480 = icmp slt i32 %246, 2
  br i1 %.not424480, label %.loopexit, label %.lr.ph483.preheader

.lr.ph483.preheader:                              ; preds = %245
  %248 = sext i32 %43 to i64
  br label %.lr.ph483

.lr.ph483:                                        ; preds = %.lr.ph483.preheader, %._crit_edge.thread
  %indvar = phi i32 [ 0, %.lr.ph483.preheader ], [ %indvar.next, %._crit_edge.thread ]
  %indvars.iv491 = phi i64 [ 1, %.lr.ph483.preheader ], [ %indvars.iv.next492, %._crit_edge.thread ]
  %indvars.iv486 = phi i64 [ 2, %.lr.ph483.preheader ], [ %indvars.iv.next487, %._crit_edge.thread ]
  %249 = getelementptr inbounds double, ptr %42, i64 %indvars.iv491
  %250 = load double, ptr %249, align 8, !tbaa !9
  %251 = load i32, ptr %14, align 4, !tbaa !5
  %indvars.iv.next492 = add nuw nsw i64 %indvars.iv491, 1
  %252 = sext i32 %251 to i64
  %.not425470.not = icmp slt i64 %indvars.iv491, %252
  br i1 %.not425470.not, label %.lr.ph474.preheader, label %._crit_edge.thread

.lr.ph474.preheader:                              ; preds = %.lr.ph483
  %253 = xor i32 %indvar, -1
  %254 = add i32 %251, %253
  %reass.sub = sub i32 %251, %indvar
  %xtraiter = and i32 %254, 1
  %255 = icmp eq i32 %reass.sub, 2
  br i1 %255, label %._crit_edge.unr-lcssa, label %.lr.ph474.preheader.new

.lr.ph474.preheader.new:                          ; preds = %.lr.ph474.preheader
  %unroll_iter = and i32 %254, -2
  br label %.lr.ph474

.lr.ph474:                                        ; preds = %.lr.ph474, %.lr.ph474.preheader.new
  %indvars.iv488 = phi i64 [ %indvars.iv486, %.lr.ph474.preheader.new ], [ %indvars.iv.next489.1, %.lr.ph474 ]
  %.0473 = phi double [ %250, %.lr.ph474.preheader.new ], [ %.1.1, %.lr.ph474 ]
  %.1385472 = phi i32 [ 0, %.lr.ph474.preheader.new ], [ %.2.1, %.lr.ph474 ]
  %niter = phi i32 [ 0, %.lr.ph474.preheader.new ], [ %niter.next.1, %.lr.ph474 ]
  %256 = getelementptr inbounds double, ptr %42, i64 %indvars.iv488
  %257 = load double, ptr %256, align 8, !tbaa !9
  %258 = fcmp olt double %257, %.0473
  %259 = trunc nuw i64 %indvars.iv488 to i32
  %.2 = select i1 %258, i32 %259, i32 %.1385472
  %.1 = select i1 %258, double %257, double %.0473
  %260 = getelementptr double, ptr %15, i64 %indvars.iv488
  %261 = load double, ptr %260, align 8, !tbaa !9
  %262 = fcmp olt double %261, %.1
  %263 = trunc i64 %indvars.iv488 to i32
  %264 = add i32 %263, 1
  %.2.1 = select i1 %262, i32 %264, i32 %.2
  %.1.1 = select i1 %262, double %261, double %.1
  %indvars.iv.next489.1 = add nuw nsw i64 %indvars.iv488, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.unr-lcssa, label %.lr.ph474, !llvm.loop !17

._crit_edge.unr-lcssa:                            ; preds = %.lr.ph474, %.lr.ph474.preheader
  %.2.lcssa.ph = phi i32 [ poison, %.lr.ph474.preheader ], [ %.2.1, %.lr.ph474 ]
  %.1.lcssa.ph = phi double [ poison, %.lr.ph474.preheader ], [ %.1.1, %.lr.ph474 ]
  %indvars.iv488.unr = phi i64 [ %indvars.iv486, %.lr.ph474.preheader ], [ %indvars.iv.next489.1, %.lr.ph474 ]
  %.0473.unr = phi double [ %250, %.lr.ph474.preheader ], [ %.1.1, %.lr.ph474 ]
  %.1385472.unr = phi i32 [ 0, %.lr.ph474.preheader ], [ %.2.1, %.lr.ph474 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph474.epil

.lr.ph474.epil:                                   ; preds = %._crit_edge.unr-lcssa
  %265 = getelementptr inbounds double, ptr %42, i64 %indvars.iv488.unr
  %266 = load double, ptr %265, align 8, !tbaa !9
  %267 = fcmp olt double %266, %.0473.unr
  %268 = trunc nuw i64 %indvars.iv488.unr to i32
  %.2.epil = select i1 %267, i32 %268, i32 %.1385472.unr
  %.1.epil = select i1 %267, double %266, double %.0473.unr
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %.lr.ph474.epil
  %.2.lcssa = phi i32 [ %.2.lcssa.ph, %._crit_edge.unr-lcssa ], [ %.2.epil, %.lr.ph474.epil ]
  %.1.lcssa = phi double [ %.1.lcssa.ph, %._crit_edge.unr-lcssa ], [ %.1.epil, %.lr.ph474.epil ]
  %.not426 = icmp eq i32 %.2.lcssa, 0
  br i1 %.not426, label %._crit_edge.thread, label %269

269:                                              ; preds = %._crit_edge
  %270 = sext i32 %.2.lcssa to i64
  %271 = getelementptr inbounds i32, ptr %49, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !5
  %273 = getelementptr inbounds double, ptr %42, i64 %270
  store double %250, ptr %273, align 8, !tbaa !9
  %274 = getelementptr inbounds i32, ptr %49, i64 %indvars.iv491
  %275 = load i32, ptr %274, align 4, !tbaa !5
  store i32 %275, ptr %271, align 4, !tbaa !5
  store double %.1.lcssa, ptr %249, align 8, !tbaa !9
  store i32 %272, ptr %274, align 4, !tbaa !5
  %276 = mul nsw i32 %.2.lcssa, %43
  %277 = sext i32 %276 to i64
  %gep477 = getelementptr %struct.doublecomplex, ptr %invariant.gep476, i64 %277
  %278 = mul nsw i64 %indvars.iv491, %248
  %gep479 = getelementptr %struct.doublecomplex, ptr %invariant.gep476, i64 %278
  call void @zswap_(ptr noundef nonnull %3, ptr noundef %gep477, ptr noundef nonnull @c__1, ptr noundef %gep479, ptr noundef nonnull @c__1) #6
  %279 = load i32, ptr %23, align 4, !tbaa !5
  %.not427 = icmp eq i32 %279, 0
  br i1 %.not427, label %._crit_edge.thread, label %280

280:                                              ; preds = %269
  %281 = getelementptr inbounds i32, ptr %50, i64 %270
  %282 = load i32, ptr %281, align 4, !tbaa !5
  %283 = getelementptr inbounds i32, ptr %50, i64 %indvars.iv491
  %284 = load i32, ptr %283, align 4, !tbaa !5
  store i32 %284, ptr %281, align 4, !tbaa !5
  store i32 %282, ptr %283, align 4, !tbaa !5
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.lr.ph483, %._crit_edge, %280, %269
  %285 = load i32, ptr %25, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %.not424.not = icmp slt i64 %indvars.iv491, %286
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %indvar.next = add i32 %indvar, 1
  br i1 %.not424.not, label %.lr.ph483, label %.loopexit, !llvm.loop !18

.loopexit:                                        ; preds = %._crit_edge.thread, %245, %244
  %287 = sitofp i32 %.0389 to double
  store double %287, ptr %18, align 8, !tbaa !11
  store double 0.000000e+00, ptr %108, align 8, !tbaa !13
  br label %288

288:                                              ; preds = %.thread449, %131, %130, %115, %114, %.loopexit, %.thread444
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #6
  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 @ilaenv2stage_(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

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

declare double @zlanhb_(ptr noundef, 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 @zhetrd_hb2st_(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 @dcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dsterf_(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 @zsteqr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare void @zstein_(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 @zcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @zgemv_(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 @dscal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @zswap_(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.umax.i32(i32, i32) #4

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

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

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass