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

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

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

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

145:                                              ; preds = %142, %24
  %146 = load ptr, ptr %37, align 8, !tbaa !5
  store i8 78, ptr %146, align 1, !tbaa !11
  store i64 0, ptr %84, align 8, !tbaa !9
  store i64 0, ptr %80, align 8, !tbaa !9
  br label %173

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

151:                                              ; preds = %147
  %152 = load ptr, ptr %37, align 8, !tbaa !5
  %153 = call i64 @lsame_(ptr noundef %152, ptr noundef @.str.3)
  %154 = icmp ne i64 %153, 0
  br label %155

155:                                              ; preds = %151, %147
  %156 = phi i1 [ true, %147 ], [ %154, %151 ]
  %157 = zext i1 %156 to i32
  %158 = sext i32 %157 to i64
  store i64 %158, ptr %84, align 8, !tbaa !9
  %159 = load ptr, ptr %37, align 8, !tbaa !5
  %160 = call i64 @lsame_(ptr noundef %159, ptr noundef @.str.4)
  %161 = icmp ne i64 %160, 0
  br i1 %161, label %166, label %162

162:                                              ; preds = %155
  %163 = load ptr, ptr %37, align 8, !tbaa !5
  %164 = call i64 @lsame_(ptr noundef %163, ptr noundef @.str.3)
  %165 = icmp ne i64 %164, 0
  br label %166

166:                                              ; preds = %162, %155
  %167 = phi i1 [ true, %155 ], [ %165, %162 ]
  %168 = zext i1 %167 to i32
  %169 = sext i32 %168 to i64
  store i64 %169, ptr %80, align 8, !tbaa !9
  %170 = call double @dlamch_(ptr noundef @.str.5)
  store double %170, ptr %83, align 8, !tbaa !12
  %171 = load double, ptr %83, align 8, !tbaa !12
  %172 = fdiv double 1.000000e+00, %171
  store double %172, ptr %78, align 8, !tbaa !12
  br label %173

173:                                              ; preds = %166, %145
  %174 = load i64, ptr %77, align 8, !tbaa !9
  %175 = icmp ne i64 %174, 0
  br i1 %175, label %185, label %176

176:                                              ; preds = %173
  %177 = load i64, ptr %75, align 8, !tbaa !9
  %178 = icmp ne i64 %177, 0
  br i1 %178, label %185, label %179

179:                                              ; preds = %176
  %180 = load ptr, ptr %26, align 8, !tbaa !5
  %181 = call i64 @lsame_(ptr noundef %180, ptr noundef @.str.6)
  %182 = icmp ne i64 %181, 0
  br i1 %182, label %185, label %183

183:                                              ; preds = %179
  %184 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -1, ptr %184, align 8, !tbaa !9
  br label %462

185:                                              ; preds = %179, %176, %173
  %186 = load i64, ptr %82, align 8, !tbaa !9
  %187 = icmp ne i64 %186, 0
  br i1 %187, label %198, label %188

188:                                              ; preds = %185
  %189 = load ptr, ptr %27, align 8, !tbaa !5
  %190 = call i64 @lsame_(ptr noundef %189, ptr noundef @.str.7)
  %191 = icmp ne i64 %190, 0
  br i1 %191, label %198, label %192

192:                                              ; preds = %188
  %193 = load ptr, ptr %27, align 8, !tbaa !5
  %194 = call i64 @lsame_(ptr noundef %193, ptr noundef @.str.4)
  %195 = icmp ne i64 %194, 0
  br i1 %195, label %198, label %196

196:                                              ; preds = %192
  %197 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -2, ptr %197, align 8, !tbaa !9
  br label %461

198:                                              ; preds = %192, %188, %185
  %199 = load ptr, ptr %28, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = icmp slt i64 %200, 0
  br i1 %201, label %202, label %204

202:                                              ; preds = %198
  %203 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -3, ptr %203, align 8, !tbaa !9
  br label %460

204:                                              ; preds = %198
  %205 = load ptr, ptr %29, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = icmp slt i64 %206, 0
  br i1 %207, label %208, label %210

208:                                              ; preds = %204
  %209 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -4, ptr %209, align 8, !tbaa !9
  br label %459

210:                                              ; preds = %204
  %211 = load ptr, ptr %30, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = icmp slt i64 %212, 0
  br i1 %213, label %214, label %216

214:                                              ; preds = %210
  %215 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -5, ptr %215, align 8, !tbaa !9
  br label %458

216:                                              ; preds = %210
  %217 = load ptr, ptr %31, align 8, !tbaa !5
  %218 = load i64, ptr %217, align 8, !tbaa !9
  %219 = icmp slt i64 %218, 0
  br i1 %219, label %220, label %222

220:                                              ; preds = %216
  %221 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -6, ptr %221, align 8, !tbaa !9
  br label %457

222:                                              ; preds = %216
  %223 = load ptr, ptr %33, align 8, !tbaa !5
  %224 = load i64, ptr %223, align 8, !tbaa !9
  %225 = load ptr, ptr %29, align 8, !tbaa !5
  %226 = load i64, ptr %225, align 8, !tbaa !9
  %227 = load ptr, ptr %30, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  %229 = add nsw i64 %226, %228
  %230 = add nsw i64 %229, 1
  %231 = icmp slt i64 %224, %230
  br i1 %231, label %232, label %234

232:                                              ; preds = %222
  %233 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -8, ptr %233, align 8, !tbaa !9
  br label %456

234:                                              ; preds = %222
  %235 = load ptr, ptr %35, align 8, !tbaa !5
  %236 = load i64, ptr %235, align 8, !tbaa !9
  %237 = load ptr, ptr %29, align 8, !tbaa !5
  %238 = load i64, ptr %237, align 8, !tbaa !9
  %239 = shl i64 %238, 1
  %240 = load ptr, ptr %30, align 8, !tbaa !5
  %241 = load i64, ptr %240, align 8, !tbaa !9
  %242 = add nsw i64 %239, %241
  %243 = add nsw i64 %242, 1
  %244 = icmp slt i64 %236, %243
  br i1 %244, label %245, label %247

245:                                              ; preds = %234
  %246 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -10, ptr %246, align 8, !tbaa !9
  br label %455

247:                                              ; preds = %234
  %248 = load ptr, ptr %26, align 8, !tbaa !5
  %249 = call i64 @lsame_(ptr noundef %248, ptr noundef @.str.6)
  %250 = icmp ne i64 %249, 0
  br i1 %250, label %251, label %263

251:                                              ; preds = %247
  %252 = load i64, ptr %84, align 8, !tbaa !9
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %263, label %254

254:                                              ; preds = %251
  %255 = load i64, ptr %80, align 8, !tbaa !9
  %256 = icmp ne i64 %255, 0
  br i1 %256, label %263, label %257

257:                                              ; preds = %254
  %258 = load ptr, ptr %37, align 8, !tbaa !5
  %259 = call i64 @lsame_(ptr noundef %258, ptr noundef @.str)
  %260 = icmp ne i64 %259, 0
  br i1 %260, label %263, label %261

261:                                              ; preds = %257
  %262 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -12, ptr %262, align 8, !tbaa !9
  br label %454

263:                                              ; preds = %257, %254, %251, %247
  %264 = load i64, ptr %84, align 8, !tbaa !9
  %265 = icmp ne i64 %264, 0
  br i1 %265, label %266, label %338

266:                                              ; preds = %263
  %267 = load double, ptr %78, align 8, !tbaa !12
  store double %267, ptr %72, align 8, !tbaa !12
  store double 0.000000e+00, ptr %73, align 8, !tbaa !12
  %268 = load ptr, ptr %28, align 8, !tbaa !5
  %269 = load i64, ptr %268, align 8, !tbaa !9
  store i64 %269, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %270

270:                                              ; preds = %303, %266
  %271 = load i64, ptr %67, align 8, !tbaa !9
  %272 = load i64, ptr %58, align 8, !tbaa !9
  %273 = icmp sle i64 %271, %272
  br i1 %273, label %274, label %306

274:                                              ; preds = %270
  %275 = load double, ptr %72, align 8, !tbaa !12
  store double %275, ptr %63, align 8, !tbaa !12
  %276 = load ptr, ptr %38, align 8, !tbaa !5
  %277 = load i64, ptr %67, align 8, !tbaa !9
  %278 = getelementptr inbounds double, ptr %276, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !12
  store double %279, ptr %64, align 8, !tbaa !12
  %280 = load double, ptr %63, align 8, !tbaa !12
  %281 = load double, ptr %64, align 8, !tbaa !12
  %282 = fcmp ole double %280, %281
  br i1 %282, label %283, label %285

283:                                              ; preds = %274
  %284 = load double, ptr %63, align 8, !tbaa !12
  br label %287

285:                                              ; preds = %274
  %286 = load double, ptr %64, align 8, !tbaa !12
  br label %287

287:                                              ; preds = %285, %283
  %288 = phi double [ %284, %283 ], [ %286, %285 ]
  store double %288, ptr %72, align 8, !tbaa !12
  %289 = load double, ptr %73, align 8, !tbaa !12
  store double %289, ptr %63, align 8, !tbaa !12
  %290 = load ptr, ptr %38, align 8, !tbaa !5
  %291 = load i64, ptr %67, align 8, !tbaa !9
  %292 = getelementptr inbounds double, ptr %290, i64 %291
  %293 = load double, ptr %292, align 8, !tbaa !12
  store double %293, ptr %64, align 8, !tbaa !12
  %294 = load double, ptr %63, align 8, !tbaa !12
  %295 = load double, ptr %64, align 8, !tbaa !12
  %296 = fcmp oge double %294, %295
  br i1 %296, label %297, label %299

297:                                              ; preds = %287
  %298 = load double, ptr %63, align 8, !tbaa !12
  br label %301

299:                                              ; preds = %287
  %300 = load double, ptr %64, align 8, !tbaa !12
  br label %301

301:                                              ; preds = %299, %297
  %302 = phi double [ %298, %297 ], [ %300, %299 ]
  store double %302, ptr %73, align 8, !tbaa !12
  br label %303

303:                                              ; preds = %301
  %304 = load i64, ptr %67, align 8, !tbaa !9
  %305 = add nsw i64 %304, 1
  store i64 %305, ptr %67, align 8, !tbaa !9
  br label %270, !llvm.loop !14

306:                                              ; preds = %270
  %307 = load double, ptr %72, align 8, !tbaa !12
  %308 = fcmp ole double %307, 0.000000e+00
  br i1 %308, label %309, label %311

309:                                              ; preds = %306
  %310 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -13, ptr %310, align 8, !tbaa !9
  br label %337

311:                                              ; preds = %306
  %312 = load ptr, ptr %28, align 8, !tbaa !5
  %313 = load i64, ptr %312, align 8, !tbaa !9
  %314 = icmp sgt i64 %313, 0
  br i1 %314, label %315, label %335

315:                                              ; preds = %311
  %316 = load double, ptr %72, align 8, !tbaa !12
  %317 = load double, ptr %83, align 8, !tbaa !12
  %318 = fcmp oge double %316, %317
  br i1 %318, label %319, label %321

319:                                              ; preds = %315
  %320 = load double, ptr %72, align 8, !tbaa !12
  br label %323

321:                                              ; preds = %315
  %322 = load double, ptr %83, align 8, !tbaa !12
  br label %323

323:                                              ; preds = %321, %319
  %324 = phi double [ %320, %319 ], [ %322, %321 ]
  %325 = load double, ptr %73, align 8, !tbaa !12
  %326 = load double, ptr %78, align 8, !tbaa !12
  %327 = fcmp ole double %325, %326
  br i1 %327, label %328, label %330

328:                                              ; preds = %323
  %329 = load double, ptr %73, align 8, !tbaa !12
  br label %332

330:                                              ; preds = %323
  %331 = load double, ptr %78, align 8, !tbaa !12
  br label %332

332:                                              ; preds = %330, %328
  %333 = phi double [ %329, %328 ], [ %331, %330 ]
  %334 = fdiv double %324, %333
  store double %334, ptr %81, align 8, !tbaa !12
  br label %336

335:                                              ; preds = %311
  store double 1.000000e+00, ptr %81, align 8, !tbaa !12
  br label %336

336:                                              ; preds = %335, %332
  br label %337

337:                                              ; preds = %336, %309
  br label %338

338:                                              ; preds = %337, %263
  %339 = load i64, ptr %80, align 8, !tbaa !9
  %340 = icmp ne i64 %339, 0
  br i1 %340, label %341, label %417

341:                                              ; preds = %338
  %342 = load ptr, ptr %49, align 8, !tbaa !5
  %343 = load i64, ptr %342, align 8, !tbaa !9
  %344 = icmp eq i64 %343, 0
  br i1 %344, label %345, label %417

345:                                              ; preds = %341
  %346 = load double, ptr %78, align 8, !tbaa !12
  store double %346, ptr %72, align 8, !tbaa !12
  store double 0.000000e+00, ptr %73, align 8, !tbaa !12
  %347 = load ptr, ptr %28, align 8, !tbaa !5
  %348 = load i64, ptr %347, align 8, !tbaa !9
  store i64 %348, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %382, %345
  %350 = load i64, ptr %67, align 8, !tbaa !9
  %351 = load i64, ptr %58, align 8, !tbaa !9
  %352 = icmp sle i64 %350, %351
  br i1 %352, label %353, label %385

353:                                              ; preds = %349
  %354 = load double, ptr %72, align 8, !tbaa !12
  store double %354, ptr %63, align 8, !tbaa !12
  %355 = load ptr, ptr %39, align 8, !tbaa !5
  %356 = load i64, ptr %67, align 8, !tbaa !9
  %357 = getelementptr inbounds double, ptr %355, i64 %356
  %358 = load double, ptr %357, align 8, !tbaa !12
  store double %358, ptr %64, align 8, !tbaa !12
  %359 = load double, ptr %63, align 8, !tbaa !12
  %360 = load double, ptr %64, align 8, !tbaa !12
  %361 = fcmp ole double %359, %360
  br i1 %361, label %362, label %364

362:                                              ; preds = %353
  %363 = load double, ptr %63, align 8, !tbaa !12
  br label %366

364:                                              ; preds = %353
  %365 = load double, ptr %64, align 8, !tbaa !12
  br label %366

366:                                              ; preds = %364, %362
  %367 = phi double [ %363, %362 ], [ %365, %364 ]
  store double %367, ptr %72, align 8, !tbaa !12
  %368 = load double, ptr %73, align 8, !tbaa !12
  store double %368, ptr %63, align 8, !tbaa !12
  %369 = load ptr, ptr %39, align 8, !tbaa !5
  %370 = load i64, ptr %67, align 8, !tbaa !9
  %371 = getelementptr inbounds double, ptr %369, i64 %370
  %372 = load double, ptr %371, align 8, !tbaa !12
  store double %372, ptr %64, align 8, !tbaa !12
  %373 = load double, ptr %63, align 8, !tbaa !12
  %374 = load double, ptr %64, align 8, !tbaa !12
  %375 = fcmp oge double %373, %374
  br i1 %375, label %376, label %378

376:                                              ; preds = %366
  %377 = load double, ptr %63, align 8, !tbaa !12
  br label %380

378:                                              ; preds = %366
  %379 = load double, ptr %64, align 8, !tbaa !12
  br label %380

380:                                              ; preds = %378, %376
  %381 = phi double [ %377, %376 ], [ %379, %378 ]
  store double %381, ptr %73, align 8, !tbaa !12
  br label %382

382:                                              ; preds = %380
  %383 = load i64, ptr %67, align 8, !tbaa !9
  %384 = add nsw i64 %383, 1
  store i64 %384, ptr %67, align 8, !tbaa !9
  br label %349, !llvm.loop !16

385:                                              ; preds = %349
  %386 = load double, ptr %72, align 8, !tbaa !12
  %387 = fcmp ole double %386, 0.000000e+00
  br i1 %387, label %388, label %390

388:                                              ; preds = %385
  %389 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -14, ptr %389, align 8, !tbaa !9
  br label %416

390:                                              ; preds = %385
  %391 = load ptr, ptr %28, align 8, !tbaa !5
  %392 = load i64, ptr %391, align 8, !tbaa !9
  %393 = icmp sgt i64 %392, 0
  br i1 %393, label %394, label %414

394:                                              ; preds = %390
  %395 = load double, ptr %72, align 8, !tbaa !12
  %396 = load double, ptr %83, align 8, !tbaa !12
  %397 = fcmp oge double %395, %396
  br i1 %397, label %398, label %400

398:                                              ; preds = %394
  %399 = load double, ptr %72, align 8, !tbaa !12
  br label %402

400:                                              ; preds = %394
  %401 = load double, ptr %83, align 8, !tbaa !12
  br label %402

402:                                              ; preds = %400, %398
  %403 = phi double [ %399, %398 ], [ %401, %400 ]
  %404 = load double, ptr %73, align 8, !tbaa !12
  %405 = load double, ptr %78, align 8, !tbaa !12
  %406 = fcmp ole double %404, %405
  br i1 %406, label %407, label %409

407:                                              ; preds = %402
  %408 = load double, ptr %73, align 8, !tbaa !12
  br label %411

409:                                              ; preds = %402
  %410 = load double, ptr %78, align 8, !tbaa !12
  br label %411

411:                                              ; preds = %409, %407
  %412 = phi double [ %408, %407 ], [ %410, %409 ]
  %413 = fdiv double %403, %412
  store double %413, ptr %76, align 8, !tbaa !12
  br label %415

414:                                              ; preds = %390
  store double 1.000000e+00, ptr %76, align 8, !tbaa !12
  br label %415

415:                                              ; preds = %414, %411
  br label %416

416:                                              ; preds = %415, %388
  br label %417

417:                                              ; preds = %416, %341, %338
  %418 = load ptr, ptr %49, align 8, !tbaa !5
  %419 = load i64, ptr %418, align 8, !tbaa !9
  %420 = icmp eq i64 %419, 0
  br i1 %420, label %421, label %453

421:                                              ; preds = %417
  %422 = load ptr, ptr %41, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = load ptr, ptr %28, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = icmp sge i64 1, %425
  br i1 %426, label %427, label %428

