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

; 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 [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1

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

128:                                              ; preds = %21
  %129 = load i64, ptr %69, align 8, !tbaa !9
  %130 = icmp ne i64 %129, 0
  br i1 %130, label %131, label %133

131:                                              ; preds = %128, %21
  %132 = load ptr, ptr %32, align 8, !tbaa !5
  store i8 78, ptr %132, align 1, !tbaa !11
  store i64 0, ptr %70, align 8, !tbaa !9
  br label %139

133:                                              ; preds = %128
  %134 = load ptr, ptr %32, align 8, !tbaa !5
  %135 = call i64 @lsame_(ptr noundef %134, ptr noundef @.str.3)
  store i64 %135, ptr %70, align 8, !tbaa !9
  %136 = call double @dlamch_(ptr noundef @.str.4)
  store double %136, ptr %75, align 8, !tbaa !12
  %137 = load double, ptr %75, align 8, !tbaa !12
  %138 = fdiv double 1.000000e+00, %137
  store double %138, ptr %73, align 8, !tbaa !12
  br label %139

139:                                              ; preds = %133, %131
  %140 = load i64, ptr %72, align 8, !tbaa !9
  %141 = icmp ne i64 %140, 0
  br i1 %141, label %151, label %142

142:                                              ; preds = %139
  %143 = load i64, ptr %69, align 8, !tbaa !9
  %144 = icmp ne i64 %143, 0
  br i1 %144, label %151, label %145

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

149:                                              ; preds = %145
  %150 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -1, ptr %150, align 8, !tbaa !9
  br label %328

151:                                              ; preds = %145, %142, %139
  %152 = load i64, ptr %71, align 8, !tbaa !9
  %153 = icmp ne i64 %152, 0
  br i1 %153, label %160, label %154

154:                                              ; preds = %151
  %155 = load ptr, ptr %24, align 8, !tbaa !5
  %156 = call i64 @lsame_(ptr noundef %155, ptr noundef @.str.6)
  %157 = icmp ne i64 %156, 0
  br i1 %157, label %160, label %158

158:                                              ; preds = %154
  %159 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -2, ptr %159, align 8, !tbaa !9
  br label %327

160:                                              ; preds = %154, %151
  %161 = load ptr, ptr %25, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = icmp slt i64 %162, 0
  br i1 %163, label %164, label %166

164:                                              ; preds = %160
  %165 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -3, ptr %165, align 8, !tbaa !9
  br label %326

166:                                              ; preds = %160
  %167 = load ptr, ptr %26, align 8, !tbaa !5
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = icmp slt i64 %168, 0
  br i1 %169, label %170, label %172

170:                                              ; preds = %166
  %171 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -4, ptr %171, align 8, !tbaa !9
  br label %325

172:                                              ; preds = %166
  %173 = load ptr, ptr %27, align 8, !tbaa !5
  %174 = load i64, ptr %173, align 8, !tbaa !9
  %175 = icmp slt i64 %174, 0
  br i1 %175, label %176, label %178

176:                                              ; preds = %172
  %177 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -5, ptr %177, align 8, !tbaa !9
  br label %324

178:                                              ; preds = %172
  %179 = load ptr, ptr %29, align 8, !tbaa !5
  %180 = load i64, ptr %179, align 8, !tbaa !9
  %181 = load ptr, ptr %26, align 8, !tbaa !5
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = add nsw i64 %182, 1
  %184 = icmp slt i64 %180, %183
  br i1 %184, label %185, label %187

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

187:                                              ; preds = %178
  %188 = load ptr, ptr %31, align 8, !tbaa !5
  %189 = load i64, ptr %188, align 8, !tbaa !9
  %190 = load ptr, ptr %26, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = add nsw i64 %191, 1
  %193 = icmp slt i64 %189, %192
  br i1 %193, label %194, label %196

194:                                              ; preds = %187
  %195 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -9, ptr %195, align 8, !tbaa !9
  br label %322

196:                                              ; preds = %187
  %197 = load ptr, ptr %23, align 8, !tbaa !5
  %198 = call i64 @lsame_(ptr noundef %197, ptr noundef @.str.5)
  %199 = icmp ne i64 %198, 0
  br i1 %199, label %200, label %209

200:                                              ; preds = %196
  %201 = load i64, ptr %70, align 8, !tbaa !9
  %202 = icmp ne i64 %201, 0
  br i1 %202, label %209, label %203

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

207:                                              ; preds = %203
  %208 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -10, ptr %208, align 8, !tbaa !9
  br label %321

209:                                              ; preds = %203, %200, %196
  %210 = load i64, ptr %70, align 8, !tbaa !9
  %211 = icmp ne i64 %210, 0
  br i1 %211, label %212, label %284

212:                                              ; preds = %209
  %213 = load double, ptr %73, align 8, !tbaa !12
  store double %213, ptr %65, align 8, !tbaa !12
  store double 0.000000e+00, ptr %66, align 8, !tbaa !12
  %214 = load ptr, ptr %25, align 8, !tbaa !5
  %215 = load i64, ptr %214, align 8, !tbaa !9
  store i64 %215, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  br label %216

216:                                              ; preds = %249, %212
  %217 = load i64, ptr %61, align 8, !tbaa !9
  %218 = load i64, ptr %52, align 8, !tbaa !9
  %219 = icmp sle i64 %217, %218
  br i1 %219, label %220, label %252

220:                                              ; preds = %216
  %221 = load double, ptr %65, align 8, !tbaa !12
  store double %221, ptr %57, align 8, !tbaa !12
  %222 = load ptr, ptr %33, align 8, !tbaa !5
  %223 = load i64, ptr %61, align 8, !tbaa !9
  %224 = getelementptr inbounds double, ptr %222, i64 %223
  %225 = load double, ptr %224, align 8, !tbaa !12
  store double %225, ptr %58, align 8, !tbaa !12
  %226 = load double, ptr %57, align 8, !tbaa !12
  %227 = load double, ptr %58, align 8, !tbaa !12
  %228 = fcmp ole double %226, %227
  br i1 %228, label %229, label %231

229:                                              ; preds = %220
  %230 = load double, ptr %57, align 8, !tbaa !12
  br label %233

231:                                              ; preds = %220
  %232 = load double, ptr %58, align 8, !tbaa !12
  br label %233

233:                                              ; preds = %231, %229
  %234 = phi double [ %230, %229 ], [ %232, %231 ]
  store double %234, ptr %65, align 8, !tbaa !12
  %235 = load double, ptr %66, align 8, !tbaa !12
  store double %235, ptr %57, align 8, !tbaa !12
  %236 = load ptr, ptr %33, align 8, !tbaa !5
  %237 = load i64, ptr %61, align 8, !tbaa !9
  %238 = getelementptr inbounds double, ptr %236, i64 %237
  %239 = load double, ptr %238, align 8, !tbaa !12
  store double %239, ptr %58, align 8, !tbaa !12
  %240 = load double, ptr %57, align 8, !tbaa !12
  %241 = load double, ptr %58, align 8, !tbaa !12
  %242 = fcmp oge double %240, %241
  br i1 %242, label %243, label %245

243:                                              ; preds = %233
  %244 = load double, ptr %57, align 8, !tbaa !12
  br label %247

245:                                              ; preds = %233
  %246 = load double, ptr %58, align 8, !tbaa !12
  br label %247

247:                                              ; preds = %245, %243
  %248 = phi double [ %244, %243 ], [ %246, %245 ]
  store double %248, ptr %66, align 8, !tbaa !12
  br label %249

249:                                              ; preds = %247
  %250 = load i64, ptr %61, align 8, !tbaa !9
  %251 = add nsw i64 %250, 1
  store i64 %251, ptr %61, align 8, !tbaa !9
  br label %216, !llvm.loop !14

252:                                              ; preds = %216
  %253 = load double, ptr %65, align 8, !tbaa !12
  %254 = fcmp ole double %253, 0.000000e+00
  br i1 %254, label %255, label %257

255:                                              ; preds = %252
  %256 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -11, ptr %256, align 8, !tbaa !9
  br label %283

257:                                              ; preds = %252
  %258 = load ptr, ptr %25, align 8, !tbaa !5
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = icmp sgt i64 %259, 0
  br i1 %260, label %261, label %281

261:                                              ; preds = %257
  %262 = load double, ptr %65, align 8, !tbaa !12
  %263 = load double, ptr %75, align 8, !tbaa !12
  %264 = fcmp oge double %262, %263
  br i1 %264, label %265, label %267

265:                                              ; preds = %261
  %266 = load double, ptr %65, align 8, !tbaa !12
  br label %269

267:                                              ; preds = %261
  %268 = load double, ptr %75, align 8, !tbaa !12
  br label %269

269:                                              ; preds = %267, %265
  %270 = phi double [ %266, %265 ], [ %268, %267 ]
  %271 = load double, ptr %66, align 8, !tbaa !12
  %272 = load double, ptr %73, align 8, !tbaa !12
  %273 = fcmp ole double %271, %272
  br i1 %273, label %274, label %276

274:                                              ; preds = %269
  %275 = load double, ptr %66, align 8, !tbaa !12
  br label %278

276:                                              ; preds = %269
  %277 = load double, ptr %73, align 8, !tbaa !12
  br label %278

278:                                              ; preds = %276, %274
  %279 = phi double [ %275, %274 ], [ %277, %276 ]
  %280 = fdiv double %270, %279
  store double %280, ptr %67, align 8, !tbaa !12
  br label %282

281:                                              ; preds = %257
  store double 1.000000e+00, ptr %67, align 8, !tbaa !12
  br label %282

282:                                              ; preds = %281, %278
  br label %283

283:                                              ; preds = %282, %255
  br label %284

284:                                              ; preds = %283, %209
  %285 = load ptr, ptr %43, align 8, !tbaa !5
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = icmp eq i64 %286, 0
  br i1 %287, label %288, label %320

288:                                              ; preds = %284
  %289 = load ptr, ptr %35, align 8, !tbaa !5
  %290 = load i64, ptr %289, align 8, !tbaa !9
  %291 = load ptr, ptr %25, align 8, !tbaa !5
  %292 = load i64, ptr %291, align 8, !tbaa !9
  %293 = icmp sge i64 1, %292
  br i1 %293, label %294, label %295

294:                                              ; preds = %288
  br label %298

295:                                              ; preds = %288
  %296 = load ptr, ptr %25, align 8, !tbaa !5
  %297 = load i64, ptr %296, align 8, !tbaa !9
  br label %298

298:                                              ; preds = %295, %294
  %299 = phi i64 [ 1, %294 ], [ %297, %295 ]
  %300 = icmp slt i64 %290, %299
  br i1 %300, label %301, label %303

301:                                              ; preds = %298
  %302 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -13, ptr %302, align 8, !tbaa !9
  br label %319

303:                                              ; preds = %298
  %304 = load ptr, ptr %37, align 8, !tbaa !5
  %305 = load i64, ptr %304, align 8, !tbaa !9
  %306 = load ptr, ptr %25, align 8, !tbaa !5
  %307 = load i64, ptr %306, align 8, !tbaa !9
  %308 = icmp sge i64 1, %307
  br i1 %308, label %309, label %310

309:                                              ; preds = %303
  br label %313

310:                                              ; preds = %303
  %311 = load ptr, ptr %25, align 8, !tbaa !5
  %312 = load i64, ptr %311, align 8, !tbaa !9
  br label %313

313:                                              ; preds = %310, %309
  %314 = phi i64 [ 1, %309 ], [ %312, %310 ]
  %315 = icmp slt i64 %305, %314
  br i1 %315, label %316, label %318

316:                                              ; preds = %313
  %317 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 -15, ptr %317, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %316, %313
  br label %319

319:                                              ; preds = %318, %301
  br label %320

320:                                              ; preds = %319, %284
  br label %321

321:                                              ; preds = %320, %207
  br label %322

322:                                              ; preds = %321, %194
  br label %323

323:                                              ; preds = %322, %185
  br label %324

324:                                              ; preds = %323, %176
  br label %325

325:                                              ; preds = %324, %170
  br label %326

326:                                              ; preds = %325, %164
  br label %327

327:                                              ; preds = %326, %158
  br label %328

328:                                              ; preds = %327, %149
  %329 = load ptr, ptr %43, align 8, !tbaa !5
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = icmp ne i64 %330, 0
  br i1 %331, label %332, label %337

332:                                              ; preds = %328
  %333 = load ptr, ptr %43, align 8, !tbaa !5
  %334 = load i64, ptr %333, align 8, !tbaa !9
  %335 = sub nsw i64 0, %334
  store i64 %335, ptr %52, align 8, !tbaa !9
  %336 = call i32 @xerbla_(ptr noundef @.str.7, ptr noundef %52)
  store i32 0, ptr %22, align 4
  store i32 1, ptr %76, align 4
  br label %740

337:                                              ; preds = %328
  %338 = load i64, ptr %69, align 8, !tbaa !9
  %339 = icmp ne i64 %338, 0
  br i1 %339, label %340, label %368

340:                                              ; preds = %337
  %341 = load ptr, ptr %24, align 8, !tbaa !5
  %342 = load ptr, ptr %25, align 8, !tbaa !5
  %343 = load ptr, ptr %26, align 8, !tbaa !5
  %344 = load ptr, ptr %28, align 8, !tbaa !5
  %345 = load i64, ptr %45, align 8, !tbaa !9
  %346 = getelementptr inbounds %struct.doublecomplex, ptr %344, i64 %345
  %347 = load ptr, ptr %29, align 8, !tbaa !5
  %348 = load ptr, ptr %33, align 8, !tbaa !5
  %349 = getelementptr inbounds double, ptr %348, i64 1
  %350 = call i32 @zpbequ_(ptr noundef %341, ptr noundef %342, ptr noundef %343, ptr noundef %346, ptr noundef %347, ptr noundef %349, ptr noundef %67, ptr noundef %64, ptr noundef %74)
  %351 = load i64, ptr %74, align 8, !tbaa !9
  %352 = icmp eq i64 %351, 0
  br i1 %352, label %353, label %367

353:                                              ; preds = %340
  %354 = load ptr, ptr %24, align 8, !tbaa !5
  %355 = load ptr, ptr %25, align 8, !tbaa !5
  %356 = load ptr, ptr %26, align 8, !tbaa !5
  %357 = load ptr, ptr %28, align 8, !tbaa !5
  %358 = load i64, ptr %45, align 8, !tbaa !9
  %359 = getelementptr inbounds %struct.doublecomplex, ptr %357, i64 %358
  %360 = load ptr, ptr %29, align 8, !tbaa !5
  %361 = load ptr, ptr %33, align 8, !tbaa !5
  %362 = getelementptr inbounds double, ptr %361, i64 1
  %363 = load ptr, ptr %32, align 8, !tbaa !5
  %364 = call i32 @zlaqhb_(ptr noundef %354, ptr noundef %355, ptr noundef %356, ptr noundef %359, ptr noundef %360, ptr noundef %362, ptr noundef %67, ptr noundef %64, ptr noundef %363)
  %365 = load ptr, ptr %32, align 8, !tbaa !5
  %366 = call i64 @lsame_(ptr noundef %365, ptr noundef @.str.3)
  store i64 %366, ptr %70, align 8, !tbaa !9
  br label %367

367:                                              ; preds = %353, %340
  br label %368

368:                                              ; preds = %367, %337
  %369 = load i64, ptr %70, align 8, !tbaa !9
  %370 = icmp ne i64 %369, 0
  br i1 %370, label %371, label %439

371:                                              ; preds = %368
  %372 = load ptr, ptr %27, align 8, !tbaa !5
  %373 = load i64, ptr %372, align 8, !tbaa !9
  store i64 %373, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  br label %374

374:                                              ; preds = %435, %371
  %375 = load i64, ptr %61, align 8, !tbaa !9
  %376 = load i64, ptr %52, align 8, !tbaa !9
  %377 = icmp sle i64 %375, %376
  br i1 %377, label %378, label %438

378:                                              ; preds = %374
  %379 = load ptr, ptr %25, align 8, !tbaa !5
  %380 = load i64, ptr %379, align 8, !tbaa !9
  store i64 %380, ptr %53, align 8, !tbaa !9
  store i64 1, ptr %60, align 8, !tbaa !9
  br label %381

381:                                              ; preds = %431, %378
  %382 = load i64, ptr %60, align 8, !tbaa !9
  %383 = load i64, ptr %53, align 8, !tbaa !9
  %384 = icmp sle i64 %382, %383
  br i1 %384, label %385, label %434

385:                                              ; preds = %381
  %386 = load i64, ptr %60, align 8, !tbaa !9
  %387 = load i64, ptr %61, align 8, !tbaa !9
  %388 = load i64, ptr %48, align 8, !tbaa !9
  %389 = mul nsw i64 %387, %388
  %390 = add nsw i64 %386, %389
  store i64 %390, ptr %54, align 8, !tbaa !9
  %391 = load i64, ptr %60, align 8, !tbaa !9
  store i64 %391, ptr %55, align 8, !tbaa !9
  %392 = load i64, ptr %60, align 8, !tbaa !9
  %393 = load i64, ptr %61, align 8, !tbaa !9
  %394 = load i64, ptr %48, align 8, !tbaa !9
  %395 = mul nsw i64 %393, %394
  %396 = add nsw i64 %392, %395
  store i64 %396, ptr %56, align 8, !tbaa !9
  %397 = load ptr, ptr %33, align 8, !tbaa !5
  %398 = load i64, ptr %55, align 8, !tbaa !9
  %399 = getelementptr inbounds double, ptr %397, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !12
  %401 = load ptr, ptr %34, align 8, !tbaa !5
  %402 = load i64, ptr %56, align 8, !tbaa !9
  %403 = getelementptr inbounds %struct.doublecomplex, ptr %401, i64 %402
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %403, i32 0, i32 0
  %405 = load double, ptr %404, align 8, !tbaa !16
  %406 = fmul double %400, %405
  %407 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  store double %406, ptr %407, align 8, !tbaa !16
  %408 = load ptr, ptr %33, align 8, !tbaa !5
  %409 = load i64, ptr %55, align 8, !tbaa !9
  %410 = getelementptr inbounds double, ptr %408, i64 %409
  %411 = load double, ptr %410, align 8, !tbaa !12
  %412 = load ptr, ptr %34, align 8, !tbaa !5
  %413 = load i64, ptr %56, align 8, !tbaa !9
  %414 = getelementptr inbounds %struct.doublecomplex, ptr %412, i64 %413
  %415 = getelementptr inbounds %struct.doublecomplex, ptr %414, i32 0, i32 1
  %416 = load double, ptr %415, align 8, !tbaa !18
  %417 = fmul double %411, %416
  %418 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  store double %417, ptr %418, align 8, !tbaa !18
  %419 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  %420 = load double, ptr %419, align 8, !tbaa !16
  %421 = load ptr, ptr %34, align 8, !tbaa !5
  %422 = load i64, ptr %54, align 8, !tbaa !9
  %423 = getelementptr inbounds %struct.doublecomplex, ptr %421, i64 %422
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %423, i32 0, i32 0
  store double %420, ptr %424, align 8, !tbaa !16
  %425 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  %426 = load double, ptr %425, align 8, !tbaa !18
  %427 = load ptr, ptr %34, align 8, !tbaa !5
  %428 = load i64, ptr %54, align 8, !tbaa !9
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %427, i64 %428
  %430 = getelementptr inbounds %struct.doublecomplex, ptr %429, i32 0, i32 1
  store double %426, ptr %430, align 8, !tbaa !18
  br label %431

431:                                              ; preds = %385
  %432 = load i64, ptr %60, align 8, !tbaa !9
  %433 = add nsw i64 %432, 1
  store i64 %433, ptr %60, align 8, !tbaa !9
  br label %381, !llvm.loop !19

434:                                              ; preds = %381
  br label %435

435:                                              ; preds = %434
  %436 = load i64, ptr %61, align 8, !tbaa !9
  %437 = add nsw i64 %436, 1
  store i64 %437, ptr %61, align 8, !tbaa !9
  br label %374, !llvm.loop !20

438:                                              ; preds = %374
  br label %439

439:                                              ; preds = %438, %368
  %440 = load i64, ptr %72, align 8, !tbaa !9
  %441 = icmp ne i64 %440, 0
  br i1 %441, label %445, label %442

442:                                              ; preds = %439
  %443 = load i64, ptr %69, align 8, !tbaa !9
  %444 = icmp ne i64 %443, 0
  br i1 %444, label %445, label %562

445:                                              ; preds = %442, %439
  %446 = load i64, ptr %71, align 8, !tbaa !9
  %447 = icmp ne i64 %446, 0
  br i1 %447, label %448, label %502

448:                                              ; preds = %445
  %449 = load ptr, ptr %25, align 8, !tbaa !5
  %450 = load i64, ptr %449, align 8, !tbaa !9
  store i64 %450, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  br label %451

451:                                              ; preds = %498, %448
  %452 = load i64, ptr %61, align 8, !tbaa !9
  %453 = load i64, ptr %52, align 8, !tbaa !9
  %454 = icmp sle i64 %452, %453
  br i1 %454, label %455, label %501

455:                                              ; preds = %451
  %456 = load i64, ptr %61, align 8, !tbaa !9
  %457 = load ptr, ptr %26, align 8, !tbaa !5
  %458 = load i64, ptr %457, align 8, !tbaa !9
  %459 = sub nsw i64 %456, %458
  store i64 %459, ptr %53, align 8, !tbaa !9
  %460 = load i64, ptr %53, align 8, !tbaa !9
  %461 = icmp sge i64 %460, 1
  br i1 %461, label %462, label %464

462:                                              ; preds = %455
  %463 = load i64, ptr %53, align 8, !tbaa !9
  br label %465

464:                                              ; preds = %455
  br label %465

465:                                              ; preds = %464, %462
  %466 = phi i64 [ %463, %462 ], [ 1, %464 ]
  store i64 %466, ptr %62, align 8, !tbaa !9
  %467 = load i64, ptr %61, align 8, !tbaa !9
  %468 = load i64, ptr %62, align 8, !tbaa !9
  %469 = sub nsw i64 %467, %468
  %470 = add nsw i64 %469, 1
  store i64 %470, ptr %53, align 8, !tbaa !9
  %471 = load ptr, ptr %28, align 8, !tbaa !5
  %472 = load ptr, ptr %26, align 8, !tbaa !5
  %473 = load i64, ptr %472, align 8, !tbaa !9
  %474 = add nsw i64 %473, 1
  %475 = load i64, ptr %61, align 8, !tbaa !9
  %476 = sub nsw i64 %474, %475
  %477 = load i64, ptr %62, align 8, !tbaa !9
  %478 = add nsw i64 %476, %477
  %479 = load i64, ptr %61, align 8, !tbaa !9
  %480 = load i64, ptr %44, align 8, !tbaa !9
  %481 = mul nsw i64 %479, %480
  %482 = add nsw i64 %478, %481
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %471, i64 %482
  %484 = load ptr, ptr %30, align 8, !tbaa !5
  %485 = load ptr, ptr %26, align 8, !tbaa !5
  %486 = load i64, ptr %485, align 8, !tbaa !9
  %487 = add nsw i64 %486, 1
  %488 = load i64, ptr %61, align 8, !tbaa !9
  %489 = sub nsw i64 %487, %488
  %490 = load i64, ptr %62, align 8, !tbaa !9
  %491 = add nsw i64 %489, %490
  %492 = load i64, ptr %61, align 8, !tbaa !9
  %493 = load i64, ptr %46, align 8, !tbaa !9
  %494 = mul nsw i64 %492, %493
  %495 = add nsw i64 %491, %494
  %496 = getelementptr inbounds %struct.doublecomplex, ptr %484, i64 %495
  %497 = call i32 @f2c_zcopy(ptr noundef %53, ptr noundef %483, ptr noundef @c__1, ptr noundef %496, ptr noundef @c__1)
  br label %498

498:                                              ; preds = %465
  %499 = load i64, ptr %61, align 8, !tbaa !9
  %500 = add nsw i64 %499, 1
  store i64 %500, ptr %61, align 8, !tbaa !9
  br label %451, !llvm.loop !21

501:                                              ; preds = %451
  br label %546

502:                                              ; preds = %445
  %503 = load ptr, ptr %25, align 8, !tbaa !5
  %504 = load i64, ptr %503, align 8, !tbaa !9
  store i64 %504, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  br label %505

505:                                              ; preds = %542, %502
  %506 = load i64, ptr %61, align 8, !tbaa !9
  %507 = load i64, ptr %52, align 8, !tbaa !9
  %508 = icmp sle i64 %506, %507
  br i1 %508, label %509, label %545

509:                                              ; preds = %505
  %510 = load i64, ptr %61, align 8, !tbaa !9
  %511 = load ptr, ptr %26, align 8, !tbaa !5
  %512 = load i64, ptr %511, align 8, !tbaa !9
  %513 = add nsw i64 %510, %512
  store i64 %513, ptr %53, align 8, !tbaa !9
  %514 = load i64, ptr %53, align 8, !tbaa !9
  %515 = load ptr, ptr %25, align 8, !tbaa !5
  %516 = load i64, ptr %515, align 8, !tbaa !9
  %517 = icmp sle i64 %514, %516
  br i1 %517, label %518, label %520

518:                                              ; preds = %509
  %519 = load i64, ptr %53, align 8, !tbaa !9
  br label %523

520:                                              ; preds = %509
  %521 = load ptr, ptr %25, align 8, !tbaa !5
  %522 = load i64, ptr %521, align 8, !tbaa !9
  br label %523

523:                                              ; preds = %520, %518
  %524 = phi i64 [ %519, %518 ], [ %522, %520 ]
  store i64 %524, ptr %63, align 8, !tbaa !9
  %525 = load i64, ptr %63, align 8, !tbaa !9
  %526 = load i64, ptr %61, align 8, !tbaa !9
  %527 = sub nsw i64 %525, %526
  %528 = add nsw i64 %527, 1
  store i64 %528, ptr %53, align 8, !tbaa !9
  %529 = load ptr, ptr %28, align 8, !tbaa !5
  %530 = load i64, ptr %61, align 8, !tbaa !9
  %531 = load i64, ptr %44, align 8, !tbaa !9
  %532 = mul nsw i64 %530, %531
  %533 = add nsw i64 %532, 1
  %534 = getelementptr inbounds %struct.doublecomplex, ptr %529, i64 %533
  %535 = load ptr, ptr %30, align 8, !tbaa !5
  %536 = load i64, ptr %61, align 8, !tbaa !9
  %537 = load i64, ptr %46, align 8, !tbaa !9
  %538 = mul nsw i64 %536, %537
  %539 = add nsw i64 %538, 1
  %540 = getelementptr inbounds %struct.doublecomplex, ptr %535, i64 %539
  %541 = call i32 @f2c_zcopy(ptr noundef %53, ptr noundef %534, ptr noundef @c__1, ptr noundef %540, ptr noundef @c__1)
  br label %542

542:                                              ; preds = %523
  %543 = load i64, ptr %61, align 8, !tbaa !9
  %544 = add nsw i64 %543, 1
  store i64 %544, ptr %61, align 8, !tbaa !9
  br label %505, !llvm.loop !22

545:                                              ; preds = %505
  br label %546

546:                                              ; preds = %545, %501
  %547 = load ptr, ptr %24, align 8, !tbaa !5
  %548 = load ptr, ptr %25, align 8, !tbaa !5
  %549 = load ptr, ptr %26, align 8, !tbaa !5
  %550 = load ptr, ptr %30, align 8, !tbaa !5
  %551 = load i64, ptr %47, align 8, !tbaa !9
  %552 = getelementptr inbounds %struct.doublecomplex, ptr %550, i64 %551
  %553 = load ptr, ptr %31, align 8, !tbaa !5
  %554 = load ptr, ptr %43, align 8, !tbaa !5
  %555 = call i32 @zpbtrf_(ptr noundef %547, ptr noundef %548, ptr noundef %549, ptr noundef %552, ptr noundef %553, ptr noundef %554)
  %556 = load ptr, ptr %43, align 8, !tbaa !5
  %557 = load i64, ptr %556, align 8, !tbaa !9
  %558 = icmp sgt i64 %557, 0
  br i1 %558, label %559, label %561

559:                                              ; preds = %546
  %560 = load ptr, ptr %38, align 8, !tbaa !5
  store double 0.000000e+00, ptr %560, align 8, !tbaa !12
  store i32 0, ptr %22, align 4
  store i32 1, ptr %76, align 4
  br label %740

561:                                              ; preds = %546
  br label %562

562:                                              ; preds = %561, %442
  %563 = load ptr, ptr %24, align 8, !tbaa !5
  %564 = load ptr, ptr %25, align 8, !tbaa !5
  %565 = load ptr, ptr %26, align 8, !tbaa !5
  %566 = load ptr, ptr %28, align 8, !tbaa !5
  %567 = load i64, ptr %45, align 8, !tbaa !9
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %566, i64 %567
  %569 = load ptr, ptr %29, align 8, !tbaa !5
  %570 = load ptr, ptr %42, align 8, !tbaa !5
  %571 = getelementptr inbounds double, ptr %570, i64 1
  %572 = call double @zlanhb_(ptr noundef @.str.8, ptr noundef %563, ptr noundef %564, ptr noundef %565, ptr noundef %568, ptr noundef %569, ptr noundef %571)
  store double %572, ptr %68, align 8, !tbaa !12
  %573 = load ptr, ptr %24, align 8, !tbaa !5
  %574 = load ptr, ptr %25, align 8, !tbaa !5
  %575 = load ptr, ptr %26, align 8, !tbaa !5
  %576 = load ptr, ptr %30, align 8, !tbaa !5
  %577 = load i64, ptr %47, align 8, !tbaa !9
  %578 = getelementptr inbounds %struct.doublecomplex, ptr %576, i64 %577
  %579 = load ptr, ptr %31, align 8, !tbaa !5
  %580 = load ptr, ptr %38, align 8, !tbaa !5
  %581 = load ptr, ptr %41, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 1
  %583 = load ptr, ptr %42, align 8, !tbaa !5
  %584 = getelementptr inbounds double, ptr %583, i64 1
  %585 = load ptr, ptr %43, align 8, !tbaa !5
  %586 = call i32 @zpbcon_(ptr noundef %573, ptr noundef %574, ptr noundef %575, ptr noundef %578, ptr noundef %579, ptr noundef %68, ptr noundef %580, ptr noundef %582, ptr noundef %584, ptr noundef %585)
  %587 = load ptr, ptr %25, align 8, !tbaa !5
  %588 = load ptr, ptr %27, align 8, !tbaa !5
  %589 = load ptr, ptr %34, align 8, !tbaa !5
  %590 = load i64, ptr %49, align 8, !tbaa !9
  %591 = getelementptr inbounds %struct.doublecomplex, ptr %589, i64 %590
  %592 = load ptr, ptr %35, align 8, !tbaa !5
  %593 = load ptr, ptr %36, align 8, !tbaa !5
  %594 = load i64, ptr %51, align 8, !tbaa !9
  %595 = getelementptr inbounds %struct.doublecomplex, ptr %593, i64 %594
  %596 = load ptr, ptr %37, align 8, !tbaa !5
  %597 = call i32 @zlacpy_(ptr noundef @.str.9, ptr noundef %587, ptr noundef %588, ptr noundef %591, ptr noundef %592, ptr noundef %595, ptr noundef %596)
  %598 = load ptr, ptr %24, align 8, !tbaa !5
  %599 = load ptr, ptr %25, align 8, !tbaa !5
  %600 = load ptr, ptr %26, align 8, !tbaa !5
  %601 = load ptr, ptr %27, align 8, !tbaa !5
  %602 = load ptr, ptr %30, align 8, !tbaa !5
  %603 = load i64, ptr %47, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %602, i64 %603
  %605 = load ptr, ptr %31, align 8, !tbaa !5
  %606 = load ptr, ptr %36, align 8, !tbaa !5
  %607 = load i64, ptr %51, align 8, !tbaa !9
  %608 = getelementptr inbounds %struct.doublecomplex, ptr %606, i64 %607
  %609 = load ptr, ptr %37, align 8, !tbaa !5
  %610 = load ptr, ptr %43, align 8, !tbaa !5
  %611 = call i32 @zpbtrs_(ptr noundef %598, ptr noundef %599, ptr noundef %600, ptr noundef %601, ptr noundef %604, ptr noundef %605, ptr noundef %608, ptr noundef %609, ptr noundef %610)
  %612 = load ptr, ptr %24, align 8, !tbaa !5
  %613 = load ptr, ptr %25, align 8, !tbaa !5
  %614 = load ptr, ptr %26, align 8, !tbaa !5
  %615 = load ptr, ptr %27, align 8, !tbaa !5
  %616 = load ptr, ptr %28, align 8, !tbaa !5
  %617 = load i64, ptr %45, align 8, !tbaa !9
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %616, i64 %617
  %619 = load ptr, ptr %29, align 8, !tbaa !5
  %620 = load ptr, ptr %30, align 8, !tbaa !5
  %621 = load i64, ptr %47, align 8, !tbaa !9
  %622 = getelementptr inbounds %struct.doublecomplex, ptr %620, i64 %621
  %623 = load ptr, ptr %31, align 8, !tbaa !5
  %624 = load ptr, ptr %34, align 8, !tbaa !5
  %625 = load i64, ptr %49, align 8, !tbaa !9
  %626 = getelementptr inbounds %struct.doublecomplex, ptr %624, i64 %625
  %627 = load ptr, ptr %35, align 8, !tbaa !5
  %628 = load ptr, ptr %36, align 8, !tbaa !5
  %629 = load i64, ptr %51, align 8, !tbaa !9
  %630 = getelementptr inbounds %struct.doublecomplex, ptr %628, i64 %629
  %631 = load ptr, ptr %37, align 8, !tbaa !5
  %632 = load ptr, ptr %39, align 8, !tbaa !5
  %633 = getelementptr inbounds double, ptr %632, i64 1
  %634 = load ptr, ptr %40, align 8, !tbaa !5
  %635 = getelementptr inbounds double, ptr %634, i64 1
  %636 = load ptr, ptr %41, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %636, i64 1
  %638 = load ptr, ptr %42, align 8, !tbaa !5
  %639 = getelementptr inbounds double, ptr %638, i64 1
  %640 = load ptr, ptr %43, align 8, !tbaa !5
  %641 = call i32 @zpbrfs_(ptr noundef %612, ptr noundef %613, ptr noundef %614, ptr noundef %615, ptr noundef %618, ptr noundef %619, ptr noundef %622, ptr noundef %623, ptr noundef %626, ptr noundef %627, ptr noundef %630, ptr noundef %631, ptr noundef %633, ptr noundef %635, ptr noundef %637, ptr noundef %639, ptr noundef %640)
  %642 = load i64, ptr %70, align 8, !tbaa !9
  %643 = icmp ne i64 %642, 0
  br i1 %643, label %644, label %729

644:                                              ; preds = %562
  %645 = load ptr, ptr %27, align 8, !tbaa !5
  %646 = load i64, ptr %645, align 8, !tbaa !9
  store i64 %646, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  br label %647

647:                                              ; preds = %708, %644
  %648 = load i64, ptr %61, align 8, !tbaa !9
  %649 = load i64, ptr %52, align 8, !tbaa !9
  %650 = icmp sle i64 %648, %649
  br i1 %650, label %651, label %711

651:                                              ; preds = %647
  %652 = load ptr, ptr %25, align 8, !tbaa !5
  %653 = load i64, ptr %652, align 8, !tbaa !9
  store i64 %653, ptr %53, align 8, !tbaa !9
  store i64 1, ptr %60, align 8, !tbaa !9
  br label %654

654:                                              ; preds = %704, %651
  %655 = load i64, ptr %60, align 8, !tbaa !9
  %656 = load i64, ptr %53, align 8, !tbaa !9
  %657 = icmp sle i64 %655, %656
  br i1 %657, label %658, label %707

658:                                              ; preds = %654
  %659 = load i64, ptr %60, align 8, !tbaa !9
  %660 = load i64, ptr %61, align 8, !tbaa !9
  %661 = load i64, ptr %50, align 8, !tbaa !9
  %662 = mul nsw i64 %660, %661
  %663 = add nsw i64 %659, %662
  store i64 %663, ptr %54, align 8, !tbaa !9
  %664 = load i64, ptr %60, align 8, !tbaa !9
  store i64 %664, ptr %55, align 8, !tbaa !9
  %665 = load i64, ptr %60, align 8, !tbaa !9
  %666 = load i64, ptr %61, align 8, !tbaa !9
  %667 = load i64, ptr %50, align 8, !tbaa !9
  %668 = mul nsw i64 %666, %667
  %669 = add nsw i64 %665, %668
  store i64 %669, ptr %56, align 8, !tbaa !9
  %670 = load ptr, ptr %33, align 8, !tbaa !5
  %671 = load i64, ptr %55, align 8, !tbaa !9
  %672 = getelementptr inbounds double, ptr %670, i64 %671
  %673 = load double, ptr %672, align 8, !tbaa !12
  %674 = load ptr, ptr %36, align 8, !tbaa !5
  %675 = load i64, ptr %56, align 8, !tbaa !9
  %676 = getelementptr inbounds %struct.doublecomplex, ptr %674, i64 %675
  %677 = getelementptr inbounds %struct.doublecomplex, ptr %676, i32 0, i32 0
  %678 = load double, ptr %677, align 8, !tbaa !16
  %679 = fmul double %673, %678
  %680 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  store double %679, ptr %680, align 8, !tbaa !16
  %681 = load ptr, ptr %33, align 8, !tbaa !5
  %682 = load i64, ptr %55, align 8, !tbaa !9
  %683 = getelementptr inbounds double, ptr %681, i64 %682
  %684 = load double, ptr %683, align 8, !tbaa !12
  %685 = load ptr, ptr %36, align 8, !tbaa !5
  %686 = load i64, ptr %56, align 8, !tbaa !9
  %687 = getelementptr inbounds %struct.doublecomplex, ptr %685, i64 %686
  %688 = getelementptr inbounds %struct.doublecomplex, ptr %687, i32 0, i32 1
  %689 = load double, ptr %688, align 8, !tbaa !18
  %690 = fmul double %684, %689
  %691 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  store double %690, ptr %691, align 8, !tbaa !18
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  %693 = load double, ptr %692, align 8, !tbaa !16
  %694 = load ptr, ptr %36, align 8, !tbaa !5
  %695 = load i64, ptr %54, align 8, !tbaa !9
  %696 = getelementptr inbounds %struct.doublecomplex, ptr %694, i64 %695
  %697 = getelementptr inbounds %struct.doublecomplex, ptr %696, i32 0, i32 0
  store double %693, ptr %697, align 8, !tbaa !16
  %698 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  %699 = load double, ptr %698, align 8, !tbaa !18
  %700 = load ptr, ptr %36, align 8, !tbaa !5
  %701 = load i64, ptr %54, align 8, !tbaa !9
  %702 = getelementptr inbounds %struct.doublecomplex, ptr %700, i64 %701
  %703 = getelementptr inbounds %struct.doublecomplex, ptr %702, i32 0, i32 1
  store double %699, ptr %703, align 8, !tbaa !18
  br label %704

704:                                              ; preds = %658
  %705 = load i64, ptr %60, align 8, !tbaa !9
  %706 = add nsw i64 %705, 1
  store i64 %706, ptr %60, align 8, !tbaa !9
  br label %654, !llvm.loop !23

707:                                              ; preds = %654
  br label %708

708:                                              ; preds = %707
  %709 = load i64, ptr %61, align 8, !tbaa !9
  %710 = add nsw i64 %709, 1
  store i64 %710, ptr %61, align 8, !tbaa !9
  br label %647, !llvm.loop !24

711:                                              ; preds = %647
  %712 = load ptr, ptr %27, align 8, !tbaa !5
  %713 = load i64, ptr %712, align 8, !tbaa !9
  store i64 %713, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  br label %714

714:                                              ; preds = %725, %711
  %715 = load i64, ptr %61, align 8, !tbaa !9
  %716 = load i64, ptr %52, align 8, !tbaa !9
  %717 = icmp sle i64 %715, %716
  br i1 %717, label %718, label %728

718:                                              ; preds = %714
  %719 = load double, ptr %67, align 8, !tbaa !12
  %720 = load ptr, ptr %39, align 8, !tbaa !5
  %721 = load i64, ptr %61, align 8, !tbaa !9
  %722 = getelementptr inbounds double, ptr %720, i64 %721
  %723 = load double, ptr %722, align 8, !tbaa !12
  %724 = fdiv double %723, %719
  store double %724, ptr %722, align 8, !tbaa !12
  br label %725

725:                                              ; preds = %718
  %726 = load i64, ptr %61, align 8, !tbaa !9
  %727 = add nsw i64 %726, 1
  store i64 %727, ptr %61, align 8, !tbaa !9
  br label %714, !llvm.loop !25

728:                                              ; preds = %714
  br label %729

729:                                              ; preds = %728, %562
  %730 = load ptr, ptr %38, align 8, !tbaa !5
  %731 = load double, ptr %730, align 8, !tbaa !12
  %732 = call double @dlamch_(ptr noundef @.str.10)
  %733 = fcmp olt double %731, %732
  br i1 %733, label %734, label %739

734:                                              ; preds = %729
  %735 = load ptr, ptr %25, align 8, !tbaa !5
  %736 = load i64, ptr %735, align 8, !tbaa !9
  %737 = add nsw i64 %736, 1
  %738 = load ptr, ptr %43, align 8, !tbaa !5
  store i64 %737, ptr %738, align 8, !tbaa !9
  br label %739

739:                                              ; preds = %734, %729
  store i32 0, ptr %22, align 4
  store i32 1, ptr %76, align 4
  br label %740

740:                                              ; preds = %739, %559, %332
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  %741 = load i32, ptr %22, align 4
  ret i32 %741
}

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

