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

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

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

136:                                              ; preds = %22
  %137 = load i64, ptr %69, align 8, !tbaa !9
  %138 = icmp ne i64 %137, 0
  br i1 %138, label %139, label %141

139:                                              ; preds = %136, %22
  %140 = load ptr, ptr %33, align 8, !tbaa !5
  store i8 78, ptr %140, align 1, !tbaa !11
  store i64 0, ptr %78, align 8, !tbaa !9
  store i64 0, ptr %74, align 8, !tbaa !9
  br label %167

141:                                              ; preds = %136
  %142 = load ptr, ptr %33, align 8, !tbaa !5
  %143 = call i64 @lsame_(ptr noundef %142, ptr noundef @.str.2)
  %144 = icmp ne i64 %143, 0
  br i1 %144, label %149, label %145

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

149:                                              ; preds = %145, %141
  %150 = phi i1 [ true, %141 ], [ %148, %145 ]
  %151 = zext i1 %150 to i32
  %152 = sext i32 %151 to i64
  store i64 %152, ptr %78, align 8, !tbaa !9
  %153 = load ptr, ptr %33, align 8, !tbaa !5
  %154 = call i64 @lsame_(ptr noundef %153, ptr noundef @.str.4)
  %155 = icmp ne i64 %154, 0
  br i1 %155, label %160, label %156

156:                                              ; preds = %149
  %157 = load ptr, ptr %33, align 8, !tbaa !5
  %158 = call i64 @lsame_(ptr noundef %157, ptr noundef @.str.3)
  %159 = icmp ne i64 %158, 0
  br label %160

160:                                              ; preds = %156, %149
  %161 = phi i1 [ true, %149 ], [ %159, %156 ]
  %162 = zext i1 %161 to i32
  %163 = sext i32 %162 to i64
  store i64 %163, ptr %74, align 8, !tbaa !9
  %164 = call double @dlamch_(ptr noundef @.str.5)
  store double %164, ptr %77, align 8, !tbaa !12
  %165 = load double, ptr %77, align 8, !tbaa !12
  %166 = fdiv double 1.000000e+00, %165
  store double %166, ptr %72, align 8, !tbaa !12
  br label %167

167:                                              ; preds = %160, %139
  %168 = load i64, ptr %71, align 8, !tbaa !9
  %169 = icmp ne i64 %168, 0
  br i1 %169, label %179, label %170

170:                                              ; preds = %167
  %171 = load i64, ptr %69, align 8, !tbaa !9
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %179, label %173

173:                                              ; preds = %170
  %174 = load ptr, ptr %24, align 8, !tbaa !5
  %175 = call i64 @lsame_(ptr noundef %174, ptr noundef @.str.6)
  %176 = icmp ne i64 %175, 0
  br i1 %176, label %179, label %177

177:                                              ; preds = %173
  %178 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -1, ptr %178, align 8, !tbaa !9
  br label %447

179:                                              ; preds = %173, %170, %167
  %180 = load i64, ptr %76, align 8, !tbaa !9
  %181 = icmp ne i64 %180, 0
  br i1 %181, label %192, label %182

182:                                              ; preds = %179
  %183 = load ptr, ptr %25, align 8, !tbaa !5
  %184 = call i64 @lsame_(ptr noundef %183, ptr noundef @.str.7)
  %185 = icmp ne i64 %184, 0
  br i1 %185, label %192, label %186

186:                                              ; preds = %182
  %187 = load ptr, ptr %25, align 8, !tbaa !5
  %188 = call i64 @lsame_(ptr noundef %187, ptr noundef @.str.4)
  %189 = icmp ne i64 %188, 0
  br i1 %189, label %192, label %190

190:                                              ; preds = %186
  %191 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -2, ptr %191, align 8, !tbaa !9
  br label %446

192:                                              ; preds = %186, %182, %179
  %193 = load ptr, ptr %26, align 8, !tbaa !5
  %194 = load i64, ptr %193, align 8, !tbaa !9
  %195 = icmp slt i64 %194, 0
  br i1 %195, label %196, label %198

196:                                              ; preds = %192
  %197 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -3, ptr %197, align 8, !tbaa !9
  br label %445

198:                                              ; preds = %192
  %199 = load ptr, ptr %27, 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 %45, align 8, !tbaa !5
  store i64 -4, ptr %203, align 8, !tbaa !9
  br label %444

204:                                              ; preds = %198
  %205 = load ptr, ptr %29, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = load ptr, ptr %26, align 8, !tbaa !5
  %208 = load i64, ptr %207, align 8, !tbaa !9
  %209 = icmp sge i64 1, %208
  br i1 %209, label %210, label %211

210:                                              ; preds = %204
  br label %214

211:                                              ; preds = %204
  %212 = load ptr, ptr %26, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  br label %214

214:                                              ; preds = %211, %210
  %215 = phi i64 [ 1, %210 ], [ %213, %211 ]
  %216 = icmp slt i64 %206, %215
  br i1 %216, label %217, label %219

217:                                              ; preds = %214
  %218 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -6, ptr %218, align 8, !tbaa !9
  br label %443

219:                                              ; preds = %214
  %220 = load ptr, ptr %31, align 8, !tbaa !5
  %221 = load i64, ptr %220, align 8, !tbaa !9
  %222 = load ptr, ptr %26, align 8, !tbaa !5
  %223 = load i64, ptr %222, align 8, !tbaa !9
  %224 = icmp sge i64 1, %223
  br i1 %224, label %225, label %226

225:                                              ; preds = %219
  br label %229

226:                                              ; preds = %219
  %227 = load ptr, ptr %26, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  br label %229

229:                                              ; preds = %226, %225
  %230 = phi i64 [ 1, %225 ], [ %228, %226 ]
  %231 = icmp slt i64 %221, %230
  br i1 %231, label %232, label %234

232:                                              ; preds = %229
  %233 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -8, ptr %233, align 8, !tbaa !9
  br label %442

234:                                              ; preds = %229
  %235 = load ptr, ptr %24, align 8, !tbaa !5
  %236 = call i64 @lsame_(ptr noundef %235, ptr noundef @.str.6)
  %237 = icmp ne i64 %236, 0
  br i1 %237, label %238, label %250

238:                                              ; preds = %234
  %239 = load i64, ptr %78, align 8, !tbaa !9
  %240 = icmp ne i64 %239, 0
  br i1 %240, label %250, label %241

241:                                              ; preds = %238
  %242 = load i64, ptr %74, align 8, !tbaa !9
  %243 = icmp ne i64 %242, 0
  br i1 %243, label %250, label %244

244:                                              ; preds = %241
  %245 = load ptr, ptr %33, align 8, !tbaa !5
  %246 = call i64 @lsame_(ptr noundef %245, ptr noundef @.str)
  %247 = icmp ne i64 %246, 0
  br i1 %247, label %250, label %248

248:                                              ; preds = %244
  %249 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -10, ptr %249, align 8, !tbaa !9
  br label %441

250:                                              ; preds = %244, %241, %238, %234
  %251 = load i64, ptr %78, align 8, !tbaa !9
  %252 = icmp ne i64 %251, 0
  br i1 %252, label %253, label %325

253:                                              ; preds = %250
  %254 = load double, ptr %72, align 8, !tbaa !12
  store double %254, ptr %66, align 8, !tbaa !12
  store double 0.000000e+00, ptr %67, align 8, !tbaa !12
  %255 = load ptr, ptr %26, align 8, !tbaa !5
  %256 = load i64, ptr %255, align 8, !tbaa !9
  store i64 %256, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %290, %253
  %258 = load i64, ptr %63, align 8, !tbaa !9
  %259 = load i64, ptr %54, align 8, !tbaa !9
  %260 = icmp sle i64 %258, %259
  br i1 %260, label %261, label %293

261:                                              ; preds = %257
  %262 = load double, ptr %66, align 8, !tbaa !12
  store double %262, ptr %59, align 8, !tbaa !12
  %263 = load ptr, ptr %34, align 8, !tbaa !5
  %264 = load i64, ptr %63, align 8, !tbaa !9
  %265 = getelementptr inbounds double, ptr %263, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !12
  store double %266, ptr %60, align 8, !tbaa !12
  %267 = load double, ptr %59, align 8, !tbaa !12
  %268 = load double, ptr %60, align 8, !tbaa !12
  %269 = fcmp ole double %267, %268
  br i1 %269, label %270, label %272

270:                                              ; preds = %261
  %271 = load double, ptr %59, align 8, !tbaa !12
  br label %274

272:                                              ; preds = %261
  %273 = load double, ptr %60, align 8, !tbaa !12
  br label %274

274:                                              ; preds = %272, %270
  %275 = phi double [ %271, %270 ], [ %273, %272 ]
  store double %275, ptr %66, align 8, !tbaa !12
  %276 = load double, ptr %67, align 8, !tbaa !12
  store double %276, ptr %59, align 8, !tbaa !12
  %277 = load ptr, ptr %34, align 8, !tbaa !5
  %278 = load i64, ptr %63, align 8, !tbaa !9
  %279 = getelementptr inbounds double, ptr %277, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !12
  store double %280, ptr %60, align 8, !tbaa !12
  %281 = load double, ptr %59, align 8, !tbaa !12
  %282 = load double, ptr %60, align 8, !tbaa !12
  %283 = fcmp oge double %281, %282
  br i1 %283, label %284, label %286

284:                                              ; preds = %274
  %285 = load double, ptr %59, align 8, !tbaa !12
  br label %288

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

288:                                              ; preds = %286, %284
  %289 = phi double [ %285, %284 ], [ %287, %286 ]
  store double %289, ptr %67, align 8, !tbaa !12
  br label %290

290:                                              ; preds = %288
  %291 = load i64, ptr %63, align 8, !tbaa !9
  %292 = add nsw i64 %291, 1
  store i64 %292, ptr %63, align 8, !tbaa !9
  br label %257, !llvm.loop !14

293:                                              ; preds = %257
  %294 = load double, ptr %66, align 8, !tbaa !12
  %295 = fcmp ole double %294, 0.000000e+00
  br i1 %295, label %296, label %298

296:                                              ; preds = %293
  %297 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -11, ptr %297, align 8, !tbaa !9
  br label %324

298:                                              ; preds = %293
  %299 = load ptr, ptr %26, align 8, !tbaa !5
  %300 = load i64, ptr %299, align 8, !tbaa !9
  %301 = icmp sgt i64 %300, 0
  br i1 %301, label %302, label %322

302:                                              ; preds = %298
  %303 = load double, ptr %66, align 8, !tbaa !12
  %304 = load double, ptr %77, align 8, !tbaa !12
  %305 = fcmp oge double %303, %304
  br i1 %305, label %306, label %308

306:                                              ; preds = %302
  %307 = load double, ptr %66, align 8, !tbaa !12
  br label %310

308:                                              ; preds = %302
  %309 = load double, ptr %77, align 8, !tbaa !12
  br label %310

310:                                              ; preds = %308, %306
  %311 = phi double [ %307, %306 ], [ %309, %308 ]
  %312 = load double, ptr %67, align 8, !tbaa !12
  %313 = load double, ptr %72, align 8, !tbaa !12
  %314 = fcmp ole double %312, %313
  br i1 %314, label %315, label %317

315:                                              ; preds = %310
  %316 = load double, ptr %67, align 8, !tbaa !12
  br label %319

317:                                              ; preds = %310
  %318 = load double, ptr %72, align 8, !tbaa !12
  br label %319

319:                                              ; preds = %317, %315
  %320 = phi double [ %316, %315 ], [ %318, %317 ]
  %321 = fdiv double %311, %320
  store double %321, ptr %75, align 8, !tbaa !12
  br label %323

322:                                              ; preds = %298
  store double 1.000000e+00, ptr %75, align 8, !tbaa !12
  br label %323

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

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

325:                                              ; preds = %324, %250
  %326 = load i64, ptr %74, align 8, !tbaa !9
  %327 = icmp ne i64 %326, 0
  br i1 %327, label %328, label %404

328:                                              ; preds = %325
  %329 = load ptr, ptr %45, align 8, !tbaa !5
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = icmp eq i64 %330, 0
  br i1 %331, label %332, label %404

332:                                              ; preds = %328
  %333 = load double, ptr %72, align 8, !tbaa !12
  store double %333, ptr %66, align 8, !tbaa !12
  store double 0.000000e+00, ptr %67, align 8, !tbaa !12
  %334 = load ptr, ptr %26, align 8, !tbaa !5
  %335 = load i64, ptr %334, align 8, !tbaa !9
  store i64 %335, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %336

336:                                              ; preds = %369, %332
  %337 = load i64, ptr %63, align 8, !tbaa !9
  %338 = load i64, ptr %54, align 8, !tbaa !9
  %339 = icmp sle i64 %337, %338
  br i1 %339, label %340, label %372

340:                                              ; preds = %336
  %341 = load double, ptr %66, align 8, !tbaa !12
  store double %341, ptr %59, align 8, !tbaa !12
  %342 = load ptr, ptr %35, align 8, !tbaa !5
  %343 = load i64, ptr %63, align 8, !tbaa !9
  %344 = getelementptr inbounds double, ptr %342, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !12
  store double %345, ptr %60, align 8, !tbaa !12
  %346 = load double, ptr %59, align 8, !tbaa !12
  %347 = load double, ptr %60, align 8, !tbaa !12
  %348 = fcmp ole double %346, %347
  br i1 %348, label %349, label %351

349:                                              ; preds = %340
  %350 = load double, ptr %59, align 8, !tbaa !12
  br label %353

351:                                              ; preds = %340
  %352 = load double, ptr %60, align 8, !tbaa !12
  br label %353

353:                                              ; preds = %351, %349
  %354 = phi double [ %350, %349 ], [ %352, %351 ]
  store double %354, ptr %66, align 8, !tbaa !12
  %355 = load double, ptr %67, align 8, !tbaa !12
  store double %355, ptr %59, align 8, !tbaa !12
  %356 = load ptr, ptr %35, align 8, !tbaa !5
  %357 = load i64, ptr %63, align 8, !tbaa !9
  %358 = getelementptr inbounds double, ptr %356, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !12
  store double %359, ptr %60, align 8, !tbaa !12
  %360 = load double, ptr %59, align 8, !tbaa !12
  %361 = load double, ptr %60, align 8, !tbaa !12
  %362 = fcmp oge double %360, %361
  br i1 %362, label %363, label %365

363:                                              ; preds = %353
  %364 = load double, ptr %59, align 8, !tbaa !12
  br label %367

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

367:                                              ; preds = %365, %363
  %368 = phi double [ %364, %363 ], [ %366, %365 ]
  store double %368, ptr %67, align 8, !tbaa !12
  br label %369