427:                                              ; preds = %421
  br label %431

428:                                              ; preds = %421
  %429 = load ptr, ptr %28, align 8, !tbaa !5
  %430 = load i64, ptr %429, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %428, %427
  %432 = phi i64 [ 1, %427 ], [ %430, %428 ]
  %433 = icmp slt i64 %423, %432
  br i1 %433, label %434, label %436

434:                                              ; preds = %431
  %435 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -16, ptr %435, align 8, !tbaa !9
  br label %452

436:                                              ; preds = %431
  %437 = load ptr, ptr %43, align 8, !tbaa !5
  %438 = load i64, ptr %437, align 8, !tbaa !9
  %439 = load ptr, ptr %28, align 8, !tbaa !5
  %440 = load i64, ptr %439, align 8, !tbaa !9
  %441 = icmp sge i64 1, %440
  br i1 %441, label %442, label %443

442:                                              ; preds = %436
  br label %446

443:                                              ; preds = %436
  %444 = load ptr, ptr %28, align 8, !tbaa !5
  %445 = load i64, ptr %444, align 8, !tbaa !9
  br label %446

446:                                              ; preds = %443, %442
  %447 = phi i64 [ 1, %442 ], [ %445, %443 ]
  %448 = icmp slt i64 %438, %447
  br i1 %448, label %449, label %451

449:                                              ; preds = %446
  %450 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -18, ptr %450, align 8, !tbaa !9
  br label %451

451:                                              ; preds = %449, %446
  br label %452

452:                                              ; preds = %451, %434
  br label %453

453:                                              ; preds = %452, %417
  br label %454

454:                                              ; preds = %453, %261
  br label %455

455:                                              ; preds = %454, %245
  br label %456

456:                                              ; preds = %455, %232
  br label %457

457:                                              ; preds = %456, %220
  br label %458

458:                                              ; preds = %457, %214
  br label %459

459:                                              ; preds = %458, %208
  br label %460

460:                                              ; preds = %459, %202
  br label %461

461:                                              ; preds = %460, %196
  br label %462

462:                                              ; preds = %461, %183
  %463 = load ptr, ptr %49, align 8, !tbaa !5
  %464 = load i64, ptr %463, align 8, !tbaa !9
  %465 = icmp ne i64 %464, 0
  br i1 %465, label %466, label %471

466:                                              ; preds = %462
  %467 = load ptr, ptr %49, align 8, !tbaa !5
  %468 = load i64, ptr %467, align 8, !tbaa !9
  %469 = sub nsw i64 0, %468
  store i64 %469, ptr %58, align 8, !tbaa !9
  %470 = call i32 @xerbla_(ptr noundef @.str.8, ptr noundef %58)
  store i32 0, ptr %25, align 4
  store i32 1, ptr %86, align 4
  br label %1220

471:                                              ; preds = %462
  %472 = load i64, ptr %75, align 8, !tbaa !9
  %473 = icmp ne i64 %472, 0
  br i1 %473, label %474, label %528

474:                                              ; preds = %471
  %475 = load ptr, ptr %28, align 8, !tbaa !5
  %476 = load ptr, ptr %28, align 8, !tbaa !5
  %477 = load ptr, ptr %29, align 8, !tbaa !5
  %478 = load ptr, ptr %30, align 8, !tbaa !5
  %479 = load ptr, ptr %32, align 8, !tbaa !5
  %480 = load i64, ptr %51, align 8, !tbaa !9
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %479, i64 %480
  %482 = load ptr, ptr %33, align 8, !tbaa !5
  %483 = load ptr, ptr %38, align 8, !tbaa !5
  %484 = getelementptr inbounds double, ptr %483, i64 1
  %485 = load ptr, ptr %39, align 8, !tbaa !5
  %486 = getelementptr inbounds double, ptr %485, i64 1
  %487 = call i32 @zgbequ_(ptr noundef %475, ptr noundef %476, ptr noundef %477, ptr noundef %478, ptr noundef %481, ptr noundef %482, ptr noundef %484, ptr noundef %486, ptr noundef %81, ptr noundef %76, ptr noundef %70, ptr noundef %79)
  %488 = load i64, ptr %79, align 8, !tbaa !9
  %489 = icmp eq i64 %488, 0
  br i1 %489, label %490, label %527

490:                                              ; preds = %474
  %491 = load ptr, ptr %28, align 8, !tbaa !5
  %492 = load ptr, ptr %28, align 8, !tbaa !5
  %493 = load ptr, ptr %29, align 8, !tbaa !5
  %494 = load ptr, ptr %30, align 8, !tbaa !5
  %495 = load ptr, ptr %32, align 8, !tbaa !5
  %496 = load i64, ptr %51, align 8, !tbaa !9
  %497 = getelementptr inbounds %struct.doublecomplex, ptr %495, i64 %496
  %498 = load ptr, ptr %33, align 8, !tbaa !5
  %499 = load ptr, ptr %38, align 8, !tbaa !5
  %500 = getelementptr inbounds double, ptr %499, i64 1
  %501 = load ptr, ptr %39, align 8, !tbaa !5
  %502 = getelementptr inbounds double, ptr %501, i64 1
  %503 = load ptr, ptr %37, align 8, !tbaa !5
  %504 = call i32 @zlaqgb_(ptr noundef %491, ptr noundef %492, ptr noundef %493, ptr noundef %494, ptr noundef %497, ptr noundef %498, ptr noundef %500, ptr noundef %502, ptr noundef %81, ptr noundef %76, ptr noundef %70, ptr noundef %503)
  %505 = load ptr, ptr %37, align 8, !tbaa !5
  %506 = call i64 @lsame_(ptr noundef %505, ptr noundef @.str.2)
  %507 = icmp ne i64 %506, 0
  br i1 %507, label %512, label %508

508:                                              ; preds = %490
  %509 = load ptr, ptr %37, align 8, !tbaa !5
  %510 = call i64 @lsame_(ptr noundef %509, ptr noundef @.str.3)
  %511 = icmp ne i64 %510, 0
  br label %512

512:                                              ; preds = %508, %490
  %513 = phi i1 [ true, %490 ], [ %511, %508 ]
  %514 = zext i1 %513 to i32
  %515 = sext i32 %514 to i64
  store i64 %515, ptr %84, align 8, !tbaa !9
  %516 = load ptr, ptr %37, align 8, !tbaa !5
  %517 = call i64 @lsame_(ptr noundef %516, ptr noundef @.str.4)
  %518 = icmp ne i64 %517, 0
  br i1 %518, label %523, label %519

519:                                              ; preds = %512
  %520 = load ptr, ptr %37, align 8, !tbaa !5
  %521 = call i64 @lsame_(ptr noundef %520, ptr noundef @.str.3)
  %522 = icmp ne i64 %521, 0
  br label %523

523:                                              ; preds = %519, %512
  %524 = phi i1 [ true, %512 ], [ %522, %519 ]
  %525 = zext i1 %524 to i32
  %526 = sext i32 %525 to i64
  store i64 %526, ptr %80, align 8, !tbaa !9
  br label %527

527:                                              ; preds = %523, %474
  br label %528

528:                                              ; preds = %527, %471
  %529 = load i64, ptr %82, align 8, !tbaa !9
  %530 = icmp ne i64 %529, 0
  br i1 %530, label %531, label %603

531:                                              ; preds = %528
  %532 = load i64, ptr %84, align 8, !tbaa !9
  %533 = icmp ne i64 %532, 0
  br i1 %533, label %534, label %602

534:                                              ; preds = %531
  %535 = load ptr, ptr %31, align 8, !tbaa !5
  %536 = load i64, ptr %535, align 8, !tbaa !9
  store i64 %536, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %537

537:                                              ; preds = %598, %534
  %538 = load i64, ptr %67, align 8, !tbaa !9
  %539 = load i64, ptr %58, align 8, !tbaa !9
  %540 = icmp sle i64 %538, %539
  br i1 %540, label %541, label %601

541:                                              ; preds = %537
  %542 = load ptr, ptr %28, align 8, !tbaa !5
  %543 = load i64, ptr %542, align 8, !tbaa !9
  store i64 %543, ptr %59, align 8, !tbaa !9
  store i64 1, ptr %66, align 8, !tbaa !9
  br label %544

544:                                              ; preds = %594, %541
  %545 = load i64, ptr %66, align 8, !tbaa !9
  %546 = load i64, ptr %59, align 8, !tbaa !9
  %547 = icmp sle i64 %545, %546
  br i1 %547, label %548, label %597

548:                                              ; preds = %544
  %549 = load i64, ptr %66, align 8, !tbaa !9
  %550 = load i64, ptr %67, align 8, !tbaa !9
  %551 = load i64, ptr %54, align 8, !tbaa !9
  %552 = mul nsw i64 %550, %551
  %553 = add nsw i64 %549, %552
  store i64 %553, ptr %60, align 8, !tbaa !9
  %554 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %554, ptr %61, align 8, !tbaa !9
  %555 = load i64, ptr %66, align 8, !tbaa !9
  %556 = load i64, ptr %67, align 8, !tbaa !9
  %557 = load i64, ptr %54, align 8, !tbaa !9
  %558 = mul nsw i64 %556, %557
  %559 = add nsw i64 %555, %558
  store i64 %559, ptr %62, align 8, !tbaa !9
  %560 = load ptr, ptr %38, align 8, !tbaa !5
  %561 = load i64, ptr %61, align 8, !tbaa !9
  %562 = getelementptr inbounds double, ptr %560, i64 %561
  %563 = load double, ptr %562, align 8, !tbaa !12
  %564 = load ptr, ptr %40, align 8, !tbaa !5
  %565 = load i64, ptr %62, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.doublecomplex, ptr %564, i64 %565
  %567 = getelementptr inbounds %struct.doublecomplex, ptr %566, i32 0, i32 0
  %568 = load double, ptr %567, align 8, !tbaa !17
  %569 = fmul double %563, %568
  %570 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %569, ptr %570, align 8, !tbaa !17
  %571 = load ptr, ptr %38, align 8, !tbaa !5
  %572 = load i64, ptr %61, align 8, !tbaa !9
  %573 = getelementptr inbounds double, ptr %571, i64 %572
  %574 = load double, ptr %573, align 8, !tbaa !12
  %575 = load ptr, ptr %40, align 8, !tbaa !5
  %576 = load i64, ptr %62, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %575, i64 %576
  %578 = getelementptr inbounds %struct.doublecomplex, ptr %577, i32 0, i32 1
  %579 = load double, ptr %578, align 8, !tbaa !19
  %580 = fmul double %574, %579
  %581 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %580, ptr %581, align 8, !tbaa !19
  %582 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %583 = load double, ptr %582, align 8, !tbaa !17
  %584 = load ptr, ptr %40, align 8, !tbaa !5
  %585 = load i64, ptr %60, align 8, !tbaa !9
  %586 = getelementptr inbounds %struct.doublecomplex, ptr %584, i64 %585
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %586, i32 0, i32 0
  store double %583, ptr %587, align 8, !tbaa !17
  %588 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %589 = load double, ptr %588, align 8, !tbaa !19
  %590 = load ptr, ptr %40, align 8, !tbaa !5
  %591 = load i64, ptr %60, align 8, !tbaa !9
  %592 = getelementptr inbounds %struct.doublecomplex, ptr %590, i64 %591
  %593 = getelementptr inbounds %struct.doublecomplex, ptr %592, i32 0, i32 1
  store double %589, ptr %593, align 8, !tbaa !19
  br label %594

594:                                              ; preds = %548
  %595 = load i64, ptr %66, align 8, !tbaa !9
  %596 = add nsw i64 %595, 1
  store i64 %596, ptr %66, align 8, !tbaa !9
  br label %544, !llvm.loop !20

597:                                              ; preds = %544
  br label %598

598:                                              ; preds = %597
  %599 = load i64, ptr %67, align 8, !tbaa !9
  %600 = add nsw i64 %599, 1
  store i64 %600, ptr %67, align 8, !tbaa !9
  br label %537, !llvm.loop !21

601:                                              ; preds = %537
  br label %602

602:                                              ; preds = %601, %531
  br label %675

603:                                              ; preds = %528
  %604 = load i64, ptr %80, align 8, !tbaa !9
  %605 = icmp ne i64 %604, 0
  br i1 %605, label %606, label %674

606:                                              ; preds = %603
  %607 = load ptr, ptr %31, align 8, !tbaa !5
  %608 = load i64, ptr %607, align 8, !tbaa !9
  store i64 %608, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %609

609:                                              ; preds = %670, %606
  %610 = load i64, ptr %67, align 8, !tbaa !9
  %611 = load i64, ptr %58, align 8, !tbaa !9
  %612 = icmp sle i64 %610, %611
  br i1 %612, label %613, label %673

613:                                              ; preds = %609
  %614 = load ptr, ptr %28, align 8, !tbaa !5
  %615 = load i64, ptr %614, align 8, !tbaa !9
  store i64 %615, ptr %59, align 8, !tbaa !9
  store i64 1, ptr %66, align 8, !tbaa !9
  br label %616

616:                                              ; preds = %666, %613
  %617 = load i64, ptr %66, align 8, !tbaa !9
  %618 = load i64, ptr %59, align 8, !tbaa !9
  %619 = icmp sle i64 %617, %618
  br i1 %619, label %620, label %669

620:                                              ; preds = %616
  %621 = load i64, ptr %66, align 8, !tbaa !9
  %622 = load i64, ptr %67, align 8, !tbaa !9
  %623 = load i64, ptr %54, align 8, !tbaa !9
  %624 = mul nsw i64 %622, %623
  %625 = add nsw i64 %621, %624
  store i64 %625, ptr %60, align 8, !tbaa !9
  %626 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %626, ptr %61, align 8, !tbaa !9
  %627 = load i64, ptr %66, align 8, !tbaa !9
  %628 = load i64, ptr %67, align 8, !tbaa !9
  %629 = load i64, ptr %54, align 8, !tbaa !9
  %630 = mul nsw i64 %628, %629
  %631 = add nsw i64 %627, %630
  store i64 %631, ptr %62, align 8, !tbaa !9
  %632 = load ptr, ptr %39, align 8, !tbaa !5
  %633 = load i64, ptr %61, align 8, !tbaa !9
  %634 = getelementptr inbounds double, ptr %632, i64 %633
  %635 = load double, ptr %634, align 8, !tbaa !12
  %636 = load ptr, ptr %40, align 8, !tbaa !5
  %637 = load i64, ptr %62, align 8, !tbaa !9
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %636, i64 %637
  %639 = getelementptr inbounds %struct.doublecomplex, ptr %638, i32 0, i32 0
  %640 = load double, ptr %639, align 8, !tbaa !17
  %641 = fmul double %635, %640
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %641, ptr %642, align 8, !tbaa !17
  %643 = load ptr, ptr %39, align 8, !tbaa !5
  %644 = load i64, ptr %61, align 8, !tbaa !9
  %645 = getelementptr inbounds double, ptr %643, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !12
  %647 = load ptr, ptr %40, align 8, !tbaa !5
  %648 = load i64, ptr %62, align 8, !tbaa !9
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %647, i64 %648
  %650 = getelementptr inbounds %struct.doublecomplex, ptr %649, i32 0, i32 1
  %651 = load double, ptr %650, align 8, !tbaa !19
  %652 = fmul double %646, %651
  %653 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %652, ptr %653, align 8, !tbaa !19
  %654 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %655 = load double, ptr %654, align 8, !tbaa !17
  %656 = load ptr, ptr %40, align 8, !tbaa !5
  %657 = load i64, ptr %60, align 8, !tbaa !9
  %658 = getelementptr inbounds %struct.doublecomplex, ptr %656, i64 %657
  %659 = getelementptr inbounds %struct.doublecomplex, ptr %658, i32 0, i32 0
  store double %655, ptr %659, align 8, !tbaa !17
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %661 = load double, ptr %660, align 8, !tbaa !19
  %662 = load ptr, ptr %40, align 8, !tbaa !5
  %663 = load i64, ptr %60, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.doublecomplex, ptr %662, i64 %663
  %665 = getelementptr inbounds %struct.doublecomplex, ptr %664, i32 0, i32 1
  store double %661, ptr %665, align 8, !tbaa !19
  br label %666

666:                                              ; preds = %620
  %667 = load i64, ptr %66, align 8, !tbaa !9
  %668 = add nsw i64 %667, 1
  store i64 %668, ptr %66, align 8, !tbaa !9
  br label %616, !llvm.loop !22

669:                                              ; preds = %616
  br label %670

670:                                              ; preds = %669
  %671 = load i64, ptr %67, align 8, !tbaa !9
  %672 = add nsw i64 %671, 1
  store i64 %672, ptr %67, align 8, !tbaa !9
  br label %609, !llvm.loop !23

673:                                              ; preds = %609
  br label %674

674:                                              ; preds = %673, %603
  br label %675

675:                                              ; preds = %674, %602
  %676 = load i64, ptr %77, align 8, !tbaa !9
  %677 = icmp ne i64 %676, 0
  br i1 %677, label %681, label %678

678:                                              ; preds = %675
  %679 = load i64, ptr %75, align 8, !tbaa !9
  %680 = icmp ne i64 %679, 0
  br i1 %680, label %681, label %899

681:                                              ; preds = %678, %675
  %682 = load ptr, ptr %28, align 8, !tbaa !5
  %683 = load i64, ptr %682, align 8, !tbaa !9
  store i64 %683, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %684

684:                                              ; preds = %749, %681
  %685 = load i64, ptr %67, align 8, !tbaa !9
  %686 = load i64, ptr %58, align 8, !tbaa !9
  %687 = icmp sle i64 %685, %686
  br i1 %687, label %688, label %752

688:                                              ; preds = %684
  %689 = load i64, ptr %67, align 8, !tbaa !9
  %690 = load ptr, ptr %30, align 8, !tbaa !5
  %691 = load i64, ptr %690, align 8, !tbaa !9
  %692 = sub nsw i64 %689, %691
  store i64 %692, ptr %59, align 8, !tbaa !9
  %693 = load i64, ptr %59, align 8, !tbaa !9
  %694 = icmp sge i64 %693, 1
  br i1 %694, label %695, label %697