declare i32 @zpbrfs_(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

; 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 }

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

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


; 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 [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zpbsvx_(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) local_unnamed_addr #0 {
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #4
  %28 = load i64, ptr %6, align 8, !tbaa !5
  %29 = xor i64 %28, -1
  %30 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %29
  %31 = load i64, ptr %8, align 8, !tbaa !5
  %32 = xor i64 %31, -1
  %33 = getelementptr inbounds %struct.doublecomplex, ptr %7, i64 %32
  %34 = getelementptr inbounds i8, ptr %10, i64 -8
  %35 = load i64, ptr %12, align 8, !tbaa !5
  %36 = xor i64 %35, -1
  %37 = getelementptr inbounds %struct.doublecomplex, ptr %11, i64 %36
  %38 = load i64, ptr %14, align 8, !tbaa !5
  %39 = xor i64 %38, -1
  %40 = getelementptr inbounds %struct.doublecomplex, ptr %13, i64 %39
  %41 = getelementptr inbounds i8, ptr %16, i64 -8
  store i64 0, ptr %20, align 8, !tbaa !5
  %42 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %43 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %44 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #4
  %45 = icmp ne i64 %42, 0
  %46 = icmp ne i64 %43, 0
  %or.cond = select i1 %45, i1 true, i1 %46
  br i1 %or.cond, label %.thread, label %47

.thread:                                          ; preds = %21
  store i8 78, ptr %9, align 1, !tbaa !9
  br label %52

47:                                               ; preds = %21
  %48 = tail call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %49 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #4
  %50 = fdiv double 1.000000e+00, %49
  %51 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.5) #4
  %.not = icmp eq i64 %51, 0
  br i1 %.not, label %.thread328.sink.split, label %52