369:                                              ; preds = %367
  %370 = load i64, ptr %63, align 8, !tbaa !9
  %371 = add nsw i64 %370, 1
  store i64 %371, ptr %63, align 8, !tbaa !9
  br label %336, !llvm.loop !16

372:                                              ; preds = %336
  %373 = load double, ptr %66, align 8, !tbaa !12
  %374 = fcmp ole double %373, 0.000000e+00
  br i1 %374, label %375, label %377

375:                                              ; preds = %372
  %376 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -12, ptr %376, align 8, !tbaa !9
  br label %403

377:                                              ; preds = %372
  %378 = load ptr, ptr %26, align 8, !tbaa !5
  %379 = load i64, ptr %378, align 8, !tbaa !9
  %380 = icmp sgt i64 %379, 0
  br i1 %380, label %381, label %401

381:                                              ; preds = %377
  %382 = load double, ptr %66, align 8, !tbaa !12
  %383 = load double, ptr %77, align 8, !tbaa !12
  %384 = fcmp oge double %382, %383
  br i1 %384, label %385, label %387

385:                                              ; preds = %381
  %386 = load double, ptr %66, align 8, !tbaa !12
  br label %389

387:                                              ; preds = %381
  %388 = load double, ptr %77, align 8, !tbaa !12
  br label %389

389:                                              ; preds = %387, %385
  %390 = phi double [ %386, %385 ], [ %388, %387 ]
  %391 = load double, ptr %67, align 8, !tbaa !12
  %392 = load double, ptr %72, align 8, !tbaa !12
  %393 = fcmp ole double %391, %392
  br i1 %393, label %394, label %396

394:                                              ; preds = %389
  %395 = load double, ptr %67, align 8, !tbaa !12
  br label %398

396:                                              ; preds = %389
  %397 = load double, ptr %72, align 8, !tbaa !12
  br label %398

398:                                              ; preds = %396, %394
  %399 = phi double [ %395, %394 ], [ %397, %396 ]
  %400 = fdiv double %390, %399
  store double %400, ptr %70, align 8, !tbaa !12
  br label %402

401:                                              ; preds = %377
  store double 1.000000e+00, ptr %70, align 8, !tbaa !12
  br label %402

402:                                              ; preds = %401, %398
  br label %403

403:                                              ; preds = %402, %375
  br label %404

404:                                              ; preds = %403, %328, %325
  %405 = load ptr, ptr %45, align 8, !tbaa !5
  %406 = load i64, ptr %405, align 8, !tbaa !9
  %407 = icmp eq i64 %406, 0
  br i1 %407, label %408, label %440

408:                                              ; preds = %404
  %409 = load ptr, ptr %37, align 8, !tbaa !5
  %410 = load i64, ptr %409, align 8, !tbaa !9
  %411 = load ptr, ptr %26, align 8, !tbaa !5
  %412 = load i64, ptr %411, align 8, !tbaa !9
  %413 = icmp sge i64 1, %412
  br i1 %413, label %414, label %415

414:                                              ; preds = %408
  br label %418

415:                                              ; preds = %408
  %416 = load ptr, ptr %26, align 8, !tbaa !5
  %417 = load i64, ptr %416, align 8, !tbaa !9
  br label %418

418:                                              ; preds = %415, %414
  %419 = phi i64 [ 1, %414 ], [ %417, %415 ]
  %420 = icmp slt i64 %410, %419
  br i1 %420, label %421, label %423

421:                                              ; preds = %418
  %422 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -14, ptr %422, align 8, !tbaa !9
  br label %439

423:                                              ; preds = %418
  %424 = load ptr, ptr %39, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = load ptr, ptr %26, align 8, !tbaa !5
  %427 = load i64, ptr %426, align 8, !tbaa !9
  %428 = icmp sge i64 1, %427
  br i1 %428, label %429, label %430

429:                                              ; preds = %423
  br label %433

430:                                              ; preds = %423
  %431 = load ptr, ptr %26, align 8, !tbaa !5
  %432 = load i64, ptr %431, align 8, !tbaa !9
  br label %433

433:                                              ; preds = %430, %429
  %434 = phi i64 [ 1, %429 ], [ %432, %430 ]
  %435 = icmp slt i64 %425, %434
  br i1 %435, label %436, label %438

436:                                              ; preds = %433
  %437 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -16, ptr %437, align 8, !tbaa !9
  br label %438

438:                                              ; preds = %436, %433
  br label %439

439:                                              ; preds = %438, %421
  br label %440

440:                                              ; preds = %439, %404
  br label %441

441:                                              ; preds = %440, %248
  br label %442

442:                                              ; preds = %441, %232
  br label %443

443:                                              ; preds = %442, %217
  br label %444

444:                                              ; preds = %443, %202
  br label %445

445:                                              ; preds = %444, %196
  br label %446

446:                                              ; preds = %445, %190
  br label %447

447:                                              ; preds = %446, %177
  %448 = load ptr, ptr %45, align 8, !tbaa !5
  %449 = load i64, ptr %448, align 8, !tbaa !9
  %450 = icmp ne i64 %449, 0
  br i1 %450, label %451, label %456

451:                                              ; preds = %447
  %452 = load ptr, ptr %45, align 8, !tbaa !5
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = sub nsw i64 0, %453
  store i64 %454, ptr %54, align 8, !tbaa !9
  %455 = call i32 @xerbla_(ptr noundef @.str.8, ptr noundef %54)
  store i32 0, ptr %23, align 4
  store i32 1, ptr %80, align 4
  br label %1025

456:                                              ; preds = %447
  %457 = load i64, ptr %69, align 8, !tbaa !9
  %458 = icmp ne i64 %457, 0
  br i1 %458, label %459, label %509

459:                                              ; preds = %456
  %460 = load ptr, ptr %26, align 8, !tbaa !5
  %461 = load ptr, ptr %26, align 8, !tbaa !5
  %462 = load ptr, ptr %28, align 8, !tbaa !5
  %463 = load i64, ptr %47, align 8, !tbaa !9
  %464 = getelementptr inbounds %struct.doublecomplex, ptr %462, i64 %463
  %465 = load ptr, ptr %29, align 8, !tbaa !5
  %466 = load ptr, ptr %34, align 8, !tbaa !5
  %467 = getelementptr inbounds double, ptr %466, i64 1
  %468 = load ptr, ptr %35, align 8, !tbaa !5
  %469 = getelementptr inbounds double, ptr %468, i64 1
  %470 = call i32 @zgeequ_(ptr noundef %460, ptr noundef %461, ptr noundef %464, ptr noundef %465, ptr noundef %467, ptr noundef %469, ptr noundef %75, ptr noundef %70, ptr noundef %64, ptr noundef %73)
  %471 = load i64, ptr %73, align 8, !tbaa !9
  %472 = icmp eq i64 %471, 0
  br i1 %472, label %473, label %508

473:                                              ; preds = %459
  %474 = load ptr, ptr %26, align 8, !tbaa !5
  %475 = load ptr, ptr %26, align 8, !tbaa !5
  %476 = load ptr, ptr %28, align 8, !tbaa !5
  %477 = load i64, ptr %47, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct.doublecomplex, ptr %476, i64 %477
  %479 = load ptr, ptr %29, align 8, !tbaa !5
  %480 = load ptr, ptr %34, align 8, !tbaa !5
  %481 = getelementptr inbounds double, ptr %480, i64 1
  %482 = load ptr, ptr %35, align 8, !tbaa !5
  %483 = getelementptr inbounds double, ptr %482, i64 1
  %484 = load ptr, ptr %33, align 8, !tbaa !5
  %485 = call i32 @zlaqge_(ptr noundef %474, ptr noundef %475, ptr noundef %478, ptr noundef %479, ptr noundef %481, ptr noundef %483, ptr noundef %75, ptr noundef %70, ptr noundef %64, ptr noundef %484)
  %486 = load ptr, ptr %33, align 8, !tbaa !5
  %487 = call i64 @lsame_(ptr noundef %486, ptr noundef @.str.2)
  %488 = icmp ne i64 %487, 0
  br i1 %488, label %493, label %489

489:                                              ; preds = %473
  %490 = load ptr, ptr %33, align 8, !tbaa !5
  %491 = call i64 @lsame_(ptr noundef %490, ptr noundef @.str.3)
  %492 = icmp ne i64 %491, 0
  br label %493

493:                                              ; preds = %489, %473
  %494 = phi i1 [ true, %473 ], [ %492, %489 ]
  %495 = zext i1 %494 to i32
  %496 = sext i32 %495 to i64
  store i64 %496, ptr %78, align 8, !tbaa !9
  %497 = load ptr, ptr %33, align 8, !tbaa !5
  %498 = call i64 @lsame_(ptr noundef %497, ptr noundef @.str.4)
  %499 = icmp ne i64 %498, 0
  br i1 %499, label %504, label %500

500:                                              ; preds = %493
  %501 = load ptr, ptr %33, align 8, !tbaa !5
  %502 = call i64 @lsame_(ptr noundef %501, ptr noundef @.str.3)
  %503 = icmp ne i64 %502, 0
  br label %504

504:                                              ; preds = %500, %493
  %505 = phi i1 [ true, %493 ], [ %503, %500 ]
  %506 = zext i1 %505 to i32
  %507 = sext i32 %506 to i64
  store i64 %507, ptr %74, align 8, !tbaa !9
  br label %508

508:                                              ; preds = %504, %459
  br label %509

509:                                              ; preds = %508, %456
  %510 = load i64, ptr %76, align 8, !tbaa !9
  %511 = icmp ne i64 %510, 0
  br i1 %511, label %512, label %584

512:                                              ; preds = %509
  %513 = load i64, ptr %78, align 8, !tbaa !9
  %514 = icmp ne i64 %513, 0
  br i1 %514, label %515, label %583

515:                                              ; preds = %512
  %516 = load ptr, ptr %27, align 8, !tbaa !5
  %517 = load i64, ptr %516, align 8, !tbaa !9
  store i64 %517, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %518

518:                                              ; preds = %579, %515
  %519 = load i64, ptr %63, align 8, !tbaa !9
  %520 = load i64, ptr %54, align 8, !tbaa !9
  %521 = icmp sle i64 %519, %520
  br i1 %521, label %522, label %582

522:                                              ; preds = %518
  %523 = load ptr, ptr %26, align 8, !tbaa !5
  %524 = load i64, ptr %523, align 8, !tbaa !9
  store i64 %524, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %62, align 8, !tbaa !9
  br label %525

525:                                              ; preds = %575, %522
  %526 = load i64, ptr %62, align 8, !tbaa !9
  %527 = load i64, ptr %55, align 8, !tbaa !9
  %528 = icmp sle i64 %526, %527
  br i1 %528, label %529, label %578

529:                                              ; preds = %525
  %530 = load i64, ptr %62, align 8, !tbaa !9
  %531 = load i64, ptr %63, align 8, !tbaa !9
  %532 = load i64, ptr %50, align 8, !tbaa !9
  %533 = mul nsw i64 %531, %532
  %534 = add nsw i64 %530, %533
  store i64 %534, ptr %56, align 8, !tbaa !9
  %535 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %535, ptr %57, align 8, !tbaa !9
  %536 = load i64, ptr %62, align 8, !tbaa !9
  %537 = load i64, ptr %63, align 8, !tbaa !9
  %538 = load i64, ptr %50, align 8, !tbaa !9
  %539 = mul nsw i64 %537, %538
  %540 = add nsw i64 %536, %539
  store i64 %540, ptr %58, align 8, !tbaa !9
  %541 = load ptr, ptr %34, align 8, !tbaa !5
  %542 = load i64, ptr %57, align 8, !tbaa !9
  %543 = getelementptr inbounds double, ptr %541, i64 %542
  %544 = load double, ptr %543, align 8, !tbaa !12
  %545 = load ptr, ptr %36, align 8, !tbaa !5
  %546 = load i64, ptr %58, align 8, !tbaa !9
  %547 = getelementptr inbounds %struct.doublecomplex, ptr %545, i64 %546
  %548 = getelementptr inbounds %struct.doublecomplex, ptr %547, i32 0, i32 0
  %549 = load double, ptr %548, align 8, !tbaa !17
  %550 = fmul double %544, %549
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  store double %550, ptr %551, align 8, !tbaa !17
  %552 = load ptr, ptr %34, align 8, !tbaa !5
  %553 = load i64, ptr %57, align 8, !tbaa !9
  %554 = getelementptr inbounds double, ptr %552, i64 %553
  %555 = load double, ptr %554, align 8, !tbaa !12
  %556 = load ptr, ptr %36, align 8, !tbaa !5
  %557 = load i64, ptr %58, align 8, !tbaa !9
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %556, i64 %557
  %559 = getelementptr inbounds %struct.doublecomplex, ptr %558, i32 0, i32 1
  %560 = load double, ptr %559, align 8, !tbaa !19
  %561 = fmul double %555, %560
  %562 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  store double %561, ptr %562, align 8, !tbaa !19
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  %564 = load double, ptr %563, align 8, !tbaa !17
  %565 = load ptr, ptr %36, align 8, !tbaa !5
  %566 = load i64, ptr %56, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.doublecomplex, ptr %565, i64 %566
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %567, i32 0, i32 0
  store double %564, ptr %568, align 8, !tbaa !17
  %569 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  %570 = load double, ptr %569, align 8, !tbaa !19
  %571 = load ptr, ptr %36, align 8, !tbaa !5
  %572 = load i64, ptr %56, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct.doublecomplex, ptr %571, i64 %572
  %574 = getelementptr inbounds %struct.doublecomplex, ptr %573, i32 0, i32 1
  store double %570, ptr %574, align 8, !tbaa !19
  br label %575

575:                                              ; preds = %529
  %576 = load i64, ptr %62, align 8, !tbaa !9
  %577 = add nsw i64 %576, 1
  store i64 %577, ptr %62, align 8, !tbaa !9
  br label %525, !llvm.loop !20

578:                                              ; preds = %525
  br label %579

579:                                              ; preds = %578
  %580 = load i64, ptr %63, align 8, !tbaa !9
  %581 = add nsw i64 %580, 1
  store i64 %581, ptr %63, align 8, !tbaa !9
  br label %518, !llvm.loop !21

582:                                              ; preds = %518
  br label %583

583:                                              ; preds = %582, %512
  br label %656

584:                                              ; preds = %509
  %585 = load i64, ptr %74, align 8, !tbaa !9
  %586 = icmp ne i64 %585, 0
  br i1 %586, label %587, label %655

587:                                              ; preds = %584
  %588 = load ptr, ptr %27, align 8, !tbaa !5
  %589 = load i64, ptr %588, align 8, !tbaa !9
  store i64 %589, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %590