695:                                              ; preds = %688
  %696 = load i64, ptr %59, align 8, !tbaa !9
  br label %698

697:                                              ; preds = %688
  br label %698

698:                                              ; preds = %697, %695
  %699 = phi i64 [ %696, %695 ], [ 1, %697 ]
  store i64 %699, ptr %68, align 8, !tbaa !9
  %700 = load i64, ptr %67, align 8, !tbaa !9
  %701 = load ptr, ptr %29, align 8, !tbaa !5
  %702 = load i64, ptr %701, align 8, !tbaa !9
  %703 = add nsw i64 %700, %702
  store i64 %703, ptr %59, align 8, !tbaa !9
  %704 = load i64, ptr %59, align 8, !tbaa !9
  %705 = load ptr, ptr %28, align 8, !tbaa !5
  %706 = load i64, ptr %705, align 8, !tbaa !9
  %707 = icmp sle i64 %704, %706
  br i1 %707, label %708, label %710

708:                                              ; preds = %698
  %709 = load i64, ptr %59, align 8, !tbaa !9
  br label %713

710:                                              ; preds = %698
  %711 = load ptr, ptr %28, align 8, !tbaa !5
  %712 = load i64, ptr %711, align 8, !tbaa !9
  br label %713

713:                                              ; preds = %710, %708
  %714 = phi i64 [ %709, %708 ], [ %712, %710 ]
  store i64 %714, ptr %69, align 8, !tbaa !9
  %715 = load i64, ptr %69, align 8, !tbaa !9
  %716 = load i64, ptr %68, align 8, !tbaa !9
  %717 = sub nsw i64 %715, %716
  %718 = add nsw i64 %717, 1
  store i64 %718, ptr %59, align 8, !tbaa !9
  %719 = load ptr, ptr %32, align 8, !tbaa !5
  %720 = load ptr, ptr %30, align 8, !tbaa !5
  %721 = load i64, ptr %720, align 8, !tbaa !9
  %722 = add nsw i64 %721, 1
  %723 = load i64, ptr %67, align 8, !tbaa !9
  %724 = sub nsw i64 %722, %723
  %725 = load i64, ptr %68, align 8, !tbaa !9
  %726 = add nsw i64 %724, %725
  %727 = load i64, ptr %67, align 8, !tbaa !9
  %728 = load i64, ptr %50, align 8, !tbaa !9
  %729 = mul nsw i64 %727, %728
  %730 = add nsw i64 %726, %729
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %719, i64 %730
  %732 = load ptr, ptr %34, align 8, !tbaa !5
  %733 = load ptr, ptr %29, align 8, !tbaa !5
  %734 = load i64, ptr %733, align 8, !tbaa !9
  %735 = load ptr, ptr %30, align 8, !tbaa !5
  %736 = load i64, ptr %735, align 8, !tbaa !9
  %737 = add nsw i64 %734, %736
  %738 = add nsw i64 %737, 1
  %739 = load i64, ptr %67, align 8, !tbaa !9
  %740 = sub nsw i64 %738, %739
  %741 = load i64, ptr %68, align 8, !tbaa !9
  %742 = add nsw i64 %740, %741
  %743 = load i64, ptr %67, align 8, !tbaa !9
  %744 = load i64, ptr %52, align 8, !tbaa !9
  %745 = mul nsw i64 %743, %744
  %746 = add nsw i64 %742, %745
  %747 = getelementptr inbounds %struct.doublecomplex, ptr %732, i64 %746
  %748 = call i32 @f2c_zcopy(ptr noundef %59, ptr noundef %731, ptr noundef @c__1, ptr noundef %747, ptr noundef @c__1)
  br label %749

749:                                              ; preds = %713
  %750 = load i64, ptr %67, align 8, !tbaa !9
  %751 = add nsw i64 %750, 1
  store i64 %751, ptr %67, align 8, !tbaa !9
  br label %684, !llvm.loop !24

752:                                              ; preds = %684
  %753 = load ptr, ptr %28, align 8, !tbaa !5
  %754 = load ptr, ptr %28, align 8, !tbaa !5
  %755 = load ptr, ptr %29, align 8, !tbaa !5
  %756 = load ptr, ptr %30, align 8, !tbaa !5
  %757 = load ptr, ptr %34, align 8, !tbaa !5
  %758 = load i64, ptr %53, align 8, !tbaa !9
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %757, i64 %758
  %760 = load ptr, ptr %35, align 8, !tbaa !5
  %761 = load ptr, ptr %36, align 8, !tbaa !5
  %762 = getelementptr inbounds i64, ptr %761, i64 1
  %763 = load ptr, ptr %49, align 8, !tbaa !5
  %764 = call i32 @zgbtrf_(ptr noundef %753, ptr noundef %754, ptr noundef %755, ptr noundef %756, ptr noundef %759, ptr noundef %760, ptr noundef %762, ptr noundef %763)
  %765 = load ptr, ptr %49, align 8, !tbaa !5
  %766 = load i64, ptr %765, align 8, !tbaa !9
  %767 = icmp sgt i64 %766, 0
  br i1 %767, label %768, label %898

768:                                              ; preds = %752
  store double 0.000000e+00, ptr %74, align 8, !tbaa !12
  %769 = load ptr, ptr %49, align 8, !tbaa !5
  %770 = load i64, ptr %769, align 8, !tbaa !9
  store i64 %770, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %771

771:                                              ; preds = %838, %768
  %772 = load i64, ptr %67, align 8, !tbaa !9
  %773 = load i64, ptr %58, align 8, !tbaa !9
  %774 = icmp sle i64 %772, %773
  br i1 %774, label %775, label %841

775:                                              ; preds = %771
  %776 = load ptr, ptr %30, align 8, !tbaa !5
  %777 = load i64, ptr %776, align 8, !tbaa !9
  %778 = add nsw i64 %777, 2
  %779 = load i64, ptr %67, align 8, !tbaa !9
  %780 = sub nsw i64 %778, %779
  store i64 %780, ptr %59, align 8, !tbaa !9
  %781 = load ptr, ptr %28, align 8, !tbaa !5
  %782 = load i64, ptr %781, align 8, !tbaa !9
  %783 = load ptr, ptr %30, align 8, !tbaa !5
  %784 = load i64, ptr %783, align 8, !tbaa !9
  %785 = add nsw i64 %782, %784
  %786 = add nsw i64 %785, 1
  %787 = load i64, ptr %67, align 8, !tbaa !9
  %788 = sub nsw i64 %786, %787
  store i64 %788, ptr %61, align 8, !tbaa !9
  %789 = load ptr, ptr %29, align 8, !tbaa !5
  %790 = load i64, ptr %789, align 8, !tbaa !9
  %791 = load ptr, ptr %30, align 8, !tbaa !5
  %792 = load i64, ptr %791, align 8, !tbaa !9
  %793 = add nsw i64 %790, %792
  %794 = add nsw i64 %793, 1
  store i64 %794, ptr %62, align 8, !tbaa !9
  %795 = load i64, ptr %61, align 8, !tbaa !9
  %796 = load i64, ptr %62, align 8, !tbaa !9
  %797 = icmp sle i64 %795, %796
  br i1 %797, label %798, label %800

798:                                              ; preds = %775
  %799 = load i64, ptr %61, align 8, !tbaa !9
  br label %802

800:                                              ; preds = %775
  %801 = load i64, ptr %62, align 8, !tbaa !9
  br label %802

802:                                              ; preds = %800, %798
  %803 = phi i64 [ %799, %798 ], [ %801, %800 ]
  store i64 %803, ptr %60, align 8, !tbaa !9
  %804 = load i64, ptr %59, align 8, !tbaa !9
  %805 = icmp sge i64 %804, 1
  br i1 %805, label %806, label %808

806:                                              ; preds = %802
  %807 = load i64, ptr %59, align 8, !tbaa !9
  br label %809

808:                                              ; preds = %802
  br label %809

809:                                              ; preds = %808, %806
  %810 = phi i64 [ %807, %806 ], [ 1, %808 ]
  store i64 %810, ptr %66, align 8, !tbaa !9
  br label %811

811:                                              ; preds = %834, %809
  %812 = load i64, ptr %66, align 8, !tbaa !9
  %813 = load i64, ptr %60, align 8, !tbaa !9
  %814 = icmp sle i64 %812, %813
  br i1 %814, label %815, label %837

815:                                              ; preds = %811
  %816 = load double, ptr %74, align 8, !tbaa !12
  store double %816, ptr %63, align 8, !tbaa !12
  %817 = load ptr, ptr %32, align 8, !tbaa !5
  %818 = load i64, ptr %66, align 8, !tbaa !9
  %819 = load i64, ptr %67, align 8, !tbaa !9
  %820 = load i64, ptr %50, align 8, !tbaa !9
  %821 = mul nsw i64 %819, %820
  %822 = add nsw i64 %818, %821
  %823 = getelementptr inbounds %struct.doublecomplex, ptr %817, i64 %822
  %824 = call double @z_abs(ptr noundef %823)
  store double %824, ptr %64, align 8, !tbaa !12
  %825 = load double, ptr %63, align 8, !tbaa !12
  %826 = load double, ptr %64, align 8, !tbaa !12
  %827 = fcmp oge double %825, %826
  br i1 %827, label %828, label %830

828:                                              ; preds = %815
  %829 = load double, ptr %63, align 8, !tbaa !12
  br label %832

830:                                              ; preds = %815
  %831 = load double, ptr %64, align 8, !tbaa !12
  br label %832

832:                                              ; preds = %830, %828
  %833 = phi double [ %829, %828 ], [ %831, %830 ]
  store double %833, ptr %74, align 8, !tbaa !12
  br label %834

834:                                              ; preds = %832
  %835 = load i64, ptr %66, align 8, !tbaa !9
  %836 = add nsw i64 %835, 1
  store i64 %836, ptr %66, align 8, !tbaa !9
  br label %811, !llvm.loop !25

837:                                              ; preds = %811
  br label %838

838:                                              ; preds = %837
  %839 = load i64, ptr %67, align 8, !tbaa !9
  %840 = add nsw i64 %839, 1
  store i64 %840, ptr %67, align 8, !tbaa !9
  br label %771, !llvm.loop !26

841:                                              ; preds = %771
  %842 = load ptr, ptr %49, align 8, !tbaa !5
  %843 = load i64, ptr %842, align 8, !tbaa !9
  %844 = sub nsw i64 %843, 1
  store i64 %844, ptr %60, align 8, !tbaa !9
  %845 = load ptr, ptr %29, align 8, !tbaa !5
  %846 = load i64, ptr %845, align 8, !tbaa !9
  %847 = load ptr, ptr %30, align 8, !tbaa !5
  %848 = load i64, ptr %847, align 8, !tbaa !9
  %849 = add nsw i64 %846, %848
  store i64 %849, ptr %59, align 8, !tbaa !9
  %850 = load i64, ptr %60, align 8, !tbaa !9
  %851 = load i64, ptr %59, align 8, !tbaa !9
  %852 = icmp sle i64 %850, %851
  br i1 %852, label %853, label %855

853:                                              ; preds = %841
  %854 = load i64, ptr %60, align 8, !tbaa !9
  br label %857

855:                                              ; preds = %841
  %856 = load i64, ptr %59, align 8, !tbaa !9
  br label %857

857:                                              ; preds = %855, %853
  %858 = phi i64 [ %854, %853 ], [ %856, %855 ]
  store i64 %858, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %61, align 8, !tbaa !9
  %859 = load ptr, ptr %29, align 8, !tbaa !5
  %860 = load i64, ptr %859, align 8, !tbaa !9
  %861 = load ptr, ptr %30, align 8, !tbaa !5
  %862 = load i64, ptr %861, align 8, !tbaa !9
  %863 = add nsw i64 %860, %862
  %864 = add nsw i64 %863, 2
  %865 = load ptr, ptr %49, align 8, !tbaa !5
  %866 = load i64, ptr %865, align 8, !tbaa !9
  %867 = sub nsw i64 %864, %866
  store i64 %867, ptr %62, align 8, !tbaa !9
  %868 = load ptr, ptr %49, align 8, !tbaa !5
  %869 = load ptr, ptr %34, align 8, !tbaa !5
  %870 = load i64, ptr %61, align 8, !tbaa !9
  %871 = load i64, ptr %62, align 8, !tbaa !9
  %872 = icmp sge i64 %870, %871
  br i1 %872, label %873, label %875

873:                                              ; preds = %857
  %874 = load i64, ptr %61, align 8, !tbaa !9
  br label %877

875:                                              ; preds = %857
  %876 = load i64, ptr %62, align 8, !tbaa !9
  br label %877

877:                                              ; preds = %875, %873
  %878 = phi i64 [ %874, %873 ], [ %876, %875 ]
  %879 = load i64, ptr %52, align 8, !tbaa !9
  %880 = add nsw i64 %878, %879
  %881 = getelementptr inbounds %struct.doublecomplex, ptr %869, i64 %880
  %882 = load ptr, ptr %35, align 8, !tbaa !5
  %883 = load ptr, ptr %48, align 8, !tbaa !5
  %884 = getelementptr inbounds double, ptr %883, i64 1
  %885 = call double @zlantb_(ptr noundef @.str.9, ptr noundef @.str.10, ptr noundef @.str, ptr noundef %868, ptr noundef %58, ptr noundef %881, ptr noundef %882, ptr noundef %884)
  store double %885, ptr %85, align 8, !tbaa !12
  %886 = load double, ptr %85, align 8, !tbaa !12
  %887 = fcmp oeq double %886, 0.000000e+00
  br i1 %887, label %888, label %889

888:                                              ; preds = %877
  store double 1.000000e+00, ptr %85, align 8, !tbaa !12
  br label %893

889:                                              ; preds = %877
  %890 = load double, ptr %74, align 8, !tbaa !12
  %891 = load double, ptr %85, align 8, !tbaa !12
  %892 = fdiv double %890, %891
  store double %892, ptr %85, align 8, !tbaa !12
  br label %893

893:                                              ; preds = %889, %888
  %894 = load double, ptr %85, align 8, !tbaa !12
  %895 = load ptr, ptr %48, align 8, !tbaa !5
  %896 = getelementptr inbounds double, ptr %895, i64 1
  store double %894, ptr %896, align 8, !tbaa !12
  %897 = load ptr, ptr %44, align 8, !tbaa !5
  store double 0.000000e+00, ptr %897, align 8, !tbaa !12
  store i32 0, ptr %25, align 4
  store i32 1, ptr %86, align 4
  br label %1220

898:                                              ; preds = %752
  br label %899

899:                                              ; preds = %898, %678
  %900 = load i64, ptr %82, align 8, !tbaa !9
  %901 = icmp ne i64 %900, 0
  br i1 %901, label %902, label %904

902:                                              ; preds = %899
  %903 = getelementptr inbounds [1 x i8], ptr %71, i64 0, i64 0
  store i8 49, ptr %903, align 1, !tbaa !11
  br label %906

904:                                              ; preds = %899
  %905 = getelementptr inbounds [1 x i8], ptr %71, i64 0, i64 0
  store i8 73, ptr %905, align 1, !tbaa !11
  br label %906

906:                                              ; preds = %904, %902
  %907 = getelementptr inbounds [1 x i8], ptr %71, i64 0, i64 0
  %908 = load ptr, ptr %28, align 8, !tbaa !5
  %909 = load ptr, ptr %29, align 8, !tbaa !5
  %910 = load ptr, ptr %30, align 8, !tbaa !5
  %911 = load ptr, ptr %32, align 8, !tbaa !5
  %912 = load i64, ptr %51, align 8, !tbaa !9
  %913 = getelementptr inbounds %struct.doublecomplex, ptr %911, i64 %912
  %914 = load ptr, ptr %33, align 8, !tbaa !5
  %915 = load ptr, ptr %48, align 8, !tbaa !5
  %916 = getelementptr inbounds double, ptr %915, i64 1
  %917 = call double @zlangb_(ptr noundef %907, ptr noundef %908, ptr noundef %909, ptr noundef %910, ptr noundef %913, ptr noundef %914, ptr noundef %916)
  store double %917, ptr %74, align 8, !tbaa !12
  %918 = load ptr, ptr %29, align 8, !tbaa !5
  %919 = load i64, ptr %918, align 8, !tbaa !9
  %920 = load ptr, ptr %30, align 8, !tbaa !5
  %921 = load i64, ptr %920, align 8, !tbaa !9
  %922 = add nsw i64 %919, %921
  store i64 %922, ptr %58, align 8, !tbaa !9
  %923 = load ptr, ptr %28, align 8, !tbaa !5
  %924 = load ptr, ptr %34, align 8, !tbaa !5
  %925 = load i64, ptr %53, align 8, !tbaa !9
  %926 = getelementptr inbounds %struct.doublecomplex, ptr %924, i64 %925
  %927 = load ptr, ptr %35, align 8, !tbaa !5
  %928 = load ptr, ptr %48, align 8, !tbaa !5
  %929 = getelementptr inbounds double, ptr %928, i64 1
  %930 = call double @zlantb_(ptr noundef @.str.9, ptr noundef @.str.10, ptr noundef @.str, ptr noundef %923, ptr noundef %58, ptr noundef %926, ptr noundef %927, ptr noundef %929)
  store double %930, ptr %85, align 8, !tbaa !12
  %931 = load double, ptr %85, align 8, !tbaa !12
  %932 = fcmp oeq double %931, 0.000000e+00
  br i1 %932, label %933, label %934

933:                                              ; preds = %906
  store double 1.000000e+00, ptr %85, align 8, !tbaa !12
  br label %947

