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

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

@c__1 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_true = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c__12 = external hidden global i64, align 8
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1

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

156:                                              ; preds = %25
  %157 = load i64, ptr %62, align 8, !tbaa !9
  br label %160

158:                                              ; preds = %25
  %159 = load i64, ptr %63, align 8, !tbaa !9
  br label %160

160:                                              ; preds = %158, %156
  %161 = phi i64 [ %157, %156 ], [ %159, %158 ]
  store i64 %161, ptr %77, align 8, !tbaa !9
  %162 = load i64, ptr %77, align 8, !tbaa !9
  %163 = icmp sle i64 %162, 2
  br i1 %163, label %164, label %165

164:                                              ; preds = %160
  store i64 1, ptr %99, align 8, !tbaa !9
  br label %240

165:                                              ; preds = %160
  %166 = load i64, ptr %77, align 8, !tbaa !9
  %167 = sub nsw i64 %166, 1
  store i64 %167, ptr %62, align 8, !tbaa !9
  %168 = load ptr, ptr %45, align 8, !tbaa !5
  %169 = load i64, ptr %55, align 8, !tbaa !9
  %170 = getelementptr inbounds %struct.doublecomplex, ptr %168, i64 %169
  %171 = load ptr, ptr %46, align 8, !tbaa !5
  %172 = load ptr, ptr %50, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %172, i64 1
  %174 = load ptr, ptr %50, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.doublecomplex, ptr %174, i64 1
  %176 = call i32 @zgehrd_(ptr noundef %77, ptr noundef @c__1, ptr noundef %62, ptr noundef %170, ptr noundef %171, ptr noundef %173, ptr noundef %175, ptr noundef @c_n1, ptr noundef %88)
  %177 = load ptr, ptr %50, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.doublecomplex, ptr %177, i64 1
  %179 = getelementptr inbounds %struct.doublecomplex, ptr %178, i32 0, i32 0
  %180 = load double, ptr %179, align 8, !tbaa !11
  %181 = fptosi double %180 to i64
  store i64 %181, ptr %83, align 8, !tbaa !9
  %182 = load i64, ptr %77, align 8, !tbaa !9
  %183 = sub nsw i64 %182, 1
  store i64 %183, ptr %62, align 8, !tbaa !9
  %184 = load ptr, ptr %45, align 8, !tbaa !5
  %185 = load i64, ptr %55, align 8, !tbaa !9
  %186 = getelementptr inbounds %struct.doublecomplex, ptr %184, i64 %185
  %187 = load ptr, ptr %46, align 8, !tbaa !5
  %188 = load ptr, ptr %50, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.doublecomplex, ptr %188, i64 1
  %190 = load ptr, ptr %42, align 8, !tbaa !5
  %191 = load i64, ptr %57, align 8, !tbaa !9
  %192 = getelementptr inbounds %struct.doublecomplex, ptr %190, i64 %191
  %193 = load ptr, ptr %43, align 8, !tbaa !5
  %194 = load ptr, ptr %50, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.doublecomplex, ptr %194, i64 1
  %196 = call i32 @zunmhr_(ptr noundef @.str, ptr noundef @.str.1, ptr noundef %77, ptr noundef %77, ptr noundef @c__1, ptr noundef %62, ptr noundef %186, ptr noundef %187, ptr noundef %189, ptr noundef %192, ptr noundef %193, ptr noundef %195, ptr noundef @c_n1, ptr noundef %88)
  %197 = load ptr, ptr %50, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.doublecomplex, ptr %197, i64 1
  %199 = getelementptr inbounds %struct.doublecomplex, ptr %198, i32 0, i32 0
  %200 = load double, ptr %199, align 8, !tbaa !11
  %201 = fptosi double %200 to i64
  store i64 %201, ptr %84, align 8, !tbaa !9
  %202 = load ptr, ptr %45, align 8, !tbaa !5
  %203 = load i64, ptr %55, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.doublecomplex, ptr %202, i64 %203
  %205 = load ptr, ptr %46, align 8, !tbaa !5
  %206 = load ptr, ptr %41, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.doublecomplex, ptr %206, i64 1
  %208 = load ptr, ptr %42, align 8, !tbaa !5
  %209 = load i64, ptr %57, align 8, !tbaa !9
  %210 = getelementptr inbounds %struct.doublecomplex, ptr %208, i64 %209
  %211 = load ptr, ptr %43, align 8, !tbaa !5
  %212 = load ptr, ptr %50, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.doublecomplex, ptr %212, i64 1
  %214 = call i32 @zlaqr4_(ptr noundef @c_true, ptr noundef @c_true, ptr noundef %77, ptr noundef @c__1, ptr noundef %77, ptr noundef %204, ptr noundef %205, ptr noundef %207, ptr noundef @c__1, ptr noundef %77, ptr noundef %210, ptr noundef %211, ptr noundef %213, ptr noundef @c_n1, ptr noundef %94)
  %215 = load ptr, ptr %50, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.doublecomplex, ptr %215, i64 1
  %217 = getelementptr inbounds %struct.doublecomplex, ptr %216, i32 0, i32 0
  %218 = load double, ptr %217, align 8, !tbaa !11
  %219 = fptosi double %218 to i64
  store i64 %219, ptr %85, align 8, !tbaa !9
  %220 = load i64, ptr %77, align 8, !tbaa !9
  %221 = load i64, ptr %83, align 8, !tbaa !9
  %222 = load i64, ptr %84, align 8, !tbaa !9
  %223 = icmp sge i64 %221, %222
  br i1 %223, label %224, label %226

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

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

228:                                              ; preds = %226, %224
  %229 = phi i64 [ %225, %224 ], [ %227, %226 ]
  %230 = add nsw i64 %220, %229
  store i64 %230, ptr %62, align 8, !tbaa !9
  %231 = load i64, ptr %62, align 8, !tbaa !9
  %232 = load i64, ptr %85, align 8, !tbaa !9
  %233 = icmp sge i64 %231, %232
  br i1 %233, label %234, label %236

234:                                              ; preds = %228
  %235 = load i64, ptr %62, align 8, !tbaa !9
  br label %238

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

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

240:                                              ; preds = %238, %164
  %241 = load ptr, ptr %51, align 8, !tbaa !5
  %242 = load i64, ptr %241, align 8, !tbaa !9
  %243 = icmp eq i64 %242, -1
  br i1 %243, label %244, label %260

244:                                              ; preds = %240
  %245 = load i64, ptr %99, align 8, !tbaa !9
  %246 = sitofp i64 %245 to double
  store double %246, ptr %66, align 8, !tbaa !14
  %247 = load double, ptr %66, align 8, !tbaa !14
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %247, ptr %248, align 8, !tbaa !11
  %249 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double 0.000000e+00, ptr %249, align 8, !tbaa !15
  %250 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %251 = load double, ptr %250, align 8, !tbaa !11
  %252 = load ptr, ptr %50, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.doublecomplex, ptr %252, i64 1
  %254 = getelementptr inbounds %struct.doublecomplex, ptr %253, i32 0, i32 0
  store double %251, ptr %254, align 8, !tbaa !11
  %255 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  %256 = load double, ptr %255, align 8, !tbaa !15
  %257 = load ptr, ptr %50, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.doublecomplex, ptr %257, i64 1
  %259 = getelementptr inbounds %struct.doublecomplex, ptr %258, i32 0, i32 1
  store double %256, ptr %259, align 8, !tbaa !15
  store i32 0, ptr %26, align 4
  store i32 1, ptr %100, align 4
  br label %1422

260:                                              ; preds = %240
  %261 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 0, ptr %261, align 8, !tbaa !9
  %262 = load ptr, ptr %40, align 8, !tbaa !5
  store i64 0, ptr %262, align 8, !tbaa !9
  %263 = load ptr, ptr %50, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.doublecomplex, ptr %263, i64 1
  %265 = getelementptr inbounds %struct.doublecomplex, ptr %264, i32 0, i32 0
  store double 1.000000e+00, ptr %265, align 8, !tbaa !11
  %266 = load ptr, ptr %50, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.doublecomplex, ptr %266, i64 1
  %268 = getelementptr inbounds %struct.doublecomplex, ptr %267, i32 0, i32 1
  store double 0.000000e+00, ptr %268, align 8, !tbaa !15
  %269 = load ptr, ptr %30, align 8, !tbaa !5
  %270 = load i64, ptr %269, align 8, !tbaa !9
  %271 = load ptr, ptr %31, align 8, !tbaa !5
  %272 = load i64, ptr %271, align 8, !tbaa !9
  %273 = icmp sgt i64 %270, %272
  br i1 %273, label %274, label %275

274:                                              ; preds = %260
  store i32 0, ptr %26, align 4
  store i32 1, ptr %100, align 4
  br label %1422

275:                                              ; preds = %260
  %276 = load ptr, ptr %32, align 8, !tbaa !5
  %277 = load i64, ptr %276, align 8, !tbaa !9
  %278 = icmp slt i64 %277, 1
  br i1 %278, label %279, label %280

279:                                              ; preds = %275
  store i32 0, ptr %26, align 4
  store i32 1, ptr %100, align 4
  br label %1422

280:                                              ; preds = %275
  %281 = call double @dlamch_(ptr noundef @.str.2)
  store double %281, ptr %96, align 8, !tbaa !14
  %282 = load double, ptr %96, align 8, !tbaa !14
  %283 = fdiv double 1.000000e+00, %282
  store double %283, ptr %97, align 8, !tbaa !14
  %284 = call i32 @dlabad_(ptr noundef %96, ptr noundef %97)
  %285 = call double @dlamch_(ptr noundef @.str.3)
  store double %285, ptr %82, align 8, !tbaa !14
  %286 = load double, ptr %96, align 8, !tbaa !14
  %287 = load ptr, ptr %29, align 8, !tbaa !5
  %288 = load i64, ptr %287, align 8, !tbaa !9
  %289 = sitofp i64 %288 to double
  %290 = load double, ptr %82, align 8, !tbaa !14
  %291 = fdiv double %289, %290
  %292 = fmul double %286, %291
  store double %292, ptr %98, align 8, !tbaa !14
  %293 = load ptr, ptr %32, align 8, !tbaa !5
  %294 = load i64, ptr %293, align 8, !tbaa !9
  store i64 %294, ptr %62, align 8, !tbaa !9
  %295 = load ptr, ptr %31, align 8, !tbaa !5
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = load ptr, ptr %30, align 8, !tbaa !5
  %298 = load i64, ptr %297, align 8, !tbaa !9
  %299 = sub nsw i64 %296, %298
  %300 = add nsw i64 %299, 1
  store i64 %300, ptr %63, align 8, !tbaa !9
  %301 = load i64, ptr %62, align 8, !tbaa !9
  %302 = load i64, ptr %63, align 8, !tbaa !9
  %303 = icmp sle i64 %301, %302
  br i1 %303, label %304, label %306

304:                                              ; preds = %280
  %305 = load i64, ptr %62, align 8, !tbaa !9
  br label %308

306:                                              ; preds = %280
  %307 = load i64, ptr %63, align 8, !tbaa !9
  br label %308

308:                                              ; preds = %306, %304
  %309 = phi i64 [ %305, %304 ], [ %307, %306 ]
  store i64 %309, ptr %77, align 8, !tbaa !9
  %310 = load ptr, ptr %31, align 8, !tbaa !5
  %311 = load i64, ptr %310, align 8, !tbaa !9
  %312 = load i64, ptr %77, align 8, !tbaa !9
  %313 = sub nsw i64 %311, %312
  %314 = add nsw i64 %313, 1
  store i64 %314, ptr %95, align 8, !tbaa !9
  %315 = load i64, ptr %95, align 8, !tbaa !9
  %316 = load ptr, ptr %30, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !9
  %318 = icmp eq i64 %315, %317
  br i1 %318, label %319, label %322

319:                                              ; preds = %308
  %320 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  store double 0.000000e+00, ptr %320, align 8, !tbaa !11
  %321 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  store double 0.000000e+00, ptr %321, align 8, !tbaa !15
  br label %341

322:                                              ; preds = %308
  %323 = load i64, ptr %95, align 8, !tbaa !9
  %324 = load i64, ptr %95, align 8, !tbaa !9
  %325 = sub nsw i64 %324, 1
  %326 = load i64, ptr %52, align 8, !tbaa !9
  %327 = mul nsw i64 %325, %326
  %328 = add nsw i64 %323, %327
  store i64 %328, ptr %62, align 8, !tbaa !9
  %329 = load ptr, ptr %33, align 8, !tbaa !5
  %330 = load i64, ptr %62, align 8, !tbaa !9
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %329, i64 %330
  %332 = getelementptr inbounds %struct.doublecomplex, ptr %331, i32 0, i32 0
  %333 = load double, ptr %332, align 8, !tbaa !11
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  store double %333, ptr %334, align 8, !tbaa !11
  %335 = load ptr, ptr %33, align 8, !tbaa !5
  %336 = load i64, ptr %62, align 8, !tbaa !9
  %337 = getelementptr inbounds %struct.doublecomplex, ptr %335, i64 %336
  %338 = getelementptr inbounds %struct.doublecomplex, ptr %337, i32 0, i32 1
  %339 = load double, ptr %338, align 8, !tbaa !15
  %340 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  store double %339, ptr %340, align 8, !tbaa !15
  br label %341

341:                                              ; preds = %322, %319
  %342 = load ptr, ptr %31, align 8, !tbaa !5
  %343 = load i64, ptr %342, align 8, !tbaa !9
  %344 = load i64, ptr %95, align 8, !tbaa !9
  %345 = icmp eq i64 %343, %344
  br i1 %345, label %346, label %475

346:                                              ; preds = %341
  %347 = load i64, ptr %95, align 8, !tbaa !9
  store i64 %347, ptr %62, align 8, !tbaa !9
  %348 = load i64, ptr %95, align 8, !tbaa !9
  %349 = load i64, ptr %95, align 8, !tbaa !9
  %350 = load i64, ptr %52, align 8, !tbaa !9
  %351 = mul nsw i64 %349, %350
  %352 = add nsw i64 %348, %351
  store i64 %352, ptr %63, align 8, !tbaa !9
  %353 = load ptr, ptr %33, align 8, !tbaa !5
  %354 = load i64, ptr %63, align 8, !tbaa !9
  %355 = getelementptr inbounds %struct.doublecomplex, ptr %353, i64 %354
  %356 = getelementptr inbounds %struct.doublecomplex, ptr %355, i32 0, i32 0
  %357 = load double, ptr %356, align 8, !tbaa !11
  %358 = load ptr, ptr %41, align 8, !tbaa !5
  %359 = load i64, ptr %62, align 8, !tbaa !9
  %360 = getelementptr inbounds %struct.doublecomplex, ptr %358, i64 %359
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %360, i32 0, i32 0
  store double %357, ptr %361, align 8, !tbaa !11
  %362 = load ptr, ptr %33, align 8, !tbaa !5
  %363 = load i64, ptr %63, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.doublecomplex, ptr %362, i64 %363
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %364, i32 0, i32 1
  %366 = load double, ptr %365, align 8, !tbaa !15
  %367 = load ptr, ptr %41, align 8, !tbaa !5
  %368 = load i64, ptr %62, align 8, !tbaa !9
  %369 = getelementptr inbounds %struct.doublecomplex, ptr %367, i64 %368
  %370 = getelementptr inbounds %struct.doublecomplex, ptr %369, i32 0, i32 1
  store double %366, ptr %370, align 8, !tbaa !15
  %371 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 1, ptr %371, align 8, !tbaa !9
  %372 = load ptr, ptr %40, align 8, !tbaa !5
  store i64 0, ptr %372, align 8, !tbaa !9
  %373 = load i64, ptr %95, align 8, !tbaa !9
  %374 = load i64, ptr %95, align 8, !tbaa !9
  %375 = load i64, ptr %52, align 8, !tbaa !9
  %376 = mul nsw i64 %374, %375
  %377 = add nsw i64 %373, %376
  store i64 %377, ptr %62, align 8, !tbaa !9
  %378 = load double, ptr %98, align 8, !tbaa !14
  store double %378, ptr %70, align 8, !tbaa !14
  %379 = load double, ptr %82, align 8, !tbaa !14
  %380 = load ptr, ptr %33, align 8, !tbaa !5
  %381 = load i64, ptr %62, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.doublecomplex, ptr %380, i64 %381
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %382, i32 0, i32 0
  %384 = load double, ptr %383, align 8, !tbaa !11
  store double %384, ptr %66, align 8, !tbaa !14
  %385 = load double, ptr %66, align 8, !tbaa !14
  %386 = fcmp oge double %385, 0.000000e+00
  br i1 %386, label %387, label %389

387:                                              ; preds = %346
  %388 = load double, ptr %66, align 8, !tbaa !14
  br label %392

389:                                              ; preds = %346
  %390 = load double, ptr %66, align 8, !tbaa !14
  %391 = fneg double %390
  br label %392