590:                                              ; preds = %651, %587
  %591 = load i64, ptr %63, align 8, !tbaa !9
  %592 = load i64, ptr %54, align 8, !tbaa !9
  %593 = icmp sle i64 %591, %592
  br i1 %593, label %594, label %654

594:                                              ; preds = %590
  %595 = load ptr, ptr %26, align 8, !tbaa !5
  %596 = load i64, ptr %595, align 8, !tbaa !9
  store i64 %596, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %62, align 8, !tbaa !9
  br label %597

597:                                              ; preds = %647, %594
  %598 = load i64, ptr %62, align 8, !tbaa !9
  %599 = load i64, ptr %55, align 8, !tbaa !9
  %600 = icmp sle i64 %598, %599
  br i1 %600, label %601, label %650

601:                                              ; preds = %597
  %602 = load i64, ptr %62, align 8, !tbaa !9
  %603 = load i64, ptr %63, align 8, !tbaa !9
  %604 = load i64, ptr %50, align 8, !tbaa !9
  %605 = mul nsw i64 %603, %604
  %606 = add nsw i64 %602, %605
  store i64 %606, ptr %56, align 8, !tbaa !9
  %607 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %607, ptr %57, align 8, !tbaa !9
  %608 = load i64, ptr %62, align 8, !tbaa !9
  %609 = load i64, ptr %63, align 8, !tbaa !9
  %610 = load i64, ptr %50, align 8, !tbaa !9
  %611 = mul nsw i64 %609, %610
  %612 = add nsw i64 %608, %611
  store i64 %612, ptr %58, align 8, !tbaa !9
  %613 = load ptr, ptr %35, align 8, !tbaa !5
  %614 = load i64, ptr %57, align 8, !tbaa !9
  %615 = getelementptr inbounds double, ptr %613, i64 %614
  %616 = load double, ptr %615, align 8, !tbaa !12
  %617 = load ptr, ptr %36, align 8, !tbaa !5
  %618 = load i64, ptr %58, align 8, !tbaa !9
  %619 = getelementptr inbounds %struct.doublecomplex, ptr %617, i64 %618
  %620 = getelementptr inbounds %struct.doublecomplex, ptr %619, i32 0, i32 0
  %621 = load double, ptr %620, align 8, !tbaa !17
  %622 = fmul double %616, %621
  %623 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  store double %622, ptr %623, align 8, !tbaa !17
  %624 = load ptr, ptr %35, align 8, !tbaa !5
  %625 = load i64, ptr %57, align 8, !tbaa !9
  %626 = getelementptr inbounds double, ptr %624, i64 %625
  %627 = load double, ptr %626, align 8, !tbaa !12
  %628 = load ptr, ptr %36, align 8, !tbaa !5
  %629 = load i64, ptr %58, align 8, !tbaa !9
  %630 = getelementptr inbounds %struct.doublecomplex, ptr %628, i64 %629
  %631 = getelementptr inbounds %struct.doublecomplex, ptr %630, i32 0, i32 1
  %632 = load double, ptr %631, align 8, !tbaa !19
  %633 = fmul double %627, %632
  %634 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  store double %633, ptr %634, align 8, !tbaa !19
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  %636 = load double, ptr %635, align 8, !tbaa !17
  %637 = load ptr, ptr %36, align 8, !tbaa !5
  %638 = load i64, ptr %56, align 8, !tbaa !9
  %639 = getelementptr inbounds %struct.doublecomplex, ptr %637, i64 %638
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %639, i32 0, i32 0
  store double %636, ptr %640, align 8, !tbaa !17
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  %642 = load double, ptr %641, align 8, !tbaa !19
  %643 = load ptr, ptr %36, align 8, !tbaa !5
  %644 = load i64, ptr %56, align 8, !tbaa !9
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %643, i64 %644
  %646 = getelementptr inbounds %struct.doublecomplex, ptr %645, i32 0, i32 1
  store double %642, ptr %646, align 8, !tbaa !19
  br label %647

647:                                              ; preds = %601
  %648 = load i64, ptr %62, align 8, !tbaa !9
  %649 = add nsw i64 %648, 1
  store i64 %649, ptr %62, align 8, !tbaa !9
  br label %597, !llvm.loop !22

650:                                              ; preds = %597
  br label %651

651:                                              ; preds = %650
  %652 = load i64, ptr %63, align 8, !tbaa !9
  %653 = add nsw i64 %652, 1
  store i64 %653, ptr %63, align 8, !tbaa !9
  br label %590, !llvm.loop !23

654:                                              ; preds = %590
  br label %655

655:                                              ; preds = %654, %584
  br label %656

656:                                              ; preds = %655, %583
  %657 = load i64, ptr %71, align 8, !tbaa !9
  %658 = icmp ne i64 %657, 0
  br i1 %658, label %662, label %659

659:                                              ; preds = %656
  %660 = load i64, ptr %69, align 8, !tbaa !9
  %661 = icmp ne i64 %660, 0
  br i1 %661, label %662, label %718

662:                                              ; preds = %659, %656
  %663 = load ptr, ptr %26, align 8, !tbaa !5
  %664 = load ptr, ptr %26, align 8, !tbaa !5
  %665 = load ptr, ptr %28, align 8, !tbaa !5
  %666 = load i64, ptr %47, align 8, !tbaa !9
  %667 = getelementptr inbounds %struct.doublecomplex, ptr %665, i64 %666
  %668 = load ptr, ptr %29, align 8, !tbaa !5
  %669 = load ptr, ptr %30, align 8, !tbaa !5
  %670 = load i64, ptr %49, align 8, !tbaa !9
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %669, i64 %670
  %672 = load ptr, ptr %31, align 8, !tbaa !5
  %673 = call i32 @zlacpy_(ptr noundef @.str.9, ptr noundef %663, ptr noundef %664, ptr noundef %667, ptr noundef %668, ptr noundef %671, ptr noundef %672)
  %674 = load ptr, ptr %26, align 8, !tbaa !5
  %675 = load ptr, ptr %26, align 8, !tbaa !5
  %676 = load ptr, ptr %30, align 8, !tbaa !5
  %677 = load i64, ptr %49, align 8, !tbaa !9
  %678 = getelementptr inbounds %struct.doublecomplex, ptr %676, i64 %677
  %679 = load ptr, ptr %31, align 8, !tbaa !5
  %680 = load ptr, ptr %32, align 8, !tbaa !5
  %681 = getelementptr inbounds i64, ptr %680, i64 1
  %682 = load ptr, ptr %45, align 8, !tbaa !5
  %683 = call i32 @zgetrf_(ptr noundef %674, ptr noundef %675, ptr noundef %678, ptr noundef %679, ptr noundef %681, ptr noundef %682)
  %684 = load ptr, ptr %45, align 8, !tbaa !5
  %685 = load i64, ptr %684, align 8, !tbaa !9
  %686 = icmp sgt i64 %685, 0
  br i1 %686, label %687, label %717

687:                                              ; preds = %662
  %688 = load ptr, ptr %45, align 8, !tbaa !5
  %689 = load ptr, ptr %45, align 8, !tbaa !5
  %690 = load ptr, ptr %30, align 8, !tbaa !5
  %691 = load i64, ptr %49, align 8, !tbaa !9
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %690, i64 %691
  %693 = load ptr, ptr %31, align 8, !tbaa !5
  %694 = load ptr, ptr %44, align 8, !tbaa !5
  %695 = getelementptr inbounds double, ptr %694, i64 1
  %696 = call double @zlantr_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str, ptr noundef %688, ptr noundef %689, ptr noundef %692, ptr noundef %693, ptr noundef %695)
  store double %696, ptr %79, align 8, !tbaa !12
  %697 = load double, ptr %79, align 8, !tbaa !12
  %698 = fcmp oeq double %697, 0.000000e+00
  br i1 %698, label %699, label %700

699:                                              ; preds = %687
  store double 1.000000e+00, ptr %79, align 8, !tbaa !12
  br label %712

700:                                              ; preds = %687
  %701 = load ptr, ptr %26, align 8, !tbaa !5
  %702 = load ptr, ptr %45, align 8, !tbaa !5
  %703 = load ptr, ptr %28, align 8, !tbaa !5
  %704 = load i64, ptr %47, align 8, !tbaa !9
  %705 = getelementptr inbounds %struct.doublecomplex, ptr %703, i64 %704
  %706 = load ptr, ptr %29, align 8, !tbaa !5
  %707 = load ptr, ptr %44, align 8, !tbaa !5
  %708 = getelementptr inbounds double, ptr %707, i64 1
  %709 = call double @zlange_(ptr noundef @.str.10, ptr noundef %701, ptr noundef %702, ptr noundef %705, ptr noundef %706, ptr noundef %708)
  %710 = load double, ptr %79, align 8, !tbaa !12
  %711 = fdiv double %709, %710
  store double %711, ptr %79, align 8, !tbaa !12
  br label %712

712:                                              ; preds = %700, %699
  %713 = load double, ptr %79, align 8, !tbaa !12
  %714 = load ptr, ptr %44, align 8, !tbaa !5
  %715 = getelementptr inbounds double, ptr %714, i64 1
  store double %713, ptr %715, align 8, !tbaa !12
  %716 = load ptr, ptr %40, align 8, !tbaa !5
  store double 0.000000e+00, ptr %716, align 8, !tbaa !12
  store i32 0, ptr %23, align 4
  store i32 1, ptr %80, align 4
  br label %1025

717:                                              ; preds = %662
  br label %718

718:                                              ; preds = %717, %659
  %719 = load i64, ptr %76, align 8, !tbaa !9
  %720 = icmp ne i64 %719, 0
  br i1 %720, label %721, label %723

721:                                              ; preds = %718
  %722 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  store i8 49, ptr %722, align 1, !tbaa !11
  br label %725

723:                                              ; preds = %718
  %724 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  store i8 73, ptr %724, align 1, !tbaa !11
  br label %725

725:                                              ; preds = %723, %721
  %726 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  %727 = load ptr, ptr %26, align 8, !tbaa !5
  %728 = load ptr, ptr %26, align 8, !tbaa !5
  %729 = load ptr, ptr %28, align 8, !tbaa !5
  %730 = load i64, ptr %47, align 8, !tbaa !9
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %729, i64 %730
  %732 = load ptr, ptr %29, align 8, !tbaa !5
  %733 = load ptr, ptr %44, align 8, !tbaa !5
  %734 = getelementptr inbounds double, ptr %733, i64 1
  %735 = call double @zlange_(ptr noundef %726, ptr noundef %727, ptr noundef %728, ptr noundef %731, ptr noundef %732, ptr noundef %734)
  store double %735, ptr %68, align 8, !tbaa !12
  %736 = load ptr, ptr %26, align 8, !tbaa !5
  %737 = load ptr, ptr %26, align 8, !tbaa !5
  %738 = load ptr, ptr %30, align 8, !tbaa !5
  %739 = load i64, ptr %49, align 8, !tbaa !9
  %740 = getelementptr inbounds %struct.doublecomplex, ptr %738, i64 %739
  %741 = load ptr, ptr %31, align 8, !tbaa !5
  %742 = load ptr, ptr %44, align 8, !tbaa !5
  %743 = getelementptr inbounds double, ptr %742, i64 1
  %744 = call double @zlantr_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str, ptr noundef %736, ptr noundef %737, ptr noundef %740, ptr noundef %741, ptr noundef %743)
  store double %744, ptr %79, align 8, !tbaa !12
  %745 = load double, ptr %79, align 8, !tbaa !12
  %746 = fcmp oeq double %745, 0.000000e+00
  br i1 %746, label %747, label %748

747:                                              ; preds = %725
  store double 1.000000e+00, ptr %79, align 8, !tbaa !12
  br label %760

748:                                              ; preds = %725
  %749 = load ptr, ptr %26, align 8, !tbaa !5
  %750 = load ptr, ptr %26, align 8, !tbaa !5
  %751 = load ptr, ptr %28, align 8, !tbaa !5
  %752 = load i64, ptr %47, align 8, !tbaa !9
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %751, i64 %752
  %754 = load ptr, ptr %29, align 8, !tbaa !5
  %755 = load ptr, ptr %44, align 8, !tbaa !5
  %756 = getelementptr inbounds double, ptr %755, i64 1
  %757 = call double @zlange_(ptr noundef @.str.10, ptr noundef %749, ptr noundef %750, ptr noundef %753, ptr noundef %754, ptr noundef %756)
  %758 = load double, ptr %79, align 8, !tbaa !12
  %759 = fdiv double %757, %758
  store double %759, ptr %79, align 8, !tbaa !12
  br label %760

