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

165:                                              ; preds = %25
  %166 = load i32, ptr %61, align 4, !tbaa !9
  br label %169

167:                                              ; preds = %25
  %168 = load i32, ptr %62, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %167, %165
  %170 = phi i32 [ %166, %165 ], [ %168, %167 ]
  store i32 %170, ptr %86, align 4, !tbaa !9
  %171 = load i32, ptr %86, align 4, !tbaa !9
  %172 = icmp sle i32 %171, 2
  br i1 %172, label %173, label %174

173:                                              ; preds = %169
  store i32 1, ptr %90, align 4, !tbaa !9
  br label %251

174:                                              ; preds = %169
  %175 = load i32, ptr %86, align 4, !tbaa !9
  %176 = sub nsw i32 %175, 1
  store i32 %176, ptr %61, align 4, !tbaa !9
  %177 = load ptr, ptr %44, align 8, !tbaa !5
  %178 = load i32, ptr %54, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds %struct.doublecomplex, ptr %177, i64 %179
  %181 = load ptr, ptr %45, align 8, !tbaa !5
  %182 = load ptr, ptr %49, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.doublecomplex, ptr %182, i64 1
  %184 = load ptr, ptr %49, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %184, i64 1
  call void @zgehrd_(ptr noundef %86, ptr noundef @c__1, ptr noundef %61, ptr noundef %180, ptr noundef %181, ptr noundef %183, ptr noundef %185, ptr noundef @c_n1, ptr noundef %75)
  %186 = load ptr, ptr %49, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.doublecomplex, ptr %186, i64 1
  %188 = getelementptr inbounds %struct.doublecomplex, ptr %187, i32 0, i32 0
  %189 = load double, ptr %188, align 8, !tbaa !11
  %190 = fptosi double %189 to i32
  store i32 %190, ptr %96, align 4, !tbaa !9
  %191 = load i32, ptr %86, align 4, !tbaa !9
  %192 = sub nsw i32 %191, 1
  store i32 %192, ptr %61, align 4, !tbaa !9
  %193 = load ptr, ptr %44, align 8, !tbaa !5
  %194 = load i32, ptr %54, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds %struct.doublecomplex, ptr %193, i64 %195
  %197 = load ptr, ptr %45, align 8, !tbaa !5
  %198 = load ptr, ptr %49, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.doublecomplex, ptr %198, i64 1
  %200 = load ptr, ptr %41, align 8, !tbaa !5
  %201 = load i32, ptr %56, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds %struct.doublecomplex, ptr %200, i64 %202
  %204 = load ptr, ptr %42, align 8, !tbaa !5
  %205 = load ptr, ptr %49, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.doublecomplex, ptr %205, i64 1
  call void @zunmhr_(ptr noundef @.str, ptr noundef @.str.1, ptr noundef %86, ptr noundef %86, ptr noundef @c__1, ptr noundef %61, ptr noundef %196, ptr noundef %197, ptr noundef %199, ptr noundef %203, ptr noundef %204, ptr noundef %206, ptr noundef @c_n1, ptr noundef %75)
  %207 = load ptr, ptr %49, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.doublecomplex, ptr %207, i64 1
  %209 = getelementptr inbounds %struct.doublecomplex, ptr %208, i32 0, i32 0
  %210 = load double, ptr %209, align 8, !tbaa !11
  %211 = fptosi double %210 to i32
  store i32 %211, ptr %97, align 4, !tbaa !9
  %212 = load ptr, ptr %44, align 8, !tbaa !5
  %213 = load i32, ptr %54, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds %struct.doublecomplex, ptr %212, i64 %214
  %216 = load ptr, ptr %45, align 8, !tbaa !5
  %217 = load ptr, ptr %40, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.doublecomplex, ptr %217, i64 1
  %219 = load ptr, ptr %41, align 8, !tbaa !5
  %220 = load i32, ptr %56, align 4, !tbaa !9
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds %struct.doublecomplex, ptr %219, i64 %221
  %223 = load ptr, ptr %42, align 8, !tbaa !5
  %224 = load ptr, ptr %49, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.doublecomplex, ptr %224, i64 1
  call void @zlaqr4_(ptr noundef @c_true, ptr noundef @c_true, ptr noundef %86, ptr noundef @c__1, ptr noundef %86, ptr noundef %215, ptr noundef %216, ptr noundef %218, ptr noundef @c__1, ptr noundef %86, ptr noundef %222, ptr noundef %223, ptr noundef %225, ptr noundef @c_n1, ptr noundef %84)
  %226 = load ptr, ptr %49, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.doublecomplex, ptr %226, i64 1
  %228 = getelementptr inbounds %struct.doublecomplex, ptr %227, i32 0, i32 0
  %229 = load double, ptr %228, align 8, !tbaa !11
  %230 = fptosi double %229 to i32
  store i32 %230, ptr %98, align 4, !tbaa !9
  %231 = load i32, ptr %86, align 4, !tbaa !9
  %232 = load i32, ptr %96, align 4, !tbaa !9
  %233 = load i32, ptr %97, align 4, !tbaa !9
  %234 = icmp sge i32 %232, %233
  br i1 %234, label %235, label %237

235:                                              ; preds = %174
  %236 = load i32, ptr %96, align 4, !tbaa !9
  br label %239

237:                                              ; preds = %174
  %238 = load i32, ptr %97, align 4, !tbaa !9
  br label %239

239:                                              ; preds = %237, %235
  %240 = phi i32 [ %236, %235 ], [ %238, %237 ]
  %241 = add nsw i32 %231, %240
  store i32 %241, ptr %61, align 4, !tbaa !9
  %242 = load i32, ptr %61, align 4, !tbaa !9
  %243 = load i32, ptr %98, align 4, !tbaa !9
  %244 = icmp sge i32 %242, %243
  br i1 %244, label %245, label %247

245:                                              ; preds = %239
  %246 = load i32, ptr %61, align 4, !tbaa !9
  br label %249

247:                                              ; preds = %239
  %248 = load i32, ptr %98, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %247, %245
  %250 = phi i32 [ %246, %245 ], [ %248, %247 ]
  store i32 %250, ptr %90, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %249, %173
  %252 = load ptr, ptr %50, align 8, !tbaa !5
  %253 = load i32, ptr %252, align 4, !tbaa !9
  %254 = icmp eq i32 %253, -1
  br i1 %254, label %255, label %271

255:                                              ; preds = %251
  %256 = load i32, ptr %90, align 4, !tbaa !9
  %257 = sitofp i32 %256 to double
  store double %257, ptr %65, align 8, !tbaa !14
  %258 = load double, ptr %65, align 8, !tbaa !14
  %259 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  store double %258, ptr %259, align 8, !tbaa !11
  %260 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  store double 0.000000e+00, ptr %260, align 8, !tbaa !15
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  %262 = load double, ptr %261, align 8, !tbaa !11
  %263 = load ptr, ptr %49, 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 %262, ptr %265, align 8, !tbaa !11
  %266 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  %267 = load double, ptr %266, align 8, !tbaa !15
  %268 = load ptr, ptr %49, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %268, i64 1
  %270 = getelementptr inbounds %struct.doublecomplex, ptr %269, i32 0, i32 1
  store double %267, ptr %270, align 8, !tbaa !15
  store i32 1, ptr %99, align 4
  br label %1521

271:                                              ; preds = %251
  %272 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 0, ptr %272, align 4, !tbaa !9
  %273 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 0, ptr %273, align 4, !tbaa !9
  %274 = load ptr, ptr %49, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.doublecomplex, ptr %274, i64 1
  %276 = getelementptr inbounds %struct.doublecomplex, ptr %275, i32 0, i32 0
  store double 1.000000e+00, ptr %276, align 8, !tbaa !11
  %277 = load ptr, ptr %49, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.doublecomplex, ptr %277, i64 1
  %279 = getelementptr inbounds %struct.doublecomplex, ptr %278, i32 0, i32 1
  store double 0.000000e+00, ptr %279, align 8, !tbaa !15
  %280 = load ptr, ptr %29, align 8, !tbaa !5
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = load ptr, ptr %30, align 8, !tbaa !5
  %283 = load i32, ptr %282, align 4, !tbaa !9
  %284 = icmp sgt i32 %281, %283
  br i1 %284, label %285, label %286

285:                                              ; preds = %271
  store i32 1, ptr %99, align 4
  br label %1521

286:                                              ; preds = %271
  %287 = load ptr, ptr %31, align 8, !tbaa !5
  %288 = load i32, ptr %287, align 4, !tbaa !9
  %289 = icmp slt i32 %288, 1
  br i1 %289, label %290, label %291

290:                                              ; preds = %286
  store i32 1, ptr %99, align 4
  br label %1521

291:                                              ; preds = %286
  %292 = call double @dlamch_(ptr noundef @.str.2)
  store double %292, ptr %87, align 8, !tbaa !14
  %293 = load double, ptr %87, align 8, !tbaa !14
  %294 = fdiv double 1.000000e+00, %293
  store double %294, ptr %88, align 8, !tbaa !14
  call void @dlabad_(ptr noundef %87, ptr noundef %88)
  %295 = call double @dlamch_(ptr noundef @.str.3)
  store double %295, ptr %95, align 8, !tbaa !14
  %296 = load double, ptr %87, align 8, !tbaa !14
  %297 = load ptr, ptr %28, align 8, !tbaa !5
  %298 = load i32, ptr %297, align 4, !tbaa !9
  %299 = sitofp i32 %298 to double
  %300 = load double, ptr %95, align 8, !tbaa !14
  %301 = fdiv double %299, %300
  %302 = fmul double %296, %301
  store double %302, ptr %89, align 8, !tbaa !14
  %303 = load ptr, ptr %31, align 8, !tbaa !5
  %304 = load i32, ptr %303, align 4, !tbaa !9
  store i32 %304, ptr %61, align 4, !tbaa !9
  %305 = load ptr, ptr %30, align 8, !tbaa !5
  %306 = load i32, ptr %305, align 4, !tbaa !9
  %307 = load ptr, ptr %29, align 8, !tbaa !5
  %308 = load i32, ptr %307, align 4, !tbaa !9
  %309 = sub nsw i32 %306, %308
  %310 = add nsw i32 %309, 1
  store i32 %310, ptr %62, align 4, !tbaa !9
  %311 = load i32, ptr %61, align 4, !tbaa !9
  %312 = load i32, ptr %62, align 4, !tbaa !9
  %313 = icmp sle i32 %311, %312
  br i1 %313, label %314, label %316

314:                                              ; preds = %291
  %315 = load i32, ptr %61, align 4, !tbaa !9
  br label %318

316:                                              ; preds = %291
  %317 = load i32, ptr %62, align 4, !tbaa !9
  br label %318

318:                                              ; preds = %316, %314
  %319 = phi i32 [ %315, %314 ], [ %317, %316 ]
  store i32 %319, ptr %86, align 4, !tbaa !9
  %320 = load ptr, ptr %30, align 8, !tbaa !5
  %321 = load i32, ptr %320, align 4, !tbaa !9
  %322 = load i32, ptr %86, align 4, !tbaa !9
  %323 = sub nsw i32 %321, %322
  %324 = add nsw i32 %323, 1
  store i32 %324, ptr %85, align 4, !tbaa !9
  %325 = load i32, ptr %85, align 4, !tbaa !9
  %326 = load ptr, ptr %29, align 8, !tbaa !5
  %327 = load i32, ptr %326, align 4, !tbaa !9
  %328 = icmp eq i32 %325, %327
  br i1 %328, label %329, label %332

329:                                              ; preds = %318
  %330 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  store double 0.000000e+00, ptr %330, align 8, !tbaa !11
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  store double 0.000000e+00, ptr %331, align 8, !tbaa !15
  br label %353

332:                                              ; preds = %318
  %333 = load i32, ptr %85, align 4, !tbaa !9
  %334 = load i32, ptr %85, align 4, !tbaa !9
  %335 = sub nsw i32 %334, 1
  %336 = load i32, ptr %51, align 4, !tbaa !9
  %337 = mul nsw i32 %335, %336
  %338 = add nsw i32 %333, %337
  store i32 %338, ptr %61, align 4, !tbaa !9
  %339 = load ptr, ptr %32, align 8, !tbaa !5
  %340 = load i32, ptr %61, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds %struct.doublecomplex, ptr %339, i64 %341
  %343 = getelementptr inbounds %struct.doublecomplex, ptr %342, i32 0, i32 0
  %344 = load double, ptr %343, align 8, !tbaa !11
  %345 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  store double %344, ptr %345, align 8, !tbaa !11
  %346 = load ptr, ptr %32, align 8, !tbaa !5
  %347 = load i32, ptr %61, align 4, !tbaa !9
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds %struct.doublecomplex, ptr %346, i64 %348
  %350 = getelementptr inbounds %struct.doublecomplex, ptr %349, i32 0, i32 1
  %351 = load double, ptr %350, align 8, !tbaa !15
  %352 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  store double %351, ptr %352, align 8, !tbaa !15
  br label %353

353:                                              ; preds = %332, %329
  %354 = load ptr, ptr %30, align 8, !tbaa !5
  %355 = load i32, ptr %354, align 4, !tbaa !9
  %356 = load i32, ptr %85, align 4, !tbaa !9
  %357 = icmp eq i32 %355, %356
  br i1 %357, label %358, label %499

358:                                              ; preds = %353
  %359 = load i32, ptr %85, align 4, !tbaa !9
  store i32 %359, ptr %61, align 4, !tbaa !9
  %360 = load i32, ptr %85, align 4, !tbaa !9
  %361 = load i32, ptr %85, align 4, !tbaa !9
  %362 = load i32, ptr %51, align 4, !tbaa !9
  %363 = mul nsw i32 %361, %362
  %364 = add nsw i32 %360, %363
  store i32 %364, ptr %62, align 4, !tbaa !9
  %365 = load ptr, ptr %32, align 8, !tbaa !5
  %366 = load i32, ptr %62, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds %struct.doublecomplex, ptr %365, i64 %367
  %369 = getelementptr inbounds %struct.doublecomplex, ptr %368, i32 0, i32 0
  %370 = load double, ptr %369, align 8, !tbaa !11
  %371 = load ptr, ptr %40, align 8, !tbaa !5
  %372 = load i32, ptr %61, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds %struct.doublecomplex, ptr %371, i64 %373
  %375 = getelementptr inbounds %struct.doublecomplex, ptr %374, i32 0, i32 0
  store double %370, ptr %375, align 8, !tbaa !11
  %376 = load ptr, ptr %32, align 8, !tbaa !5
  %377 = load i32, ptr %62, align 4, !tbaa !9
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %376, i64 %378
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %379, i32 0, i32 1
  %381 = load double, ptr %380, align 8, !tbaa !15
  %382 = load ptr, ptr %40, align 8, !tbaa !5
  %383 = load i32, ptr %61, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds %struct.doublecomplex, ptr %382, i64 %384
  %386 = getelementptr inbounds %struct.doublecomplex, ptr %385, i32 0, i32 1
  store double %381, ptr %386, align 8, !tbaa !15
  %387 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 1, ptr %387, align 4, !tbaa !9
  %388 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 0, ptr %388, align 4, !tbaa !9
  %389 = load i32, ptr %85, align 4, !tbaa !9
  %390 = load i32, ptr %85, align 4, !tbaa !9
  %391 = load i32, ptr %51, align 4, !tbaa !9
  %392 = mul nsw i32 %390, %391
  %393 = add nsw i32 %389, %392
  store i32 %393, ptr %61, align 4, !tbaa !9
  %394 = load double, ptr %89, align 8, !tbaa !14
  store double %394, ptr %69, align 8, !tbaa !14
  %395 = load double, ptr %95, align 8, !tbaa !14
  %396 = load ptr, ptr %32, align 8, !tbaa !5
  %397 = load i32, ptr %61, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds %struct.doublecomplex, ptr %396, i64 %398
  %400 = getelementptr inbounds %struct.doublecomplex, ptr %399, i32 0, i32 0
  %401 = load double, ptr %400, align 8, !tbaa !11
  store double %401, ptr %65, align 8, !tbaa !14
  %402 = load double, ptr %65, align 8, !tbaa !14
  %403 = fcmp oge double %402, 0.000000e+00
  br i1 %403, label %404, label %406

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

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

409:                                              ; preds = %406, %404
  %410 = phi double [ %405, %404 ], [ %408, %406 ]
  %411 = load ptr, ptr %32, align 8, !tbaa !5
  %412 = load i32, ptr %85, align 4, !tbaa !9
  %413 = load i32, ptr %85, align 4, !tbaa !9
  %414 = load i32, ptr %51, align 4, !tbaa !9
  %415 = mul nsw i32 %413, %414
  %416 = add nsw i32 %412, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds %struct.doublecomplex, ptr %411, i64 %417
  %419 = call { double, double } @Cd(ptr noundef %418)
  %420 = extractvalue { double, double } %419, 0
  %421 = extractvalue { double, double } %419, 1
  store double %421, ptr %66, align 8, !tbaa !14
  %422 = load double, ptr %66, align 8, !tbaa !14
  %423 = fcmp oge double %422, 0.000000e+00
  br i1 %423, label %424, label %426