52:                                               ; preds = %.thread, %47
  %.0323 = phi double [ undef, %.thread ], [ %49, %47 ]
  %.0283322 = phi double [ undef, %.thread ], [ %50, %47 ]
  %.0285321 = phi i64 [ 0, %.thread ], [ %48, %47 ]
  %.not299 = icmp eq i64 %44, 0
  br i1 %.not299, label %53, label %55

53:                                               ; preds = %52
  %54 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.6) #4
  %.not300 = icmp eq i64 %54, 0
  br i1 %.not300, label %.thread328.sink.split, label %55

55:                                               ; preds = %53, %52
  %56 = load i64, ptr %2, align 8, !tbaa !5
  %57 = icmp slt i64 %56, 0
  br i1 %57, label %.thread328.sink.split, label %58

58:                                               ; preds = %55
  %59 = load i64, ptr %3, align 8, !tbaa !5
  %60 = icmp slt i64 %59, 0
  br i1 %60, label %.thread328.sink.split, label %61

61:                                               ; preds = %58
  %62 = load i64, ptr %4, align 8, !tbaa !5
  %63 = icmp slt i64 %62, 0
  br i1 %63, label %.thread328.sink.split, label %64

64:                                               ; preds = %61
  %65 = load i64, ptr %6, align 8, !tbaa !5
  %.not301 = icmp sgt i64 %65, %59
  br i1 %.not301, label %66, label %.thread328.sink.split