760:                                              ; preds = %748, %747
  %761 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  %762 = load ptr, ptr %26, align 8, !tbaa !5
  %763 = load ptr, ptr %30, align 8, !tbaa !5
  %764 = load i64, ptr %49, align 8, !tbaa !9
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %764
  %766 = load ptr, ptr %31, align 8, !tbaa !5
  %767 = load ptr, ptr %40, align 8, !tbaa !5
  %768 = load ptr, ptr %43, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %768, i64 1
  %770 = load ptr, ptr %44, align 8, !tbaa !5
  %771 = getelementptr inbounds double, ptr %770, i64 1
  %772 = load ptr, ptr %45, align 8, !tbaa !5
  %773 = call i32 @zgecon_(ptr noundef %761, ptr noundef %762, ptr noundef %765, ptr noundef %766, ptr noundef %68, ptr noundef %767, ptr noundef %769, ptr noundef %771, ptr noundef %772)
  %774 = load ptr, ptr %26, align 8, !tbaa !5
  %775 = load ptr, ptr %27, align 8, !tbaa !5
  %776 = load ptr, ptr %36, align 8, !tbaa !5
  %777 = load i64, ptr %51, align 8, !tbaa !9
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %776, i64 %777
  %779 = load ptr, ptr %37, align 8, !tbaa !5
  %780 = load ptr, ptr %38, align 8, !tbaa !5
  %781 = load i64, ptr %53, align 8, !tbaa !9
  %782 = getelementptr inbounds %struct.doublecomplex, ptr %780, i64 %781
  %783 = load ptr, ptr %39, align 8, !tbaa !5
  %784 = call i32 @zlacpy_(ptr noundef @.str.9, ptr noundef %774, ptr noundef %775, ptr noundef %778, ptr noundef %779, ptr noundef %782, ptr noundef %783)
  %785 = load ptr, ptr %25, align 8, !tbaa !5
  %786 = load ptr, ptr %26, align 8, !tbaa !5
  %787 = load ptr, ptr %27, align 8, !tbaa !5
  %788 = load ptr, ptr %30, align 8, !tbaa !5
  %789 = load i64, ptr %49, align 8, !tbaa !9
  %790 = getelementptr inbounds %struct.doublecomplex, ptr %788, i64 %789
  %791 = load ptr, ptr %31, align 8, !tbaa !5
  %792 = load ptr, ptr %32, align 8, !tbaa !5
  %793 = getelementptr inbounds i64, ptr %792, i64 1
  %794 = load ptr, ptr %38, align 8, !tbaa !5
  %795 = load i64, ptr %53, align 8, !tbaa !9
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %794, i64 %795
  %797 = load ptr, ptr %39, align 8, !tbaa !5
  %798 = load ptr, ptr %45, align 8, !tbaa !5
  %799 = call i32 @zgetrs_(ptr noundef %785, ptr noundef %786, ptr noundef %787, ptr noundef %790, ptr noundef %791, ptr noundef %793, ptr noundef %796, ptr noundef %797, ptr noundef %798)
  %800 = load ptr, ptr %25, align 8, !tbaa !5
  %801 = load ptr, ptr %26, align 8, !tbaa !5
  %802 = load ptr, ptr %27, align 8, !tbaa !5
  %803 = load ptr, ptr %28, align 8, !tbaa !5
  %804 = load i64, ptr %47, align 8, !tbaa !9
  %805 = getelementptr inbounds %struct.doublecomplex, ptr %803, i64 %804
  %806 = load ptr, ptr %29, align 8, !tbaa !5
  %807 = load ptr, ptr %30, align 8, !tbaa !5
  %808 = load i64, ptr %49, align 8, !tbaa !9
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %807, i64 %808
  %810 = load ptr, ptr %31, align 8, !tbaa !5
  %811 = load ptr, ptr %32, align 8, !tbaa !5
  %812 = getelementptr inbounds i64, ptr %811, i64 1
  %813 = load ptr, ptr %36, align 8, !tbaa !5
  %814 = load i64, ptr %51, align 8, !tbaa !9
  %815 = getelementptr inbounds %struct.doublecomplex, ptr %813, i64 %814
  %816 = load ptr, ptr %37, align 8, !tbaa !5
  %817 = load ptr, ptr %38, align 8, !tbaa !5
  %818 = load i64, ptr %53, align 8, !tbaa !9
  %819 = getelementptr inbounds %struct.doublecomplex, ptr %817, i64 %818
  %820 = load ptr, ptr %39, align 8, !tbaa !5
  %821 = load ptr, ptr %41, align 8, !tbaa !5
  %822 = getelementptr inbounds double, ptr %821, i64 1
  %823 = load ptr, ptr %42, align 8, !tbaa !5
  %824 = getelementptr inbounds double, ptr %823, i64 1
  %825 = load ptr, ptr %43, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.doublecomplex, ptr %825, i64 1
  %827 = load ptr, ptr %44, align 8, !tbaa !5
  %828 = getelementptr inbounds double, ptr %827, i64 1
  %829 = load ptr, ptr %45, align 8, !tbaa !5
  %830 = call i32 @zgerfs_(ptr noundef %800, ptr noundef %801, ptr noundef %802, ptr noundef %805, ptr noundef %806, ptr noundef %809, ptr noundef %810, ptr noundef %812, ptr noundef %815, ptr noundef %816, ptr noundef %819, ptr noundef %820, ptr noundef %822, ptr noundef %824, ptr noundef %826, ptr noundef %828, ptr noundef %829)
  %831 = load i64, ptr %76, align 8, !tbaa !9
  %832 = icmp ne i64 %831, 0
  br i1 %832, label %833, label %922

833:                                              ; preds = %760
  %834 = load i64, ptr %74, align 8, !tbaa !9
  %835 = icmp ne i64 %834, 0
  br i1 %835, label %836, label %921

836:                                              ; preds = %833
  %837 = load ptr, ptr %27, align 8, !tbaa !5
  %838 = load i64, ptr %837, align 8, !tbaa !9
  store i64 %838, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %839

839:                                              ; preds = %900, %836
  %840 = load i64, ptr %63, align 8, !tbaa !9
  %841 = load i64, ptr %54, align 8, !tbaa !9
  %842 = icmp sle i64 %840, %841
  br i1 %842, label %843, label %903

843:                                              ; preds = %839
  %844 = load ptr, ptr %26, align 8, !tbaa !5
  %845 = load i64, ptr %844, align 8, !tbaa !9
  store i64 %845, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %62, align 8, !tbaa !9
  br label %846

846:                                              ; preds = %896, %843
  %847 = load i64, ptr %62, align 8, !tbaa !9
  %848 = load i64, ptr %55, align 8, !tbaa !9
  %849 = icmp sle i64 %847, %848
  br i1 %849, label %850, label %899

850:                                              ; preds = %846
  %851 = load i64, ptr %62, align 8, !tbaa !9
  %852 = load i64, ptr %63, align 8, !tbaa !9
  %853 = load i64, ptr %52, align 8, !tbaa !9
  %854 = mul nsw i64 %852, %853
  %855 = add nsw i64 %851, %854
  store i64 %855, ptr %56, align 8, !tbaa !9
  %856 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %856, ptr %57, align 8, !tbaa !9
  %857 = load i64, ptr %62, align 8, !tbaa !9
  %858 = load i64, ptr %63, align 8, !tbaa !9
  %859 = load i64, ptr %52, align 8, !tbaa !9
  %860 = mul nsw i64 %858, %859
  %861 = add nsw i64 %857, %860
  store i64 %861, ptr %58, align 8, !tbaa !9
  %862 = load ptr, ptr %35, align 8, !tbaa !5
  %863 = load i64, ptr %57, align 8, !tbaa !9
  %864 = getelementptr inbounds double, ptr %862, i64 %863
  %865 = load double, ptr %864, align 8, !tbaa !12
  %866 = load ptr, ptr %38, align 8, !tbaa !5
  %867 = load i64, ptr %58, align 8, !tbaa !9
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %866, i64 %867
  %869 = getelementptr inbounds %struct.doublecomplex, ptr %868, i32 0, i32 0
  %870 = load double, ptr %869, align 8, !tbaa !17
  %871 = fmul double %865, %870
  %872 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  store double %871, ptr %872, align 8, !tbaa !17
  %873 = load ptr, ptr %35, align 8, !tbaa !5
  %874 = load i64, ptr %57, align 8, !tbaa !9
  %875 = getelementptr inbounds double, ptr %873, i64 %874
  %876 = load double, ptr %875, align 8, !tbaa !12
  %877 = load ptr, ptr %38, align 8, !tbaa !5
  %878 = load i64, ptr %58, align 8, !tbaa !9
  %879 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 %878
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %879, i32 0, i32 1
  %881 = load double, ptr %880, align 8, !tbaa !19
  %882 = fmul double %876, %881
  %883 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  store double %882, ptr %883, align 8, !tbaa !19
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  %885 = load double, ptr %884, align 8, !tbaa !17
  %886 = load ptr, ptr %38, align 8, !tbaa !5
  %887 = load i64, ptr %56, align 8, !tbaa !9
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %886, i64 %887
  %889 = getelementptr inbounds %struct.doublecomplex, ptr %888, i32 0, i32 0
  store double %885, ptr %889, align 8, !tbaa !17
  %890 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  %891 = load double, ptr %890, align 8, !tbaa !19
  %892 = load ptr, ptr %38, align 8, !tbaa !5
  %893 = load i64, ptr %56, align 8, !tbaa !9
  %894 = getelementptr inbounds %struct.doublecomplex, ptr %892, i64 %893
  %895 = getelementptr inbounds %struct.doublecomplex, ptr %894, i32 0, i32 1
  store double %891, ptr %895, align 8, !tbaa !19
  br label %896

896:                                              ; preds = %850
  %897 = load i64, ptr %62, align 8, !tbaa !9
  %898 = add nsw i64 %897, 1
  store i64 %898, ptr %62, align 8, !tbaa !9
  br label %846, !llvm.loop !24

899:                                              ; preds = %846
  br label %900

900:                                              ; preds = %899
  %901 = load i64, ptr %63, align 8, !tbaa !9
  %902 = add nsw i64 %901, 1
  store i64 %902, ptr %63, align 8, !tbaa !9
  br label %839, !llvm.loop !25

903:                                              ; preds = %839
  %904 = load ptr, ptr %27, align 8, !tbaa !5
  %905 = load i64, ptr %904, align 8, !tbaa !9
  store i64 %905, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %906

906:                                              ; preds = %917, %903
  %907 = load i64, ptr %63, align 8, !tbaa !9
  %908 = load i64, ptr %54, align 8, !tbaa !9
  %909 = icmp sle i64 %907, %908
  br i1 %909, label %910, label %920

910:                                              ; preds = %906
  %911 = load double, ptr %70, align 8, !tbaa !12
  %912 = load ptr, ptr %41, align 8, !tbaa !5
  %913 = load i64, ptr %63, align 8, !tbaa !9
  %914 = getelementptr inbounds double, ptr %912, i64 %913
  %915 = load double, ptr %914, align 8, !tbaa !12
  %916 = fdiv double %915, %911
  store double %916, ptr %914, align 8, !tbaa !12
  br label %917

917:                                              ; preds = %910
  %918 = load i64, ptr %63, align 8, !tbaa !9
  %919 = add nsw i64 %918, 1
  store i64 %919, ptr %63, align 8, !tbaa !9
  br label %906, !llvm.loop !26

920:                                              ; preds = %906
  br label %921

921:                                              ; preds = %920, %833
  br label %1011

922:                                              ; preds = %760
  %923 = load i64, ptr %78, align 8, !tbaa !9
  %924 = icmp ne i64 %923, 0
  br i1 %924, label %925, label %1010

925:                                              ; preds = %922
  %926 = load ptr, ptr %27, align 8, !tbaa !5
  %927 = load i64, ptr %926, align 8, !tbaa !9
  store i64 %927, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %928

928:                                              ; preds = %989, %925
  %929 = load i64, ptr %63, align 8, !tbaa !9
  %930 = load i64, ptr %54, align 8, !tbaa !9
  %931 = icmp sle i64 %929, %930
  br i1 %931, label %932, label %992

932:                                              ; preds = %928
  %933 = load ptr, ptr %26, align 8, !tbaa !5
  %934 = load i64, ptr %933, align 8, !tbaa !9
  store i64 %934, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %62, align 8, !tbaa !9
  br label %935

935:                                              ; preds = %985, %932
  %936 = load i64, ptr %62, align 8, !tbaa !9
  %937 = load i64, ptr %55, align 8, !tbaa !9
  %938 = icmp sle i64 %936, %937
  br i1 %938, label %939, label %988

939:                                              ; preds = %935
  %940 = load i64, ptr %62, align 8, !tbaa !9
  %941 = load i64, ptr %63, align 8, !tbaa !9
  %942 = load i64, ptr %52, align 8, !tbaa !9
  %943 = mul nsw i64 %941, %942
  %944 = add nsw i64 %940, %943
  store i64 %944, ptr %56, align 8, !tbaa !9
  %945 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %945, ptr %57, align 8, !tbaa !9
  %946 = load i64, ptr %62, align 8, !tbaa !9
  %947 = load i64, ptr %63, align 8, !tbaa !9
  %948 = load i64, ptr %52, align 8, !tbaa !9
  %949 = mul nsw i64 %947, %948
  %950 = add nsw i64 %946, %949
  store i64 %950, ptr %58, align 8, !tbaa !9
  %951 = load ptr, ptr %34, align 8, !tbaa !5
  %952 = load i64, ptr %57, align 8, !tbaa !9
  %953 = getelementptr inbounds double, ptr %951, i64 %952
  %954 = load double, ptr %953, align 8, !tbaa !12
  %955 = load ptr, ptr %38, align 8, !tbaa !5
  %956 = load i64, ptr %58, align 8, !tbaa !9
  %957 = getelementptr inbounds %struct.doublecomplex, ptr %955, i64 %956
  %958 = getelementptr inbounds %struct.doublecomplex, ptr %957, i32 0, i32 0
  %959 = load double, ptr %958, align 8, !tbaa !17
  %960 = fmul double %954, %959
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  store double %960, ptr %961, align 8, !tbaa !17
  %962 = load ptr, ptr %34, align 8, !tbaa !5
  %963 = load i64, ptr %57, align 8, !tbaa !9
  %964 = getelementptr inbounds double, ptr %962, i64 %963
  %965 = load double, ptr %964, align 8, !tbaa !12
  %966 = load ptr, ptr %38, align 8, !tbaa !5
  %967 = load i64, ptr %58, align 8, !tbaa !9
  %968 = getelementptr inbounds %struct.doublecomplex, ptr %966, i64 %967
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %968, i32 0, i32 1
  %970 = load double, ptr %969, align 8, !tbaa !19
  %971 = fmul double %965, %970
  %972 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  store double %971, ptr %972, align 8, !tbaa !19
  %973 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 0
  %974 = load double, ptr %973, align 8, !tbaa !17
  %975 = load ptr, ptr %38, align 8, !tbaa !5
  %976 = load i64, ptr %56, align 8, !tbaa !9
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %975, i64 %976
  %978 = getelementptr inbounds %struct.doublecomplex, ptr %977, i32 0, i32 0
  store double %974, ptr %978, align 8, !tbaa !17
  %979 = getelementptr inbounds %struct.doublecomplex, ptr %61, i32 0, i32 1
  %980 = load double, ptr %979, align 8, !tbaa !19
  %981 = load ptr, ptr %38, align 8, !tbaa !5
  %982 = load i64, ptr %56, align 8, !tbaa !9
  %983 = getelementptr inbounds %struct.doublecomplex, ptr %981, i64 %982
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %983, i32 0, i32 1
  store double %980, ptr %984, align 8, !tbaa !19
  br label %985

985:                                              ; preds = %939
  %986 = load i64, ptr %62, align 8, !tbaa !9
  %987 = add nsw i64 %986, 1
  store i64 %987, ptr %62, align 8, !tbaa !9
  br label %935, !llvm.loop !27

988:                                              ; preds = %935
  br label %989

989:                                              ; preds = %988
  %990 = load i64, ptr %63, align 8, !tbaa !9
  %991 = add nsw i64 %990, 1
  store i64 %991, ptr %63, align 8, !tbaa !9
  br label %928, !llvm.loop !28

992:                                              ; preds = %928
  %993 = load ptr, ptr %27, align 8, !tbaa !5
  %994 = load i64, ptr %993, align 8, !tbaa !9
  store i64 %994, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %995

995:                                              ; preds = %1006, %992
  %996 = load i64, ptr %63, align 8, !tbaa !9
  %997 = load i64, ptr %54, align 8, !tbaa !9
  %998 = icmp sle i64 %996, %997
  br i1 %998, label %999, label %1009