934:                                              ; preds = %906
  %935 = load ptr, ptr %28, align 8, !tbaa !5
  %936 = load ptr, ptr %29, align 8, !tbaa !5
  %937 = load ptr, ptr %30, align 8, !tbaa !5
  %938 = load ptr, ptr %32, align 8, !tbaa !5
  %939 = load i64, ptr %51, align 8, !tbaa !9
  %940 = getelementptr inbounds %struct.doublecomplex, ptr %938, i64 %939
  %941 = load ptr, ptr %33, align 8, !tbaa !5
  %942 = load ptr, ptr %48, align 8, !tbaa !5
  %943 = getelementptr inbounds double, ptr %942, i64 1
  %944 = call double @zlangb_(ptr noundef @.str.9, ptr noundef %935, ptr noundef %936, ptr noundef %937, ptr noundef %940, ptr noundef %941, ptr noundef %943)
  %945 = load double, ptr %85, align 8, !tbaa !12
  %946 = fdiv double %944, %945
  store double %946, ptr %85, align 8, !tbaa !12
  br label %947

947:                                              ; preds = %934, %933
  %948 = getelementptr inbounds [1 x i8], ptr %71, i64 0, i64 0
  %949 = load ptr, ptr %28, align 8, !tbaa !5
  %950 = load ptr, ptr %29, align 8, !tbaa !5
  %951 = load ptr, ptr %30, align 8, !tbaa !5
  %952 = load ptr, ptr %34, align 8, !tbaa !5
  %953 = load i64, ptr %53, align 8, !tbaa !9
  %954 = getelementptr inbounds %struct.doublecomplex, ptr %952, i64 %953
  %955 = load ptr, ptr %35, align 8, !tbaa !5
  %956 = load ptr, ptr %36, align 8, !tbaa !5
  %957 = getelementptr inbounds i64, ptr %956, i64 1
  %958 = load ptr, ptr %44, align 8, !tbaa !5
  %959 = load ptr, ptr %47, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %959, i64 1
  %961 = load ptr, ptr %48, align 8, !tbaa !5
  %962 = getelementptr inbounds double, ptr %961, i64 1
  %963 = load ptr, ptr %49, align 8, !tbaa !5
  %964 = call i32 @zgbcon_(ptr noundef %948, ptr noundef %949, ptr noundef %950, ptr noundef %951, ptr noundef %954, ptr noundef %955, ptr noundef %957, ptr noundef %74, ptr noundef %958, ptr noundef %960, ptr noundef %962, ptr noundef %963)
  %965 = load ptr, ptr %28, align 8, !tbaa !5
  %966 = load ptr, ptr %31, align 8, !tbaa !5
  %967 = load ptr, ptr %40, align 8, !tbaa !5
  %968 = load i64, ptr %55, align 8, !tbaa !9
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %967, i64 %968
  %970 = load ptr, ptr %41, align 8, !tbaa !5
  %971 = load ptr, ptr %42, align 8, !tbaa !5
  %972 = load i64, ptr %57, align 8, !tbaa !9
  %973 = getelementptr inbounds %struct.doublecomplex, ptr %971, i64 %972
  %974 = load ptr, ptr %43, align 8, !tbaa !5
  %975 = call i32 @zlacpy_(ptr noundef @.str.11, ptr noundef %965, ptr noundef %966, ptr noundef %969, ptr noundef %970, ptr noundef %973, ptr noundef %974)
  %976 = load ptr, ptr %27, align 8, !tbaa !5
  %977 = load ptr, ptr %28, align 8, !tbaa !5
  %978 = load ptr, ptr %29, align 8, !tbaa !5
  %979 = load ptr, ptr %30, align 8, !tbaa !5
  %980 = load ptr, ptr %31, align 8, !tbaa !5
  %981 = load ptr, ptr %34, align 8, !tbaa !5
  %982 = load i64, ptr %53, align 8, !tbaa !9
  %983 = getelementptr inbounds %struct.doublecomplex, ptr %981, i64 %982
  %984 = load ptr, ptr %35, align 8, !tbaa !5
  %985 = load ptr, ptr %36, align 8, !tbaa !5
  %986 = getelementptr inbounds i64, ptr %985, i64 1
  %987 = load ptr, ptr %42, align 8, !tbaa !5
  %988 = load i64, ptr %57, align 8, !tbaa !9
  %989 = getelementptr inbounds %struct.doublecomplex, ptr %987, i64 %988
  %990 = load ptr, ptr %43, align 8, !tbaa !5
  %991 = load ptr, ptr %49, align 8, !tbaa !5
  %992 = call i32 @zgbtrs_(ptr noundef %976, ptr noundef %977, ptr noundef %978, ptr noundef %979, ptr noundef %980, ptr noundef %983, ptr noundef %984, ptr noundef %986, ptr noundef %989, ptr noundef %990, ptr noundef %991)
  %993 = load ptr, ptr %27, align 8, !tbaa !5
  %994 = load ptr, ptr %28, align 8, !tbaa !5
  %995 = load ptr, ptr %29, align 8, !tbaa !5
  %996 = load ptr, ptr %30, align 8, !tbaa !5
  %997 = load ptr, ptr %31, align 8, !tbaa !5
  %998 = load ptr, ptr %32, align 8, !tbaa !5
  %999 = load i64, ptr %51, align 8, !tbaa !9
  %1000 = getelementptr inbounds %struct.doublecomplex, ptr %998, i64 %999
  %1001 = load ptr, ptr %33, align 8, !tbaa !5
  %1002 = load ptr, ptr %34, align 8, !tbaa !5
  %1003 = load i64, ptr %53, align 8, !tbaa !9
  %1004 = getelementptr inbounds %struct.doublecomplex, ptr %1002, i64 %1003
  %1005 = load ptr, ptr %35, align 8, !tbaa !5
  %1006 = load ptr, ptr %36, align 8, !tbaa !5
  %1007 = getelementptr inbounds i64, ptr %1006, i64 1
  %1008 = load ptr, ptr %40, align 8, !tbaa !5
  %1009 = load i64, ptr %55, align 8, !tbaa !9
  %1010 = getelementptr inbounds %struct.doublecomplex, ptr %1008, i64 %1009
  %1011 = load ptr, ptr %41, align 8, !tbaa !5
  %1012 = load ptr, ptr %42, align 8, !tbaa !5
  %1013 = load i64, ptr %57, align 8, !tbaa !9
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %1012, i64 %1013
  %1015 = load ptr, ptr %43, align 8, !tbaa !5
  %1016 = load ptr, ptr %45, align 8, !tbaa !5
  %1017 = getelementptr inbounds double, ptr %1016, i64 1
  %1018 = load ptr, ptr %46, align 8, !tbaa !5
  %1019 = getelementptr inbounds double, ptr %1018, i64 1
  %1020 = load ptr, ptr %47, align 8, !tbaa !5
  %1021 = getelementptr inbounds %struct.doublecomplex, ptr %1020, i64 1
  %1022 = load ptr, ptr %48, align 8, !tbaa !5
  %1023 = getelementptr inbounds double, ptr %1022, i64 1
  %1024 = load ptr, ptr %49, align 8, !tbaa !5
  %1025 = call i32 @zgbrfs_(ptr noundef %993, ptr noundef %994, ptr noundef %995, ptr noundef %996, ptr noundef %997, ptr noundef %1000, ptr noundef %1001, ptr noundef %1004, ptr noundef %1005, ptr noundef %1007, ptr noundef %1010, ptr noundef %1011, ptr noundef %1014, ptr noundef %1015, ptr noundef %1017, ptr noundef %1019, ptr noundef %1021, ptr noundef %1023, ptr noundef %1024)
  %1026 = load i64, ptr %82, align 8, !tbaa !9
  %1027 = icmp ne i64 %1026, 0
  br i1 %1027, label %1028, label %1117

1028:                                             ; preds = %947
  %1029 = load i64, ptr %80, align 8, !tbaa !9
  %1030 = icmp ne i64 %1029, 0
  br i1 %1030, label %1031, label %1116

1031:                                             ; preds = %1028
  %1032 = load ptr, ptr %31, align 8, !tbaa !5
  %1033 = load i64, ptr %1032, align 8, !tbaa !9
  store i64 %1033, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %1034

1034:                                             ; preds = %1095, %1031
  %1035 = load i64, ptr %67, align 8, !tbaa !9
  %1036 = load i64, ptr %58, align 8, !tbaa !9
  %1037 = icmp sle i64 %1035, %1036
  br i1 %1037, label %1038, label %1098

1038:                                             ; preds = %1034
  %1039 = load ptr, ptr %28, align 8, !tbaa !5
  %1040 = load i64, ptr %1039, align 8, !tbaa !9
  store i64 %1040, ptr %60, align 8, !tbaa !9
  store i64 1, ptr %66, align 8, !tbaa !9
  br label %1041

1041:                                             ; preds = %1091, %1038
  %1042 = load i64, ptr %66, align 8, !tbaa !9
  %1043 = load i64, ptr %60, align 8, !tbaa !9
  %1044 = icmp sle i64 %1042, %1043
  br i1 %1044, label %1045, label %1094

1045:                                             ; preds = %1041
  %1046 = load i64, ptr %66, align 8, !tbaa !9
  %1047 = load i64, ptr %67, align 8, !tbaa !9
  %1048 = load i64, ptr %56, align 8, !tbaa !9
  %1049 = mul nsw i64 %1047, %1048
  %1050 = add nsw i64 %1046, %1049
  store i64 %1050, ptr %59, align 8, !tbaa !9
  %1051 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %1051, ptr %61, align 8, !tbaa !9
  %1052 = load i64, ptr %66, align 8, !tbaa !9
  %1053 = load i64, ptr %67, align 8, !tbaa !9
  %1054 = load i64, ptr %56, align 8, !tbaa !9
  %1055 = mul nsw i64 %1053, %1054
  %1056 = add nsw i64 %1052, %1055
  store i64 %1056, ptr %62, align 8, !tbaa !9
  %1057 = load ptr, ptr %39, align 8, !tbaa !5
  %1058 = load i64, ptr %61, align 8, !tbaa !9
  %1059 = getelementptr inbounds double, ptr %1057, i64 %1058
  %1060 = load double, ptr %1059, align 8, !tbaa !12
  %1061 = load ptr, ptr %42, align 8, !tbaa !5
  %1062 = load i64, ptr %62, align 8, !tbaa !9
  %1063 = getelementptr inbounds %struct.doublecomplex, ptr %1061, i64 %1062
  %1064 = getelementptr inbounds %struct.doublecomplex, ptr %1063, i32 0, i32 0
  %1065 = load double, ptr %1064, align 8, !tbaa !17
  %1066 = fmul double %1060, %1065
  %1067 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %1066, ptr %1067, align 8, !tbaa !17
  %1068 = load ptr, ptr %39, align 8, !tbaa !5
  %1069 = load i64, ptr %61, align 8, !tbaa !9
  %1070 = getelementptr inbounds double, ptr %1068, i64 %1069
  %1071 = load double, ptr %1070, align 8, !tbaa !12
  %1072 = load ptr, ptr %42, align 8, !tbaa !5
  %1073 = load i64, ptr %62, align 8, !tbaa !9
  %1074 = getelementptr inbounds %struct.doublecomplex, ptr %1072, i64 %1073
  %1075 = getelementptr inbounds %struct.doublecomplex, ptr %1074, i32 0, i32 1
  %1076 = load double, ptr %1075, align 8, !tbaa !19
  %1077 = fmul double %1071, %1076
  %1078 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %1077, ptr %1078, align 8, !tbaa !19
  %1079 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %1080 = load double, ptr %1079, align 8, !tbaa !17
  %1081 = load ptr, ptr %42, align 8, !tbaa !5
  %1082 = load i64, ptr %59, align 8, !tbaa !9
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1081, i64 %1082
  %1084 = getelementptr inbounds %struct.doublecomplex, ptr %1083, i32 0, i32 0
  store double %1080, ptr %1084, align 8, !tbaa !17
  %1085 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %1086 = load double, ptr %1085, align 8, !tbaa !19
  %1087 = load ptr, ptr %42, align 8, !tbaa !5
  %1088 = load i64, ptr %59, align 8, !tbaa !9
  %1089 = getelementptr inbounds %struct.doublecomplex, ptr %1087, i64 %1088
  %1090 = getelementptr inbounds %struct.doublecomplex, ptr %1089, i32 0, i32 1
  store double %1086, ptr %1090, align 8, !tbaa !19
  br label %1091

1091:                                             ; preds = %1045
  %1092 = load i64, ptr %66, align 8, !tbaa !9
  %1093 = add nsw i64 %1092, 1
  store i64 %1093, ptr %66, align 8, !tbaa !9
  br label %1041, !llvm.loop !27

1094:                                             ; preds = %1041
  br label %1095

1095:                                             ; preds = %1094
  %1096 = load i64, ptr %67, align 8, !tbaa !9
  %1097 = add nsw i64 %1096, 1
  store i64 %1097, ptr %67, align 8, !tbaa !9
  br label %1034, !llvm.loop !28

1098:                                             ; preds = %1034
  %1099 = load ptr, ptr %31, align 8, !tbaa !5
  %1100 = load i64, ptr %1099, align 8, !tbaa !9
  store i64 %1100, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %1101

1101:                                             ; preds = %1112, %1098
  %1102 = load i64, ptr %67, align 8, !tbaa !9
  %1103 = load i64, ptr %58, align 8, !tbaa !9
  %1104 = icmp sle i64 %1102, %1103
  br i1 %1104, label %1105, label %1115

1105:                                             ; preds = %1101
  %1106 = load double, ptr %76, align 8, !tbaa !12
  %1107 = load ptr, ptr %45, align 8, !tbaa !5
  %1108 = load i64, ptr %67, align 8, !tbaa !9
  %1109 = getelementptr inbounds double, ptr %1107, i64 %1108
  %1110 = load double, ptr %1109, align 8, !tbaa !12
  %1111 = fdiv double %1110, %1106
  store double %1111, ptr %1109, align 8, !tbaa !12
  br label %1112

1112:                                             ; preds = %1105
  %1113 = load i64, ptr %67, align 8, !tbaa !9
  %1114 = add nsw i64 %1113, 1
  store i64 %1114, ptr %67, align 8, !tbaa !9
  br label %1101, !llvm.loop !29

1115:                                             ; preds = %1101
  br label %1116

1116:                                             ; preds = %1115, %1028
  br label %1206

1117:                                             ; preds = %947
  %1118 = load i64, ptr %84, align 8, !tbaa !9
  %1119 = icmp ne i64 %1118, 0
  br i1 %1119, label %1120, label %1205

1120:                                             ; preds = %1117
  %1121 = load ptr, ptr %31, align 8, !tbaa !5
  %1122 = load i64, ptr %1121, align 8, !tbaa !9
  store i64 %1122, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %1123

1123:                                             ; preds = %1184, %1120
  %1124 = load i64, ptr %67, align 8, !tbaa !9
  %1125 = load i64, ptr %58, align 8, !tbaa !9
  %1126 = icmp sle i64 %1124, %1125
  br i1 %1126, label %1127, label %1187

1127:                                             ; preds = %1123
  %1128 = load ptr, ptr %28, align 8, !tbaa !5
  %1129 = load i64, ptr %1128, align 8, !tbaa !9
  store i64 %1129, ptr %60, align 8, !tbaa !9
  store i64 1, ptr %66, align 8, !tbaa !9
  br label %1130

1130:                                             ; preds = %1180, %1127
  %1131 = load i64, ptr %66, align 8, !tbaa !9
  %1132 = load i64, ptr %60, align 8, !tbaa !9
  %1133 = icmp sle i64 %1131, %1132
  br i1 %1133, label %1134, label %1183

1134:                                             ; preds = %1130
  %1135 = load i64, ptr %66, align 8, !tbaa !9
  %1136 = load i64, ptr %67, align 8, !tbaa !9
  %1137 = load i64, ptr %56, align 8, !tbaa !9
  %1138 = mul nsw i64 %1136, %1137
  %1139 = add nsw i64 %1135, %1138
  store i64 %1139, ptr %59, align 8, !tbaa !9
  %1140 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %1140, ptr %61, align 8, !tbaa !9
  %1141 = load i64, ptr %66, align 8, !tbaa !9
  %1142 = load i64, ptr %67, align 8, !tbaa !9
  %1143 = load i64, ptr %56, align 8, !tbaa !9
  %1144 = mul nsw i64 %1142, %1143
  %1145 = add nsw i64 %1141, %1144
  store i64 %1145, ptr %62, align 8, !tbaa !9
  %1146 = load ptr, ptr %38, align 8, !tbaa !5
  %1147 = load i64, ptr %61, align 8, !tbaa !9
  %1148 = getelementptr inbounds double, ptr %1146, i64 %1147
  %1149 = load double, ptr %1148, align 8, !tbaa !12
  %1150 = load ptr, ptr %42, align 8, !tbaa !5
  %1151 = load i64, ptr %62, align 8, !tbaa !9
  %1152 = getelementptr inbounds %struct.doublecomplex, ptr %1150, i64 %1151
  %1153 = getelementptr inbounds %struct.doublecomplex, ptr %1152, i32 0, i32 0
  %1154 = load double, ptr %1153, align 8, !tbaa !17
  %1155 = fmul double %1149, %1154
  %1156 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %1155, ptr %1156, align 8, !tbaa !17
  %1157 = load ptr, ptr %38, align 8, !tbaa !5
  %1158 = load i64, ptr %61, align 8, !tbaa !9
  %1159 = getelementptr inbounds double, ptr %1157, i64 %1158
  %1160 = load double, ptr %1159, align 8, !tbaa !12
  %1161 = load ptr, ptr %42, align 8, !tbaa !5
  %1162 = load i64, ptr %62, align 8, !tbaa !9
  %1163 = getelementptr inbounds %struct.doublecomplex, ptr %1161, i64 %1162
  %1164 = getelementptr inbounds %struct.doublecomplex, ptr %1163, i32 0, i32 1
  %1165 = load double, ptr %1164, align 8, !tbaa !19
  %1166 = fmul double %1160, %1165
  %1167 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %1166, ptr %1167, align 8, !tbaa !19
  %1168 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %1169 = load double, ptr %1168, align 8, !tbaa !17
  %1170 = load ptr, ptr %42, align 8, !tbaa !5
  %1171 = load i64, ptr %59, align 8, !tbaa !9
  %1172 = getelementptr inbounds %struct.doublecomplex, ptr %1170, i64 %1171
  %1173 = getelementptr inbounds %struct.doublecomplex, ptr %1172, i32 0, i32 0
  store double %1169, ptr %1173, align 8, !tbaa !17
  %1174 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %1175 = load double, ptr %1174, align 8, !tbaa !19
  %1176 = load ptr, ptr %42, align 8, !tbaa !5
  %1177 = load i64, ptr %59, align 8, !tbaa !9
  %1178 = getelementptr inbounds %struct.doublecomplex, ptr %1176, i64 %1177
  %1179 = getelementptr inbounds %struct.doublecomplex, ptr %1178, i32 0, i32 1
  store double %1175, ptr %1179, align 8, !tbaa !19
  br label %1180