66:                                               ; preds = %64
  %67 = load i64, ptr %8, align 8, !tbaa !5
  %.not302 = icmp sgt i64 %67, %59
  br i1 %.not302, label %68, label %.thread328.sink.split

68:                                               ; preds = %66
  %69 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.5) #4
  %70 = icmp eq i64 %69, 0
  %71 = icmp ne i64 %.0285321, 0
  %or.cond5 = select i1 %70, i1 true, i1 %71
  br i1 %or.cond5, label %74, label %72

72:                                               ; preds = %68
  %73 = tail call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str) #4
  %.not303 = icmp eq i64 %73, 0
  br i1 %.not303, label %.thread328.sink.split, label %.thread324

74:                                               ; preds = %68
  br i1 %71, label %75, label %.thread324

75:                                               ; preds = %74
  %76 = load i64, ptr %2, align 8, !tbaa !5
  %.not304334 = icmp slt i64 %76, 1
  br i1 %.not304334, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %75
  %xtraiter = and i64 %76, 1
  %77 = icmp eq i64 %76, 1
  br i1 %77, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %76, 9223372036854775806
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0286337 = phi double [ 0.000000e+00, %.lr.ph.preheader.new ], [ %89, %.lr.ph ]
  %.0287336 = phi double [ %.0283322, %.lr.ph.preheader.new ], [ %87, %.lr.ph ]
  %.0288335 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %90, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %78 = getelementptr inbounds double, ptr %34, i64 %.0288335
  %79 = load double, ptr %78, align 8, !tbaa !10
  %80 = fcmp ole double %.0287336, %79
  %81 = select i1 %80, double %.0287336, double %79
  %82 = fcmp oge double %.0286337, %79
  %83 = select i1 %82, double %.0286337, double %79
  %84 = getelementptr double, ptr %10, i64 %.0288335
  %85 = load double, ptr %84, align 8, !tbaa !10
  %86 = fcmp ole double %81, %85
  %87 = select i1 %86, double %81, double %85
  %88 = fcmp oge double %83, %85
  %89 = select i1 %88, double %83, double %85
  %90 = add nuw i64 %.0288335, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !12

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %.lcssa456.ph = phi double [ poison, %.lr.ph.preheader ], [ %87, %.lr.ph ]
  %.lcssa455.ph = phi double [ poison, %.lr.ph.preheader ], [ %89, %.lr.ph ]
  %.0286337.unr = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %89, %.lr.ph ]
  %.0287336.unr = phi double [ %.0283322, %.lr.ph.preheader ], [ %87, %.lr.ph ]
  %.0288335.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %90, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa
  %91 = getelementptr inbounds double, ptr %34, i64 %.0288335.unr
  %92 = load double, ptr %91, align 8, !tbaa !10
  %93 = fcmp ole double %.0287336.unr, %92
  %94 = select i1 %93, double %.0287336.unr, double %92
  %95 = fcmp oge double %.0286337.unr, %92
  %96 = select i1 %95, double %.0286337.unr, double %92
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %75
  %.0287.lcssa = phi double [ %.0283322, %75 ], [ %.lcssa456.ph, %._crit_edge.loopexit.unr-lcssa ], [ %94, %.lr.ph.epil ]
  %.0286.lcssa = phi double [ 0.000000e+00, %75 ], [ %.lcssa455.ph, %._crit_edge.loopexit.unr-lcssa ], [ %96, %.lr.ph.epil ]
  %97 = fcmp ugt double %.0287.lcssa, 0.000000e+00
  br i1 %97, label %98, label %.thread328.sink.split