999:                                              ; preds = %995
  %1000 = load double, ptr %75, align 8, !tbaa !12
  %1001 = load ptr, ptr %41, align 8, !tbaa !5
  %1002 = load i64, ptr %63, align 8, !tbaa !9
  %1003 = getelementptr inbounds double, ptr %1001, i64 %1002
  %1004 = load double, ptr %1003, align 8, !tbaa !12
  %1005 = fdiv double %1004, %1000
  store double %1005, ptr %1003, align 8, !tbaa !12
  br label %1006

1006:                                             ; preds = %999
  %1007 = load i64, ptr %63, align 8, !tbaa !9
  %1008 = add nsw i64 %1007, 1
  store i64 %1008, ptr %63, align 8, !tbaa !9
  br label %995, !llvm.loop !29

1009:                                             ; preds = %995
  br label %1010

1010:                                             ; preds = %1009, %922
  br label %1011

1011:                                             ; preds = %1010, %921
  %1012 = load ptr, ptr %40, align 8, !tbaa !5
  %1013 = load double, ptr %1012, align 8, !tbaa !12
  %1014 = call double @dlamch_(ptr noundef @.str.12)
  %1015 = fcmp olt double %1013, %1014
  br i1 %1015, label %1016, label %1021

1016:                                             ; preds = %1011
  %1017 = load ptr, ptr %26, align 8, !tbaa !5
  %1018 = load i64, ptr %1017, align 8, !tbaa !9
  %1019 = add nsw i64 %1018, 1
  %1020 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 %1019, ptr %1020, align 8, !tbaa !9
  br label %1021

1021:                                             ; preds = %1016, %1011
  %1022 = load double, ptr %79, align 8, !tbaa !12
  %1023 = load ptr, ptr %44, align 8, !tbaa !5
  %1024 = getelementptr inbounds double, ptr %1023, i64 1
  store double %1022, ptr %1024, align 8, !tbaa !12
  store i32 0, ptr %23, align 4
  store i32 1, ptr %80, align 4
  br label %1025

1025:                                             ; preds = %1021, %712, %451
  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 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 1, 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 16, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  %1026 = load i32, ptr %23, align 4
  ret i32 %1026
}

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

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

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

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

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

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

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


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

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

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

44:                                               ; preds = %22
  %45 = tail call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.2) #4
  %.not = icmp eq i64 %45, 0
  br i1 %.not, label %46, label %49

46:                                               ; preds = %44
  %47 = tail call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %48 = icmp ne i64 %47, 0
  br label %49

49:                                               ; preds = %46, %44
  %50 = phi i1 [ true, %44 ], [ %48, %46 ]
  %51 = zext i1 %50 to i64
  %52 = tail call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.4) #4
  %.not420 = icmp eq i64 %52, 0
  br i1 %.not420, label %53, label %56

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

56:                                               ; preds = %53, %49
  %57 = phi i1 [ true, %49 ], [ %55, %53 ]
  %58 = zext i1 %57 to i64
  %59 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #4
  %60 = fdiv double 1.000000e+00, %59
  %61 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %.not421 = icmp eq i64 %61, 0
  br i1 %.not421, label %.thread465.sink.split, label %62

62:                                               ; preds = %.thread, %56
  %.0396458 = phi i64 [ 0, %.thread ], [ %51, %56 ]
  %.0398456 = phi double [ undef, %.thread ], [ %59, %56 ]
  %.0400455 = phi i64 [ 0, %.thread ], [ %58, %56 ]
  %.0402453 = phi double [ undef, %.thread ], [ %60, %56 ]
  %.not422 = icmp eq i64 %41, 0
  br i1 %.not422, label %63, label %67

63:                                               ; preds = %62
  %64 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.7) #4
  %.not423 = icmp eq i64 %64, 0
  br i1 %.not423, label %65, label %67

65:                                               ; preds = %63
  %66 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #4
  %.not424 = icmp eq i64 %66, 0
  br i1 %.not424, label %.thread465.sink.split, label %67

67:                                               ; preds = %65, %63, %62
  %68 = load i64, ptr %2, align 8, !tbaa !5
  %69 = icmp slt i64 %68, 0
  br i1 %69, label %.thread465.sink.split, label %70

70:                                               ; preds = %67
  %71 = load i64, ptr %3, align 8, !tbaa !5
  %72 = icmp slt i64 %71, 0
  br i1 %72, label %.thread465.sink.split, label %73

73:                                               ; preds = %70
  %74 = load i64, ptr %5, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %68, i64 1)
  %75 = icmp slt i64 %74, %spec.select
  br i1 %75, label %.thread465.sink.split, label %76

76:                                               ; preds = %73
  %77 = load i64, ptr %7, align 8, !tbaa !5
  %78 = icmp slt i64 %77, %spec.select
  br i1 %78, label %.thread465.sink.split, label %79

79:                                               ; preds = %76
  %80 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %81 = icmp eq i64 %80, 0
  %82 = icmp ne i64 %.0396458, 0
  %or.cond5 = select i1 %81, i1 true, i1 %82
  %83 = icmp ne i64 %.0400455, 0
  %or.cond7 = select i1 %or.cond5, i1 true, i1 %83
  br i1 %or.cond7, label %86, label %84

84:                                               ; preds = %79
  %85 = tail call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str) #4
  %.not425 = icmp eq i64 %85, 0
  br i1 %.not425, label %.thread465.sink.split, label %..thread460_crit_edge

..thread460_crit_edge:                            ; preds = %84
  %.pr.pre = load i64, ptr %21, align 8, !tbaa !5
  br label %.thread460

86:                                               ; preds = %79
  br i1 %82, label %87, label %119

87:                                               ; preds = %86
  %88 = load i64, ptr %2, align 8, !tbaa !5
  %.not426474 = icmp slt i64 %88, 1
  br i1 %.not426474, label %._crit_edge, label %.lr.ph.preheader

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

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0403477 = phi double [ 0.000000e+00, %.lr.ph.preheader.new ], [ %101, %.lr.ph ]
  %.0405476 = phi double [ %.0402453, %.lr.ph.preheader.new ], [ %99, %.lr.ph ]
  %.0407475 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %102, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %90 = getelementptr inbounds double, ptr %30, i64 %.0407475
  %91 = load double, ptr %90, align 8, !tbaa !10
  %92 = fcmp ole double %.0405476, %91
  %93 = select i1 %92, double %.0405476, double %91
  %94 = fcmp oge double %.0403477, %91
  %95 = select i1 %94, double %.0403477, double %91
  %96 = getelementptr double, ptr %10, i64 %.0407475
  %97 = load double, ptr %96, align 8, !tbaa !10
  %98 = fcmp ole double %93, %97
  %99 = select i1 %98, double %93, double %97
  %100 = fcmp oge double %95, %97
  %101 = select i1 %100, double %95, double %97
  %102 = add nuw i64 %.0407475, 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
  %.lcssa734.ph = phi double [ poison, %.lr.ph.preheader ], [ %99, %.lr.ph ]
  %.lcssa733.ph = phi double [ poison, %.lr.ph.preheader ], [ %101, %.lr.ph ]
  %.0403477.unr = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %101, %.lr.ph ]
  %.0405476.unr = phi double [ %.0402453, %.lr.ph.preheader ], [ %99, %.lr.ph ]
  %.0407475.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %102, %.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
  %103 = getelementptr inbounds double, ptr %30, i64 %.0407475.unr
  %104 = load double, ptr %103, align 8, !tbaa !10
  %105 = fcmp ole double %.0405476.unr, %104
  %106 = select i1 %105, double %.0405476.unr, double %104
  %107 = fcmp oge double %.0403477.unr, %104
  %108 = select i1 %107, double %.0403477.unr, double %104
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %87
  %.0405.lcssa = phi double [ %.0402453, %87 ], [ %.lcssa734.ph, %._crit_edge.loopexit.unr-lcssa ], [ %106, %.lr.ph.epil ]
  %.0403.lcssa = phi double [ 0.000000e+00, %87 ], [ %.lcssa733.ph, %._crit_edge.loopexit.unr-lcssa ], [ %108, %.lr.ph.epil ]
  %109 = fcmp ugt double %.0405.lcssa, 0.000000e+00
  br i1 %109, label %110, label %.thread465.sink.split

110:                                              ; preds = %._crit_edge
  %111 = icmp sgt i64 %88, 0
  br i1 %111, label %112, label %118

112:                                              ; preds = %110
  %113 = fcmp oge double %.0405.lcssa, %.0398456
  %114 = select i1 %113, double %.0405.lcssa, double %.0398456
  %115 = fcmp ole double %.0403.lcssa, %.0402453
  %116 = select i1 %115, double %.0403.lcssa, double %.0402453
  %117 = fdiv double %114, %116
  store double %117, ptr %29, align 8, !tbaa !10
  br label %119

118:                                              ; preds = %110
  store double 1.000000e+00, ptr %29, align 8, !tbaa !10
  br label %119

119:                                              ; preds = %118, %112, %86
  %.pr.pre560.pr = load i64, ptr %21, align 8, !tbaa !5
  br i1 %83, label %120, label %.thread460

120:                                              ; preds = %119
  %121 = icmp eq i64 %.pr.pre560.pr, 0
  br i1 %121, label %122, label %.thread465

122:                                              ; preds = %120
  %123 = load i64, ptr %2, align 8, !tbaa !5
  %.not427479 = icmp slt i64 %123, 1
  br i1 %.not427479, label %._crit_edge485, label %.lr.ph484.preheader

.lr.ph484.preheader:                              ; preds = %122
  %xtraiter737 = and i64 %123, 1
  %124 = icmp eq i64 %123, 1
  br i1 %124, label %._crit_edge485.loopexit.unr-lcssa, label %.lr.ph484.preheader.new

.lr.ph484.preheader.new:                          ; preds = %.lr.ph484.preheader
  %unroll_iter741 = and i64 %123, 9223372036854775806
  br label %.lr.ph484

.lr.ph484:                                        ; preds = %.lr.ph484, %.lr.ph484.preheader.new
  %.1404482 = phi double [ 0.000000e+00, %.lr.ph484.preheader.new ], [ %136, %.lr.ph484 ]
  %.1406481 = phi double [ %.0402453, %.lr.ph484.preheader.new ], [ %134, %.lr.ph484 ]
  %.1408480 = phi i64 [ 1, %.lr.ph484.preheader.new ], [ %137, %.lr.ph484 ]
  %niter742 = phi i64 [ 0, %.lr.ph484.preheader.new ], [ %niter742.next.1, %.lr.ph484 ]
  %125 = getelementptr inbounds double, ptr %31, i64 %.1408480
  %126 = load double, ptr %125, align 8, !tbaa !10
  %127 = fcmp ole double %.1406481, %126
  %128 = select i1 %127, double %.1406481, double %126
  %129 = fcmp oge double %.1404482, %126
  %130 = select i1 %129, double %.1404482, double %126
  %131 = getelementptr double, ptr %11, i64 %.1408480
  %132 = load double, ptr %131, align 8, !tbaa !10
  %133 = fcmp ole double %128, %132
  %134 = select i1 %133, double %128, double %132
  %135 = fcmp oge double %130, %132
  %136 = select i1 %135, double %130, double %132
  %137 = add nuw i64 %.1408480, 2
  %niter742.next.1 = add i64 %niter742, 2
  %niter742.ncmp.1 = icmp eq i64 %niter742.next.1, %unroll_iter741
  br i1 %niter742.ncmp.1, label %._crit_edge485.loopexit.unr-lcssa, label %.lr.ph484, !llvm.loop !14

._crit_edge485.loopexit.unr-lcssa:                ; preds = %.lr.ph484, %.lr.ph484.preheader
  %.lcssa732.ph = phi double [ poison, %.lr.ph484.preheader ], [ %134, %.lr.ph484 ]
  %.lcssa.ph = phi double [ poison, %.lr.ph484.preheader ], [ %136, %.lr.ph484 ]
  %.1404482.unr = phi double [ 0.000000e+00, %.lr.ph484.preheader ], [ %136, %.lr.ph484 ]
  %.1406481.unr = phi double [ %.0402453, %.lr.ph484.preheader ], [ %134, %.lr.ph484 ]
  %.1408480.unr = phi i64 [ 1, %.lr.ph484.preheader ], [ %137, %.lr.ph484 ]
  %lcmp.mod738.not = icmp eq i64 %xtraiter737, 0
  br i1 %lcmp.mod738.not, label %._crit_edge485, label %.lr.ph484.epil

.lr.ph484.epil:                                   ; preds = %._crit_edge485.loopexit.unr-lcssa
  %138 = getelementptr inbounds double, ptr %31, i64 %.1408480.unr
  %139 = load double, ptr %138, align 8, !tbaa !10
  %140 = fcmp ole double %.1406481.unr, %139
  %141 = select i1 %140, double %.1406481.unr, double %139
  %142 = fcmp oge double %.1404482.unr, %139
  %143 = select i1 %142, double %.1404482.unr, double %139
  br label %._crit_edge485

._crit_edge485:                                   ; preds = %.lr.ph484.epil, %._crit_edge485.loopexit.unr-lcssa, %122
  %.1406.lcssa = phi double [ %.0402453, %122 ], [ %.lcssa732.ph, %._crit_edge485.loopexit.unr-lcssa ], [ %141, %.lr.ph484.epil ]
  %.1404.lcssa = phi double [ 0.000000e+00, %122 ], [ %.lcssa.ph, %._crit_edge485.loopexit.unr-lcssa ], [ %143, %.lr.ph484.epil ]
  %144 = fcmp ugt double %.1406.lcssa, 0.000000e+00
  br i1 %144, label %145, label %.thread465.sink.split

145:                                              ; preds = %._crit_edge485
  %146 = icmp sgt i64 %123, 0
  br i1 %146, label %147, label %153

147:                                              ; preds = %145
  %148 = fcmp oge double %.1406.lcssa, %.0398456
  %149 = select i1 %148, double %.1406.lcssa, double %.0398456
  %150 = fcmp ole double %.1404.lcssa, %.0402453
  %151 = select i1 %150, double %.1404.lcssa, double %.0402453
  %152 = fdiv double %149, %151
  store double %152, ptr %27, align 8, !tbaa !10
  br label %.thread460.thread

153:                                              ; preds = %145
  store double 1.000000e+00, ptr %27, align 8, !tbaa !10
  br label %.thread460.thread

.thread460:                                       ; preds = %..thread460_crit_edge, %119
  %.pr463.pr = phi i64 [ %.pr.pre, %..thread460_crit_edge ], [ %.pr.pre560.pr, %119 ]
  %154 = icmp eq i64 %.pr463.pr, 0
  br i1 %154, label %.thread460.thread, label %.thread465