424:                                              ; preds = %409
  %425 = load double, ptr %66, align 8, !tbaa !14
  br label %429

426:                                              ; preds = %409
  %427 = load double, ptr %66, align 8, !tbaa !14
  %428 = fneg double %427
  br label %429

429:                                              ; preds = %426, %424
  %430 = phi double [ %425, %424 ], [ %428, %426 ]
  %431 = fadd double %410, %430
  %432 = fmul double %395, %431
  store double %432, ptr %70, align 8, !tbaa !14
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %434 = load double, ptr %433, align 8, !tbaa !11
  store double %434, ptr %67, align 8, !tbaa !14
  %435 = load double, ptr %67, align 8, !tbaa !14
  %436 = fcmp oge double %435, 0.000000e+00
  br i1 %436, label %437, label %439

437:                                              ; preds = %429
  %438 = load double, ptr %67, align 8, !tbaa !14
  br label %442

439:                                              ; preds = %429
  %440 = load double, ptr %67, align 8, !tbaa !14
  %441 = fneg double %440
  br label %442

442:                                              ; preds = %439, %437
  %443 = phi double [ %438, %437 ], [ %441, %439 ]
  %444 = call { double, double } @Cd(ptr noundef %83)
  %445 = extractvalue { double, double } %444, 0
  %446 = extractvalue { double, double } %444, 1
  store double %446, ptr %68, align 8, !tbaa !14
  %447 = load double, ptr %68, align 8, !tbaa !14
  %448 = fcmp oge double %447, 0.000000e+00
  br i1 %448, label %449, label %451

449:                                              ; preds = %442
  %450 = load double, ptr %68, align 8, !tbaa !14
  br label %454

451:                                              ; preds = %442
  %452 = load double, ptr %68, align 8, !tbaa !14
  %453 = fneg double %452
  br label %454

454:                                              ; preds = %451, %449
  %455 = phi double [ %450, %449 ], [ %453, %451 ]
  %456 = fadd double %443, %455
  %457 = load double, ptr %69, align 8, !tbaa !14
  %458 = load double, ptr %70, align 8, !tbaa !14
  %459 = fcmp oge double %457, %458
  br i1 %459, label %460, label %462

460:                                              ; preds = %454
  %461 = load double, ptr %69, align 8, !tbaa !14
  br label %464

462:                                              ; preds = %454
  %463 = load double, ptr %70, align 8, !tbaa !14
  br label %464

464:                                              ; preds = %462, %460
  %465 = phi double [ %461, %460 ], [ %463, %462 ]
  %466 = fcmp ole double %456, %465
  br i1 %466, label %467, label %492

467:                                              ; preds = %464
  %468 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 0, ptr %468, align 4, !tbaa !9
  %469 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 1, ptr %469, align 4, !tbaa !9
  %470 = load i32, ptr %85, align 4, !tbaa !9
  %471 = load ptr, ptr %29, align 8, !tbaa !5
  %472 = load i32, ptr %471, align 4, !tbaa !9
  %473 = icmp sgt i32 %470, %472
  br i1 %473, label %474, label %491

474:                                              ; preds = %467
  %475 = load i32, ptr %85, align 4, !tbaa !9
  %476 = load i32, ptr %85, align 4, !tbaa !9
  %477 = sub nsw i32 %476, 1
  %478 = load i32, ptr %51, align 4, !tbaa !9
  %479 = mul nsw i32 %477, %478
  %480 = add nsw i32 %475, %479
  store i32 %480, ptr %61, align 4, !tbaa !9
  %481 = load ptr, ptr %32, align 8, !tbaa !5
  %482 = load i32, ptr %61, align 4, !tbaa !9
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %481, i64 %483
  %485 = getelementptr inbounds %struct.doublecomplex, ptr %484, i32 0, i32 0
  store double 0.000000e+00, ptr %485, align 8, !tbaa !11
  %486 = load ptr, ptr %32, align 8, !tbaa !5
  %487 = load i32, ptr %61, align 4, !tbaa !9
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds %struct.doublecomplex, ptr %486, i64 %488
  %490 = getelementptr inbounds %struct.doublecomplex, ptr %489, i32 0, i32 1
  store double 0.000000e+00, ptr %490, align 8, !tbaa !15
  br label %491

491:                                              ; preds = %474, %467
  br label %492

492:                                              ; preds = %491, %464
  %493 = load ptr, ptr %49, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.doublecomplex, ptr %493, i64 1
  %495 = getelementptr inbounds %struct.doublecomplex, ptr %494, i32 0, i32 0
  store double 1.000000e+00, ptr %495, align 8, !tbaa !11
  %496 = load ptr, ptr %49, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 1
  %498 = getelementptr inbounds %struct.doublecomplex, ptr %497, i32 0, i32 1
  store double 0.000000e+00, ptr %498, align 8, !tbaa !15
  store i32 1, ptr %99, align 4
  br label %1521

499:                                              ; preds = %353
  %500 = load ptr, ptr %32, align 8, !tbaa !5
  %501 = load i32, ptr %85, align 4, !tbaa !9
  %502 = load i32, ptr %85, align 4, !tbaa !9
  %503 = load i32, ptr %51, align 4, !tbaa !9
  %504 = mul nsw i32 %502, %503
  %505 = add nsw i32 %501, %504
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds %struct.doublecomplex, ptr %500, i64 %506
  %508 = load ptr, ptr %33, align 8, !tbaa !5
  %509 = load ptr, ptr %44, align 8, !tbaa !5
  %510 = load i32, ptr %54, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds %struct.doublecomplex, ptr %509, i64 %511
  %513 = load ptr, ptr %45, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.4, ptr noundef %86, ptr noundef %86, ptr noundef %507, ptr noundef %508, ptr noundef %512, ptr noundef %513)
  %514 = load i32, ptr %86, align 4, !tbaa !9
  %515 = sub nsw i32 %514, 1
  store i32 %515, ptr %61, align 4, !tbaa !9
  %516 = load ptr, ptr %33, align 8, !tbaa !5
  %517 = load i32, ptr %516, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %62, align 4, !tbaa !9
  %519 = load ptr, ptr %45, align 8, !tbaa !5
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = add nsw i32 %520, 1
  store i32 %521, ptr %63, align 4, !tbaa !9
  %522 = load ptr, ptr %32, align 8, !tbaa !5
  %523 = load i32, ptr %85, align 4, !tbaa !9
  %524 = add nsw i32 %523, 1
  %525 = load i32, ptr %85, align 4, !tbaa !9
  %526 = load i32, ptr %51, align 4, !tbaa !9
  %527 = mul nsw i32 %525, %526
  %528 = add nsw i32 %524, %527
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds %struct.doublecomplex, ptr %522, i64 %529
  %531 = load ptr, ptr %44, align 8, !tbaa !5
  %532 = load i32, ptr %53, align 4, !tbaa !9
  %533 = add nsw i32 %532, 2
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds %struct.doublecomplex, ptr %531, i64 %534
  call void @zcopy_(ptr noundef %61, ptr noundef %530, ptr noundef %62, ptr noundef %535, ptr noundef %63)
  %536 = load ptr, ptr %41, align 8, !tbaa !5
  %537 = load i32, ptr %56, align 4, !tbaa !9
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds %struct.doublecomplex, ptr %536, i64 %538
  %540 = load ptr, ptr %42, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.5, ptr noundef %86, ptr noundef %86, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %539, ptr noundef %540)
  %541 = load ptr, ptr %50, align 8, !tbaa !5
  %542 = call i32 @ilaenv_(ptr noundef @c__12, ptr noundef @.str.6, ptr noundef @.str.7, ptr noundef %86, ptr noundef @c__1, ptr noundef %86, ptr noundef %541, i32 noundef 6, i32 noundef 2)
  store i32 %542, ptr %76, align 4, !tbaa !9
  %543 = load i32, ptr %86, align 4, !tbaa !9
  %544 = load i32, ptr %76, align 4, !tbaa !9
  %545 = icmp sgt i32 %543, %544
  br i1 %545, label %546, label %564

546:                                              ; preds = %499
  %547 = load ptr, ptr %44, align 8, !tbaa !5
  %548 = load i32, ptr %54, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds %struct.doublecomplex, ptr %547, i64 %549
  %551 = load ptr, ptr %45, align 8, !tbaa !5
  %552 = load ptr, ptr %40, align 8, !tbaa !5
  %553 = load i32, ptr %85, align 4, !tbaa !9
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds %struct.doublecomplex, ptr %552, i64 %554
  %556 = load ptr, ptr %41, align 8, !tbaa !5
  %557 = load i32, ptr %56, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds %struct.doublecomplex, ptr %556, i64 %558
  %560 = load ptr, ptr %42, align 8, !tbaa !5
  %561 = load ptr, ptr %49, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.doublecomplex, ptr %561, i64 1
  %563 = load ptr, ptr %50, align 8, !tbaa !5
  call void @zlaqr4_(ptr noundef @c_true, ptr noundef @c_true, ptr noundef %86, ptr noundef @c__1, ptr noundef %86, ptr noundef %550, ptr noundef %551, ptr noundef %555, ptr noundef @c__1, ptr noundef %86, ptr noundef %559, ptr noundef %560, ptr noundef %562, ptr noundef %563, ptr noundef %84)
  br label %579

564:                                              ; preds = %499
  %565 = load ptr, ptr %44, align 8, !tbaa !5
  %566 = load i32, ptr %54, align 4, !tbaa !9
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %565, i64 %567
  %569 = load ptr, ptr %45, align 8, !tbaa !5
  %570 = load ptr, ptr %40, align 8, !tbaa !5
  %571 = load i32, ptr %85, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds %struct.doublecomplex, ptr %570, i64 %572
  %574 = load ptr, ptr %41, align 8, !tbaa !5
  %575 = load i32, ptr %56, align 4, !tbaa !9
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %574, i64 %576
  %578 = load ptr, ptr %42, align 8, !tbaa !5
  call void @zlahqr_(ptr noundef @c_true, ptr noundef @c_true, ptr noundef %86, ptr noundef @c__1, ptr noundef %86, ptr noundef %568, ptr noundef %569, ptr noundef %573, ptr noundef @c__1, ptr noundef %86, ptr noundef %577, ptr noundef %578, ptr noundef %84)
  br label %579

579:                                              ; preds = %564, %546
  %580 = load i32, ptr %86, align 4, !tbaa !9
  %581 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 %580, ptr %581, align 4, !tbaa !9
  %582 = load i32, ptr %84, align 4, !tbaa !9
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %78, align 4, !tbaa !9
  %584 = load i32, ptr %86, align 4, !tbaa !9
  store i32 %584, ptr %61, align 4, !tbaa !9
  %585 = load i32, ptr %84, align 4, !tbaa !9
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %94, align 4, !tbaa !9
  br label %587

587:                                              ; preds = %765, %579
  %588 = load i32, ptr %94, align 4, !tbaa !9
  %589 = load i32, ptr %61, align 4, !tbaa !9
  %590 = icmp sle i32 %588, %589
  br i1 %590, label %591, label %768

591:                                              ; preds = %587
  %592 = load ptr, ptr %38, align 8, !tbaa !5
  %593 = load i32, ptr %592, align 4, !tbaa !9
  %594 = load ptr, ptr %38, align 8, !tbaa !5
  %595 = load i32, ptr %594, align 4, !tbaa !9
  %596 = load i32, ptr %53, align 4, !tbaa !9
  %597 = mul nsw i32 %595, %596
  %598 = add nsw i32 %593, %597
  store i32 %598, ptr %62, align 4, !tbaa !9
  %599 = load ptr, ptr %44, align 8, !tbaa !5
  %600 = load i32, ptr %62, align 4, !tbaa !9
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds %struct.doublecomplex, ptr %599, i64 %601
  %603 = getelementptr inbounds %struct.doublecomplex, ptr %602, i32 0, i32 0
  %604 = load double, ptr %603, align 8, !tbaa !11
  store double %604, ptr %65, align 8, !tbaa !14
  %605 = load double, ptr %65, align 8, !tbaa !14
  %606 = fcmp oge double %605, 0.000000e+00
  br i1 %606, label %607, label %609

607:                                              ; preds = %591
  %608 = load double, ptr %65, align 8, !tbaa !14
  br label %612

609:                                              ; preds = %591
  %610 = load double, ptr %65, align 8, !tbaa !14
  %611 = fneg double %610
  br label %612

612:                                              ; preds = %609, %607
  %613 = phi double [ %608, %607 ], [ %611, %609 ]
  %614 = load ptr, ptr %44, align 8, !tbaa !5
  %615 = load ptr, ptr %38, align 8, !tbaa !5
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = load ptr, ptr %38, align 8, !tbaa !5
  %618 = load i32, ptr %617, align 4, !tbaa !9
  %619 = load i32, ptr %53, align 4, !tbaa !9
  %620 = mul nsw i32 %618, %619
  %621 = add nsw i32 %616, %620
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %622
  %624 = call { double, double } @Cd(ptr noundef %623)
  %625 = extractvalue { double, double } %624, 0
  %626 = extractvalue { double, double } %624, 1
  store double %626, ptr %66, align 8, !tbaa !14
  %627 = load double, ptr %66, align 8, !tbaa !14
  %628 = fcmp oge double %627, 0.000000e+00
  br i1 %628, label %629, label %631

629:                                              ; preds = %612
  %630 = load double, ptr %66, align 8, !tbaa !14
  br label %634

631:                                              ; preds = %612
  %632 = load double, ptr %66, align 8, !tbaa !14
  %633 = fneg double %632
  br label %634

634:                                              ; preds = %631, %629
  %635 = phi double [ %630, %629 ], [ %633, %631 ]
  %636 = fadd double %613, %635
  store double %636, ptr %91, align 8, !tbaa !14
  %637 = load double, ptr %91, align 8, !tbaa !14
  %638 = fcmp oeq double %637, 0.000000e+00
  br i1 %638, label %639, label %664

639:                                              ; preds = %634
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %641 = load double, ptr %640, align 8, !tbaa !11
  store double %641, ptr %65, align 8, !tbaa !14
  %642 = load double, ptr %65, align 8, !tbaa !14
  %643 = fcmp oge double %642, 0.000000e+00
  br i1 %643, label %644, label %646

644:                                              ; preds = %639
  %645 = load double, ptr %65, align 8, !tbaa !14
  br label %649

646:                                              ; preds = %639
  %647 = load double, ptr %65, align 8, !tbaa !14
  %648 = fneg double %647
  br label %649

649:                                              ; preds = %646, %644
  %650 = phi double [ %645, %644 ], [ %648, %646 ]
  %651 = call { double, double } @Cd(ptr noundef %83)
  %652 = extractvalue { double, double } %651, 0
  %653 = extractvalue { double, double } %651, 1
  store double %653, ptr %66, align 8, !tbaa !14
  %654 = load double, ptr %66, align 8, !tbaa !14
  %655 = fcmp oge double %654, 0.000000e+00
  br i1 %655, label %656, label %658

656:                                              ; preds = %649
  %657 = load double, ptr %66, align 8, !tbaa !14
  br label %661

658:                                              ; preds = %649
  %659 = load double, ptr %66, align 8, !tbaa !14
  %660 = fneg double %659
  br label %661

661:                                              ; preds = %658, %656
  %662 = phi double [ %657, %656 ], [ %660, %658 ]
  %663 = fadd double %650, %662
  store double %663, ptr %91, align 8, !tbaa !14
  br label %664

664:                                              ; preds = %661, %634
  %665 = load ptr, ptr %38, align 8, !tbaa !5
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = load i32, ptr %55, align 4, !tbaa !9
  %668 = mul nsw i32 %666, %667
  %669 = add nsw i32 %668, 1
  store i32 %669, ptr %62, align 4, !tbaa !9
  %670 = load double, ptr %89, align 8, !tbaa !14
  store double %670, ptr %69, align 8, !tbaa !14
  %671 = load double, ptr %95, align 8, !tbaa !14
  %672 = load double, ptr %91, align 8, !tbaa !14
  %673 = fmul double %671, %672
  store double %673, ptr %70, align 8, !tbaa !14
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %675 = load double, ptr %674, align 8, !tbaa !11
  store double %675, ptr %65, align 8, !tbaa !14
  %676 = load double, ptr %65, align 8, !tbaa !14
  %677 = fcmp oge double %676, 0.000000e+00
  br i1 %677, label %678, label %680