392:                                              ; preds = %389, %387
  %393 = phi double [ %388, %387 ], [ %391, %389 ]
  %394 = load ptr, ptr %33, align 8, !tbaa !5
  %395 = load i64, ptr %95, align 8, !tbaa !9
  %396 = load i64, ptr %95, align 8, !tbaa !9
  %397 = load i64, ptr %52, align 8, !tbaa !9
  %398 = mul nsw i64 %396, %397
  %399 = add nsw i64 %395, %398
  %400 = getelementptr inbounds %struct.doublecomplex, ptr %394, i64 %399
  %401 = call double @d_imag(ptr noundef %400)
  store double %401, ptr %67, align 8, !tbaa !14
  %402 = load double, ptr %67, align 8, !tbaa !14
  %403 = fcmp oge double %402, 0.000000e+00
  br i1 %403, label %404, label %406

404:                                              ; preds = %392
  %405 = load double, ptr %67, align 8, !tbaa !14
  br label %409

406:                                              ; preds = %392
  %407 = load double, ptr %67, align 8, !tbaa !14
  %408 = fneg double %407
  br label %409

409:                                              ; preds = %406, %404
  %410 = phi double [ %405, %404 ], [ %408, %406 ]
  %411 = fadd double %393, %410
  %412 = fmul double %379, %411
  store double %412, ptr %71, align 8, !tbaa !14
  %413 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %414 = load double, ptr %413, align 8, !tbaa !11
  store double %414, ptr %68, align 8, !tbaa !14
  %415 = load double, ptr %68, align 8, !tbaa !14
  %416 = fcmp oge double %415, 0.000000e+00
  br i1 %416, label %417, label %419

417:                                              ; preds = %409
  %418 = load double, ptr %68, align 8, !tbaa !14
  br label %422

419:                                              ; preds = %409
  %420 = load double, ptr %68, align 8, !tbaa !14
  %421 = fneg double %420
  br label %422

422:                                              ; preds = %419, %417
  %423 = phi double [ %418, %417 ], [ %421, %419 ]
  %424 = call double @d_imag(ptr noundef %76)
  store double %424, ptr %69, align 8, !tbaa !14
  %425 = load double, ptr %69, align 8, !tbaa !14
  %426 = fcmp oge double %425, 0.000000e+00
  br i1 %426, label %427, label %429

427:                                              ; preds = %422
  %428 = load double, ptr %69, align 8, !tbaa !14
  br label %432

429:                                              ; preds = %422
  %430 = load double, ptr %69, align 8, !tbaa !14
  %431 = fneg double %430
  br label %432

432:                                              ; preds = %429, %427
  %433 = phi double [ %428, %427 ], [ %431, %429 ]
  %434 = fadd double %423, %433
  %435 = load double, ptr %70, align 8, !tbaa !14
  %436 = load double, ptr %71, align 8, !tbaa !14
  %437 = fcmp oge double %435, %436
  br i1 %437, label %438, label %440

438:                                              ; preds = %432
  %439 = load double, ptr %70, align 8, !tbaa !14
  br label %442

440:                                              ; preds = %432
  %441 = load double, ptr %71, align 8, !tbaa !14
  br label %442

442:                                              ; preds = %440, %438
  %443 = phi double [ %439, %438 ], [ %441, %440 ]
  %444 = fcmp ole double %434, %443
  br i1 %444, label %445, label %468

445:                                              ; preds = %442
  %446 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 0, ptr %446, align 8, !tbaa !9
  %447 = load ptr, ptr %40, align 8, !tbaa !5
  store i64 1, ptr %447, align 8, !tbaa !9
  %448 = load i64, ptr %95, align 8, !tbaa !9
  %449 = load ptr, ptr %30, align 8, !tbaa !5
  %450 = load i64, ptr %449, align 8, !tbaa !9
  %451 = icmp sgt i64 %448, %450
  br i1 %451, label %452, label %467

452:                                              ; preds = %445
  %453 = load i64, ptr %95, align 8, !tbaa !9
  %454 = load i64, ptr %95, align 8, !tbaa !9
  %455 = sub nsw i64 %454, 1
  %456 = load i64, ptr %52, align 8, !tbaa !9
  %457 = mul nsw i64 %455, %456
  %458 = add nsw i64 %453, %457
  store i64 %458, ptr %62, align 8, !tbaa !9
  %459 = load ptr, ptr %33, align 8, !tbaa !5
  %460 = load i64, ptr %62, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct.doublecomplex, ptr %459, i64 %460
  %462 = getelementptr inbounds %struct.doublecomplex, ptr %461, i32 0, i32 0
  store double 0.000000e+00, ptr %462, align 8, !tbaa !11
  %463 = load ptr, ptr %33, align 8, !tbaa !5
  %464 = load i64, ptr %62, align 8, !tbaa !9
  %465 = getelementptr inbounds %struct.doublecomplex, ptr %463, i64 %464
  %466 = getelementptr inbounds %struct.doublecomplex, ptr %465, i32 0, i32 1
  store double 0.000000e+00, ptr %466, align 8, !tbaa !15
  br label %467

467:                                              ; preds = %452, %445
  br label %468

468:                                              ; preds = %467, %442
  %469 = load ptr, ptr %50, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.doublecomplex, ptr %469, i64 1
  %471 = getelementptr inbounds %struct.doublecomplex, ptr %470, i32 0, i32 0
  store double 1.000000e+00, ptr %471, align 8, !tbaa !11
  %472 = load ptr, ptr %50, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %472, i64 1
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %473, i32 0, i32 1
  store double 0.000000e+00, ptr %474, align 8, !tbaa !15
  store i32 0, ptr %26, align 4
  store i32 1, ptr %100, align 4
  br label %1422

475:                                              ; preds = %341
  %476 = load ptr, ptr %33, align 8, !tbaa !5
  %477 = load i64, ptr %95, align 8, !tbaa !9
  %478 = load i64, ptr %95, align 8, !tbaa !9
  %479 = load i64, ptr %52, align 8, !tbaa !9
  %480 = mul nsw i64 %478, %479
  %481 = add nsw i64 %477, %480
  %482 = getelementptr inbounds %struct.doublecomplex, ptr %476, i64 %481
  %483 = load ptr, ptr %34, align 8, !tbaa !5
  %484 = load ptr, ptr %45, align 8, !tbaa !5
  %485 = load i64, ptr %55, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %484, i64 %485
  %487 = load ptr, ptr %46, align 8, !tbaa !5
  %488 = call i32 @zlacpy_(ptr noundef @.str.4, ptr noundef %77, ptr noundef %77, ptr noundef %482, ptr noundef %483, ptr noundef %486, ptr noundef %487)
  %489 = load i64, ptr %77, align 8, !tbaa !9
  %490 = sub nsw i64 %489, 1
  store i64 %490, ptr %62, align 8, !tbaa !9
  %491 = load ptr, ptr %34, align 8, !tbaa !5
  %492 = load i64, ptr %491, align 8, !tbaa !9
  %493 = add nsw i64 %492, 1
  store i64 %493, ptr %63, align 8, !tbaa !9
  %494 = load ptr, ptr %46, align 8, !tbaa !5
  %495 = load i64, ptr %494, align 8, !tbaa !9
  %496 = add nsw i64 %495, 1
  store i64 %496, ptr %64, align 8, !tbaa !9
  %497 = load ptr, ptr %33, align 8, !tbaa !5
  %498 = load i64, ptr %95, align 8, !tbaa !9
  %499 = add nsw i64 %498, 1
  %500 = load i64, ptr %95, align 8, !tbaa !9
  %501 = load i64, ptr %52, align 8, !tbaa !9
  %502 = mul nsw i64 %500, %501
  %503 = add nsw i64 %499, %502
  %504 = getelementptr inbounds %struct.doublecomplex, ptr %497, i64 %503
  %505 = load ptr, ptr %45, align 8, !tbaa !5
  %506 = load i64, ptr %54, align 8, !tbaa !9
  %507 = add nsw i64 %506, 2
  %508 = getelementptr inbounds %struct.doublecomplex, ptr %505, i64 %507
  %509 = call i32 @f2c_zcopy(ptr noundef %62, ptr noundef %504, ptr noundef %63, ptr noundef %508, ptr noundef %64)
  %510 = load ptr, ptr %42, align 8, !tbaa !5
  %511 = load i64, ptr %57, align 8, !tbaa !9
  %512 = getelementptr inbounds %struct.doublecomplex, ptr %510, i64 %511
  %513 = load ptr, ptr %43, align 8, !tbaa !5
  %514 = call i32 @zlaset_(ptr noundef @.str.5, ptr noundef %77, ptr noundef %77, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %512, ptr noundef %513)
  %515 = load ptr, ptr %51, align 8, !tbaa !5
  %516 = call i64 @ilaenv_(ptr noundef @c__12, ptr noundef @.str.6, ptr noundef @.str.7, ptr noundef %77, ptr noundef @c__1, ptr noundef %77, ptr noundef %515)
  store i64 %516, ptr %89, align 8, !tbaa !9
  %517 = load i64, ptr %77, align 8, !tbaa !9
  %518 = load i64, ptr %89, align 8, !tbaa !9
  %519 = icmp sgt i64 %517, %518
  br i1 %519, label %520, label %536

520:                                              ; preds = %475
  %521 = load ptr, ptr %45, align 8, !tbaa !5
  %522 = load i64, ptr %55, align 8, !tbaa !9
  %523 = getelementptr inbounds %struct.doublecomplex, ptr %521, i64 %522
  %524 = load ptr, ptr %46, align 8, !tbaa !5
  %525 = load ptr, ptr %41, align 8, !tbaa !5
  %526 = load i64, ptr %95, align 8, !tbaa !9
  %527 = getelementptr inbounds %struct.doublecomplex, ptr %525, i64 %526
  %528 = load ptr, ptr %42, align 8, !tbaa !5
  %529 = load i64, ptr %57, align 8, !tbaa !9
  %530 = getelementptr inbounds %struct.doublecomplex, ptr %528, i64 %529
  %531 = load ptr, ptr %43, align 8, !tbaa !5
  %532 = load ptr, ptr %50, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %532, i64 1
  %534 = load ptr, ptr %51, align 8, !tbaa !5
  %535 = call i32 @zlaqr4_(ptr noundef @c_true, ptr noundef @c_true, ptr noundef %77, ptr noundef @c__1, ptr noundef %77, ptr noundef %523, ptr noundef %524, ptr noundef %527, ptr noundef @c__1, ptr noundef %77, ptr noundef %530, ptr noundef %531, ptr noundef %533, ptr noundef %534, ptr noundef %94)
  br label %549

536:                                              ; preds = %475
  %537 = load ptr, ptr %45, align 8, !tbaa !5
  %538 = load i64, ptr %55, align 8, !tbaa !9
  %539 = getelementptr inbounds %struct.doublecomplex, ptr %537, i64 %538
  %540 = load ptr, ptr %46, align 8, !tbaa !5
  %541 = load ptr, ptr %41, align 8, !tbaa !5
  %542 = load i64, ptr %95, align 8, !tbaa !9
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %541, i64 %542
  %544 = load ptr, ptr %42, align 8, !tbaa !5
  %545 = load i64, ptr %57, align 8, !tbaa !9
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %544, i64 %545
  %547 = load ptr, ptr %43, align 8, !tbaa !5
  %548 = call i32 @zlahqr_(ptr noundef @c_true, ptr noundef @c_true, ptr noundef %77, ptr noundef @c__1, ptr noundef %77, ptr noundef %539, ptr noundef %540, ptr noundef %543, ptr noundef @c__1, ptr noundef %77, ptr noundef %546, ptr noundef %547, ptr noundef %94)
  br label %549

549:                                              ; preds = %536, %520
  %550 = load i64, ptr %77, align 8, !tbaa !9
  %551 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 %550, ptr %551, align 8, !tbaa !9
  %552 = load i64, ptr %94, align 8, !tbaa !9
  %553 = add nsw i64 %552, 1
  store i64 %553, ptr %91, align 8, !tbaa !9
  %554 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %554, ptr %62, align 8, !tbaa !9
  %555 = load i64, ptr %94, align 8, !tbaa !9
  %556 = add nsw i64 %555, 1
  store i64 %556, ptr %81, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %722, %549
  %558 = load i64, ptr %81, align 8, !tbaa !9
  %559 = load i64, ptr %62, align 8, !tbaa !9
  %560 = icmp sle i64 %558, %559
  br i1 %560, label %561, label %725

561:                                              ; preds = %557
  %562 = load ptr, ptr %39, align 8, !tbaa !5
  %563 = load i64, ptr %562, align 8, !tbaa !9
  %564 = load ptr, ptr %39, align 8, !tbaa !5
  %565 = load i64, ptr %564, align 8, !tbaa !9
  %566 = load i64, ptr %54, align 8, !tbaa !9
  %567 = mul nsw i64 %565, %566
  %568 = add nsw i64 %563, %567
  store i64 %568, ptr %63, align 8, !tbaa !9
  %569 = load ptr, ptr %45, align 8, !tbaa !5
  %570 = load i64, ptr %63, align 8, !tbaa !9
  %571 = getelementptr inbounds %struct.doublecomplex, ptr %569, i64 %570
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %571, i32 0, i32 0
  %573 = load double, ptr %572, align 8, !tbaa !11
  store double %573, ptr %66, align 8, !tbaa !14
  %574 = load double, ptr %66, align 8, !tbaa !14
  %575 = fcmp oge double %574, 0.000000e+00
  br i1 %575, label %576, label %578

576:                                              ; preds = %561
  %577 = load double, ptr %66, align 8, !tbaa !14
  br label %581

578:                                              ; preds = %561
  %579 = load double, ptr %66, align 8, !tbaa !14
  %580 = fneg double %579
  br label %581

581:                                              ; preds = %578, %576
  %582 = phi double [ %577, %576 ], [ %580, %578 ]
  %583 = load ptr, ptr %45, align 8, !tbaa !5
  %584 = load ptr, ptr %39, align 8, !tbaa !5
  %585 = load i64, ptr %584, align 8, !tbaa !9
  %586 = load ptr, ptr %39, align 8, !tbaa !5
  %587 = load i64, ptr %586, align 8, !tbaa !9
  %588 = load i64, ptr %54, align 8, !tbaa !9
  %589 = mul nsw i64 %587, %588
  %590 = add nsw i64 %585, %589
  %591 = getelementptr inbounds %struct.doublecomplex, ptr %583, i64 %590
  %592 = call double @d_imag(ptr noundef %591)
  store double %592, ptr %67, align 8, !tbaa !14
  %593 = load double, ptr %67, align 8, !tbaa !14
  %594 = fcmp oge double %593, 0.000000e+00
  br i1 %594, label %595, label %597

595:                                              ; preds = %581
  %596 = load double, ptr %67, align 8, !tbaa !14
  br label %600

597:                                              ; preds = %581
  %598 = load double, ptr %67, align 8, !tbaa !14
  %599 = fneg double %598
  br label %600

600:                                              ; preds = %597, %595
  %601 = phi double [ %596, %595 ], [ %599, %597 ]
  %602 = fadd double %582, %601
  store double %602, ptr %78, align 8, !tbaa !14
  %603 = load double, ptr %78, align 8, !tbaa !14
  %604 = fcmp oeq double %603, 0.000000e+00
  br i1 %604, label %605, label %628

605:                                              ; preds = %600
  %606 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %607 = load double, ptr %606, align 8, !tbaa !11
  store double %607, ptr %66, align 8, !tbaa !14
  %608 = load double, ptr %66, align 8, !tbaa !14
  %609 = fcmp oge double %608, 0.000000e+00
  br i1 %609, label %610, label %612

610:                                              ; preds = %605
  %611 = load double, ptr %66, align 8, !tbaa !14
  br label %615

612:                                              ; preds = %605
  %613 = load double, ptr %66, align 8, !tbaa !14
  %614 = fneg double %613
  br label %615

615:                                              ; preds = %612, %610
  %616 = phi double [ %611, %610 ], [ %614, %612 ]
  %617 = call double @d_imag(ptr noundef %76)
  store double %617, ptr %67, align 8, !tbaa !14
  %618 = load double, ptr %67, align 8, !tbaa !14
  %619 = fcmp oge double %618, 0.000000e+00
  br i1 %619, label %620, label %622

620:                                              ; preds = %615
  %621 = load double, ptr %67, align 8, !tbaa !14
  br label %625

622:                                              ; preds = %615
  %623 = load double, ptr %67, align 8, !tbaa !14
  %624 = fneg double %623
  br label %625

625:                                              ; preds = %622, %620
  %626 = phi double [ %621, %620 ], [ %624, %622 ]
  %627 = fadd double %616, %626
  store double %627, ptr %78, align 8, !tbaa !14
  br label %628