98:                                               ; preds = %._crit_edge
  %99 = icmp sgt i64 %76, 0
  br i1 %99, label %100, label %106

100:                                              ; preds = %98
  %101 = fcmp oge double %.0287.lcssa, %.0323
  %102 = select i1 %101, double %.0287.lcssa, double %.0323
  %103 = fcmp ole double %.0286.lcssa, %.0283322
  %104 = select i1 %103, double %.0286.lcssa, double %.0283322
  %105 = fdiv double %102, %104
  store double %105, ptr %25, align 8, !tbaa !10
  br label %.thread324

106:                                              ; preds = %98
  store double 1.000000e+00, ptr %25, align 8, !tbaa !10
  br label %.thread324

.thread324:                                       ; preds = %72, %106, %100, %74
  %.pr = load i64, ptr %20, align 8, !tbaa !5
  %107 = icmp eq i64 %.pr, 0
  br i1 %107, label %108, label %.thread328

108:                                              ; preds = %.thread324
  %109 = load i64, ptr %12, align 8, !tbaa !5
  %110 = load i64, ptr %2, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.smax.i64(i64 %110, i64 1)
  %111 = icmp slt i64 %109, %spec.select
  br i1 %111, label %.thread328.sink.split, label %112

112:                                              ; preds = %108
  %113 = load i64, ptr %14, align 8, !tbaa !5
  %114 = icmp slt i64 %113, %spec.select
  br i1 %114, label %.thread328.sink.split, label %118