.thread460.thread:                                ; preds = %147, %153, %.thread460
  %155 = load i64, ptr %13, align 8, !tbaa !5
  %156 = load i64, ptr %2, align 8, !tbaa !5
  %spec.select447 = tail call i64 @llvm.smax.i64(i64 %156, i64 1)
  %157 = icmp slt i64 %155, %spec.select447
  br i1 %157, label %.thread465.sink.split, label %158

158:                                              ; preds = %.thread460.thread
  %159 = load i64, ptr %15, align 8, !tbaa !5
  %160 = icmp slt i64 %159, %spec.select447
  br i1 %160, label %.thread465.sink.split, label %.thread461

.thread465.sink.split:                            ; preds = %158, %.thread460.thread, %._crit_edge485, %._crit_edge, %84, %76, %73, %70, %67, %65, %56
  %.sink = phi i64 [ -1, %56 ], [ -2, %65 ], [ -3, %67 ], [ -4, %70 ], [ -6, %73 ], [ -8, %76 ], [ -10, %84 ], [ -11, %._crit_edge ], [ -12, %._crit_edge485 ], [ -14, %.thread460.thread ], [ -16, %158 ]
  store i64 %.sink, ptr %21, align 8, !tbaa !5
  br label %.thread465

.thread465:                                       ; preds = %.thread465.sink.split, %120, %.thread460
  %161 = phi i64 [ %.pr463.pr, %.thread460 ], [ %.pr.pre560.pr, %120 ], [ %.sink, %.thread465.sink.split ]
  %162 = sub nsw i64 0, %161
  store i64 %162, ptr %23, align 8, !tbaa !5
  %163 = call i32 @xerbla_(ptr noundef nonnull @.str.8, ptr noundef nonnull %23) #4
  br label %428

.thread461:                                       ; preds = %158
  br i1 %43, label %164, label %184

164:                                              ; preds = %.thread461
  %165 = call i32 @zgeequ_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %29, ptr noundef nonnull %27, ptr noundef nonnull %24, ptr noundef nonnull %28) #4
  %166 = load i64, ptr %28, align 8, !tbaa !5
  %167 = icmp eq i64 %166, 0
  br i1 %167, label %168, label %184

168:                                              ; preds = %164
  %169 = call i32 @zlaqge_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %29, ptr noundef nonnull %27, ptr noundef nonnull %24, ptr noundef %9) #4
  %170 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.2) #4
  %.not429 = icmp eq i64 %170, 0
  br i1 %.not429, label %171, label %174

171:                                              ; preds = %168
  %172 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %173 = icmp ne i64 %172, 0
  br label %174

174:                                              ; preds = %171, %168
  %175 = phi i1 [ true, %168 ], [ %173, %171 ]
  %176 = zext i1 %175 to i64
  %177 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.4) #4
  %.not430 = icmp eq i64 %177, 0
  br i1 %.not430, label %178, label %181

178:                                              ; preds = %174
  %179 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %180 = icmp ne i64 %179, 0
  br label %181

181:                                              ; preds = %178, %174
  %182 = phi i1 [ true, %174 ], [ %180, %178 ]
  %183 = zext i1 %182 to i64
  br label %184

184:                                              ; preds = %164, %181, %.thread461
  %.1401 = phi i64 [ %183, %181 ], [ %.0400455, %164 ], [ %.0400455, %.thread461 ]
  %.1397 = phi i64 [ %176, %181 ], [ %.0396458, %164 ], [ %.0396458, %.thread461 ]
  br i1 %.not422, label %234, label %185

185:                                              ; preds = %184
  %.not435 = icmp eq i64 %.1397, 0
  br i1 %.not435, label %.loopexit472, label %186

186:                                              ; preds = %185
  %187 = load i64, ptr %3, align 8, !tbaa !5
  %.not436493 = icmp slt i64 %187, 1
  br i1 %.not436493, label %.loopexit472, label %.lr.ph496

.lr.ph496:                                        ; preds = %186
  %188 = load i64, ptr %2, align 8, !tbaa !5
  %.not445488 = icmp slt i64 %188, 1
  br i1 %.not445488, label %.loopexit472, label %.lr.ph491.preheader

.lr.ph491.preheader:                              ; preds = %.lr.ph496
  %189 = add nsw i64 %188, -1
  %190 = shl i64 %32, 4
  %191 = add nuw i64 %187, 1152921504606846975
  %192 = mul i64 %32, %191
  %193 = add i64 %192, %188
  %194 = shl i64 %193, 4
  %scevgep586 = getelementptr i8, ptr %12, i64 %194
  %195 = shl i64 %188, 3
  %scevgep587 = getelementptr i8, ptr %10, i64 %195
  %min.iters.check = icmp ult i64 %188, 12
  %mul.result = shl i64 %189, 4
  %mul.result584 = shl i64 %189, 4
  %mul.overflow585 = icmp ugt i64 %189, 1152921504606846975
  %bound0 = icmp ugt ptr %scevgep587, %12
  %bound1 = icmp ugt ptr %scevgep586, %10
  %found.conflict = and i1 %bound0, %bound1
  %.mask = and i64 %32, 576460752303423488
  %stride.check = icmp ne i64 %.mask, 0
  %196 = or i1 %found.conflict, %stride.check
  %n.vec = and i64 %188, 2305843009213693950
  %ind.end = or i64 %188, 1
  %cmp.n = icmp eq i64 %188, %n.vec
  %xtraiter743 = and i64 %188, 1
  %lcmp.mod744.not = icmp eq i64 %xtraiter743, 0
  br label %.lr.ph491

.lr.ph491:                                        ; preds = %.lr.ph491.preheader, %._crit_edge492
  %indvar = phi i64 [ 0, %.lr.ph491.preheader ], [ %indvar.next, %._crit_edge492 ]
  %.2494 = phi i64 [ 1, %.lr.ph491.preheader ], [ %233, %._crit_edge492 ]
  %197 = mul nsw i64 %.2494, %32
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %34, i64 %197
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph491
  %198 = mul i64 %190, %indvar
  %scevgep582 = getelementptr i8, ptr %12, i64 %198
  %199 = or disjoint i64 %198, 8
  %scevgep = getelementptr i8, ptr %12, i64 %199
  %200 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %201 = icmp ult ptr %200, %scevgep
  %202 = getelementptr i8, ptr %scevgep582, i64 %mul.result584
  %203 = icmp ult ptr %202, %scevgep582
  %204 = or i1 %203, %mul.overflow585
  %205 = or i1 %201, %204
  %brmerge = select i1 %205, i1 true, i1 %196
  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
  %206 = getelementptr double, ptr %10, i64 %index
  %wide.load = load <2 x double>, ptr %206, align 8, !tbaa !10, !alias.scope !15
  %207 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %207, align 8, !tbaa !10
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec588 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %208 = fmul <2 x double> %wide.load, %strided.vec
  %209 = fmul <2 x double> %wide.load, %strided.vec588
  %interleaved.vec = shufflevector <2 x double> %208, <2 x double> %209, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %207, align 8, !tbaa !10
  %index.next = add nuw i64 %index, 2
  %210 = icmp eq i64 %index.next, %n.vec
  br i1 %210, label %middle.block, label %vector.body, !llvm.loop !18

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

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

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %211 = getelementptr inbounds double, ptr %30, i64 %.0409489.ph
  %212 = load double, ptr %211, align 8, !tbaa !10
  %gep.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0409489.ph
  %213 = load <2 x double>, ptr %gep.prol, align 8, !tbaa !10
  %214 = insertelement <2 x double> poison, double %212, i64 0
  %215 = shufflevector <2 x double> %214, <2 x double> poison, <2 x i32> zeroinitializer
  %216 = fmul <2 x double> %215, %213
  store <2 x double> %216, ptr %gep.prol, align 8, !tbaa !10
  %217 = add nuw nsw i64 %.0409489.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.0409489.unr = phi i64 [ %.0409489.ph, %scalar.ph.preheader ], [ %217, %scalar.ph.prol ]
  %218 = icmp eq i64 %188, %.0409489.ph
  br i1 %218, label %._crit_edge492, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.0409489 = phi i64 [ %232, %scalar.ph ], [ %.0409489.unr, %scalar.ph.prol.loopexit ]
  %219 = getelementptr inbounds double, ptr %30, i64 %.0409489
  %220 = load double, ptr %219, align 8, !tbaa !10
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0409489
  %221 = load <2 x double>, ptr %gep, align 8, !tbaa !10
  %222 = insertelement <2 x double> poison, double %220, i64 0
  %223 = shufflevector <2 x double> %222, <2 x double> poison, <2 x i32> zeroinitializer
  %224 = fmul <2 x double> %223, %221
  store <2 x double> %224, ptr %gep, align 8, !tbaa !10
  %225 = add nuw i64 %.0409489, 1
  %226 = getelementptr double, ptr %10, i64 %.0409489
  %227 = load double, ptr %226, align 8, !tbaa !10
  %gep.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %225
  %228 = load <2 x double>, ptr %gep.1, align 8, !tbaa !10
  %229 = insertelement <2 x double> poison, double %227, i64 0
  %230 = shufflevector <2 x double> %229, <2 x double> poison, <2 x i32> zeroinitializer
  %231 = fmul <2 x double> %230, %228
  store <2 x double> %231, ptr %gep.1, align 8, !tbaa !10
  %232 = add nuw i64 %.0409489, 2
  %exitcond550.not.1 = icmp eq i64 %225, %188
  br i1 %exitcond550.not.1, label %._crit_edge492, label %scalar.ph, !llvm.loop !21

._crit_edge492:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %233 = add nuw i64 %.2494, 1
  %exitcond551.not = icmp eq i64 %.2494, %187
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond551.not, label %.loopexit472, label %.lr.ph491, !llvm.loop !22

234:                                              ; preds = %184
  %.not432 = icmp eq i64 %.1401, 0
  br i1 %.not432, label %.loopexit472, label %235

235:                                              ; preds = %234
  %236 = load i64, ptr %3, align 8, !tbaa !5
  %.not433504 = icmp slt i64 %236, 1
  br i1 %.not433504, label %.loopexit472, label %.lr.ph507

.lr.ph507:                                        ; preds = %235
  %237 = load i64, ptr %2, align 8, !tbaa !5
  %.not434497 = icmp slt i64 %237, 1
  br i1 %.not434497, label %.loopexit472, label %.lr.ph500.preheader

.lr.ph500.preheader:                              ; preds = %.lr.ph507
  %238 = add nsw i64 %237, -1
  %239 = shl i64 %32, 4
  %240 = add nuw i64 %236, 1152921504606846975
  %241 = mul i64 %32, %240
  %242 = add i64 %241, %237
  %243 = shl i64 %242, 4
  %scevgep601 = getelementptr i8, ptr %12, i64 %243
  %244 = shl i64 %237, 3
  %scevgep602 = getelementptr i8, ptr %11, i64 %244
  %min.iters.check609 = icmp ult i64 %237, 12
  %mul.result594 = shl i64 %238, 4
  %mul.result598 = shl i64 %238, 4
  %mul.overflow599 = icmp ugt i64 %238, 1152921504606846975
  %bound0603 = icmp ugt ptr %scevgep602, %12
  %bound1604 = icmp ugt ptr %scevgep601, %11
  %found.conflict605 = and i1 %bound0603, %bound1604
  %.mask727 = and i64 %32, 576460752303423488
  %stride.check606 = icmp ne i64 %.mask727, 0
  %245 = or i1 %found.conflict605, %stride.check606
  %n.vec612 = and i64 %237, 2305843009213693950
  %ind.end613 = or i64 %237, 1
  %cmp.n624 = icmp eq i64 %237, %n.vec612
  %xtraiter745 = and i64 %237, 1
  %lcmp.mod746.not = icmp eq i64 %xtraiter745, 0
  br label %.lr.ph500

.lr.ph500:                                        ; preds = %.lr.ph500.preheader, %._crit_edge501
  %indvar590 = phi i64 [ 0, %.lr.ph500.preheader ], [ %indvar.next591, %._crit_edge501 ]
  %.3505 = phi i64 [ 1, %.lr.ph500.preheader ], [ %282, %._crit_edge501 ]
  %246 = mul nsw i64 %.3505, %32
  %invariant.gep502 = getelementptr %struct.doublecomplex, ptr %34, i64 %246
  br i1 %min.iters.check609, label %scalar.ph608.preheader, label %vector.scevcheck589

vector.scevcheck589:                              ; preds = %.lr.ph500
  %247 = mul i64 %239, %indvar590
  %scevgep596 = getelementptr i8, ptr %12, i64 %247
  %248 = or disjoint i64 %247, 8
  %scevgep592 = getelementptr i8, ptr %12, i64 %248
  %249 = getelementptr i8, ptr %scevgep592, i64 %mul.result594
  %250 = icmp ult ptr %249, %scevgep592
  %251 = getelementptr i8, ptr %scevgep596, i64 %mul.result598
  %252 = icmp ult ptr %251, %scevgep596
  %253 = or i1 %252, %mul.overflow599
  %254 = or i1 %250, %253
  %brmerge757 = select i1 %254, i1 true, i1 %245
  br i1 %brmerge757, label %scalar.ph608.preheader, label %vector.body615

vector.body615:                                   ; preds = %vector.scevcheck589, %vector.body615
  %index616 = phi i64 [ %index.next623, %vector.body615 ], [ 0, %vector.scevcheck589 ]
  %offset.idx617 = or disjoint i64 %index616, 1
  %255 = getelementptr double, ptr %11, i64 %index616
  %wide.load618 = load <2 x double>, ptr %255, align 8, !tbaa !10, !alias.scope !23
  %256 = getelementptr %struct.doublecomplex, ptr %invariant.gep502, i64 %offset.idx617
  %wide.vec619 = load <4 x double>, ptr %256, align 8, !tbaa !10
  %strided.vec620 = shufflevector <4 x double> %wide.vec619, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec621 = shufflevector <4 x double> %wide.vec619, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %257 = fmul <2 x double> %wide.load618, %strided.vec620
  %258 = fmul <2 x double> %wide.load618, %strided.vec621
  %interleaved.vec622 = shufflevector <2 x double> %257, <2 x double> %258, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec622, ptr %256, align 8, !tbaa !10
  %index.next623 = add nuw i64 %index616, 2
  %259 = icmp eq i64 %index.next623, %n.vec612
  br i1 %259, label %middle.block607, label %vector.body615, !llvm.loop !26

middle.block607:                                  ; preds = %vector.body615
  br i1 %cmp.n624, label %._crit_edge501, label %scalar.ph608.preheader