628:                                              ; preds = %625, %600
  %629 = load ptr, ptr %39, align 8, !tbaa !5
  %630 = load i64, ptr %629, align 8, !tbaa !9
  %631 = load i64, ptr %56, align 8, !tbaa !9
  %632 = mul nsw i64 %630, %631
  %633 = add nsw i64 %632, 1
  store i64 %633, ptr %63, align 8, !tbaa !9
  %634 = load double, ptr %98, align 8, !tbaa !14
  store double %634, ptr %70, align 8, !tbaa !14
  %635 = load double, ptr %82, align 8, !tbaa !14
  %636 = load double, ptr %78, align 8, !tbaa !14
  %637 = fmul double %635, %636
  store double %637, ptr %71, align 8, !tbaa !14
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %639 = load double, ptr %638, align 8, !tbaa !11
  store double %639, ptr %66, align 8, !tbaa !14
  %640 = load double, ptr %66, align 8, !tbaa !14
  %641 = fcmp oge double %640, 0.000000e+00
  br i1 %641, label %642, label %644

642:                                              ; preds = %628
  %643 = load double, ptr %66, align 8, !tbaa !14
  br label %647

644:                                              ; preds = %628
  %645 = load double, ptr %66, align 8, !tbaa !14
  %646 = fneg double %645
  br label %647

647:                                              ; preds = %644, %642
  %648 = phi double [ %643, %642 ], [ %646, %644 ]
  %649 = call double @d_imag(ptr noundef %76)
  store double %649, ptr %67, align 8, !tbaa !14
  %650 = load double, ptr %67, align 8, !tbaa !14
  %651 = fcmp oge double %650, 0.000000e+00
  br i1 %651, label %652, label %654

652:                                              ; preds = %647
  %653 = load double, ptr %67, align 8, !tbaa !14
  br label %657

654:                                              ; preds = %647
  %655 = load double, ptr %67, align 8, !tbaa !14
  %656 = fneg double %655
  br label %657

657:                                              ; preds = %654, %652
  %658 = phi double [ %653, %652 ], [ %656, %654 ]
  %659 = fadd double %648, %658
  %660 = load ptr, ptr %42, align 8, !tbaa !5
  %661 = load i64, ptr %63, align 8, !tbaa !9
  %662 = getelementptr inbounds %struct.doublecomplex, ptr %660, i64 %661
  %663 = getelementptr inbounds %struct.doublecomplex, ptr %662, i32 0, i32 0
  %664 = load double, ptr %663, align 8, !tbaa !11
  store double %664, ptr %68, align 8, !tbaa !14
  %665 = load double, ptr %68, align 8, !tbaa !14
  %666 = fcmp oge double %665, 0.000000e+00
  br i1 %666, label %667, label %669

667:                                              ; preds = %657
  %668 = load double, ptr %68, align 8, !tbaa !14
  br label %672

669:                                              ; preds = %657
  %670 = load double, ptr %68, align 8, !tbaa !14
  %671 = fneg double %670
  br label %672

672:                                              ; preds = %669, %667
  %673 = phi double [ %668, %667 ], [ %671, %669 ]
  %674 = load ptr, ptr %42, align 8, !tbaa !5
  %675 = load ptr, ptr %39, align 8, !tbaa !5
  %676 = load i64, ptr %675, align 8, !tbaa !9
  %677 = load i64, ptr %56, align 8, !tbaa !9
  %678 = mul nsw i64 %676, %677
  %679 = add nsw i64 %678, 1
  %680 = getelementptr inbounds %struct.doublecomplex, ptr %674, i64 %679
  %681 = call double @d_imag(ptr noundef %680)
  store double %681, ptr %69, align 8, !tbaa !14
  %682 = load double, ptr %69, align 8, !tbaa !14
  %683 = fcmp oge double %682, 0.000000e+00
  br i1 %683, label %684, label %686

684:                                              ; preds = %672
  %685 = load double, ptr %69, align 8, !tbaa !14
  br label %689

686:                                              ; preds = %672
  %687 = load double, ptr %69, align 8, !tbaa !14
  %688 = fneg double %687
  br label %689

689:                                              ; preds = %686, %684
  %690 = phi double [ %685, %684 ], [ %688, %686 ]
  %691 = fadd double %673, %690
  %692 = fmul double %659, %691
  %693 = load double, ptr %70, align 8, !tbaa !14
  %694 = load double, ptr %71, align 8, !tbaa !14
  %695 = fcmp oge double %693, %694
  br i1 %695, label %696, label %698

696:                                              ; preds = %689
  %697 = load double, ptr %70, align 8, !tbaa !14
  br label %700

698:                                              ; preds = %689
  %699 = load double, ptr %71, align 8, !tbaa !14
  br label %700

700:                                              ; preds = %698, %696
  %701 = phi double [ %697, %696 ], [ %699, %698 ]
  %702 = fcmp ole double %692, %701
  br i1 %702, label %703, label %707

703:                                              ; preds = %700
  %704 = load ptr, ptr %39, align 8, !tbaa !5
  %705 = load i64, ptr %704, align 8, !tbaa !9
  %706 = add nsw i64 %705, -1
  store i64 %706, ptr %704, align 8, !tbaa !9
  br label %721

707:                                              ; preds = %700
  %708 = load ptr, ptr %39, align 8, !tbaa !5
  %709 = load i64, ptr %708, align 8, !tbaa !9
  store i64 %709, ptr %90, align 8, !tbaa !9
  %710 = load ptr, ptr %45, align 8, !tbaa !5
  %711 = load i64, ptr %55, align 8, !tbaa !9
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %710, i64 %711
  %713 = load ptr, ptr %46, align 8, !tbaa !5
  %714 = load ptr, ptr %42, align 8, !tbaa !5
  %715 = load i64, ptr %57, align 8, !tbaa !9
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %714, i64 %715
  %717 = load ptr, ptr %43, align 8, !tbaa !5
  %718 = call i32 @ztrexc_(ptr noundef @.str.8, ptr noundef %77, ptr noundef %712, ptr noundef %713, ptr noundef %716, ptr noundef %717, ptr noundef %90, ptr noundef %91, ptr noundef %88)
  %719 = load i64, ptr %91, align 8, !tbaa !9
  %720 = add nsw i64 %719, 1
  store i64 %720, ptr %91, align 8, !tbaa !9
  br label %721

721:                                              ; preds = %707, %703
  br label %722

722:                                              ; preds = %721
  %723 = load i64, ptr %81, align 8, !tbaa !9
  %724 = add nsw i64 %723, 1
  store i64 %724, ptr %81, align 8, !tbaa !9
  br label %557, !llvm.loop !16

725:                                              ; preds = %557
  %726 = load ptr, ptr %39, align 8, !tbaa !5
  %727 = load i64, ptr %726, align 8, !tbaa !9
  %728 = icmp eq i64 %727, 0
  br i1 %728, label %729, label %732

729:                                              ; preds = %725
  %730 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  store double 0.000000e+00, ptr %730, align 8, !tbaa !11
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  store double 0.000000e+00, ptr %731, align 8, !tbaa !15
  br label %732

732:                                              ; preds = %729, %725
  %733 = load ptr, ptr %39, align 8, !tbaa !5
  %734 = load i64, ptr %733, align 8, !tbaa !9
  %735 = load i64, ptr %77, align 8, !tbaa !9
  %736 = icmp slt i64 %734, %735
  br i1 %736, label %737, label %858

737:                                              ; preds = %732
  %738 = load ptr, ptr %39, align 8, !tbaa !5
  %739 = load i64, ptr %738, align 8, !tbaa !9
  store i64 %739, ptr %62, align 8, !tbaa !9
  %740 = load i64, ptr %94, align 8, !tbaa !9
  %741 = add nsw i64 %740, 1
  store i64 %741, ptr %74, align 8, !tbaa !9
  br label %742

742:                                              ; preds = %854, %737
  %743 = load i64, ptr %74, align 8, !tbaa !9
  %744 = load i64, ptr %62, align 8, !tbaa !9
  %745 = icmp sle i64 %743, %744
  br i1 %745, label %746, label %857

746:                                              ; preds = %742
  %747 = load i64, ptr %74, align 8, !tbaa !9
  store i64 %747, ptr %90, align 8, !tbaa !9
  %748 = load ptr, ptr %39, align 8, !tbaa !5
  %749 = load i64, ptr %748, align 8, !tbaa !9
  store i64 %749, ptr %63, align 8, !tbaa !9
  %750 = load i64, ptr %74, align 8, !tbaa !9
  %751 = add nsw i64 %750, 1
  store i64 %751, ptr %75, align 8, !tbaa !9
  br label %752

752:                                              ; preds = %835, %746
  %753 = load i64, ptr %75, align 8, !tbaa !9
  %754 = load i64, ptr %63, align 8, !tbaa !9
  %755 = icmp sle i64 %753, %754
  br i1 %755, label %756, label %838

756:                                              ; preds = %752
  %757 = load i64, ptr %75, align 8, !tbaa !9
  %758 = load i64, ptr %75, align 8, !tbaa !9
  %759 = load i64, ptr %54, align 8, !tbaa !9
  %760 = mul nsw i64 %758, %759
  %761 = add nsw i64 %757, %760
  store i64 %761, ptr %64, align 8, !tbaa !9
  %762 = load i64, ptr %90, align 8, !tbaa !9
  %763 = load i64, ptr %90, align 8, !tbaa !9
  %764 = load i64, ptr %54, align 8, !tbaa !9
  %765 = mul nsw i64 %763, %764
  %766 = add nsw i64 %762, %765
  store i64 %766, ptr %65, align 8, !tbaa !9
  %767 = load ptr, ptr %45, align 8, !tbaa !5
  %768 = load i64, ptr %64, align 8, !tbaa !9
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %767, i64 %768
  %770 = getelementptr inbounds %struct.doublecomplex, ptr %769, i32 0, i32 0
  %771 = load double, ptr %770, align 8, !tbaa !11
  store double %771, ptr %66, align 8, !tbaa !14
  %772 = load double, ptr %66, align 8, !tbaa !14
  %773 = fcmp oge double %772, 0.000000e+00
  br i1 %773, label %774, label %776

774:                                              ; preds = %756
  %775 = load double, ptr %66, align 8, !tbaa !14
  br label %779

776:                                              ; preds = %756
  %777 = load double, ptr %66, align 8, !tbaa !14
  %778 = fneg double %777
  br label %779

779:                                              ; preds = %776, %774
  %780 = phi double [ %775, %774 ], [ %778, %776 ]
  %781 = load ptr, ptr %45, align 8, !tbaa !5
  %782 = load i64, ptr %75, align 8, !tbaa !9
  %783 = load i64, ptr %75, align 8, !tbaa !9
  %784 = load i64, ptr %54, align 8, !tbaa !9
  %785 = mul nsw i64 %783, %784
  %786 = add nsw i64 %782, %785
  %787 = getelementptr inbounds %struct.doublecomplex, ptr %781, i64 %786
  %788 = call double @d_imag(ptr noundef %787)
  store double %788, ptr %67, align 8, !tbaa !14
  %789 = load double, ptr %67, align 8, !tbaa !14
  %790 = fcmp oge double %789, 0.000000e+00
  br i1 %790, label %791, label %793

791:                                              ; preds = %779
  %792 = load double, ptr %67, align 8, !tbaa !14
  br label %796

793:                                              ; preds = %779
  %794 = load double, ptr %67, align 8, !tbaa !14
  %795 = fneg double %794
  br label %796

796:                                              ; preds = %793, %791
  %797 = phi double [ %792, %791 ], [ %795, %793 ]
  %798 = fadd double %780, %797
  %799 = load ptr, ptr %45, align 8, !tbaa !5
  %800 = load i64, ptr %65, align 8, !tbaa !9
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %799, i64 %800
  %802 = getelementptr inbounds %struct.doublecomplex, ptr %801, i32 0, i32 0
  %803 = load double, ptr %802, align 8, !tbaa !11
  store double %803, ptr %68, align 8, !tbaa !14
  %804 = load double, ptr %68, align 8, !tbaa !14
  %805 = fcmp oge double %804, 0.000000e+00
  br i1 %805, label %806, label %808

806:                                              ; preds = %796
  %807 = load double, ptr %68, align 8, !tbaa !14
  br label %811

808:                                              ; preds = %796
  %809 = load double, ptr %68, align 8, !tbaa !14
  %810 = fneg double %809
  br label %811

811:                                              ; preds = %808, %806
  %812 = phi double [ %807, %806 ], [ %810, %808 ]
  %813 = load ptr, ptr %45, align 8, !tbaa !5
  %814 = load i64, ptr %90, align 8, !tbaa !9
  %815 = load i64, ptr %90, align 8, !tbaa !9
  %816 = load i64, ptr %54, align 8, !tbaa !9
  %817 = mul nsw i64 %815, %816
  %818 = add nsw i64 %814, %817
  %819 = getelementptr inbounds %struct.doublecomplex, ptr %813, i64 %818
  %820 = call double @d_imag(ptr noundef %819)
  store double %820, ptr %69, align 8, !tbaa !14
  %821 = load double, ptr %69, align 8, !tbaa !14
  %822 = fcmp oge double %821, 0.000000e+00
  br i1 %822, label %823, label %825

823:                                              ; preds = %811
  %824 = load double, ptr %69, align 8, !tbaa !14
  br label %828

825:                                              ; preds = %811
  %826 = load double, ptr %69, align 8, !tbaa !14
  %827 = fneg double %826
  br label %828

828:                                              ; preds = %825, %823
  %829 = phi double [ %824, %823 ], [ %827, %825 ]
  %830 = fadd double %812, %829
  %831 = fcmp ogt double %798, %830
  br i1 %831, label %832, label %834

832:                                              ; preds = %828
  %833 = load i64, ptr %75, align 8, !tbaa !9
  store i64 %833, ptr %90, align 8, !tbaa !9
  br label %834

834:                                              ; preds = %832, %828
  br label %835

835:                                              ; preds = %834
  %836 = load i64, ptr %75, align 8, !tbaa !9
  %837 = add nsw i64 %836, 1
  store i64 %837, ptr %75, align 8, !tbaa !9
  br label %752, !llvm.loop !18

838:                                              ; preds = %752
  %839 = load i64, ptr %74, align 8, !tbaa !9
  store i64 %839, ptr %91, align 8, !tbaa !9
  %840 = load i64, ptr %90, align 8, !tbaa !9
  %841 = load i64, ptr %91, align 8, !tbaa !9
  %842 = icmp ne i64 %840, %841
  br i1 %842, label %843, label %853

843:                                              ; preds = %838
  %844 = load ptr, ptr %45, align 8, !tbaa !5
  %845 = load i64, ptr %55, align 8, !tbaa !9
  %846 = getelementptr inbounds %struct.doublecomplex, ptr %844, i64 %845
  %847 = load ptr, ptr %46, align 8, !tbaa !5
  %848 = load ptr, ptr %42, align 8, !tbaa !5
  %849 = load i64, ptr %57, align 8, !tbaa !9
  %850 = getelementptr inbounds %struct.doublecomplex, ptr %848, i64 %849
  %851 = load ptr, ptr %43, align 8, !tbaa !5
  %852 = call i32 @ztrexc_(ptr noundef @.str.8, ptr noundef %77, ptr noundef %846, ptr noundef %847, ptr noundef %850, ptr noundef %851, ptr noundef %90, ptr noundef %91, ptr noundef %88)
  br label %853

853:                                              ; preds = %843, %838
  br label %854

854:                                              ; preds = %853
  %855 = load i64, ptr %74, align 8, !tbaa !9
  %856 = add nsw i64 %855, 1
  store i64 %856, ptr %74, align 8, !tbaa !9
  br label %742, !llvm.loop !19

857:                                              ; preds = %742
  br label %858

858:                                              ; preds = %857, %732
  %859 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %859, ptr %62, align 8, !tbaa !9
  %860 = load i64, ptr %94, align 8, !tbaa !9
  %861 = add nsw i64 %860, 1
  store i64 %861, ptr %74, align 8, !tbaa !9
  br label %862

862:                                              ; preds = %894, %858
  %863 = load i64, ptr %74, align 8, !tbaa !9
  %864 = load i64, ptr %62, align 8, !tbaa !9
  %865 = icmp sle i64 %863, %864
  br i1 %865, label %866, label %897

866:                                              ; preds = %862
  %867 = load i64, ptr %95, align 8, !tbaa !9
  %868 = load i64, ptr %74, align 8, !tbaa !9
  %869 = add nsw i64 %867, %868
  %870 = sub nsw i64 %869, 1
  store i64 %870, ptr %63, align 8, !tbaa !9
  %871 = load i64, ptr %74, align 8, !tbaa !9
  %872 = load i64, ptr %74, align 8, !tbaa !9
  %873 = load i64, ptr %54, align 8, !tbaa !9
  %874 = mul nsw i64 %872, %873
  %875 = add nsw i64 %871, %874
  store i64 %875, ptr %64, align 8, !tbaa !9
  %876 = load ptr, ptr %45, align 8, !tbaa !5
  %877 = load i64, ptr %64, align 8, !tbaa !9
  %878 = getelementptr inbounds %struct.doublecomplex, ptr %876, i64 %877
  %879 = getelementptr inbounds %struct.doublecomplex, ptr %878, i32 0, i32 0
  %880 = load double, ptr %879, align 8, !tbaa !11
  %881 = load ptr, ptr %41, align 8, !tbaa !5
  %882 = load i64, ptr %63, align 8, !tbaa !9
  %883 = getelementptr inbounds %struct.doublecomplex, ptr %881, i64 %882
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %883, i32 0, i32 0
  store double %880, ptr %884, align 8, !tbaa !11
  %885 = load ptr, ptr %45, align 8, !tbaa !5
  %886 = load i64, ptr %64, align 8, !tbaa !9
  %887 = getelementptr inbounds %struct.doublecomplex, ptr %885, i64 %886
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %887, i32 0, i32 1
  %889 = load double, ptr %888, align 8, !tbaa !15
  %890 = load ptr, ptr %41, align 8, !tbaa !5
  %891 = load i64, ptr %63, align 8, !tbaa !9
  %892 = getelementptr inbounds %struct.doublecomplex, ptr %890, i64 %891
  %893 = getelementptr inbounds %struct.doublecomplex, ptr %892, i32 0, i32 1
  store double %889, ptr %893, align 8, !tbaa !15
  br label %894

894:                                              ; preds = %866
  %895 = load i64, ptr %74, align 8, !tbaa !9
  %896 = add nsw i64 %895, 1
  store i64 %896, ptr %74, align 8, !tbaa !9
  br label %862, !llvm.loop !20

897:                                              ; preds = %862
  %898 = load ptr, ptr %39, align 8, !tbaa !5
  %899 = load i64, ptr %898, align 8, !tbaa !9
  %900 = load i64, ptr %77, align 8, !tbaa !9
  %901 = icmp slt i64 %899, %900
  br i1 %901, label %910, label %902

902:                                              ; preds = %897
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %904 = load double, ptr %903, align 8, !tbaa !11
  %905 = fcmp oeq double %904, 0.000000e+00
  br i1 %905, label %906, label %1397

906:                                              ; preds = %902
  %907 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %908 = load double, ptr %907, align 8, !tbaa !15
  %909 = fcmp oeq double %908, 0.000000e+00
  br i1 %909, label %910, label %1397

910:                                              ; preds = %906, %897
  %911 = load ptr, ptr %39, align 8, !tbaa !5
  %912 = load i64, ptr %911, align 8, !tbaa !9
  %913 = icmp sgt i64 %912, 1
  br i1 %913, label %914, label %1041

914:                                              ; preds = %910
  %915 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %916 = load double, ptr %915, align 8, !tbaa !11
  %917 = fcmp une double %916, 0.000000e+00
  br i1 %917, label %922, label %918

918:                                              ; preds = %914
  %919 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %920 = load double, ptr %919, align 8, !tbaa !15
  %921 = fcmp une double %920, 0.000000e+00
  br i1 %921, label %922, label %1041

922:                                              ; preds = %918, %914
  %923 = load ptr, ptr %39, align 8, !tbaa !5
  %924 = load ptr, ptr %42, align 8, !tbaa !5
  %925 = load i64, ptr %57, align 8, !tbaa !9
  %926 = getelementptr inbounds %struct.doublecomplex, ptr %924, i64 %925
  %927 = load ptr, ptr %43, align 8, !tbaa !5
  %928 = load ptr, ptr %50, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.doublecomplex, ptr %928, i64 1
  %930 = call i32 @f2c_zcopy(ptr noundef %923, ptr noundef %926, ptr noundef %927, ptr noundef %929, ptr noundef @c__1)
  %931 = load ptr, ptr %39, align 8, !tbaa !5
  %932 = load i64, ptr %931, align 8, !tbaa !9
  store i64 %932, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %74, align 8, !tbaa !9
  br label %933

933:                                              ; preds = %954, %922
  %934 = load i64, ptr %74, align 8, !tbaa !9
  %935 = load i64, ptr %62, align 8, !tbaa !9
  %936 = icmp sle i64 %934, %935
  br i1 %936, label %937, label %957

937:                                              ; preds = %933
  %938 = load i64, ptr %74, align 8, !tbaa !9
  store i64 %938, ptr %63, align 8, !tbaa !9
  %939 = load ptr, ptr %50, align 8, !tbaa !5
  %940 = load i64, ptr %74, align 8, !tbaa !9
  %941 = getelementptr inbounds %struct.doublecomplex, ptr %939, i64 %940
  call void @d_cnjg(ptr noundef %72, ptr noundef %941)
  %942 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %943 = load double, ptr %942, align 8, !tbaa !11
  %944 = load ptr, ptr %50, align 8, !tbaa !5
  %945 = load i64, ptr %63, align 8, !tbaa !9
  %946 = getelementptr inbounds %struct.doublecomplex, ptr %944, i64 %945
  %947 = getelementptr inbounds %struct.doublecomplex, ptr %946, i32 0, i32 0
  store double %943, ptr %947, align 8, !tbaa !11
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  %949 = load double, ptr %948, align 8, !tbaa !15
  %950 = load ptr, ptr %50, align 8, !tbaa !5
  %951 = load i64, ptr %63, align 8, !tbaa !9
  %952 = getelementptr inbounds %struct.doublecomplex, ptr %950, i64 %951
  %953 = getelementptr inbounds %struct.doublecomplex, ptr %952, i32 0, i32 1
  store double %949, ptr %953, align 8, !tbaa !15
  br label %954

954:                                              ; preds = %937
  %955 = load i64, ptr %74, align 8, !tbaa !9
  %956 = add nsw i64 %955, 1
  store i64 %956, ptr %74, align 8, !tbaa !9
  br label %933, !llvm.loop !21

957:                                              ; preds = %933
  %958 = load ptr, ptr %50, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.doublecomplex, ptr %958, i64 1
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %959, i32 0, i32 0
  %961 = load double, ptr %960, align 8, !tbaa !11
  %962 = getelementptr inbounds %struct.doublecomplex, ptr %86, i32 0, i32 0
  store double %961, ptr %962, align 8, !tbaa !11
  %963 = load ptr, ptr %50, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.doublecomplex, ptr %963, i64 1
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %964, i32 0, i32 1
  %966 = load double, ptr %965, align 8, !tbaa !15
  %967 = getelementptr inbounds %struct.doublecomplex, ptr %86, i32 0, i32 1
  store double %966, ptr %967, align 8, !tbaa !15
  %968 = load ptr, ptr %39, align 8, !tbaa !5
  %969 = load ptr, ptr %50, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %969, i64 2
  %971 = call i32 @zlarfg_(ptr noundef %968, ptr noundef %86, ptr noundef %970, ptr noundef @c__1, ptr noundef %80)
  %972 = load ptr, ptr %50, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.doublecomplex, ptr %972, i64 1
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %973, i32 0, i32 0
  store double 1.000000e+00, ptr %974, align 8, !tbaa !11
  %975 = load ptr, ptr %50, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.doublecomplex, ptr %975, i64 1
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %976, i32 0, i32 1
  store double 0.000000e+00, ptr %977, align 8, !tbaa !15
  %978 = load i64, ptr %77, align 8, !tbaa !9
  %979 = sub nsw i64 %978, 2
  store i64 %979, ptr %62, align 8, !tbaa !9
  %980 = load i64, ptr %77, align 8, !tbaa !9
  %981 = sub nsw i64 %980, 2
  store i64 %981, ptr %63, align 8, !tbaa !9
  %982 = load ptr, ptr %45, align 8, !tbaa !5
  %983 = load i64, ptr %54, align 8, !tbaa !9
  %984 = add nsw i64 %983, 3
  %985 = getelementptr inbounds %struct.doublecomplex, ptr %982, i64 %984
  %986 = load ptr, ptr %46, align 8, !tbaa !5
  %987 = call i32 @zlaset_(ptr noundef @.str.9, ptr noundef %62, ptr noundef %63, ptr noundef @c_b1, ptr noundef @c_b1, ptr noundef %985, ptr noundef %986)
  call void @d_cnjg(ptr noundef %72, ptr noundef %80)
  %988 = load ptr, ptr %39, align 8, !tbaa !5
  %989 = load ptr, ptr %50, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.doublecomplex, ptr %989, i64 1
  %991 = load ptr, ptr %45, align 8, !tbaa !5
  %992 = load i64, ptr %55, align 8, !tbaa !9
  %993 = getelementptr inbounds %struct.doublecomplex, ptr %991, i64 %992
  %994 = load ptr, ptr %46, align 8, !tbaa !5
  %995 = load ptr, ptr %50, align 8, !tbaa !5
  %996 = load i64, ptr %77, align 8, !tbaa !9
  %997 = add nsw i64 %996, 1
  %998 = getelementptr inbounds %struct.doublecomplex, ptr %995, i64 %997
  %999 = call i32 @zlarf_(ptr noundef @.str.9, ptr noundef %988, ptr noundef %77, ptr noundef %990, ptr noundef @c__1, ptr noundef %72, ptr noundef %993, ptr noundef %994, ptr noundef %998)
  %1000 = load ptr, ptr %39, align 8, !tbaa !5
  %1001 = load ptr, ptr %39, align 8, !tbaa !5
  %1002 = load ptr, ptr %50, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.doublecomplex, ptr %1002, i64 1
  %1004 = load ptr, ptr %45, align 8, !tbaa !5
  %1005 = load i64, ptr %55, align 8, !tbaa !9
  %1006 = getelementptr inbounds %struct.doublecomplex, ptr %1004, i64 %1005
  %1007 = load ptr, ptr %46, align 8, !tbaa !5
  %1008 = load ptr, ptr %50, align 8, !tbaa !5
  %1009 = load i64, ptr %77, align 8, !tbaa !9
  %1010 = add nsw i64 %1009, 1
  %1011 = getelementptr inbounds %struct.doublecomplex, ptr %1008, i64 %1010
  %1012 = call i32 @zlarf_(ptr noundef @.str, ptr noundef %1000, ptr noundef %1001, ptr noundef %1003, ptr noundef @c__1, ptr noundef %80, ptr noundef %1006, ptr noundef %1007, ptr noundef %1011)
  %1013 = load ptr, ptr %39, align 8, !tbaa !5
  %1014 = load ptr, ptr %50, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.doublecomplex, ptr %1014, i64 1
  %1016 = load ptr, ptr %42, align 8, !tbaa !5
  %1017 = load i64, ptr %57, align 8, !tbaa !9
  %1018 = getelementptr inbounds %struct.doublecomplex, ptr %1016, i64 %1017
  %1019 = load ptr, ptr %43, align 8, !tbaa !5
  %1020 = load ptr, ptr %50, align 8, !tbaa !5
  %1021 = load i64, ptr %77, align 8, !tbaa !9
  %1022 = add nsw i64 %1021, 1
  %1023 = getelementptr inbounds %struct.doublecomplex, ptr %1020, i64 %1022
  %1024 = call i32 @zlarf_(ptr noundef @.str, ptr noundef %77, ptr noundef %1013, ptr noundef %1015, ptr noundef @c__1, ptr noundef %80, ptr noundef %1018, ptr noundef %1019, ptr noundef %1023)
  %1025 = load ptr, ptr %51, align 8, !tbaa !5
  %1026 = load i64, ptr %1025, align 8, !tbaa !9
  %1027 = load i64, ptr %77, align 8, !tbaa !9
  %1028 = sub nsw i64 %1026, %1027
  store i64 %1028, ptr %62, align 8, !tbaa !9
  %1029 = load ptr, ptr %39, align 8, !tbaa !5
  %1030 = load ptr, ptr %45, align 8, !tbaa !5
  %1031 = load i64, ptr %55, align 8, !tbaa !9
  %1032 = getelementptr inbounds %struct.doublecomplex, ptr %1030, i64 %1031
  %1033 = load ptr, ptr %46, align 8, !tbaa !5
  %1034 = load ptr, ptr %50, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.doublecomplex, ptr %1034, i64 1
  %1036 = load ptr, ptr %50, align 8, !tbaa !5
  %1037 = load i64, ptr %77, align 8, !tbaa !9
  %1038 = add nsw i64 %1037, 1
  %1039 = getelementptr inbounds %struct.doublecomplex, ptr %1036, i64 %1038
  %1040 = call i32 @zgehrd_(ptr noundef %77, ptr noundef @c__1, ptr noundef %1029, ptr noundef %1032, ptr noundef %1033, ptr noundef %1035, ptr noundef %1039, ptr noundef %62, ptr noundef %88)
  br label %1041

1041:                                             ; preds = %957, %918, %910
  %1042 = load i64, ptr %95, align 8, !tbaa !9
  %1043 = icmp sgt i64 %1042, 1
  br i1 %1043, label %1044, label %1090

1044:                                             ; preds = %1041
  %1045 = load i64, ptr %95, align 8, !tbaa !9
  %1046 = load i64, ptr %95, align 8, !tbaa !9
  %1047 = sub nsw i64 %1046, 1
  %1048 = load i64, ptr %52, align 8, !tbaa !9
  %1049 = mul nsw i64 %1047, %1048
  %1050 = add nsw i64 %1045, %1049
  store i64 %1050, ptr %62, align 8, !tbaa !9
  %1051 = load ptr, ptr %42, align 8, !tbaa !5
  %1052 = load i64, ptr %56, align 8, !tbaa !9
  %1053 = add nsw i64 %1052, 1
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %1051, i64 %1053
  call void @d_cnjg(ptr noundef %73, ptr noundef %1054)
  %1055 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %1056 = load double, ptr %1055, align 8, !tbaa !11
  %1057 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 0
  %1058 = load double, ptr %1057, align 8, !tbaa !11
  %1059 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %1060 = load double, ptr %1059, align 8, !tbaa !15
  %1061 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 1
  %1062 = load double, ptr %1061, align 8, !tbaa !15
  %1063 = fmul double %1060, %1062
  %1064 = fneg double %1063
  %1065 = call double @llvm.fmuladd.f64(double %1056, double %1058, double %1064)
  %1066 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %1065, ptr %1066, align 8, !tbaa !11
  %1067 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %1068 = load double, ptr %1067, align 8, !tbaa !11
  %1069 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 1
  %1070 = load double, ptr %1069, align 8, !tbaa !15
  %1071 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %1072 = load double, ptr %1071, align 8, !tbaa !15
  %1073 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 0
  %1074 = load double, ptr %1073, align 8, !tbaa !11
  %1075 = fmul double %1072, %1074
  %1076 = call double @llvm.fmuladd.f64(double %1068, double %1070, double %1075)
  %1077 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double %1076, ptr %1077, align 8, !tbaa !15
  %1078 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %1079 = load double, ptr %1078, align 8, !tbaa !11
  %1080 = load ptr, ptr %33, align 8, !tbaa !5
  %1081 = load i64, ptr %62, align 8, !tbaa !9
  %1082 = getelementptr inbounds %struct.doublecomplex, ptr %1080, i64 %1081
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1082, i32 0, i32 0
  store double %1079, ptr %1083, align 8, !tbaa !11
  %1084 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  %1085 = load double, ptr %1084, align 8, !tbaa !15
  %1086 = load ptr, ptr %33, align 8, !tbaa !5
  %1087 = load i64, ptr %62, align 8, !tbaa !9
  %1088 = getelementptr inbounds %struct.doublecomplex, ptr %1086, i64 %1087
  %1089 = getelementptr inbounds %struct.doublecomplex, ptr %1088, i32 0, i32 1
  store double %1085, ptr %1089, align 8, !tbaa !15
  br label %1090

1090:                                             ; preds = %1044, %1041
  %1091 = load ptr, ptr %45, align 8, !tbaa !5
  %1092 = load i64, ptr %55, align 8, !tbaa !9
  %1093 = getelementptr inbounds %struct.doublecomplex, ptr %1091, i64 %1092
  %1094 = load ptr, ptr %46, align 8, !tbaa !5
  %1095 = load ptr, ptr %33, align 8, !tbaa !5
  %1096 = load i64, ptr %95, align 8, !tbaa !9
  %1097 = load i64, ptr %95, align 8, !tbaa !9
  %1098 = load i64, ptr %52, align 8, !tbaa !9
  %1099 = mul nsw i64 %1097, %1098
  %1100 = add nsw i64 %1096, %1099
  %1101 = getelementptr inbounds %struct.doublecomplex, ptr %1095, i64 %1100
  %1102 = load ptr, ptr %34, align 8, !tbaa !5
  %1103 = call i32 @zlacpy_(ptr noundef @.str.4, ptr noundef %77, ptr noundef %77, ptr noundef %1093, ptr noundef %1094, ptr noundef %1101, ptr noundef %1102)
  %1104 = load i64, ptr %77, align 8, !tbaa !9
  %1105 = sub nsw i64 %1104, 1
  store i64 %1105, ptr %62, align 8, !tbaa !9
  %1106 = load ptr, ptr %46, align 8, !tbaa !5
  %1107 = load i64, ptr %1106, align 8, !tbaa !9
  %1108 = add nsw i64 %1107, 1
  store i64 %1108, ptr %63, align 8, !tbaa !9
  %1109 = load ptr, ptr %34, align 8, !tbaa !5
  %1110 = load i64, ptr %1109, align 8, !tbaa !9
  %1111 = add nsw i64 %1110, 1
  store i64 %1111, ptr %64, align 8, !tbaa !9
  %1112 = load ptr, ptr %45, align 8, !tbaa !5
  %1113 = load i64, ptr %54, align 8, !tbaa !9
  %1114 = add nsw i64 %1113, 2
  %1115 = getelementptr inbounds %struct.doublecomplex, ptr %1112, i64 %1114
  %1116 = load ptr, ptr %33, align 8, !tbaa !5
  %1117 = load i64, ptr %95, align 8, !tbaa !9
  %1118 = add nsw i64 %1117, 1
  %1119 = load i64, ptr %95, align 8, !tbaa !9
  %1120 = load i64, ptr %52, align 8, !tbaa !9
  %1121 = mul nsw i64 %1119, %1120
  %1122 = add nsw i64 %1118, %1121
  %1123 = getelementptr inbounds %struct.doublecomplex, ptr %1116, i64 %1122
  %1124 = call i32 @f2c_zcopy(ptr noundef %62, ptr noundef %1115, ptr noundef %63, ptr noundef %1123, ptr noundef %64)
  %1125 = load ptr, ptr %39, align 8, !tbaa !5
  %1126 = load i64, ptr %1125, align 8, !tbaa !9
  %1127 = icmp sgt i64 %1126, 1
  br i1 %1127, label %1128, label %1158