.thread328.sink.split:                            ; preds = %112, %108, %._crit_edge, %72, %66, %64, %61, %58, %55, %53, %47
  %.sink = phi i64 [ -1, %47 ], [ -2, %53 ], [ -3, %55 ], [ -4, %58 ], [ -5, %61 ], [ -7, %64 ], [ -9, %66 ], [ -10, %72 ], [ -11, %._crit_edge ], [ -13, %108 ], [ -15, %112 ]
  store i64 %.sink, ptr %20, align 8, !tbaa !5
  br label %.thread328

.thread328:                                       ; preds = %.thread328.sink.split, %.thread324
  %115 = phi i64 [ %.pr, %.thread324 ], [ %.sink, %.thread328.sink.split ]
  %116 = sub nsw i64 0, %115
  store i64 %116, ptr %22, align 8, !tbaa !5
  %117 = call i32 @xerbla_(ptr noundef nonnull @.str.7, ptr noundef nonnull %22) #4
  br label %275

118:                                              ; preds = %112
  br i1 %46, label %119, label %126

119:                                              ; preds = %118
  %120 = call i32 @zpbequ_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %10, ptr noundef nonnull %25, ptr noundef nonnull %24, ptr noundef nonnull %27) #4
  %121 = load i64, ptr %27, align 8, !tbaa !5
  %122 = icmp eq i64 %121, 0
  br i1 %122, label %123, label %126

123:                                              ; preds = %119
  %124 = call i32 @zlaqhb_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %10, ptr noundef nonnull %25, ptr noundef nonnull %24, ptr noundef %9) #4
  %125 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  br label %126

126:                                              ; preds = %119, %123, %118
  %.1 = phi i64 [ %125, %123 ], [ %.0285321, %119 ], [ %.0285321, %118 ]
  %.not306 = icmp eq i64 %.1, 0
  br i1 %.not306, label %175, label %127

127:                                              ; preds = %126
  %128 = load i64, ptr %4, align 8, !tbaa !5
  %.not307344 = icmp slt i64 %128, 1
  br i1 %.not307344, label %.loopexit333, label %.lr.ph347

.lr.ph347:                                        ; preds = %127
  %129 = load i64, ptr %2, align 8, !tbaa !5
  %.not315339 = icmp slt i64 %129, 1
  br i1 %.not315339, label %.loopexit333, label %.lr.ph342.preheader

.lr.ph342.preheader:                              ; preds = %.lr.ph347
  %130 = add nsw i64 %129, -1
  %131 = shl i64 %35, 4
  %132 = add nuw i64 %128, 1152921504606846975
  %133 = mul i64 %35, %132
  %134 = add i64 %133, %129
  %135 = shl i64 %134, 4
  %scevgep400 = getelementptr i8, ptr %11, i64 %135
  %136 = shl i64 %129, 3
  %scevgep401 = getelementptr i8, ptr %10, i64 %136
  %min.iters.check = icmp ult i64 %129, 12
  %mul.result = shl i64 %130, 4
  %mul.result398 = shl i64 %130, 4
  %mul.overflow399 = icmp ugt i64 %130, 1152921504606846975
  %bound0 = icmp ugt ptr %scevgep401, %11
  %bound1 = icmp ugt ptr %scevgep400, %10
  %found.conflict = and i1 %bound0, %bound1
  %.mask = and i64 %35, 576460752303423488
  %stride.check = icmp ne i64 %.mask, 0
  %137 = or i1 %found.conflict, %stride.check
  %n.vec = and i64 %129, 2305843009213693950
  %ind.end = or i64 %129, 1
  %cmp.n = icmp eq i64 %129, %n.vec
  %xtraiter459 = and i64 %129, 1
  %lcmp.mod460.not = icmp eq i64 %xtraiter459, 0
  br label %.lr.ph342

.lr.ph342:                                        ; preds = %.lr.ph342.preheader, %._crit_edge343
  %indvar = phi i64 [ 0, %.lr.ph342.preheader ], [ %indvar.next, %._crit_edge343 ]
  %.1289345 = phi i64 [ 1, %.lr.ph342.preheader ], [ %174, %._crit_edge343 ]
  %138 = mul nsw i64 %.1289345, %35
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %37, i64 %138
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph342
  %139 = mul i64 %131, %indvar
  %scevgep396 = getelementptr i8, ptr %11, i64 %139
  %140 = or disjoint i64 %139, 8
  %scevgep = getelementptr i8, ptr %11, i64 %140
  %141 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %142 = icmp ult ptr %141, %scevgep
  %143 = getelementptr i8, ptr %scevgep396, i64 %mul.result398
  %144 = icmp ult ptr %143, %scevgep396
  %145 = or i1 %144, %mul.overflow399
  %146 = or i1 %142, %145
  %brmerge = select i1 %146, i1 true, i1 %137
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.scevcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.scevcheck ]
  %offset.idx = or disjoint i64 %index, 1
  %147 = getelementptr double, ptr %10, i64 %index
  %wide.load = load <2 x double>, ptr %147, align 8, !tbaa !10, !alias.scope !14
  %148 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %148, align 8, !tbaa !10
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec402 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %149 = fmul <2 x double> %wide.load, %strided.vec
  %150 = fmul <2 x double> %wide.load, %strided.vec402
  %interleaved.vec = shufflevector <2 x double> %149, <2 x double> %150, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %148, align 8, !tbaa !10
  %index.next = add nuw i64 %index, 2
  %151 = icmp eq i64 %index.next, %n.vec
  br i1 %151, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge343, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %vector.scevcheck, %middle.block, %.lr.ph342
  %.0290340.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph342 ], [ %ind.end, %middle.block ]
  br i1 %lcmp.mod460.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %152 = getelementptr inbounds double, ptr %34, i64 %.0290340.ph
  %153 = load double, ptr %152, align 8, !tbaa !10
  %gep.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0290340.ph
  %154 = load <2 x double>, ptr %gep.prol, align 8, !tbaa !10
  %155 = insertelement <2 x double> poison, double %153, i64 0
  %156 = shufflevector <2 x double> %155, <2 x double> poison, <2 x i32> zeroinitializer
  %157 = fmul <2 x double> %156, %154
  store <2 x double> %157, ptr %gep.prol, align 8, !tbaa !10
  %158 = add nuw nsw i64 %.0290340.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.0290340.unr = phi i64 [ %.0290340.ph, %scalar.ph.preheader ], [ %158, %scalar.ph.prol ]
  %159 = icmp eq i64 %129, %.0290340.ph
  br i1 %159, label %._crit_edge343, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.0290340 = phi i64 [ %173, %scalar.ph ], [ %.0290340.unr, %scalar.ph.prol.loopexit ]
  %160 = getelementptr inbounds double, ptr %34, i64 %.0290340
  %161 = load double, ptr %160, align 8, !tbaa !10
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0290340
  %162 = load <2 x double>, ptr %gep, align 8, !tbaa !10
  %163 = insertelement <2 x double> poison, double %161, i64 0
  %164 = shufflevector <2 x double> %163, <2 x double> poison, <2 x i32> zeroinitializer
  %165 = fmul <2 x double> %164, %162
  store <2 x double> %165, ptr %gep, align 8, !tbaa !10
  %166 = add nuw i64 %.0290340, 1
  %167 = getelementptr double, ptr %10, i64 %.0290340
  %168 = load double, ptr %167, align 8, !tbaa !10
  %gep.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %166
  %169 = load <2 x double>, ptr %gep.1, align 8, !tbaa !10
  %170 = insertelement <2 x double> poison, double %168, i64 0
  %171 = shufflevector <2 x double> %170, <2 x double> poison, <2 x i32> zeroinitializer
  %172 = fmul <2 x double> %171, %169
  store <2 x double> %172, ptr %gep.1, align 8, !tbaa !10
  %173 = add nuw i64 %.0290340, 2
  %exitcond383.not.1 = icmp eq i64 %166, %129
  br i1 %exitcond383.not.1, label %._crit_edge343, label %scalar.ph, !llvm.loop !20

._crit_edge343:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %174 = add nuw i64 %.1289345, 1
  %exitcond384.not = icmp eq i64 %.1289345, %128
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond384.not, label %.loopexit333, label %.lr.ph342, !llvm.loop !21

.loopexit333:                                     ; preds = %._crit_edge343, %.lr.ph347, %127
  %.lcssa = phi i64 [ undef, %127 ], [ %129, %.lr.ph347 ], [ %129, %._crit_edge343 ]
  store i64 %.lcssa, ptr %23, align 8, !tbaa !5
  br label %175

175:                                              ; preds = %.loopexit333, %126
  br i1 %or.cond, label %176, label %206

176:                                              ; preds = %175
  %177 = load i64, ptr %2, align 8, !tbaa !5
  br i1 %.not299, label %193, label %178

178:                                              ; preds = %176
  %.not311349 = icmp slt i64 %177, 1
  br i1 %.not311349, label %.loopexit331, label %.lr.ph352

.lr.ph352:                                        ; preds = %178, %.lr.ph352
  %.2350 = phi i64 [ %182, %.lr.ph352 ], [ 1, %178 ]
  %179 = load i64, ptr %3, align 8, !tbaa !5
  %180 = sub nsw i64 %.2350, %179
  %181 = call i64 @llvm.smax.i64(i64 %180, i64 1)
  %182 = add nuw i64 %.2350, 1
  %183 = sub i64 %182, %181
  store i64 %183, ptr %23, align 8, !tbaa !5
  %reass.sub = sub i64 %179, %.2350
  %184 = add i64 %reass.sub, 1
  %185 = add nsw i64 %184, %181
  %186 = mul nsw i64 %.2350, %28
  %187 = getelementptr %struct.doublecomplex, ptr %30, i64 %185
  %188 = getelementptr %struct.doublecomplex, ptr %187, i64 %186
  %189 = mul nsw i64 %.2350, %31
  %190 = getelementptr %struct.doublecomplex, ptr %33, i64 %185
  %191 = getelementptr %struct.doublecomplex, ptr %190, i64 %189
  %192 = call i32 @f2c_zcopy(ptr noundef nonnull %23, ptr noundef %188, ptr noundef nonnull @c__1, ptr noundef %191, ptr noundef nonnull @c__1) #4
  %.not311.not = icmp slt i64 %.2350, %177
  br i1 %.not311.not, label %.lr.ph352, label %.loopexit331, !llvm.loop !22

193:                                              ; preds = %176
  %invariant.gep353 = getelementptr i8, ptr %30, i64 16
  %invariant.gep355 = getelementptr i8, ptr %33, i64 16
  %.not309357 = icmp slt i64 %177, 1
  br i1 %.not309357, label %.loopexit331, label %.lr.ph360

.lr.ph360:                                        ; preds = %193, %.lr.ph360
  %.3358 = phi i64 [ %201, %.lr.ph360 ], [ 1, %193 ]
  %194 = load i64, ptr %3, align 8, !tbaa !5
  %195 = add nsw i64 %194, %.3358
  %196 = load i64, ptr %2, align 8, !tbaa !5
  %. = call i64 @llvm.smin.i64(i64 %195, i64 %196)
  %reass.sub377 = sub i64 %., %.3358
  %197 = add i64 %reass.sub377, 1
  store i64 %197, ptr %23, align 8, !tbaa !5
  %198 = mul nsw i64 %.3358, %28
  %gep354 = getelementptr %struct.doublecomplex, ptr %invariant.gep353, i64 %198
  %199 = mul nsw i64 %.3358, %31
  %gep356 = getelementptr %struct.doublecomplex, ptr %invariant.gep355, i64 %199
  %200 = call i32 @f2c_zcopy(ptr noundef nonnull %23, ptr noundef %gep354, ptr noundef nonnull @c__1, ptr noundef %gep356, ptr noundef nonnull @c__1) #4
  %201 = add nuw nsw i64 %.3358, 1
  %.not309.not = icmp slt i64 %.3358, %177
  br i1 %.not309.not, label %.lr.ph360, label %.loopexit331, !llvm.loop !23

.loopexit331:                                     ; preds = %.lr.ph352, %.lr.ph360, %178, %193
  %202 = call i32 @zpbtrf_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %20) #4
  %203 = load i64, ptr %20, align 8, !tbaa !5
  %204 = icmp sgt i64 %203, 0
  br i1 %204, label %205, label %206

205:                                              ; preds = %.loopexit331
  store double 0.000000e+00, ptr %15, align 8, !tbaa !10
  br label %275

206:                                              ; preds = %.loopexit331, %175
  %207 = call double @zlanhb_(ptr noundef nonnull @.str.8, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %19) #4
  store double %207, ptr %26, align 8, !tbaa !10
  %208 = call i32 @zpbcon_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %7, ptr noundef nonnull %8, ptr noundef nonnull %26, ptr noundef %15, ptr noundef %18, ptr noundef %19, ptr noundef nonnull %20) #4
  %209 = call i32 @zlacpy_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef nonnull %14) #4
  %210 = call i32 @zpbtrs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %13, ptr noundef nonnull %14, ptr noundef nonnull %20) #4
  %211 = call i32 @zpbrfs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef nonnull %14, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef nonnull %20) #4
  br i1 %.not306, label %.loopexit, label %212

212:                                              ; preds = %206
  %213 = load i64, ptr %4, align 8, !tbaa !5
  %.not312368 = icmp slt i64 %213, 1
  br i1 %.not312368, label %.loopexit, label %.lr.ph371

.lr.ph371:                                        ; preds = %212
  %214 = load i64, ptr %2, align 8, !tbaa !5
  %.not314361 = icmp slt i64 %214, 1
  br i1 %.not314361, label %.thread389, label %.lr.ph364.preheader

.lr.ph364.preheader:                              ; preds = %.lr.ph371
  %215 = add nsw i64 %214, -1
  %216 = shl i64 %38, 4
  %217 = add nuw i64 %213, 1152921504606846975
  %218 = mul i64 %38, %217
  %219 = add i64 %218, %214
  %220 = shl i64 %219, 4
  %scevgep415 = getelementptr i8, ptr %13, i64 %220
  %221 = shl i64 %214, 3
  %scevgep416 = getelementptr i8, ptr %10, i64 %221
  %min.iters.check423 = icmp ult i64 %214, 12
  %mul.result408 = shl i64 %215, 4
  %mul.result412 = shl i64 %215, 4
  %mul.overflow413 = icmp ugt i64 %215, 1152921504606846975
  %bound0417 = icmp ugt ptr %scevgep416, %13
  %bound1418 = icmp ugt ptr %scevgep415, %10
  %found.conflict419 = and i1 %bound0417, %bound1418
  %.mask453 = and i64 %38, 576460752303423488
  %stride.check420 = icmp ne i64 %.mask453, 0
  %222 = or i1 %found.conflict419, %stride.check420
  %n.vec426 = and i64 %214, 2305843009213693950
  %ind.end427 = or i64 %214, 1
  %cmp.n438 = icmp eq i64 %214, %n.vec426
  %xtraiter461 = and i64 %214, 1
  %lcmp.mod462.not = icmp eq i64 %xtraiter461, 0
  br label %.lr.ph364

.thread389:                                       ; preds = %.lr.ph371
  store i64 %214, ptr %23, align 8, !tbaa !5
  br label %.lr.ph376

.lr.ph364:                                        ; preds = %.lr.ph364.preheader, %._crit_edge365
  %indvar404 = phi i64 [ 0, %.lr.ph364.preheader ], [ %indvar.next405, %._crit_edge365 ]
  %.4369 = phi i64 [ 1, %.lr.ph364.preheader ], [ %259, %._crit_edge365 ]
  %223 = mul nsw i64 %.4369, %38
  %invariant.gep366 = getelementptr %struct.doublecomplex, ptr %40, i64 %223
  br i1 %min.iters.check423, label %scalar.ph422.preheader, label %vector.scevcheck403

vector.scevcheck403:                              ; preds = %.lr.ph364
  %224 = mul i64 %216, %indvar404
  %scevgep410 = getelementptr i8, ptr %13, i64 %224
  %225 = or disjoint i64 %224, 8
  %scevgep406 = getelementptr i8, ptr %13, i64 %225
  %226 = getelementptr i8, ptr %scevgep406, i64 %mul.result408
  %227 = icmp ult ptr %226, %scevgep406
  %228 = getelementptr i8, ptr %scevgep410, i64 %mul.result412
  %229 = icmp ult ptr %228, %scevgep410
  %230 = or i1 %229, %mul.overflow413
  %231 = or i1 %227, %230
  %brmerge466 = select i1 %231, i1 true, i1 %222
  br i1 %brmerge466, label %scalar.ph422.preheader, label %vector.body429

vector.body429:                                   ; preds = %vector.scevcheck403, %vector.body429
  %index430 = phi i64 [ %index.next437, %vector.body429 ], [ 0, %vector.scevcheck403 ]
  %offset.idx431 = or disjoint i64 %index430, 1
  %232 = getelementptr double, ptr %10, i64 %index430
  %wide.load432 = load <2 x double>, ptr %232, align 8, !tbaa !10, !alias.scope !24
  %233 = getelementptr %struct.doublecomplex, ptr %invariant.gep366, i64 %offset.idx431
  %wide.vec433 = load <4 x double>, ptr %233, align 8, !tbaa !10
  %strided.vec434 = shufflevector <4 x double> %wide.vec433, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec435 = shufflevector <4 x double> %wide.vec433, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %234 = fmul <2 x double> %wide.load432, %strided.vec434
  %235 = fmul <2 x double> %wide.load432, %strided.vec435
  %interleaved.vec436 = shufflevector <2 x double> %234, <2 x double> %235, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec436, ptr %233, align 8, !tbaa !10
  %index.next437 = add nuw i64 %index430, 2
  %236 = icmp eq i64 %index.next437, %n.vec426
  br i1 %236, label %middle.block421, label %vector.body429, !llvm.loop !27

middle.block421:                                  ; preds = %vector.body429
  br i1 %cmp.n438, label %._crit_edge365, label %scalar.ph422.preheader

scalar.ph422.preheader:                           ; preds = %vector.scevcheck403, %middle.block421, %.lr.ph364
  %.1291362.ph = phi i64 [ 1, %vector.scevcheck403 ], [ 1, %.lr.ph364 ], [ %ind.end427, %middle.block421 ]
  br i1 %lcmp.mod462.not, label %scalar.ph422.prol.loopexit, label %scalar.ph422.prol

scalar.ph422.prol:                                ; preds = %scalar.ph422.preheader
  %237 = getelementptr inbounds double, ptr %34, i64 %.1291362.ph
  %238 = load double, ptr %237, align 8, !tbaa !10
  %gep367.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep366, i64 %.1291362.ph
  %239 = load <2 x double>, ptr %gep367.prol, align 8, !tbaa !10
  %240 = insertelement <2 x double> poison, double %238, i64 0
  %241 = shufflevector <2 x double> %240, <2 x double> poison, <2 x i32> zeroinitializer
  %242 = fmul <2 x double> %241, %239
  store <2 x double> %242, ptr %gep367.prol, align 8, !tbaa !10
  %243 = add nuw nsw i64 %.1291362.ph, 1
  br label %scalar.ph422.prol.loopexit

scalar.ph422.prol.loopexit:                       ; preds = %scalar.ph422.prol, %scalar.ph422.preheader
  %.1291362.unr = phi i64 [ %.1291362.ph, %scalar.ph422.preheader ], [ %243, %scalar.ph422.prol ]
  %244 = icmp eq i64 %214, %.1291362.ph
  br i1 %244, label %._crit_edge365, label %scalar.ph422

scalar.ph422:                                     ; preds = %scalar.ph422.prol.loopexit, %scalar.ph422
  %.1291362 = phi i64 [ %258, %scalar.ph422 ], [ %.1291362.unr, %scalar.ph422.prol.loopexit ]
  %245 = getelementptr inbounds double, ptr %34, i64 %.1291362
  %246 = load double, ptr %245, align 8, !tbaa !10
  %gep367 = getelementptr %struct.doublecomplex, ptr %invariant.gep366, i64 %.1291362
  %247 = load <2 x double>, ptr %gep367, align 8, !tbaa !10
  %248 = insertelement <2 x double> poison, double %246, i64 0
  %249 = shufflevector <2 x double> %248, <2 x double> poison, <2 x i32> zeroinitializer
  %250 = fmul <2 x double> %249, %247
  store <2 x double> %250, ptr %gep367, align 8, !tbaa !10
  %251 = add nuw i64 %.1291362, 1
  %252 = getelementptr double, ptr %10, i64 %.1291362
  %253 = load double, ptr %252, align 8, !tbaa !10
  %gep367.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep366, i64 %251
  %254 = load <2 x double>, ptr %gep367.1, align 8, !tbaa !10
  %255 = insertelement <2 x double> poison, double %253, i64 0
  %256 = shufflevector <2 x double> %255, <2 x double> poison, <2 x i32> zeroinitializer
  %257 = fmul <2 x double> %256, %254
  store <2 x double> %257, ptr %gep367.1, align 8, !tbaa !10
  %258 = add nuw i64 %.1291362, 2
  %exitcond385.not.1 = icmp eq i64 %251, %214
  br i1 %exitcond385.not.1, label %._crit_edge365, label %scalar.ph422, !llvm.loop !28

._crit_edge365:                                   ; preds = %scalar.ph422.prol.loopexit, %scalar.ph422, %middle.block421
  %259 = add nuw i64 %.4369, 1
  %exitcond386.not = icmp eq i64 %.4369, %213
  %indvar.next405 = add i64 %indvar404, 1
  br i1 %exitcond386.not, label %260, label %.lr.ph364, !llvm.loop !29

260:                                              ; preds = %._crit_edge365
  store i64 %214, ptr %23, align 8, !tbaa !5
  br i1 %.not312368, label %.loopexit, label %.lr.ph376

.lr.ph376:                                        ; preds = %.thread389, %260
  %261 = load double, ptr %25, align 8, !tbaa !10
  %min.iters.check441 = icmp eq i64 %213, 1
  br i1 %min.iters.check441, label %scalar.ph440.preheader, label %vector.ph442

vector.ph442:                                     ; preds = %.lr.ph376
  %n.vec444 = and i64 %213, 9223372036854775806
  %ind.end445 = or i64 %213, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %261, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body447

vector.body447:                                   ; preds = %vector.body447, %vector.ph442
  %index448 = phi i64 [ 0, %vector.ph442 ], [ %index.next451, %vector.body447 ]
  %262 = getelementptr double, ptr %16, i64 %index448
  %wide.load450 = load <2 x double>, ptr %262, align 8, !tbaa !10
  %263 = fdiv <2 x double> %wide.load450, %broadcast.splat
  store <2 x double> %263, ptr %262, align 8, !tbaa !10
  %index.next451 = add nuw i64 %index448, 2
  %264 = icmp eq i64 %index.next451, %n.vec444
  br i1 %264, label %middle.block439, label %vector.body447, !llvm.loop !30

middle.block439:                                  ; preds = %vector.body447
  %cmp.n452 = icmp eq i64 %213, %n.vec444
  br i1 %cmp.n452, label %.loopexit, label %scalar.ph440.preheader

scalar.ph440.preheader:                           ; preds = %middle.block439, %.lr.ph376
  %.5374.ph = phi i64 [ 1, %.lr.ph376 ], [ %ind.end445, %middle.block439 ]
  br label %scalar.ph440

scalar.ph440:                                     ; preds = %scalar.ph440.preheader, %scalar.ph440
  %.5374 = phi i64 [ %268, %scalar.ph440 ], [ %.5374.ph, %scalar.ph440.preheader ]
  %265 = getelementptr inbounds double, ptr %41, i64 %.5374
  %266 = load double, ptr %265, align 8, !tbaa !10
  %267 = fdiv double %266, %261
  store double %267, ptr %265, align 8, !tbaa !10
  %268 = add nuw i64 %.5374, 1
  %exitcond387.not = icmp eq i64 %.5374, %213
  br i1 %exitcond387.not, label %.loopexit, label %scalar.ph440, !llvm.loop !31

.loopexit:                                        ; preds = %scalar.ph440, %middle.block439, %212, %260, %206
  %269 = load double, ptr %15, align 8, !tbaa !10
  %270 = call double @dlamch_(ptr noundef nonnull @.str.10) #4
  %271 = fcmp olt double %269, %270
  br i1 %271, label %272, label %275

272:                                              ; preds = %.loopexit
  %273 = load i64, ptr %2, align 8, !tbaa !5
  %274 = add nsw i64 %273, 1
  store i64 %274, ptr %20, align 8, !tbaa !5
  br label %275

275:                                              ; preds = %.loopexit, %272, %205, %.thread328
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  ret i32 0
}

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

declare i32 @zpbrfs_(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

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

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

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

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15}
!15 = distinct !{!15, !16}
!16 = distinct !{!16, !"LVerDomain"}
!17 = distinct !{!17, !13, !18, !19}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !13, !18}
!21 = distinct !{!21, !13}
!22 = distinct !{!22, !13}
!23 = distinct !{!23, !13}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = distinct !{!27, !13, !18, !19}
!28 = distinct !{!28, !13, !18}
!29 = distinct !{!29, !13}
!30 = distinct !{!30, !13, !18, !19}
!31 = distinct !{!31, !13, !19, !18}


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