scalar.ph608.preheader:                           ; preds = %vector.scevcheck589, %middle.block607, %.lr.ph500
  %.1410498.ph = phi i64 [ 1, %vector.scevcheck589 ], [ 1, %.lr.ph500 ], [ %ind.end613, %middle.block607 ]
  br i1 %lcmp.mod746.not, label %scalar.ph608.prol.loopexit, label %scalar.ph608.prol

scalar.ph608.prol:                                ; preds = %scalar.ph608.preheader
  %260 = getelementptr inbounds double, ptr %31, i64 %.1410498.ph
  %261 = load double, ptr %260, align 8, !tbaa !10
  %gep503.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep502, i64 %.1410498.ph
  %262 = load <2 x double>, ptr %gep503.prol, align 8, !tbaa !10
  %263 = insertelement <2 x double> poison, double %261, i64 0
  %264 = shufflevector <2 x double> %263, <2 x double> poison, <2 x i32> zeroinitializer
  %265 = fmul <2 x double> %264, %262
  store <2 x double> %265, ptr %gep503.prol, align 8, !tbaa !10
  %266 = add nuw nsw i64 %.1410498.ph, 1
  br label %scalar.ph608.prol.loopexit

scalar.ph608.prol.loopexit:                       ; preds = %scalar.ph608.prol, %scalar.ph608.preheader
  %.1410498.unr = phi i64 [ %.1410498.ph, %scalar.ph608.preheader ], [ %266, %scalar.ph608.prol ]
  %267 = icmp eq i64 %237, %.1410498.ph
  br i1 %267, label %._crit_edge501, label %scalar.ph608

scalar.ph608:                                     ; preds = %scalar.ph608.prol.loopexit, %scalar.ph608
  %.1410498 = phi i64 [ %281, %scalar.ph608 ], [ %.1410498.unr, %scalar.ph608.prol.loopexit ]
  %268 = getelementptr inbounds double, ptr %31, i64 %.1410498
  %269 = load double, ptr %268, align 8, !tbaa !10
  %gep503 = getelementptr %struct.doublecomplex, ptr %invariant.gep502, i64 %.1410498
  %270 = load <2 x double>, ptr %gep503, align 8, !tbaa !10
  %271 = insertelement <2 x double> poison, double %269, i64 0
  %272 = shufflevector <2 x double> %271, <2 x double> poison, <2 x i32> zeroinitializer
  %273 = fmul <2 x double> %272, %270
  store <2 x double> %273, ptr %gep503, align 8, !tbaa !10
  %274 = add nuw i64 %.1410498, 1
  %275 = getelementptr double, ptr %11, i64 %.1410498
  %276 = load double, ptr %275, align 8, !tbaa !10
  %gep503.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep502, i64 %274
  %277 = load <2 x double>, ptr %gep503.1, align 8, !tbaa !10
  %278 = insertelement <2 x double> poison, double %276, i64 0
  %279 = shufflevector <2 x double> %278, <2 x double> poison, <2 x i32> zeroinitializer
  %280 = fmul <2 x double> %279, %277
  store <2 x double> %280, ptr %gep503.1, align 8, !tbaa !10
  %281 = add nuw i64 %.1410498, 2
  %exitcond552.not.1 = icmp eq i64 %274, %237
  br i1 %exitcond552.not.1, label %._crit_edge501, label %scalar.ph608, !llvm.loop !27

._crit_edge501:                                   ; preds = %scalar.ph608.prol.loopexit, %scalar.ph608, %middle.block607
  %282 = add nuw i64 %.3505, 1
  %exitcond553.not = icmp eq i64 %.3505, %236
  %indvar.next591 = add i64 %indvar590, 1
  br i1 %exitcond553.not, label %.loopexit472, label %.lr.ph500, !llvm.loop !28

.loopexit472:                                     ; preds = %._crit_edge492, %._crit_edge501, %.lr.ph507, %.lr.ph496, %186, %235, %234, %185
  br i1 %or.cond, label %283, label %295

283:                                              ; preds = %.loopexit472
  %284 = call i32 @zlacpy_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7) #4
  %285 = call i32 @zgetrf_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %21) #4
  %286 = load i64, ptr %21, align 8, !tbaa !5
  %287 = icmp sgt i64 %286, 0
  br i1 %287, label %288, label %295

288:                                              ; preds = %283
  %289 = call double @zlantr_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str, ptr noundef nonnull %21, ptr noundef nonnull %21, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %20) #4
  %290 = fcmp oeq double %289, 0.000000e+00
  br i1 %290, label %294, label %291

291:                                              ; preds = %288
  %292 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %21, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %20) #4
  %293 = fdiv double %292, %289
  br label %294

294:                                              ; preds = %288, %291
  %.0 = phi double [ %293, %291 ], [ 1.000000e+00, %288 ]
  store double %.0, ptr %20, align 8, !tbaa !10
  store double 0.000000e+00, ptr %16, align 8, !tbaa !10
  br label %428

295:                                              ; preds = %283, %.loopexit472
  %. = select i1 %.not422, i8 73, i8 49
  store i8 %., ptr %25, align 1, !tbaa !9
  %296 = call double @zlange_(ptr noundef nonnull %25, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %20) #4
  store double %296, ptr %26, align 8, !tbaa !10
  %297 = call double @zlantr_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %20) #4
  %298 = fcmp oeq double %297, 0.000000e+00
  br i1 %298, label %302, label %299

299:                                              ; preds = %295
  %300 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %20) #4
  %301 = fdiv double %300, %297
  br label %302

302:                                              ; preds = %295, %299
  %.1 = phi double [ %301, %299 ], [ 1.000000e+00, %295 ]
  %303 = call i32 @zgecon_(ptr noundef nonnull %25, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %26, ptr noundef %16, ptr noundef %19, ptr noundef %20, ptr noundef nonnull %21) #4
  %304 = call i32 @zlacpy_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15) #4
  %305 = call i32 @zgetrs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull %21) #4
  %306 = call i32 @zgerfs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef nonnull %21) #4
  br i1 %.not422, label %364, label %307

307:                                              ; preds = %302
  %.not441 = icmp eq i64 %.1401, 0
  br i1 %.not441, label %.loopexit, label %308

308:                                              ; preds = %307
  %309 = load i64, ptr %3, align 8, !tbaa !5
  %.not442515 = icmp slt i64 %309, 1
  br i1 %.not442515, label %.loopexit, label %.lr.ph518

.lr.ph518:                                        ; preds = %308
  %310 = load i64, ptr %2, align 8, !tbaa !5
  %.not444508 = icmp slt i64 %310, 1
  br i1 %.not444508, label %.lr.ph523, label %.lr.ph511.preheader

.lr.ph511.preheader:                              ; preds = %.lr.ph518
  %311 = add nsw i64 %310, -1
  %312 = shl i64 %35, 4
  %313 = add nuw i64 %309, 1152921504606846975
  %314 = mul i64 %35, %313
  %315 = add i64 %314, %310
  %316 = shl i64 %315, 4
  %scevgep637 = getelementptr i8, ptr %14, i64 %316
  %317 = shl i64 %310, 3
  %scevgep638 = getelementptr i8, ptr %11, i64 %317
  %min.iters.check645 = icmp ult i64 %310, 12
  %mul.result630 = shl i64 %311, 4
  %mul.result634 = shl i64 %311, 4
  %mul.overflow635 = icmp ugt i64 %311, 1152921504606846975
  %bound0639 = icmp ugt ptr %scevgep638, %14
  %bound1640 = icmp ugt ptr %scevgep637, %11
  %found.conflict641 = and i1 %bound0639, %bound1640
  %.mask728 = and i64 %35, 576460752303423488
  %stride.check642 = icmp ne i64 %.mask728, 0
  %318 = or i1 %found.conflict641, %stride.check642
  %n.vec648 = and i64 %310, 2305843009213693950
  %ind.end649 = or i64 %310, 1
  %cmp.n660 = icmp eq i64 %310, %n.vec648
  %xtraiter747 = and i64 %310, 1
  %lcmp.mod748.not = icmp eq i64 %xtraiter747, 0
  br label %.lr.ph511

.lr.ph511:                                        ; preds = %.lr.ph511.preheader, %._crit_edge512
  %indvar626 = phi i64 [ 0, %.lr.ph511.preheader ], [ %indvar.next627, %._crit_edge512 ]
  %.4516 = phi i64 [ 1, %.lr.ph511.preheader ], [ %355, %._crit_edge512 ]
  %319 = mul nsw i64 %.4516, %35
  %invariant.gep513 = getelementptr %struct.doublecomplex, ptr %37, i64 %319
  br i1 %min.iters.check645, label %scalar.ph644.preheader, label %vector.scevcheck625

vector.scevcheck625:                              ; preds = %.lr.ph511
  %320 = mul i64 %312, %indvar626
  %scevgep632 = getelementptr i8, ptr %14, i64 %320
  %321 = or disjoint i64 %320, 8
  %scevgep628 = getelementptr i8, ptr %14, i64 %321
  %322 = getelementptr i8, ptr %scevgep628, i64 %mul.result630
  %323 = icmp ult ptr %322, %scevgep628
  %324 = getelementptr i8, ptr %scevgep632, i64 %mul.result634
  %325 = icmp ult ptr %324, %scevgep632
  %326 = or i1 %325, %mul.overflow635
  %327 = or i1 %323, %326
  %brmerge758 = select i1 %327, i1 true, i1 %318
  br i1 %brmerge758, label %scalar.ph644.preheader, label %vector.body651

vector.body651:                                   ; preds = %vector.scevcheck625, %vector.body651
  %index652 = phi i64 [ %index.next659, %vector.body651 ], [ 0, %vector.scevcheck625 ]
  %offset.idx653 = or disjoint i64 %index652, 1
  %328 = getelementptr double, ptr %11, i64 %index652
  %wide.load654 = load <2 x double>, ptr %328, align 8, !tbaa !10, !alias.scope !29
  %329 = getelementptr %struct.doublecomplex, ptr %invariant.gep513, i64 %offset.idx653
  %wide.vec655 = load <4 x double>, ptr %329, align 8, !tbaa !10
  %strided.vec656 = shufflevector <4 x double> %wide.vec655, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec657 = shufflevector <4 x double> %wide.vec655, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %330 = fmul <2 x double> %wide.load654, %strided.vec656
  %331 = fmul <2 x double> %wide.load654, %strided.vec657
  %interleaved.vec658 = shufflevector <2 x double> %330, <2 x double> %331, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec658, ptr %329, align 8, !tbaa !10
  %index.next659 = add nuw i64 %index652, 2
  %332 = icmp eq i64 %index.next659, %n.vec648
  br i1 %332, label %middle.block643, label %vector.body651, !llvm.loop !32

middle.block643:                                  ; preds = %vector.body651
  br i1 %cmp.n660, label %._crit_edge512, label %scalar.ph644.preheader

scalar.ph644.preheader:                           ; preds = %vector.scevcheck625, %middle.block643, %.lr.ph511
  %.2411509.ph = phi i64 [ 1, %vector.scevcheck625 ], [ 1, %.lr.ph511 ], [ %ind.end649, %middle.block643 ]
  br i1 %lcmp.mod748.not, label %scalar.ph644.prol.loopexit, label %scalar.ph644.prol

scalar.ph644.prol:                                ; preds = %scalar.ph644.preheader
  %333 = getelementptr inbounds double, ptr %31, i64 %.2411509.ph
  %334 = load double, ptr %333, align 8, !tbaa !10
  %gep514.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep513, i64 %.2411509.ph
  %335 = load <2 x double>, ptr %gep514.prol, align 8, !tbaa !10
  %336 = insertelement <2 x double> poison, double %334, i64 0
  %337 = shufflevector <2 x double> %336, <2 x double> poison, <2 x i32> zeroinitializer
  %338 = fmul <2 x double> %337, %335
  store <2 x double> %338, ptr %gep514.prol, align 8, !tbaa !10
  %339 = add nuw nsw i64 %.2411509.ph, 1
  br label %scalar.ph644.prol.loopexit

scalar.ph644.prol.loopexit:                       ; preds = %scalar.ph644.prol, %scalar.ph644.preheader
  %.2411509.unr = phi i64 [ %.2411509.ph, %scalar.ph644.preheader ], [ %339, %scalar.ph644.prol ]
  %340 = icmp eq i64 %310, %.2411509.ph
  br i1 %340, label %._crit_edge512, label %scalar.ph644

scalar.ph644:                                     ; preds = %scalar.ph644.prol.loopexit, %scalar.ph644
  %.2411509 = phi i64 [ %354, %scalar.ph644 ], [ %.2411509.unr, %scalar.ph644.prol.loopexit ]
  %341 = getelementptr inbounds double, ptr %31, i64 %.2411509
  %342 = load double, ptr %341, align 8, !tbaa !10
  %gep514 = getelementptr %struct.doublecomplex, ptr %invariant.gep513, i64 %.2411509
  %343 = load <2 x double>, ptr %gep514, align 8, !tbaa !10
  %344 = insertelement <2 x double> poison, double %342, i64 0
  %345 = shufflevector <2 x double> %344, <2 x double> poison, <2 x i32> zeroinitializer
  %346 = fmul <2 x double> %345, %343
  store <2 x double> %346, ptr %gep514, align 8, !tbaa !10
  %347 = add nuw i64 %.2411509, 1
  %348 = getelementptr double, ptr %11, i64 %.2411509
  %349 = load double, ptr %348, align 8, !tbaa !10
  %gep514.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep513, i64 %347
  %350 = load <2 x double>, ptr %gep514.1, align 8, !tbaa !10
  %351 = insertelement <2 x double> poison, double %349, i64 0
  %352 = shufflevector <2 x double> %351, <2 x double> poison, <2 x i32> zeroinitializer
  %353 = fmul <2 x double> %352, %350
  store <2 x double> %353, ptr %gep514.1, align 8, !tbaa !10
  %354 = add nuw i64 %.2411509, 2
  %exitcond554.not.1 = icmp eq i64 %347, %310
  br i1 %exitcond554.not.1, label %._crit_edge512, label %scalar.ph644, !llvm.loop !33

._crit_edge512:                                   ; preds = %scalar.ph644.prol.loopexit, %scalar.ph644, %middle.block643
  %355 = add nuw i64 %.4516, 1
  %exitcond555.not = icmp eq i64 %.4516, %309
  %indvar.next627 = add i64 %indvar626, 1
  br i1 %exitcond555.not, label %._crit_edge519, label %.lr.ph511, !llvm.loop !34

._crit_edge519:                                   ; preds = %._crit_edge512
  br i1 %.not442515, label %.loopexit, label %.lr.ph523