1128:                                             ; preds = %1090
  %1129 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 0
  %1130 = load double, ptr %1129, align 8, !tbaa !11
  %1131 = fcmp une double %1130, 0.000000e+00
  br i1 %1131, label %1136, label %1132

1132:                                             ; preds = %1128
  %1133 = getelementptr inbounds %struct.doublecomplex, ptr %76, i32 0, i32 1
  %1134 = load double, ptr %1133, align 8, !tbaa !15
  %1135 = fcmp une double %1134, 0.000000e+00
  br i1 %1135, label %1136, label %1158

1136:                                             ; preds = %1132, %1128
  %1137 = load ptr, ptr %51, align 8, !tbaa !5
  %1138 = load i64, ptr %1137, align 8, !tbaa !9
  %1139 = load i64, ptr %77, align 8, !tbaa !9
  %1140 = sub nsw i64 %1138, %1139
  store i64 %1140, ptr %62, align 8, !tbaa !9
  %1141 = load ptr, ptr %39, align 8, !tbaa !5
  %1142 = load ptr, ptr %39, align 8, !tbaa !5
  %1143 = load ptr, ptr %45, align 8, !tbaa !5
  %1144 = load i64, ptr %55, align 8, !tbaa !9
  %1145 = getelementptr inbounds %struct.doublecomplex, ptr %1143, i64 %1144
  %1146 = load ptr, ptr %46, align 8, !tbaa !5
  %1147 = load ptr, ptr %50, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.doublecomplex, ptr %1147, i64 1
  %1149 = load ptr, ptr %42, align 8, !tbaa !5
  %1150 = load i64, ptr %57, align 8, !tbaa !9
  %1151 = getelementptr inbounds %struct.doublecomplex, ptr %1149, i64 %1150
  %1152 = load ptr, ptr %43, align 8, !tbaa !5
  %1153 = load ptr, ptr %50, align 8, !tbaa !5
  %1154 = load i64, ptr %77, align 8, !tbaa !9
  %1155 = add nsw i64 %1154, 1
  %1156 = getelementptr inbounds %struct.doublecomplex, ptr %1153, i64 %1155
  %1157 = call i32 @zunmhr_(ptr noundef @.str, ptr noundef @.str.1, ptr noundef %77, ptr noundef %1141, ptr noundef @c__1, ptr noundef %1142, ptr noundef %1145, ptr noundef %1146, ptr noundef %1148, ptr noundef %1151, ptr noundef %1152, ptr noundef %1156, ptr noundef %62, ptr noundef %88)
  br label %1158

1158:                                             ; preds = %1136, %1132, %1090
  %1159 = load ptr, ptr %27, align 8, !tbaa !5
  %1160 = load i64, ptr %1159, align 8, !tbaa !9
  %1161 = icmp ne i64 %1160, 0
  br i1 %1161, label %1162, label %1163

1162:                                             ; preds = %1158
  store i64 1, ptr %92, align 8, !tbaa !9
  br label %1166

1163:                                             ; preds = %1158
  %1164 = load ptr, ptr %30, align 8, !tbaa !5
  %1165 = load i64, ptr %1164, align 8, !tbaa !9
  store i64 %1165, ptr %92, align 8, !tbaa !9
  br label %1166

1166:                                             ; preds = %1163, %1162
  %1167 = load i64, ptr %95, align 8, !tbaa !9
  %1168 = sub nsw i64 %1167, 1
  store i64 %1168, ptr %62, align 8, !tbaa !9
  %1169 = load ptr, ptr %47, align 8, !tbaa !5
  %1170 = load i64, ptr %1169, align 8, !tbaa !9
  store i64 %1170, ptr %63, align 8, !tbaa !9
  %1171 = load i64, ptr %92, align 8, !tbaa !9
  store i64 %1171, ptr %93, align 8, !tbaa !9
  br label %1172

1172:                                             ; preds = %1233, %1166
  %1173 = load i64, ptr %63, align 8, !tbaa !9
  %1174 = icmp slt i64 %1173, 0
  br i1 %1174, label %1175, label %1180

1175:                                             ; preds = %1172
  %1176 = load i64, ptr %93, align 8, !tbaa !9
  %1177 = load i64, ptr %62, align 8, !tbaa !9
  %1178 = icmp sge i64 %1176, %1177
  %1179 = zext i1 %1178 to i32
  br label %1185

1180:                                             ; preds = %1172
  %1181 = load i64, ptr %93, align 8, !tbaa !9
  %1182 = load i64, ptr %62, align 8, !tbaa !9
  %1183 = icmp sle i64 %1181, %1182
  %1184 = zext i1 %1183 to i32
  br label %1185

1185:                                             ; preds = %1180, %1175
  %1186 = phi i32 [ %1179, %1175 ], [ %1184, %1180 ]
  %1187 = icmp ne i32 %1186, 0
  br i1 %1187, label %1188, label %1237

1188:                                             ; preds = %1185
  %1189 = load ptr, ptr %47, align 8, !tbaa !5
  %1190 = load i64, ptr %1189, align 8, !tbaa !9
  store i64 %1190, ptr %64, align 8, !tbaa !9
  %1191 = load i64, ptr %95, align 8, !tbaa !9
  %1192 = load i64, ptr %93, align 8, !tbaa !9
  %1193 = sub nsw i64 %1191, %1192
  store i64 %1193, ptr %65, align 8, !tbaa !9
  %1194 = load i64, ptr %64, align 8, !tbaa !9
  %1195 = load i64, ptr %65, align 8, !tbaa !9
  %1196 = icmp sle i64 %1194, %1195
  br i1 %1196, label %1197, label %1199

1197:                                             ; preds = %1188
  %1198 = load i64, ptr %64, align 8, !tbaa !9
  br label %1201

1199:                                             ; preds = %1188
  %1200 = load i64, ptr %65, align 8, !tbaa !9
  br label %1201

1201:                                             ; preds = %1199, %1197
  %1202 = phi i64 [ %1198, %1197 ], [ %1200, %1199 ]
  store i64 %1202, ptr %79, align 8, !tbaa !9
  %1203 = load ptr, ptr %33, align 8, !tbaa !5
  %1204 = load i64, ptr %93, align 8, !tbaa !9
  %1205 = load i64, ptr %95, align 8, !tbaa !9
  %1206 = load i64, ptr %52, align 8, !tbaa !9
  %1207 = mul nsw i64 %1205, %1206
  %1208 = add nsw i64 %1204, %1207
  %1209 = getelementptr inbounds %struct.doublecomplex, ptr %1203, i64 %1208
  %1210 = load ptr, ptr %34, align 8, !tbaa !5
  %1211 = load ptr, ptr %42, align 8, !tbaa !5
  %1212 = load i64, ptr %57, align 8, !tbaa !9
  %1213 = getelementptr inbounds %struct.doublecomplex, ptr %1211, i64 %1212
  %1214 = load ptr, ptr %43, align 8, !tbaa !5
  %1215 = load ptr, ptr %48, align 8, !tbaa !5
  %1216 = load i64, ptr %59, align 8, !tbaa !9
  %1217 = getelementptr inbounds %struct.doublecomplex, ptr %1215, i64 %1216
  %1218 = load ptr, ptr %49, align 8, !tbaa !5
  %1219 = call i32 @f2c_zgemm(ptr noundef @.str.1, ptr noundef @.str.1, ptr noundef %79, ptr noundef %77, ptr noundef %77, ptr noundef @c_b2, ptr noundef %1209, ptr noundef %1210, ptr noundef %1213, ptr noundef %1214, ptr noundef @c_b1, ptr noundef %1217, ptr noundef %1218)
  %1220 = load ptr, ptr %48, align 8, !tbaa !5
  %1221 = load i64, ptr %59, align 8, !tbaa !9
  %1222 = getelementptr inbounds %struct.doublecomplex, ptr %1220, i64 %1221
  %1223 = load ptr, ptr %49, align 8, !tbaa !5
  %1224 = load ptr, ptr %33, align 8, !tbaa !5
  %1225 = load i64, ptr %93, align 8, !tbaa !9
  %1226 = load i64, ptr %95, align 8, !tbaa !9
  %1227 = load i64, ptr %52, align 8, !tbaa !9
  %1228 = mul nsw i64 %1226, %1227
  %1229 = add nsw i64 %1225, %1228
  %1230 = getelementptr inbounds %struct.doublecomplex, ptr %1224, i64 %1229
  %1231 = load ptr, ptr %34, align 8, !tbaa !5
  %1232 = call i32 @zlacpy_(ptr noundef @.str.5, ptr noundef %79, ptr noundef %77, ptr noundef %1222, ptr noundef %1223, ptr noundef %1230, ptr noundef %1231)
  br label %1233

1233:                                             ; preds = %1201
  %1234 = load i64, ptr %63, align 8, !tbaa !9
  %1235 = load i64, ptr %93, align 8, !tbaa !9
  %1236 = add nsw i64 %1235, %1234
  store i64 %1236, ptr %93, align 8, !tbaa !9
  br label %1172, !llvm.loop !22

1237:                                             ; preds = %1185
  %1238 = load ptr, ptr %27, align 8, !tbaa !5
  %1239 = load i64, ptr %1238, align 8, !tbaa !9
  %1240 = icmp ne i64 %1239, 0
  br i1 %1240, label %1241, label %1317

1241:                                             ; preds = %1237
  %1242 = load ptr, ptr %29, align 8, !tbaa !5
  %1243 = load i64, ptr %1242, align 8, !tbaa !9
  store i64 %1243, ptr %63, align 8, !tbaa !9
  %1244 = load ptr, ptr %44, align 8, !tbaa !5
  %1245 = load i64, ptr %1244, align 8, !tbaa !9
  store i64 %1245, ptr %62, align 8, !tbaa !9
  %1246 = load ptr, ptr %31, align 8, !tbaa !5
  %1247 = load i64, ptr %1246, align 8, !tbaa !9
  %1248 = add nsw i64 %1247, 1
  store i64 %1248, ptr %87, align 8, !tbaa !9
  br label %1249

1249:                                             ; preds = %1312, %1241
  %1250 = load i64, ptr %62, align 8, !tbaa !9
  %1251 = icmp slt i64 %1250, 0
  br i1 %1251, label %1252, label %1257

1252:                                             ; preds = %1249
  %1253 = load i64, ptr %87, align 8, !tbaa !9
  %1254 = load i64, ptr %63, align 8, !tbaa !9
  %1255 = icmp sge i64 %1253, %1254
  %1256 = zext i1 %1255 to i32
  br label %1262

1257:                                             ; preds = %1249
  %1258 = load i64, ptr %87, align 8, !tbaa !9
  %1259 = load i64, ptr %63, align 8, !tbaa !9
  %1260 = icmp sle i64 %1258, %1259
  %1261 = zext i1 %1260 to i32
  br label %1262

1262:                                             ; preds = %1257, %1252
  %1263 = phi i32 [ %1256, %1252 ], [ %1261, %1257 ]
  %1264 = icmp ne i32 %1263, 0
  br i1 %1264, label %1265, label %1316

1265:                                             ; preds = %1262
  %1266 = load ptr, ptr %44, align 8, !tbaa !5
  %1267 = load i64, ptr %1266, align 8, !tbaa !9
  store i64 %1267, ptr %64, align 8, !tbaa !9
  %1268 = load ptr, ptr %29, align 8, !tbaa !5
  %1269 = load i64, ptr %1268, align 8, !tbaa !9
  %1270 = load i64, ptr %87, align 8, !tbaa !9
  %1271 = sub nsw i64 %1269, %1270
  %1272 = add nsw i64 %1271, 1
  store i64 %1272, ptr %65, align 8, !tbaa !9
  %1273 = load i64, ptr %64, align 8, !tbaa !9
  %1274 = load i64, ptr %65, align 8, !tbaa !9
  %1275 = icmp sle i64 %1273, %1274
  br i1 %1275, label %1276, label %1278

1276:                                             ; preds = %1265
  %1277 = load i64, ptr %64, align 8, !tbaa !9
  br label %1280

1278:                                             ; preds = %1265
  %1279 = load i64, ptr %65, align 8, !tbaa !9
  br label %1280

1280:                                             ; preds = %1278, %1276
  %1281 = phi i64 [ %1277, %1276 ], [ %1279, %1278 ]
  store i64 %1281, ptr %79, align 8, !tbaa !9
  %1282 = load ptr, ptr %42, align 8, !tbaa !5
  %1283 = load i64, ptr %57, align 8, !tbaa !9
  %1284 = getelementptr inbounds %struct.doublecomplex, ptr %1282, i64 %1283
  %1285 = load ptr, ptr %43, align 8, !tbaa !5
  %1286 = load ptr, ptr %33, align 8, !tbaa !5
  %1287 = load i64, ptr %95, align 8, !tbaa !9
  %1288 = load i64, ptr %87, align 8, !tbaa !9
  %1289 = load i64, ptr %52, align 8, !tbaa !9
  %1290 = mul nsw i64 %1288, %1289
  %1291 = add nsw i64 %1287, %1290
  %1292 = getelementptr inbounds %struct.doublecomplex, ptr %1286, i64 %1291
  %1293 = load ptr, ptr %34, align 8, !tbaa !5
  %1294 = load ptr, ptr %45, align 8, !tbaa !5
  %1295 = load i64, ptr %55, align 8, !tbaa !9
  %1296 = getelementptr inbounds %struct.doublecomplex, ptr %1294, i64 %1295
  %1297 = load ptr, ptr %46, align 8, !tbaa !5
  %1298 = call i32 @f2c_zgemm(ptr noundef @.str.10, ptr noundef @.str.1, ptr noundef %77, ptr noundef %79, ptr noundef %77, ptr noundef @c_b2, ptr noundef %1284, ptr noundef %1285, ptr noundef %1292, ptr noundef %1293, ptr noundef @c_b1, ptr noundef %1296, ptr noundef %1297)
  %1299 = load ptr, ptr %45, align 8, !tbaa !5
  %1300 = load i64, ptr %55, align 8, !tbaa !9
  %1301 = getelementptr inbounds %struct.doublecomplex, ptr %1299, i64 %1300
  %1302 = load ptr, ptr %46, align 8, !tbaa !5
  %1303 = load ptr, ptr %33, align 8, !tbaa !5
  %1304 = load i64, ptr %95, align 8, !tbaa !9
  %1305 = load i64, ptr %87, align 8, !tbaa !9
  %1306 = load i64, ptr %52, align 8, !tbaa !9
  %1307 = mul nsw i64 %1305, %1306
  %1308 = add nsw i64 %1304, %1307
  %1309 = getelementptr inbounds %struct.doublecomplex, ptr %1303, i64 %1308
  %1310 = load ptr, ptr %34, align 8, !tbaa !5
  %1311 = call i32 @zlacpy_(ptr noundef @.str.5, ptr noundef %77, ptr noundef %79, ptr noundef %1301, ptr noundef %1302, ptr noundef %1309, ptr noundef %1310)
  br label %1312

1312:                                             ; preds = %1280
  %1313 = load i64, ptr %62, align 8, !tbaa !9
  %1314 = load i64, ptr %87, align 8, !tbaa !9
  %1315 = add nsw i64 %1314, %1313
  store i64 %1315, ptr %87, align 8, !tbaa !9
  br label %1249, !llvm.loop !23

1316:                                             ; preds = %1262
  br label %1317

1317:                                             ; preds = %1316, %1237
  %1318 = load ptr, ptr %28, align 8, !tbaa !5
  %1319 = load i64, ptr %1318, align 8, !tbaa !9
  %1320 = icmp ne i64 %1319, 0
  br i1 %1320, label %1321, label %1396