678:                                              ; preds = %664
  %679 = load double, ptr %65, align 8, !tbaa !14
  br label %683

680:                                              ; preds = %664
  %681 = load double, ptr %65, align 8, !tbaa !14
  %682 = fneg double %681
  br label %683

683:                                              ; preds = %680, %678
  %684 = phi double [ %679, %678 ], [ %682, %680 ]
  %685 = call { double, double } @Cd(ptr noundef %83)
  %686 = extractvalue { double, double } %685, 0
  %687 = extractvalue { double, double } %685, 1
  store double %687, ptr %66, align 8, !tbaa !14
  %688 = load double, ptr %66, align 8, !tbaa !14
  %689 = fcmp oge double %688, 0.000000e+00
  br i1 %689, label %690, label %692

690:                                              ; preds = %683
  %691 = load double, ptr %66, align 8, !tbaa !14
  br label %695

692:                                              ; preds = %683
  %693 = load double, ptr %66, align 8, !tbaa !14
  %694 = fneg double %693
  br label %695

695:                                              ; preds = %692, %690
  %696 = phi double [ %691, %690 ], [ %694, %692 ]
  %697 = fadd double %684, %696
  %698 = load ptr, ptr %41, align 8, !tbaa !5
  %699 = load i32, ptr %62, align 4, !tbaa !9
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds %struct.doublecomplex, ptr %698, i64 %700
  %702 = getelementptr inbounds %struct.doublecomplex, ptr %701, i32 0, i32 0
  %703 = load double, ptr %702, align 8, !tbaa !11
  store double %703, ptr %67, align 8, !tbaa !14
  %704 = load double, ptr %67, align 8, !tbaa !14
  %705 = fcmp oge double %704, 0.000000e+00
  br i1 %705, label %706, label %708

706:                                              ; preds = %695
  %707 = load double, ptr %67, align 8, !tbaa !14
  br label %711

708:                                              ; preds = %695
  %709 = load double, ptr %67, align 8, !tbaa !14
  %710 = fneg double %709
  br label %711

711:                                              ; preds = %708, %706
  %712 = phi double [ %707, %706 ], [ %710, %708 ]
  %713 = load ptr, ptr %41, align 8, !tbaa !5
  %714 = load ptr, ptr %38, align 8, !tbaa !5
  %715 = load i32, ptr %714, align 4, !tbaa !9
  %716 = load i32, ptr %55, align 4, !tbaa !9
  %717 = mul nsw i32 %715, %716
  %718 = add nsw i32 %717, 1
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %719
  %721 = call { double, double } @Cd(ptr noundef %720)
  %722 = extractvalue { double, double } %721, 0
  %723 = extractvalue { double, double } %721, 1
  store double %723, ptr %68, align 8, !tbaa !14
  %724 = load double, ptr %68, align 8, !tbaa !14
  %725 = fcmp oge double %724, 0.000000e+00
  br i1 %725, label %726, label %728

726:                                              ; preds = %711
  %727 = load double, ptr %68, align 8, !tbaa !14
  br label %731

728:                                              ; preds = %711
  %729 = load double, ptr %68, align 8, !tbaa !14
  %730 = fneg double %729
  br label %731

731:                                              ; preds = %728, %726
  %732 = phi double [ %727, %726 ], [ %730, %728 ]
  %733 = fadd double %712, %732
  %734 = fmul double %697, %733
  %735 = load double, ptr %69, align 8, !tbaa !14
  %736 = load double, ptr %70, align 8, !tbaa !14
  %737 = fcmp oge double %735, %736
  br i1 %737, label %738, label %740

738:                                              ; preds = %731
  %739 = load double, ptr %69, align 8, !tbaa !14
  br label %742

740:                                              ; preds = %731
  %741 = load double, ptr %70, align 8, !tbaa !14
  br label %742

742:                                              ; preds = %740, %738
  %743 = phi double [ %739, %738 ], [ %741, %740 ]
  %744 = fcmp ole double %734, %743
  br i1 %744, label %745, label %749

745:                                              ; preds = %742
  %746 = load ptr, ptr %38, align 8, !tbaa !5
  %747 = load i32, ptr %746, align 4, !tbaa !9
  %748 = add nsw i32 %747, -1
  store i32 %748, ptr %746, align 4, !tbaa !9
  br label %764

749:                                              ; preds = %742
  %750 = load ptr, ptr %38, align 8, !tbaa !5
  %751 = load i32, ptr %750, align 4, !tbaa !9
  store i32 %751, ptr %77, align 4, !tbaa !9
  %752 = load ptr, ptr %44, align 8, !tbaa !5
  %753 = load i32, ptr %54, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds %struct.doublecomplex, ptr %752, i64 %754
  %756 = load ptr, ptr %45, align 8, !tbaa !5
  %757 = load ptr, ptr %41, align 8, !tbaa !5
  %758 = load i32, ptr %56, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %757, i64 %759
  %761 = load ptr, ptr %42, align 8, !tbaa !5
  call void @ztrexc_(ptr noundef @.str.8, ptr noundef %86, ptr noundef %755, ptr noundef %756, ptr noundef %760, ptr noundef %761, ptr noundef %77, ptr noundef %78, ptr noundef %75)
  %762 = load i32, ptr %78, align 4, !tbaa !9
  %763 = add nsw i32 %762, 1
  store i32 %763, ptr %78, align 4, !tbaa !9
  br label %764

764:                                              ; preds = %749, %745
  br label %765

765:                                              ; preds = %764
  %766 = load i32, ptr %94, align 4, !tbaa !9
  %767 = add nsw i32 %766, 1
  store i32 %767, ptr %94, align 4, !tbaa !9
  br label %587, !llvm.loop !16

768:                                              ; preds = %587
  %769 = load ptr, ptr %38, align 8, !tbaa !5
  %770 = load i32, ptr %769, align 4, !tbaa !9
  %771 = icmp eq i32 %770, 0
  br i1 %771, label %772, label %775

772:                                              ; preds = %768
  %773 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  store double 0.000000e+00, ptr %773, align 8, !tbaa !11
  %774 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  store double 0.000000e+00, ptr %774, align 8, !tbaa !15
  br label %775

775:                                              ; preds = %772, %768
  %776 = load ptr, ptr %38, align 8, !tbaa !5
  %777 = load i32, ptr %776, align 4, !tbaa !9
  %778 = load i32, ptr %86, align 4, !tbaa !9
  %779 = icmp slt i32 %777, %778
  br i1 %779, label %780, label %910

780:                                              ; preds = %775
  %781 = load ptr, ptr %38, align 8, !tbaa !5
  %782 = load i32, ptr %781, align 4, !tbaa !9
  store i32 %782, ptr %61, align 4, !tbaa !9
  %783 = load i32, ptr %84, align 4, !tbaa !9
  %784 = add nsw i32 %783, 1
  store i32 %784, ptr %81, align 4, !tbaa !9
  br label %785

785:                                              ; preds = %906, %780
  %786 = load i32, ptr %81, align 4, !tbaa !9
  %787 = load i32, ptr %61, align 4, !tbaa !9
  %788 = icmp sle i32 %786, %787
  br i1 %788, label %789, label %909

789:                                              ; preds = %785
  %790 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %790, ptr %77, align 4, !tbaa !9
  %791 = load ptr, ptr %38, align 8, !tbaa !5
  %792 = load i32, ptr %791, align 4, !tbaa !9
  store i32 %792, ptr %62, align 4, !tbaa !9
  %793 = load i32, ptr %81, align 4, !tbaa !9
  %794 = add nsw i32 %793, 1
  store i32 %794, ptr %82, align 4, !tbaa !9
  br label %795

795:                                              ; preds = %886, %789
  %796 = load i32, ptr %82, align 4, !tbaa !9
  %797 = load i32, ptr %62, align 4, !tbaa !9
  %798 = icmp sle i32 %796, %797
  br i1 %798, label %799, label %889

799:                                              ; preds = %795
  %800 = load i32, ptr %82, align 4, !tbaa !9
  %801 = load i32, ptr %82, align 4, !tbaa !9
  %802 = load i32, ptr %53, align 4, !tbaa !9
  %803 = mul nsw i32 %801, %802
  %804 = add nsw i32 %800, %803
  store i32 %804, ptr %63, align 4, !tbaa !9
  %805 = load i32, ptr %77, align 4, !tbaa !9
  %806 = load i32, ptr %77, align 4, !tbaa !9
  %807 = load i32, ptr %53, align 4, !tbaa !9
  %808 = mul nsw i32 %806, %807
  %809 = add nsw i32 %805, %808
  store i32 %809, ptr %64, align 4, !tbaa !9
  %810 = load ptr, ptr %44, align 8, !tbaa !5
  %811 = load i32, ptr %63, align 4, !tbaa !9
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %810, i64 %812
  %814 = getelementptr inbounds %struct.doublecomplex, ptr %813, i32 0, i32 0
  %815 = load double, ptr %814, align 8, !tbaa !11
  store double %815, ptr %65, align 8, !tbaa !14
  %816 = load double, ptr %65, align 8, !tbaa !14
  %817 = fcmp oge double %816, 0.000000e+00
  br i1 %817, label %818, label %820

818:                                              ; preds = %799
  %819 = load double, ptr %65, align 8, !tbaa !14
  br label %823

820:                                              ; preds = %799
  %821 = load double, ptr %65, align 8, !tbaa !14
  %822 = fneg double %821
  br label %823

823:                                              ; preds = %820, %818
  %824 = phi double [ %819, %818 ], [ %822, %820 ]
  %825 = load ptr, ptr %44, align 8, !tbaa !5
  %826 = load i32, ptr %82, align 4, !tbaa !9
  %827 = load i32, ptr %82, align 4, !tbaa !9
  %828 = load i32, ptr %53, align 4, !tbaa !9
  %829 = mul nsw i32 %827, %828
  %830 = add nsw i32 %826, %829
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds %struct.doublecomplex, ptr %825, i64 %831
  %833 = call { double, double } @Cd(ptr noundef %832)
  %834 = extractvalue { double, double } %833, 0
  %835 = extractvalue { double, double } %833, 1
  store double %835, ptr %66, align 8, !tbaa !14
  %836 = load double, ptr %66, align 8, !tbaa !14
  %837 = fcmp oge double %836, 0.000000e+00
  br i1 %837, label %838, label %840

838:                                              ; preds = %823
  %839 = load double, ptr %66, align 8, !tbaa !14
  br label %843

840:                                              ; preds = %823
  %841 = load double, ptr %66, align 8, !tbaa !14
  %842 = fneg double %841
  br label %843

843:                                              ; preds = %840, %838
  %844 = phi double [ %839, %838 ], [ %842, %840 ]
  %845 = fadd double %824, %844
  %846 = load ptr, ptr %44, align 8, !tbaa !5
  %847 = load i32, ptr %64, align 4, !tbaa !9
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds %struct.doublecomplex, ptr %846, i64 %848
  %850 = getelementptr inbounds %struct.doublecomplex, ptr %849, i32 0, i32 0
  %851 = load double, ptr %850, align 8, !tbaa !11
  store double %851, ptr %67, align 8, !tbaa !14
  %852 = load double, ptr %67, align 8, !tbaa !14
  %853 = fcmp oge double %852, 0.000000e+00
  br i1 %853, label %854, label %856

854:                                              ; preds = %843
  %855 = load double, ptr %67, align 8, !tbaa !14
  br label %859

856:                                              ; preds = %843
  %857 = load double, ptr %67, align 8, !tbaa !14
  %858 = fneg double %857
  br label %859

859:                                              ; preds = %856, %854
  %860 = phi double [ %855, %854 ], [ %858, %856 ]
  %861 = load ptr, ptr %44, align 8, !tbaa !5
  %862 = load i32, ptr %77, align 4, !tbaa !9
  %863 = load i32, ptr %77, align 4, !tbaa !9
  %864 = load i32, ptr %53, align 4, !tbaa !9
  %865 = mul nsw i32 %863, %864
  %866 = add nsw i32 %862, %865
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %861, i64 %867
  %869 = call { double, double } @Cd(ptr noundef %868)
  %870 = extractvalue { double, double } %869, 0
  %871 = extractvalue { double, double } %869, 1
  store double %871, ptr %68, align 8, !tbaa !14
  %872 = load double, ptr %68, align 8, !tbaa !14
  %873 = fcmp oge double %872, 0.000000e+00
  br i1 %873, label %874, label %876

874:                                              ; preds = %859
  %875 = load double, ptr %68, align 8, !tbaa !14
  br label %879

876:                                              ; preds = %859
  %877 = load double, ptr %68, align 8, !tbaa !14
  %878 = fneg double %877
  br label %879

879:                                              ; preds = %876, %874
  %880 = phi double [ %875, %874 ], [ %878, %876 ]
  %881 = fadd double %860, %880
  %882 = fcmp ogt double %845, %881
  br i1 %882, label %883, label %885

883:                                              ; preds = %879
  %884 = load i32, ptr %82, align 4, !tbaa !9
  store i32 %884, ptr %77, align 4, !tbaa !9
  br label %885

885:                                              ; preds = %883, %879
  br label %886

886:                                              ; preds = %885
  %887 = load i32, ptr %82, align 4, !tbaa !9
  %888 = add nsw i32 %887, 1
  store i32 %888, ptr %82, align 4, !tbaa !9
  br label %795, !llvm.loop !18

889:                                              ; preds = %795
  %890 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %890, ptr %78, align 4, !tbaa !9
  %891 = load i32, ptr %77, align 4, !tbaa !9
  %892 = load i32, ptr %78, align 4, !tbaa !9
  %893 = icmp ne i32 %891, %892
  br i1 %893, label %894, label %905

894:                                              ; preds = %889
  %895 = load ptr, ptr %44, align 8, !tbaa !5
  %896 = load i32, ptr %54, align 4, !tbaa !9
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %895, i64 %897
  %899 = load ptr, ptr %45, align 8, !tbaa !5
  %900 = load ptr, ptr %41, align 8, !tbaa !5
  %901 = load i32, ptr %56, align 4, !tbaa !9
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %900, i64 %902
  %904 = load ptr, ptr %42, align 8, !tbaa !5
  call void @ztrexc_(ptr noundef @.str.8, ptr noundef %86, ptr noundef %898, ptr noundef %899, ptr noundef %903, ptr noundef %904, ptr noundef %77, ptr noundef %78, ptr noundef %75)
  br label %905

905:                                              ; preds = %894, %889
  br label %906

906:                                              ; preds = %905
  %907 = load i32, ptr %81, align 4, !tbaa !9
  %908 = add nsw i32 %907, 1
  store i32 %908, ptr %81, align 4, !tbaa !9
  br label %785, !llvm.loop !19

909:                                              ; preds = %785
  br label %910

910:                                              ; preds = %909, %775
  %911 = load i32, ptr %86, align 4, !tbaa !9
  store i32 %911, ptr %61, align 4, !tbaa !9
  %912 = load i32, ptr %84, align 4, !tbaa !9
  %913 = add nsw i32 %912, 1
  store i32 %913, ptr %81, align 4, !tbaa !9
  br label %914

914:                                              ; preds = %950, %910
  %915 = load i32, ptr %81, align 4, !tbaa !9
  %916 = load i32, ptr %61, align 4, !tbaa !9
  %917 = icmp sle i32 %915, %916
  br i1 %917, label %918, label %953

918:                                              ; preds = %914
  %919 = load i32, ptr %85, align 4, !tbaa !9
  %920 = load i32, ptr %81, align 4, !tbaa !9
  %921 = add nsw i32 %919, %920
  %922 = sub nsw i32 %921, 1
  store i32 %922, ptr %62, align 4, !tbaa !9
  %923 = load i32, ptr %81, align 4, !tbaa !9
  %924 = load i32, ptr %81, align 4, !tbaa !9
  %925 = load i32, ptr %53, align 4, !tbaa !9
  %926 = mul nsw i32 %924, %925
  %927 = add nsw i32 %923, %926
  store i32 %927, ptr %63, align 4, !tbaa !9
  %928 = load ptr, ptr %44, align 8, !tbaa !5
  %929 = load i32, ptr %63, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds %struct.doublecomplex, ptr %928, i64 %930
  %932 = getelementptr inbounds %struct.doublecomplex, ptr %931, i32 0, i32 0
  %933 = load double, ptr %932, align 8, !tbaa !11
  %934 = load ptr, ptr %40, align 8, !tbaa !5
  %935 = load i32, ptr %62, align 4, !tbaa !9
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds %struct.doublecomplex, ptr %934, i64 %936
  %938 = getelementptr inbounds %struct.doublecomplex, ptr %937, i32 0, i32 0
  store double %933, ptr %938, align 8, !tbaa !11
  %939 = load ptr, ptr %44, align 8, !tbaa !5
  %940 = load i32, ptr %63, align 4, !tbaa !9
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds %struct.doublecomplex, ptr %939, i64 %941
  %943 = getelementptr inbounds %struct.doublecomplex, ptr %942, i32 0, i32 1
  %944 = load double, ptr %943, align 8, !tbaa !15
  %945 = load ptr, ptr %40, align 8, !tbaa !5
  %946 = load i32, ptr %62, align 4, !tbaa !9
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %945, i64 %947
  %949 = getelementptr inbounds %struct.doublecomplex, ptr %948, i32 0, i32 1
  store double %944, ptr %949, align 8, !tbaa !15
  br label %950

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