1180:                                             ; preds = %1134
  %1181 = load i64, ptr %66, align 8, !tbaa !9
  %1182 = add nsw i64 %1181, 1
  store i64 %1182, ptr %66, align 8, !tbaa !9
  br label %1130, !llvm.loop !30

1183:                                             ; preds = %1130
  br label %1184

1184:                                             ; preds = %1183
  %1185 = load i64, ptr %67, align 8, !tbaa !9
  %1186 = add nsw i64 %1185, 1
  store i64 %1186, ptr %67, align 8, !tbaa !9
  br label %1123, !llvm.loop !31

1187:                                             ; preds = %1123
  %1188 = load ptr, ptr %31, align 8, !tbaa !5
  %1189 = load i64, ptr %1188, align 8, !tbaa !9
  store i64 %1189, ptr %58, align 8, !tbaa !9
  store i64 1, ptr %67, align 8, !tbaa !9
  br label %1190

1190:                                             ; preds = %1201, %1187
  %1191 = load i64, ptr %67, align 8, !tbaa !9
  %1192 = load i64, ptr %58, align 8, !tbaa !9
  %1193 = icmp sle i64 %1191, %1192
  br i1 %1193, label %1194, label %1204

1194:                                             ; preds = %1190
  %1195 = load double, ptr %81, align 8, !tbaa !12
  %1196 = load ptr, ptr %45, align 8, !tbaa !5
  %1197 = load i64, ptr %67, align 8, !tbaa !9
  %1198 = getelementptr inbounds double, ptr %1196, i64 %1197
  %1199 = load double, ptr %1198, align 8, !tbaa !12
  %1200 = fdiv double %1199, %1195
  store double %1200, ptr %1198, align 8, !tbaa !12
  br label %1201

1201:                                             ; preds = %1194
  %1202 = load i64, ptr %67, align 8, !tbaa !9
  %1203 = add nsw i64 %1202, 1
  store i64 %1203, ptr %67, align 8, !tbaa !9
  br label %1190, !llvm.loop !32

1204:                                             ; preds = %1190
  br label %1205

1205:                                             ; preds = %1204, %1117
  br label %1206

1206:                                             ; preds = %1205, %1116
  %1207 = load ptr, ptr %44, align 8, !tbaa !5
  %1208 = load double, ptr %1207, align 8, !tbaa !12
  %1209 = call double @dlamch_(ptr noundef @.str.12)
  %1210 = fcmp olt double %1208, %1209
  br i1 %1210, label %1211, label %1216

1211:                                             ; preds = %1206
  %1212 = load ptr, ptr %28, align 8, !tbaa !5
  %1213 = load i64, ptr %1212, align 8, !tbaa !9
  %1214 = add nsw i64 %1213, 1
  %1215 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 %1214, ptr %1215, align 8, !tbaa !9
  br label %1216

1216:                                             ; preds = %1211, %1206
  %1217 = load double, ptr %85, align 8, !tbaa !12
  %1218 = load ptr, ptr %48, align 8, !tbaa !5
  %1219 = getelementptr inbounds double, ptr %1218, i64 1
  store double %1217, ptr %1219, align 8, !tbaa !12
  store i32 0, ptr %25, align 4
  store i32 1, ptr %86, align 4
  br label %1220

1220:                                             ; preds = %1216, %893, %466
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #3
  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 1, 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 16, 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 8, 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
  %1221 = load i32, ptr %25, align 4
  ret i32 %1221
}

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

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

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

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

declare double @z_abs(ptr noundef) #2

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

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

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

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

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

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

; 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 = distinct !{!16, !15}
!17 = !{!18, !13, i64 0}
!18 = !{!"", !13, i64 0, !13, i64 8}
!19 = !{!18, !13, i64 8}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = distinct !{!28, !15}
!29 = distinct !{!29, !15}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !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 [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1

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

.thread:                                          ; preds = %24
  store i8 78, ptr %11, align 1, !tbaa !9
  br label %71

53:                                               ; preds = %24
  %54 = tail call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.2) #4
  %.not = icmp eq i64 %54, 0
  br i1 %.not, label %55, label %58

55:                                               ; preds = %53
  %56 = tail call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.3) #4
  %57 = icmp ne i64 %56, 0
  br label %58

58:                                               ; preds = %55, %53
  %59 = phi i1 [ true, %53 ], [ %57, %55 ]
  %60 = zext i1 %59 to i64
  %61 = tail call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.4) #4
  %.not483 = icmp eq i64 %61, 0
  br i1 %.not483, label %62, label %65

62:                                               ; preds = %58
  %63 = tail call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.3) #4
  %64 = icmp ne i64 %63, 0
  br label %65

65:                                               ; preds = %62, %58
  %66 = phi i1 [ true, %58 ], [ %64, %62 ]
  %67 = zext i1 %66 to i64
  %68 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #4
  %69 = fdiv double 1.000000e+00, %68
  %70 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %.not484 = icmp eq i64 %70, 0
  br i1 %.not484, label %.thread535.sink.split, label %71

71:                                               ; preds = %.thread, %65
  %.0456528 = phi i64 [ 0, %.thread ], [ %60, %65 ]
  %.0458526 = phi double [ undef, %.thread ], [ %68, %65 ]
  %.0460525 = phi i64 [ 0, %.thread ], [ %67, %65 ]
  %.0462523 = phi double [ undef, %.thread ], [ %69, %65 ]
  %.not485 = icmp eq i64 %50, 0
  br i1 %.not485, label %72, label %76

72:                                               ; preds = %71
  %73 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.7) #4
  %.not486 = icmp eq i64 %73, 0
  br i1 %.not486, label %74, label %76

74:                                               ; preds = %72
  %75 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #4
  %.not487 = icmp eq i64 %75, 0
  br i1 %.not487, label %.thread535.sink.split, label %76

76:                                               ; preds = %74, %72, %71
  %77 = load i64, ptr %2, align 8, !tbaa !5
  %78 = icmp slt i64 %77, 0
  br i1 %78, label %.thread535.sink.split, label %79

79:                                               ; preds = %76
  %80 = load i64, ptr %3, align 8, !tbaa !5
  %81 = icmp slt i64 %80, 0
  br i1 %81, label %.thread535.sink.split, label %82

82:                                               ; preds = %79
  %83 = load i64, ptr %4, align 8, !tbaa !5
  %84 = icmp slt i64 %83, 0
  br i1 %84, label %.thread535.sink.split, label %85

85:                                               ; preds = %82
  %86 = load i64, ptr %5, align 8, !tbaa !5
  %87 = icmp slt i64 %86, 0
  br i1 %87, label %.thread535.sink.split, label %88

88:                                               ; preds = %85
  %89 = load i64, ptr %7, align 8, !tbaa !5
  %90 = add nuw nsw i64 %83, %80
  %.not488 = icmp sgt i64 %89, %90
  br i1 %.not488, label %91, label %.thread535.sink.split

91:                                               ; preds = %88
  %92 = load i64, ptr %9, align 8, !tbaa !5
  %93 = shl nuw i64 %80, 1
  %94 = add nsw i64 %83, %93
  %.not489 = icmp sgt i64 %92, %94
  br i1 %.not489, label %95, label %.thread535.sink.split

95:                                               ; preds = %91
  %96 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %97 = icmp eq i64 %96, 0
  %98 = icmp ne i64 %.0456528, 0
  %or.cond5 = select i1 %97, i1 true, i1 %98
  %99 = icmp ne i64 %.0460525, 0
  %or.cond7 = select i1 %or.cond5, i1 true, i1 %99
  br i1 %or.cond7, label %102, label %100

100:                                              ; preds = %95
  %101 = tail call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str) #4
  %.not490 = icmp eq i64 %101, 0
  br i1 %.not490, label %.thread535.sink.split, label %..thread530_crit_edge

..thread530_crit_edge:                            ; preds = %100
  %.pr.pre = load i64, ptr %23, align 8, !tbaa !5
  br label %.thread530

102:                                              ; preds = %95
  br i1 %98, label %103, label %135

103:                                              ; preds = %102
  %104 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %104, ptr %25, align 8, !tbaa !5
  %.not491545 = icmp slt i64 %104, 1
  br i1 %.not491545, label %._crit_edge, label %.lr.ph.preheader

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

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0463548 = phi double [ 0.000000e+00, %.lr.ph.preheader.new ], [ %117, %.lr.ph ]
  %.0465547 = phi double [ %.0462523, %.lr.ph.preheader.new ], [ %115, %.lr.ph ]
  %.0467546 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %118, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %106 = getelementptr inbounds double, ptr %39, i64 %.0467546
  %107 = load double, ptr %106, align 8, !tbaa !10
  %108 = fcmp ole double %.0465547, %107
  %109 = select i1 %108, double %.0465547, double %107
  %110 = fcmp oge double %.0463548, %107
  %111 = select i1 %110, double %.0463548, double %107
  %112 = getelementptr double, ptr %12, i64 %.0467546
  %113 = load double, ptr %112, align 8, !tbaa !10
  %114 = fcmp ole double %109, %113
  %115 = select i1 %114, double %109, double %113
  %116 = fcmp oge double %111, %113
  %117 = select i1 %116, double %111, double %113
  %118 = add nuw i64 %.0467546, 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
  %.lcssa829.ph = phi double [ poison, %.lr.ph.preheader ], [ %115, %.lr.ph ]
  %.lcssa828.ph = phi double [ poison, %.lr.ph.preheader ], [ %117, %.lr.ph ]
  %.0463548.unr = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %117, %.lr.ph ]
  %.0465547.unr = phi double [ %.0462523, %.lr.ph.preheader ], [ %115, %.lr.ph ]
  %.0467546.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %118, %.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
  %119 = getelementptr inbounds double, ptr %39, i64 %.0467546.unr
  %120 = load double, ptr %119, align 8, !tbaa !10
  %121 = fcmp ole double %.0465547.unr, %120
  %122 = select i1 %121, double %.0465547.unr, double %120
  %123 = fcmp oge double %.0463548.unr, %120
  %124 = select i1 %123, double %.0463548.unr, double %120
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %103
  %.0465.lcssa = phi double [ %.0462523, %103 ], [ %.lcssa829.ph, %._crit_edge.loopexit.unr-lcssa ], [ %122, %.lr.ph.epil ]
  %.0463.lcssa = phi double [ 0.000000e+00, %103 ], [ %.lcssa828.ph, %._crit_edge.loopexit.unr-lcssa ], [ %124, %.lr.ph.epil ]
  %125 = fcmp ugt double %.0465.lcssa, 0.000000e+00
  br i1 %125, label %126, label %.thread535.sink.split

126:                                              ; preds = %._crit_edge
  %127 = icmp sgt i64 %104, 0
  br i1 %127, label %128, label %134

128:                                              ; preds = %126
  %129 = fcmp oge double %.0465.lcssa, %.0458526
  %130 = select i1 %129, double %.0465.lcssa, double %.0458526
  %131 = fcmp ole double %.0463.lcssa, %.0462523
  %132 = select i1 %131, double %.0463.lcssa, double %.0462523
  %133 = fdiv double %130, %132
  store double %133, ptr %32, align 8, !tbaa !10
  br label %135

134:                                              ; preds = %126
  store double 1.000000e+00, ptr %32, align 8, !tbaa !10
  br label %135

135:                                              ; preds = %134, %128, %102
  %.pr.pre647.pr = load i64, ptr %23, align 8, !tbaa !5
  br i1 %99, label %136, label %.thread530

136:                                              ; preds = %135
  %137 = icmp eq i64 %.pr.pre647.pr, 0
  br i1 %137, label %138, label %.thread535

138:                                              ; preds = %136
  %139 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %139, ptr %25, align 8, !tbaa !5
  %.not492550 = icmp slt i64 %139, 1
  br i1 %.not492550, label %._crit_edge556, label %.lr.ph555.preheader

.lr.ph555.preheader:                              ; preds = %138
  %xtraiter832 = and i64 %139, 1
  %140 = icmp eq i64 %139, 1
  br i1 %140, label %._crit_edge556.loopexit.unr-lcssa, label %.lr.ph555.preheader.new

.lr.ph555.preheader.new:                          ; preds = %.lr.ph555.preheader
  %unroll_iter836 = and i64 %139, 9223372036854775806
  br label %.lr.ph555

.lr.ph555:                                        ; preds = %.lr.ph555, %.lr.ph555.preheader.new
  %.1464553 = phi double [ 0.000000e+00, %.lr.ph555.preheader.new ], [ %152, %.lr.ph555 ]
  %.1466552 = phi double [ %.0462523, %.lr.ph555.preheader.new ], [ %150, %.lr.ph555 ]
  %.1468551 = phi i64 [ 1, %.lr.ph555.preheader.new ], [ %153, %.lr.ph555 ]
  %niter837 = phi i64 [ 0, %.lr.ph555.preheader.new ], [ %niter837.next.1, %.lr.ph555 ]
  %141 = getelementptr inbounds double, ptr %40, i64 %.1468551
  %142 = load double, ptr %141, align 8, !tbaa !10
  %143 = fcmp ole double %.1466552, %142
  %144 = select i1 %143, double %.1466552, double %142
  %145 = fcmp oge double %.1464553, %142
  %146 = select i1 %145, double %.1464553, double %142
  %147 = getelementptr double, ptr %13, i64 %.1468551
  %148 = load double, ptr %147, align 8, !tbaa !10
  %149 = fcmp ole double %144, %148
  %150 = select i1 %149, double %144, double %148
  %151 = fcmp oge double %146, %148
  %152 = select i1 %151, double %146, double %148
  %153 = add nuw i64 %.1468551, 2
  %niter837.next.1 = add i64 %niter837, 2
  %niter837.ncmp.1 = icmp eq i64 %niter837.next.1, %unroll_iter836
  br i1 %niter837.ncmp.1, label %._crit_edge556.loopexit.unr-lcssa, label %.lr.ph555, !llvm.loop !14

._crit_edge556.loopexit.unr-lcssa:                ; preds = %.lr.ph555, %.lr.ph555.preheader
  %.lcssa827.ph = phi double [ poison, %.lr.ph555.preheader ], [ %150, %.lr.ph555 ]
  %.lcssa826.ph = phi double [ poison, %.lr.ph555.preheader ], [ %152, %.lr.ph555 ]
  %.1464553.unr = phi double [ 0.000000e+00, %.lr.ph555.preheader ], [ %152, %.lr.ph555 ]
  %.1466552.unr = phi double [ %.0462523, %.lr.ph555.preheader ], [ %150, %.lr.ph555 ]
  %.1468551.unr = phi i64 [ 1, %.lr.ph555.preheader ], [ %153, %.lr.ph555 ]
  %lcmp.mod833.not = icmp eq i64 %xtraiter832, 0
  br i1 %lcmp.mod833.not, label %._crit_edge556, label %.lr.ph555.epil

.lr.ph555.epil:                                   ; preds = %._crit_edge556.loopexit.unr-lcssa
  %154 = getelementptr inbounds double, ptr %40, i64 %.1468551.unr
  %155 = load double, ptr %154, align 8, !tbaa !10
  %156 = fcmp ole double %.1466552.unr, %155
  %157 = select i1 %156, double %.1466552.unr, double %155
  %158 = fcmp oge double %.1464553.unr, %155
  %159 = select i1 %158, double %.1464553.unr, double %155
  br label %._crit_edge556

._crit_edge556:                                   ; preds = %.lr.ph555.epil, %._crit_edge556.loopexit.unr-lcssa, %138
  %.1466.lcssa = phi double [ %.0462523, %138 ], [ %.lcssa827.ph, %._crit_edge556.loopexit.unr-lcssa ], [ %157, %.lr.ph555.epil ]
  %.1464.lcssa = phi double [ 0.000000e+00, %138 ], [ %.lcssa826.ph, %._crit_edge556.loopexit.unr-lcssa ], [ %159, %.lr.ph555.epil ]
  %160 = fcmp ugt double %.1466.lcssa, 0.000000e+00
  br i1 %160, label %161, label %.thread535.sink.split

161:                                              ; preds = %._crit_edge556
  %162 = icmp sgt i64 %139, 0
  br i1 %162, label %163, label %169

163:                                              ; preds = %161
  %164 = fcmp oge double %.1466.lcssa, %.0458526
  %165 = select i1 %164, double %.1466.lcssa, double %.0458526
  %166 = fcmp ole double %.1464.lcssa, %.0462523
  %167 = select i1 %166, double %.1464.lcssa, double %.0462523
  %168 = fdiv double %165, %167
  store double %168, ptr %30, align 8, !tbaa !10
  br label %.thread530.thread

169:                                              ; preds = %161
  store double 1.000000e+00, ptr %30, align 8, !tbaa !10
  br label %.thread530.thread

.thread530:                                       ; preds = %..thread530_crit_edge, %135
  %.pr533.pr = phi i64 [ %.pr.pre, %..thread530_crit_edge ], [ %.pr.pre647.pr, %135 ]
  %170 = icmp eq i64 %.pr533.pr, 0
  br i1 %170, label %.thread530.thread, label %.thread535

.thread530.thread:                                ; preds = %163, %169, %.thread530
  %171 = load i64, ptr %15, align 8, !tbaa !5
  %172 = load i64, ptr %2, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.smax.i64(i64 %172, i64 1)
  %173 = icmp slt i64 %171, %spec.select
  br i1 %173, label %.thread535.sink.split, label %174