1321:                                             ; preds = %1317
  %1322 = load ptr, ptr %36, align 8, !tbaa !5
  %1323 = load i64, ptr %1322, align 8, !tbaa !9
  store i64 %1323, ptr %62, align 8, !tbaa !9
  %1324 = load ptr, ptr %47, align 8, !tbaa !5
  %1325 = load i64, ptr %1324, align 8, !tbaa !9
  store i64 %1325, ptr %63, align 8, !tbaa !9
  %1326 = load ptr, ptr %35, align 8, !tbaa !5
  %1327 = load i64, ptr %1326, align 8, !tbaa !9
  store i64 %1327, ptr %93, align 8, !tbaa !9
  br label %1328

1328:                                             ; preds = %1391, %1321
  %1329 = load i64, ptr %63, align 8, !tbaa !9
  %1330 = icmp slt i64 %1329, 0
  br i1 %1330, label %1331, label %1336

1331:                                             ; preds = %1328
  %1332 = load i64, ptr %93, align 8, !tbaa !9
  %1333 = load i64, ptr %62, align 8, !tbaa !9
  %1334 = icmp sge i64 %1332, %1333
  %1335 = zext i1 %1334 to i32
  br label %1341

1336:                                             ; preds = %1328
  %1337 = load i64, ptr %93, align 8, !tbaa !9
  %1338 = load i64, ptr %62, align 8, !tbaa !9
  %1339 = icmp sle i64 %1337, %1338
  %1340 = zext i1 %1339 to i32
  br label %1341

1341:                                             ; preds = %1336, %1331
  %1342 = phi i32 [ %1335, %1331 ], [ %1340, %1336 ]
  %1343 = icmp ne i32 %1342, 0
  br i1 %1343, label %1344, label %1395

1344:                                             ; preds = %1341
  %1345 = load ptr, ptr %47, align 8, !tbaa !5
  %1346 = load i64, ptr %1345, align 8, !tbaa !9
  store i64 %1346, ptr %64, align 8, !tbaa !9
  %1347 = load ptr, ptr %36, align 8, !tbaa !5
  %1348 = load i64, ptr %1347, align 8, !tbaa !9
  %1349 = load i64, ptr %93, align 8, !tbaa !9
  %1350 = sub nsw i64 %1348, %1349
  %1351 = add nsw i64 %1350, 1
  store i64 %1351, ptr %65, align 8, !tbaa !9
  %1352 = load i64, ptr %64, align 8, !tbaa !9
  %1353 = load i64, ptr %65, align 8, !tbaa !9
  %1354 = icmp sle i64 %1352, %1353
  br i1 %1354, label %1355, label %1357

1355:                                             ; preds = %1344
  %1356 = load i64, ptr %64, align 8, !tbaa !9
  br label %1359

1357:                                             ; preds = %1344
  %1358 = load i64, ptr %65, align 8, !tbaa !9
  br label %1359

1359:                                             ; preds = %1357, %1355
  %1360 = phi i64 [ %1356, %1355 ], [ %1358, %1357 ]
  store i64 %1360, ptr %79, align 8, !tbaa !9
  %1361 = load ptr, ptr %37, align 8, !tbaa !5
  %1362 = load i64, ptr %93, align 8, !tbaa !9
  %1363 = load i64, ptr %95, align 8, !tbaa !9
  %1364 = load i64, ptr %60, align 8, !tbaa !9
  %1365 = mul nsw i64 %1363, %1364
  %1366 = add nsw i64 %1362, %1365
  %1367 = getelementptr inbounds %struct.doublecomplex, ptr %1361, i64 %1366
  %1368 = load ptr, ptr %38, align 8, !tbaa !5
  %1369 = load ptr, ptr %42, align 8, !tbaa !5
  %1370 = load i64, ptr %57, align 8, !tbaa !9
  %1371 = getelementptr inbounds %struct.doublecomplex, ptr %1369, i64 %1370
  %1372 = load ptr, ptr %43, align 8, !tbaa !5
  %1373 = load ptr, ptr %48, align 8, !tbaa !5
  %1374 = load i64, ptr %59, align 8, !tbaa !9
  %1375 = getelementptr inbounds %struct.doublecomplex, ptr %1373, i64 %1374
  %1376 = load ptr, ptr %49, align 8, !tbaa !5
  %1377 = call i32 @f2c_zgemm(ptr noundef @.str.1, ptr noundef @.str.1, ptr noundef %79, ptr noundef %77, ptr noundef %77, ptr noundef @c_b2, ptr noundef %1367, ptr noundef %1368, ptr noundef %1371, ptr noundef %1372, ptr noundef @c_b1, ptr noundef %1375, ptr noundef %1376)
  %1378 = load ptr, ptr %48, align 8, !tbaa !5
  %1379 = load i64, ptr %59, align 8, !tbaa !9
  %1380 = getelementptr inbounds %struct.doublecomplex, ptr %1378, i64 %1379
  %1381 = load ptr, ptr %49, align 8, !tbaa !5
  %1382 = load ptr, ptr %37, align 8, !tbaa !5
  %1383 = load i64, ptr %93, align 8, !tbaa !9
  %1384 = load i64, ptr %95, align 8, !tbaa !9
  %1385 = load i64, ptr %60, align 8, !tbaa !9
  %1386 = mul nsw i64 %1384, %1385
  %1387 = add nsw i64 %1383, %1386
  %1388 = getelementptr inbounds %struct.doublecomplex, ptr %1382, i64 %1387
  %1389 = load ptr, ptr %38, align 8, !tbaa !5
  %1390 = call i32 @zlacpy_(ptr noundef @.str.5, ptr noundef %79, ptr noundef %77, ptr noundef %1380, ptr noundef %1381, ptr noundef %1388, ptr noundef %1389)
  br label %1391

1391:                                             ; preds = %1359
  %1392 = load i64, ptr %63, align 8, !tbaa !9
  %1393 = load i64, ptr %93, align 8, !tbaa !9
  %1394 = add nsw i64 %1393, %1392
  store i64 %1394, ptr %93, align 8, !tbaa !9
  br label %1328, !llvm.loop !24

1395:                                             ; preds = %1341
  br label %1396

1396:                                             ; preds = %1395, %1317
  br label %1397

1397:                                             ; preds = %1396, %906, %902
  %1398 = load i64, ptr %77, align 8, !tbaa !9
  %1399 = load ptr, ptr %39, align 8, !tbaa !5
  %1400 = load i64, ptr %1399, align 8, !tbaa !9
  %1401 = sub nsw i64 %1398, %1400
  %1402 = load ptr, ptr %40, align 8, !tbaa !5
  store i64 %1401, ptr %1402, align 8, !tbaa !9
  %1403 = load i64, ptr %94, align 8, !tbaa !9
  %1404 = load ptr, ptr %39, align 8, !tbaa !5
  %1405 = load i64, ptr %1404, align 8, !tbaa !9
  %1406 = sub nsw i64 %1405, %1403
  store i64 %1406, ptr %1404, align 8, !tbaa !9
  %1407 = load i64, ptr %99, align 8, !tbaa !9
  %1408 = sitofp i64 %1407 to double
  store double %1408, ptr %66, align 8, !tbaa !14
  %1409 = load double, ptr %66, align 8, !tbaa !14
  %1410 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %1409, ptr %1410, align 8, !tbaa !11
  %1411 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double 0.000000e+00, ptr %1411, align 8, !tbaa !15
  %1412 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %1413 = load double, ptr %1412, align 8, !tbaa !11
  %1414 = load ptr, ptr %50, align 8, !tbaa !5
  %1415 = getelementptr inbounds %struct.doublecomplex, ptr %1414, i64 1
  %1416 = getelementptr inbounds %struct.doublecomplex, ptr %1415, i32 0, i32 0
  store double %1413, ptr %1416, align 8, !tbaa !11
  %1417 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  %1418 = load double, ptr %1417, align 8, !tbaa !15
  %1419 = load ptr, ptr %50, align 8, !tbaa !5
  %1420 = getelementptr inbounds %struct.doublecomplex, ptr %1419, i64 1
  %1421 = getelementptr inbounds %struct.doublecomplex, ptr %1420, i32 0, i32 1
  store double %1418, ptr %1421, align 8, !tbaa !15
  store i32 0, ptr %26, align 4
  store i32 1, ptr %100, align 4
  br label %1422

1422:                                             ; preds = %1397, %468, %279, %274, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  %1423 = load i32, ptr %26, align 4
  ret i32 %1423
}

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

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

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

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

declare double @dlamch_(ptr noundef) #2

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

declare double @d_imag(ptr noundef) #2

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

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

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

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

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

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

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

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

declare i32 @zlarf_(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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

declare i32 @f2c_zgemm(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 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!13, !13, i64 0}
!15 = !{!12, !13, i64 8}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !17}


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

%struct.doublecomplex = type { double, double }

@c__1 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_true = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c__12 = external hidden global i64, align 8
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zlaqr3_(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr noundef %6, ptr noundef %7, ptr nocapture noundef readonly %8, ptr nocapture noundef readonly %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr nocapture noundef writeonly %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr nocapture noundef readonly %17, ptr noundef %18, ptr noundef %19, ptr nocapture noundef readonly %20, ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %24) local_unnamed_addr #0 {
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca %struct.doublecomplex, align 16
  %30 = alloca %struct.doublecomplex, align 16
  %31 = alloca %struct.doublecomplex, align 16
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca %struct.doublecomplex, align 8
  %35 = alloca %struct.doublecomplex, align 16
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #5
  %42 = load i64, ptr %7, align 8, !tbaa !5
  %43 = xor i64 %42, -1
  %44 = getelementptr inbounds %struct.doublecomplex, ptr %6, i64 %43
  %45 = load i64, ptr %11, align 8, !tbaa !5
  %46 = xor i64 %45, -1
  %47 = getelementptr inbounds %struct.doublecomplex, ptr %10, i64 %46
  %48 = getelementptr inbounds i8, ptr %14, i64 -16
  %49 = load i64, ptr %16, align 8, !tbaa !5
  %50 = xor i64 %49, -1
  %51 = getelementptr inbounds %struct.doublecomplex, ptr %15, i64 %50
  %52 = load i64, ptr %19, align 8, !tbaa !5
  %53 = xor i64 %52, -1
  %54 = getelementptr inbounds %struct.doublecomplex, ptr %18, i64 %53
  %55 = getelementptr inbounds i8, ptr %23, i64 -16
  %56 = load i64, ptr %5, align 8, !tbaa !5
  store i64 %56, ptr %26, align 8, !tbaa !5
  %57 = load i64, ptr %4, align 8, !tbaa !5
  %58 = load i64, ptr %3, align 8, !tbaa !5
  %59 = sub nsw i64 %57, %58
  %60 = add nsw i64 %59, 1
  store i64 %60, ptr %27, align 8, !tbaa !5
  %61 = tail call i64 @llvm.smin.i64(i64 %56, i64 %60)
  store i64 %61, ptr %32, align 8, !tbaa !5
  %62 = icmp slt i64 %61, 3
  br i1 %62, label %80, label %63

63:                                               ; preds = %25
  %64 = add nsw i64 %61, -1
  store i64 %64, ptr %26, align 8, !tbaa !5
  %65 = call i32 @zgehrd_(ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %26, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %23, ptr noundef %23, ptr noundef nonnull @c_n1, ptr noundef nonnull %36) #5
  %66 = load double, ptr %23, align 8, !tbaa !9
  %67 = fptosi double %66 to i64
  %68 = load i64, ptr %32, align 8, !tbaa !5
  %69 = add nsw i64 %68, -1
  store i64 %69, ptr %26, align 8, !tbaa !5
  %70 = call i32 @zunmhr_(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %32, ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %26, ptr noundef %18, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %23, ptr noundef nonnull @c_n1, ptr noundef nonnull %36) #5
  %71 = load double, ptr %23, align 8, !tbaa !9
  %72 = fptosi double %71 to i64
  %73 = call i32 @zlaqr4_(ptr noundef nonnull @c_true, ptr noundef nonnull @c_true, ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %14, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %23, ptr noundef nonnull @c_n1, ptr noundef nonnull %39) #5
  %74 = load double, ptr %23, align 8, !tbaa !9
  %75 = fptosi double %74 to i64
  %76 = load i64, ptr %32, align 8, !tbaa !5
  %77 = call i64 @llvm.smax.i64(i64 %67, i64 %72)
  %78 = add nsw i64 %76, %77
  store i64 %78, ptr %26, align 8, !tbaa !5
  %79 = call i64 @llvm.smax.i64(i64 %78, i64 %75)
  br label %80

80:                                               ; preds = %25, %63
  %.0 = phi i64 [ %79, %63 ], [ 1, %25 ]
  %81 = load i64, ptr %24, align 8, !tbaa !5
  %82 = icmp eq i64 %81, -1
  br i1 %82, label %83, label %85

83:                                               ; preds = %80
  %84 = sitofp i64 %.0 to double
  store double %84, ptr %23, align 8, !tbaa !9
  br label %.sink.split

85:                                               ; preds = %80
  store i64 0, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %13, align 8, !tbaa !5
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %23, align 8, !tbaa !12
  %86 = load i64, ptr %3, align 8, !tbaa !5
  %87 = load i64, ptr %4, align 8, !tbaa !5
  %88 = icmp sgt i64 %86, %87
  br i1 %88, label %469, label %89

89:                                               ; preds = %85
  %90 = load i64, ptr %5, align 8, !tbaa !5
  %91 = icmp slt i64 %90, 1
  br i1 %91, label %469, label %92

92:                                               ; preds = %89
  %93 = call double @dlamch_(ptr noundef nonnull @.str.2) #5
  store double %93, ptr %40, align 8, !tbaa !12
  %94 = fdiv double 1.000000e+00, %93
  store double %94, ptr %41, align 8, !tbaa !12
  %95 = call i32 @dlabad_(ptr noundef nonnull %40, ptr noundef nonnull %41) #5
  %96 = call double @dlamch_(ptr noundef nonnull @.str.3) #5
  %97 = load double, ptr %40, align 8, !tbaa !12
  %98 = load i64, ptr %2, align 8, !tbaa !5
  %99 = sitofp i64 %98 to double
  %100 = fdiv double %99, %96
  %101 = fmul double %97, %100
  %102 = load i64, ptr %5, align 8, !tbaa !5
  store i64 %102, ptr %26, align 8, !tbaa !5
  %103 = load i64, ptr %4, align 8, !tbaa !5
  %104 = load i64, ptr %3, align 8, !tbaa !5
  %105 = sub nsw i64 %103, %104
  %106 = add nsw i64 %105, 1
  store i64 %106, ptr %27, align 8, !tbaa !5
  %107 = call i64 @llvm.smin.i64(i64 %102, i64 %106)
  store i64 %107, ptr %32, align 8, !tbaa !5
  %108 = sub nsw i64 %103, %107
  %109 = add nsw i64 %108, 1
  %110 = icmp eq i64 %109, %104
  br i1 %110, label %116, label %111

111:                                              ; preds = %92
  %112 = mul nsw i64 %108, %42
  %113 = add nsw i64 %109, %112
  store i64 %113, ptr %26, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %113
  %115 = load <2 x double>, ptr %114, align 8, !tbaa !12
  br label %116

116:                                              ; preds = %92, %111
  %117 = phi <2 x double> [ %115, %111 ], [ zeroinitializer, %92 ]
  %118 = getelementptr inbounds i8, ptr %31, i64 8
  store <2 x double> %117, ptr %31, align 16
  %119 = icmp eq i64 %103, %109
  br i1 %119, label %120, label %156

120:                                              ; preds = %116
  %121 = add i64 %42, 1
  %122 = mul i64 %103, %121
  store i64 %122, ptr %27, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %122
  %124 = load double, ptr %123, align 8, !tbaa !9
  %125 = getelementptr %struct.doublecomplex, ptr %14, i64 %108
  store double %124, ptr %125, align 8, !tbaa !9
  %126 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %122, i32 1
  %127 = load double, ptr %126, align 8, !tbaa !13
  %128 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %103, i32 1
  store double %127, ptr %128, align 8, !tbaa !13
  store i64 1, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %13, align 8, !tbaa !5
  store i64 %122, ptr %26, align 8, !tbaa !5
  %129 = call double @d_imag(ptr noundef nonnull %123) #5
  %130 = insertelement <2 x double> poison, double %124, i64 0
  %131 = insertelement <2 x double> %130, double %129, i64 1
  %132 = fcmp oge <2 x double> %131, zeroinitializer
  %133 = fneg <2 x double> %131
  %134 = select <2 x i1> %132, <2 x double> %131, <2 x double> %133
  %shift = shufflevector <2 x double> %134, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %135 = fadd <2 x double> %134, %shift
  %136 = extractelement <2 x double> %135, i64 0
  %137 = fmul double %96, %136
  %138 = load <2 x double>, ptr %31, align 16
  %139 = call double @d_imag(ptr noundef nonnull %31) #5
  %140 = insertelement <2 x double> %138, double %139, i64 1
  %141 = fcmp oge <2 x double> %140, zeroinitializer
  %142 = fneg <2 x double> %140
  %143 = select <2 x i1> %141, <2 x double> %140, <2 x double> %142
  %shift556 = shufflevector <2 x double> %143, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %144 = fadd <2 x double> %143, %shift556
  %145 = extractelement <2 x double> %144, i64 0
  %146 = fcmp oge double %101, %137
  %147 = select i1 %146, double %101, double %137
  %148 = fcmp ugt double %145, %147
  br i1 %148, label %155, label %149

149:                                              ; preds = %120
  store i64 0, ptr %12, align 8, !tbaa !5
  store i64 1, ptr %13, align 8, !tbaa !5
  %150 = load i64, ptr %3, align 8, !tbaa !5
  %.not500 = icmp slt i64 %108, %150
  br i1 %.not500, label %155, label %151

151:                                              ; preds = %149
  %152 = mul nsw i64 %108, %42
  %153 = getelementptr %struct.doublecomplex, ptr %44, i64 %103
  %154 = getelementptr %struct.doublecomplex, ptr %153, i64 %152
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %154, i8 0, i64 16, i1 false)
  br label %155

155:                                              ; preds = %149, %151, %120
  store double 1.000000e+00, ptr %23, align 8, !tbaa !9
  br label %.sink.split

156:                                              ; preds = %116
  %157 = mul nsw i64 %109, %42
  %158 = getelementptr %struct.doublecomplex, ptr %44, i64 %109
  %159 = getelementptr %struct.doublecomplex, ptr %158, i64 %157
  %160 = call i32 @zlacpy_(ptr noundef nonnull @.str.4, ptr noundef nonnull %32, ptr noundef nonnull %32, ptr noundef %159, ptr noundef nonnull %7, ptr noundef %18, ptr noundef nonnull %19) #5
  %161 = load i64, ptr %32, align 8, !tbaa !5
  %162 = add nsw i64 %161, -1
  store i64 %162, ptr %26, align 8, !tbaa !5
  %163 = load i64, ptr %7, align 8, !tbaa !5
  %164 = add nsw i64 %163, 1
  store i64 %164, ptr %27, align 8, !tbaa !5
  %165 = load i64, ptr %19, align 8, !tbaa !5
  %166 = add nsw i64 %165, 1
  store i64 %166, ptr %28, align 8, !tbaa !5
  %167 = getelementptr %struct.doublecomplex, ptr %44, i64 %108
  %168 = getelementptr i8, ptr %167, i64 32
  %169 = getelementptr %struct.doublecomplex, ptr %168, i64 %157
  %170 = getelementptr inbounds i8, ptr %18, i64 16
  %171 = call i32 @f2c_zcopy(ptr noundef nonnull %26, ptr noundef %169, ptr noundef nonnull %27, ptr noundef nonnull %170, ptr noundef nonnull %28) #5
  %172 = call i32 @zlaset_(ptr noundef nonnull @.str.5, ptr noundef nonnull %32, ptr noundef nonnull %32, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %15, ptr noundef nonnull %16) #5
  %173 = call i64 @ilaenv_(ptr noundef nonnull @c__12, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef nonnull %24) #5
  %174 = load i64, ptr %32, align 8, !tbaa !5
  %175 = icmp sgt i64 %174, %173
  %176 = getelementptr %struct.doublecomplex, ptr %14, i64 %108
  br i1 %175, label %177, label %179

177:                                              ; preds = %156
  %178 = call i32 @zlaqr4_(ptr noundef nonnull @c_true, ptr noundef nonnull @c_true, ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %176, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %39) #5
  br label %181

179:                                              ; preds = %156
  %180 = call i32 @zlahqr_(ptr noundef nonnull @c_true, ptr noundef nonnull @c_true, ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %176, ptr noundef nonnull @c__1, ptr noundef nonnull %32, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %39) #5
  br label %181

181:                                              ; preds = %179, %177
  %182 = load i64, ptr %32, align 8, !tbaa !5
  store i64 %182, ptr %12, align 8, !tbaa !5
  %183 = load i64, ptr %39, align 8, !tbaa !5
  %184 = add nsw i64 %183, 1
  store i64 %184, ptr %38, align 8, !tbaa !5
  store i64 %182, ptr %26, align 8, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %51, i64 16
  %.not.not504 = icmp slt i64 %183, %182
  br i1 %.not.not504, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %181
  %185 = add i64 %52, 1
  br label %186

186:                                              ; preds = %.lr.ph, %244
  %.0478505.in = phi i64 [ %183, %.lr.ph ], [ %.0478505, %244 ]
  %.0478505 = add nsw i64 %.0478505.in, 1
  %187 = load i64, ptr %12, align 8, !tbaa !5
  %188 = mul i64 %187, %185
  store i64 %188, ptr %27, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %188
  %190 = load double, ptr %189, align 8, !tbaa !9
  %191 = call double @d_imag(ptr noundef nonnull %189) #5
  %192 = insertelement <2 x double> poison, double %190, i64 0
  %193 = insertelement <2 x double> %192, double %191, i64 1
  %194 = fcmp oge <2 x double> %193, zeroinitializer
  %195 = fneg <2 x double> %193
  %196 = select <2 x i1> %194, <2 x double> %193, <2 x double> %195
  %shift557 = shufflevector <2 x double> %196, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %197 = fadd <2 x double> %196, %shift557
  %198 = extractelement <2 x double> %197, i64 0
  %199 = fcmp oeq double %198, 0.000000e+00
  br i1 %199, label %200, label %209

200:                                              ; preds = %186
  %201 = load <2 x double>, ptr %31, align 16
  %202 = call double @d_imag(ptr noundef nonnull %31) #5
  %203 = insertelement <2 x double> %201, double %202, i64 1
  %204 = fcmp oge <2 x double> %203, zeroinitializer
  %205 = fneg <2 x double> %203
  %206 = select <2 x i1> %204, <2 x double> %203, <2 x double> %205
  %shift558 = shufflevector <2 x double> %206, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %207 = fadd <2 x double> %206, %shift558
  %208 = extractelement <2 x double> %207, i64 0
  br label %209

209:                                              ; preds = %200, %186
  %.0479 = phi double [ %208, %200 ], [ %198, %186 ]
  %210 = load i64, ptr %12, align 8, !tbaa !5
  %211 = mul nsw i64 %210, %49
  %212 = add nsw i64 %211, 1
  store i64 %212, ptr %27, align 8, !tbaa !5
  %213 = fmul double %96, %.0479
  %214 = load <2 x double>, ptr %31, align 16
  %215 = call double @d_imag(ptr noundef nonnull %31) #5
  %216 = load i64, ptr %27, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.doublecomplex, ptr %51, i64 %216
  %218 = load double, ptr %217, align 8, !tbaa !9
  %219 = load i64, ptr %12, align 8, !tbaa !5
  %220 = mul nsw i64 %219, %49
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %220
  %221 = call double @d_imag(ptr noundef %gep) #5
  %222 = insertelement <2 x double> %214, double %218, i64 1
  %223 = fcmp oge <2 x double> %222, zeroinitializer
  %224 = fneg <2 x double> %222
  %225 = select <2 x i1> %223, <2 x double> %222, <2 x double> %224
  %226 = insertelement <2 x double> poison, double %215, i64 0
  %227 = insertelement <2 x double> %226, double %221, i64 1
  %228 = fcmp oge <2 x double> %227, zeroinitializer
  %229 = fneg <2 x double> %227
  %230 = select <2 x i1> %228, <2 x double> %227, <2 x double> %229
  %231 = fadd <2 x double> %225, %230
  %shift559 = shufflevector <2 x double> %231, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %232 = fmul <2 x double> %231, %shift559
  %233 = extractelement <2 x double> %232, i64 0
  %234 = fcmp oge double %101, %213
  %235 = select i1 %234, double %101, double %213
  %236 = fcmp ugt double %233, %235
  %237 = load i64, ptr %12, align 8, !tbaa !5
  br i1 %236, label %240, label %238

238:                                              ; preds = %209
  %239 = add nsw i64 %237, -1
  store i64 %239, ptr %12, align 8, !tbaa !5
  br label %244

240:                                              ; preds = %209
  store i64 %237, ptr %37, align 8, !tbaa !5
  %241 = call i32 @ztrexc_(ptr noundef nonnull @.str.8, ptr noundef nonnull %32, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %37, ptr noundef nonnull %38, ptr noundef nonnull %36) #5
  %242 = load i64, ptr %38, align 8, !tbaa !5
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %38, align 8, !tbaa !5
  br label %244

244:                                              ; preds = %238, %240
  %245 = load i64, ptr %26, align 8, !tbaa !5
  %.not.not = icmp slt i64 %.0478505, %245
  br i1 %.not.not, label %186, label %._crit_edge.loopexit, !llvm.loop !14

._crit_edge.loopexit:                             ; preds = %244
  %.pre = load i64, ptr %12, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %181
  %246 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ %182, %181 ]
  %247 = icmp eq i64 %246, 0
  br i1 %247, label %248, label %249

248:                                              ; preds = %._crit_edge
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %31, i8 0, i64 16, i1 false)
  br label %249

249:                                              ; preds = %248, %._crit_edge
  %250 = load i64, ptr %32, align 8, !tbaa !5
  %251 = icmp slt i64 %246, %250
  %.pre550 = load i64, ptr %39, align 8, !tbaa !5
  br i1 %251, label %252, label %.loopexit502

252:                                              ; preds = %249
  store i64 %246, ptr %26, align 8, !tbaa !5
  %.not511.not = icmp slt i64 %.pre550, %246
  br i1 %.not511.not, label %.lr.ph514, label %.loopexit502

.lr.ph514:                                        ; preds = %252
  %253 = add nsw i64 %.pre550, 1
  %254 = add i64 %52, 1
  br label %255

255:                                              ; preds = %.lr.ph514, %292
  %.0481512 = phi i64 [ %253, %.lr.ph514 ], [ %257, %292 ]
  store i64 %.0481512, ptr %37, align 8, !tbaa !5
  %256 = load i64, ptr %12, align 8, !tbaa !5
  store i64 %256, ptr %27, align 8, !tbaa !5
  %257 = add nsw i64 %.0481512, 1
  %.not498506.not = icmp slt i64 %.0481512, %256
  br i1 %.not498506.not, label %.lr.ph509, label %._crit_edge510.thread

._crit_edge510.thread:                            ; preds = %255
  store i64 %.0481512, ptr %38, align 8, !tbaa !5
  br label %292

.lr.ph509:                                        ; preds = %255, %287
  %.0480507 = phi i64 [ %288, %287 ], [ %257, %255 ]
  %258 = mul i64 %.0480507, %254
  store i64 %258, ptr %28, align 8, !tbaa !5
  %259 = load i64, ptr %37, align 8, !tbaa !5
  %260 = mul i64 %259, %254
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %258
  %262 = load double, ptr %261, align 8, !tbaa !9
  %263 = call double @d_imag(ptr noundef nonnull %261) #5
  %264 = insertelement <2 x double> poison, double %262, i64 0
  %265 = insertelement <2 x double> %264, double %263, i64 1
  %266 = fcmp oge <2 x double> %265, zeroinitializer
  %267 = fneg <2 x double> %265
  %268 = select <2 x i1> %266, <2 x double> %265, <2 x double> %267
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %260
  %270 = load double, ptr %269, align 8, !tbaa !9
  %271 = load i64, ptr %37, align 8, !tbaa !5
  %272 = mul i64 %271, %254
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %272
  %274 = call double @d_imag(ptr noundef %273) #5
  %275 = insertelement <2 x double> poison, double %270, i64 0
  %276 = insertelement <2 x double> %275, double %274, i64 1
  %277 = fcmp oge <2 x double> %276, zeroinitializer
  %278 = fneg <2 x double> %276
  %279 = select <2 x i1> %277, <2 x double> %276, <2 x double> %278
  %280 = shufflevector <2 x double> %268, <2 x double> %279, <2 x i32> <i32 0, i32 2>
  %281 = shufflevector <2 x double> %268, <2 x double> %279, <2 x i32> <i32 1, i32 3>
  %282 = fadd <2 x double> %280, %281
  %283 = extractelement <2 x double> %282, i64 0
  %284 = extractelement <2 x double> %282, i64 1
  %285 = fcmp ogt double %283, %284
  br i1 %285, label %286, label %287

286:                                              ; preds = %.lr.ph509
  store i64 %.0480507, ptr %37, align 8, !tbaa !5
  br label %287

287:                                              ; preds = %.lr.ph509, %286
  %288 = add nsw i64 %.0480507, 1
  %289 = load i64, ptr %27, align 8, !tbaa !5
  %.not498.not = icmp slt i64 %.0480507, %289
  br i1 %.not498.not, label %.lr.ph509, label %._crit_edge510, !llvm.loop !16

._crit_edge510:                                   ; preds = %287
  %.pre547 = load i64, ptr %37, align 8, !tbaa !5
  store i64 %.0481512, ptr %38, align 8, !tbaa !5
  %.not499 = icmp eq i64 %.pre547, %.0481512
  br i1 %.not499, label %292, label %290

290:                                              ; preds = %._crit_edge510
  %291 = call i32 @ztrexc_(ptr noundef nonnull @.str.8, ptr noundef nonnull %32, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %37, ptr noundef nonnull %38, ptr noundef nonnull %36) #5
  br label %292

292:                                              ; preds = %._crit_edge510.thread, %._crit_edge510, %290
  %293 = load i64, ptr %26, align 8, !tbaa !5
  %.not.not543 = icmp slt i64 %.0481512, %293
  br i1 %.not.not543, label %255, label %.loopexit502.loopexit, !llvm.loop !17

.loopexit502.loopexit:                            ; preds = %292
  %.pre548 = load i64, ptr %32, align 8, !tbaa !5
  %.pre549 = load i64, ptr %39, align 8, !tbaa !5
  br label %.loopexit502

.loopexit502:                                     ; preds = %.loopexit502.loopexit, %252, %249
  %294 = phi i64 [ %.pre549, %.loopexit502.loopexit ], [ %.pre550, %252 ], [ %.pre550, %249 ]
  %295 = phi i64 [ %.pre548, %.loopexit502.loopexit ], [ %250, %252 ], [ %250, %249 ]
  store i64 %295, ptr %26, align 8, !tbaa !5
  %.not488.not515 = icmp slt i64 %294, %295
  br i1 %.not488.not515, label %.lr.ph518, label %313

.lr.ph518:                                        ; preds = %.loopexit502
  %296 = add i64 %52, 1
  %297 = sub i64 %295, %294
  %.neg = add i64 %294, 1
  %xtraiter = and i64 %297, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph518
  %.1482.prol = add nsw i64 %294, 1
  %298 = add i64 %294, %109
  %299 = mul i64 %.1482.prol, %296
  %300 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %299
  %301 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %298
  %302 = load <2 x double>, ptr %300, align 8, !tbaa !12
  store <2 x double> %302, ptr %301, align 8, !tbaa !12
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph518
  %.lcssa560.unr = phi i64 [ poison, %.lr.ph518 ], [ %298, %.prol.loopexit.unr-lcssa ]
  %.lcssa.unr = phi i64 [ poison, %.lr.ph518 ], [ %299, %.prol.loopexit.unr-lcssa ]
  %.1482.in516.unr = phi i64 [ %294, %.lr.ph518 ], [ %.1482.prol, %.prol.loopexit.unr-lcssa ]
  %303 = icmp eq i64 %295, %.neg
  br i1 %303, label %._crit_edge519, label %.lr.ph518.new

.lr.ph518.new:                                    ; preds = %.prol.loopexit
  %invariant.gep563 = getelementptr %struct.doublecomplex, ptr %48, i64 %109
  br label %304

304:                                              ; preds = %304, %.lr.ph518.new
  %.1482.in516 = phi i64 [ %.1482.in516.unr, %.lr.ph518.new ], [ %.1482.1, %304 ]
  %.1482 = add nsw i64 %.1482.in516, 1
  %305 = mul i64 %.1482, %296
  %306 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %305
  %gep564 = getelementptr %struct.doublecomplex, ptr %invariant.gep563, i64 %.1482.in516
  %307 = load <2 x double>, ptr %306, align 8, !tbaa !12
  store <2 x double> %307, ptr %gep564, align 8, !tbaa !12
  %.1482.1 = add nsw i64 %.1482.in516, 2
  %308 = add i64 %.1482, %109
  %309 = mul i64 %.1482.1, %296
  %310 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %309
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %308
  %312 = load <2 x double>, ptr %310, align 8, !tbaa !12
  store <2 x double> %312, ptr %311, align 8, !tbaa !12
  %exitcond.not.1 = icmp eq i64 %.1482.1, %295
  br i1 %exitcond.not.1, label %._crit_edge519, label %304, !llvm.loop !18

._crit_edge519:                                   ; preds = %304, %.prol.loopexit
  %.lcssa560 = phi i64 [ %.lcssa560.unr, %.prol.loopexit ], [ %308, %304 ]
  %.lcssa = phi i64 [ %.lcssa.unr, %.prol.loopexit ], [ %309, %304 ]
  store i64 %.lcssa560, ptr %27, align 8, !tbaa !5
  store i64 %.lcssa, ptr %28, align 8, !tbaa !5
  br label %313

313:                                              ; preds = %._crit_edge519, %.loopexit502
  %314 = load i64, ptr %12, align 8, !tbaa !5
  %315 = icmp slt i64 %314, %295
  br i1 %315, label %321, label %316

316:                                              ; preds = %313
  %317 = load double, ptr %31, align 16, !tbaa !9
  %318 = fcmp oeq double %317, 0.000000e+00
  %319 = load double, ptr %118, align 8
  %320 = fcmp oeq double %319, 0.000000e+00
  %or.cond = select i1 %318, i1 %320, i1 false
  br i1 %or.cond, label %321, label %.loopexit

321:                                              ; preds = %316, %313
  %322 = icmp sgt i64 %314, 1
  br i1 %322, label %323, label %358

323:                                              ; preds = %321
  %324 = load double, ptr %31, align 16, !tbaa !9
  %325 = fcmp une double %324, 0.000000e+00
  %326 = load double, ptr %118, align 8
  %327 = fcmp une double %326, 0.000000e+00
  %or.cond5 = select i1 %325, i1 true, i1 %327
  br i1 %or.cond5, label %328, label %358

328:                                              ; preds = %323
  %329 = call i32 @f2c_zcopy(ptr noundef nonnull %12, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %23, ptr noundef nonnull @c__1) #5
  %330 = load i64, ptr %12, align 8, !tbaa !5
  store i64 %330, ptr %26, align 8, !tbaa !5
  %.not489521 = icmp slt i64 %330, 1
  br i1 %.not489521, label %._crit_edge525, label %.lr.ph524

.lr.ph524:                                        ; preds = %328, %.lr.ph524
  %.2522 = phi i64 [ %335, %.lr.ph524 ], [ 1, %328 ]
  store i64 %.2522, ptr %27, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %55, i64 %.2522
  call void @d_cnjg(ptr noundef nonnull %29, ptr noundef nonnull %331) #5
  %332 = load i64, ptr %27, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.doublecomplex, ptr %55, i64 %332
  %334 = load <2 x double>, ptr %29, align 16, !tbaa !12
  store <2 x double> %334, ptr %333, align 8, !tbaa !12
  %335 = add nuw nsw i64 %.2522, 1
  %336 = load i64, ptr %26, align 8, !tbaa !5
  %.not489.not = icmp slt i64 %.2522, %336
  br i1 %.not489.not, label %.lr.ph524, label %._crit_edge525, !llvm.loop !19

._crit_edge525:                                   ; preds = %.lr.ph524, %328
  %337 = load <2 x double>, ptr %23, align 8, !tbaa !12
  store <2 x double> %337, ptr %35, align 16, !tbaa !12
  %338 = getelementptr inbounds i8, ptr %23, i64 16
  %339 = call i32 @zlarfg_(ptr noundef nonnull %12, ptr noundef nonnull %35, ptr noundef nonnull %338, ptr noundef nonnull @c__1, ptr noundef nonnull %34) #5
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %23, align 8, !tbaa !12
  %340 = load i64, ptr %32, align 8, !tbaa !5
  %341 = add nsw i64 %340, -2
  store i64 %341, ptr %26, align 8, !tbaa !5
  store i64 %341, ptr %27, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %18, i64 32
  %343 = call i32 @zlaset_(ptr noundef nonnull @.str.9, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b1, ptr noundef nonnull %342, ptr noundef nonnull %19) #5
  call void @d_cnjg(ptr noundef nonnull %29, ptr noundef nonnull %34) #5
  %344 = load i64, ptr %32, align 8, !tbaa !5
  %345 = getelementptr %struct.doublecomplex, ptr %23, i64 %344
  %346 = call i32 @zlarf_(ptr noundef nonnull @.str.9, ptr noundef nonnull %12, ptr noundef nonnull %32, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef nonnull %29, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %345) #5
  %347 = load i64, ptr %32, align 8, !tbaa !5
  %348 = getelementptr %struct.doublecomplex, ptr %23, i64 %347
  %349 = call i32 @zlarf_(ptr noundef nonnull @.str, ptr noundef nonnull %12, ptr noundef nonnull %12, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef nonnull %34, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %348) #5
  %350 = load i64, ptr %32, align 8, !tbaa !5
  %351 = getelementptr %struct.doublecomplex, ptr %23, i64 %350
  %352 = call i32 @zlarf_(ptr noundef nonnull @.str, ptr noundef nonnull %32, ptr noundef nonnull %12, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef nonnull %34, ptr noundef %15, ptr noundef nonnull %16, ptr noundef %351) #5
  %353 = load i64, ptr %24, align 8, !tbaa !5
  %354 = load i64, ptr %32, align 8, !tbaa !5
  %355 = sub nsw i64 %353, %354
  store i64 %355, ptr %26, align 8, !tbaa !5
  %356 = getelementptr %struct.doublecomplex, ptr %23, i64 %354
  %357 = call i32 @zgehrd_(ptr noundef nonnull %32, ptr noundef nonnull @c__1, ptr noundef nonnull %12, ptr noundef %18, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %356, ptr noundef nonnull %26, ptr noundef nonnull %36) #5
  br label %358

358:                                              ; preds = %323, %._crit_edge525, %321
  %359 = icmp sgt i64 %108, 0
  br i1 %359, label %360, label %375

360:                                              ; preds = %358
  %361 = mul nsw i64 %108, %42
  %362 = add nsw i64 %109, %361
  store i64 %362, ptr %26, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %30, ptr noundef %15) #5
  %363 = load <2 x double>, ptr %31, align 16
  %364 = load double, ptr %118, align 8, !tbaa !13
  %365 = fneg double %364
  %366 = load <2 x double>, ptr %30, align 16, !tbaa !12
  %367 = insertelement <2 x double> poison, double %364, i64 0
  %368 = insertelement <2 x double> %367, double %365, i64 1
  %369 = fmul <2 x double> %366, %368
  %370 = shufflevector <2 x double> %369, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %371 = shufflevector <2 x double> %363, <2 x double> poison, <2 x i32> zeroinitializer
  %372 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %371, <2 x double> %366, <2 x double> %370)
  store <2 x double> %372, ptr %29, align 16, !tbaa !12
  %373 = load i64, ptr %26, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %373
  store <2 x double> %372, ptr %374, align 8, !tbaa !12
  br label %375

375:                                              ; preds = %360, %358
  %376 = call i32 @zlacpy_(ptr noundef nonnull @.str.4, ptr noundef nonnull %32, ptr noundef nonnull %32, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %159, ptr noundef nonnull %7) #5
  %377 = load i64, ptr %32, align 8, !tbaa !5
  %378 = add nsw i64 %377, -1
  store i64 %378, ptr %26, align 8, !tbaa !5
  %379 = load i64, ptr %19, align 8, !tbaa !5
  %380 = add nsw i64 %379, 1
  store i64 %380, ptr %27, align 8, !tbaa !5
  %381 = load i64, ptr %7, align 8, !tbaa !5
  %382 = add nsw i64 %381, 1
  store i64 %382, ptr %28, align 8, !tbaa !5
  %383 = call i32 @f2c_zcopy(ptr noundef nonnull %26, ptr noundef nonnull %170, ptr noundef nonnull %27, ptr noundef %169, ptr noundef nonnull %28) #5
  %384 = load i64, ptr %12, align 8, !tbaa !5
  %385 = icmp sgt i64 %384, 1
  br i1 %385, label %386, label %397

386:                                              ; preds = %375
  %387 = load double, ptr %31, align 16, !tbaa !9
  %388 = fcmp une double %387, 0.000000e+00
  %389 = load double, ptr %118, align 8
  %390 = fcmp une double %389, 0.000000e+00
  %or.cond8 = select i1 %388, i1 true, i1 %390
  br i1 %or.cond8, label %391, label %397

391:                                              ; preds = %386
  %392 = load i64, ptr %24, align 8, !tbaa !5
  %393 = load i64, ptr %32, align 8, !tbaa !5
  %394 = sub nsw i64 %392, %393
  store i64 %394, ptr %26, align 8, !tbaa !5
  %395 = getelementptr %struct.doublecomplex, ptr %23, i64 %393
  %396 = call i32 @zunmhr_(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %32, ptr noundef nonnull %12, ptr noundef nonnull @c__1, ptr noundef nonnull %12, ptr noundef %18, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %15, ptr noundef nonnull %16, ptr noundef %395, ptr noundef nonnull %26, ptr noundef nonnull %36) #5
  br label %397

397:                                              ; preds = %386, %391, %375
  %398 = load i64, ptr %0, align 8, !tbaa !5
  %.not490 = icmp eq i64 %398, 0
  br i1 %.not490, label %399, label %401

399:                                              ; preds = %397
  %400 = load i64, ptr %3, align 8, !tbaa !5
  br label %401

401:                                              ; preds = %397, %399
  %.0476 = phi i64 [ %400, %399 ], [ 1, %397 ]
  store i64 %108, ptr %26, align 8, !tbaa !5
  %402 = load i64, ptr %20, align 8, !tbaa !5
  store i64 %402, ptr %27, align 8, !tbaa !5
  %invariant.gep526 = getelementptr %struct.doublecomplex, ptr %44, i64 %157
  %403 = icmp slt i64 %402, 0
  %404 = icmp sge i64 %.0476, %108
  %405 = icmp sle i64 %.0476, %108
  %.in528 = select i1 %403, i1 %404, i1 %405
  br i1 %.in528, label %.lr.ph531, label %._crit_edge532

.lr.ph531:                                        ; preds = %401, %.lr.ph531
  %.0475529 = phi i64 [ %412, %.lr.ph531 ], [ %.0476, %401 ]
  %406 = load i64, ptr %20, align 8, !tbaa !5
  store i64 %406, ptr %28, align 8, !tbaa !5
  %407 = sub nsw i64 %109, %.0475529
  %408 = call i64 @llvm.smin.i64(i64 %406, i64 %407)
  store i64 %408, ptr %33, align 8, !tbaa !5
  %gep527 = getelementptr %struct.doublecomplex, ptr %invariant.gep526, i64 %.0475529
  %409 = call i32 @f2c_zgemm(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef nonnull %32, ptr noundef nonnull @c_b2, ptr noundef %gep527, ptr noundef nonnull %7, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull @c_b1, ptr noundef %21, ptr noundef %22) #5
  %410 = call i32 @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %21, ptr noundef %22, ptr noundef %gep527, ptr noundef nonnull %7) #5
  %411 = load i64, ptr %27, align 8, !tbaa !5
  %412 = add nsw i64 %411, %.0475529
  %413 = icmp slt i64 %411, 0
  %414 = load i64, ptr %26, align 8
  %415 = icmp sge i64 %412, %414
  %416 = icmp sle i64 %412, %414
  %.in = select i1 %413, i1 %415, i1 %416
  br i1 %.in, label %.lr.ph531, label %._crit_edge532.loopexit, !llvm.loop !20

._crit_edge532.loopexit:                          ; preds = %.lr.ph531
  %.pre551 = load i64, ptr %0, align 8, !tbaa !5
  br label %._crit_edge532

._crit_edge532:                                   ; preds = %._crit_edge532.loopexit, %401
  %417 = phi i64 [ %.pre551, %._crit_edge532.loopexit ], [ %398, %401 ]
  %.not491 = icmp eq i64 %417, 0
  br i1 %.not491, label %.loopexit501, label %418

418:                                              ; preds = %._crit_edge532
  %419 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %419, ptr %27, align 8, !tbaa !5
  %420 = load i64, ptr %17, align 8, !tbaa !5
  store i64 %420, ptr %26, align 8, !tbaa !5
  %421 = load i64, ptr %4, align 8, !tbaa !5
  %422 = add nsw i64 %421, 1
  %423 = icmp slt i64 %420, 0
  %424 = icmp sge i64 %422, %419
  %425 = icmp slt i64 %421, %419
  %.in492533 = select i1 %423, i1 %424, i1 %425
  br i1 %.in492533, label %.lr.ph536, label %.loopexit501

.lr.ph536:                                        ; preds = %418, %.lr.ph536
  %.0477534 = phi i64 [ %435, %.lr.ph536 ], [ %422, %418 ]
  %426 = load i64, ptr %17, align 8, !tbaa !5
  store i64 %426, ptr %28, align 8, !tbaa !5
  %427 = load i64, ptr %2, align 8, !tbaa !5
  %reass.sub = sub i64 %427, %.0477534
  %428 = add i64 %reass.sub, 1
  %429 = call i64 @llvm.smin.i64(i64 %426, i64 %428)
  store i64 %429, ptr %33, align 8, !tbaa !5
  %430 = mul nsw i64 %.0477534, %42
  %431 = getelementptr %struct.doublecomplex, ptr %158, i64 %430
  %432 = call i32 @f2c_zgemm(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, ptr noundef nonnull %32, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef nonnull @c_b2, ptr noundef %15, ptr noundef nonnull %16, ptr noundef %431, ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef %18, ptr noundef nonnull %19) #5
  %433 = call i32 @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %32, ptr noundef nonnull %33, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %431, ptr noundef nonnull %7) #5
  %434 = load i64, ptr %26, align 8, !tbaa !5
  %435 = add nsw i64 %434, %.0477534
  %436 = icmp slt i64 %434, 0
  %437 = load i64, ptr %27, align 8
  %438 = icmp sge i64 %435, %437
  %439 = icmp sle i64 %435, %437
  %.in492 = select i1 %436, i1 %438, i1 %439
  br i1 %.in492, label %.lr.ph536, label %.loopexit501, !llvm.loop !21

.loopexit501:                                     ; preds = %.lr.ph536, %418, %._crit_edge532
  %440 = load i64, ptr %1, align 8, !tbaa !5
  %.not493 = icmp eq i64 %440, 0
  br i1 %.not493, label %.loopexit, label %441

441:                                              ; preds = %.loopexit501
  %442 = load i64, ptr %9, align 8, !tbaa !5
  store i64 %442, ptr %26, align 8, !tbaa !5
  %443 = load i64, ptr %20, align 8, !tbaa !5
  store i64 %443, ptr %27, align 8, !tbaa !5
  %444 = load i64, ptr %8, align 8, !tbaa !5
  %445 = icmp slt i64 %443, 0
  %446 = icmp sge i64 %444, %442
  %447 = icmp sle i64 %444, %442
  %.in494537 = select i1 %445, i1 %446, i1 %447
  br i1 %.in494537, label %.lr.ph540, label %.loopexit

.lr.ph540:                                        ; preds = %441
  %448 = mul nsw i64 %109, %45
  %invariant.gep541 = getelementptr %struct.doublecomplex, ptr %47, i64 %448
  br label %449

449:                                              ; preds = %.lr.ph540, %449
  %.1538 = phi i64 [ %444, %.lr.ph540 ], [ %457, %449 ]
  %450 = load i64, ptr %20, align 8, !tbaa !5
  store i64 %450, ptr %28, align 8, !tbaa !5
  %451 = load i64, ptr %9, align 8, !tbaa !5
  %reass.sub544 = sub i64 %451, %.1538
  %452 = add i64 %reass.sub544, 1
  %453 = call i64 @llvm.smin.i64(i64 %450, i64 %452)
  store i64 %453, ptr %33, align 8, !tbaa !5
  %gep542 = getelementptr %struct.doublecomplex, ptr %invariant.gep541, i64 %.1538
  %454 = call i32 @f2c_zgemm(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef nonnull %32, ptr noundef nonnull @c_b2, ptr noundef %gep542, ptr noundef nonnull %11, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull @c_b1, ptr noundef %21, ptr noundef nonnull %22) #5
  %455 = call i32 @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %21, ptr noundef nonnull %22, ptr noundef %gep542, ptr noundef nonnull %11) #5
  %456 = load i64, ptr %27, align 8, !tbaa !5
  %457 = add nsw i64 %456, %.1538
  %458 = icmp slt i64 %456, 0
  %459 = load i64, ptr %26, align 8
  %460 = icmp sge i64 %457, %459
  %461 = icmp sle i64 %457, %459
  %.in494 = select i1 %458, i1 %460, i1 %461
  br i1 %.in494, label %449, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %449, %441, %.loopexit501, %316
  %462 = load i64, ptr %32, align 8, !tbaa !5
  %463 = load i64, ptr %12, align 8, !tbaa !5
  %464 = sub nsw i64 %462, %463
  store i64 %464, ptr %13, align 8, !tbaa !5
  %465 = load i64, ptr %39, align 8, !tbaa !5
  %466 = load i64, ptr %12, align 8, !tbaa !5
  %467 = sub nsw i64 %466, %465
  store i64 %467, ptr %12, align 8, !tbaa !5
  %468 = sitofp i64 %.0 to double
  store double %468, ptr %23, align 8, !tbaa !9
  br label %.sink.split

.sink.split:                                      ; preds = %83, %155, %.loopexit
  %.sink554 = getelementptr inbounds i8, ptr %23, i64 8
  store double 0.000000e+00, ptr %.sink554, align 8, !tbaa !13
  br label %469

469:                                              ; preds = %.sink.split, %89, %85
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  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 i32 @zgehrd_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

declare double @d_imag(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 @f2c_zcopy(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

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

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


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