953:                                              ; preds = %914
  %954 = load ptr, ptr %38, align 8, !tbaa !5
  %955 = load i32, ptr %954, align 4, !tbaa !9
  %956 = load i32, ptr %86, align 4, !tbaa !9
  %957 = icmp slt i32 %955, %956
  br i1 %957, label %966, label %958

958:                                              ; preds = %953
  %959 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %960 = load double, ptr %959, align 8, !tbaa !11
  %961 = fcmp oeq double %960, 0.000000e+00
  br i1 %961, label %962, label %1496

962:                                              ; preds = %958
  %963 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  %964 = load double, ptr %963, align 8, !tbaa !15
  %965 = fcmp oeq double %964, 0.000000e+00
  br i1 %965, label %966, label %1496

966:                                              ; preds = %962, %953
  %967 = load ptr, ptr %38, align 8, !tbaa !5
  %968 = load i32, ptr %967, align 4, !tbaa !9
  %969 = icmp sgt i32 %968, 1
  br i1 %969, label %970, label %1117

970:                                              ; preds = %966
  %971 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %972 = load double, ptr %971, align 8, !tbaa !11
  %973 = fcmp une double %972, 0.000000e+00
  br i1 %973, label %978, label %974

974:                                              ; preds = %970
  %975 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  %976 = load double, ptr %975, align 8, !tbaa !15
  %977 = fcmp une double %976, 0.000000e+00
  br i1 %977, label %978, label %1117

978:                                              ; preds = %974, %970
  %979 = load ptr, ptr %38, align 8, !tbaa !5
  %980 = load ptr, ptr %41, align 8, !tbaa !5
  %981 = load i32, ptr %56, align 4, !tbaa !9
  %982 = sext i32 %981 to i64
  %983 = getelementptr inbounds %struct.doublecomplex, ptr %980, i64 %982
  %984 = load ptr, ptr %42, align 8, !tbaa !5
  %985 = load ptr, ptr %49, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.doublecomplex, ptr %985, i64 1
  call void @zcopy_(ptr noundef %979, ptr noundef %983, ptr noundef %984, ptr noundef %986, ptr noundef @c__1)
  %987 = load ptr, ptr %38, align 8, !tbaa !5
  %988 = load i32, ptr %987, align 4, !tbaa !9
  store i32 %988, ptr %61, align 4, !tbaa !9
  store i32 1, ptr %81, align 4, !tbaa !9
  br label %989

989:                                              ; preds = %1020, %978
  %990 = load i32, ptr %81, align 4, !tbaa !9
  %991 = load i32, ptr %61, align 4, !tbaa !9
  %992 = icmp sle i32 %990, %991
  br i1 %992, label %993, label %1023

993:                                              ; preds = %989
  %994 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %994, ptr %62, align 4, !tbaa !9
  %995 = load ptr, ptr %49, align 8, !tbaa !5
  %996 = load i32, ptr %81, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds %struct.doublecomplex, ptr %995, i64 %997
  %999 = call { double, double } @Cd(ptr noundef %998)
  %1000 = extractvalue { double, double } %999, 0
  %1001 = extractvalue { double, double } %999, 1
  %1002 = fneg double %1001
  %1003 = call ptr @_pCd(ptr noundef %71)
  %1004 = getelementptr inbounds { double, double }, ptr %1003, i32 0, i32 0
  %1005 = getelementptr inbounds { double, double }, ptr %1003, i32 0, i32 1
  store double %1000, ptr %1004, align 8
  store double %1002, ptr %1005, align 8
  %1006 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  %1007 = load double, ptr %1006, align 8, !tbaa !11
  %1008 = load ptr, ptr %49, align 8, !tbaa !5
  %1009 = load i32, ptr %62, align 4, !tbaa !9
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds %struct.doublecomplex, ptr %1008, i64 %1010
  %1012 = getelementptr inbounds %struct.doublecomplex, ptr %1011, i32 0, i32 0
  store double %1007, ptr %1012, align 8, !tbaa !11
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  %1014 = load double, ptr %1013, align 8, !tbaa !15
  %1015 = load ptr, ptr %49, align 8, !tbaa !5
  %1016 = load i32, ptr %62, align 4, !tbaa !9
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds %struct.doublecomplex, ptr %1015, i64 %1017
  %1019 = getelementptr inbounds %struct.doublecomplex, ptr %1018, i32 0, i32 1
  store double %1014, ptr %1019, align 8, !tbaa !15
  br label %1020

1020:                                             ; preds = %993
  %1021 = load i32, ptr %81, align 4, !tbaa !9
  %1022 = add nsw i32 %1021, 1
  store i32 %1022, ptr %81, align 4, !tbaa !9
  br label %989, !llvm.loop !21

1023:                                             ; preds = %989
  %1024 = load ptr, ptr %49, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.doublecomplex, ptr %1024, i64 1
  %1026 = getelementptr inbounds %struct.doublecomplex, ptr %1025, i32 0, i32 0
  %1027 = load double, ptr %1026, align 8, !tbaa !11
  %1028 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 0
  store double %1027, ptr %1028, align 8, !tbaa !11
  %1029 = load ptr, ptr %49, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.doublecomplex, ptr %1029, i64 1
  %1031 = getelementptr inbounds %struct.doublecomplex, ptr %1030, i32 0, i32 1
  %1032 = load double, ptr %1031, align 8, !tbaa !15
  %1033 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 1
  store double %1032, ptr %1033, align 8, !tbaa !15
  %1034 = load ptr, ptr %38, align 8, !tbaa !5
  %1035 = load ptr, ptr %49, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.doublecomplex, ptr %1035, i64 2
  call void @zlarfg_(ptr noundef %1034, ptr noundef %73, ptr noundef %1036, ptr noundef @c__1, ptr noundef %93)
  %1037 = load ptr, ptr %49, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.doublecomplex, ptr %1037, i64 1
  %1039 = getelementptr inbounds %struct.doublecomplex, ptr %1038, i32 0, i32 0
  store double 1.000000e+00, ptr %1039, align 8, !tbaa !11
  %1040 = load ptr, ptr %49, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.doublecomplex, ptr %1040, i64 1
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %1041, i32 0, i32 1
  store double 0.000000e+00, ptr %1042, align 8, !tbaa !15
  %1043 = load i32, ptr %86, align 4, !tbaa !9
  %1044 = sub nsw i32 %1043, 2
  store i32 %1044, ptr %61, align 4, !tbaa !9
  %1045 = load i32, ptr %86, align 4, !tbaa !9
  %1046 = sub nsw i32 %1045, 2
  store i32 %1046, ptr %62, align 4, !tbaa !9
  %1047 = load ptr, ptr %44, align 8, !tbaa !5
  %1048 = load i32, ptr %53, align 4, !tbaa !9
  %1049 = add nsw i32 %1048, 3
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %1047, i64 %1050
  %1052 = load ptr, ptr %45, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.9, ptr noundef %61, ptr noundef %62, ptr noundef @c_b1, ptr noundef @c_b1, ptr noundef %1051, ptr noundef %1052)
  %1053 = call { double, double } @Cd(ptr noundef %93)
  %1054 = extractvalue { double, double } %1053, 0
  %1055 = extractvalue { double, double } %1053, 1
  %1056 = fneg double %1055
  %1057 = call ptr @_pCd(ptr noundef %71)
  %1058 = getelementptr inbounds { double, double }, ptr %1057, i32 0, i32 0
  %1059 = getelementptr inbounds { double, double }, ptr %1057, i32 0, i32 1
  store double %1054, ptr %1058, align 8
  store double %1056, ptr %1059, align 8
  %1060 = load ptr, ptr %38, align 8, !tbaa !5
  %1061 = load ptr, ptr %49, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.doublecomplex, ptr %1061, i64 1
  %1063 = load ptr, ptr %44, align 8, !tbaa !5
  %1064 = load i32, ptr %54, align 4, !tbaa !9
  %1065 = sext i32 %1064 to i64
  %1066 = getelementptr inbounds %struct.doublecomplex, ptr %1063, i64 %1065
  %1067 = load ptr, ptr %45, align 8, !tbaa !5
  %1068 = load ptr, ptr %49, align 8, !tbaa !5
  %1069 = load i32, ptr %86, align 4, !tbaa !9
  %1070 = add nsw i32 %1069, 1
  %1071 = sext i32 %1070 to i64
  %1072 = getelementptr inbounds %struct.doublecomplex, ptr %1068, i64 %1071
  call void @zlarf_(ptr noundef @.str.9, ptr noundef %1060, ptr noundef %86, ptr noundef %1062, ptr noundef @c__1, ptr noundef %71, ptr noundef %1066, ptr noundef %1067, ptr noundef %1072)
  %1073 = load ptr, ptr %38, align 8, !tbaa !5
  %1074 = load ptr, ptr %38, align 8, !tbaa !5
  %1075 = load ptr, ptr %49, align 8, !tbaa !5
  %1076 = getelementptr inbounds %struct.doublecomplex, ptr %1075, i64 1
  %1077 = load ptr, ptr %44, align 8, !tbaa !5
  %1078 = load i32, ptr %54, align 4, !tbaa !9
  %1079 = sext i32 %1078 to i64
  %1080 = getelementptr inbounds %struct.doublecomplex, ptr %1077, i64 %1079
  %1081 = load ptr, ptr %45, align 8, !tbaa !5
  %1082 = load ptr, ptr %49, align 8, !tbaa !5
  %1083 = load i32, ptr %86, align 4, !tbaa !9
  %1084 = add nsw i32 %1083, 1
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds %struct.doublecomplex, ptr %1082, i64 %1085
  call void @zlarf_(ptr noundef @.str, ptr noundef %1073, ptr noundef %1074, ptr noundef %1076, ptr noundef @c__1, ptr noundef %93, ptr noundef %1080, ptr noundef %1081, ptr noundef %1086)
  %1087 = load ptr, ptr %38, align 8, !tbaa !5
  %1088 = load ptr, ptr %49, align 8, !tbaa !5
  %1089 = getelementptr inbounds %struct.doublecomplex, ptr %1088, i64 1
  %1090 = load ptr, ptr %41, align 8, !tbaa !5
  %1091 = load i32, ptr %56, align 4, !tbaa !9
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds %struct.doublecomplex, ptr %1090, i64 %1092
  %1094 = load ptr, ptr %42, align 8, !tbaa !5
  %1095 = load ptr, ptr %49, align 8, !tbaa !5
  %1096 = load i32, ptr %86, align 4, !tbaa !9
  %1097 = add nsw i32 %1096, 1
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds %struct.doublecomplex, ptr %1095, i64 %1098
  call void @zlarf_(ptr noundef @.str, ptr noundef %86, ptr noundef %1087, ptr noundef %1089, ptr noundef @c__1, ptr noundef %93, ptr noundef %1093, ptr noundef %1094, ptr noundef %1099)
  %1100 = load ptr, ptr %50, align 8, !tbaa !5
  %1101 = load i32, ptr %1100, align 4, !tbaa !9
  %1102 = load i32, ptr %86, align 4, !tbaa !9
  %1103 = sub nsw i32 %1101, %1102
  store i32 %1103, ptr %61, align 4, !tbaa !9
  %1104 = load ptr, ptr %38, align 8, !tbaa !5
  %1105 = load ptr, ptr %44, align 8, !tbaa !5
  %1106 = load i32, ptr %54, align 4, !tbaa !9
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds %struct.doublecomplex, ptr %1105, i64 %1107
  %1109 = load ptr, ptr %45, align 8, !tbaa !5
  %1110 = load ptr, ptr %49, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.doublecomplex, ptr %1110, i64 1
  %1112 = load ptr, ptr %49, align 8, !tbaa !5
  %1113 = load i32, ptr %86, align 4, !tbaa !9
  %1114 = add nsw i32 %1113, 1
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds %struct.doublecomplex, ptr %1112, i64 %1115
  call void @zgehrd_(ptr noundef %86, ptr noundef @c__1, ptr noundef %1104, ptr noundef %1108, ptr noundef %1109, ptr noundef %1111, ptr noundef %1116, ptr noundef %61, ptr noundef %75)
  br label %1117

1117:                                             ; preds = %1023, %974, %966
  %1118 = load i32, ptr %85, align 4, !tbaa !9
  %1119 = icmp sgt i32 %1118, 1
  br i1 %1119, label %1120, label %1176

1120:                                             ; preds = %1117
  %1121 = load i32, ptr %85, align 4, !tbaa !9
  %1122 = load i32, ptr %85, align 4, !tbaa !9
  %1123 = sub nsw i32 %1122, 1
  %1124 = load i32, ptr %51, align 4, !tbaa !9
  %1125 = mul nsw i32 %1123, %1124
  %1126 = add nsw i32 %1121, %1125
  store i32 %1126, ptr %61, align 4, !tbaa !9
  %1127 = load ptr, ptr %41, align 8, !tbaa !5
  %1128 = load i32, ptr %55, align 4, !tbaa !9
  %1129 = add nsw i32 %1128, 1
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds %struct.doublecomplex, ptr %1127, i64 %1130
  %1132 = call { double, double } @Cd(ptr noundef %1131)
  %1133 = extractvalue { double, double } %1132, 0
  %1134 = extractvalue { double, double } %1132, 1
  %1135 = fneg double %1134
  %1136 = call ptr @_pCd(ptr noundef %72)
  %1137 = getelementptr inbounds { double, double }, ptr %1136, i32 0, i32 0
  %1138 = getelementptr inbounds { double, double }, ptr %1136, i32 0, i32 1
  store double %1133, ptr %1137, align 8
  store double %1135, ptr %1138, align 8
  %1139 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %1140 = load double, ptr %1139, align 8, !tbaa !11
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %1142 = load double, ptr %1141, align 8, !tbaa !11
  %1143 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  %1144 = load double, ptr %1143, align 8, !tbaa !15
  %1145 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  %1146 = load double, ptr %1145, align 8, !tbaa !15
  %1147 = fmul double %1144, %1146
  %1148 = fneg double %1147
  %1149 = call double @llvm.fmuladd.f64(double %1140, double %1142, double %1148)
  %1150 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  store double %1149, ptr %1150, align 8, !tbaa !11
  %1151 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %1152 = load double, ptr %1151, align 8, !tbaa !11
  %1153 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  %1154 = load double, ptr %1153, align 8, !tbaa !15
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  %1156 = load double, ptr %1155, align 8, !tbaa !15
  %1157 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %1158 = load double, ptr %1157, align 8, !tbaa !11
  %1159 = fmul double %1156, %1158
  %1160 = call double @llvm.fmuladd.f64(double %1152, double %1154, double %1159)
  %1161 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  store double %1160, ptr %1161, align 8, !tbaa !15
  %1162 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  %1163 = load double, ptr %1162, align 8, !tbaa !11
  %1164 = load ptr, ptr %32, align 8, !tbaa !5
  %1165 = load i32, ptr %61, align 4, !tbaa !9
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds %struct.doublecomplex, ptr %1164, i64 %1166
  %1168 = getelementptr inbounds %struct.doublecomplex, ptr %1167, i32 0, i32 0
  store double %1163, ptr %1168, align 8, !tbaa !11
  %1169 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  %1170 = load double, ptr %1169, align 8, !tbaa !15
  %1171 = load ptr, ptr %32, align 8, !tbaa !5
  %1172 = load i32, ptr %61, align 4, !tbaa !9
  %1173 = sext i32 %1172 to i64
  %1174 = getelementptr inbounds %struct.doublecomplex, ptr %1171, i64 %1173
  %1175 = getelementptr inbounds %struct.doublecomplex, ptr %1174, i32 0, i32 1
  store double %1170, ptr %1175, align 8, !tbaa !15
  br label %1176

1176:                                             ; preds = %1120, %1117
  %1177 = load ptr, ptr %44, align 8, !tbaa !5
  %1178 = load i32, ptr %54, align 4, !tbaa !9
  %1179 = sext i32 %1178 to i64
  %1180 = getelementptr inbounds %struct.doublecomplex, ptr %1177, i64 %1179
  %1181 = load ptr, ptr %45, align 8, !tbaa !5
  %1182 = load ptr, ptr %32, align 8, !tbaa !5
  %1183 = load i32, ptr %85, align 4, !tbaa !9
  %1184 = load i32, ptr %85, align 4, !tbaa !9
  %1185 = load i32, ptr %51, align 4, !tbaa !9
  %1186 = mul nsw i32 %1184, %1185
  %1187 = add nsw i32 %1183, %1186
  %1188 = sext i32 %1187 to i64
  %1189 = getelementptr inbounds %struct.doublecomplex, ptr %1182, i64 %1188
  %1190 = load ptr, ptr %33, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.4, ptr noundef %86, ptr noundef %86, ptr noundef %1180, ptr noundef %1181, ptr noundef %1189, ptr noundef %1190)
  %1191 = load i32, ptr %86, align 4, !tbaa !9
  %1192 = sub nsw i32 %1191, 1
  store i32 %1192, ptr %61, align 4, !tbaa !9
  %1193 = load ptr, ptr %45, align 8, !tbaa !5
  %1194 = load i32, ptr %1193, align 4, !tbaa !9
  %1195 = add nsw i32 %1194, 1
  store i32 %1195, ptr %62, align 4, !tbaa !9
  %1196 = load ptr, ptr %33, align 8, !tbaa !5
  %1197 = load i32, ptr %1196, align 4, !tbaa !9
  %1198 = add nsw i32 %1197, 1
  store i32 %1198, ptr %63, align 4, !tbaa !9
  %1199 = load ptr, ptr %44, align 8, !tbaa !5
  %1200 = load i32, ptr %53, align 4, !tbaa !9
  %1201 = add nsw i32 %1200, 2
  %1202 = sext i32 %1201 to i64
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %1199, i64 %1202
  %1204 = load ptr, ptr %32, align 8, !tbaa !5
  %1205 = load i32, ptr %85, align 4, !tbaa !9
  %1206 = add nsw i32 %1205, 1
  %1207 = load i32, ptr %85, align 4, !tbaa !9
  %1208 = load i32, ptr %51, align 4, !tbaa !9
  %1209 = mul nsw i32 %1207, %1208
  %1210 = add nsw i32 %1206, %1209
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds %struct.doublecomplex, ptr %1204, i64 %1211
  call void @zcopy_(ptr noundef %61, ptr noundef %1203, ptr noundef %62, ptr noundef %1212, ptr noundef %63)
  %1213 = load ptr, ptr %38, align 8, !tbaa !5
  %1214 = load i32, ptr %1213, align 4, !tbaa !9
  %1215 = icmp sgt i32 %1214, 1
  br i1 %1215, label %1216, label %1248

1216:                                             ; preds = %1176
  %1217 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 0
  %1218 = load double, ptr %1217, align 8, !tbaa !11
  %1219 = fcmp une double %1218, 0.000000e+00
  br i1 %1219, label %1224, label %1220

1220:                                             ; preds = %1216
  %1221 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 0, i32 1
  %1222 = load double, ptr %1221, align 8, !tbaa !15
  %1223 = fcmp une double %1222, 0.000000e+00
  br i1 %1223, label %1224, label %1248

1224:                                             ; preds = %1220, %1216
  %1225 = load ptr, ptr %50, align 8, !tbaa !5
  %1226 = load i32, ptr %1225, align 4, !tbaa !9
  %1227 = load i32, ptr %86, align 4, !tbaa !9
  %1228 = sub nsw i32 %1226, %1227
  store i32 %1228, ptr %61, align 4, !tbaa !9
  %1229 = load ptr, ptr %38, align 8, !tbaa !5
  %1230 = load ptr, ptr %38, align 8, !tbaa !5
  %1231 = load ptr, ptr %44, align 8, !tbaa !5
  %1232 = load i32, ptr %54, align 4, !tbaa !9
  %1233 = sext i32 %1232 to i64
  %1234 = getelementptr inbounds %struct.doublecomplex, ptr %1231, i64 %1233
  %1235 = load ptr, ptr %45, align 8, !tbaa !5
  %1236 = load ptr, ptr %49, align 8, !tbaa !5
  %1237 = getelementptr inbounds %struct.doublecomplex, ptr %1236, i64 1
  %1238 = load ptr, ptr %41, align 8, !tbaa !5
  %1239 = load i32, ptr %56, align 4, !tbaa !9
  %1240 = sext i32 %1239 to i64
  %1241 = getelementptr inbounds %struct.doublecomplex, ptr %1238, i64 %1240
  %1242 = load ptr, ptr %42, align 8, !tbaa !5
  %1243 = load ptr, ptr %49, align 8, !tbaa !5
  %1244 = load i32, ptr %86, align 4, !tbaa !9
  %1245 = add nsw i32 %1244, 1
  %1246 = sext i32 %1245 to i64
  %1247 = getelementptr inbounds %struct.doublecomplex, ptr %1243, i64 %1246
  call void @zunmhr_(ptr noundef @.str, ptr noundef @.str.1, ptr noundef %86, ptr noundef %1229, ptr noundef @c__1, ptr noundef %1230, ptr noundef %1234, ptr noundef %1235, ptr noundef %1237, ptr noundef %1241, ptr noundef %1242, ptr noundef %1247, ptr noundef %61, ptr noundef %75)
  br label %1248

1248:                                             ; preds = %1224, %1220, %1176
  %1249 = load ptr, ptr %26, align 8, !tbaa !5
  %1250 = load i32, ptr %1249, align 4, !tbaa !9
  %1251 = icmp ne i32 %1250, 0
  br i1 %1251, label %1252, label %1253

1252:                                             ; preds = %1248
  store i32 1, ptr %79, align 4, !tbaa !9
  br label %1256

1253:                                             ; preds = %1248
  %1254 = load ptr, ptr %29, align 8, !tbaa !5
  %1255 = load i32, ptr %1254, align 4, !tbaa !9
  store i32 %1255, ptr %79, align 4, !tbaa !9
  br label %1256

1256:                                             ; preds = %1253, %1252
  %1257 = load i32, ptr %85, align 4, !tbaa !9
  %1258 = sub nsw i32 %1257, 1
  store i32 %1258, ptr %61, align 4, !tbaa !9
  %1259 = load ptr, ptr %46, align 8, !tbaa !5
  %1260 = load i32, ptr %1259, align 4, !tbaa !9
  store i32 %1260, ptr %62, align 4, !tbaa !9
  %1261 = load i32, ptr %79, align 4, !tbaa !9
  store i32 %1261, ptr %80, align 4, !tbaa !9
  br label %1262

1262:                                             ; preds = %1326, %1256
  %1263 = load i32, ptr %62, align 4, !tbaa !9
  %1264 = icmp slt i32 %1263, 0
  br i1 %1264, label %1265, label %1270

1265:                                             ; preds = %1262
  %1266 = load i32, ptr %80, align 4, !tbaa !9
  %1267 = load i32, ptr %61, align 4, !tbaa !9
  %1268 = icmp sge i32 %1266, %1267
  %1269 = zext i1 %1268 to i32
  br label %1275

1270:                                             ; preds = %1262
  %1271 = load i32, ptr %80, align 4, !tbaa !9
  %1272 = load i32, ptr %61, align 4, !tbaa !9
  %1273 = icmp sle i32 %1271, %1272
  %1274 = zext i1 %1273 to i32
  br label %1275

1275:                                             ; preds = %1270, %1265
  %1276 = phi i32 [ %1269, %1265 ], [ %1274, %1270 ]
  %1277 = icmp ne i32 %1276, 0
  br i1 %1277, label %1278, label %1330

1278:                                             ; preds = %1275
  %1279 = load ptr, ptr %46, align 8, !tbaa !5
  %1280 = load i32, ptr %1279, align 4, !tbaa !9
  store i32 %1280, ptr %63, align 4, !tbaa !9
  %1281 = load i32, ptr %85, align 4, !tbaa !9
  %1282 = load i32, ptr %80, align 4, !tbaa !9
  %1283 = sub nsw i32 %1281, %1282
  store i32 %1283, ptr %64, align 4, !tbaa !9
  %1284 = load i32, ptr %63, align 4, !tbaa !9
  %1285 = load i32, ptr %64, align 4, !tbaa !9
  %1286 = icmp sle i32 %1284, %1285
  br i1 %1286, label %1287, label %1289

1287:                                             ; preds = %1278
  %1288 = load i32, ptr %63, align 4, !tbaa !9
  br label %1291

1289:                                             ; preds = %1278
  %1290 = load i32, ptr %64, align 4, !tbaa !9
  br label %1291

1291:                                             ; preds = %1289, %1287
  %1292 = phi i32 [ %1288, %1287 ], [ %1290, %1289 ]
  store i32 %1292, ptr %92, align 4, !tbaa !9
  %1293 = load ptr, ptr %32, align 8, !tbaa !5
  %1294 = load i32, ptr %80, align 4, !tbaa !9
  %1295 = load i32, ptr %85, align 4, !tbaa !9
  %1296 = load i32, ptr %51, align 4, !tbaa !9
  %1297 = mul nsw i32 %1295, %1296
  %1298 = add nsw i32 %1294, %1297
  %1299 = sext i32 %1298 to i64
  %1300 = getelementptr inbounds %struct.doublecomplex, ptr %1293, i64 %1299
  %1301 = load ptr, ptr %33, align 8, !tbaa !5
  %1302 = load ptr, ptr %41, align 8, !tbaa !5
  %1303 = load i32, ptr %56, align 4, !tbaa !9
  %1304 = sext i32 %1303 to i64
  %1305 = getelementptr inbounds %struct.doublecomplex, ptr %1302, i64 %1304
  %1306 = load ptr, ptr %42, align 8, !tbaa !5
  %1307 = load ptr, ptr %47, align 8, !tbaa !5
  %1308 = load i32, ptr %58, align 4, !tbaa !9
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds %struct.doublecomplex, ptr %1307, i64 %1309
  %1311 = load ptr, ptr %48, align 8, !tbaa !5
  call void @zgemm_(ptr noundef @.str.1, ptr noundef @.str.1, ptr noundef %92, ptr noundef %86, ptr noundef %86, ptr noundef @c_b2, ptr noundef %1300, ptr noundef %1301, ptr noundef %1305, ptr noundef %1306, ptr noundef @c_b1, ptr noundef %1310, ptr noundef %1311)
  %1312 = load ptr, ptr %47, align 8, !tbaa !5
  %1313 = load i32, ptr %58, align 4, !tbaa !9
  %1314 = sext i32 %1313 to i64
  %1315 = getelementptr inbounds %struct.doublecomplex, ptr %1312, i64 %1314
  %1316 = load ptr, ptr %48, align 8, !tbaa !5
  %1317 = load ptr, ptr %32, align 8, !tbaa !5
  %1318 = load i32, ptr %80, align 4, !tbaa !9
  %1319 = load i32, ptr %85, align 4, !tbaa !9
  %1320 = load i32, ptr %51, align 4, !tbaa !9
  %1321 = mul nsw i32 %1319, %1320
  %1322 = add nsw i32 %1318, %1321
  %1323 = sext i32 %1322 to i64
  %1324 = getelementptr inbounds %struct.doublecomplex, ptr %1317, i64 %1323
  %1325 = load ptr, ptr %33, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.5, ptr noundef %92, ptr noundef %86, ptr noundef %1315, ptr noundef %1316, ptr noundef %1324, ptr noundef %1325)
  br label %1326

1326:                                             ; preds = %1291
  %1327 = load i32, ptr %62, align 4, !tbaa !9
  %1328 = load i32, ptr %80, align 4, !tbaa !9
  %1329 = add nsw i32 %1328, %1327
  store i32 %1329, ptr %80, align 4, !tbaa !9
  br label %1262, !llvm.loop !22

1330:                                             ; preds = %1275
  %1331 = load ptr, ptr %26, align 8, !tbaa !5
  %1332 = load i32, ptr %1331, align 4, !tbaa !9
  %1333 = icmp ne i32 %1332, 0
  br i1 %1333, label %1334, label %1413

1334:                                             ; preds = %1330
  %1335 = load ptr, ptr %28, align 8, !tbaa !5
  %1336 = load i32, ptr %1335, align 4, !tbaa !9
  store i32 %1336, ptr %62, align 4, !tbaa !9
  %1337 = load ptr, ptr %43, align 8, !tbaa !5
  %1338 = load i32, ptr %1337, align 4, !tbaa !9
  store i32 %1338, ptr %61, align 4, !tbaa !9
  %1339 = load ptr, ptr %30, align 8, !tbaa !5
  %1340 = load i32, ptr %1339, align 4, !tbaa !9
  %1341 = add nsw i32 %1340, 1
  store i32 %1341, ptr %74, align 4, !tbaa !9
  br label %1342

1342:                                             ; preds = %1408, %1334
  %1343 = load i32, ptr %61, align 4, !tbaa !9
  %1344 = icmp slt i32 %1343, 0
  br i1 %1344, label %1345, label %1350

1345:                                             ; preds = %1342
  %1346 = load i32, ptr %74, align 4, !tbaa !9
  %1347 = load i32, ptr %62, align 4, !tbaa !9
  %1348 = icmp sge i32 %1346, %1347
  %1349 = zext i1 %1348 to i32
  br label %1355

1350:                                             ; preds = %1342
  %1351 = load i32, ptr %74, align 4, !tbaa !9
  %1352 = load i32, ptr %62, align 4, !tbaa !9
  %1353 = icmp sle i32 %1351, %1352
  %1354 = zext i1 %1353 to i32
  br label %1355

1355:                                             ; preds = %1350, %1345
  %1356 = phi i32 [ %1349, %1345 ], [ %1354, %1350 ]
  %1357 = icmp ne i32 %1356, 0
  br i1 %1357, label %1358, label %1412

1358:                                             ; preds = %1355
  %1359 = load ptr, ptr %43, align 8, !tbaa !5
  %1360 = load i32, ptr %1359, align 4, !tbaa !9
  store i32 %1360, ptr %63, align 4, !tbaa !9
  %1361 = load ptr, ptr %28, align 8, !tbaa !5
  %1362 = load i32, ptr %1361, align 4, !tbaa !9
  %1363 = load i32, ptr %74, align 4, !tbaa !9
  %1364 = sub nsw i32 %1362, %1363
  %1365 = add nsw i32 %1364, 1
  store i32 %1365, ptr %64, align 4, !tbaa !9
  %1366 = load i32, ptr %63, align 4, !tbaa !9
  %1367 = load i32, ptr %64, align 4, !tbaa !9
  %1368 = icmp sle i32 %1366, %1367
  br i1 %1368, label %1369, label %1371

1369:                                             ; preds = %1358
  %1370 = load i32, ptr %63, align 4, !tbaa !9
  br label %1373

1371:                                             ; preds = %1358
  %1372 = load i32, ptr %64, align 4, !tbaa !9
  br label %1373

1373:                                             ; preds = %1371, %1369
  %1374 = phi i32 [ %1370, %1369 ], [ %1372, %1371 ]
  store i32 %1374, ptr %92, align 4, !tbaa !9
  %1375 = load ptr, ptr %41, align 8, !tbaa !5
  %1376 = load i32, ptr %56, align 4, !tbaa !9
  %1377 = sext i32 %1376 to i64
  %1378 = getelementptr inbounds %struct.doublecomplex, ptr %1375, i64 %1377
  %1379 = load ptr, ptr %42, align 8, !tbaa !5
  %1380 = load ptr, ptr %32, align 8, !tbaa !5
  %1381 = load i32, ptr %85, align 4, !tbaa !9
  %1382 = load i32, ptr %74, align 4, !tbaa !9
  %1383 = load i32, ptr %51, align 4, !tbaa !9
  %1384 = mul nsw i32 %1382, %1383
  %1385 = add nsw i32 %1381, %1384
  %1386 = sext i32 %1385 to i64
  %1387 = getelementptr inbounds %struct.doublecomplex, ptr %1380, i64 %1386
  %1388 = load ptr, ptr %33, align 8, !tbaa !5
  %1389 = load ptr, ptr %44, align 8, !tbaa !5
  %1390 = load i32, ptr %54, align 4, !tbaa !9
  %1391 = sext i32 %1390 to i64
  %1392 = getelementptr inbounds %struct.doublecomplex, ptr %1389, i64 %1391
  %1393 = load ptr, ptr %45, align 8, !tbaa !5
  call void @zgemm_(ptr noundef @.str.10, ptr noundef @.str.1, ptr noundef %86, ptr noundef %92, ptr noundef %86, ptr noundef @c_b2, ptr noundef %1378, ptr noundef %1379, ptr noundef %1387, ptr noundef %1388, ptr noundef @c_b1, ptr noundef %1392, ptr noundef %1393)
  %1394 = load ptr, ptr %44, align 8, !tbaa !5
  %1395 = load i32, ptr %54, align 4, !tbaa !9
  %1396 = sext i32 %1395 to i64
  %1397 = getelementptr inbounds %struct.doublecomplex, ptr %1394, i64 %1396
  %1398 = load ptr, ptr %45, align 8, !tbaa !5
  %1399 = load ptr, ptr %32, align 8, !tbaa !5
  %1400 = load i32, ptr %85, align 4, !tbaa !9
  %1401 = load i32, ptr %74, align 4, !tbaa !9
  %1402 = load i32, ptr %51, align 4, !tbaa !9
  %1403 = mul nsw i32 %1401, %1402
  %1404 = add nsw i32 %1400, %1403
  %1405 = sext i32 %1404 to i64
  %1406 = getelementptr inbounds %struct.doublecomplex, ptr %1399, i64 %1405
  %1407 = load ptr, ptr %33, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.5, ptr noundef %86, ptr noundef %92, ptr noundef %1397, ptr noundef %1398, ptr noundef %1406, ptr noundef %1407)
  br label %1408

1408:                                             ; preds = %1373
  %1409 = load i32, ptr %61, align 4, !tbaa !9
  %1410 = load i32, ptr %74, align 4, !tbaa !9
  %1411 = add nsw i32 %1410, %1409
  store i32 %1411, ptr %74, align 4, !tbaa !9
  br label %1342, !llvm.loop !23

1412:                                             ; preds = %1355
  br label %1413

1413:                                             ; preds = %1412, %1330
  %1414 = load ptr, ptr %27, align 8, !tbaa !5
  %1415 = load i32, ptr %1414, align 4, !tbaa !9
  %1416 = icmp ne i32 %1415, 0
  br i1 %1416, label %1417, label %1495

1417:                                             ; preds = %1413
  %1418 = load ptr, ptr %35, align 8, !tbaa !5
  %1419 = load i32, ptr %1418, align 4, !tbaa !9
  store i32 %1419, ptr %61, align 4, !tbaa !9
  %1420 = load ptr, ptr %46, align 8, !tbaa !5
  %1421 = load i32, ptr %1420, align 4, !tbaa !9
  store i32 %1421, ptr %62, align 4, !tbaa !9
  %1422 = load ptr, ptr %34, align 8, !tbaa !5
  %1423 = load i32, ptr %1422, align 4, !tbaa !9
  store i32 %1423, ptr %80, align 4, !tbaa !9
  br label %1424

1424:                                             ; preds = %1490, %1417
  %1425 = load i32, ptr %62, align 4, !tbaa !9
  %1426 = icmp slt i32 %1425, 0
  br i1 %1426, label %1427, label %1432

1427:                                             ; preds = %1424
  %1428 = load i32, ptr %80, align 4, !tbaa !9
  %1429 = load i32, ptr %61, align 4, !tbaa !9
  %1430 = icmp sge i32 %1428, %1429
  %1431 = zext i1 %1430 to i32
  br label %1437

1432:                                             ; preds = %1424
  %1433 = load i32, ptr %80, align 4, !tbaa !9
  %1434 = load i32, ptr %61, align 4, !tbaa !9
  %1435 = icmp sle i32 %1433, %1434
  %1436 = zext i1 %1435 to i32
  br label %1437

1437:                                             ; preds = %1432, %1427
  %1438 = phi i32 [ %1431, %1427 ], [ %1436, %1432 ]
  %1439 = icmp ne i32 %1438, 0
  br i1 %1439, label %1440, label %1494

1440:                                             ; preds = %1437
  %1441 = load ptr, ptr %46, align 8, !tbaa !5
  %1442 = load i32, ptr %1441, align 4, !tbaa !9
  store i32 %1442, ptr %63, align 4, !tbaa !9
  %1443 = load ptr, ptr %35, align 8, !tbaa !5
  %1444 = load i32, ptr %1443, align 4, !tbaa !9
  %1445 = load i32, ptr %80, align 4, !tbaa !9
  %1446 = sub nsw i32 %1444, %1445
  %1447 = add nsw i32 %1446, 1
  store i32 %1447, ptr %64, align 4, !tbaa !9
  %1448 = load i32, ptr %63, align 4, !tbaa !9
  %1449 = load i32, ptr %64, align 4, !tbaa !9
  %1450 = icmp sle i32 %1448, %1449
  br i1 %1450, label %1451, label %1453

1451:                                             ; preds = %1440
  %1452 = load i32, ptr %63, align 4, !tbaa !9
  br label %1455

1453:                                             ; preds = %1440
  %1454 = load i32, ptr %64, align 4, !tbaa !9
  br label %1455

1455:                                             ; preds = %1453, %1451
  %1456 = phi i32 [ %1452, %1451 ], [ %1454, %1453 ]
  store i32 %1456, ptr %92, align 4, !tbaa !9
  %1457 = load ptr, ptr %36, align 8, !tbaa !5
  %1458 = load i32, ptr %80, align 4, !tbaa !9
  %1459 = load i32, ptr %85, align 4, !tbaa !9
  %1460 = load i32, ptr %59, align 4, !tbaa !9
  %1461 = mul nsw i32 %1459, %1460
  %1462 = add nsw i32 %1458, %1461
  %1463 = sext i32 %1462 to i64
  %1464 = getelementptr inbounds %struct.doublecomplex, ptr %1457, i64 %1463
  %1465 = load ptr, ptr %37, align 8, !tbaa !5
  %1466 = load ptr, ptr %41, align 8, !tbaa !5
  %1467 = load i32, ptr %56, align 4, !tbaa !9
  %1468 = sext i32 %1467 to i64
  %1469 = getelementptr inbounds %struct.doublecomplex, ptr %1466, i64 %1468
  %1470 = load ptr, ptr %42, align 8, !tbaa !5
  %1471 = load ptr, ptr %47, align 8, !tbaa !5
  %1472 = load i32, ptr %58, align 4, !tbaa !9
  %1473 = sext i32 %1472 to i64
  %1474 = getelementptr inbounds %struct.doublecomplex, ptr %1471, i64 %1473
  %1475 = load ptr, ptr %48, align 8, !tbaa !5
  call void @zgemm_(ptr noundef @.str.1, ptr noundef @.str.1, ptr noundef %92, ptr noundef %86, ptr noundef %86, ptr noundef @c_b2, ptr noundef %1464, ptr noundef %1465, ptr noundef %1469, ptr noundef %1470, ptr noundef @c_b1, ptr noundef %1474, ptr noundef %1475)
  %1476 = load ptr, ptr %47, align 8, !tbaa !5
  %1477 = load i32, ptr %58, align 4, !tbaa !9
  %1478 = sext i32 %1477 to i64
  %1479 = getelementptr inbounds %struct.doublecomplex, ptr %1476, i64 %1478
  %1480 = load ptr, ptr %48, align 8, !tbaa !5
  %1481 = load ptr, ptr %36, align 8, !tbaa !5
  %1482 = load i32, ptr %80, align 4, !tbaa !9
  %1483 = load i32, ptr %85, align 4, !tbaa !9
  %1484 = load i32, ptr %59, align 4, !tbaa !9
  %1485 = mul nsw i32 %1483, %1484
  %1486 = add nsw i32 %1482, %1485
  %1487 = sext i32 %1486 to i64
  %1488 = getelementptr inbounds %struct.doublecomplex, ptr %1481, i64 %1487
  %1489 = load ptr, ptr %37, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.5, ptr noundef %92, ptr noundef %86, ptr noundef %1479, ptr noundef %1480, ptr noundef %1488, ptr noundef %1489)
  br label %1490

1490:                                             ; preds = %1455
  %1491 = load i32, ptr %62, align 4, !tbaa !9
  %1492 = load i32, ptr %80, align 4, !tbaa !9
  %1493 = add nsw i32 %1492, %1491
  store i32 %1493, ptr %80, align 4, !tbaa !9
  br label %1424, !llvm.loop !24

1494:                                             ; preds = %1437
  br label %1495

1495:                                             ; preds = %1494, %1413
  br label %1496

1496:                                             ; preds = %1495, %962, %958
  %1497 = load i32, ptr %86, align 4, !tbaa !9
  %1498 = load ptr, ptr %38, align 8, !tbaa !5
  %1499 = load i32, ptr %1498, align 4, !tbaa !9
  %1500 = sub nsw i32 %1497, %1499
  %1501 = load ptr, ptr %39, align 8, !tbaa !5
  store i32 %1500, ptr %1501, align 4, !tbaa !9
  %1502 = load i32, ptr %84, align 4, !tbaa !9
  %1503 = load ptr, ptr %38, align 8, !tbaa !5
  %1504 = load i32, ptr %1503, align 4, !tbaa !9
  %1505 = sub nsw i32 %1504, %1502
  store i32 %1505, ptr %1503, align 4, !tbaa !9
  %1506 = load i32, ptr %90, align 4, !tbaa !9
  %1507 = sitofp i32 %1506 to double
  store double %1507, ptr %65, align 8, !tbaa !14
  %1508 = load double, ptr %65, align 8, !tbaa !14
  %1509 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  store double %1508, ptr %1509, align 8, !tbaa !11
  %1510 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  store double 0.000000e+00, ptr %1510, align 8, !tbaa !15
  %1511 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 0
  %1512 = load double, ptr %1511, align 8, !tbaa !11
  %1513 = load ptr, ptr %49, align 8, !tbaa !5
  %1514 = getelementptr inbounds %struct.doublecomplex, ptr %1513, i64 1
  %1515 = getelementptr inbounds %struct.doublecomplex, ptr %1514, i32 0, i32 0
  store double %1512, ptr %1515, align 8, !tbaa !11
  %1516 = getelementptr inbounds %struct.doublecomplex, ptr %71, i32 0, i32 1
  %1517 = load double, ptr %1516, align 8, !tbaa !15
  %1518 = load ptr, ptr %49, align 8, !tbaa !5
  %1519 = getelementptr inbounds %struct.doublecomplex, ptr %1518, i64 1
  %1520 = getelementptr inbounds %struct.doublecomplex, ptr %1519, i32 0, i32 1
  store double %1517, ptr %1520, align 8, !tbaa !15
  store i32 1, ptr %99, align 4
  br label %1521

1521:                                             ; preds = %1496, %492, %290, %285, %255
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %93) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  ret void
}

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) #3

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @_pCd(ptr noundef) #3

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

declare void @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) #4

declare void @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 = { inlinehint 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !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 i32, align 4
@c_n1 = external hidden global i32, align 4
@.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 i32, align 4
@.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 i32, align 4
@.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 void @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 i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca %struct.doublecomplex, align 16
  %30 = alloca %struct.doublecomplex, align 16
  %31 = alloca %struct.doublecomplex, align 16
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %struct.doublecomplex, align 16
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca i32, align 4
  %41 = alloca %struct.doublecomplex, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #6
  %42 = load i32, ptr %7, align 4, !tbaa !5
  %narrow = xor i32 %42, -1
  %43 = sext i32 %narrow to i64
  %44 = getelementptr inbounds %struct.doublecomplex, ptr %6, i64 %43
  %45 = load i32, ptr %11, align 4, !tbaa !5
  %narrow486 = xor i32 %45, -1
  %46 = sext i32 %narrow486 to i64
  %47 = getelementptr inbounds %struct.doublecomplex, ptr %10, i64 %46
  %48 = getelementptr inbounds i8, ptr %14, i64 -16
  %49 = load i32, ptr %16, align 4, !tbaa !5
  %narrow488 = xor i32 %49, -1
  %50 = sext i32 %narrow488 to i64
  %51 = getelementptr inbounds %struct.doublecomplex, ptr %15, i64 %50
  %52 = load i32, ptr %19, align 4, !tbaa !5
  %narrow487 = xor i32 %52, -1
  %53 = sext i32 %narrow487 to i64
  %54 = getelementptr inbounds %struct.doublecomplex, ptr %18, i64 %53
  %55 = getelementptr inbounds i8, ptr %23, i64 -16
  %56 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %56, ptr %26, align 4, !tbaa !5
  %57 = load i32, ptr %4, align 4, !tbaa !5
  %58 = load i32, ptr %3, align 4, !tbaa !5
  %59 = sub nsw i32 %57, %58
  %60 = add nsw i32 %59, 1
  store i32 %60, ptr %27, align 4, !tbaa !5
  %61 = tail call i32 @llvm.smin.i32(i32 %56, i32 %60)
  store i32 %61, ptr %37, align 4, !tbaa !5
  %62 = icmp slt i32 %61, 3
  br i1 %62, label %77, label %63

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

77:                                               ; preds = %25, %63
  %.0474 = phi i32 [ %76, %63 ], [ 1, %25 ]
  %78 = load i32, ptr %24, align 4, !tbaa !5
  %79 = icmp eq i32 %78, -1
  br i1 %79, label %80, label %82

80:                                               ; preds = %77
  %81 = sitofp i32 %.0474 to double
  store double %81, ptr %23, align 8, !tbaa !9
  br label %.sink.split

82:                                               ; preds = %77
  store i32 0, ptr %12, align 4, !tbaa !5
  store i32 0, ptr %13, align 4, !tbaa !5
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %23, align 8, !tbaa !12
  %83 = load i32, ptr %3, align 4, !tbaa !5
  %84 = load i32, ptr %4, align 4, !tbaa !5
  %85 = icmp sgt i32 %83, %84
  br i1 %85, label %517, label %86

86:                                               ; preds = %82
  %87 = load i32, ptr %5, align 4, !tbaa !5
  %88 = icmp slt i32 %87, 1
  br i1 %88, label %517, label %89

89:                                               ; preds = %86
  %90 = call double @dlamch_(ptr noundef nonnull @.str.2) #6
  store double %90, ptr %38, align 8, !tbaa !12
  %91 = fdiv double 1.000000e+00, %90
  store double %91, ptr %39, align 8, !tbaa !12
  call void @dlabad_(ptr noundef nonnull %38, ptr noundef nonnull %39) #6
  %92 = call double @dlamch_(ptr noundef nonnull @.str.3) #6
  %93 = load double, ptr %38, align 8, !tbaa !12
  %94 = load i32, ptr %2, align 4, !tbaa !5
  %95 = sitofp i32 %94 to double
  %96 = fdiv double %95, %92
  %97 = fmul double %93, %96
  %98 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %98, ptr %26, align 4, !tbaa !5
  %99 = load i32, ptr %4, align 4, !tbaa !5
  %100 = load i32, ptr %3, align 4, !tbaa !5
  %101 = sub nsw i32 %99, %100
  %102 = add nsw i32 %101, 1
  store i32 %102, ptr %27, align 4, !tbaa !5
  %103 = call i32 @llvm.smin.i32(i32 %98, i32 %102)
  store i32 %103, ptr %37, align 4, !tbaa !5
  %104 = sub nsw i32 %99, %103
  %105 = add nsw i32 %104, 1
  %106 = icmp eq i32 %105, %100
  br i1 %106, label %113, label %107

107:                                              ; preds = %89
  %108 = mul nsw i32 %104, %42
  %109 = add nsw i32 %105, %108
  store i32 %109, ptr %26, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %110
  %112 = load <2 x double>, ptr %111, align 8, !tbaa !12
  br label %113

113:                                              ; preds = %89, %107
  %114 = phi <2 x double> [ %112, %107 ], [ zeroinitializer, %89 ]
  %115 = getelementptr inbounds i8, ptr %35, i64 8
  store <2 x double> %114, ptr %35, align 16
  %116 = icmp eq i32 %99, %105
  br i1 %116, label %117, label %156

117:                                              ; preds = %113
  %118 = add i32 %42, 1
  %119 = mul i32 %99, %118
  store i32 %119, ptr %27, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %120
  %122 = sext i32 %99 to i64
  %123 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %122
  %124 = load <2 x double>, ptr %121, align 8, !tbaa !12
  store <2 x double> %124, ptr %123, align 8, !tbaa !12
  store i32 1, ptr %12, align 4, !tbaa !5
  store i32 0, ptr %13, align 4, !tbaa !5
  store i32 %119, ptr %26, align 4, !tbaa !5
  %125 = extractelement <2 x double> %124, i64 0
  %126 = fcmp oge double %125, 0.000000e+00
  %127 = fneg double %125
  %128 = select i1 %126, double %125, double %127
  %129 = call { double, double } @Cd(ptr noundef nonnull %121)
  %130 = extractvalue { double, double } %129, 1
  %131 = fcmp oge double %130, 0.000000e+00
  %132 = fneg double %130
  %133 = select i1 %131, double %130, double %132
  %134 = fadd double %128, %133
  %135 = fmul double %92, %134
  %136 = load <2 x double>, ptr %35, align 16
  %137 = call { double, double } @Cd(ptr noundef nonnull %35)
  %138 = extractvalue { double, double } %137, 1
  %139 = insertelement <2 x double> %136, double %138, i64 1
  %140 = fcmp oge <2 x double> %139, zeroinitializer
  %141 = fneg <2 x double> %139
  %142 = select <2 x i1> %140, <2 x double> %139, <2 x double> %141
  %shift = shufflevector <2 x double> %142, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %143 = fadd <2 x double> %142, %shift
  %144 = extractelement <2 x double> %143, i64 0
  %145 = fcmp oge double %97, %135
  %146 = select i1 %145, double %97, double %135
  %147 = fcmp ugt double %144, %146
  br i1 %147, label %155, label %148

148:                                              ; preds = %117
  store i32 0, ptr %12, align 4, !tbaa !5
  store i32 1, ptr %13, align 4, !tbaa !5
  %149 = load i32, ptr %3, align 4, !tbaa !5
  %.not501 = icmp slt i32 %104, %149
  br i1 %.not501, label %155, label %150

150:                                              ; preds = %148
  %151 = mul nsw i32 %104, %42
  %152 = add nsw i32 %99, %151
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %153
  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 = %148, %150, %117
  store double 1.000000e+00, ptr %23, align 8, !tbaa !9
  br label %.sink.split

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

179:                                              ; preds = %156
  call void @zlaqr4_(ptr noundef nonnull @c_true, ptr noundef nonnull @c_true, ptr noundef nonnull %37, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef %18, ptr noundef nonnull %19, ptr noundef nonnull %178, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %36) #6
  br label %181

180:                                              ; preds = %156
  call void @zlahqr_(ptr noundef nonnull @c_true, ptr noundef nonnull @c_true, ptr noundef nonnull %37, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef %18, ptr noundef nonnull %19, ptr noundef nonnull %178, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %36) #6
  br label %181

181:                                              ; preds = %180, %179
  %182 = load i32, ptr %37, align 4, !tbaa !5
  store i32 %182, ptr %12, align 4, !tbaa !5
  %183 = load i32, ptr %36, align 4, !tbaa !5
  %184 = add nsw i32 %183, 1
  store i32 %184, ptr %34, align 4, !tbaa !5
  store i32 %182, ptr %26, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %51, i64 16
  %.not.not505 = icmp slt i32 %183, %182
  br i1 %.not.not505, label %.lr.ph, label %._crit_edge

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

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

202:                                              ; preds = %186
  %203 = load <2 x double>, ptr %35, align 16
  %204 = call { double, double } @Cd(ptr noundef nonnull %35)
  %205 = extractvalue { double, double } %204, 1
  %206 = insertelement <2 x double> %203, double %205, i64 1
  %207 = fcmp oge <2 x double> %206, zeroinitializer
  %208 = fneg <2 x double> %206
  %209 = select <2 x i1> %207, <2 x double> %206, <2 x double> %208
  %shift563 = shufflevector <2 x double> %209, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %210 = fadd <2 x double> %209, %shift563
  %211 = extractelement <2 x double> %210, i64 0
  br label %212

212:                                              ; preds = %202, %186
  %.0473 = phi double [ %211, %202 ], [ %200, %186 ]
  %213 = load i32, ptr %12, align 4, !tbaa !5
  %214 = mul nsw i32 %213, %49
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %27, align 4, !tbaa !5
  %216 = fmul double %92, %.0473
  %217 = load <2 x double>, ptr %35, align 16
  %218 = call { double, double } @Cd(ptr noundef nonnull %35)
  %219 = extractvalue { double, double } %218, 1
  %220 = load i32, ptr %27, align 4, !tbaa !5
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds %struct.doublecomplex, ptr %51, i64 %221
  %223 = load double, ptr %222, align 8, !tbaa !9
  %224 = load i32, ptr %12, align 4, !tbaa !5
  %225 = mul nsw i32 %224, %49
  %226 = sext i32 %225 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %226
  %227 = call { double, double } @Cd(ptr noundef %gep)
  %228 = extractvalue { double, double } %227, 1
  %229 = insertelement <2 x double> %217, double %223, i64 1
  %230 = fcmp oge <2 x double> %229, zeroinitializer
  %231 = fneg <2 x double> %229
  %232 = select <2 x i1> %230, <2 x double> %229, <2 x double> %231
  %233 = insertelement <2 x double> poison, double %219, i64 0
  %234 = insertelement <2 x double> %233, double %228, i64 1
  %235 = fcmp oge <2 x double> %234, zeroinitializer
  %236 = fneg <2 x double> %234
  %237 = select <2 x i1> %235, <2 x double> %234, <2 x double> %236
  %238 = fadd <2 x double> %232, %237
  %shift564 = shufflevector <2 x double> %238, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %239 = fmul <2 x double> %238, %shift564
  %240 = extractelement <2 x double> %239, i64 0
  %241 = fcmp oge double %97, %216
  %242 = select i1 %241, double %97, double %216
  %243 = fcmp ugt double %240, %242
  %244 = load i32, ptr %12, align 4, !tbaa !5
  br i1 %243, label %247, label %245

245:                                              ; preds = %212
  %246 = add nsw i32 %244, -1
  store i32 %246, ptr %12, align 4, !tbaa !5
  br label %250

247:                                              ; preds = %212
  store i32 %244, ptr %33, align 4, !tbaa !5
  call void @ztrexc_(ptr noundef nonnull @.str.8, ptr noundef nonnull %37, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %33, ptr noundef nonnull %34, ptr noundef nonnull %32) #6
  %248 = load i32, ptr %34, align 4, !tbaa !5
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %34, align 4, !tbaa !5
  br label %250

250:                                              ; preds = %245, %247
  %251 = load i32, ptr %26, align 4, !tbaa !5
  %.not.not = icmp slt i32 %.0506, %251
  br i1 %.not.not, label %186, label %._crit_edge.loopexit, !llvm.loop !13

._crit_edge.loopexit:                             ; preds = %250
  %.pre = load i32, ptr %12, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %181
  %252 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %182, %181 ]
  %253 = icmp eq i32 %252, 0
  br i1 %253, label %254, label %255

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

255:                                              ; preds = %254, %._crit_edge
  %256 = load i32, ptr %37, align 4, !tbaa !5
  %257 = icmp slt i32 %252, %256
  %.pre556 = load i32, ptr %36, align 4, !tbaa !5
  br i1 %257, label %258, label %.loopexit503

258:                                              ; preds = %255
  store i32 %252, ptr %26, align 4, !tbaa !5
  %.not512.not = icmp slt i32 %.pre556, %252
  br i1 %.not512.not, label %.lr.ph515, label %.loopexit503

.lr.ph515:                                        ; preds = %258
  %259 = add i32 %52, 1
  %260 = add nsw i32 %.pre556, 2
  br label %261

261:                                              ; preds = %.lr.ph515, %303
  %indvars.iv = phi i32 [ %260, %.lr.ph515 ], [ %indvars.iv.next, %303 ]
  %.0476513.in = phi i32 [ %.pre556, %.lr.ph515 ], [ %.0476513, %303 ]
  %.0476513 = add nsw i32 %.0476513.in, 1
  store i32 %.0476513, ptr %33, align 4, !tbaa !5
  %262 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %262, ptr %27, align 4, !tbaa !5
  %.not499507.not = icmp slt i32 %.0476513, %262
  br i1 %.not499507.not, label %.lr.ph510.preheader, label %._crit_edge511.thread

._crit_edge511.thread:                            ; preds = %261
  store i32 %.0476513, ptr %34, align 4, !tbaa !5
  br label %303

.lr.ph510.preheader:                              ; preds = %261
  %263 = sext i32 %indvars.iv to i64
  br label %.lr.ph510

.lr.ph510:                                        ; preds = %.lr.ph510.preheader, %299
  %indvars.iv543 = phi i64 [ %263, %.lr.ph510.preheader ], [ %indvars.iv.next544, %299 ]
  %264 = trunc nsw i64 %indvars.iv543 to i32
  %265 = mul i32 %259, %264
  store i32 %265, ptr %28, align 4, !tbaa !5
  %266 = load i32, ptr %33, align 4, !tbaa !5
  %267 = mul i32 %266, %259
  %268 = sext i32 %265 to i64
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %268
  %270 = load double, ptr %269, align 8, !tbaa !9
  %271 = call { double, double } @Cd(ptr noundef nonnull %269)
  %272 = extractvalue { double, double } %271, 1
  %273 = insertelement <2 x double> poison, double %270, i64 0
  %274 = insertelement <2 x double> %273, double %272, i64 1
  %275 = fcmp oge <2 x double> %274, zeroinitializer
  %276 = fneg <2 x double> %274
  %277 = select <2 x i1> %275, <2 x double> %274, <2 x double> %276
  %278 = sext i32 %267 to i64
  %279 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !9
  %281 = load i32, ptr %33, align 4, !tbaa !5
  %282 = mul i32 %281, %259
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %283
  %285 = call { double, double } @Cd(ptr noundef %284)
  %286 = extractvalue { double, double } %285, 1
  %287 = insertelement <2 x double> poison, double %280, i64 0
  %288 = insertelement <2 x double> %287, double %286, i64 1
  %289 = fcmp oge <2 x double> %288, zeroinitializer
  %290 = fneg <2 x double> %288
  %291 = select <2 x i1> %289, <2 x double> %288, <2 x double> %290
  %292 = shufflevector <2 x double> %277, <2 x double> %291, <2 x i32> <i32 0, i32 2>
  %293 = shufflevector <2 x double> %277, <2 x double> %291, <2 x i32> <i32 1, i32 3>
  %294 = fadd <2 x double> %292, %293
  %295 = extractelement <2 x double> %294, i64 0
  %296 = extractelement <2 x double> %294, i64 1
  %297 = fcmp ogt double %295, %296
  br i1 %297, label %298, label %299

298:                                              ; preds = %.lr.ph510
  store i32 %264, ptr %33, align 4, !tbaa !5
  br label %299

299:                                              ; preds = %.lr.ph510, %298
  %indvars.iv.next544 = add nsw i64 %indvars.iv543, 1
  %300 = load i32, ptr %27, align 4, !tbaa !5
  %301 = sext i32 %300 to i64
  %.not499.not = icmp slt i64 %indvars.iv543, %301
  br i1 %.not499.not, label %.lr.ph510, label %._crit_edge511, !llvm.loop !15

._crit_edge511:                                   ; preds = %299
  %.pre553 = load i32, ptr %33, align 4, !tbaa !5
  store i32 %.0476513, ptr %34, align 4, !tbaa !5
  %.not500 = icmp eq i32 %.pre553, %.0476513
  br i1 %.not500, label %303, label %302

302:                                              ; preds = %._crit_edge511
  call void @ztrexc_(ptr noundef nonnull @.str.8, ptr noundef nonnull %37, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %33, ptr noundef nonnull %34, ptr noundef nonnull %32) #6
  br label %303

303:                                              ; preds = %._crit_edge511.thread, %._crit_edge511, %302
  %304 = load i32, ptr %26, align 4, !tbaa !5
  %.not.not540 = icmp slt i32 %.0476513, %304
  %indvars.iv.next = add i32 %indvars.iv, 1
  br i1 %.not.not540, label %261, label %.loopexit503.loopexit, !llvm.loop !16

.loopexit503.loopexit:                            ; preds = %303
  %.pre554 = load i32, ptr %37, align 4, !tbaa !5
  %.pre555 = load i32, ptr %36, align 4, !tbaa !5
  br label %.loopexit503

.loopexit503:                                     ; preds = %.loopexit503.loopexit, %258, %255
  %305 = phi i32 [ %.pre555, %.loopexit503.loopexit ], [ %.pre556, %258 ], [ %.pre556, %255 ]
  %306 = phi i32 [ %.pre554, %.loopexit503.loopexit ], [ %256, %258 ], [ %256, %255 ]
  store i32 %306, ptr %26, align 4, !tbaa !5
  %.not489.not516 = icmp slt i32 %305, %306
  br i1 %.not489.not516, label %.lr.ph519, label %338

.lr.ph519:                                        ; preds = %.loopexit503
  %307 = add i32 %52, 1
  %308 = sext i32 %305 to i64
  %wide.trip.count = sext i32 %306 to i64
  %309 = sub nsw i64 %wide.trip.count, %308
  %xtraiter = and i64 %309, 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.ph519
  %indvars.iv.next547.prol = add nsw i64 %308, 1
  %310 = add i32 %105, %305
  %311 = trunc nsw i64 %indvars.iv.next547.prol to i32
  %312 = mul i32 %307, %311
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %313
  %315 = sext i32 %310 to i64
  %316 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %315
  %317 = load <2 x double>, ptr %314, align 8, !tbaa !12
  store <2 x double> %317, ptr %316, align 8, !tbaa !12
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph519
  %.lcssa565.unr = phi i32 [ poison, %.lr.ph519 ], [ %310, %.prol.loopexit.unr-lcssa ]
  %.lcssa.unr = phi i32 [ poison, %.lr.ph519 ], [ %312, %.prol.loopexit.unr-lcssa ]
  %indvars.iv546.unr = phi i64 [ %308, %.lr.ph519 ], [ %indvars.iv.next547.prol, %.prol.loopexit.unr-lcssa ]
  %318 = add nsw i64 %wide.trip.count, -1
  %319 = icmp eq i64 %318, %308
  br i1 %319, label %._crit_edge520, label %.lr.ph519.new

.lr.ph519.new:                                    ; preds = %.prol.loopexit, %.lr.ph519.new
  %indvars.iv546 = phi i64 [ %indvars.iv.next547.1, %.lr.ph519.new ], [ %indvars.iv546.unr, %.prol.loopexit ]
  %indvars.iv.next547 = add nsw i64 %indvars.iv546, 1
  %320 = trunc nsw i64 %indvars.iv546 to i32
  %321 = add i32 %105, %320
  %322 = trunc nsw i64 %indvars.iv.next547 to i32
  %323 = mul i32 %307, %322
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %324
  %326 = sext i32 %321 to i64
  %327 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %326
  %328 = load <2 x double>, ptr %325, align 8, !tbaa !12
  store <2 x double> %328, ptr %327, align 8, !tbaa !12
  %indvars.iv.next547.1 = add nsw i64 %indvars.iv546, 2
  %329 = trunc nsw i64 %indvars.iv.next547 to i32
  %330 = add i32 %105, %329
  %331 = trunc nsw i64 %indvars.iv.next547.1 to i32
  %332 = mul i32 %307, %331
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %54, i64 %333
  %335 = sext i32 %330 to i64
  %336 = getelementptr inbounds %struct.doublecomplex, ptr %48, i64 %335
  %337 = load <2 x double>, ptr %334, align 8, !tbaa !12
  store <2 x double> %337, ptr %336, align 8, !tbaa !12
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next547.1, %wide.trip.count
  br i1 %exitcond.not.1, label %._crit_edge520, label %.lr.ph519.new, !llvm.loop !17

._crit_edge520:                                   ; preds = %.lr.ph519.new, %.prol.loopexit
  %.lcssa565 = phi i32 [ %.lcssa565.unr, %.prol.loopexit ], [ %330, %.lr.ph519.new ]
  %.lcssa = phi i32 [ %.lcssa.unr, %.prol.loopexit ], [ %332, %.lr.ph519.new ]
  store i32 %.lcssa565, ptr %27, align 4, !tbaa !5
  store i32 %.lcssa, ptr %28, align 4, !tbaa !5
  br label %338

338:                                              ; preds = %._crit_edge520, %.loopexit503
  %339 = load i32, ptr %12, align 4, !tbaa !5
  %340 = icmp slt i32 %339, %306
  br i1 %340, label %346, label %341

341:                                              ; preds = %338
  %342 = load double, ptr %35, align 16, !tbaa !9
  %343 = fcmp oeq double %342, 0.000000e+00
  %344 = load double, ptr %115, align 8
  %345 = fcmp oeq double %344, 0.000000e+00
  %or.cond = select i1 %343, i1 %345, i1 false
  br i1 %or.cond, label %346, label %.loopexit

346:                                              ; preds = %341, %338
  %347 = icmp sgt i32 %339, 1
  br i1 %347, label %348, label %398

348:                                              ; preds = %346
  %349 = load double, ptr %35, align 16, !tbaa !9
  %350 = fcmp une double %349, 0.000000e+00
  %351 = load double, ptr %115, align 8
  %352 = fcmp une double %351, 0.000000e+00
  %or.cond5 = select i1 %350, i1 true, i1 %352
  br i1 %or.cond5, label %353, label %398

353:                                              ; preds = %348
  call void @zcopy_(ptr noundef nonnull %12, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull %23, ptr noundef nonnull @c__1) #6
  %354 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %354, ptr %26, align 4, !tbaa !5
  %.not490522 = icmp slt i32 %354, 1
  br i1 %.not490522, label %._crit_edge526, label %.lr.ph525

.lr.ph525:                                        ; preds = %353, %.lr.ph525
  %indvars.iv549 = phi i64 [ %indvars.iv.next550, %.lr.ph525 ], [ 1, %353 ]
  %355 = trunc nuw nsw i64 %indvars.iv549 to i32
  store i32 %355, ptr %27, align 4, !tbaa !5
  %356 = getelementptr inbounds %struct.doublecomplex, ptr %55, i64 %indvars.iv549
  %357 = call { double, double } @Cd(ptr noundef nonnull %356)
  %358 = extractvalue { double, double } %357, 0
  %359 = extractvalue { double, double } %357, 1
  %360 = fneg double %359
  %361 = call ptr @_pCd(ptr noundef nonnull %29)
  %362 = getelementptr inbounds i8, ptr %361, i64 8
  store double %358, ptr %361, align 8
  store double %360, ptr %362, align 8
  %363 = load i32, ptr %27, align 4, !tbaa !5
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %55, i64 %364
  %366 = load <2 x double>, ptr %29, align 16, !tbaa !12
  store <2 x double> %366, ptr %365, align 8, !tbaa !12
  %indvars.iv.next550 = add nuw nsw i64 %indvars.iv549, 1
  %367 = load i32, ptr %26, align 4, !tbaa !5
  %368 = sext i32 %367 to i64
  %.not490.not = icmp slt i64 %indvars.iv549, %368
  br i1 %.not490.not, label %.lr.ph525, label %._crit_edge526, !llvm.loop !18

._crit_edge526:                                   ; preds = %.lr.ph525, %353
  %369 = load <2 x double>, ptr %23, align 8, !tbaa !12
  store <2 x double> %369, ptr %31, align 16, !tbaa !12
  %370 = getelementptr inbounds i8, ptr %23, i64 16
  call void @zlarfg_(ptr noundef nonnull %12, ptr noundef nonnull %31, ptr noundef nonnull %370, ptr noundef nonnull @c__1, ptr noundef nonnull %41) #6
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %23, align 8, !tbaa !12
  %371 = load i32, ptr %37, align 4, !tbaa !5
  %372 = add nsw i32 %371, -2
  store i32 %372, ptr %26, align 4, !tbaa !5
  store i32 %372, ptr %27, align 4, !tbaa !5
  %373 = getelementptr i8, ptr %172, i64 48
  call void @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 %373, ptr noundef nonnull %19) #6
  %374 = call { double, double } @Cd(ptr noundef nonnull %41)
  %375 = extractvalue { double, double } %374, 0
  %376 = extractvalue { double, double } %374, 1
  %377 = fneg double %376
  %378 = call ptr @_pCd(ptr noundef nonnull %29)
  %379 = getelementptr inbounds i8, ptr %378, i64 8
  store double %375, ptr %378, align 8
  store double %377, ptr %379, align 8
  %380 = load i32, ptr %37, align 4, !tbaa !5
  %381 = sext i32 %380 to i64
  %382 = getelementptr %struct.doublecomplex, ptr %55, i64 %381
  %383 = getelementptr i8, ptr %382, i64 16
  call void @zlarf_(ptr noundef nonnull @.str.9, ptr noundef nonnull %12, ptr noundef nonnull %37, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef nonnull %29, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %383) #6
  %384 = load i32, ptr %37, align 4, !tbaa !5
  %385 = sext i32 %384 to i64
  %386 = getelementptr %struct.doublecomplex, ptr %55, i64 %385
  %387 = getelementptr i8, ptr %386, i64 16
  call void @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 %41, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %387) #6
  %388 = load i32, ptr %37, align 4, !tbaa !5
  %389 = sext i32 %388 to i64
  %390 = getelementptr %struct.doublecomplex, ptr %55, i64 %389
  %391 = getelementptr i8, ptr %390, i64 16
  call void @zlarf_(ptr noundef nonnull @.str, ptr noundef nonnull %37, ptr noundef nonnull %12, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef nonnull %41, ptr noundef %15, ptr noundef nonnull %16, ptr noundef %391) #6
  %392 = load i32, ptr %24, align 4, !tbaa !5
  %393 = load i32, ptr %37, align 4, !tbaa !5
  %394 = sub nsw i32 %392, %393
  store i32 %394, ptr %26, align 4, !tbaa !5
  %395 = sext i32 %393 to i64
  %396 = getelementptr %struct.doublecomplex, ptr %55, i64 %395
  %397 = getelementptr i8, ptr %396, i64 16
  call void @zgehrd_(ptr noundef nonnull %37, ptr noundef nonnull @c__1, ptr noundef nonnull %12, ptr noundef %18, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %397, ptr noundef nonnull %26, ptr noundef nonnull %32) #6
  br label %398

398:                                              ; preds = %348, %._crit_edge526, %346
  %399 = icmp sgt i32 %104, 0
  br i1 %399, label %400, label %422

400:                                              ; preds = %398
  %401 = mul nsw i32 %104, %42
  %402 = add nsw i32 %105, %401
  store i32 %402, ptr %26, align 4, !tbaa !5
  %403 = call { double, double } @Cd(ptr noundef %15)
  %404 = extractvalue { double, double } %403, 0
  %405 = extractvalue { double, double } %403, 1
  %406 = fneg double %405
  %407 = call ptr @_pCd(ptr noundef nonnull %30)
  %408 = getelementptr inbounds i8, ptr %407, i64 8
  store double %404, ptr %407, align 8
  store double %406, ptr %408, align 8
  %409 = load <2 x double>, ptr %35, align 16
  %410 = load double, ptr %115, align 8, !tbaa !19
  %411 = fneg double %410
  %412 = load <2 x double>, ptr %30, align 16, !tbaa !12
  %413 = insertelement <2 x double> poison, double %410, i64 0
  %414 = insertelement <2 x double> %413, double %411, i64 1
  %415 = fmul <2 x double> %412, %414
  %416 = shufflevector <2 x double> %415, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %417 = shufflevector <2 x double> %409, <2 x double> poison, <2 x i32> zeroinitializer
  %418 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %417, <2 x double> %412, <2 x double> %416)
  store <2 x double> %418, ptr %29, align 16, !tbaa !12
  %419 = load i32, ptr %26, align 4, !tbaa !5
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %420
  store <2 x double> %418, ptr %421, align 8, !tbaa !12
  br label %422

422:                                              ; preds = %400, %398
  call void @zlacpy_(ptr noundef nonnull @.str.4, ptr noundef nonnull %37, ptr noundef nonnull %37, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %160, ptr noundef nonnull %7) #6
  %423 = load i32, ptr %37, align 4, !tbaa !5
  %424 = add nsw i32 %423, -1
  store i32 %424, ptr %26, align 4, !tbaa !5
  %425 = load i32, ptr %19, align 4, !tbaa !5
  %426 = add nsw i32 %425, 1
  store i32 %426, ptr %27, align 4, !tbaa !5
  %427 = load i32, ptr %7, align 4, !tbaa !5
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %28, align 4, !tbaa !5
  call void @zcopy_(ptr noundef nonnull %26, ptr noundef %173, ptr noundef nonnull %27, ptr noundef %170, ptr noundef nonnull %28) #6
  %429 = load i32, ptr %12, align 4, !tbaa !5
  %430 = icmp sgt i32 %429, 1
  br i1 %430, label %431, label %443

431:                                              ; preds = %422
  %432 = load double, ptr %35, align 16, !tbaa !9
  %433 = fcmp une double %432, 0.000000e+00
  %434 = load double, ptr %115, align 8
  %435 = fcmp une double %434, 0.000000e+00
  %or.cond8 = select i1 %433, i1 true, i1 %435
  br i1 %or.cond8, label %436, label %443

436:                                              ; preds = %431
  %437 = load i32, ptr %24, align 4, !tbaa !5
  %438 = load i32, ptr %37, align 4, !tbaa !5
  %439 = sub nsw i32 %437, %438
  store i32 %439, ptr %26, align 4, !tbaa !5
  %440 = sext i32 %438 to i64
  %441 = getelementptr %struct.doublecomplex, ptr %55, i64 %440
  %442 = getelementptr i8, ptr %441, i64 16
  call void @zunmhr_(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %37, 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 %442, ptr noundef nonnull %26, ptr noundef nonnull %32) #6
  br label %443

443:                                              ; preds = %431, %436, %422
  %444 = load i32, ptr %0, align 4, !tbaa !5
  %.not491 = icmp eq i32 %444, 0
  br i1 %.not491, label %445, label %447

445:                                              ; preds = %443
  %446 = load i32, ptr %3, align 4, !tbaa !5
  br label %447

447:                                              ; preds = %443, %445
  %.0479 = phi i32 [ %446, %445 ], [ 1, %443 ]
  store i32 %104, ptr %26, align 4, !tbaa !5
  %448 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %448, ptr %27, align 4, !tbaa !5
  %449 = icmp slt i32 %448, 0
  %450 = icmp sge i32 %.0479, %104
  %451 = icmp sle i32 %.0479, %104
  %.in527 = select i1 %449, i1 %450, i1 %451
  br i1 %.in527, label %.lr.ph530, label %._crit_edge531

.lr.ph530:                                        ; preds = %447, %.lr.ph530
  %.0477528 = phi i32 [ %459, %.lr.ph530 ], [ %.0479, %447 ]
  %452 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %452, ptr %28, align 4, !tbaa !5
  %453 = sub nsw i32 %105, %.0477528
  %454 = call i32 @llvm.smin.i32(i32 %452, i32 %453)
  store i32 %454, ptr %40, align 4, !tbaa !5
  %455 = add nsw i32 %.0477528, %157
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %456
  call void @zgemm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1, ptr noundef nonnull %40, ptr noundef nonnull %37, ptr noundef nonnull %37, ptr noundef nonnull @c_b2, ptr noundef %457, ptr noundef nonnull %7, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull @c_b1, ptr noundef %21, ptr noundef %22) #6
  call void @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %40, ptr noundef nonnull %37, ptr noundef %21, ptr noundef %22, ptr noundef %457, ptr noundef nonnull %7) #6
  %458 = load i32, ptr %27, align 4, !tbaa !5
  %459 = add nsw i32 %458, %.0477528
  %460 = icmp slt i32 %458, 0
  %461 = load i32, ptr %26, align 4
  %462 = icmp sge i32 %459, %461
  %463 = icmp sle i32 %459, %461
  %.in = select i1 %460, i1 %462, i1 %463
  br i1 %.in, label %.lr.ph530, label %._crit_edge531.loopexit, !llvm.loop !20

._crit_edge531.loopexit:                          ; preds = %.lr.ph530
  %.pre557 = load i32, ptr %0, align 4, !tbaa !5
  br label %._crit_edge531

._crit_edge531:                                   ; preds = %._crit_edge531.loopexit, %447
  %464 = phi i32 [ %.pre557, %._crit_edge531.loopexit ], [ %444, %447 ]
  %.not492 = icmp eq i32 %464, 0
  br i1 %.not492, label %.loopexit502, label %465

465:                                              ; preds = %._crit_edge531
  %466 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %466, ptr %27, align 4, !tbaa !5
  %467 = load i32, ptr %17, align 4, !tbaa !5
  store i32 %467, ptr %26, align 4, !tbaa !5
  %468 = load i32, ptr %4, align 4, !tbaa !5
  %469 = add nsw i32 %468, 1
  %470 = icmp slt i32 %467, 0
  %471 = icmp sge i32 %469, %466
  %472 = icmp slt i32 %468, %466
  %.in493532 = select i1 %470, i1 %471, i1 %472
  br i1 %.in493532, label %.lr.ph535, label %.loopexit502

.lr.ph535:                                        ; preds = %465, %.lr.ph535
  %.0480533 = phi i32 [ %482, %.lr.ph535 ], [ %469, %465 ]
  %473 = load i32, ptr %17, align 4, !tbaa !5
  store i32 %473, ptr %28, align 4, !tbaa !5
  %474 = load i32, ptr %2, align 4, !tbaa !5
  %reass.sub = sub i32 %474, %.0480533
  %475 = add i32 %reass.sub, 1
  %476 = call i32 @llvm.smin.i32(i32 %473, i32 %475)
  store i32 %476, ptr %40, align 4, !tbaa !5
  %477 = mul nsw i32 %.0480533, %42
  %478 = add nsw i32 %477, %105
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %479
  call void @zgemm_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, ptr noundef nonnull %37, ptr noundef nonnull %40, ptr noundef nonnull %37, ptr noundef nonnull @c_b2, ptr noundef %15, ptr noundef nonnull %16, ptr noundef %480, ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef %18, ptr noundef nonnull %19) #6
  call void @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %37, ptr noundef nonnull %40, ptr noundef %18, ptr noundef nonnull %19, ptr noundef %480, ptr noundef nonnull %7) #6
  %481 = load i32, ptr %26, align 4, !tbaa !5
  %482 = add nsw i32 %481, %.0480533
  %483 = icmp slt i32 %481, 0
  %484 = load i32, ptr %27, align 4
  %485 = icmp sge i32 %482, %484
  %486 = icmp sle i32 %482, %484
  %.in493 = select i1 %483, i1 %485, i1 %486
  br i1 %.in493, label %.lr.ph535, label %.loopexit502, !llvm.loop !21

.loopexit502:                                     ; preds = %.lr.ph535, %465, %._crit_edge531
  %487 = load i32, ptr %1, align 4, !tbaa !5
  %.not494 = icmp eq i32 %487, 0
  br i1 %.not494, label %.loopexit, label %488

488:                                              ; preds = %.loopexit502
  %489 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %489, ptr %26, align 4, !tbaa !5
  %490 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %490, ptr %27, align 4, !tbaa !5
  %491 = load i32, ptr %8, align 4, !tbaa !5
  %492 = icmp slt i32 %490, 0
  %493 = icmp sge i32 %491, %489
  %494 = icmp sle i32 %491, %489
  %.in495536 = select i1 %492, i1 %493, i1 %494
  br i1 %.in495536, label %.lr.ph539, label %.loopexit

.lr.ph539:                                        ; preds = %488
  %495 = mul nsw i32 %105, %45
  br label %496

496:                                              ; preds = %.lr.ph539, %496
  %.1478537 = phi i32 [ %491, %.lr.ph539 ], [ %505, %496 ]
  %497 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %497, ptr %28, align 4, !tbaa !5
  %498 = load i32, ptr %9, align 4, !tbaa !5
  %reass.sub541 = sub i32 %498, %.1478537
  %499 = add i32 %reass.sub541, 1
  %500 = call i32 @llvm.smin.i32(i32 %497, i32 %499)
  store i32 %500, ptr %40, align 4, !tbaa !5
  %501 = add nsw i32 %.1478537, %495
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds %struct.doublecomplex, ptr %47, i64 %502
  call void @zgemm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1, ptr noundef nonnull %40, ptr noundef nonnull %37, ptr noundef nonnull %37, ptr noundef nonnull @c_b2, ptr noundef %503, ptr noundef nonnull %11, ptr noundef %15, ptr noundef nonnull %16, ptr noundef nonnull @c_b1, ptr noundef %21, ptr noundef nonnull %22) #6
  call void @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %40, ptr noundef nonnull %37, ptr noundef %21, ptr noundef nonnull %22, ptr noundef %503, ptr noundef nonnull %11) #6
  %504 = load i32, ptr %27, align 4, !tbaa !5
  %505 = add nsw i32 %504, %.1478537
  %506 = icmp slt i32 %504, 0
  %507 = load i32, ptr %26, align 4
  %508 = icmp sge i32 %505, %507
  %509 = icmp sle i32 %505, %507
  %.in495 = select i1 %506, i1 %508, i1 %509
  br i1 %.in495, label %496, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %496, %488, %.loopexit502, %341
  %510 = load i32, ptr %37, align 4, !tbaa !5
  %511 = load i32, ptr %12, align 4, !tbaa !5
  %512 = sub nsw i32 %510, %511
  store i32 %512, ptr %13, align 4, !tbaa !5
  %513 = load i32, ptr %36, align 4, !tbaa !5
  %514 = load i32, ptr %12, align 4, !tbaa !5
  %515 = sub nsw i32 %514, %513
  store i32 %515, ptr %12, align 4, !tbaa !5
  %516 = sitofp i32 %.0474 to double
  store double %516, ptr %23, align 8, !tbaa !9
  br label %.sink.split

.sink.split:                                      ; preds = %80, %155, %.loopexit
  %.sink560 = getelementptr inbounds i8, ptr %23, i64 8
  store double 0.000000e+00, ptr %.sink560, align 8, !tbaa !19
  br label %517

517:                                              ; preds = %.sink.split, %86, %82
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #6
  ret void
}

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) local_unnamed_addr #3

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @_pCd(ptr noundef) local_unnamed_addr #3

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

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

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

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

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

; 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>) #4

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 = { inlinehint 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

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


; 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