174:                                              ; preds = %.thread530.thread
  %175 = load i64, ptr %17, align 8, !tbaa !5
  %176 = icmp slt i64 %175, %spec.select
  br i1 %176, label %.thread535.sink.split, label %.thread531

.thread535.sink.split:                            ; preds = %174, %.thread530.thread, %._crit_edge556, %._crit_edge, %100, %91, %88, %85, %82, %79, %76, %74, %65
  %.sink = phi i64 [ -1, %65 ], [ -2, %74 ], [ -3, %76 ], [ -4, %79 ], [ -5, %82 ], [ -6, %85 ], [ -8, %88 ], [ -10, %91 ], [ -12, %100 ], [ -13, %._crit_edge ], [ -14, %._crit_edge556 ], [ -16, %.thread530.thread ], [ -18, %174 ]
  store i64 %.sink, ptr %23, align 8, !tbaa !5
  br label %.thread535

.thread535:                                       ; preds = %.thread535.sink.split, %136, %.thread530
  %177 = phi i64 [ %.pr533.pr, %.thread530 ], [ %.pr.pre647.pr, %136 ], [ %.sink, %.thread535.sink.split ]
  %178 = sub nsw i64 0, %177
  store i64 %178, ptr %25, align 8, !tbaa !5
  %179 = call i32 @xerbla_(ptr noundef nonnull @.str.8, ptr noundef nonnull %25) #4
  br label %507

.thread531:                                       ; preds = %174
  br i1 %52, label %180, label %200

180:                                              ; preds = %.thread531
  %181 = call i32 @zgbequ_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %12, ptr noundef %13, ptr noundef nonnull %32, ptr noundef nonnull %30, ptr noundef nonnull %27, ptr noundef nonnull %31) #4
  %182 = load i64, ptr %31, align 8, !tbaa !5
  %183 = icmp eq i64 %182, 0
  br i1 %183, label %184, label %200

184:                                              ; preds = %180
  %185 = call i32 @zlaqgb_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %12, ptr noundef %13, ptr noundef nonnull %32, ptr noundef nonnull %30, ptr noundef nonnull %27, ptr noundef %11) #4
  %186 = call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.2) #4
  %.not494 = icmp eq i64 %186, 0
  br i1 %.not494, label %187, label %190

187:                                              ; preds = %184
  %188 = call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.3) #4
  %189 = icmp ne i64 %188, 0
  br label %190

190:                                              ; preds = %187, %184
  %191 = phi i1 [ true, %184 ], [ %189, %187 ]
  %192 = zext i1 %191 to i64
  %193 = call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.4) #4
  %.not495 = icmp eq i64 %193, 0
  br i1 %.not495, label %194, label %197

194:                                              ; preds = %190
  %195 = call i64 @lsame_(ptr noundef %11, ptr noundef nonnull @.str.3) #4
  %196 = icmp ne i64 %195, 0
  br label %197

197:                                              ; preds = %194, %190
  %198 = phi i1 [ true, %190 ], [ %196, %194 ]
  %199 = zext i1 %198 to i64
  br label %200

200:                                              ; preds = %180, %197, %.thread531
  %.1461 = phi i64 [ %199, %197 ], [ %.0460525, %180 ], [ %.0460525, %.thread531 ]
  %.1457 = phi i64 [ %192, %197 ], [ %.0456528, %180 ], [ %.0456528, %.thread531 ]
  br i1 %.not485, label %250, label %201

201:                                              ; preds = %200
  %.not500 = icmp eq i64 %.1457, 0
  br i1 %.not500, label %.loopexit543, label %202

202:                                              ; preds = %201
  %203 = load i64, ptr %5, align 8, !tbaa !5
  store i64 %203, ptr %25, align 8, !tbaa !5
  %.not501564 = icmp slt i64 %203, 1
  br i1 %.not501564, label %.loopexit543, label %.lr.ph567

.lr.ph567:                                        ; preds = %202
  %204 = load i64, ptr %2, align 8, !tbaa !5
  %.not516559 = icmp slt i64 %204, 1
  br i1 %.not516559, label %..loopexit544_crit_edge, label %.lr.ph562.preheader

.lr.ph562.preheader:                              ; preds = %.lr.ph567
  %205 = add nsw i64 %204, -1
  %206 = shl i64 %41, 4
  %207 = add nuw i64 %203, 1152921504606846975
  %208 = mul i64 %41, %207
  %209 = add i64 %208, %204
  %210 = shl i64 %209, 4
  %scevgep680 = getelementptr i8, ptr %14, i64 %210
  %211 = shl i64 %204, 3
  %scevgep681 = getelementptr i8, ptr %12, i64 %211
  %min.iters.check = icmp ult i64 %204, 12
  %mul.result = shl i64 %205, 4
  %mul.result678 = shl i64 %205, 4
  %mul.overflow679 = icmp ugt i64 %205, 1152921504606846975
  %bound0 = icmp ugt ptr %scevgep681, %14
  %bound1 = icmp ugt ptr %scevgep680, %12
  %found.conflict = and i1 %bound0, %bound1
  %.mask = and i64 %41, 576460752303423488
  %stride.check = icmp ne i64 %.mask, 0
  %212 = or i1 %found.conflict, %stride.check
  %n.vec = and i64 %204, 2305843009213693950
  %ind.end = or i64 %204, 1
  %cmp.n = icmp eq i64 %204, %n.vec
  %xtraiter838 = and i64 %204, 1
  %lcmp.mod839.not = icmp eq i64 %xtraiter838, 0
  br label %.lr.ph562

.lr.ph562:                                        ; preds = %.lr.ph562.preheader, %._crit_edge563
  %indvar = phi i64 [ 0, %.lr.ph562.preheader ], [ %indvar.next, %._crit_edge563 ]
  %.2565 = phi i64 [ 1, %.lr.ph562.preheader ], [ %249, %._crit_edge563 ]
  %213 = mul nsw i64 %.2565, %41
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %43, i64 %213
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph562
  %214 = mul i64 %206, %indvar
  %scevgep676 = getelementptr i8, ptr %14, i64 %214
  %215 = or disjoint i64 %214, 8
  %scevgep = getelementptr i8, ptr %14, i64 %215
  %216 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %217 = icmp ult ptr %216, %scevgep
  %218 = getelementptr i8, ptr %scevgep676, i64 %mul.result678
  %219 = icmp ult ptr %218, %scevgep676
  %220 = or i1 %219, %mul.overflow679
  %221 = or i1 %217, %220
  %brmerge = select i1 %221, i1 true, i1 %212
  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
  %222 = getelementptr double, ptr %12, i64 %index
  %wide.load = load <2 x double>, ptr %222, align 8, !tbaa !10, !alias.scope !15
  %223 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %223, align 8, !tbaa !10
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec682 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %224 = fmul <2 x double> %wide.load, %strided.vec
  %225 = fmul <2 x double> %wide.load, %strided.vec682
  %interleaved.vec = shufflevector <2 x double> %224, <2 x double> %225, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %223, align 8, !tbaa !10
  %index.next = add nuw i64 %index, 2
  %226 = icmp eq i64 %index.next, %n.vec
  br i1 %226, label %middle.block, label %vector.body, !llvm.loop !18

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

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

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %227 = getelementptr inbounds double, ptr %39, i64 %.0469560.ph
  %228 = load double, ptr %227, align 8, !tbaa !10
  %gep.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0469560.ph
  %229 = load <2 x double>, ptr %gep.prol, align 8, !tbaa !10
  %230 = insertelement <2 x double> poison, double %228, i64 0
  %231 = shufflevector <2 x double> %230, <2 x double> poison, <2 x i32> zeroinitializer
  %232 = fmul <2 x double> %231, %229
  store <2 x double> %232, ptr %gep.prol, align 8, !tbaa !10
  %233 = add nuw nsw i64 %.0469560.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.0469560.unr = phi i64 [ %.0469560.ph, %scalar.ph.preheader ], [ %233, %scalar.ph.prol ]
  %234 = icmp eq i64 %204, %.0469560.ph
  br i1 %234, label %._crit_edge563, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.0469560 = phi i64 [ %248, %scalar.ph ], [ %.0469560.unr, %scalar.ph.prol.loopexit ]
  %235 = getelementptr inbounds double, ptr %39, i64 %.0469560
  %236 = load double, ptr %235, align 8, !tbaa !10
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0469560
  %237 = load <2 x double>, ptr %gep, align 8, !tbaa !10
  %238 = insertelement <2 x double> poison, double %236, i64 0
  %239 = shufflevector <2 x double> %238, <2 x double> poison, <2 x i32> zeroinitializer
  %240 = fmul <2 x double> %239, %237
  store <2 x double> %240, ptr %gep, align 8, !tbaa !10
  %241 = add nuw i64 %.0469560, 1
  %242 = getelementptr double, ptr %12, i64 %.0469560
  %243 = load double, ptr %242, align 8, !tbaa !10
  %gep.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %241
  %244 = load <2 x double>, ptr %gep.1, align 8, !tbaa !10
  %245 = insertelement <2 x double> poison, double %243, i64 0
  %246 = shufflevector <2 x double> %245, <2 x double> poison, <2 x i32> zeroinitializer
  %247 = fmul <2 x double> %246, %244
  store <2 x double> %247, ptr %gep.1, align 8, !tbaa !10
  %248 = add nuw i64 %.0469560, 2
  %exitcond637.not.1 = icmp eq i64 %241, %204
  br i1 %exitcond637.not.1, label %._crit_edge563, label %scalar.ph, !llvm.loop !21

._crit_edge563:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %249 = add nuw i64 %.2565, 1
  %exitcond638.not = icmp eq i64 %.2565, %203
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond638.not, label %..loopexit544_crit_edge, label %.lr.ph562, !llvm.loop !22

250:                                              ; preds = %200
  %.not497 = icmp eq i64 %.1461, 0
  br i1 %.not497, label %.loopexit543, label %251

251:                                              ; preds = %250
  %252 = load i64, ptr %5, align 8, !tbaa !5
  store i64 %252, ptr %25, align 8, !tbaa !5
  %.not498575 = icmp slt i64 %252, 1
  br i1 %.not498575, label %.loopexit543, label %.lr.ph578

.lr.ph578:                                        ; preds = %251
  %253 = load i64, ptr %2, align 8, !tbaa !5
  %.not499568 = icmp slt i64 %253, 1
  br i1 %.not499568, label %..loopexit543_crit_edge, label %.lr.ph571.preheader

.lr.ph571.preheader:                              ; preds = %.lr.ph578
  %254 = add nsw i64 %253, -1
  %255 = shl i64 %41, 4
  %256 = add nuw i64 %252, 1152921504606846975
  %257 = mul i64 %41, %256
  %258 = add i64 %257, %253
  %259 = shl i64 %258, 4
  %scevgep695 = getelementptr i8, ptr %14, i64 %259
  %260 = shl i64 %253, 3
  %scevgep696 = getelementptr i8, ptr %13, i64 %260
  %min.iters.check703 = icmp ult i64 %253, 12
  %mul.result688 = shl i64 %254, 4
  %mul.result692 = shl i64 %254, 4
  %mul.overflow693 = icmp ugt i64 %254, 1152921504606846975
  %bound0697 = icmp ugt ptr %scevgep696, %14
  %bound1698 = icmp ugt ptr %scevgep695, %13
  %found.conflict699 = and i1 %bound0697, %bound1698
  %.mask821 = and i64 %41, 576460752303423488
  %stride.check700 = icmp ne i64 %.mask821, 0
  %261 = or i1 %found.conflict699, %stride.check700
  %n.vec706 = and i64 %253, 2305843009213693950
  %ind.end707 = or i64 %253, 1
  %cmp.n718 = icmp eq i64 %253, %n.vec706
  %xtraiter840 = and i64 %253, 1
  %lcmp.mod841.not = icmp eq i64 %xtraiter840, 0
  br label %.lr.ph571

.lr.ph571:                                        ; preds = %.lr.ph571.preheader, %._crit_edge572
  %indvar684 = phi i64 [ 0, %.lr.ph571.preheader ], [ %indvar.next685, %._crit_edge572 ]
  %.3576 = phi i64 [ 1, %.lr.ph571.preheader ], [ %298, %._crit_edge572 ]
  %262 = mul nsw i64 %.3576, %41
  %invariant.gep573 = getelementptr %struct.doublecomplex, ptr %43, i64 %262
  br i1 %min.iters.check703, label %scalar.ph702.preheader, label %vector.scevcheck683

vector.scevcheck683:                              ; preds = %.lr.ph571
  %263 = mul i64 %255, %indvar684
  %scevgep690 = getelementptr i8, ptr %14, i64 %263
  %264 = or disjoint i64 %263, 8
  %scevgep686 = getelementptr i8, ptr %14, i64 %264
  %265 = getelementptr i8, ptr %scevgep686, i64 %mul.result688
  %266 = icmp ult ptr %265, %scevgep686
  %267 = getelementptr i8, ptr %scevgep690, i64 %mul.result692
  %268 = icmp ult ptr %267, %scevgep690
  %269 = or i1 %268, %mul.overflow693
  %270 = or i1 %266, %269
  %brmerge861 = select i1 %270, i1 true, i1 %261
  br i1 %brmerge861, label %scalar.ph702.preheader, label %vector.body709

vector.body709:                                   ; preds = %vector.scevcheck683, %vector.body709
  %index710 = phi i64 [ %index.next717, %vector.body709 ], [ 0, %vector.scevcheck683 ]
  %offset.idx711 = or disjoint i64 %index710, 1
  %271 = getelementptr double, ptr %13, i64 %index710
  %wide.load712 = load <2 x double>, ptr %271, align 8, !tbaa !10, !alias.scope !23
  %272 = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %offset.idx711
  %wide.vec713 = load <4 x double>, ptr %272, align 8, !tbaa !10
  %strided.vec714 = shufflevector <4 x double> %wide.vec713, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec715 = shufflevector <4 x double> %wide.vec713, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %273 = fmul <2 x double> %wide.load712, %strided.vec714
  %274 = fmul <2 x double> %wide.load712, %strided.vec715
  %interleaved.vec716 = shufflevector <2 x double> %273, <2 x double> %274, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec716, ptr %272, align 8, !tbaa !10
  %index.next717 = add nuw i64 %index710, 2
  %275 = icmp eq i64 %index.next717, %n.vec706
  br i1 %275, label %middle.block701, label %vector.body709, !llvm.loop !26

middle.block701:                                  ; preds = %vector.body709
  br i1 %cmp.n718, label %._crit_edge572, label %scalar.ph702.preheader

scalar.ph702.preheader:                           ; preds = %vector.scevcheck683, %middle.block701, %.lr.ph571
  %.1470569.ph = phi i64 [ 1, %vector.scevcheck683 ], [ 1, %.lr.ph571 ], [ %ind.end707, %middle.block701 ]
  br i1 %lcmp.mod841.not, label %scalar.ph702.prol.loopexit, label %scalar.ph702.prol

scalar.ph702.prol:                                ; preds = %scalar.ph702.preheader
  %276 = getelementptr inbounds double, ptr %40, i64 %.1470569.ph
  %277 = load double, ptr %276, align 8, !tbaa !10
  %gep574.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %.1470569.ph
  %278 = load <2 x double>, ptr %gep574.prol, align 8, !tbaa !10
  %279 = insertelement <2 x double> poison, double %277, i64 0
  %280 = shufflevector <2 x double> %279, <2 x double> poison, <2 x i32> zeroinitializer
  %281 = fmul <2 x double> %280, %278
  store <2 x double> %281, ptr %gep574.prol, align 8, !tbaa !10
  %282 = add nuw nsw i64 %.1470569.ph, 1
  br label %scalar.ph702.prol.loopexit

scalar.ph702.prol.loopexit:                       ; preds = %scalar.ph702.prol, %scalar.ph702.preheader
  %.1470569.unr = phi i64 [ %.1470569.ph, %scalar.ph702.preheader ], [ %282, %scalar.ph702.prol ]
  %283 = icmp eq i64 %253, %.1470569.ph
  br i1 %283, label %._crit_edge572, label %scalar.ph702

scalar.ph702:                                     ; preds = %scalar.ph702.prol.loopexit, %scalar.ph702
  %.1470569 = phi i64 [ %297, %scalar.ph702 ], [ %.1470569.unr, %scalar.ph702.prol.loopexit ]
  %284 = getelementptr inbounds double, ptr %40, i64 %.1470569
  %285 = load double, ptr %284, align 8, !tbaa !10
  %gep574 = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %.1470569
  %286 = load <2 x double>, ptr %gep574, align 8, !tbaa !10
  %287 = insertelement <2 x double> poison, double %285, i64 0
  %288 = shufflevector <2 x double> %287, <2 x double> poison, <2 x i32> zeroinitializer
  %289 = fmul <2 x double> %288, %286
  store <2 x double> %289, ptr %gep574, align 8, !tbaa !10
  %290 = add nuw i64 %.1470569, 1
  %291 = getelementptr double, ptr %13, i64 %.1470569
  %292 = load double, ptr %291, align 8, !tbaa !10
  %gep574.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %290
  %293 = load <2 x double>, ptr %gep574.1, align 8, !tbaa !10
  %294 = insertelement <2 x double> poison, double %292, i64 0
  %295 = shufflevector <2 x double> %294, <2 x double> poison, <2 x i32> zeroinitializer
  %296 = fmul <2 x double> %295, %293
  store <2 x double> %296, ptr %gep574.1, align 8, !tbaa !10
  %297 = add nuw i64 %.1470569, 2
  %exitcond639.not.1 = icmp eq i64 %290, %253
  br i1 %exitcond639.not.1, label %._crit_edge572, label %scalar.ph702, !llvm.loop !27

._crit_edge572:                                   ; preds = %scalar.ph702.prol.loopexit, %scalar.ph702, %middle.block701
  %298 = add nuw i64 %.3576, 1
  %exitcond640.not = icmp eq i64 %.3576, %252
  %indvar.next685 = add i64 %indvar684, 1
  br i1 %exitcond640.not, label %..loopexit543_crit_edge, label %.lr.ph571, !llvm.loop !28

..loopexit543_crit_edge:                          ; preds = %._crit_edge572, %.lr.ph578
  store i64 %253, ptr %26, align 8, !tbaa !5
  br label %.loopexit543

..loopexit544_crit_edge:                          ; preds = %._crit_edge563, %.lr.ph567
  store i64 %204, ptr %26, align 8, !tbaa !5
  br label %.loopexit543

.loopexit543:                                     ; preds = %202, %..loopexit544_crit_edge, %251, %..loopexit543_crit_edge, %250, %201
  br i1 %or.cond, label %299, label %359

299:                                              ; preds = %.loopexit543
  %300 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %300, ptr %25, align 8, !tbaa !5
  %.not502579 = icmp slt i64 %300, 1
  br i1 %.not502579, label %._crit_edge584, label %.lr.ph583.preheader

.lr.ph583.preheader:                              ; preds = %299
  %invariant.gep666 = getelementptr i8, ptr %35, i64 16
  %invariant.gep668 = getelementptr i8, ptr %38, i64 16
  br label %.lr.ph583

.lr.ph583:                                        ; preds = %.lr.ph583.preheader, %.lr.ph583
  %.4.neg581 = phi i64 [ %.4.neg, %.lr.ph583 ], [ -1, %.lr.ph583.preheader ]
  %.4580 = phi i64 [ %318, %.lr.ph583 ], [ 1, %.lr.ph583.preheader ]
  %301 = load i64, ptr %4, align 8, !tbaa !5
  %302 = sub nsw i64 %.4580, %301
  %303 = call i64 @llvm.smax.i64(i64 %302, i64 1)
  %304 = load i64, ptr %3, align 8, !tbaa !5
  %305 = add nsw i64 %304, %.4580
  %306 = load i64, ptr %2, align 8, !tbaa !5
  %. = call i64 @llvm.smin.i64(i64 %305, i64 %306)
  %reass.sub = sub i64 %., %303
  %307 = add i64 %reass.sub, 1
  store i64 %307, ptr %26, align 8, !tbaa !5
  %308 = mul nsw i64 %.4580, %33
  %gep667 = getelementptr %struct.doublecomplex, ptr %invariant.gep666, i64 %301
  %309 = getelementptr %struct.doublecomplex, ptr %gep667, i64 %.4.neg581
  %310 = getelementptr %struct.doublecomplex, ptr %309, i64 %303
  %311 = getelementptr %struct.doublecomplex, ptr %310, i64 %308
  %312 = mul nsw i64 %.4580, %36
  %gep669 = getelementptr %struct.doublecomplex, ptr %invariant.gep668, i64 %.4.neg581
  %313 = getelementptr %struct.doublecomplex, ptr %gep669, i64 %301
  %314 = getelementptr %struct.doublecomplex, ptr %313, i64 %304
  %315 = getelementptr %struct.doublecomplex, ptr %314, i64 %303
  %316 = getelementptr %struct.doublecomplex, ptr %315, i64 %312
  %317 = call i32 @f2c_zcopy(ptr noundef nonnull %26, ptr noundef %311, ptr noundef nonnull @c__1, ptr noundef %316, ptr noundef nonnull @c__1) #4
  %318 = add nuw nsw i64 %.4580, 1
  %.4.neg = xor i64 %.4580, -1
  %319 = load i64, ptr %25, align 8, !tbaa !5
  %.not502.not = icmp slt i64 %.4580, %319
  br i1 %.not502.not, label %.lr.ph583, label %._crit_edge584, !llvm.loop !29

._crit_edge584:                                   ; preds = %.lr.ph583, %299
  %320 = call i32 @zgbtrf_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull %23) #4
  %321 = load i64, ptr %23, align 8, !tbaa !5
  %322 = icmp sgt i64 %321, 0
  br i1 %322, label %.lr.ph625.preheader, label %359

.lr.ph625.preheader:                              ; preds = %._crit_edge584
  store i64 %321, ptr %25, align 8, !tbaa !5
  br label %.lr.ph625

.lr.ph625:                                        ; preds = %.lr.ph625.preheader, %._crit_edge618
  %323 = phi i64 [ %344, %._crit_edge618 ], [ %321, %.lr.ph625.preheader ]
  %324 = phi double [ %345, %._crit_edge618 ], [ 0.000000e+00, %.lr.ph625.preheader ]
  %.5.neg623 = phi i64 [ %.5.neg, %._crit_edge618 ], [ -1, %.lr.ph625.preheader ]
  %.5622 = phi i64 [ %346, %._crit_edge618 ], [ 1, %.lr.ph625.preheader ]
  %325 = load i64, ptr %4, align 8, !tbaa !5
  %326 = add nsw i64 %.5.neg623, 2
  %327 = add i64 %326, %325
  store i64 %327, ptr %26, align 8, !tbaa !5
  %328 = load i64, ptr %2, align 8, !tbaa !5
  %329 = add nsw i64 %.5.neg623, 1
  %330 = add i64 %329, %325
  %331 = add i64 %330, %328
  %332 = load i64, ptr %3, align 8, !tbaa !5
  %333 = add i64 %325, 1
  %334 = add i64 %333, %332
  %335 = call i64 @llvm.smin.i64(i64 %331, i64 %334)
  %336 = call i64 @llvm.smax.i64(i64 %327, i64 1)
  %.not514614 = icmp sgt i64 %336, %335
  br i1 %.not514614, label %._crit_edge618, label %.lr.ph617

.lr.ph617:                                        ; preds = %.lr.ph625
  %337 = mul nsw i64 %.5622, %33
  %invariant.gep619 = getelementptr %struct.doublecomplex, ptr %35, i64 %337
  br label %338

338:                                              ; preds = %.lr.ph617, %338
  %339 = phi double [ %324, %.lr.ph617 ], [ %342, %338 ]
  %.2471615 = phi i64 [ %336, %.lr.ph617 ], [ %343, %338 ]
  %gep620 = getelementptr %struct.doublecomplex, ptr %invariant.gep619, i64 %.2471615
  %340 = call double @z_abs(ptr noundef %gep620) #4
  %341 = fcmp oge double %339, %340
  %342 = select i1 %341, double %339, double %340
  %343 = add nuw nsw i64 %.2471615, 1
  %.not514.not = icmp slt i64 %.2471615, %335
  br i1 %.not514.not, label %338, label %._crit_edge618.loopexit, !llvm.loop !30

._crit_edge618.loopexit:                          ; preds = %338
  %.pre = load i64, ptr %25, align 8, !tbaa !5
  br label %._crit_edge618

._crit_edge618:                                   ; preds = %._crit_edge618.loopexit, %.lr.ph625
  %344 = phi i64 [ %.pre, %._crit_edge618.loopexit ], [ %323, %.lr.ph625 ]
  %345 = phi double [ %342, %._crit_edge618.loopexit ], [ %324, %.lr.ph625 ]
  %346 = add nuw nsw i64 %.5622, 1
  %.5.neg = xor i64 %.5622, -1
  %.not511.not = icmp slt i64 %.5622, %344
  br i1 %.not511.not, label %.lr.ph625, label %._crit_edge626, !llvm.loop !31

._crit_edge626:                                   ; preds = %._crit_edge618
  %.pre649 = load i64, ptr %23, align 8, !tbaa !5
  %347 = add nsw i64 %.pre649, -1
  %348 = load i64, ptr %3, align 8, !tbaa !5
  %349 = load i64, ptr %4, align 8, !tbaa !5
  %350 = add nsw i64 %349, %348
  store i64 %350, ptr %26, align 8, !tbaa !5
  %351 = call i64 @llvm.smin.i64(i64 %347, i64 %350)
  store i64 %351, ptr %25, align 8, !tbaa !5
  %reass.sub627 = sub i64 %350, %.pre649
  %352 = add i64 %reass.sub627, 2
  %353 = call i64 @llvm.smax.i64(i64 %352, i64 1)
  %354 = getelementptr %struct.doublecomplex, ptr %38, i64 %353
  %355 = getelementptr %struct.doublecomplex, ptr %354, i64 %36
  %356 = call double @zlantb_(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str, ptr noundef nonnull %23, ptr noundef nonnull %25, ptr noundef %355, ptr noundef nonnull %9, ptr noundef %22) #4
  %357 = fcmp oeq double %356, 0.000000e+00
  %358 = fdiv double %345, %356
  %.0 = select i1 %357, double 1.000000e+00, double %358
  store double %.0, ptr %22, align 8, !tbaa !10
  store double 0.000000e+00, ptr %18, align 8, !tbaa !10
  br label %507

359:                                              ; preds = %._crit_edge584, %.loopexit543
  %.518 = select i1 %.not485, i8 73, i8 49
  store i8 %.518, ptr %28, align 1, !tbaa !9
  %360 = call double @zlangb_(ptr noundef nonnull %28, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %22) #4
  store double %360, ptr %29, align 8, !tbaa !10
  %361 = load i64, ptr %3, align 8, !tbaa !5
  %362 = load i64, ptr %4, align 8, !tbaa !5
  %363 = add nsw i64 %362, %361
  store i64 %363, ptr %25, align 8, !tbaa !5
  %364 = call double @zlantb_(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %25, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %22) #4
  %365 = fcmp oeq double %364, 0.000000e+00
  br i1 %365, label %369, label %366

366:                                              ; preds = %359
  %367 = call double @zlangb_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %22) #4
  %368 = fdiv double %367, %364
  br label %369

369:                                              ; preds = %359, %366
  %.1 = phi double [ %368, %366 ], [ 1.000000e+00, %359 ]
  %370 = call i32 @zgbcon_(ptr noundef nonnull %28, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull %29, ptr noundef %18, ptr noundef %21, ptr noundef %22, ptr noundef nonnull %23) #4
  %371 = call i32 @zlacpy_(ptr noundef nonnull @.str.11, ptr noundef nonnull %2, ptr noundef nonnull %5, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %16, ptr noundef nonnull %17) #4
  %372 = call i32 @zgbtrs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef %16, ptr noundef nonnull %17, ptr noundef nonnull %23) #4
  %373 = call i32 @zgbrfs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %16, ptr noundef nonnull %17, ptr noundef %19, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef nonnull %23) #4
  br i1 %.not485, label %437, label %374

374:                                              ; preds = %369
  %.not507 = icmp eq i64 %.1461, 0
  br i1 %.not507, label %.loopexit, label %375

375:                                              ; preds = %374
  %376 = load i64, ptr %5, align 8, !tbaa !5
  %.not508590 = icmp slt i64 %376, 1
  br i1 %.not508590, label %._crit_edge594.thread, label %.lr.ph593

._crit_edge594.thread:                            ; preds = %375
  store i64 %376, ptr %25, align 8, !tbaa !5
  br label %.loopexit

.lr.ph593:                                        ; preds = %375
  %377 = load i64, ptr %2, align 8, !tbaa !5
  %.not510585 = icmp slt i64 %377, 1
  br i1 %.not510585, label %._crit_edge594.thread658, label %.lr.ph588.preheader

._crit_edge594.thread658:                         ; preds = %.lr.ph593
  store i64 %376, ptr %25, align 8, !tbaa !5
  br label %.lr.ph598

.lr.ph588.preheader:                              ; preds = %.lr.ph593
  %378 = mul i64 %44, %376
  %379 = add nsw i64 %377, -1
  %380 = shl i64 %44, 4
  %381 = add nuw i64 %376, 1152921504606846975
  %382 = mul i64 %44, %381
  %383 = add i64 %382, %377
  %384 = shl i64 %383, 4
  %scevgep731 = getelementptr i8, ptr %16, i64 %384
  %385 = shl i64 %377, 3
  %scevgep732 = getelementptr i8, ptr %13, i64 %385
  %min.iters.check739 = icmp ult i64 %377, 12
  %mul.result724 = shl i64 %379, 4
  %mul.result728 = shl i64 %379, 4
  %mul.overflow729 = icmp ugt i64 %379, 1152921504606846975
  %bound0733 = icmp ugt ptr %scevgep732, %16
  %bound1734 = icmp ugt ptr %scevgep731, %13
  %found.conflict735 = and i1 %bound0733, %bound1734
  %.mask822 = and i64 %44, 576460752303423488
  %stride.check736 = icmp ne i64 %.mask822, 0
  %386 = or i1 %found.conflict735, %stride.check736
  %n.vec742 = and i64 %377, 2305843009213693950
  %ind.end743 = or i64 %377, 1
  %cmp.n754 = icmp eq i64 %377, %n.vec742
  %xtraiter842 = and i64 %377, 1
  %lcmp.mod843.not = icmp eq i64 %xtraiter842, 0
  br label %.lr.ph588

.lr.ph588:                                        ; preds = %.lr.ph588.preheader, %._crit_edge589
  %indvar720 = phi i64 [ 0, %.lr.ph588.preheader ], [ %indvar.next721, %._crit_edge589 ]
  %.6591 = phi i64 [ 1, %.lr.ph588.preheader ], [ %427, %._crit_edge589 ]
  %387 = mul nsw i64 %.6591, %44
  br i1 %min.iters.check739, label %scalar.ph738.preheader, label %vector.scevcheck719

vector.scevcheck719:                              ; preds = %.lr.ph588
  %388 = mul i64 %380, %indvar720
  %scevgep726 = getelementptr i8, ptr %16, i64 %388
  %389 = or disjoint i64 %388, 8
  %scevgep722 = getelementptr i8, ptr %16, i64 %389
  %390 = getelementptr i8, ptr %scevgep722, i64 %mul.result724
  %391 = icmp ult ptr %390, %scevgep722
  %392 = getelementptr i8, ptr %scevgep726, i64 %mul.result728
  %393 = icmp ult ptr %392, %scevgep726
  %394 = or i1 %393, %mul.overflow729
  %395 = or i1 %391, %394
  %brmerge862 = select i1 %395, i1 true, i1 %386
  br i1 %brmerge862, label %scalar.ph738.preheader, label %vector.body745

vector.body745:                                   ; preds = %vector.scevcheck719, %vector.body745
  %index746 = phi i64 [ %index.next753, %vector.body745 ], [ 0, %vector.scevcheck719 ]
  %offset.idx747 = or disjoint i64 %index746, 1
  %396 = add nsw i64 %offset.idx747, %387
  %397 = getelementptr double, ptr %13, i64 %index746
  %wide.load748 = load <2 x double>, ptr %397, align 8, !tbaa !10, !alias.scope !32
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %396
  %wide.vec749 = load <4 x double>, ptr %398, align 8, !tbaa !10
  %strided.vec750 = shufflevector <4 x double> %wide.vec749, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec751 = shufflevector <4 x double> %wide.vec749, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %399 = fmul <2 x double> %wide.load748, %strided.vec750
  %400 = fmul <2 x double> %wide.load748, %strided.vec751
  %401 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %396
  %interleaved.vec752 = shufflevector <2 x double> %399, <2 x double> %400, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec752, ptr %401, align 8, !tbaa !10
  %index.next753 = add nuw i64 %index746, 2
  %402 = icmp eq i64 %index.next753, %n.vec742
  br i1 %402, label %middle.block737, label %vector.body745, !llvm.loop !35

middle.block737:                                  ; preds = %vector.body745
  br i1 %cmp.n754, label %._crit_edge589, label %scalar.ph738.preheader

scalar.ph738.preheader:                           ; preds = %vector.scevcheck719, %middle.block737, %.lr.ph588
  %.3472586.ph = phi i64 [ 1, %vector.scevcheck719 ], [ 1, %.lr.ph588 ], [ %ind.end743, %middle.block737 ]
  br i1 %lcmp.mod843.not, label %scalar.ph738.prol.loopexit, label %scalar.ph738.prol

scalar.ph738.prol:                                ; preds = %scalar.ph738.preheader
  %403 = getelementptr inbounds double, ptr %40, i64 %.3472586.ph
  %404 = load double, ptr %403, align 8, !tbaa !10
  %405 = getelementptr %struct.doublecomplex, ptr %46, i64 %.3472586.ph
  %406 = getelementptr %struct.doublecomplex, ptr %405, i64 %387
  %407 = load <2 x double>, ptr %406, align 8, !tbaa !10
  %408 = insertelement <2 x double> poison, double %404, i64 0
  %409 = shufflevector <2 x double> %408, <2 x double> poison, <2 x i32> zeroinitializer
  %410 = fmul <2 x double> %409, %407
  store <2 x double> %410, ptr %406, align 8, !tbaa !10
  %411 = add nuw nsw i64 %.3472586.ph, 1
  br label %scalar.ph738.prol.loopexit

scalar.ph738.prol.loopexit:                       ; preds = %scalar.ph738.prol, %scalar.ph738.preheader
  %.3472586.unr = phi i64 [ %.3472586.ph, %scalar.ph738.preheader ], [ %411, %scalar.ph738.prol ]
  %412 = icmp eq i64 %377, %.3472586.ph
  br i1 %412, label %._crit_edge589, label %scalar.ph738.preheader.new

scalar.ph738.preheader.new:                       ; preds = %scalar.ph738.prol.loopexit
  %invariant.gep853 = getelementptr %struct.doublecomplex, ptr %46, i64 %387
  %invariant.gep855 = getelementptr %struct.doublecomplex, ptr %46, i64 %387
  br label %scalar.ph738

scalar.ph738:                                     ; preds = %scalar.ph738, %scalar.ph738.preheader.new
  %.3472586 = phi i64 [ %.3472586.unr, %scalar.ph738.preheader.new ], [ %426, %scalar.ph738 ]
  %413 = getelementptr inbounds double, ptr %40, i64 %.3472586
  %414 = load double, ptr %413, align 8, !tbaa !10
  %gep854 = getelementptr %struct.doublecomplex, ptr %invariant.gep853, i64 %.3472586
  %415 = load <2 x double>, ptr %gep854, align 8, !tbaa !10
  %416 = insertelement <2 x double> poison, double %414, i64 0
  %417 = shufflevector <2 x double> %416, <2 x double> poison, <2 x i32> zeroinitializer
  %418 = fmul <2 x double> %417, %415
  store <2 x double> %418, ptr %gep854, align 8, !tbaa !10
  %419 = add nuw i64 %.3472586, 1
  %420 = getelementptr double, ptr %13, i64 %.3472586
  %421 = load double, ptr %420, align 8, !tbaa !10
  %gep856 = getelementptr %struct.doublecomplex, ptr %invariant.gep855, i64 %419
  %422 = load <2 x double>, ptr %gep856, align 8, !tbaa !10
  %423 = insertelement <2 x double> poison, double %421, i64 0
  %424 = shufflevector <2 x double> %423, <2 x double> poison, <2 x i32> zeroinitializer
  %425 = fmul <2 x double> %424, %422
  store <2 x double> %425, ptr %gep856, align 8, !tbaa !10
  %426 = add nuw i64 %.3472586, 2
  %exitcond641.not.1 = icmp eq i64 %419, %377
  br i1 %exitcond641.not.1, label %._crit_edge589, label %scalar.ph738, !llvm.loop !36

._crit_edge589:                                   ; preds = %scalar.ph738.prol.loopexit, %scalar.ph738, %middle.block737
  %427 = add nuw i64 %.6591, 1
  %exitcond642.not = icmp eq i64 %.6591, %376
  %indvar.next721 = add i64 %indvar720, 1
  br i1 %exitcond642.not, label %._crit_edge594, label %.lr.ph588, !llvm.loop !37

._crit_edge594:                                   ; preds = %._crit_edge589
  %428 = add i64 %377, %378
  store i64 %428, ptr %26, align 8, !tbaa !5
  store i64 %376, ptr %25, align 8, !tbaa !5
  br i1 %.not508590, label %.loopexit, label %.lr.ph598

.lr.ph598:                                        ; preds = %._crit_edge594.thread658, %._crit_edge594
  %429 = load double, ptr %30, align 8, !tbaa !10
  %min.iters.check757 = icmp eq i64 %376, 1
  br i1 %min.iters.check757, label %scalar.ph756.preheader, label %vector.ph758

vector.ph758:                                     ; preds = %.lr.ph598
  %n.vec760 = and i64 %376, 9223372036854775806
  %ind.end761 = or i64 %376, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %429, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body763

vector.body763:                                   ; preds = %vector.body763, %vector.ph758
  %index764 = phi i64 [ 0, %vector.ph758 ], [ %index.next767, %vector.body763 ]
  %430 = getelementptr double, ptr %19, i64 %index764
  %wide.load766 = load <2 x double>, ptr %430, align 8, !tbaa !10
  %431 = fdiv <2 x double> %wide.load766, %broadcast.splat
  store <2 x double> %431, ptr %430, align 8, !tbaa !10
  %index.next767 = add nuw i64 %index764, 2
  %432 = icmp eq i64 %index.next767, %n.vec760
  br i1 %432, label %middle.block755, label %vector.body763, !llvm.loop !38

middle.block755:                                  ; preds = %vector.body763
  %cmp.n768 = icmp eq i64 %376, %n.vec760
  br i1 %cmp.n768, label %.loopexit, label %scalar.ph756.preheader

scalar.ph756.preheader:                           ; preds = %middle.block755, %.lr.ph598
  %.7596.ph = phi i64 [ 1, %.lr.ph598 ], [ %ind.end761, %middle.block755 ]
  br label %scalar.ph756

scalar.ph756:                                     ; preds = %scalar.ph756.preheader, %scalar.ph756
  %.7596 = phi i64 [ %436, %scalar.ph756 ], [ %.7596.ph, %scalar.ph756.preheader ]
  %433 = getelementptr inbounds double, ptr %47, i64 %.7596
  %434 = load double, ptr %433, align 8, !tbaa !10
  %435 = fdiv double %434, %429
  store double %435, ptr %433, align 8, !tbaa !10
  %436 = add nuw i64 %.7596, 1
  %exitcond643.not = icmp eq i64 %.7596, %376
  br i1 %exitcond643.not, label %.loopexit, label %scalar.ph756, !llvm.loop !39

437:                                              ; preds = %369
  %.not503 = icmp eq i64 %.1457, 0
  br i1 %.not503, label %.loopexit, label %438

438:                                              ; preds = %437
  %439 = load i64, ptr %5, align 8, !tbaa !5
  %.not504605 = icmp slt i64 %439, 1
  br i1 %.not504605, label %._crit_edge609.thread, label %.lr.ph608

._crit_edge609.thread:                            ; preds = %438
  store i64 %439, ptr %25, align 8, !tbaa !5
  br label %.loopexit

.lr.ph608:                                        ; preds = %438
  %440 = load i64, ptr %2, align 8, !tbaa !5
  %.not506599 = icmp slt i64 %440, 1
  br i1 %.not506599, label %._crit_edge609.thread659, label %.lr.ph602.preheader

._crit_edge609.thread659:                         ; preds = %.lr.ph608
  store i64 %439, ptr %25, align 8, !tbaa !5
  br label %.lr.ph613

.lr.ph602.preheader:                              ; preds = %.lr.ph608
  %441 = mul i64 %44, %439
  %442 = add nsw i64 %440, -1
  %443 = shl i64 %44, 4
  %444 = add nuw i64 %439, 1152921504606846975
  %445 = mul i64 %44, %444
  %446 = add i64 %445, %440
  %447 = shl i64 %446, 4
  %scevgep781 = getelementptr i8, ptr %16, i64 %447
  %448 = shl i64 %440, 3
  %scevgep782 = getelementptr i8, ptr %12, i64 %448
  %min.iters.check789 = icmp ult i64 %440, 12
  %mul.result774 = shl i64 %442, 4
  %mul.result778 = shl i64 %442, 4
  %mul.overflow779 = icmp ugt i64 %442, 1152921504606846975
  %bound0783 = icmp ugt ptr %scevgep782, %16
  %bound1784 = icmp ugt ptr %scevgep781, %12
  %found.conflict785 = and i1 %bound0783, %bound1784
  %.mask823 = and i64 %44, 576460752303423488
  %stride.check786 = icmp ne i64 %.mask823, 0
  %449 = or i1 %found.conflict785, %stride.check786
  %n.vec792 = and i64 %440, 2305843009213693950
  %ind.end793 = or i64 %440, 1
  %cmp.n804 = icmp eq i64 %440, %n.vec792
  %xtraiter844 = and i64 %440, 1
  %lcmp.mod845.not = icmp eq i64 %xtraiter844, 0
  br label %.lr.ph602

.lr.ph602:                                        ; preds = %.lr.ph602.preheader, %._crit_edge603
  %indvar770 = phi i64 [ 0, %.lr.ph602.preheader ], [ %indvar.next771, %._crit_edge603 ]
  %.8606 = phi i64 [ 1, %.lr.ph602.preheader ], [ %490, %._crit_edge603 ]
  %450 = mul nsw i64 %.8606, %44
  br i1 %min.iters.check789, label %scalar.ph788.preheader, label %vector.scevcheck769

vector.scevcheck769:                              ; preds = %.lr.ph602
  %451 = mul i64 %443, %indvar770
  %scevgep776 = getelementptr i8, ptr %16, i64 %451
  %452 = or disjoint i64 %451, 8
  %scevgep772 = getelementptr i8, ptr %16, i64 %452
  %453 = getelementptr i8, ptr %scevgep772, i64 %mul.result774
  %454 = icmp ult ptr %453, %scevgep772
  %455 = getelementptr i8, ptr %scevgep776, i64 %mul.result778
  %456 = icmp ult ptr %455, %scevgep776
  %457 = or i1 %456, %mul.overflow779
  %458 = or i1 %454, %457
  %brmerge863 = select i1 %458, i1 true, i1 %449
  br i1 %brmerge863, label %scalar.ph788.preheader, label %vector.body795

vector.body795:                                   ; preds = %vector.scevcheck769, %vector.body795
  %index796 = phi i64 [ %index.next803, %vector.body795 ], [ 0, %vector.scevcheck769 ]
  %offset.idx797 = or disjoint i64 %index796, 1
  %459 = add nsw i64 %offset.idx797, %450
  %460 = getelementptr double, ptr %12, i64 %index796
  %wide.load798 = load <2 x double>, ptr %460, align 8, !tbaa !10, !alias.scope !40
  %461 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %459
  %wide.vec799 = load <4 x double>, ptr %461, align 8, !tbaa !10
  %strided.vec800 = shufflevector <4 x double> %wide.vec799, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec801 = shufflevector <4 x double> %wide.vec799, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %462 = fmul <2 x double> %wide.load798, %strided.vec800
  %463 = fmul <2 x double> %wide.load798, %strided.vec801
  %464 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %459
  %interleaved.vec802 = shufflevector <2 x double> %462, <2 x double> %463, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec802, ptr %464, align 8, !tbaa !10
  %index.next803 = add nuw i64 %index796, 2
  %465 = icmp eq i64 %index.next803, %n.vec792
  br i1 %465, label %middle.block787, label %vector.body795, !llvm.loop !43

middle.block787:                                  ; preds = %vector.body795
  br i1 %cmp.n804, label %._crit_edge603, label %scalar.ph788.preheader

scalar.ph788.preheader:                           ; preds = %vector.scevcheck769, %middle.block787, %.lr.ph602
  %.4473600.ph = phi i64 [ 1, %vector.scevcheck769 ], [ 1, %.lr.ph602 ], [ %ind.end793, %middle.block787 ]
  br i1 %lcmp.mod845.not, label %scalar.ph788.prol.loopexit, label %scalar.ph788.prol

scalar.ph788.prol:                                ; preds = %scalar.ph788.preheader
  %466 = getelementptr inbounds double, ptr %39, i64 %.4473600.ph
  %467 = load double, ptr %466, align 8, !tbaa !10
  %468 = getelementptr %struct.doublecomplex, ptr %46, i64 %.4473600.ph
  %469 = getelementptr %struct.doublecomplex, ptr %468, i64 %450
  %470 = load <2 x double>, ptr %469, align 8, !tbaa !10
  %471 = insertelement <2 x double> poison, double %467, i64 0
  %472 = shufflevector <2 x double> %471, <2 x double> poison, <2 x i32> zeroinitializer
  %473 = fmul <2 x double> %472, %470
  store <2 x double> %473, ptr %469, align 8, !tbaa !10
  %474 = add nuw nsw i64 %.4473600.ph, 1
  br label %scalar.ph788.prol.loopexit

scalar.ph788.prol.loopexit:                       ; preds = %scalar.ph788.prol, %scalar.ph788.preheader
  %.4473600.unr = phi i64 [ %.4473600.ph, %scalar.ph788.preheader ], [ %474, %scalar.ph788.prol ]
  %475 = icmp eq i64 %440, %.4473600.ph
  br i1 %475, label %._crit_edge603, label %scalar.ph788.preheader.new

scalar.ph788.preheader.new:                       ; preds = %scalar.ph788.prol.loopexit
  %invariant.gep857 = getelementptr %struct.doublecomplex, ptr %46, i64 %450
  %invariant.gep859 = getelementptr %struct.doublecomplex, ptr %46, i64 %450
  br label %scalar.ph788

scalar.ph788:                                     ; preds = %scalar.ph788, %scalar.ph788.preheader.new
  %.4473600 = phi i64 [ %.4473600.unr, %scalar.ph788.preheader.new ], [ %489, %scalar.ph788 ]
  %476 = getelementptr inbounds double, ptr %39, i64 %.4473600
  %477 = load double, ptr %476, align 8, !tbaa !10
  %gep858 = getelementptr %struct.doublecomplex, ptr %invariant.gep857, i64 %.4473600
  %478 = load <2 x double>, ptr %gep858, align 8, !tbaa !10
  %479 = insertelement <2 x double> poison, double %477, i64 0
  %480 = shufflevector <2 x double> %479, <2 x double> poison, <2 x i32> zeroinitializer
  %481 = fmul <2 x double> %480, %478
  store <2 x double> %481, ptr %gep858, align 8, !tbaa !10
  %482 = add nuw i64 %.4473600, 1
  %483 = getelementptr double, ptr %12, i64 %.4473600
  %484 = load double, ptr %483, align 8, !tbaa !10
  %gep860 = getelementptr %struct.doublecomplex, ptr %invariant.gep859, i64 %482
  %485 = load <2 x double>, ptr %gep860, align 8, !tbaa !10
  %486 = insertelement <2 x double> poison, double %484, i64 0
  %487 = shufflevector <2 x double> %486, <2 x double> poison, <2 x i32> zeroinitializer
  %488 = fmul <2 x double> %487, %485
  store <2 x double> %488, ptr %gep860, align 8, !tbaa !10
  %489 = add nuw i64 %.4473600, 2
  %exitcond644.not.1 = icmp eq i64 %482, %440
  br i1 %exitcond644.not.1, label %._crit_edge603, label %scalar.ph788, !llvm.loop !44

._crit_edge603:                                   ; preds = %scalar.ph788.prol.loopexit, %scalar.ph788, %middle.block787
  %490 = add nuw i64 %.8606, 1
  %exitcond645.not = icmp eq i64 %.8606, %439
  %indvar.next771 = add i64 %indvar770, 1
  br i1 %exitcond645.not, label %._crit_edge609, label %.lr.ph602, !llvm.loop !45

._crit_edge609:                                   ; preds = %._crit_edge603
  %491 = add i64 %440, %441
  store i64 %491, ptr %26, align 8, !tbaa !5
  store i64 %439, ptr %25, align 8, !tbaa !5
  br i1 %.not504605, label %.loopexit, label %.lr.ph613

.lr.ph613:                                        ; preds = %._crit_edge609.thread659, %._crit_edge609
  %492 = load double, ptr %32, align 8, !tbaa !10
  %min.iters.check807 = icmp eq i64 %439, 1
  br i1 %min.iters.check807, label %scalar.ph806.preheader, label %vector.ph808

vector.ph808:                                     ; preds = %.lr.ph613
  %n.vec810 = and i64 %439, 9223372036854775806
  %ind.end811 = or i64 %439, 1
  %broadcast.splatinsert817 = insertelement <2 x double> poison, double %492, i64 0
  %broadcast.splat818 = shufflevector <2 x double> %broadcast.splatinsert817, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body813

vector.body813:                                   ; preds = %vector.body813, %vector.ph808
  %index814 = phi i64 [ 0, %vector.ph808 ], [ %index.next819, %vector.body813 ]
  %493 = getelementptr double, ptr %19, i64 %index814
  %wide.load816 = load <2 x double>, ptr %493, align 8, !tbaa !10
  %494 = fdiv <2 x double> %wide.load816, %broadcast.splat818
  store <2 x double> %494, ptr %493, align 8, !tbaa !10
  %index.next819 = add nuw i64 %index814, 2
  %495 = icmp eq i64 %index.next819, %n.vec810
  br i1 %495, label %middle.block805, label %vector.body813, !llvm.loop !46

middle.block805:                                  ; preds = %vector.body813
  %cmp.n820 = icmp eq i64 %439, %n.vec810
  br i1 %cmp.n820, label %.loopexit, label %scalar.ph806.preheader

scalar.ph806.preheader:                           ; preds = %middle.block805, %.lr.ph613
  %.9611.ph = phi i64 [ 1, %.lr.ph613 ], [ %ind.end811, %middle.block805 ]
  br label %scalar.ph806

scalar.ph806:                                     ; preds = %scalar.ph806.preheader, %scalar.ph806
  %.9611 = phi i64 [ %499, %scalar.ph806 ], [ %.9611.ph, %scalar.ph806.preheader ]
  %496 = getelementptr inbounds double, ptr %47, i64 %.9611
  %497 = load double, ptr %496, align 8, !tbaa !10
  %498 = fdiv double %497, %492
  store double %498, ptr %496, align 8, !tbaa !10
  %499 = add nuw i64 %.9611, 1
  %exitcond646.not = icmp eq i64 %.9611, %439
  br i1 %exitcond646.not, label %.loopexit, label %scalar.ph806, !llvm.loop !47

.loopexit:                                        ; preds = %scalar.ph756, %scalar.ph806, %middle.block755, %middle.block805, %._crit_edge609.thread, %._crit_edge594.thread, %._crit_edge594, %._crit_edge609, %437, %374
  %500 = load double, ptr %18, align 8, !tbaa !10
  %501 = call double @dlamch_(ptr noundef nonnull @.str.12) #4
  %502 = fcmp olt double %500, %501
  br i1 %502, label %503, label %506

503:                                              ; preds = %.loopexit
  %504 = load i64, ptr %2, align 8, !tbaa !5
  %505 = add nsw i64 %504, 1
  store i64 %505, ptr %23, align 8, !tbaa !5
  br label %506

506:                                              ; preds = %503, %.loopexit
  store double %.1, ptr %22, align 8, !tbaa !10
  br label %507

507:                                              ; preds = %506, %._crit_edge626, %.thread535
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #4
  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
  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 @zgbequ_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare double @z_abs(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

; 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.smin.i64(i64, i64) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.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 = distinct !{!14, !13}
!15 = !{!16}
!16 = distinct !{!16, !17}
!17 = distinct !{!17, !"LVerDomain"}
!18 = distinct !{!18, !13, !19, !20}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !13, !19}
!22 = distinct !{!22, !13}
!23 = !{!24}
!24 = distinct !{!24, !25}
!25 = distinct !{!25, !"LVerDomain"}
!26 = distinct !{!26, !13, !19, !20}
!27 = distinct !{!27, !13, !19}
!28 = distinct !{!28, !13}
!29 = distinct !{!29, !13}
!30 = distinct !{!30, !13}
!31 = distinct !{!31, !13}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = distinct !{!35, !13, !19, !20}
!36 = distinct !{!36, !13, !19}
!37 = distinct !{!37, !13}
!38 = distinct !{!38, !13, !19, !20}
!39 = distinct !{!39, !13, !20, !19}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = distinct !{!43, !13, !19, !20}
!44 = distinct !{!44, !13, !19}
!45 = distinct !{!45, !13}
!46 = distinct !{!46, !13, !19, !20}
!47 = distinct !{!47, !13, !20, !19}


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