.lr.ph523:                                        ; preds = %.lr.ph518, %._crit_edge519
  %356 = load double, ptr %27, align 8, !tbaa !10
  %min.iters.check663 = icmp eq i64 %309, 1
  br i1 %min.iters.check663, label %scalar.ph662.preheader, label %vector.ph664

vector.ph664:                                     ; preds = %.lr.ph523
  %n.vec666 = and i64 %309, 9223372036854775806
  %ind.end667 = or i64 %309, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %356, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body669

vector.body669:                                   ; preds = %vector.body669, %vector.ph664
  %index670 = phi i64 [ 0, %vector.ph664 ], [ %index.next673, %vector.body669 ]
  %357 = getelementptr double, ptr %17, i64 %index670
  %wide.load672 = load <2 x double>, ptr %357, align 8, !tbaa !10
  %358 = fdiv <2 x double> %wide.load672, %broadcast.splat
  store <2 x double> %358, ptr %357, align 8, !tbaa !10
  %index.next673 = add nuw i64 %index670, 2
  %359 = icmp eq i64 %index.next673, %n.vec666
  br i1 %359, label %middle.block661, label %vector.body669, !llvm.loop !35

middle.block661:                                  ; preds = %vector.body669
  %cmp.n674 = icmp eq i64 %309, %n.vec666
  br i1 %cmp.n674, label %.loopexit, label %scalar.ph662.preheader

scalar.ph662.preheader:                           ; preds = %middle.block661, %.lr.ph523
  %.5521.ph = phi i64 [ 1, %.lr.ph523 ], [ %ind.end667, %middle.block661 ]
  br label %scalar.ph662

scalar.ph662:                                     ; preds = %scalar.ph662.preheader, %scalar.ph662
  %.5521 = phi i64 [ %363, %scalar.ph662 ], [ %.5521.ph, %scalar.ph662.preheader ]
  %360 = getelementptr inbounds double, ptr %38, i64 %.5521
  %361 = load double, ptr %360, align 8, !tbaa !10
  %362 = fdiv double %361, %356
  store double %362, ptr %360, align 8, !tbaa !10
  %363 = add nuw i64 %.5521, 1
  %exitcond556.not = icmp eq i64 %.5521, %309
  br i1 %exitcond556.not, label %.loopexit, label %scalar.ph662, !llvm.loop !36

364:                                              ; preds = %302
  %.not437 = icmp eq i64 %.1397, 0
  br i1 %.not437, label %.loopexit, label %365

365:                                              ; preds = %364
  %366 = load i64, ptr %3, align 8, !tbaa !5
  %.not438531 = icmp slt i64 %366, 1
  br i1 %.not438531, label %.loopexit, label %.lr.ph534

.lr.ph534:                                        ; preds = %365
  %367 = load i64, ptr %2, align 8, !tbaa !5
  %.not440524 = icmp slt i64 %367, 1
  br i1 %.not440524, label %.lr.ph539, label %.lr.ph527.preheader

.lr.ph527.preheader:                              ; preds = %.lr.ph534
  %368 = add nsw i64 %367, -1
  %369 = shl i64 %35, 4
  %370 = add nuw i64 %366, 1152921504606846975
  %371 = mul i64 %35, %370
  %372 = add i64 %371, %367
  %373 = shl i64 %372, 4
  %scevgep687 = getelementptr i8, ptr %14, i64 %373
  %374 = shl i64 %367, 3
  %scevgep688 = getelementptr i8, ptr %10, i64 %374
  %min.iters.check695 = icmp ult i64 %367, 12
  %mul.result680 = shl i64 %368, 4
  %mul.result684 = shl i64 %368, 4
  %mul.overflow685 = icmp ugt i64 %368, 1152921504606846975
  %bound0689 = icmp ugt ptr %scevgep688, %14
  %bound1690 = icmp ugt ptr %scevgep687, %10
  %found.conflict691 = and i1 %bound0689, %bound1690
  %.mask729 = and i64 %35, 576460752303423488
  %stride.check692 = icmp ne i64 %.mask729, 0
  %375 = or i1 %found.conflict691, %stride.check692
  %n.vec698 = and i64 %367, 2305843009213693950
  %ind.end699 = or i64 %367, 1
  %cmp.n710 = icmp eq i64 %367, %n.vec698
  %xtraiter749 = and i64 %367, 1
  %lcmp.mod750.not = icmp eq i64 %xtraiter749, 0
  br label %.lr.ph527

.lr.ph527:                                        ; preds = %.lr.ph527.preheader, %._crit_edge528
  %indvar676 = phi i64 [ 0, %.lr.ph527.preheader ], [ %indvar.next677, %._crit_edge528 ]
  %.6532 = phi i64 [ 1, %.lr.ph527.preheader ], [ %412, %._crit_edge528 ]
  %376 = mul nsw i64 %.6532, %35
  %invariant.gep529 = getelementptr %struct.doublecomplex, ptr %37, i64 %376
  br i1 %min.iters.check695, label %scalar.ph694.preheader, label %vector.scevcheck675

vector.scevcheck675:                              ; preds = %.lr.ph527
  %377 = mul i64 %369, %indvar676
  %scevgep682 = getelementptr i8, ptr %14, i64 %377
  %378 = or disjoint i64 %377, 8
  %scevgep678 = getelementptr i8, ptr %14, i64 %378
  %379 = getelementptr i8, ptr %scevgep678, i64 %mul.result680
  %380 = icmp ult ptr %379, %scevgep678
  %381 = getelementptr i8, ptr %scevgep682, i64 %mul.result684
  %382 = icmp ult ptr %381, %scevgep682
  %383 = or i1 %382, %mul.overflow685
  %384 = or i1 %380, %383
  %brmerge759 = select i1 %384, i1 true, i1 %375
  br i1 %brmerge759, label %scalar.ph694.preheader, label %vector.body701

vector.body701:                                   ; preds = %vector.scevcheck675, %vector.body701
  %index702 = phi i64 [ %index.next709, %vector.body701 ], [ 0, %vector.scevcheck675 ]
  %offset.idx703 = or disjoint i64 %index702, 1
  %385 = getelementptr double, ptr %10, i64 %index702
  %wide.load704 = load <2 x double>, ptr %385, align 8, !tbaa !10, !alias.scope !37
  %386 = getelementptr %struct.doublecomplex, ptr %invariant.gep529, i64 %offset.idx703
  %wide.vec705 = load <4 x double>, ptr %386, align 8, !tbaa !10
  %strided.vec706 = shufflevector <4 x double> %wide.vec705, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec707 = shufflevector <4 x double> %wide.vec705, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %387 = fmul <2 x double> %wide.load704, %strided.vec706
  %388 = fmul <2 x double> %wide.load704, %strided.vec707
  %interleaved.vec708 = shufflevector <2 x double> %387, <2 x double> %388, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec708, ptr %386, align 8, !tbaa !10
  %index.next709 = add nuw i64 %index702, 2
  %389 = icmp eq i64 %index.next709, %n.vec698
  br i1 %389, label %middle.block693, label %vector.body701, !llvm.loop !40

middle.block693:                                  ; preds = %vector.body701
  br i1 %cmp.n710, label %._crit_edge528, label %scalar.ph694.preheader

scalar.ph694.preheader:                           ; preds = %vector.scevcheck675, %middle.block693, %.lr.ph527
  %.3412525.ph = phi i64 [ 1, %vector.scevcheck675 ], [ 1, %.lr.ph527 ], [ %ind.end699, %middle.block693 ]
  br i1 %lcmp.mod750.not, label %scalar.ph694.prol.loopexit, label %scalar.ph694.prol

scalar.ph694.prol:                                ; preds = %scalar.ph694.preheader
  %390 = getelementptr inbounds double, ptr %30, i64 %.3412525.ph
  %391 = load double, ptr %390, align 8, !tbaa !10
  %gep530.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep529, i64 %.3412525.ph
  %392 = load <2 x double>, ptr %gep530.prol, align 8, !tbaa !10
  %393 = insertelement <2 x double> poison, double %391, i64 0
  %394 = shufflevector <2 x double> %393, <2 x double> poison, <2 x i32> zeroinitializer
  %395 = fmul <2 x double> %394, %392
  store <2 x double> %395, ptr %gep530.prol, align 8, !tbaa !10
  %396 = add nuw nsw i64 %.3412525.ph, 1
  br label %scalar.ph694.prol.loopexit

scalar.ph694.prol.loopexit:                       ; preds = %scalar.ph694.prol, %scalar.ph694.preheader
  %.3412525.unr = phi i64 [ %.3412525.ph, %scalar.ph694.preheader ], [ %396, %scalar.ph694.prol ]
  %397 = icmp eq i64 %367, %.3412525.ph
  br i1 %397, label %._crit_edge528, label %scalar.ph694

scalar.ph694:                                     ; preds = %scalar.ph694.prol.loopexit, %scalar.ph694
  %.3412525 = phi i64 [ %411, %scalar.ph694 ], [ %.3412525.unr, %scalar.ph694.prol.loopexit ]
  %398 = getelementptr inbounds double, ptr %30, i64 %.3412525
  %399 = load double, ptr %398, align 8, !tbaa !10
  %gep530 = getelementptr %struct.doublecomplex, ptr %invariant.gep529, i64 %.3412525
  %400 = load <2 x double>, ptr %gep530, align 8, !tbaa !10
  %401 = insertelement <2 x double> poison, double %399, i64 0
  %402 = shufflevector <2 x double> %401, <2 x double> poison, <2 x i32> zeroinitializer
  %403 = fmul <2 x double> %402, %400
  store <2 x double> %403, ptr %gep530, align 8, !tbaa !10
  %404 = add nuw i64 %.3412525, 1
  %405 = getelementptr double, ptr %10, i64 %.3412525
  %406 = load double, ptr %405, align 8, !tbaa !10
  %gep530.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep529, i64 %404
  %407 = load <2 x double>, ptr %gep530.1, align 8, !tbaa !10
  %408 = insertelement <2 x double> poison, double %406, 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 %gep530.1, align 8, !tbaa !10
  %411 = add nuw i64 %.3412525, 2
  %exitcond557.not.1 = icmp eq i64 %404, %367
  br i1 %exitcond557.not.1, label %._crit_edge528, label %scalar.ph694, !llvm.loop !41

._crit_edge528:                                   ; preds = %scalar.ph694.prol.loopexit, %scalar.ph694, %middle.block693
  %412 = add nuw i64 %.6532, 1
  %exitcond558.not = icmp eq i64 %.6532, %366
  %indvar.next677 = add i64 %indvar676, 1
  br i1 %exitcond558.not, label %._crit_edge535, label %.lr.ph527, !llvm.loop !42

._crit_edge535:                                   ; preds = %._crit_edge528
  br i1 %.not438531, label %.loopexit, label %.lr.ph539

.lr.ph539:                                        ; preds = %.lr.ph534, %._crit_edge535
  %413 = load double, ptr %29, align 8, !tbaa !10
  %min.iters.check713 = icmp eq i64 %366, 1
  br i1 %min.iters.check713, label %scalar.ph712.preheader, label %vector.ph714

vector.ph714:                                     ; preds = %.lr.ph539
  %n.vec716 = and i64 %366, 9223372036854775806
  %ind.end717 = or i64 %366, 1
  %broadcast.splatinsert723 = insertelement <2 x double> poison, double %413, i64 0
  %broadcast.splat724 = shufflevector <2 x double> %broadcast.splatinsert723, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body719

vector.body719:                                   ; preds = %vector.body719, %vector.ph714
  %index720 = phi i64 [ 0, %vector.ph714 ], [ %index.next725, %vector.body719 ]
  %414 = getelementptr double, ptr %17, i64 %index720
  %wide.load722 = load <2 x double>, ptr %414, align 8, !tbaa !10
  %415 = fdiv <2 x double> %wide.load722, %broadcast.splat724
  store <2 x double> %415, ptr %414, align 8, !tbaa !10
  %index.next725 = add nuw i64 %index720, 2
  %416 = icmp eq i64 %index.next725, %n.vec716
  br i1 %416, label %middle.block711, label %vector.body719, !llvm.loop !43

middle.block711:                                  ; preds = %vector.body719
  %cmp.n726 = icmp eq i64 %366, %n.vec716
  br i1 %cmp.n726, label %.loopexit, label %scalar.ph712.preheader

scalar.ph712.preheader:                           ; preds = %middle.block711, %.lr.ph539
  %.7537.ph = phi i64 [ 1, %.lr.ph539 ], [ %ind.end717, %middle.block711 ]
  br label %scalar.ph712

scalar.ph712:                                     ; preds = %scalar.ph712.preheader, %scalar.ph712
  %.7537 = phi i64 [ %420, %scalar.ph712 ], [ %.7537.ph, %scalar.ph712.preheader ]
  %417 = getelementptr inbounds double, ptr %38, i64 %.7537
  %418 = load double, ptr %417, align 8, !tbaa !10
  %419 = fdiv double %418, %413
  store double %419, ptr %417, align 8, !tbaa !10
  %420 = add nuw i64 %.7537, 1
  %exitcond559.not = icmp eq i64 %.7537, %366
  br i1 %exitcond559.not, label %.loopexit, label %scalar.ph712, !llvm.loop !44

.loopexit:                                        ; preds = %scalar.ph662, %scalar.ph712, %middle.block661, %middle.block711, %365, %308, %._crit_edge519, %._crit_edge535, %364, %307
  %421 = load double, ptr %16, align 8, !tbaa !10
  %422 = call double @dlamch_(ptr noundef nonnull @.str.12) #4
  %423 = fcmp olt double %421, %422
  br i1 %423, label %424, label %427

424:                                              ; preds = %.loopexit
  %425 = load i64, ptr %2, align 8, !tbaa !5
  %426 = add nsw i64 %425, 1
  store i64 %426, ptr %21, align 8, !tbaa !5
  br label %427

427:                                              ; preds = %424, %.loopexit
  store double %.1, ptr %20, align 8, !tbaa !10
  br label %428

428:                                              ; preds = %427, %294, %.thread465
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 1, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  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 @zgeequ_(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 @zlaqge_(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 @zgetrf_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

declare i32 @zgerfs_(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.umax.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 = !{!30}
!30 = distinct !{!30, !31}
!31 = distinct !{!31, !"LVerDomain"}
!32 = distinct !{!32, !13, !19, !20}
!33 = distinct !{!33, !13, !19}
!34 = distinct !{!34, !13}
!35 = distinct !{!35, !13, !19, !20}
!36 = distinct !{!36, !13, !20, !19}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = distinct !{!40, !13, !19, !20}
!41 = distinct !{!41, !13, !19}
!42 = distinct !{!42, !13}
!43 = distinct !{!43, !13, !19, !20}
!44 = distinct !{!44, !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,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass