; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (ztrevc3)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i32, align 4
@c__1 = external hidden global i32, align 4
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i32, align 4
@.str.6 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b2 = external hidden global %struct.doublecomplex, align 8
@.str.15 = external hidden unnamed_addr constant [20 x i8], align 1

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

132:                                              ; preds = %17
  %133 = load i32, ptr %63, align 4, !tbaa !9
  %134 = icmp ne i32 %133, 0
  br label %135

135:                                              ; preds = %132, %17
  %136 = phi i1 [ true, %17 ], [ %134, %132 ]
  %137 = zext i1 %136 to i32
  store i32 %137, ptr %70, align 4, !tbaa !9
  %138 = load ptr, ptr %18, align 8, !tbaa !5
  %139 = call i32 @lsame_(ptr noundef %138, ptr noundef @.str.2)
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %144, label %141

141:                                              ; preds = %135
  %142 = load i32, ptr %63, align 4, !tbaa !9
  %143 = icmp ne i32 %142, 0
  br label %144

144:                                              ; preds = %141, %135
  %145 = phi i1 [ true, %135 ], [ %143, %141 ]
  %146 = zext i1 %145 to i32
  store i32 %146, ptr %62, align 4, !tbaa !9
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = call i32 @lsame_(ptr noundef %147, ptr noundef @.str.3)
  store i32 %148, ptr %52, align 4, !tbaa !9
  %149 = load ptr, ptr %19, align 8, !tbaa !5
  %150 = call i32 @lsame_(ptr noundef %149, ptr noundef @.str)
  store i32 %150, ptr %56, align 4, !tbaa !9
  %151 = load ptr, ptr %19, align 8, !tbaa !5
  %152 = call i32 @lsame_(ptr noundef %151, ptr noundef @.str.4)
  store i32 %152, ptr %64, align 4, !tbaa !9
  %153 = load i32, ptr %64, align 4, !tbaa !9
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %179

155:                                              ; preds = %144
  %156 = load ptr, ptr %29, align 8, !tbaa !5
  store i32 0, ptr %156, align 4, !tbaa !9
  %157 = load ptr, ptr %21, align 8, !tbaa !5
  %158 = load i32, ptr %157, align 4, !tbaa !9
  store i32 %158, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %58, align 4, !tbaa !9
  br label %159

159:                                              ; preds = %175, %155
  %160 = load i32, ptr %58, align 4, !tbaa !9
  %161 = load i32, ptr %42, align 4, !tbaa !9
  %162 = icmp sle i32 %160, %161
  br i1 %162, label %163, label %178

163:                                              ; preds = %159
  %164 = load ptr, ptr %20, align 8, !tbaa !5
  %165 = load i32, ptr %58, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds i32, ptr %164, i64 %166
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = icmp ne i32 %168, 0
  br i1 %169, label %170, label %174

170:                                              ; preds = %163
  %171 = load ptr, ptr %29, align 8, !tbaa !5
  %172 = load i32, ptr %171, align 4, !tbaa !9
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %171, align 4, !tbaa !9
  br label %174

174:                                              ; preds = %170, %163
  br label %175

175:                                              ; preds = %174
  %176 = load i32, ptr %58, align 4, !tbaa !9
  %177 = add nsw i32 %176, 1
  store i32 %177, ptr %58, align 4, !tbaa !9
  br label %159, !llvm.loop !11

178:                                              ; preds = %159
  br label %183

179:                                              ; preds = %144
  %180 = load ptr, ptr %21, align 8, !tbaa !5
  %181 = load i32, ptr %180, align 4, !tbaa !9
  %182 = load ptr, ptr %29, align 8, !tbaa !5
  store i32 %181, ptr %182, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %179, %178
  %184 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 0, ptr %184, align 4, !tbaa !9
  %185 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  store i32 1, ptr %185, align 4, !tbaa !9
  %186 = load ptr, ptr %18, align 8, !tbaa !5
  %187 = getelementptr inbounds [2 x ptr], ptr %35, i64 0, i64 0
  store ptr %186, ptr %187, align 16, !tbaa !5
  %188 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  store i32 1, ptr %188, align 4, !tbaa !9
  %189 = load ptr, ptr %19, align 8, !tbaa !5
  %190 = getelementptr inbounds [2 x ptr], ptr %35, i64 0, i64 1
  store ptr %189, ptr %190, align 8, !tbaa !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 8, ptr %78) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  store i32 2, ptr %77, align 4, !tbaa !9
  %191 = getelementptr inbounds [2 x i8], ptr %51, i64 0, i64 0
  store ptr %191, ptr %79, align 8, !tbaa !5
  store i32 0, ptr %75, align 4, !tbaa !9
  br label %192

192:                                              ; preds = %228, %183
  %193 = load i32, ptr %75, align 4, !tbaa !9
  %194 = load i32, ptr @c__2, align 4, !tbaa !9
  %195 = icmp slt i32 %193, %194
  br i1 %195, label %196, label %231

196:                                              ; preds = %192
  %197 = load i32, ptr %77, align 4, !tbaa !9
  store i32 %197, ptr %76, align 4, !tbaa !9
  %198 = load i32, ptr %75, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = load i32, ptr %76, align 4, !tbaa !9
  %203 = icmp slt i32 %201, %202
  br i1 %203, label %204, label %209

204:                                              ; preds = %196
  %205 = load i32, ptr %75, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !9
  store i32 %208, ptr %76, align 4, !tbaa !9
  br label %209

209:                                              ; preds = %204, %196
  %210 = load i32, ptr %76, align 4, !tbaa !9
  %211 = load i32, ptr %77, align 4, !tbaa !9
  %212 = sub nsw i32 %211, %210
  store i32 %212, ptr %77, align 4, !tbaa !9
  %213 = load i32, ptr %75, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds [2 x ptr], ptr %35, i64 0, i64 %214
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  store ptr %216, ptr %78, align 8, !tbaa !5
  br label %217

217:                                              ; preds = %221, %209
  %218 = load i32, ptr %76, align 4, !tbaa !9
  %219 = add nsw i32 %218, -1
  store i32 %219, ptr %76, align 4, !tbaa !9
  %220 = icmp sge i32 %219, 0
  br i1 %220, label %221, label %227

221:                                              ; preds = %217
  %222 = load ptr, ptr %78, align 8, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %222, i32 1
  store ptr %223, ptr %78, align 8, !tbaa !5
  %224 = load i8, ptr %222, align 1, !tbaa !13
  %225 = load ptr, ptr %79, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %225, i32 1
  store ptr %226, ptr %79, align 8, !tbaa !5
  store i8 %224, ptr %225, align 1, !tbaa !13
  br label %217, !llvm.loop !14

227:                                              ; preds = %217
  br label %228

228:                                              ; preds = %227
  %229 = load i32, ptr %75, align 4, !tbaa !9
  %230 = add nsw i32 %229, 1
  store i32 %230, ptr %75, align 4, !tbaa !9
  br label %192, !llvm.loop !15

231:                                              ; preds = %192
  br label %232

232:                                              ; preds = %236, %231
  %233 = load i32, ptr %77, align 4, !tbaa !9
  %234 = add nsw i32 %233, -1
  store i32 %234, ptr %77, align 4, !tbaa !9
  %235 = icmp sge i32 %234, 0
  br i1 %235, label %236, label %239

236:                                              ; preds = %232
  %237 = load ptr, ptr %79, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i32 1
  store ptr %238, ptr %79, align 8, !tbaa !5
  store i8 32, ptr %237, align 1, !tbaa !13
  br label %232, !llvm.loop !16

239:                                              ; preds = %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, 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
  %240 = getelementptr inbounds [2 x i8], ptr %51, i64 0, i64 0
  %241 = load ptr, ptr %21, align 8, !tbaa !5
  %242 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef %240, ptr noundef %241, ptr noundef @c_n1, ptr noundef @c_n1, ptr noundef @c_n1, i32 noundef 6, i32 noundef 2)
  store i32 %242, ptr %65, align 4, !tbaa !9
  %243 = load ptr, ptr %21, align 8, !tbaa !5
  %244 = load i32, ptr %243, align 4, !tbaa !9
  %245 = load ptr, ptr %21, align 8, !tbaa !5
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %247 = shl i32 %246, 1
  %248 = load i32, ptr %65, align 4, !tbaa !9
  %249 = mul nsw i32 %247, %248
  %250 = add nsw i32 %244, %249
  store i32 %250, ptr %71, align 4, !tbaa !9
  %251 = load i32, ptr %71, align 4, !tbaa !9
  %252 = sitofp i32 %251 to double
  %253 = load ptr, ptr %30, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.doublecomplex, ptr %253, i64 1
  %255 = getelementptr inbounds %struct.doublecomplex, ptr %254, i32 0, i32 0
  store double %252, ptr %255, align 8, !tbaa !17
  %256 = load ptr, ptr %30, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.doublecomplex, ptr %256, i64 1
  %258 = getelementptr inbounds %struct.doublecomplex, ptr %257, i32 0, i32 1
  store double 0.000000e+00, ptr %258, align 8, !tbaa !20
  %259 = load ptr, ptr %21, align 8, !tbaa !5
  %260 = load i32, ptr %259, align 4, !tbaa !9
  %261 = sitofp i32 %260 to double
  %262 = load ptr, ptr %32, align 8, !tbaa !5
  %263 = getelementptr inbounds double, ptr %262, i64 1
  store double %261, ptr %263, align 8, !tbaa !21
  %264 = load ptr, ptr %31, align 8, !tbaa !5
  %265 = load i32, ptr %264, align 4, !tbaa !9
  %266 = icmp eq i32 %265, -1
  br i1 %266, label %271, label %267

267:                                              ; preds = %239
  %268 = load ptr, ptr %33, align 8, !tbaa !5
  %269 = load i32, ptr %268, align 4, !tbaa !9
  %270 = icmp eq i32 %269, -1
  br label %271

271:                                              ; preds = %267, %239
  %272 = phi i1 [ true, %239 ], [ %270, %267 ]
  %273 = zext i1 %272 to i32
  store i32 %273, ptr %73, align 4, !tbaa !9
  %274 = load i32, ptr %70, align 4, !tbaa !9
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %281, label %276

276:                                              ; preds = %271
  %277 = load i32, ptr %62, align 4, !tbaa !9
  %278 = icmp ne i32 %277, 0
  br i1 %278, label %281, label %279

279:                                              ; preds = %276
  %280 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -1, ptr %280, align 4, !tbaa !9
  br label %398

281:                                              ; preds = %276, %271
  %282 = load i32, ptr %52, align 4, !tbaa !9
  %283 = icmp ne i32 %282, 0
  br i1 %283, label %292, label %284

284:                                              ; preds = %281
  %285 = load i32, ptr %56, align 4, !tbaa !9
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %292, label %287

287:                                              ; preds = %284
  %288 = load i32, ptr %64, align 4, !tbaa !9
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %292, label %290

290:                                              ; preds = %287
  %291 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -2, ptr %291, align 4, !tbaa !9
  br label %397

292:                                              ; preds = %287, %284, %281
  %293 = load ptr, ptr %21, align 8, !tbaa !5
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = icmp slt i32 %294, 0
  br i1 %295, label %296, label %298

296:                                              ; preds = %292
  %297 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -4, ptr %297, align 4, !tbaa !9
  br label %396

298:                                              ; preds = %292
  %299 = load ptr, ptr %23, align 8, !tbaa !5
  %300 = load i32, ptr %299, align 4, !tbaa !9
  %301 = load ptr, ptr %21, align 8, !tbaa !5
  %302 = load i32, ptr %301, align 4, !tbaa !9
  %303 = icmp sge i32 1, %302
  br i1 %303, label %304, label %305

304:                                              ; preds = %298
  br label %308

305:                                              ; preds = %298
  %306 = load ptr, ptr %21, align 8, !tbaa !5
  %307 = load i32, ptr %306, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %305, %304
  %309 = phi i32 [ 1, %304 ], [ %307, %305 ]
  %310 = icmp slt i32 %300, %309
  br i1 %310, label %311, label %313

311:                                              ; preds = %308
  %312 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -6, ptr %312, align 4, !tbaa !9
  br label %395

313:                                              ; preds = %308
  %314 = load ptr, ptr %25, align 8, !tbaa !5
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = icmp slt i32 %315, 1
  br i1 %316, label %326, label %317

317:                                              ; preds = %313
  %318 = load i32, ptr %62, align 4, !tbaa !9
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %328

320:                                              ; preds = %317
  %321 = load ptr, ptr %25, align 8, !tbaa !5
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = load ptr, ptr %21, align 8, !tbaa !5
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = icmp slt i32 %322, %324
  br i1 %325, label %326, label %328

326:                                              ; preds = %320, %313
  %327 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -8, ptr %327, align 4, !tbaa !9
  br label %394

328:                                              ; preds = %320, %317
  %329 = load ptr, ptr %27, align 8, !tbaa !5
  %330 = load i32, ptr %329, align 4, !tbaa !9
  %331 = icmp slt i32 %330, 1
  br i1 %331, label %341, label %332

332:                                              ; preds = %328
  %333 = load i32, ptr %70, align 4, !tbaa !9
  %334 = icmp ne i32 %333, 0
  br i1 %334, label %335, label %343

335:                                              ; preds = %332
  %336 = load ptr, ptr %27, align 8, !tbaa !5
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = load ptr, ptr %21, align 8, !tbaa !5
  %339 = load i32, ptr %338, align 4, !tbaa !9
  %340 = icmp slt i32 %337, %339
  br i1 %340, label %341, label %343

341:                                              ; preds = %335, %328
  %342 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -10, ptr %342, align 4, !tbaa !9
  br label %393

343:                                              ; preds = %335, %332
  %344 = load ptr, ptr %28, align 8, !tbaa !5
  %345 = load i32, ptr %344, align 4, !tbaa !9
  %346 = load ptr, ptr %29, align 8, !tbaa !5
  %347 = load i32, ptr %346, align 4, !tbaa !9
  %348 = icmp slt i32 %345, %347
  br i1 %348, label %349, label %351

349:                                              ; preds = %343
  %350 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -11, ptr %350, align 4, !tbaa !9
  br label %392

351:                                              ; preds = %343
  store i32 1, ptr %42, align 4, !tbaa !9
  %352 = load ptr, ptr %21, align 8, !tbaa !5
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %354 = shl i32 %353, 1
  store i32 %354, ptr %44, align 4, !tbaa !9
  %355 = load ptr, ptr %31, align 8, !tbaa !5
  %356 = load i32, ptr %355, align 4, !tbaa !9
  %357 = load i32, ptr %42, align 4, !tbaa !9
  %358 = load i32, ptr %44, align 4, !tbaa !9
  %359 = icmp sge i32 %357, %358
  br i1 %359, label %360, label %362

360:                                              ; preds = %351
  %361 = load i32, ptr %42, align 4, !tbaa !9
  br label %364

362:                                              ; preds = %351
  %363 = load i32, ptr %44, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %362, %360
  %365 = phi i32 [ %361, %360 ], [ %363, %362 ]
  %366 = icmp slt i32 %356, %365
  br i1 %366, label %367, label %372

367:                                              ; preds = %364
  %368 = load i32, ptr %73, align 4, !tbaa !9
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %372, label %370

370:                                              ; preds = %367
  %371 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -14, ptr %371, align 4, !tbaa !9
  br label %391

372:                                              ; preds = %367, %364
  %373 = load ptr, ptr %33, align 8, !tbaa !5
  %374 = load i32, ptr %373, align 4, !tbaa !9
  %375 = load ptr, ptr %21, align 8, !tbaa !5
  %376 = load i32, ptr %375, align 4, !tbaa !9
  %377 = icmp sge i32 1, %376
  br i1 %377, label %378, label %379

378:                                              ; preds = %372
  br label %382

379:                                              ; preds = %372
  %380 = load ptr, ptr %21, align 8, !tbaa !5
  %381 = load i32, ptr %380, align 4, !tbaa !9
  br label %382

382:                                              ; preds = %379, %378
  %383 = phi i32 [ 1, %378 ], [ %381, %379 ]
  %384 = icmp slt i32 %374, %383
  br i1 %384, label %385, label %390

385:                                              ; preds = %382
  %386 = load i32, ptr %73, align 4, !tbaa !9
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %390, label %388

388:                                              ; preds = %385
  %389 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -16, ptr %389, align 4, !tbaa !9
  br label %390

390:                                              ; preds = %388, %385, %382
  br label %391

391:                                              ; preds = %390, %370
  br label %392

392:                                              ; preds = %391, %349
  br label %393

393:                                              ; preds = %392, %341
  br label %394

394:                                              ; preds = %393, %326
  br label %395

395:                                              ; preds = %394, %311
  br label %396

396:                                              ; preds = %395, %296
  br label %397

397:                                              ; preds = %396, %290
  br label %398

398:                                              ; preds = %397, %279
  %399 = load ptr, ptr %34, align 8, !tbaa !5
  %400 = load i32, ptr %399, align 4, !tbaa !9
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %402, label %407

402:                                              ; preds = %398
  %403 = load ptr, ptr %34, align 8, !tbaa !5
  %404 = load i32, ptr %403, align 4, !tbaa !9
  %405 = sub nsw i32 0, %404
  store i32 %405, ptr %42, align 4, !tbaa !9
  %406 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %42, i32 noundef 7)
  store i32 1, ptr %80, align 4
  br label %1824

407:                                              ; preds = %398
  %408 = load i32, ptr %73, align 4, !tbaa !9
  %409 = icmp ne i32 %408, 0
  br i1 %409, label %410, label %411

410:                                              ; preds = %407
  store i32 1, ptr %80, align 4
  br label %1824

411:                                              ; preds = %407
  br label %412

412:                                              ; preds = %411
  %413 = load ptr, ptr %21, align 8, !tbaa !5
  %414 = load i32, ptr %413, align 4, !tbaa !9
  %415 = icmp eq i32 %414, 0
  br i1 %415, label %416, label %417

416:                                              ; preds = %412
  store i32 1, ptr %80, align 4
  br label %1824

417:                                              ; preds = %412
  %418 = load i32, ptr %56, align 4, !tbaa !9
  %419 = icmp ne i32 %418, 0
  br i1 %419, label %420, label %454

420:                                              ; preds = %417
  %421 = load ptr, ptr %31, align 8, !tbaa !5
  %422 = load i32, ptr %421, align 4, !tbaa !9
  %423 = load ptr, ptr %21, align 8, !tbaa !5
  %424 = load i32, ptr %423, align 4, !tbaa !9
  %425 = load ptr, ptr %21, align 8, !tbaa !5
  %426 = load i32, ptr %425, align 4, !tbaa !9
  %427 = shl i32 %426, 4
  %428 = add nsw i32 %424, %427
  %429 = icmp sge i32 %422, %428
  br i1 %429, label %430, label %454

430:                                              ; preds = %420
  %431 = load ptr, ptr %31, align 8, !tbaa !5
  %432 = load i32, ptr %431, align 4, !tbaa !9
  %433 = load ptr, ptr %21, align 8, !tbaa !5
  %434 = load i32, ptr %433, align 4, !tbaa !9
  %435 = sub nsw i32 %432, %434
  %436 = load ptr, ptr %21, align 8, !tbaa !5
  %437 = load i32, ptr %436, align 4, !tbaa !9
  %438 = shl i32 %437, 1
  %439 = sdiv i32 %435, %438
  store i32 %439, ptr %65, align 4, !tbaa !9
  %440 = load i32, ptr %65, align 4, !tbaa !9
  %441 = icmp sle i32 %440, 128
  br i1 %441, label %442, label %444

442:                                              ; preds = %430
  %443 = load i32, ptr %65, align 4, !tbaa !9
  br label %445

444:                                              ; preds = %430
  br label %445

445:                                              ; preds = %444, %442
  %446 = phi i32 [ %443, %442 ], [ 128, %444 ]
  store i32 %446, ptr %65, align 4, !tbaa !9
  %447 = load i32, ptr %65, align 4, !tbaa !9
  %448 = shl i32 %447, 1
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %42, align 4, !tbaa !9
  %450 = load ptr, ptr %21, align 8, !tbaa !5
  %451 = load ptr, ptr %30, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %451, i64 1
  %453 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zlaset_(ptr noundef @.str.7, ptr noundef %450, ptr noundef %42, ptr noundef @c_b1, ptr noundef @c_b1, ptr noundef %452, ptr noundef %453)
  br label %455

454:                                              ; preds = %420, %417
  store i32 1, ptr %65, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %454, %445
  %456 = call double @dlamch_(ptr noundef @.str.8)
  store double %456, ptr %53, align 8, !tbaa !21
  %457 = load double, ptr %53, align 8, !tbaa !21
  %458 = fdiv double 1.000000e+00, %457
  store double %458, ptr %54, align 8, !tbaa !21
  call void @dlabad_(ptr noundef %53, ptr noundef %54)
  %459 = call double @dlamch_(ptr noundef @.str.9)
  store double %459, ptr %74, align 8, !tbaa !21
  %460 = load double, ptr %53, align 8, !tbaa !21
  %461 = load ptr, ptr %21, align 8, !tbaa !5
  %462 = load i32, ptr %461, align 4, !tbaa !9
  %463 = sitofp i32 %462 to double
  %464 = load double, ptr %74, align 8, !tbaa !21
  %465 = fdiv double %463, %464
  %466 = fmul double %460, %465
  store double %466, ptr %72, align 8, !tbaa !21
  %467 = load ptr, ptr %21, align 8, !tbaa !5
  %468 = load i32, ptr %467, align 4, !tbaa !9
  store i32 %468, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %502, %455
  %470 = load i32, ptr %57, align 4, !tbaa !9
  %471 = load i32, ptr %42, align 4, !tbaa !9
  %472 = icmp sle i32 %470, %471
  br i1 %472, label %473, label %505

473:                                              ; preds = %469
  %474 = load i32, ptr %57, align 4, !tbaa !9
  store i32 %474, ptr %44, align 4, !tbaa !9
  %475 = load i32, ptr %57, align 4, !tbaa !9
  %476 = load i32, ptr %57, align 4, !tbaa !9
  %477 = load i32, ptr %36, align 4, !tbaa !9
  %478 = mul nsw i32 %476, %477
  %479 = add nsw i32 %475, %478
  store i32 %479, ptr %45, align 4, !tbaa !9
  %480 = load ptr, ptr %22, align 8, !tbaa !5
  %481 = load i32, ptr %45, align 4, !tbaa !9
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %480, i64 %482
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %483, i32 0, i32 0
  %485 = load double, ptr %484, align 8, !tbaa !17
  %486 = load ptr, ptr %30, align 8, !tbaa !5
  %487 = load i32, ptr %44, 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 0
  store double %485, ptr %490, align 8, !tbaa !17
  %491 = load ptr, ptr %22, align 8, !tbaa !5
  %492 = load i32, ptr %45, align 4, !tbaa !9
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds %struct.doublecomplex, ptr %491, i64 %493
  %495 = getelementptr inbounds %struct.doublecomplex, ptr %494, i32 0, i32 1
  %496 = load double, ptr %495, align 8, !tbaa !20
  %497 = load ptr, ptr %30, align 8, !tbaa !5
  %498 = load i32, ptr %44, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds %struct.doublecomplex, ptr %497, i64 %499
  %501 = getelementptr inbounds %struct.doublecomplex, ptr %500, i32 0, i32 1
  store double %496, ptr %501, align 8, !tbaa !20
  br label %502

502:                                              ; preds = %473
  %503 = load i32, ptr %57, align 4, !tbaa !9
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %57, align 4, !tbaa !9
  br label %469, !llvm.loop !22

505:                                              ; preds = %469
  %506 = load ptr, ptr %32, align 8, !tbaa !5
  %507 = getelementptr inbounds double, ptr %506, i64 1
  store double 0.000000e+00, ptr %507, align 8, !tbaa !21
  %508 = load ptr, ptr %21, align 8, !tbaa !5
  %509 = load i32, ptr %508, align 4, !tbaa !9
  store i32 %509, ptr %42, align 4, !tbaa !9
  store i32 2, ptr %58, align 4, !tbaa !9
  br label %510

510:                                              ; preds = %529, %505
  %511 = load i32, ptr %58, align 4, !tbaa !9
  %512 = load i32, ptr %42, align 4, !tbaa !9
  %513 = icmp sle i32 %511, %512
  br i1 %513, label %514, label %532

514:                                              ; preds = %510
  %515 = load i32, ptr %58, align 4, !tbaa !9
  %516 = sub nsw i32 %515, 1
  store i32 %516, ptr %44, align 4, !tbaa !9
  %517 = load ptr, ptr %22, align 8, !tbaa !5
  %518 = load i32, ptr %58, align 4, !tbaa !9
  %519 = load i32, ptr %36, align 4, !tbaa !9
  %520 = mul nsw i32 %518, %519
  %521 = add nsw i32 %520, 1
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds %struct.doublecomplex, ptr %517, i64 %522
  %524 = call double @dzasum_(ptr noundef %44, ptr noundef %523, ptr noundef @c__1)
  %525 = load ptr, ptr %32, align 8, !tbaa !5
  %526 = load i32, ptr %58, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds double, ptr %525, i64 %527
  store double %524, ptr %528, align 8, !tbaa !21
  br label %529

529:                                              ; preds = %514
  %530 = load i32, ptr %58, align 4, !tbaa !9
  %531 = add nsw i32 %530, 1
  store i32 %531, ptr %58, align 4, !tbaa !9
  br label %510, !llvm.loop !23

532:                                              ; preds = %510
  %533 = load i32, ptr %70, align 4, !tbaa !9
  %534 = icmp ne i32 %533, 0
  br i1 %534, label %535, label %1153

535:                                              ; preds = %532
  %536 = load i32, ptr %65, align 4, !tbaa !9
  store i32 %536, ptr %69, align 4, !tbaa !9
  %537 = load ptr, ptr %29, align 8, !tbaa !5
  %538 = load i32, ptr %537, align 4, !tbaa !9
  store i32 %538, ptr %68, align 4, !tbaa !9
  %539 = load ptr, ptr %21, align 8, !tbaa !5
  %540 = load i32, ptr %539, align 4, !tbaa !9
  store i32 %540, ptr %67, align 4, !tbaa !9
  br label %541

541:                                              ; preds = %1149, %535
  %542 = load i32, ptr %67, align 4, !tbaa !9
  %543 = icmp sge i32 %542, 1
  br i1 %543, label %544, label %1152

544:                                              ; preds = %541
  %545 = load i32, ptr %64, align 4, !tbaa !9
  %546 = icmp ne i32 %545, 0
  br i1 %546, label %547, label %556

547:                                              ; preds = %544
  %548 = load ptr, ptr %20, align 8, !tbaa !5
  %549 = load i32, ptr %67, align 4, !tbaa !9
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds i32, ptr %548, i64 %550
  %552 = load i32, ptr %551, align 4, !tbaa !9
  %553 = icmp ne i32 %552, 0
  br i1 %553, label %555, label %554

554:                                              ; preds = %547
  br label %1148

555:                                              ; preds = %547
  br label %556

556:                                              ; preds = %555, %544
  %557 = load double, ptr %74, align 8, !tbaa !21
  %558 = load ptr, ptr %22, align 8, !tbaa !5
  %559 = load i32, ptr %67, align 4, !tbaa !9
  %560 = load i32, ptr %67, align 4, !tbaa !9
  %561 = load i32, ptr %36, align 4, !tbaa !9
  %562 = mul nsw i32 %560, %561
  %563 = add nsw i32 %559, %562
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds %struct.doublecomplex, ptr %558, i64 %564
  %566 = call { double, double } @Cd(ptr noundef %565)
  %567 = extractvalue { double, double } %566, 0
  %568 = extractvalue { double, double } %566, 1
  %569 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %570 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  store double %567, ptr %569, align 8
  store double %568, ptr %570, align 8
  %571 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %572 = load double, ptr %571, align 8
  %573 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %574 = load double, ptr %573, align 8
  %575 = call double @cabs(double noundef %572, double noundef %574) #5
  %576 = fmul double %557, %575
  store double %576, ptr %48, align 8, !tbaa !21
  %577 = load double, ptr %48, align 8, !tbaa !21
  %578 = load double, ptr %72, align 8, !tbaa !21
  %579 = fcmp oge double %577, %578
  br i1 %579, label %580, label %582

580:                                              ; preds = %556
  %581 = load double, ptr %48, align 8, !tbaa !21
  br label %584

582:                                              ; preds = %556
  %583 = load double, ptr %72, align 8, !tbaa !21
  br label %584

584:                                              ; preds = %582, %580
  %585 = phi double [ %581, %580 ], [ %583, %582 ]
  store double %585, ptr %55, align 8, !tbaa !21
  %586 = load i32, ptr %67, align 4, !tbaa !9
  %587 = load i32, ptr %69, align 4, !tbaa !9
  %588 = load ptr, ptr %21, align 8, !tbaa !5
  %589 = load i32, ptr %588, align 4, !tbaa !9
  %590 = mul nsw i32 %587, %589
  %591 = add nsw i32 %586, %590
  store i32 %591, ptr %42, align 4, !tbaa !9
  %592 = load ptr, ptr %30, align 8, !tbaa !5
  %593 = load i32, ptr %42, align 4, !tbaa !9
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds %struct.doublecomplex, ptr %592, i64 %594
  %596 = getelementptr inbounds %struct.doublecomplex, ptr %595, i32 0, i32 0
  store double 1.000000e+00, ptr %596, align 8, !tbaa !17
  %597 = load ptr, ptr %30, align 8, !tbaa !5
  %598 = load i32, ptr %42, align 4, !tbaa !9
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds %struct.doublecomplex, ptr %597, i64 %599
  %601 = getelementptr inbounds %struct.doublecomplex, ptr %600, i32 0, i32 1
  store double 0.000000e+00, ptr %601, align 8, !tbaa !20
  %602 = load i32, ptr %67, align 4, !tbaa !9
  %603 = sub nsw i32 %602, 1
  store i32 %603, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %604

604:                                              ; preds = %650, %584
  %605 = load i32, ptr %59, align 4, !tbaa !9
  %606 = load i32, ptr %42, align 4, !tbaa !9
  %607 = icmp sle i32 %605, %606
  br i1 %607, label %608, label %653

608:                                              ; preds = %604
  %609 = load i32, ptr %59, align 4, !tbaa !9
  %610 = load i32, ptr %69, align 4, !tbaa !9
  %611 = load ptr, ptr %21, align 8, !tbaa !5
  %612 = load i32, ptr %611, align 4, !tbaa !9
  %613 = mul nsw i32 %610, %612
  %614 = add nsw i32 %609, %613
  store i32 %614, ptr %44, align 4, !tbaa !9
  %615 = load i32, ptr %59, align 4, !tbaa !9
  %616 = load i32, ptr %67, align 4, !tbaa !9
  %617 = load i32, ptr %36, align 4, !tbaa !9
  %618 = mul nsw i32 %616, %617
  %619 = add nsw i32 %615, %618
  store i32 %619, ptr %45, align 4, !tbaa !9
  %620 = load ptr, ptr %22, align 8, !tbaa !5
  %621 = load i32, ptr %45, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds %struct.doublecomplex, ptr %620, i64 %622
  %624 = getelementptr inbounds %struct.doublecomplex, ptr %623, i32 0, i32 0
  %625 = load double, ptr %624, align 8, !tbaa !17
  %626 = fneg double %625
  %627 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %626, ptr %627, align 8, !tbaa !17
  %628 = load ptr, ptr %22, align 8, !tbaa !5
  %629 = load i32, ptr %45, align 4, !tbaa !9
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds %struct.doublecomplex, ptr %628, i64 %630
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %631, i32 0, i32 1
  %633 = load double, ptr %632, align 8, !tbaa !20
  %634 = fneg double %633
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %634, ptr %635, align 8, !tbaa !20
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %637 = load double, ptr %636, align 8, !tbaa !17
  %638 = load ptr, ptr %30, align 8, !tbaa !5
  %639 = load i32, ptr %44, align 4, !tbaa !9
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %638, i64 %640
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %641, i32 0, i32 0
  store double %637, ptr %642, align 8, !tbaa !17
  %643 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %644 = load double, ptr %643, align 8, !tbaa !20
  %645 = load ptr, ptr %30, align 8, !tbaa !5
  %646 = load i32, ptr %44, align 4, !tbaa !9
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds %struct.doublecomplex, ptr %645, i64 %647
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %648, i32 0, i32 1
  store double %644, ptr %649, align 8, !tbaa !20
  br label %650

650:                                              ; preds = %608
  %651 = load i32, ptr %59, align 4, !tbaa !9
  %652 = add nsw i32 %651, 1
  store i32 %652, ptr %59, align 4, !tbaa !9
  br label %604, !llvm.loop !24

653:                                              ; preds = %604
  %654 = load i32, ptr %67, align 4, !tbaa !9
  %655 = sub nsw i32 %654, 1
  store i32 %655, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %656

656:                                              ; preds = %756, %653
  %657 = load i32, ptr %59, align 4, !tbaa !9
  %658 = load i32, ptr %42, align 4, !tbaa !9
  %659 = icmp sle i32 %657, %658
  br i1 %659, label %660, label %759

660:                                              ; preds = %656
  %661 = load i32, ptr %59, align 4, !tbaa !9
  %662 = load i32, ptr %59, align 4, !tbaa !9
  %663 = load i32, ptr %36, align 4, !tbaa !9
  %664 = mul nsw i32 %662, %663
  %665 = add nsw i32 %661, %664
  store i32 %665, ptr %44, align 4, !tbaa !9
  %666 = load i32, ptr %59, align 4, !tbaa !9
  %667 = load i32, ptr %59, align 4, !tbaa !9
  %668 = load i32, ptr %36, align 4, !tbaa !9
  %669 = mul nsw i32 %667, %668
  %670 = add nsw i32 %666, %669
  store i32 %670, ptr %45, align 4, !tbaa !9
  %671 = load i32, ptr %67, align 4, !tbaa !9
  %672 = load i32, ptr %67, align 4, !tbaa !9
  %673 = load i32, ptr %36, align 4, !tbaa !9
  %674 = mul nsw i32 %672, %673
  %675 = add nsw i32 %671, %674
  store i32 %675, ptr %46, align 4, !tbaa !9
  %676 = load ptr, ptr %22, align 8, !tbaa !5
  %677 = load i32, ptr %45, align 4, !tbaa !9
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds %struct.doublecomplex, ptr %676, i64 %678
  %680 = getelementptr inbounds %struct.doublecomplex, ptr %679, i32 0, i32 0
  %681 = load double, ptr %680, align 8, !tbaa !17
  %682 = load ptr, ptr %22, align 8, !tbaa !5
  %683 = load i32, ptr %46, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds %struct.doublecomplex, ptr %682, i64 %684
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %685, i32 0, i32 0
  %687 = load double, ptr %686, align 8, !tbaa !17
  %688 = fsub double %681, %687
  %689 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %688, ptr %689, align 8, !tbaa !17
  %690 = load ptr, ptr %22, align 8, !tbaa !5
  %691 = load i32, ptr %45, align 4, !tbaa !9
  %692 = sext i32 %691 to i64
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %690, i64 %692
  %694 = getelementptr inbounds %struct.doublecomplex, ptr %693, i32 0, i32 1
  %695 = load double, ptr %694, align 8, !tbaa !20
  %696 = load ptr, ptr %22, align 8, !tbaa !5
  %697 = load i32, ptr %46, align 4, !tbaa !9
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %696, i64 %698
  %700 = getelementptr inbounds %struct.doublecomplex, ptr %699, i32 0, i32 1
  %701 = load double, ptr %700, align 8, !tbaa !20
  %702 = fsub double %695, %701
  %703 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %702, ptr %703, align 8, !tbaa !20
  %704 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %705 = load double, ptr %704, align 8, !tbaa !17
  %706 = load ptr, ptr %22, align 8, !tbaa !5
  %707 = load i32, ptr %44, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds %struct.doublecomplex, ptr %706, i64 %708
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %709, i32 0, i32 0
  store double %705, ptr %710, align 8, !tbaa !17
  %711 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %712 = load double, ptr %711, align 8, !tbaa !20
  %713 = load ptr, ptr %22, align 8, !tbaa !5
  %714 = load i32, ptr %44, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %715
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %716, i32 0, i32 1
  store double %712, ptr %717, align 8, !tbaa !20
  %718 = load ptr, ptr %22, align 8, !tbaa !5
  %719 = load i32, ptr %59, align 4, !tbaa !9
  %720 = load i32, ptr %59, align 4, !tbaa !9
  %721 = load i32, ptr %36, align 4, !tbaa !9
  %722 = mul nsw i32 %720, %721
  %723 = add nsw i32 %719, %722
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds %struct.doublecomplex, ptr %718, i64 %724
  %726 = call { double, double } @Cd(ptr noundef %725)
  %727 = extractvalue { double, double } %726, 0
  %728 = extractvalue { double, double } %726, 1
  %729 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %730 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  store double %727, ptr %729, align 8
  store double %728, ptr %730, align 8
  %731 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %732 = load double, ptr %731, align 8
  %733 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %734 = load double, ptr %733, align 8
  %735 = call double @cabs(double noundef %732, double noundef %734) #5
  %736 = load double, ptr %55, align 8, !tbaa !21
  %737 = fcmp olt double %735, %736
  br i1 %737, label %738, label %755

738:                                              ; preds = %660
  %739 = load i32, ptr %59, align 4, !tbaa !9
  %740 = load i32, ptr %59, align 4, !tbaa !9
  %741 = load i32, ptr %36, align 4, !tbaa !9
  %742 = mul nsw i32 %740, %741
  %743 = add nsw i32 %739, %742
  store i32 %743, ptr %44, align 4, !tbaa !9
  %744 = load double, ptr %55, align 8, !tbaa !21
  %745 = load ptr, ptr %22, align 8, !tbaa !5
  %746 = load i32, ptr %44, align 4, !tbaa !9
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds %struct.doublecomplex, ptr %745, i64 %747
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %748, i32 0, i32 0
  store double %744, ptr %749, align 8, !tbaa !17
  %750 = load ptr, ptr %22, align 8, !tbaa !5
  %751 = load i32, ptr %44, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %750, i64 %752
  %754 = getelementptr inbounds %struct.doublecomplex, ptr %753, i32 0, i32 1
  store double 0.000000e+00, ptr %754, align 8, !tbaa !20
  br label %755

755:                                              ; preds = %738, %660
  br label %756

756:                                              ; preds = %755
  %757 = load i32, ptr %59, align 4, !tbaa !9
  %758 = add nsw i32 %757, 1
  store i32 %758, ptr %59, align 4, !tbaa !9
  br label %656, !llvm.loop !25

759:                                              ; preds = %656
  %760 = load i32, ptr %67, align 4, !tbaa !9
  %761 = icmp sgt i32 %760, 1
  br i1 %761, label %762, label %798

762:                                              ; preds = %759
  %763 = load i32, ptr %67, align 4, !tbaa !9
  %764 = sub nsw i32 %763, 1
  store i32 %764, ptr %42, align 4, !tbaa !9
  %765 = load ptr, ptr %22, align 8, !tbaa !5
  %766 = load i32, ptr %37, align 4, !tbaa !9
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds %struct.doublecomplex, ptr %765, i64 %767
  %769 = load ptr, ptr %23, align 8, !tbaa !5
  %770 = load ptr, ptr %30, align 8, !tbaa !5
  %771 = load i32, ptr %69, align 4, !tbaa !9
  %772 = load ptr, ptr %21, align 8, !tbaa !5
  %773 = load i32, ptr %772, align 4, !tbaa !9
  %774 = mul nsw i32 %771, %773
  %775 = add nsw i32 %774, 1
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds %struct.doublecomplex, ptr %770, i64 %776
  %778 = load ptr, ptr %32, align 8, !tbaa !5
  %779 = getelementptr inbounds double, ptr %778, i64 1
  %780 = load ptr, ptr %34, align 8, !tbaa !5
  call void @zlatrs_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str.12, ptr noundef @.str.13, ptr noundef %42, ptr noundef %768, ptr noundef %769, ptr noundef %777, ptr noundef %60, ptr noundef %779, ptr noundef %780)
  %781 = load i32, ptr %67, align 4, !tbaa !9
  %782 = load i32, ptr %69, align 4, !tbaa !9
  %783 = load ptr, ptr %21, align 8, !tbaa !5
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = mul nsw i32 %782, %784
  %786 = add nsw i32 %781, %785
  store i32 %786, ptr %42, align 4, !tbaa !9
  %787 = load double, ptr %60, align 8, !tbaa !21
  %788 = load ptr, ptr %30, align 8, !tbaa !5
  %789 = load i32, ptr %42, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds %struct.doublecomplex, ptr %788, i64 %790
  %792 = getelementptr inbounds %struct.doublecomplex, ptr %791, i32 0, i32 0
  store double %787, ptr %792, align 8, !tbaa !17
  %793 = load ptr, ptr %30, align 8, !tbaa !5
  %794 = load i32, ptr %42, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %793, i64 %795
  %797 = getelementptr inbounds %struct.doublecomplex, ptr %796, i32 0, i32 1
  store double 0.000000e+00, ptr %797, align 8, !tbaa !20
  br label %798

798:                                              ; preds = %762, %759
  %799 = load i32, ptr %56, align 4, !tbaa !9
  %800 = icmp ne i32 %799, 0
  br i1 %800, label %879, label %801

801:                                              ; preds = %798
  %802 = load ptr, ptr %30, align 8, !tbaa !5
  %803 = load i32, ptr %69, align 4, !tbaa !9
  %804 = load ptr, ptr %21, align 8, !tbaa !5
  %805 = load i32, ptr %804, align 4, !tbaa !9
  %806 = mul nsw i32 %803, %805
  %807 = add nsw i32 %806, 1
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %802, i64 %808
  %810 = load ptr, ptr %26, align 8, !tbaa !5
  %811 = load i32, ptr %68, align 4, !tbaa !9
  %812 = load i32, ptr %40, align 4, !tbaa !9
  %813 = mul nsw i32 %811, %812
  %814 = add nsw i32 %813, 1
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds %struct.doublecomplex, ptr %810, i64 %815
  call void @zcopy_(ptr noundef %67, ptr noundef %809, ptr noundef @c__1, ptr noundef %816, ptr noundef @c__1)
  %817 = load ptr, ptr %26, align 8, !tbaa !5
  %818 = load i32, ptr %68, align 4, !tbaa !9
  %819 = load i32, ptr %40, align 4, !tbaa !9
  %820 = mul nsw i32 %818, %819
  %821 = add nsw i32 %820, 1
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds %struct.doublecomplex, ptr %817, i64 %822
  %824 = call i32 @izamax_(ptr noundef %67, ptr noundef %823, ptr noundef @c__1)
  store i32 %824, ptr %66, align 4, !tbaa !9
  %825 = load ptr, ptr %26, align 8, !tbaa !5
  %826 = load i32, ptr %66, align 4, !tbaa !9
  %827 = load i32, ptr %68, align 4, !tbaa !9
  %828 = load i32, ptr %40, 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
  %836 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 0
  %837 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 1
  store double %834, ptr %836, align 8
  store double %835, ptr %837, align 8
  %838 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 0
  %839 = load double, ptr %838, align 8
  %840 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 1
  %841 = load double, ptr %840, align 8
  %842 = call double @cabs(double noundef %839, double noundef %841) #5
  %843 = fdiv double 1.000000e+00, %842
  store double %843, ptr %61, align 8, !tbaa !21
  %844 = load ptr, ptr %26, align 8, !tbaa !5
  %845 = load i32, ptr %68, align 4, !tbaa !9
  %846 = load i32, ptr %40, align 4, !tbaa !9
  %847 = mul nsw i32 %845, %846
  %848 = add nsw i32 %847, 1
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds %struct.doublecomplex, ptr %844, i64 %849
  call void @zdscal_(ptr noundef %67, ptr noundef %61, ptr noundef %850, ptr noundef @c__1)
  %851 = load ptr, ptr %21, align 8, !tbaa !5
  %852 = load i32, ptr %851, align 4, !tbaa !9
  store i32 %852, ptr %42, align 4, !tbaa !9
  %853 = load i32, ptr %67, align 4, !tbaa !9
  %854 = add nsw i32 %853, 1
  store i32 %854, ptr %59, align 4, !tbaa !9
  br label %855

855:                                              ; preds = %875, %801
  %856 = load i32, ptr %59, align 4, !tbaa !9
  %857 = load i32, ptr %42, align 4, !tbaa !9
  %858 = icmp sle i32 %856, %857
  br i1 %858, label %859, label %878

859:                                              ; preds = %855
  %860 = load i32, ptr %59, align 4, !tbaa !9
  %861 = load i32, ptr %68, align 4, !tbaa !9
  %862 = load i32, ptr %40, align 4, !tbaa !9
  %863 = mul nsw i32 %861, %862
  %864 = add nsw i32 %860, %863
  store i32 %864, ptr %44, align 4, !tbaa !9
  %865 = load ptr, ptr %26, align 8, !tbaa !5
  %866 = load i32, ptr %44, align 4, !tbaa !9
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %865, i64 %867
  %869 = getelementptr inbounds %struct.doublecomplex, ptr %868, i32 0, i32 0
  store double 0.000000e+00, ptr %869, align 8, !tbaa !17
  %870 = load ptr, ptr %26, align 8, !tbaa !5
  %871 = load i32, ptr %44, align 4, !tbaa !9
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds %struct.doublecomplex, ptr %870, i64 %872
  %874 = getelementptr inbounds %struct.doublecomplex, ptr %873, i32 0, i32 1
  store double 0.000000e+00, ptr %874, align 8, !tbaa !20
  br label %875

875:                                              ; preds = %859
  %876 = load i32, ptr %59, align 4, !tbaa !9
  %877 = add nsw i32 %876, 1
  store i32 %877, ptr %59, align 4, !tbaa !9
  br label %855, !llvm.loop !26

878:                                              ; preds = %855
  br label %1106

879:                                              ; preds = %798
  %880 = load i32, ptr %65, align 4, !tbaa !9
  %881 = icmp eq i32 %880, 1
  br i1 %881, label %882, label %949

882:                                              ; preds = %879
  %883 = load i32, ptr %67, align 4, !tbaa !9
  %884 = icmp sgt i32 %883, 1
  br i1 %884, label %885, label %912

885:                                              ; preds = %882
  %886 = load i32, ptr %67, align 4, !tbaa !9
  %887 = sub nsw i32 %886, 1
  store i32 %887, ptr %42, align 4, !tbaa !9
  %888 = load double, ptr %60, align 8, !tbaa !21
  %889 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %888, ptr %889, align 8, !tbaa !17
  %890 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double 0.000000e+00, ptr %890, align 8, !tbaa !20
  %891 = load ptr, ptr %21, align 8, !tbaa !5
  %892 = load ptr, ptr %26, align 8, !tbaa !5
  %893 = load i32, ptr %41, align 4, !tbaa !9
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds %struct.doublecomplex, ptr %892, i64 %894
  %896 = load ptr, ptr %27, align 8, !tbaa !5
  %897 = load ptr, ptr %30, align 8, !tbaa !5
  %898 = load i32, ptr %69, align 4, !tbaa !9
  %899 = load ptr, ptr %21, align 8, !tbaa !5
  %900 = load i32, ptr %899, align 4, !tbaa !9
  %901 = mul nsw i32 %898, %900
  %902 = add nsw i32 %901, 1
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds %struct.doublecomplex, ptr %897, i64 %903
  %905 = load ptr, ptr %26, align 8, !tbaa !5
  %906 = load i32, ptr %67, align 4, !tbaa !9
  %907 = load i32, ptr %40, align 4, !tbaa !9
  %908 = mul nsw i32 %906, %907
  %909 = add nsw i32 %908, 1
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds %struct.doublecomplex, ptr %905, i64 %910
  call void @zgemv_(ptr noundef @.str.14, ptr noundef %891, ptr noundef %42, ptr noundef @c_b2, ptr noundef %895, ptr noundef %896, ptr noundef %904, ptr noundef @c__1, ptr noundef %49, ptr noundef %911, ptr noundef @c__1)
  br label %912

912:                                              ; preds = %885, %882
  %913 = load ptr, ptr %21, align 8, !tbaa !5
  %914 = load ptr, ptr %26, align 8, !tbaa !5
  %915 = load i32, ptr %67, align 4, !tbaa !9
  %916 = load i32, ptr %40, align 4, !tbaa !9
  %917 = mul nsw i32 %915, %916
  %918 = add nsw i32 %917, 1
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds %struct.doublecomplex, ptr %914, i64 %919
  %921 = call i32 @izamax_(ptr noundef %913, ptr noundef %920, ptr noundef @c__1)
  store i32 %921, ptr %66, align 4, !tbaa !9
  %922 = load ptr, ptr %26, align 8, !tbaa !5
  %923 = load i32, ptr %66, align 4, !tbaa !9
  %924 = load i32, ptr %67, align 4, !tbaa !9
  %925 = load i32, ptr %40, align 4, !tbaa !9
  %926 = mul nsw i32 %924, %925
  %927 = add nsw i32 %923, %926
  %928 = sext i32 %927 to i64
  %929 = getelementptr inbounds %struct.doublecomplex, ptr %922, i64 %928
  %930 = call { double, double } @Cd(ptr noundef %929)
  %931 = extractvalue { double, double } %930, 0
  %932 = extractvalue { double, double } %930, 1
  %933 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %934 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  store double %931, ptr %933, align 8
  store double %932, ptr %934, align 8
  %935 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %936 = load double, ptr %935, align 8
  %937 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  %938 = load double, ptr %937, align 8
  %939 = call double @cabs(double noundef %936, double noundef %938) #5
  %940 = fdiv double 1.000000e+00, %939
  store double %940, ptr %61, align 8, !tbaa !21
  %941 = load ptr, ptr %21, align 8, !tbaa !5
  %942 = load ptr, ptr %26, align 8, !tbaa !5
  %943 = load i32, ptr %67, align 4, !tbaa !9
  %944 = load i32, ptr %40, align 4, !tbaa !9
  %945 = mul nsw i32 %943, %944
  %946 = add nsw i32 %945, 1
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %942, i64 %947
  call void @zdscal_(ptr noundef %941, ptr noundef %61, ptr noundef %948, ptr noundef @c__1)
  br label %1105

949:                                              ; preds = %879
  %950 = load ptr, ptr %21, align 8, !tbaa !5
  %951 = load i32, ptr %950, align 4, !tbaa !9
  store i32 %951, ptr %42, align 4, !tbaa !9
  %952 = load i32, ptr %67, align 4, !tbaa !9
  %953 = add nsw i32 %952, 1
  store i32 %953, ptr %59, align 4, !tbaa !9
  br label %954

954:                                              ; preds = %975, %949
  %955 = load i32, ptr %59, align 4, !tbaa !9
  %956 = load i32, ptr %42, align 4, !tbaa !9
  %957 = icmp sle i32 %955, %956
  br i1 %957, label %958, label %978

958:                                              ; preds = %954
  %959 = load i32, ptr %59, align 4, !tbaa !9
  %960 = load i32, ptr %69, align 4, !tbaa !9
  %961 = load ptr, ptr %21, align 8, !tbaa !5
  %962 = load i32, ptr %961, align 4, !tbaa !9
  %963 = mul nsw i32 %960, %962
  %964 = add nsw i32 %959, %963
  store i32 %964, ptr %44, align 4, !tbaa !9
  %965 = load ptr, ptr %30, align 8, !tbaa !5
  %966 = load i32, ptr %44, align 4, !tbaa !9
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds %struct.doublecomplex, ptr %965, i64 %967
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %968, i32 0, i32 0
  store double 0.000000e+00, ptr %969, align 8, !tbaa !17
  %970 = load ptr, ptr %30, align 8, !tbaa !5
  %971 = load i32, ptr %44, align 4, !tbaa !9
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds %struct.doublecomplex, ptr %970, i64 %972
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %973, i32 0, i32 1
  store double 0.000000e+00, ptr %974, align 8, !tbaa !20
  br label %975

975:                                              ; preds = %958
  %976 = load i32, ptr %59, align 4, !tbaa !9
  %977 = add nsw i32 %976, 1
  store i32 %977, ptr %59, align 4, !tbaa !9
  br label %954, !llvm.loop !27

978:                                              ; preds = %954
  %979 = load i32, ptr %69, align 4, !tbaa !9
  %980 = icmp eq i32 %979, 1
  br i1 %980, label %984, label %981

981:                                              ; preds = %978
  %982 = load i32, ptr %67, align 4, !tbaa !9
  %983 = icmp eq i32 %982, 1
  br i1 %983, label %984, label %1101

984:                                              ; preds = %981, %978
  %985 = load i32, ptr %65, align 4, !tbaa !9
  %986 = load i32, ptr %69, align 4, !tbaa !9
  %987 = sub nsw i32 %985, %986
  %988 = add nsw i32 %987, 1
  store i32 %988, ptr %42, align 4, !tbaa !9
  %989 = load i32, ptr %67, align 4, !tbaa !9
  %990 = load i32, ptr %65, align 4, !tbaa !9
  %991 = add nsw i32 %989, %990
  %992 = load i32, ptr %69, align 4, !tbaa !9
  %993 = sub nsw i32 %991, %992
  store i32 %993, ptr %44, align 4, !tbaa !9
  %994 = load ptr, ptr %21, align 8, !tbaa !5
  %995 = load ptr, ptr %26, align 8, !tbaa !5
  %996 = load i32, ptr %41, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds %struct.doublecomplex, ptr %995, i64 %997
  %999 = load ptr, ptr %27, align 8, !tbaa !5
  %1000 = load ptr, ptr %30, align 8, !tbaa !5
  %1001 = load i32, ptr %69, align 4, !tbaa !9
  %1002 = load ptr, ptr %21, align 8, !tbaa !5
  %1003 = load i32, ptr %1002, align 4, !tbaa !9
  %1004 = mul nsw i32 %1001, %1003
  %1005 = add nsw i32 %1004, 1
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds %struct.doublecomplex, ptr %1000, i64 %1006
  %1008 = load ptr, ptr %21, align 8, !tbaa !5
  %1009 = load ptr, ptr %30, align 8, !tbaa !5
  %1010 = load i32, ptr %65, align 4, !tbaa !9
  %1011 = load i32, ptr %69, align 4, !tbaa !9
  %1012 = add nsw i32 %1010, %1011
  %1013 = load ptr, ptr %21, align 8, !tbaa !5
  %1014 = load i32, ptr %1013, align 4, !tbaa !9
  %1015 = mul nsw i32 %1012, %1014
  %1016 = add nsw i32 %1015, 1
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds %struct.doublecomplex, ptr %1009, i64 %1017
  %1019 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zgemm_(ptr noundef @.str.14, ptr noundef @.str.14, ptr noundef %994, ptr noundef %42, ptr noundef %44, ptr noundef @c_b2, ptr noundef %998, ptr noundef %999, ptr noundef %1007, ptr noundef %1008, ptr noundef @c_b1, ptr noundef %1018, ptr noundef %1019)
  %1020 = load i32, ptr %65, align 4, !tbaa !9
  store i32 %1020, ptr %42, align 4, !tbaa !9
  %1021 = load i32, ptr %69, align 4, !tbaa !9
  store i32 %1021, ptr %59, align 4, !tbaa !9
  br label %1022

1022:                                             ; preds = %1072, %984
  %1023 = load i32, ptr %59, align 4, !tbaa !9
  %1024 = load i32, ptr %42, align 4, !tbaa !9
  %1025 = icmp sle i32 %1023, %1024
  br i1 %1025, label %1026, label %1075

1026:                                             ; preds = %1022
  %1027 = load ptr, ptr %21, align 8, !tbaa !5
  %1028 = load ptr, ptr %30, align 8, !tbaa !5
  %1029 = load i32, ptr %65, align 4, !tbaa !9
  %1030 = load i32, ptr %59, align 4, !tbaa !9
  %1031 = add nsw i32 %1029, %1030
  %1032 = load ptr, ptr %21, align 8, !tbaa !5
  %1033 = load i32, ptr %1032, align 4, !tbaa !9
  %1034 = mul nsw i32 %1031, %1033
  %1035 = add nsw i32 %1034, 1
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds %struct.doublecomplex, ptr %1028, i64 %1036
  %1038 = call i32 @izamax_(ptr noundef %1027, ptr noundef %1037, ptr noundef @c__1)
  store i32 %1038, ptr %66, align 4, !tbaa !9
  %1039 = load ptr, ptr %30, align 8, !tbaa !5
  %1040 = load i32, ptr %66, align 4, !tbaa !9
  %1041 = load i32, ptr %65, align 4, !tbaa !9
  %1042 = load i32, ptr %59, align 4, !tbaa !9
  %1043 = add nsw i32 %1041, %1042
  %1044 = load ptr, ptr %21, align 8, !tbaa !5
  %1045 = load i32, ptr %1044, align 4, !tbaa !9
  %1046 = mul nsw i32 %1043, %1045
  %1047 = add nsw i32 %1040, %1046
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %1039, i64 %1048
  %1050 = call { double, double } @Cd(ptr noundef %1049)
  %1051 = extractvalue { double, double } %1050, 0
  %1052 = extractvalue { double, double } %1050, 1
  %1053 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 0
  %1054 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 1
  store double %1051, ptr %1053, align 8
  store double %1052, ptr %1054, align 8
  %1055 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 0
  %1056 = load double, ptr %1055, align 8
  %1057 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 1
  %1058 = load double, ptr %1057, align 8
  %1059 = call double @cabs(double noundef %1056, double noundef %1058) #5
  %1060 = fdiv double 1.000000e+00, %1059
  store double %1060, ptr %61, align 8, !tbaa !21
  %1061 = load ptr, ptr %21, align 8, !tbaa !5
  %1062 = load ptr, ptr %30, align 8, !tbaa !5
  %1063 = load i32, ptr %65, align 4, !tbaa !9
  %1064 = load i32, ptr %59, align 4, !tbaa !9
  %1065 = add nsw i32 %1063, %1064
  %1066 = load ptr, ptr %21, align 8, !tbaa !5
  %1067 = load i32, ptr %1066, align 4, !tbaa !9
  %1068 = mul nsw i32 %1065, %1067
  %1069 = add nsw i32 %1068, 1
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds %struct.doublecomplex, ptr %1062, i64 %1070
  call void @zdscal_(ptr noundef %1061, ptr noundef %61, ptr noundef %1071, ptr noundef @c__1)
  br label %1072

1072:                                             ; preds = %1026
  %1073 = load i32, ptr %59, align 4, !tbaa !9
  %1074 = add nsw i32 %1073, 1
  store i32 %1074, ptr %59, align 4, !tbaa !9
  br label %1022, !llvm.loop !28

1075:                                             ; preds = %1022
  %1076 = load i32, ptr %65, align 4, !tbaa !9
  %1077 = load i32, ptr %69, align 4, !tbaa !9
  %1078 = sub nsw i32 %1076, %1077
  %1079 = add nsw i32 %1078, 1
  store i32 %1079, ptr %42, align 4, !tbaa !9
  %1080 = load ptr, ptr %21, align 8, !tbaa !5
  %1081 = load ptr, ptr %30, align 8, !tbaa !5
  %1082 = load i32, ptr %65, align 4, !tbaa !9
  %1083 = load i32, ptr %69, align 4, !tbaa !9
  %1084 = add nsw i32 %1082, %1083
  %1085 = load ptr, ptr %21, align 8, !tbaa !5
  %1086 = load i32, ptr %1085, align 4, !tbaa !9
  %1087 = mul nsw i32 %1084, %1086
  %1088 = add nsw i32 %1087, 1
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds %struct.doublecomplex, ptr %1081, i64 %1089
  %1091 = load ptr, ptr %21, align 8, !tbaa !5
  %1092 = load ptr, ptr %26, align 8, !tbaa !5
  %1093 = load i32, ptr %67, align 4, !tbaa !9
  %1094 = load i32, ptr %40, align 4, !tbaa !9
  %1095 = mul nsw i32 %1093, %1094
  %1096 = add nsw i32 %1095, 1
  %1097 = sext i32 %1096 to i64
  %1098 = getelementptr inbounds %struct.doublecomplex, ptr %1092, i64 %1097
  %1099 = load ptr, ptr %27, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.7, ptr noundef %1080, ptr noundef %42, ptr noundef %1090, ptr noundef %1091, ptr noundef %1098, ptr noundef %1099)
  %1100 = load i32, ptr %65, align 4, !tbaa !9
  store i32 %1100, ptr %69, align 4, !tbaa !9
  br label %1104

1101:                                             ; preds = %981
  %1102 = load i32, ptr %69, align 4, !tbaa !9
  %1103 = add nsw i32 %1102, -1
  store i32 %1103, ptr %69, align 4, !tbaa !9
  br label %1104

1104:                                             ; preds = %1101, %1075
  br label %1105

1105:                                             ; preds = %1104, %912
  br label %1106

1106:                                             ; preds = %1105, %878
  %1107 = load i32, ptr %67, align 4, !tbaa !9
  %1108 = sub nsw i32 %1107, 1
  store i32 %1108, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %1109

1109:                                             ; preds = %1142, %1106
  %1110 = load i32, ptr %59, align 4, !tbaa !9
  %1111 = load i32, ptr %42, align 4, !tbaa !9
  %1112 = icmp sle i32 %1110, %1111
  br i1 %1112, label %1113, label %1145

1113:                                             ; preds = %1109
  %1114 = load i32, ptr %59, align 4, !tbaa !9
  %1115 = load i32, ptr %59, align 4, !tbaa !9
  %1116 = load i32, ptr %36, align 4, !tbaa !9
  %1117 = mul nsw i32 %1115, %1116
  %1118 = add nsw i32 %1114, %1117
  store i32 %1118, ptr %44, align 4, !tbaa !9
  %1119 = load i32, ptr %59, align 4, !tbaa !9
  store i32 %1119, ptr %45, align 4, !tbaa !9
  %1120 = load ptr, ptr %30, align 8, !tbaa !5
  %1121 = load i32, ptr %45, align 4, !tbaa !9
  %1122 = sext i32 %1121 to i64
  %1123 = getelementptr inbounds %struct.doublecomplex, ptr %1120, i64 %1122
  %1124 = getelementptr inbounds %struct.doublecomplex, ptr %1123, i32 0, i32 0
  %1125 = load double, ptr %1124, align 8, !tbaa !17
  %1126 = load ptr, ptr %22, align 8, !tbaa !5
  %1127 = load i32, ptr %44, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds %struct.doublecomplex, ptr %1126, i64 %1128
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %1129, i32 0, i32 0
  store double %1125, ptr %1130, align 8, !tbaa !17
  %1131 = load ptr, ptr %30, align 8, !tbaa !5
  %1132 = load i32, ptr %45, align 4, !tbaa !9
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds %struct.doublecomplex, ptr %1131, i64 %1133
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %1134, i32 0, i32 1
  %1136 = load double, ptr %1135, align 8, !tbaa !20
  %1137 = load ptr, ptr %22, align 8, !tbaa !5
  %1138 = load i32, ptr %44, align 4, !tbaa !9
  %1139 = sext i32 %1138 to i64
  %1140 = getelementptr inbounds %struct.doublecomplex, ptr %1137, i64 %1139
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %1140, i32 0, i32 1
  store double %1136, ptr %1141, align 8, !tbaa !20
  br label %1142

1142:                                             ; preds = %1113
  %1143 = load i32, ptr %59, align 4, !tbaa !9
  %1144 = add nsw i32 %1143, 1
  store i32 %1144, ptr %59, align 4, !tbaa !9
  br label %1109, !llvm.loop !29

1145:                                             ; preds = %1109
  %1146 = load i32, ptr %68, align 4, !tbaa !9
  %1147 = add nsw i32 %1146, -1
  store i32 %1147, ptr %68, align 4, !tbaa !9
  br label %1148

1148:                                             ; preds = %1145, %554
  br label %1149

1149:                                             ; preds = %1148
  %1150 = load i32, ptr %67, align 4, !tbaa !9
  %1151 = add nsw i32 %1150, -1
  store i32 %1151, ptr %67, align 4, !tbaa !9
  br label %541, !llvm.loop !30

1152:                                             ; preds = %541
  br label %1153

1153:                                             ; preds = %1152, %532
  %1154 = load i32, ptr %62, align 4, !tbaa !9
  %1155 = icmp ne i32 %1154, 0
  br i1 %1155, label %1156, label %1823

1156:                                             ; preds = %1153
  store i32 1, ptr %69, align 4, !tbaa !9
  store i32 1, ptr %68, align 4, !tbaa !9
  %1157 = load ptr, ptr %21, align 8, !tbaa !5
  %1158 = load i32, ptr %1157, align 4, !tbaa !9
  store i32 %1158, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %67, align 4, !tbaa !9
  br label %1159

1159:                                             ; preds = %1819, %1156
  %1160 = load i32, ptr %67, align 4, !tbaa !9
  %1161 = load i32, ptr %42, align 4, !tbaa !9
  %1162 = icmp sle i32 %1160, %1161
  br i1 %1162, label %1163, label %1822

1163:                                             ; preds = %1159
  %1164 = load i32, ptr %64, align 4, !tbaa !9
  %1165 = icmp ne i32 %1164, 0
  br i1 %1165, label %1166, label %1175

1166:                                             ; preds = %1163
  %1167 = load ptr, ptr %20, align 8, !tbaa !5
  %1168 = load i32, ptr %67, align 4, !tbaa !9
  %1169 = sext i32 %1168 to i64
  %1170 = getelementptr inbounds i32, ptr %1167, i64 %1169
  %1171 = load i32, ptr %1170, align 4, !tbaa !9
  %1172 = icmp ne i32 %1171, 0
  br i1 %1172, label %1174, label %1173

1173:                                             ; preds = %1166
  br label %1818

1174:                                             ; preds = %1166
  br label %1175

1175:                                             ; preds = %1174, %1163
  %1176 = load double, ptr %74, align 8, !tbaa !21
  %1177 = load ptr, ptr %22, align 8, !tbaa !5
  %1178 = load i32, ptr %67, align 4, !tbaa !9
  %1179 = load i32, ptr %67, align 4, !tbaa !9
  %1180 = load i32, ptr %36, align 4, !tbaa !9
  %1181 = mul nsw i32 %1179, %1180
  %1182 = add nsw i32 %1178, %1181
  %1183 = sext i32 %1182 to i64
  %1184 = getelementptr inbounds %struct.doublecomplex, ptr %1177, i64 %1183
  %1185 = call { double, double } @Cd(ptr noundef %1184)
  %1186 = extractvalue { double, double } %1185, 0
  %1187 = extractvalue { double, double } %1185, 1
  %1188 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %1189 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  store double %1186, ptr %1188, align 8
  store double %1187, ptr %1189, align 8
  %1190 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %1191 = load double, ptr %1190, align 8
  %1192 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  %1193 = load double, ptr %1192, align 8
  %1194 = call double @cabs(double noundef %1191, double noundef %1193) #5
  %1195 = fmul double %1176, %1194
  store double %1195, ptr %48, align 8, !tbaa !21
  %1196 = load double, ptr %48, align 8, !tbaa !21
  %1197 = load double, ptr %72, align 8, !tbaa !21
  %1198 = fcmp oge double %1196, %1197
  br i1 %1198, label %1199, label %1201

1199:                                             ; preds = %1175
  %1200 = load double, ptr %48, align 8, !tbaa !21
  br label %1203

1201:                                             ; preds = %1175
  %1202 = load double, ptr %72, align 8, !tbaa !21
  br label %1203

1203:                                             ; preds = %1201, %1199
  %1204 = phi double [ %1200, %1199 ], [ %1202, %1201 ]
  store double %1204, ptr %55, align 8, !tbaa !21
  %1205 = load i32, ptr %67, align 4, !tbaa !9
  %1206 = load i32, ptr %69, align 4, !tbaa !9
  %1207 = load ptr, ptr %21, align 8, !tbaa !5
  %1208 = load i32, ptr %1207, align 4, !tbaa !9
  %1209 = mul nsw i32 %1206, %1208
  %1210 = add nsw i32 %1205, %1209
  store i32 %1210, ptr %44, align 4, !tbaa !9
  %1211 = load ptr, ptr %30, align 8, !tbaa !5
  %1212 = load i32, ptr %44, align 4, !tbaa !9
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds %struct.doublecomplex, ptr %1211, i64 %1213
  %1215 = getelementptr inbounds %struct.doublecomplex, ptr %1214, i32 0, i32 0
  store double 1.000000e+00, ptr %1215, align 8, !tbaa !17
  %1216 = load ptr, ptr %30, align 8, !tbaa !5
  %1217 = load i32, ptr %44, align 4, !tbaa !9
  %1218 = sext i32 %1217 to i64
  %1219 = getelementptr inbounds %struct.doublecomplex, ptr %1216, i64 %1218
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %1219, i32 0, i32 1
  store double 0.000000e+00, ptr %1220, align 8, !tbaa !20
  %1221 = load ptr, ptr %21, align 8, !tbaa !5
  %1222 = load i32, ptr %1221, align 4, !tbaa !9
  store i32 %1222, ptr %44, align 4, !tbaa !9
  %1223 = load i32, ptr %67, align 4, !tbaa !9
  %1224 = add nsw i32 %1223, 1
  store i32 %1224, ptr %59, align 4, !tbaa !9
  br label %1225

1225:                                             ; preds = %1273, %1203
  %1226 = load i32, ptr %59, align 4, !tbaa !9
  %1227 = load i32, ptr %44, align 4, !tbaa !9
  %1228 = icmp sle i32 %1226, %1227
  br i1 %1228, label %1229, label %1276

1229:                                             ; preds = %1225
  %1230 = load i32, ptr %59, align 4, !tbaa !9
  %1231 = load i32, ptr %69, align 4, !tbaa !9
  %1232 = load ptr, ptr %21, align 8, !tbaa !5
  %1233 = load i32, ptr %1232, align 4, !tbaa !9
  %1234 = mul nsw i32 %1231, %1233
  %1235 = add nsw i32 %1230, %1234
  store i32 %1235, ptr %45, align 4, !tbaa !9
  %1236 = load ptr, ptr %22, align 8, !tbaa !5
  %1237 = load i32, ptr %67, align 4, !tbaa !9
  %1238 = load i32, ptr %59, align 4, !tbaa !9
  %1239 = load i32, ptr %36, align 4, !tbaa !9
  %1240 = mul nsw i32 %1238, %1239
  %1241 = add nsw i32 %1237, %1240
  %1242 = sext i32 %1241 to i64
  %1243 = getelementptr inbounds %struct.doublecomplex, ptr %1236, i64 %1242
  %1244 = call { double, double } @Cd(ptr noundef %1243)
  %1245 = extractvalue { double, double } %1244, 0
  %1246 = extractvalue { double, double } %1244, 1
  %1247 = fneg double %1246
  %1248 = call ptr @_pCd(ptr noundef %50)
  %1249 = getelementptr inbounds { double, double }, ptr %1248, i32 0, i32 0
  %1250 = getelementptr inbounds { double, double }, ptr %1248, i32 0, i32 1
  store double %1245, ptr %1249, align 8
  store double %1247, ptr %1250, align 8
  %1251 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1252 = load double, ptr %1251, align 8, !tbaa !17
  %1253 = fneg double %1252
  %1254 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %1253, ptr %1254, align 8, !tbaa !17
  %1255 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1256 = load double, ptr %1255, align 8, !tbaa !20
  %1257 = fneg double %1256
  %1258 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %1257, ptr %1258, align 8, !tbaa !20
  %1259 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1260 = load double, ptr %1259, align 8, !tbaa !17
  %1261 = load ptr, ptr %30, align 8, !tbaa !5
  %1262 = load i32, ptr %45, align 4, !tbaa !9
  %1263 = sext i32 %1262 to i64
  %1264 = getelementptr inbounds %struct.doublecomplex, ptr %1261, i64 %1263
  %1265 = getelementptr inbounds %struct.doublecomplex, ptr %1264, i32 0, i32 0
  store double %1260, ptr %1265, align 8, !tbaa !17
  %1266 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1267 = load double, ptr %1266, align 8, !tbaa !20
  %1268 = load ptr, ptr %30, align 8, !tbaa !5
  %1269 = load i32, ptr %45, align 4, !tbaa !9
  %1270 = sext i32 %1269 to i64
  %1271 = getelementptr inbounds %struct.doublecomplex, ptr %1268, i64 %1270
  %1272 = getelementptr inbounds %struct.doublecomplex, ptr %1271, i32 0, i32 1
  store double %1267, ptr %1272, align 8, !tbaa !20
  br label %1273

1273:                                             ; preds = %1229
  %1274 = load i32, ptr %59, align 4, !tbaa !9
  %1275 = add nsw i32 %1274, 1
  store i32 %1275, ptr %59, align 4, !tbaa !9
  br label %1225, !llvm.loop !31

1276:                                             ; preds = %1225
  %1277 = load ptr, ptr %21, align 8, !tbaa !5
  %1278 = load i32, ptr %1277, align 4, !tbaa !9
  store i32 %1278, ptr %44, align 4, !tbaa !9
  %1279 = load i32, ptr %67, align 4, !tbaa !9
  %1280 = add nsw i32 %1279, 1
  store i32 %1280, ptr %59, align 4, !tbaa !9
  br label %1281

1281:                                             ; preds = %1381, %1276
  %1282 = load i32, ptr %59, align 4, !tbaa !9
  %1283 = load i32, ptr %44, align 4, !tbaa !9
  %1284 = icmp sle i32 %1282, %1283
  br i1 %1284, label %1285, label %1384

1285:                                             ; preds = %1281
  %1286 = load i32, ptr %59, align 4, !tbaa !9
  %1287 = load i32, ptr %59, align 4, !tbaa !9
  %1288 = load i32, ptr %36, align 4, !tbaa !9
  %1289 = mul nsw i32 %1287, %1288
  %1290 = add nsw i32 %1286, %1289
  store i32 %1290, ptr %45, align 4, !tbaa !9
  %1291 = load i32, ptr %59, align 4, !tbaa !9
  %1292 = load i32, ptr %59, align 4, !tbaa !9
  %1293 = load i32, ptr %36, align 4, !tbaa !9
  %1294 = mul nsw i32 %1292, %1293
  %1295 = add nsw i32 %1291, %1294
  store i32 %1295, ptr %46, align 4, !tbaa !9
  %1296 = load i32, ptr %67, align 4, !tbaa !9
  %1297 = load i32, ptr %67, align 4, !tbaa !9
  %1298 = load i32, ptr %36, align 4, !tbaa !9
  %1299 = mul nsw i32 %1297, %1298
  %1300 = add nsw i32 %1296, %1299
  store i32 %1300, ptr %47, align 4, !tbaa !9
  %1301 = load ptr, ptr %22, align 8, !tbaa !5
  %1302 = load i32, ptr %46, align 4, !tbaa !9
  %1303 = sext i32 %1302 to i64
  %1304 = getelementptr inbounds %struct.doublecomplex, ptr %1301, i64 %1303
  %1305 = getelementptr inbounds %struct.doublecomplex, ptr %1304, i32 0, i32 0
  %1306 = load double, ptr %1305, align 8, !tbaa !17
  %1307 = load ptr, ptr %22, align 8, !tbaa !5
  %1308 = load i32, ptr %47, align 4, !tbaa !9
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds %struct.doublecomplex, ptr %1307, i64 %1309
  %1311 = getelementptr inbounds %struct.doublecomplex, ptr %1310, i32 0, i32 0
  %1312 = load double, ptr %1311, align 8, !tbaa !17
  %1313 = fsub double %1306, %1312
  %1314 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %1313, ptr %1314, align 8, !tbaa !17
  %1315 = load ptr, ptr %22, align 8, !tbaa !5
  %1316 = load i32, ptr %46, align 4, !tbaa !9
  %1317 = sext i32 %1316 to i64
  %1318 = getelementptr inbounds %struct.doublecomplex, ptr %1315, i64 %1317
  %1319 = getelementptr inbounds %struct.doublecomplex, ptr %1318, i32 0, i32 1
  %1320 = load double, ptr %1319, align 8, !tbaa !20
  %1321 = load ptr, ptr %22, align 8, !tbaa !5
  %1322 = load i32, ptr %47, align 4, !tbaa !9
  %1323 = sext i32 %1322 to i64
  %1324 = getelementptr inbounds %struct.doublecomplex, ptr %1321, i64 %1323
  %1325 = getelementptr inbounds %struct.doublecomplex, ptr %1324, i32 0, i32 1
  %1326 = load double, ptr %1325, align 8, !tbaa !20
  %1327 = fsub double %1320, %1326
  %1328 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %1327, ptr %1328, align 8, !tbaa !20
  %1329 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1330 = load double, ptr %1329, align 8, !tbaa !17
  %1331 = load ptr, ptr %22, align 8, !tbaa !5
  %1332 = load i32, ptr %45, align 4, !tbaa !9
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds %struct.doublecomplex, ptr %1331, i64 %1333
  %1335 = getelementptr inbounds %struct.doublecomplex, ptr %1334, i32 0, i32 0
  store double %1330, ptr %1335, align 8, !tbaa !17
  %1336 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1337 = load double, ptr %1336, align 8, !tbaa !20
  %1338 = load ptr, ptr %22, align 8, !tbaa !5
  %1339 = load i32, ptr %45, align 4, !tbaa !9
  %1340 = sext i32 %1339 to i64
  %1341 = getelementptr inbounds %struct.doublecomplex, ptr %1338, i64 %1340
  %1342 = getelementptr inbounds %struct.doublecomplex, ptr %1341, i32 0, i32 1
  store double %1337, ptr %1342, align 8, !tbaa !20
  %1343 = load ptr, ptr %22, align 8, !tbaa !5
  %1344 = load i32, ptr %59, align 4, !tbaa !9
  %1345 = load i32, ptr %59, align 4, !tbaa !9
  %1346 = load i32, ptr %36, align 4, !tbaa !9
  %1347 = mul nsw i32 %1345, %1346
  %1348 = add nsw i32 %1344, %1347
  %1349 = sext i32 %1348 to i64
  %1350 = getelementptr inbounds %struct.doublecomplex, ptr %1343, i64 %1349
  %1351 = call { double, double } @Cd(ptr noundef %1350)
  %1352 = extractvalue { double, double } %1351, 0
  %1353 = extractvalue { double, double } %1351, 1
  %1354 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %1355 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  store double %1352, ptr %1354, align 8
  store double %1353, ptr %1355, align 8
  %1356 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %1357 = load double, ptr %1356, align 8
  %1358 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %1359 = load double, ptr %1358, align 8
  %1360 = call double @cabs(double noundef %1357, double noundef %1359) #5
  %1361 = load double, ptr %55, align 8, !tbaa !21
  %1362 = fcmp olt double %1360, %1361
  br i1 %1362, label %1363, label %1380

1363:                                             ; preds = %1285
  %1364 = load i32, ptr %59, align 4, !tbaa !9
  %1365 = load i32, ptr %59, align 4, !tbaa !9
  %1366 = load i32, ptr %36, align 4, !tbaa !9
  %1367 = mul nsw i32 %1365, %1366
  %1368 = add nsw i32 %1364, %1367
  store i32 %1368, ptr %45, align 4, !tbaa !9
  %1369 = load double, ptr %55, align 8, !tbaa !21
  %1370 = load ptr, ptr %22, align 8, !tbaa !5
  %1371 = load i32, ptr %45, align 4, !tbaa !9
  %1372 = sext i32 %1371 to i64
  %1373 = getelementptr inbounds %struct.doublecomplex, ptr %1370, i64 %1372
  %1374 = getelementptr inbounds %struct.doublecomplex, ptr %1373, i32 0, i32 0
  store double %1369, ptr %1374, align 8, !tbaa !17
  %1375 = load ptr, ptr %22, align 8, !tbaa !5
  %1376 = load i32, ptr %45, align 4, !tbaa !9
  %1377 = sext i32 %1376 to i64
  %1378 = getelementptr inbounds %struct.doublecomplex, ptr %1375, i64 %1377
  %1379 = getelementptr inbounds %struct.doublecomplex, ptr %1378, i32 0, i32 1
  store double 0.000000e+00, ptr %1379, align 8, !tbaa !20
  br label %1380

1380:                                             ; preds = %1363, %1285
  br label %1381

1381:                                             ; preds = %1380
  %1382 = load i32, ptr %59, align 4, !tbaa !9
  %1383 = add nsw i32 %1382, 1
  store i32 %1383, ptr %59, align 4, !tbaa !9
  br label %1281, !llvm.loop !32

1384:                                             ; preds = %1281
  %1385 = load i32, ptr %67, align 4, !tbaa !9
  %1386 = load ptr, ptr %21, align 8, !tbaa !5
  %1387 = load i32, ptr %1386, align 4, !tbaa !9
  %1388 = icmp slt i32 %1385, %1387
  br i1 %1388, label %1389, label %1435

1389:                                             ; preds = %1384
  %1390 = load ptr, ptr %21, align 8, !tbaa !5
  %1391 = load i32, ptr %1390, align 4, !tbaa !9
  %1392 = load i32, ptr %67, align 4, !tbaa !9
  %1393 = sub nsw i32 %1391, %1392
  store i32 %1393, ptr %44, align 4, !tbaa !9
  %1394 = load ptr, ptr %22, align 8, !tbaa !5
  %1395 = load i32, ptr %67, align 4, !tbaa !9
  %1396 = add nsw i32 %1395, 1
  %1397 = load i32, ptr %67, align 4, !tbaa !9
  %1398 = add nsw i32 %1397, 1
  %1399 = load i32, ptr %36, align 4, !tbaa !9
  %1400 = mul nsw i32 %1398, %1399
  %1401 = add nsw i32 %1396, %1400
  %1402 = sext i32 %1401 to i64
  %1403 = getelementptr inbounds %struct.doublecomplex, ptr %1394, i64 %1402
  %1404 = load ptr, ptr %23, align 8, !tbaa !5
  %1405 = load ptr, ptr %30, align 8, !tbaa !5
  %1406 = load i32, ptr %67, align 4, !tbaa !9
  %1407 = add nsw i32 %1406, 1
  %1408 = load i32, ptr %69, align 4, !tbaa !9
  %1409 = load ptr, ptr %21, align 8, !tbaa !5
  %1410 = load i32, ptr %1409, align 4, !tbaa !9
  %1411 = mul nsw i32 %1408, %1410
  %1412 = add nsw i32 %1407, %1411
  %1413 = sext i32 %1412 to i64
  %1414 = getelementptr inbounds %struct.doublecomplex, ptr %1405, i64 %1413
  %1415 = load ptr, ptr %32, align 8, !tbaa !5
  %1416 = getelementptr inbounds double, ptr %1415, i64 1
  %1417 = load ptr, ptr %34, align 8, !tbaa !5
  call void @zlatrs_(ptr noundef @.str.10, ptr noundef @.str.15, ptr noundef @.str.12, ptr noundef @.str.13, ptr noundef %44, ptr noundef %1403, ptr noundef %1404, ptr noundef %1414, ptr noundef %60, ptr noundef %1416, ptr noundef %1417)
  %1418 = load i32, ptr %67, align 4, !tbaa !9
  %1419 = load i32, ptr %69, align 4, !tbaa !9
  %1420 = load ptr, ptr %21, align 8, !tbaa !5
  %1421 = load i32, ptr %1420, align 4, !tbaa !9
  %1422 = mul nsw i32 %1419, %1421
  %1423 = add nsw i32 %1418, %1422
  store i32 %1423, ptr %44, align 4, !tbaa !9
  %1424 = load double, ptr %60, align 8, !tbaa !21
  %1425 = load ptr, ptr %30, align 8, !tbaa !5
  %1426 = load i32, ptr %44, align 4, !tbaa !9
  %1427 = sext i32 %1426 to i64
  %1428 = getelementptr inbounds %struct.doublecomplex, ptr %1425, i64 %1427
  %1429 = getelementptr inbounds %struct.doublecomplex, ptr %1428, i32 0, i32 0
  store double %1424, ptr %1429, align 8, !tbaa !17
  %1430 = load ptr, ptr %30, align 8, !tbaa !5
  %1431 = load i32, ptr %44, align 4, !tbaa !9
  %1432 = sext i32 %1431 to i64
  %1433 = getelementptr inbounds %struct.doublecomplex, ptr %1430, i64 %1432
  %1434 = getelementptr inbounds %struct.doublecomplex, ptr %1433, i32 0, i32 1
  store double 0.000000e+00, ptr %1434, align 8, !tbaa !20
  br label %1435

1435:                                             ; preds = %1389, %1384
  %1436 = load i32, ptr %56, align 4, !tbaa !9
  %1437 = icmp ne i32 %1436, 0
  br i1 %1437, label %1536, label %1438

1438:                                             ; preds = %1435
  %1439 = load ptr, ptr %21, align 8, !tbaa !5
  %1440 = load i32, ptr %1439, align 4, !tbaa !9
  %1441 = load i32, ptr %67, align 4, !tbaa !9
  %1442 = sub nsw i32 %1440, %1441
  %1443 = add nsw i32 %1442, 1
  store i32 %1443, ptr %44, align 4, !tbaa !9
  %1444 = load ptr, ptr %30, align 8, !tbaa !5
  %1445 = load i32, ptr %67, align 4, !tbaa !9
  %1446 = load i32, ptr %69, align 4, !tbaa !9
  %1447 = load ptr, ptr %21, align 8, !tbaa !5
  %1448 = load i32, ptr %1447, align 4, !tbaa !9
  %1449 = mul nsw i32 %1446, %1448
  %1450 = add nsw i32 %1445, %1449
  %1451 = sext i32 %1450 to i64
  %1452 = getelementptr inbounds %struct.doublecomplex, ptr %1444, i64 %1451
  %1453 = load ptr, ptr %24, align 8, !tbaa !5
  %1454 = load i32, ptr %67, align 4, !tbaa !9
  %1455 = load i32, ptr %68, align 4, !tbaa !9
  %1456 = load i32, ptr %38, align 4, !tbaa !9
  %1457 = mul nsw i32 %1455, %1456
  %1458 = add nsw i32 %1454, %1457
  %1459 = sext i32 %1458 to i64
  %1460 = getelementptr inbounds %struct.doublecomplex, ptr %1453, i64 %1459
  call void @zcopy_(ptr noundef %44, ptr noundef %1452, ptr noundef @c__1, ptr noundef %1460, ptr noundef @c__1)
  %1461 = load ptr, ptr %21, align 8, !tbaa !5
  %1462 = load i32, ptr %1461, align 4, !tbaa !9
  %1463 = load i32, ptr %67, align 4, !tbaa !9
  %1464 = sub nsw i32 %1462, %1463
  %1465 = add nsw i32 %1464, 1
  store i32 %1465, ptr %44, align 4, !tbaa !9
  %1466 = load ptr, ptr %24, align 8, !tbaa !5
  %1467 = load i32, ptr %67, align 4, !tbaa !9
  %1468 = load i32, ptr %68, align 4, !tbaa !9
  %1469 = load i32, ptr %38, align 4, !tbaa !9
  %1470 = mul nsw i32 %1468, %1469
  %1471 = add nsw i32 %1467, %1470
  %1472 = sext i32 %1471 to i64
  %1473 = getelementptr inbounds %struct.doublecomplex, ptr %1466, i64 %1472
  %1474 = call i32 @izamax_(ptr noundef %44, ptr noundef %1473, ptr noundef @c__1)
  %1475 = load i32, ptr %67, align 4, !tbaa !9
  %1476 = add nsw i32 %1474, %1475
  %1477 = sub nsw i32 %1476, 1
  store i32 %1477, ptr %66, align 4, !tbaa !9
  %1478 = load ptr, ptr %24, align 8, !tbaa !5
  %1479 = load i32, ptr %66, align 4, !tbaa !9
  %1480 = load i32, ptr %68, align 4, !tbaa !9
  %1481 = load i32, ptr %38, align 4, !tbaa !9
  %1482 = mul nsw i32 %1480, %1481
  %1483 = add nsw i32 %1479, %1482
  %1484 = sext i32 %1483 to i64
  %1485 = getelementptr inbounds %struct.doublecomplex, ptr %1478, i64 %1484
  %1486 = call { double, double } @Cd(ptr noundef %1485)
  %1487 = extractvalue { double, double } %1486, 0
  %1488 = extractvalue { double, double } %1486, 1
  %1489 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %1490 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  store double %1487, ptr %1489, align 8
  store double %1488, ptr %1490, align 8
  %1491 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %1492 = load double, ptr %1491, align 8
  %1493 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  %1494 = load double, ptr %1493, align 8
  %1495 = call double @cabs(double noundef %1492, double noundef %1494) #5
  %1496 = fdiv double 1.000000e+00, %1495
  store double %1496, ptr %61, align 8, !tbaa !21
  %1497 = load ptr, ptr %21, align 8, !tbaa !5
  %1498 = load i32, ptr %1497, align 4, !tbaa !9
  %1499 = load i32, ptr %67, align 4, !tbaa !9
  %1500 = sub nsw i32 %1498, %1499
  %1501 = add nsw i32 %1500, 1
  store i32 %1501, ptr %44, align 4, !tbaa !9
  %1502 = load ptr, ptr %24, align 8, !tbaa !5
  %1503 = load i32, ptr %67, align 4, !tbaa !9
  %1504 = load i32, ptr %68, align 4, !tbaa !9
  %1505 = load i32, ptr %38, align 4, !tbaa !9
  %1506 = mul nsw i32 %1504, %1505
  %1507 = add nsw i32 %1503, %1506
  %1508 = sext i32 %1507 to i64
  %1509 = getelementptr inbounds %struct.doublecomplex, ptr %1502, i64 %1508
  call void @zdscal_(ptr noundef %44, ptr noundef %61, ptr noundef %1509, ptr noundef @c__1)
  %1510 = load i32, ptr %67, align 4, !tbaa !9
  %1511 = sub nsw i32 %1510, 1
  store i32 %1511, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %1512

1512:                                             ; preds = %1532, %1438
  %1513 = load i32, ptr %59, align 4, !tbaa !9
  %1514 = load i32, ptr %44, align 4, !tbaa !9
  %1515 = icmp sle i32 %1513, %1514
  br i1 %1515, label %1516, label %1535

1516:                                             ; preds = %1512
  %1517 = load i32, ptr %59, align 4, !tbaa !9
  %1518 = load i32, ptr %68, align 4, !tbaa !9
  %1519 = load i32, ptr %38, align 4, !tbaa !9
  %1520 = mul nsw i32 %1518, %1519
  %1521 = add nsw i32 %1517, %1520
  store i32 %1521, ptr %45, align 4, !tbaa !9
  %1522 = load ptr, ptr %24, align 8, !tbaa !5
  %1523 = load i32, ptr %45, align 4, !tbaa !9
  %1524 = sext i32 %1523 to i64
  %1525 = getelementptr inbounds %struct.doublecomplex, ptr %1522, i64 %1524
  %1526 = getelementptr inbounds %struct.doublecomplex, ptr %1525, i32 0, i32 0
  store double 0.000000e+00, ptr %1526, align 8, !tbaa !17
  %1527 = load ptr, ptr %24, align 8, !tbaa !5
  %1528 = load i32, ptr %45, align 4, !tbaa !9
  %1529 = sext i32 %1528 to i64
  %1530 = getelementptr inbounds %struct.doublecomplex, ptr %1527, i64 %1529
  %1531 = getelementptr inbounds %struct.doublecomplex, ptr %1530, i32 0, i32 1
  store double 0.000000e+00, ptr %1531, align 8, !tbaa !20
  br label %1532

1532:                                             ; preds = %1516
  %1533 = load i32, ptr %59, align 4, !tbaa !9
  %1534 = add nsw i32 %1533, 1
  store i32 %1534, ptr %59, align 4, !tbaa !9
  br label %1512, !llvm.loop !33

1535:                                             ; preds = %1512
  br label %1774

1536:                                             ; preds = %1435
  %1537 = load i32, ptr %65, align 4, !tbaa !9
  %1538 = icmp eq i32 %1537, 1
  br i1 %1538, label %1539, label %1616

1539:                                             ; preds = %1536
  %1540 = load i32, ptr %67, align 4, !tbaa !9
  %1541 = load ptr, ptr %21, align 8, !tbaa !5
  %1542 = load i32, ptr %1541, align 4, !tbaa !9
  %1543 = icmp slt i32 %1540, %1542
  br i1 %1543, label %1544, label %1579

1544:                                             ; preds = %1539
  %1545 = load ptr, ptr %21, align 8, !tbaa !5
  %1546 = load i32, ptr %1545, align 4, !tbaa !9
  %1547 = load i32, ptr %67, align 4, !tbaa !9
  %1548 = sub nsw i32 %1546, %1547
  store i32 %1548, ptr %44, align 4, !tbaa !9
  %1549 = load double, ptr %60, align 8, !tbaa !21
  %1550 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %1549, ptr %1550, align 8, !tbaa !17
  %1551 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double 0.000000e+00, ptr %1551, align 8, !tbaa !20
  %1552 = load ptr, ptr %21, align 8, !tbaa !5
  %1553 = load ptr, ptr %24, align 8, !tbaa !5
  %1554 = load i32, ptr %67, align 4, !tbaa !9
  %1555 = add nsw i32 %1554, 1
  %1556 = load i32, ptr %38, align 4, !tbaa !9
  %1557 = mul nsw i32 %1555, %1556
  %1558 = add nsw i32 %1557, 1
  %1559 = sext i32 %1558 to i64
  %1560 = getelementptr inbounds %struct.doublecomplex, ptr %1553, i64 %1559
  %1561 = load ptr, ptr %25, align 8, !tbaa !5
  %1562 = load ptr, ptr %30, align 8, !tbaa !5
  %1563 = load i32, ptr %67, align 4, !tbaa !9
  %1564 = add nsw i32 %1563, 1
  %1565 = load i32, ptr %69, align 4, !tbaa !9
  %1566 = load ptr, ptr %21, align 8, !tbaa !5
  %1567 = load i32, ptr %1566, align 4, !tbaa !9
  %1568 = mul nsw i32 %1565, %1567
  %1569 = add nsw i32 %1564, %1568
  %1570 = sext i32 %1569 to i64
  %1571 = getelementptr inbounds %struct.doublecomplex, ptr %1562, i64 %1570
  %1572 = load ptr, ptr %24, align 8, !tbaa !5
  %1573 = load i32, ptr %67, align 4, !tbaa !9
  %1574 = load i32, ptr %38, align 4, !tbaa !9
  %1575 = mul nsw i32 %1573, %1574
  %1576 = add nsw i32 %1575, 1
  %1577 = sext i32 %1576 to i64
  %1578 = getelementptr inbounds %struct.doublecomplex, ptr %1572, i64 %1577
  call void @zgemv_(ptr noundef @.str.14, ptr noundef %1552, ptr noundef %44, ptr noundef @c_b2, ptr noundef %1560, ptr noundef %1561, ptr noundef %1571, ptr noundef @c__1, ptr noundef %49, ptr noundef %1578, ptr noundef @c__1)
  br label %1579

1579:                                             ; preds = %1544, %1539
  %1580 = load ptr, ptr %21, align 8, !tbaa !5
  %1581 = load ptr, ptr %24, align 8, !tbaa !5
  %1582 = load i32, ptr %67, align 4, !tbaa !9
  %1583 = load i32, ptr %38, align 4, !tbaa !9
  %1584 = mul nsw i32 %1582, %1583
  %1585 = add nsw i32 %1584, 1
  %1586 = sext i32 %1585 to i64
  %1587 = getelementptr inbounds %struct.doublecomplex, ptr %1581, i64 %1586
  %1588 = call i32 @izamax_(ptr noundef %1580, ptr noundef %1587, ptr noundef @c__1)
  store i32 %1588, ptr %66, align 4, !tbaa !9
  %1589 = load ptr, ptr %24, align 8, !tbaa !5
  %1590 = load i32, ptr %66, align 4, !tbaa !9
  %1591 = load i32, ptr %67, align 4, !tbaa !9
  %1592 = load i32, ptr %38, align 4, !tbaa !9
  %1593 = mul nsw i32 %1591, %1592
  %1594 = add nsw i32 %1590, %1593
  %1595 = sext i32 %1594 to i64
  %1596 = getelementptr inbounds %struct.doublecomplex, ptr %1589, i64 %1595
  %1597 = call { double, double } @Cd(ptr noundef %1596)
  %1598 = extractvalue { double, double } %1597, 0
  %1599 = extractvalue { double, double } %1597, 1
  %1600 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %1601 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  store double %1598, ptr %1600, align 8
  store double %1599, ptr %1601, align 8
  %1602 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %1603 = load double, ptr %1602, align 8
  %1604 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  %1605 = load double, ptr %1604, align 8
  %1606 = call double @cabs(double noundef %1603, double noundef %1605) #5
  %1607 = fdiv double 1.000000e+00, %1606
  store double %1607, ptr %61, align 8, !tbaa !21
  %1608 = load ptr, ptr %21, align 8, !tbaa !5
  %1609 = load ptr, ptr %24, align 8, !tbaa !5
  %1610 = load i32, ptr %67, align 4, !tbaa !9
  %1611 = load i32, ptr %38, align 4, !tbaa !9
  %1612 = mul nsw i32 %1610, %1611
  %1613 = add nsw i32 %1612, 1
  %1614 = sext i32 %1613 to i64
  %1615 = getelementptr inbounds %struct.doublecomplex, ptr %1609, i64 %1614
  call void @zdscal_(ptr noundef %1608, ptr noundef %61, ptr noundef %1615, ptr noundef @c__1)
  br label %1773

1616:                                             ; preds = %1536
  %1617 = load i32, ptr %67, align 4, !tbaa !9
  %1618 = sub nsw i32 %1617, 1
  store i32 %1618, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %1619

1619:                                             ; preds = %1640, %1616
  %1620 = load i32, ptr %59, align 4, !tbaa !9
  %1621 = load i32, ptr %44, align 4, !tbaa !9
  %1622 = icmp sle i32 %1620, %1621
  br i1 %1622, label %1623, label %1643

1623:                                             ; preds = %1619
  %1624 = load i32, ptr %59, align 4, !tbaa !9
  %1625 = load i32, ptr %69, align 4, !tbaa !9
  %1626 = load ptr, ptr %21, align 8, !tbaa !5
  %1627 = load i32, ptr %1626, align 4, !tbaa !9
  %1628 = mul nsw i32 %1625, %1627
  %1629 = add nsw i32 %1624, %1628
  store i32 %1629, ptr %45, align 4, !tbaa !9
  %1630 = load ptr, ptr %30, align 8, !tbaa !5
  %1631 = load i32, ptr %45, align 4, !tbaa !9
  %1632 = sext i32 %1631 to i64
  %1633 = getelementptr inbounds %struct.doublecomplex, ptr %1630, i64 %1632
  %1634 = getelementptr inbounds %struct.doublecomplex, ptr %1633, i32 0, i32 0
  store double 0.000000e+00, ptr %1634, align 8, !tbaa !17
  %1635 = load ptr, ptr %30, align 8, !tbaa !5
  %1636 = load i32, ptr %45, align 4, !tbaa !9
  %1637 = sext i32 %1636 to i64
  %1638 = getelementptr inbounds %struct.doublecomplex, ptr %1635, i64 %1637
  %1639 = getelementptr inbounds %struct.doublecomplex, ptr %1638, i32 0, i32 1
  store double 0.000000e+00, ptr %1639, align 8, !tbaa !20
  br label %1640

1640:                                             ; preds = %1623
  %1641 = load i32, ptr %59, align 4, !tbaa !9
  %1642 = add nsw i32 %1641, 1
  store i32 %1642, ptr %59, align 4, !tbaa !9
  br label %1619, !llvm.loop !34

1643:                                             ; preds = %1619
  %1644 = load i32, ptr %69, align 4, !tbaa !9
  %1645 = load i32, ptr %65, align 4, !tbaa !9
  %1646 = icmp eq i32 %1644, %1645
  br i1 %1646, label %1652, label %1647

1647:                                             ; preds = %1643
  %1648 = load i32, ptr %67, align 4, !tbaa !9
  %1649 = load ptr, ptr %21, align 8, !tbaa !5
  %1650 = load i32, ptr %1649, align 4, !tbaa !9
  %1651 = icmp eq i32 %1648, %1650
  br i1 %1651, label %1652, label %1769

1652:                                             ; preds = %1647, %1643
  %1653 = load ptr, ptr %21, align 8, !tbaa !5
  %1654 = load i32, ptr %1653, align 4, !tbaa !9
  %1655 = load i32, ptr %67, align 4, !tbaa !9
  %1656 = sub nsw i32 %1654, %1655
  %1657 = load i32, ptr %69, align 4, !tbaa !9
  %1658 = add nsw i32 %1656, %1657
  store i32 %1658, ptr %44, align 4, !tbaa !9
  %1659 = load ptr, ptr %21, align 8, !tbaa !5
  %1660 = load ptr, ptr %24, align 8, !tbaa !5
  %1661 = load i32, ptr %67, align 4, !tbaa !9
  %1662 = load i32, ptr %69, align 4, !tbaa !9
  %1663 = sub nsw i32 %1661, %1662
  %1664 = add nsw i32 %1663, 1
  %1665 = load i32, ptr %38, align 4, !tbaa !9
  %1666 = mul nsw i32 %1664, %1665
  %1667 = add nsw i32 %1666, 1
  %1668 = sext i32 %1667 to i64
  %1669 = getelementptr inbounds %struct.doublecomplex, ptr %1660, i64 %1668
  %1670 = load ptr, ptr %25, align 8, !tbaa !5
  %1671 = load ptr, ptr %30, align 8, !tbaa !5
  %1672 = load i32, ptr %67, align 4, !tbaa !9
  %1673 = load i32, ptr %69, align 4, !tbaa !9
  %1674 = sub nsw i32 %1672, %1673
  %1675 = add nsw i32 %1674, 1
  %1676 = load ptr, ptr %21, align 8, !tbaa !5
  %1677 = load i32, ptr %1676, align 4, !tbaa !9
  %1678 = add nsw i32 %1675, %1677
  %1679 = sext i32 %1678 to i64
  %1680 = getelementptr inbounds %struct.doublecomplex, ptr %1671, i64 %1679
  %1681 = load ptr, ptr %21, align 8, !tbaa !5
  %1682 = load ptr, ptr %30, align 8, !tbaa !5
  %1683 = load i32, ptr %65, align 4, !tbaa !9
  %1684 = add nsw i32 %1683, 1
  %1685 = load ptr, ptr %21, align 8, !tbaa !5
  %1686 = load i32, ptr %1685, align 4, !tbaa !9
  %1687 = mul nsw i32 %1684, %1686
  %1688 = add nsw i32 %1687, 1
  %1689 = sext i32 %1688 to i64
  %1690 = getelementptr inbounds %struct.doublecomplex, ptr %1682, i64 %1689
  %1691 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zgemm_(ptr noundef @.str.14, ptr noundef @.str.14, ptr noundef %1659, ptr noundef %69, ptr noundef %44, ptr noundef @c_b2, ptr noundef %1669, ptr noundef %1670, ptr noundef %1680, ptr noundef %1681, ptr noundef @c_b1, ptr noundef %1690, ptr noundef %1691)
  %1692 = load i32, ptr %69, align 4, !tbaa !9
  store i32 %1692, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %1693

1693:                                             ; preds = %1743, %1652
  %1694 = load i32, ptr %59, align 4, !tbaa !9
  %1695 = load i32, ptr %44, align 4, !tbaa !9
  %1696 = icmp sle i32 %1694, %1695
  br i1 %1696, label %1697, label %1746

1697:                                             ; preds = %1693
  %1698 = load ptr, ptr %21, align 8, !tbaa !5
  %1699 = load ptr, ptr %30, align 8, !tbaa !5
  %1700 = load i32, ptr %65, align 4, !tbaa !9
  %1701 = load i32, ptr %59, align 4, !tbaa !9
  %1702 = add nsw i32 %1700, %1701
  %1703 = load ptr, ptr %21, align 8, !tbaa !5
  %1704 = load i32, ptr %1703, align 4, !tbaa !9
  %1705 = mul nsw i32 %1702, %1704
  %1706 = add nsw i32 %1705, 1
  %1707 = sext i32 %1706 to i64
  %1708 = getelementptr inbounds %struct.doublecomplex, ptr %1699, i64 %1707
  %1709 = call i32 @izamax_(ptr noundef %1698, ptr noundef %1708, ptr noundef @c__1)
  store i32 %1709, ptr %66, align 4, !tbaa !9
  %1710 = load ptr, ptr %30, align 8, !tbaa !5
  %1711 = load i32, ptr %66, align 4, !tbaa !9
  %1712 = load i32, ptr %65, align 4, !tbaa !9
  %1713 = load i32, ptr %59, align 4, !tbaa !9
  %1714 = add nsw i32 %1712, %1713
  %1715 = load ptr, ptr %21, align 8, !tbaa !5
  %1716 = load i32, ptr %1715, align 4, !tbaa !9
  %1717 = mul nsw i32 %1714, %1716
  %1718 = add nsw i32 %1711, %1717
  %1719 = sext i32 %1718 to i64
  %1720 = getelementptr inbounds %struct.doublecomplex, ptr %1710, i64 %1719
  %1721 = call { double, double } @Cd(ptr noundef %1720)
  %1722 = extractvalue { double, double } %1721, 0
  %1723 = extractvalue { double, double } %1721, 1
  %1724 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 0
  %1725 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 1
  store double %1722, ptr %1724, align 8
  store double %1723, ptr %1725, align 8
  %1726 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 0
  %1727 = load double, ptr %1726, align 8
  %1728 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 1
  %1729 = load double, ptr %1728, align 8
  %1730 = call double @cabs(double noundef %1727, double noundef %1729) #5
  %1731 = fdiv double 1.000000e+00, %1730
  store double %1731, ptr %61, align 8, !tbaa !21
  %1732 = load ptr, ptr %21, align 8, !tbaa !5
  %1733 = load ptr, ptr %30, align 8, !tbaa !5
  %1734 = load i32, ptr %65, align 4, !tbaa !9
  %1735 = load i32, ptr %59, align 4, !tbaa !9
  %1736 = add nsw i32 %1734, %1735
  %1737 = load ptr, ptr %21, align 8, !tbaa !5
  %1738 = load i32, ptr %1737, align 4, !tbaa !9
  %1739 = mul nsw i32 %1736, %1738
  %1740 = add nsw i32 %1739, 1
  %1741 = sext i32 %1740 to i64
  %1742 = getelementptr inbounds %struct.doublecomplex, ptr %1733, i64 %1741
  call void @zdscal_(ptr noundef %1732, ptr noundef %61, ptr noundef %1742, ptr noundef @c__1)
  br label %1743

1743:                                             ; preds = %1697
  %1744 = load i32, ptr %59, align 4, !tbaa !9
  %1745 = add nsw i32 %1744, 1
  store i32 %1745, ptr %59, align 4, !tbaa !9
  br label %1693, !llvm.loop !35

1746:                                             ; preds = %1693
  %1747 = load ptr, ptr %21, align 8, !tbaa !5
  %1748 = load ptr, ptr %30, align 8, !tbaa !5
  %1749 = load i32, ptr %65, align 4, !tbaa !9
  %1750 = add nsw i32 %1749, 1
  %1751 = load ptr, ptr %21, align 8, !tbaa !5
  %1752 = load i32, ptr %1751, align 4, !tbaa !9
  %1753 = mul nsw i32 %1750, %1752
  %1754 = add nsw i32 %1753, 1
  %1755 = sext i32 %1754 to i64
  %1756 = getelementptr inbounds %struct.doublecomplex, ptr %1748, i64 %1755
  %1757 = load ptr, ptr %21, align 8, !tbaa !5
  %1758 = load ptr, ptr %24, align 8, !tbaa !5
  %1759 = load i32, ptr %67, align 4, !tbaa !9
  %1760 = load i32, ptr %69, align 4, !tbaa !9
  %1761 = sub nsw i32 %1759, %1760
  %1762 = add nsw i32 %1761, 1
  %1763 = load i32, ptr %38, align 4, !tbaa !9
  %1764 = mul nsw i32 %1762, %1763
  %1765 = add nsw i32 %1764, 1
  %1766 = sext i32 %1765 to i64
  %1767 = getelementptr inbounds %struct.doublecomplex, ptr %1758, i64 %1766
  %1768 = load ptr, ptr %25, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.7, ptr noundef %1747, ptr noundef %69, ptr noundef %1756, ptr noundef %1757, ptr noundef %1767, ptr noundef %1768)
  store i32 1, ptr %69, align 4, !tbaa !9
  br label %1772

1769:                                             ; preds = %1647
  %1770 = load i32, ptr %69, align 4, !tbaa !9
  %1771 = add nsw i32 %1770, 1
  store i32 %1771, ptr %69, align 4, !tbaa !9
  br label %1772

1772:                                             ; preds = %1769, %1746
  br label %1773

1773:                                             ; preds = %1772, %1579
  br label %1774

1774:                                             ; preds = %1773, %1535
  %1775 = load ptr, ptr %21, align 8, !tbaa !5
  %1776 = load i32, ptr %1775, align 4, !tbaa !9
  store i32 %1776, ptr %44, align 4, !tbaa !9
  %1777 = load i32, ptr %67, align 4, !tbaa !9
  %1778 = add nsw i32 %1777, 1
  store i32 %1778, ptr %59, align 4, !tbaa !9
  br label %1779

1779:                                             ; preds = %1812, %1774
  %1780 = load i32, ptr %59, align 4, !tbaa !9
  %1781 = load i32, ptr %44, align 4, !tbaa !9
  %1782 = icmp sle i32 %1780, %1781
  br i1 %1782, label %1783, label %1815

1783:                                             ; preds = %1779
  %1784 = load i32, ptr %59, align 4, !tbaa !9
  %1785 = load i32, ptr %59, align 4, !tbaa !9
  %1786 = load i32, ptr %36, align 4, !tbaa !9
  %1787 = mul nsw i32 %1785, %1786
  %1788 = add nsw i32 %1784, %1787
  store i32 %1788, ptr %45, align 4, !tbaa !9
  %1789 = load i32, ptr %59, align 4, !tbaa !9
  store i32 %1789, ptr %46, align 4, !tbaa !9
  %1790 = load ptr, ptr %30, align 8, !tbaa !5
  %1791 = load i32, ptr %46, align 4, !tbaa !9
  %1792 = sext i32 %1791 to i64
  %1793 = getelementptr inbounds %struct.doublecomplex, ptr %1790, i64 %1792
  %1794 = getelementptr inbounds %struct.doublecomplex, ptr %1793, i32 0, i32 0
  %1795 = load double, ptr %1794, align 8, !tbaa !17
  %1796 = load ptr, ptr %22, align 8, !tbaa !5
  %1797 = load i32, ptr %45, align 4, !tbaa !9
  %1798 = sext i32 %1797 to i64
  %1799 = getelementptr inbounds %struct.doublecomplex, ptr %1796, i64 %1798
  %1800 = getelementptr inbounds %struct.doublecomplex, ptr %1799, i32 0, i32 0
  store double %1795, ptr %1800, align 8, !tbaa !17
  %1801 = load ptr, ptr %30, align 8, !tbaa !5
  %1802 = load i32, ptr %46, align 4, !tbaa !9
  %1803 = sext i32 %1802 to i64
  %1804 = getelementptr inbounds %struct.doublecomplex, ptr %1801, i64 %1803
  %1805 = getelementptr inbounds %struct.doublecomplex, ptr %1804, i32 0, i32 1
  %1806 = load double, ptr %1805, align 8, !tbaa !20
  %1807 = load ptr, ptr %22, align 8, !tbaa !5
  %1808 = load i32, ptr %45, align 4, !tbaa !9
  %1809 = sext i32 %1808 to i64
  %1810 = getelementptr inbounds %struct.doublecomplex, ptr %1807, i64 %1809
  %1811 = getelementptr inbounds %struct.doublecomplex, ptr %1810, i32 0, i32 1
  store double %1806, ptr %1811, align 8, !tbaa !20
  br label %1812

1812:                                             ; preds = %1783
  %1813 = load i32, ptr %59, align 4, !tbaa !9
  %1814 = add nsw i32 %1813, 1
  store i32 %1814, ptr %59, align 4, !tbaa !9
  br label %1779, !llvm.loop !36

1815:                                             ; preds = %1779
  %1816 = load i32, ptr %68, align 4, !tbaa !9
  %1817 = add nsw i32 %1816, 1
  store i32 %1817, ptr %68, align 4, !tbaa !9
  br label %1818

1818:                                             ; preds = %1815, %1173
  br label %1819

1819:                                             ; preds = %1818
  %1820 = load i32, ptr %67, align 4, !tbaa !9
  %1821 = add nsw i32 %1820, 1
  store i32 %1821, ptr %67, align 4, !tbaa !9
  br label %1159, !llvm.loop !37

1822:                                             ; preds = %1159
  br label %1823

1823:                                             ; preds = %1822, %1153
  store i32 1, ptr %80, align 4
  br label %1824

1824:                                             ; preds = %1823, %416, %410, %402
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, 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 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #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 i32 @lsame_(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

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

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

declare void @zlaset_(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

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

; Function Attrs: nounwind
declare double @cabs(double noundef, double noundef) #3

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

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

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

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

declare void @zgemv_(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 @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

declare void @zlacpy_(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) #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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "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 = { 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 #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 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = !{!18, !19, i64 0}
!18 = !{!"", !19, i64 0, !19, i64 8}
!19 = !{!"double", !7, i64 0}
!20 = !{!18, !19, i64 8}
!21 = !{!19, !19, i64 0}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden local_unnamed_addr global i32, align 4
@c__1 = external hidden global i32, align 4
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i32, align 4
@.str.6 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b2 = external hidden global %struct.doublecomplex, align 8
@.str.15 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @ztrevc3_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr nocapture noundef readonly %10, ptr nocapture noundef %11, ptr noundef %12, ptr nocapture noundef readonly %13, ptr noundef %14, ptr nocapture noundef readonly %15, ptr noundef %16) local_unnamed_addr #0 {
  %18 = alloca [2 x ptr], align 16
  %19 = alloca i32, align 4
  %20 = alloca [2 x i32], align 4
  %21 = alloca i32, align 4
  %22 = alloca %struct.doublecomplex, align 16
  %23 = alloca %struct.doublecomplex, align 16
  %24 = alloca [2 x i8], align 1
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #7
  %31 = getelementptr inbounds i8, ptr %2, i64 -4
  %32 = load i32, ptr %5, align 4, !tbaa !5
  %narrow578 = xor i32 %32, -1
  %33 = sext i32 %narrow578 to i64
  %34 = getelementptr inbounds %struct.doublecomplex, ptr %4, i64 %33
  %35 = load i32, ptr %7, align 4, !tbaa !5
  %narrow = xor i32 %35, -1
  %36 = sext i32 %narrow to i64
  %37 = getelementptr inbounds %struct.doublecomplex, ptr %6, i64 %36
  %38 = load i32, ptr %9, align 4, !tbaa !5
  %narrow582 = xor i32 %38, -1
  %39 = sext i32 %narrow582 to i64
  %40 = getelementptr inbounds %struct.doublecomplex, ptr %8, i64 %39
  %41 = getelementptr i8, ptr %12, i64 -16
  %42 = getelementptr inbounds i8, ptr %14, i64 -8
  %43 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #7
  %44 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #7
  %45 = icmp ne i32 %44, 0
  %46 = icmp ne i32 %43, 0
  %47 = select i1 %45, i1 true, i1 %46
  %48 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #7
  %49 = icmp ne i32 %48, 0
  %50 = select i1 %49, i1 true, i1 %46
  %51 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #7
  %52 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #7
  %53 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #7
  %.not560 = icmp eq i32 %53, 0
  br i1 %.not560, label %70, label %54

54:                                               ; preds = %17
  store i32 0, ptr %11, align 4, !tbaa !5
  %55 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %55, ptr %19, align 4, !tbaa !5
  %.not602 = icmp slt i32 %55, 1
  br i1 %.not602, label %.loopexit601, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %54
  %56 = zext nneg i32 %55 to i64
  %xtraiter = and i64 %56, 1
  %57 = icmp eq i32 %55, 1
  br i1 %57, label %.loopexit601.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph:                                           ; preds = %68, %.lr.ph.preheader.new
  %58 = phi i32 [ 0, %.lr.ph.preheader.new ], [ %69, %68 ]
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %68 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %68 ]
  %59 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv
  %60 = load i32, ptr %59, align 4, !tbaa !5
  %.not584 = icmp eq i32 %60, 0
  br i1 %.not584, label %.lr.ph.1, label %61

61:                                               ; preds = %.lr.ph
  %62 = add nsw i32 %58, 1
  store i32 %62, ptr %11, align 4, !tbaa !5
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph, %61
  %63 = phi i32 [ %58, %.lr.ph ], [ %62, %61 ]
  %64 = getelementptr i32, ptr %2, i64 %indvars.iv
  %65 = load i32, ptr %64, align 4, !tbaa !5
  %.not584.1 = icmp eq i32 %65, 0
  br i1 %.not584.1, label %68, label %66

66:                                               ; preds = %.lr.ph.1
  %67 = add nsw i32 %63, 1
  store i32 %67, ptr %11, align 4, !tbaa !5
  br label %68

68:                                               ; preds = %66, %.lr.ph.1
  %69 = phi i32 [ %63, %.lr.ph.1 ], [ %67, %66 ]
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit601.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !9

70:                                               ; preds = %17
  %71 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %71, ptr %11, align 4, !tbaa !5
  br label %.loopexit601

.loopexit601.loopexit.unr-lcssa:                  ; preds = %68, %.lr.ph.preheader
  %.unr = phi i32 [ 0, %.lr.ph.preheader ], [ %69, %68 ]
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.1, %68 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit601, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.loopexit601.loopexit.unr-lcssa
  %72 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.unr
  %73 = load i32, ptr %72, align 4, !tbaa !5
  %.not584.epil = icmp eq i32 %73, 0
  br i1 %.not584.epil, label %.loopexit601, label %74

74:                                               ; preds = %.lr.ph.epil
  %75 = add nsw i32 %.unr, 1
  store i32 %75, ptr %11, align 4, !tbaa !5
  br label %.loopexit601

.loopexit601:                                     ; preds = %.loopexit601.loopexit.unr-lcssa, %74, %.lr.ph.epil, %54, %70
  store i32 0, ptr %16, align 4, !tbaa !5
  store i32 1, ptr %20, align 4, !tbaa !5
  store ptr %0, ptr %18, align 16, !tbaa !11
  %76 = getelementptr inbounds i8, ptr %20, i64 4
  store i32 1, ptr %76, align 4, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %18, i64 8
  store ptr %1, ptr %77, align 8, !tbaa !11
  %78 = load i32, ptr @c__2, align 4, !tbaa !5
  %79 = icmp sgt i32 %78, 0
  br i1 %79, label %.lr.ph612, label %.lr.ph617.preheader

.preheader:                                       ; preds = %._crit_edge
  %80 = icmp sgt i32 %85, 0
  br i1 %80, label %.lr.ph617.preheader, label %._crit_edge618

.lr.ph617.preheader:                              ; preds = %.loopexit601, %.preheader
  %.0532.lcssa829 = phi i32 [ %85, %.preheader ], [ 2, %.loopexit601 ]
  %.0535.lcssa828 = phi ptr [ %.1536.lcssa, %.preheader ], [ %24, %.loopexit601 ]
  %81 = zext nneg i32 %.0532.lcssa829 to i64
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %.0535.lcssa828, i8 32, i64 %81, i1 false), !tbaa !13
  br label %._crit_edge618

.lr.ph612:                                        ; preds = %.loopexit601, %._crit_edge
  %82 = phi i32 [ %100, %._crit_edge ], [ %78, %.loopexit601 ]
  %indvars.iv757 = phi i64 [ %indvars.iv.next758, %._crit_edge ], [ 0, %.loopexit601 ]
  %.0532609 = phi i32 [ %85, %._crit_edge ], [ 2, %.loopexit601 ]
  %.0535608 = phi ptr [ %.1536.lcssa, %._crit_edge ], [ %24, %.loopexit601 ]
  %83 = getelementptr inbounds [2 x i32], ptr %20, i64 0, i64 %indvars.iv757
  %84 = load i32, ptr %83, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.smin.i32(i32 %84, i32 %.0532609)
  %85 = sub nsw i32 %.0532609, %spec.select
  %86 = icmp sgt i32 %spec.select, 0
  br i1 %86, label %.lr.ph607.preheader, label %._crit_edge

.lr.ph607.preheader:                              ; preds = %.lr.ph612
  %.0535608853 = ptrtoint ptr %.0535608 to i64
  %87 = getelementptr inbounds [2 x ptr], ptr %18, i64 0, i64 %indvars.iv757
  %88 = load ptr, ptr %87, align 8, !tbaa !11
  %89 = add nsw i32 %spec.select, -1
  %90 = zext nneg i32 %89 to i64
  %scevgep = getelementptr i8, ptr %.0535608, i64 %90
  %91 = zext nneg i32 %spec.select to i64
  %min.iters.check = icmp ult i32 %spec.select, 32
  %92 = ptrtoint ptr %88 to i64
  %93 = sub i64 %.0535608853, %92
  %diff.check = icmp ult i64 %93, 32
  %or.cond894 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond894, label %.lr.ph607.preheader900, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph607.preheader
  %n.vec = and i64 %91, 2147483616
  %ind.end = getelementptr i8, ptr %88, i64 %n.vec
  %ind.end854 = getelementptr i8, ptr %.0535608, i64 %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %88, i64 %index
  %next.gep857 = getelementptr i8, ptr %.0535608, i64 %index
  %94 = getelementptr i8, ptr %next.gep, i64 16
  %wide.load = load <16 x i8>, ptr %next.gep, align 1, !tbaa !13
  %wide.load859 = load <16 x i8>, ptr %94, align 1, !tbaa !13
  %95 = getelementptr i8, ptr %next.gep857, i64 16
  store <16 x i8> %wide.load, ptr %next.gep857, align 1, !tbaa !13
  store <16 x i8> %wide.load859, ptr %95, align 1, !tbaa !13
  %index.next = add nuw i64 %index, 32
  %96 = icmp eq i64 %index.next, %n.vec
  br i1 %96, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %91
  br i1 %cmp.n, label %._crit_edge.loopexit, label %.lr.ph607.preheader900

.lr.ph607.preheader900:                           ; preds = %middle.block, %.lr.ph607.preheader
  %.0534605.ph = phi ptr [ %88, %.lr.ph607.preheader ], [ %ind.end, %middle.block ]
  %.1536604.ph = phi ptr [ %.0535608, %.lr.ph607.preheader ], [ %ind.end854, %middle.block ]
  br label %.lr.ph607

.lr.ph607:                                        ; preds = %.lr.ph607.preheader900, %.lr.ph607
  %.0534605 = phi ptr [ %97, %.lr.ph607 ], [ %.0534605.ph, %.lr.ph607.preheader900 ]
  %.1536604 = phi ptr [ %99, %.lr.ph607 ], [ %.1536604.ph, %.lr.ph607.preheader900 ]
  %97 = getelementptr inbounds i8, ptr %.0534605, i64 1
  %98 = load i8, ptr %.0534605, align 1, !tbaa !13
  %99 = getelementptr inbounds i8, ptr %.1536604, i64 1
  store i8 %98, ptr %.1536604, align 1, !tbaa !13
  %exitcond756.not = icmp eq ptr %.1536604, %scevgep
  br i1 %exitcond756.not, label %._crit_edge.loopexit, label %.lr.ph607, !llvm.loop !17

._crit_edge.loopexit:                             ; preds = %.lr.ph607, %middle.block
  %.lcssa851 = phi ptr [ %ind.end854, %middle.block ], [ %99, %.lr.ph607 ]
  %.pre = load i32, ptr @c__2, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.lr.ph612
  %100 = phi i32 [ %82, %.lr.ph612 ], [ %.pre, %._crit_edge.loopexit ]
  %.1536.lcssa = phi ptr [ %.0535608, %.lr.ph612 ], [ %.lcssa851, %._crit_edge.loopexit ]
  %indvars.iv.next758 = add nuw nsw i64 %indvars.iv757, 1
  %101 = sext i32 %100 to i64
  %102 = icmp slt i64 %indvars.iv.next758, %101
  br i1 %102, label %.lr.ph612, label %.preheader, !llvm.loop !18

._crit_edge618:                                   ; preds = %.lr.ph617.preheader, %.preheader
  %103 = call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull %24, ptr noundef %3, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 2) #7
  %104 = load i32, ptr %3, align 4, !tbaa !5
  %105 = shl i32 %104, 1
  %106 = mul nsw i32 %105, %103
  %107 = add nsw i32 %106, %104
  %108 = sitofp i32 %107 to double
  store double %108, ptr %12, align 8, !tbaa !19
  %109 = getelementptr inbounds i8, ptr %12, i64 8
  store double 0.000000e+00, ptr %109, align 8, !tbaa !22
  %110 = sitofp i32 %104 to double
  store double %110, ptr %14, align 8, !tbaa !23
  %111 = load i32, ptr %13, align 4, !tbaa !5
  %112 = icmp eq i32 %111, -1
  br i1 %112, label %116, label %113

113:                                              ; preds = %._crit_edge618
  %114 = load i32, ptr %15, align 4, !tbaa !5
  %115 = icmp eq i32 %114, -1
  br label %116

116:                                              ; preds = %113, %._crit_edge618
  %117 = phi i1 [ true, %._crit_edge618 ], [ %115, %113 ]
  %or.cond = select i1 %47, i1 true, i1 %50
  br i1 %or.cond, label %118, label %.thread.sink.split

118:                                              ; preds = %116
  %119 = icmp ne i32 %51, 0
  %120 = or i32 %53, %52
  %121 = icmp ne i32 %120, 0
  %or.cond5 = select i1 %119, i1 true, i1 %121
  br i1 %or.cond5, label %122, label %.thread.sink.split

122:                                              ; preds = %118
  %123 = icmp slt i32 %104, 0
  br i1 %123, label %.thread.sink.split, label %124

124:                                              ; preds = %122
  %125 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select585 = call i32 @llvm.umax.i32(i32 %104, i32 1)
  %126 = icmp slt i32 %125, %spec.select585
  br i1 %126, label %.thread.sink.split, label %127

127:                                              ; preds = %124
  %128 = load i32, ptr %7, align 4, !tbaa !5
  %129 = icmp slt i32 %128, 1
  %130 = icmp ult i32 %128, %104
  %or.cond588 = select i1 %50, i1 %130, i1 false
  %or.cond590 = select i1 %129, i1 true, i1 %or.cond588
  br i1 %or.cond590, label %.thread.sink.split, label %131

131:                                              ; preds = %127
  %132 = load i32, ptr %9, align 4, !tbaa !5
  %133 = icmp slt i32 %132, 1
  %134 = icmp ult i32 %132, %104
  %or.cond589 = select i1 %47, i1 %134, i1 false
  %or.cond591 = select i1 %133, i1 true, i1 %or.cond589
  br i1 %or.cond591, label %.thread.sink.split, label %135

135:                                              ; preds = %131
  %136 = load i32, ptr %10, align 4, !tbaa !5
  %137 = load i32, ptr %11, align 4, !tbaa !5
  %138 = icmp slt i32 %136, %137
  br i1 %138, label %.thread.sink.split, label %139

139:                                              ; preds = %135
  store i32 1, ptr %19, align 4, !tbaa !5
  store i32 %105, ptr %21, align 4, !tbaa !5
  %140 = call i32 @llvm.smax.i32(i32 %105, i32 1)
  %141 = icmp sge i32 %111, %140
  %or.cond7 = select i1 %141, i1 true, i1 %117
  br i1 %or.cond7, label %142, label %.thread.sink.split

142:                                              ; preds = %139
  %143 = load i32, ptr %15, align 4, !tbaa !5
  %144 = icmp sge i32 %143, %spec.select585
  %or.cond9 = select i1 %144, i1 true, i1 %117
  br i1 %or.cond9, label %145, label %.thread.sink.split

145:                                              ; preds = %142
  %.pr = load i32, ptr %16, align 4, !tbaa !5
  %.not561 = icmp eq i32 %.pr, 0
  br i1 %.not561, label %149, label %.thread

.thread.sink.split:                               ; preds = %142, %139, %135, %131, %127, %124, %122, %118, %116
  %.sink = phi i32 [ -1, %116 ], [ -2, %118 ], [ -4, %122 ], [ -6, %124 ], [ -8, %127 ], [ -10, %131 ], [ -11, %135 ], [ -14, %139 ], [ -16, %142 ]
  store i32 %.sink, ptr %16, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %145
  %146 = phi i32 [ %.pr, %145 ], [ %.sink, %.thread.sink.split ]
  %147 = sub nsw i32 0, %146
  store i32 %147, ptr %19, align 4, !tbaa !5
  %148 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %19, i32 noundef 7) #7
  br label %.loopexit598

149:                                              ; preds = %145
  %150 = icmp eq i32 %104, 0
  %or.cond844 = select i1 %117, i1 true, i1 %150
  br i1 %or.cond844, label %.loopexit598, label %151

151:                                              ; preds = %149
  %.not562 = icmp eq i32 %52, 0
  %152 = mul i32 %104, 17
  %.not563 = icmp slt i32 %111, %152
  %or.cond845 = select i1 %.not562, i1 true, i1 %.not563
  br i1 %or.cond845, label %159, label %153

153:                                              ; preds = %151
  %154 = sub nsw i32 %111, %104
  %155 = sdiv i32 %154, %105
  %156 = call i32 @llvm.smin.i32(i32 %155, i32 128)
  %157 = shl i32 %156, 1
  %158 = or disjoint i32 %157, 1
  store i32 %158, ptr %19, align 4, !tbaa !5
  call void @zlaset_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b1, ptr noundef nonnull %12, ptr noundef nonnull %3) #7
  br label %159

159:                                              ; preds = %151, %153
  %.0524 = phi i32 [ %156, %153 ], [ 1, %151 ]
  %160 = call double @dlamch_(ptr noundef nonnull @.str.8) #7
  store double %160, ptr %25, align 8, !tbaa !23
  %161 = fdiv double 1.000000e+00, %160
  store double %161, ptr %26, align 8, !tbaa !23
  call void @dlabad_(ptr noundef nonnull %25, ptr noundef nonnull %26) #7
  %162 = call double @dlamch_(ptr noundef nonnull @.str.9) #7
  %163 = load double, ptr %25, align 8, !tbaa !23
  %164 = load i32, ptr %3, align 4, !tbaa !5
  %165 = sitofp i32 %164 to double
  %166 = fdiv double %165, %162
  %167 = fmul double %163, %166
  %.not564619 = icmp slt i32 %164, 1
  br i1 %.not564619, label %.thread830, label %.lr.ph622

.thread830:                                       ; preds = %159
  store double 0.000000e+00, ptr %14, align 8, !tbaa !23
  store i32 %164, ptr %19, align 4, !tbaa !5
  br label %._crit_edge628

.lr.ph622:                                        ; preds = %159
  %168 = add i32 %32, 1
  %169 = zext nneg i32 %164 to i64
  %xtraiter903 = and i64 %169, 1
  %170 = icmp eq i32 %164, 1
  br i1 %170, label %.unr-lcssa, label %.lr.ph622.new

.lr.ph622.new:                                    ; preds = %.lr.ph622
  %unroll_iter906 = and i64 %169, 2147483646
  br label %171

171:                                              ; preds = %171, %.lr.ph622.new
  %indvars.iv760 = phi i64 [ 1, %.lr.ph622.new ], [ %indvars.iv.next761.1, %171 ]
  %niter907 = phi i64 [ 0, %.lr.ph622.new ], [ %niter907.next.1, %171 ]
  %172 = trunc nuw nsw i64 %indvars.iv760 to i32
  %173 = mul i32 %168, %172
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %174
  %176 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %indvars.iv760
  %177 = load <2 x double>, ptr %175, align 8, !tbaa !23
  store <2 x double> %177, ptr %176, align 8, !tbaa !23
  %178 = trunc i64 %indvars.iv760 to i32
  %179 = add i32 %178, 1
  %180 = mul i32 %168, %179
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %181
  %183 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv760
  %184 = load <2 x double>, ptr %182, align 8, !tbaa !23
  store <2 x double> %184, ptr %183, align 8, !tbaa !23
  %indvars.iv.next761.1 = add nuw nsw i64 %indvars.iv760, 2
  %niter907.next.1 = add i64 %niter907, 2
  %niter907.ncmp.1 = icmp eq i64 %niter907.next.1, %unroll_iter906
  br i1 %niter907.ncmp.1, label %.unr-lcssa, label %171, !llvm.loop !24

.unr-lcssa:                                       ; preds = %171, %.lr.ph622
  %.lcssa899.ph = phi i32 [ poison, %.lr.ph622 ], [ %179, %171 ]
  %indvars.iv760.unr = phi i64 [ 1, %.lr.ph622 ], [ %indvars.iv.next761.1, %171 ]
  %lcmp.mod904.not = icmp eq i64 %xtraiter903, 0
  br i1 %lcmp.mod904.not, label %191, label %.epilog-lcssa

.epilog-lcssa:                                    ; preds = %.unr-lcssa
  %185 = trunc nuw nsw i64 %indvars.iv760.unr to i32
  %186 = mul i32 %168, %185
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %187
  %189 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %indvars.iv760.unr
  %190 = load <2 x double>, ptr %188, align 8, !tbaa !23
  store <2 x double> %190, ptr %189, align 8, !tbaa !23
  br label %191

191:                                              ; preds = %.unr-lcssa, %.epilog-lcssa
  %.lcssa899 = phi i32 [ %.lcssa899.ph, %.unr-lcssa ], [ %185, %.epilog-lcssa ]
  store i32 %.lcssa899, ptr %21, align 4, !tbaa !5
  store double 0.000000e+00, ptr %14, align 8, !tbaa !23
  store i32 %164, ptr %19, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %34, i64 16
  %.not565624 = icmp eq i32 %164, 1
  br i1 %.not565624, label %._crit_edge628, label %.lr.ph627.preheader

.lr.ph627.preheader:                              ; preds = %191
  %192 = sext i32 %32 to i64
  br label %.lr.ph627

.lr.ph627:                                        ; preds = %.lr.ph627.preheader, %.lr.ph627
  %indvars.iv765 = phi i64 [ 2, %.lr.ph627.preheader ], [ %indvars.iv.next766, %.lr.ph627 ]
  %193 = trunc i64 %indvars.iv765 to i32
  %194 = add i32 %193, -1
  store i32 %194, ptr %21, align 4, !tbaa !5
  %195 = mul nsw i64 %indvars.iv765, %192
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %195
  %196 = call double @dzasum_(ptr noundef nonnull %21, ptr noundef %gep, ptr noundef nonnull @c__1) #7
  %197 = getelementptr inbounds double, ptr %42, i64 %indvars.iv765
  store double %196, ptr %197, align 8, !tbaa !23
  %indvars.iv.next766 = add nuw nsw i64 %indvars.iv765, 1
  %198 = load i32, ptr %19, align 4, !tbaa !5
  %199 = sext i32 %198 to i64
  %.not565.not = icmp slt i64 %indvars.iv765, %199
  br i1 %.not565.not, label %.lr.ph627, label %._crit_edge628, !llvm.loop !25

._crit_edge628:                                   ; preds = %.lr.ph627, %.thread830, %191
  br i1 %47, label %200, label %.loopexit600

200:                                              ; preds = %._crit_edge628
  store i32 %.0524, ptr %30, align 4, !tbaa !5
  %201 = load i32, ptr %11, align 4, !tbaa !5
  %202 = load i32, ptr %3, align 4, !tbaa !5
  %invariant.gep675 = getelementptr i8, ptr %40, i64 16
  store i32 %202, ptr %29, align 4, !tbaa !5
  %203 = icmp sgt i32 %202, 0
  br i1 %203, label %.lr.ph692, label %.loopexit600

.lr.ph692:                                        ; preds = %200
  %204 = add i32 %32, 1
  %205 = getelementptr inbounds i8, ptr %22, i64 8
  %206 = icmp eq i32 %.0524, 1
  %207 = add nsw i32 %.0524, 1
  %208 = shl nsw i64 %39, 4
  %scevgep783 = getelementptr i8, ptr %8, i64 %208
  %scevgep862 = getelementptr i8, ptr %12, i64 -24
  %209 = shl nsw i64 %33, 4
  %210 = getelementptr i8, ptr %4, i64 %209
  %scevgep864 = getelementptr i8, ptr %210, i64 16
  %211 = getelementptr i8, ptr %4, i64 %209
  %scevgep866 = getelementptr i8, ptr %211, i64 -8
  %scevgep868 = getelementptr i8, ptr %12, i64 8
  %scevgep870 = getelementptr i8, ptr %12, i64 -16
  %212 = getelementptr i8, ptr %4, i64 %209
  %scevgep872 = getelementptr i8, ptr %212, i64 24
  %scevgep874 = getelementptr i8, ptr %4, i64 %209
  br label %213

213:                                              ; preds = %.lr.ph692, %456
  %.0525690 = phi i32 [ %201, %.lr.ph692 ], [ %.1526, %456 ]
  %storemerge689 = phi i32 [ %202, %.lr.ph692 ], [ %.pre-phi, %456 ]
  br i1 %.not560, label %218, label %214

214:                                              ; preds = %213
  %215 = zext nneg i32 %storemerge689 to i64
  %216 = getelementptr inbounds i32, ptr %31, i64 %215
  %217 = load i32, ptr %216, align 4, !tbaa !5
  %.not575 = icmp eq i32 %217, 0
  br i1 %.not575, label %._crit_edge824, label %218

._crit_edge824:                                   ; preds = %214
  %.pre825 = add nsw i32 %storemerge689, -1
  br label %456

218:                                              ; preds = %214, %213
  %219 = mul i32 %storemerge689, %204
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %220
  %222 = call { double, double } @Cd(ptr noundef %221)
  %223 = extractvalue { double, double } %222, 0
  %224 = extractvalue { double, double } %222, 1
  %225 = call double @cabs(double noundef %223, double noundef %224) #7
  %226 = fmul double %162, %225
  %227 = fcmp oge double %226, %167
  %228 = select i1 %227, double %226, double %167
  %229 = load i32, ptr %29, align 4
  %230 = load i32, ptr %30, align 4, !tbaa !5
  %231 = load i32, ptr %3, align 4, !tbaa !5
  %232 = mul nsw i32 %231, %230
  %233 = add nsw i32 %232, %229
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %234
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %235, align 8, !tbaa !23
  %236 = add nsw i32 %229, -1
  %.not576.not629 = icmp sgt i32 %229, 1
  br i1 %.not576.not629, label %.lr.ph632, label %.thread833

.thread833:                                       ; preds = %218
  store i32 %236, ptr %19, align 4, !tbaa !5
  br label %._crit_edge640.thread

.lr.ph632:                                        ; preds = %218
  %237 = mul nsw i32 %229, %32
  %238 = sext i32 %232 to i64
  %239 = sext i32 %237 to i64
  %wide.trip.count771 = zext nneg i32 %229 to i64
  %invariant.gep842 = getelementptr %struct.doublecomplex, ptr %34, i64 %239
  %240 = add nsw i64 %wide.trip.count771, -1
  %min.iters.check881 = icmp ult i32 %229, 9
  br i1 %min.iters.check881, label %scalar.ph880.preheader, label %vector.memcheck860

vector.memcheck860:                               ; preds = %.lr.ph632
  %241 = shl nsw i64 %238, 4
  %scevgep861 = getelementptr i8, ptr %12, i64 %241
  %242 = shl nuw nsw i64 %wide.trip.count771, 4
  %243 = add nsw i64 %241, %242
  %scevgep863 = getelementptr i8, ptr %scevgep862, i64 %243
  %244 = shl nsw i64 %239, 4
  %scevgep865 = getelementptr i8, ptr %scevgep864, i64 %244
  %245 = add nsw i64 %244, %242
  %scevgep867 = getelementptr i8, ptr %scevgep866, i64 %245
  %scevgep869 = getelementptr i8, ptr %scevgep868, i64 %241
  %scevgep871 = getelementptr i8, ptr %scevgep870, i64 %243
  %scevgep873 = getelementptr i8, ptr %scevgep872, i64 %244
  %scevgep875 = getelementptr i8, ptr %scevgep874, i64 %245
  %bound0 = icmp ult ptr %scevgep861, %scevgep867
  %bound1 = icmp ult ptr %scevgep865, %scevgep863
  %found.conflict = and i1 %bound0, %bound1
  %bound0876 = icmp ult ptr %scevgep869, %scevgep875
  %bound1877 = icmp ult ptr %scevgep873, %scevgep871
  %found.conflict878 = and i1 %bound0876, %bound1877
  %conflict.rdx = or i1 %found.conflict, %found.conflict878
  br i1 %conflict.rdx, label %scalar.ph880.preheader, label %vector.ph882

vector.ph882:                                     ; preds = %vector.memcheck860
  %n.vec884 = and i64 %240, -2
  %ind.end885 = or i64 %240, 1
  %invariant.gep931 = getelementptr %struct.doublecomplex, ptr %12, i64 %238
  br label %vector.body887

vector.body887:                                   ; preds = %vector.body887, %vector.ph882
  %index888 = phi i64 [ 0, %vector.ph882 ], [ %index.next890, %vector.body887 ]
  %offset.idx = or disjoint i64 %index888, 1
  %246 = getelementptr %struct.doublecomplex, ptr %invariant.gep842, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %246, align 8, !tbaa !23
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec889 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %247 = fneg <2 x double> %strided.vec
  %248 = fneg <2 x double> %strided.vec889
  %gep932 = getelementptr %struct.doublecomplex, ptr %invariant.gep931, i64 %index888
  %interleaved.vec = shufflevector <2 x double> %247, <2 x double> %248, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %gep932, align 8, !tbaa !23
  %index.next890 = add nuw i64 %index888, 2
  %249 = icmp eq i64 %index.next890, %n.vec884
  br i1 %249, label %middle.block879, label %vector.body887, !llvm.loop !26

middle.block879:                                  ; preds = %vector.body887
  %250 = add i64 %index888, 2
  %251 = add nsw i64 %250, %238
  %cmp.n891 = icmp eq i64 %240, %n.vec884
  %252 = shufflevector <2 x double> %247, <2 x double> %248, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n891, label %.loopexit892, label %scalar.ph880.preheader

scalar.ph880.preheader:                           ; preds = %middle.block879, %vector.memcheck860, %.lr.ph632
  %indvars.iv768.ph = phi i64 [ 1, %vector.memcheck860 ], [ 1, %.lr.ph632 ], [ %ind.end885, %middle.block879 ]
  %253 = and i64 %wide.trip.count771, 1
  %lcmp.mod909.not.not = icmp eq i64 %253, 0
  br i1 %lcmp.mod909.not.not, label %scalar.ph880.prol, label %scalar.ph880.prol.loopexit

scalar.ph880.prol:                                ; preds = %scalar.ph880.preheader
  %254 = add nsw i64 %indvars.iv768.ph, %238
  %gep843.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep842, i64 %indvars.iv768.ph
  %255 = load <2 x double>, ptr %gep843.prol, align 8, !tbaa !23
  %256 = fneg <2 x double> %255
  %257 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %254
  store <2 x double> %256, ptr %257, align 8, !tbaa !23
  %indvars.iv.next769.prol = add nuw nsw i64 %indvars.iv768.ph, 1
  br label %scalar.ph880.prol.loopexit

scalar.ph880.prol.loopexit:                       ; preds = %scalar.ph880.prol, %scalar.ph880.preheader
  %.lcssa897.unr = phi i64 [ poison, %scalar.ph880.preheader ], [ %254, %scalar.ph880.prol ]
  %.lcssa896.unr = phi <2 x double> [ poison, %scalar.ph880.preheader ], [ %256, %scalar.ph880.prol ]
  %indvars.iv768.unr = phi i64 [ %indvars.iv768.ph, %scalar.ph880.preheader ], [ %indvars.iv.next769.prol, %scalar.ph880.prol ]
  %258 = add nsw i64 %wide.trip.count771, -1
  %259 = icmp eq i64 %indvars.iv768.ph, %258
  br i1 %259, label %.loopexit892, label %scalar.ph880.preheader.new

scalar.ph880.preheader.new:                       ; preds = %scalar.ph880.prol.loopexit
  %invariant.gep933 = getelementptr %struct.doublecomplex, ptr %41, i64 %238
  br label %scalar.ph880

scalar.ph880:                                     ; preds = %scalar.ph880, %scalar.ph880.preheader.new
  %indvars.iv768 = phi i64 [ %indvars.iv768.unr, %scalar.ph880.preheader.new ], [ %indvars.iv.next769.1, %scalar.ph880 ]
  %gep843 = getelementptr %struct.doublecomplex, ptr %invariant.gep842, i64 %indvars.iv768
  %260 = load <2 x double>, ptr %gep843, align 8, !tbaa !23
  %261 = fneg <2 x double> %260
  %gep934 = getelementptr %struct.doublecomplex, ptr %invariant.gep933, i64 %indvars.iv768
  store <2 x double> %261, ptr %gep934, align 8, !tbaa !23
  %indvars.iv.next769 = add nuw nsw i64 %indvars.iv768, 1
  %262 = add nsw i64 %indvars.iv.next769, %238
  %gep843.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep842, i64 %indvars.iv.next769
  %263 = load <2 x double>, ptr %gep843.1, align 8, !tbaa !23
  %264 = fneg <2 x double> %263
  %265 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %262
  store <2 x double> %264, ptr %265, align 8, !tbaa !23
  %indvars.iv.next769.1 = add nuw nsw i64 %indvars.iv768, 2
  %exitcond772.not.1 = icmp eq i64 %indvars.iv.next769.1, %wide.trip.count771
  br i1 %exitcond772.not.1, label %.loopexit892, label %scalar.ph880, !llvm.loop !27

.loopexit892:                                     ; preds = %scalar.ph880.prol.loopexit, %scalar.ph880, %middle.block879
  %.lcssa848 = phi i64 [ %251, %middle.block879 ], [ %.lcssa897.unr, %scalar.ph880.prol.loopexit ], [ %262, %scalar.ph880 ]
  %266 = phi <2 x double> [ %252, %middle.block879 ], [ %.lcssa896.unr, %scalar.ph880.prol.loopexit ], [ %264, %scalar.ph880 ]
  %267 = trunc nsw i64 %.lcssa848 to i32
  store i32 %267, ptr %21, align 4, !tbaa !5
  store <2 x double> %266, ptr %22, align 16, !tbaa !23
  store i32 %236, ptr %19, align 4, !tbaa !5
  br label %.lr.ph639

.lr.ph639:                                        ; preds = %.loopexit892, %286
  %indvars.iv773 = phi i64 [ %indvars.iv.next774, %286 ], [ 1, %.loopexit892 ]
  %268 = trunc nuw nsw i64 %indvars.iv773 to i32
  %269 = mul i32 %204, %268
  store i32 %269, ptr %21, align 4, !tbaa !5
  %270 = load i32, ptr %29, align 4, !tbaa !5
  %271 = mul i32 %270, %204
  %272 = sext i32 %269 to i64
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %272
  %274 = sext i32 %271 to i64
  %275 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %274
  %276 = load <2 x double>, ptr %273, align 8, !tbaa !23
  %277 = load <2 x double>, ptr %275, align 8, !tbaa !23
  %278 = fsub <2 x double> %276, %277
  store <2 x double> %278, ptr %22, align 16, !tbaa !23
  store <2 x double> %278, ptr %273, align 8, !tbaa !23
  %279 = call { double, double } @Cd(ptr noundef nonnull %273)
  %280 = extractvalue { double, double } %279, 0
  %281 = extractvalue { double, double } %279, 1
  %282 = call double @cabs(double noundef %280, double noundef %281) #7
  %283 = fcmp olt double %282, %228
  br i1 %283, label %284, label %286

284:                                              ; preds = %.lr.ph639
  %285 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %272, i32 1
  store i32 %269, ptr %21, align 4, !tbaa !5
  store double %228, ptr %273, align 8, !tbaa !19
  store double 0.000000e+00, ptr %285, align 8, !tbaa !22
  br label %286

286:                                              ; preds = %.lr.ph639, %284
  %indvars.iv.next774 = add nuw nsw i64 %indvars.iv773, 1
  %287 = load i32, ptr %19, align 4, !tbaa !5
  %288 = sext i32 %287 to i64
  %.not577.not = icmp slt i64 %indvars.iv773, %288
  br i1 %.not577.not, label %.lr.ph639, label %._crit_edge640, !llvm.loop !28

._crit_edge640:                                   ; preds = %286
  %.pre812 = load i32, ptr %29, align 4
  %289 = icmp sgt i32 %.pre812, 1
  br i1 %289, label %290, label %._crit_edge640.thread

290:                                              ; preds = %._crit_edge640
  %291 = add nsw i32 %.pre812, -1
  store i32 %291, ptr %19, align 4, !tbaa !5
  %292 = load i32, ptr %30, align 4, !tbaa !5
  %293 = load i32, ptr %3, align 4, !tbaa !5
  %294 = mul nsw i32 %293, %292
  %295 = sext i32 %294 to i64
  %gep668 = getelementptr %struct.doublecomplex, ptr %12, i64 %295
  call void @zlatrs_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.13, ptr noundef nonnull %19, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %gep668, ptr noundef nonnull %27, ptr noundef nonnull %14, ptr noundef nonnull %16) #7
  %296 = load i32, ptr %29, align 4
  %297 = load i32, ptr %30, align 4, !tbaa !5
  %298 = load i32, ptr %3, align 4, !tbaa !5
  %299 = mul nsw i32 %298, %297
  %300 = add nsw i32 %299, %296
  store i32 %300, ptr %19, align 4, !tbaa !5
  %301 = load double, ptr %27, align 8, !tbaa !23
  %302 = sext i32 %300 to i64
  %303 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %302
  store double %301, ptr %303, align 8, !tbaa !19
  %304 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %302, i32 1
  store double 0.000000e+00, ptr %304, align 8, !tbaa !22
  br label %._crit_edge640.thread

._crit_edge640.thread:                            ; preds = %.thread833, %290, %._crit_edge640
  %305 = phi i32 [ %296, %290 ], [ %.pre812, %._crit_edge640 ], [ %229, %.thread833 ]
  br i1 %.not562, label %306, label %337

306:                                              ; preds = %._crit_edge640.thread
  %307 = load i32, ptr %30, align 4, !tbaa !5
  %308 = load i32, ptr %3, align 4, !tbaa !5
  %309 = mul nsw i32 %308, %307
  %310 = sext i32 %309 to i64
  %gep686 = getelementptr %struct.doublecomplex, ptr %12, i64 %310
  %311 = mul nsw i32 %.0525690, %38
  %312 = sext i32 %311 to i64
  %gep688 = getelementptr %struct.doublecomplex, ptr %invariant.gep675, i64 %312
  call void @zcopy_(ptr noundef nonnull %29, ptr noundef %gep686, ptr noundef nonnull @c__1, ptr noundef %gep688, ptr noundef nonnull @c__1) #7
  %313 = call i32 @izamax_(ptr noundef nonnull %29, ptr noundef %gep688, ptr noundef nonnull @c__1) #7
  %314 = add nsw i32 %313, %311
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %315
  %317 = call { double, double } @Cd(ptr noundef %316)
  %318 = extractvalue { double, double } %317, 0
  %319 = extractvalue { double, double } %317, 1
  %320 = call double @cabs(double noundef %318, double noundef %319) #7
  %321 = fdiv double 1.000000e+00, %320
  store double %321, ptr %28, align 8, !tbaa !23
  call void @zdscal_(ptr noundef nonnull %29, ptr noundef nonnull %28, ptr noundef %gep688, ptr noundef nonnull @c__1) #7
  %322 = load i32, ptr %3, align 4, !tbaa !5
  %323 = load i32, ptr %29, align 4, !tbaa !5
  %.not579.not656 = icmp slt i32 %323, %322
  br i1 %.not579.not656, label %.lr.ph659.preheader, label %.loopexit599

.lr.ph659.preheader:                              ; preds = %306
  %324 = add nsw i32 %323, 1
  %325 = add i32 %324, %311
  %326 = sext i32 %325 to i64
  %327 = shl nsw i64 %326, 4
  %scevgep784 = getelementptr i8, ptr %scevgep783, i64 %327
  %328 = xor i32 %323, -1
  %329 = add i32 %322, %328
  %330 = zext i32 %329 to i64
  %331 = shl nuw nsw i64 %330, 4
  %332 = add nuw nsw i64 %331, 16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep784, i8 0, i64 %332, i1 false), !tbaa !23
  %333 = sext i32 %323 to i64
  %wide.trip.count788 = sext i32 %322 to i64
  %334 = sub nsw i64 %wide.trip.count788, %333
  %xtraiter912 = and i64 %334, 7
  %lcmp.mod913.not = icmp eq i64 %xtraiter912, 0
  br i1 %lcmp.mod913.not, label %.lr.ph659.prol.loopexit, label %.lr.ph659.prol

.lr.ph659.prol:                                   ; preds = %.lr.ph659.preheader, %.lr.ph659.prol
  %indvars.iv785.prol = phi i64 [ %indvars.iv.next786.prol, %.lr.ph659.prol ], [ %333, %.lr.ph659.preheader ]
  %prol.iter914 = phi i64 [ %prol.iter914.next, %.lr.ph659.prol ], [ 0, %.lr.ph659.preheader ]
  %indvars.iv.next786.prol = add nsw i64 %indvars.iv785.prol, 1
  %prol.iter914.next = add i64 %prol.iter914, 1
  %prol.iter914.cmp.not = icmp eq i64 %prol.iter914.next, %xtraiter912
  br i1 %prol.iter914.cmp.not, label %.lr.ph659.prol.loopexit, label %.lr.ph659.prol, !llvm.loop !29

.lr.ph659.prol.loopexit:                          ; preds = %.lr.ph659.prol, %.lr.ph659.preheader
  %indvars.iv.next786.lcssa.unr = phi i64 [ poison, %.lr.ph659.preheader ], [ %indvars.iv.next786.prol, %.lr.ph659.prol ]
  %indvars.iv785.unr = phi i64 [ %333, %.lr.ph659.preheader ], [ %indvars.iv.next786.prol, %.lr.ph659.prol ]
  %335 = sub nsw i64 %333, %wide.trip.count788
  %336 = icmp ugt i64 %335, -8
  br i1 %336, label %..loopexit599_crit_edge, label %.lr.ph659

.lr.ph659:                                        ; preds = %.lr.ph659.prol.loopexit, %.lr.ph659
  %indvars.iv785 = phi i64 [ %indvars.iv.next786.7, %.lr.ph659 ], [ %indvars.iv785.unr, %.lr.ph659.prol.loopexit ]
  %indvars.iv.next786.7 = add nsw i64 %indvars.iv785, 8
  %exitcond789.not.7 = icmp eq i64 %indvars.iv.next786.7, %wide.trip.count788
  br i1 %exitcond789.not.7, label %..loopexit599_crit_edge, label %.lr.ph659, !llvm.loop !31

337:                                              ; preds = %._crit_edge640.thread
  br i1 %206, label %338, label %367

338:                                              ; preds = %337
  %339 = icmp sgt i32 %305, 1
  br i1 %339, label %340, label %349

340:                                              ; preds = %338
  %341 = add nsw i32 %305, -1
  store i32 %341, ptr %19, align 4, !tbaa !5
  %342 = load double, ptr %27, align 8, !tbaa !23
  store double %342, ptr %22, align 16, !tbaa !19
  store double 0.000000e+00, ptr %205, align 8, !tbaa !22
  %343 = load i32, ptr %30, align 4, !tbaa !5
  %344 = load i32, ptr %3, align 4, !tbaa !5
  %345 = mul nsw i32 %344, %343
  %346 = sext i32 %345 to i64
  %gep678 = getelementptr %struct.doublecomplex, ptr %12, i64 %346
  %347 = mul nsw i32 %305, %38
  %348 = sext i32 %347 to i64
  %gep680 = getelementptr %struct.doublecomplex, ptr %invariant.gep675, i64 %348
  call void @zgemv_(ptr noundef nonnull @.str.14, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull @c_b2, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %gep678, ptr noundef nonnull @c__1, ptr noundef nonnull %22, ptr noundef %gep680, ptr noundef nonnull @c__1) #7
  %.pre815 = load i32, ptr %29, align 4, !tbaa !5
  br label %349

349:                                              ; preds = %340, %338
  %350 = phi i32 [ %.pre815, %340 ], [ %305, %338 ]
  %351 = mul nsw i32 %350, %38
  %352 = sext i32 %351 to i64
  %gep682 = getelementptr %struct.doublecomplex, ptr %invariant.gep675, i64 %352
  %353 = call i32 @izamax_(ptr noundef nonnull %3, ptr noundef %gep682, ptr noundef nonnull @c__1) #7
  %354 = load i32, ptr %29, align 4, !tbaa !5
  %355 = mul nsw i32 %354, %38
  %356 = add nsw i32 %355, %353
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %357
  %359 = call { double, double } @Cd(ptr noundef %358)
  %360 = extractvalue { double, double } %359, 0
  %361 = extractvalue { double, double } %359, 1
  %362 = call double @cabs(double noundef %360, double noundef %361) #7
  %363 = fdiv double 1.000000e+00, %362
  store double %363, ptr %28, align 8, !tbaa !23
  %364 = load i32, ptr %29, align 4, !tbaa !5
  %365 = mul nsw i32 %364, %38
  %366 = sext i32 %365 to i64
  %gep684 = getelementptr %struct.doublecomplex, ptr %invariant.gep675, i64 %366
  call void @zdscal_(ptr noundef nonnull %3, ptr noundef nonnull %28, ptr noundef %gep684, ptr noundef nonnull @c__1) #7
  br label %.loopexit599thread-pre-split

367:                                              ; preds = %337
  %368 = load i32, ptr %3, align 4, !tbaa !5
  %.not580.not641 = icmp slt i32 %305, %368
  %.pre813 = load i32, ptr %30, align 4, !tbaa !5
  br i1 %.not580.not641, label %.lr.ph644, label %385

.lr.ph644:                                        ; preds = %367
  %369 = mul nsw i32 %.pre813, %368
  %370 = add nsw i32 %305, 1
  %371 = add i32 %370, %369
  %372 = sext i32 %371 to i64
  %373 = shl nsw i64 %372, 4
  %scevgep777 = getelementptr i8, ptr %41, i64 %373
  %374 = xor i32 %305, -1
  %375 = add i32 %368, %374
  %376 = zext i32 %375 to i64
  %377 = shl nuw nsw i64 %376, 4
  %378 = add nuw nsw i64 %377, 16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep777, i8 0, i64 %378, i1 false), !tbaa !23
  %379 = sext i32 %305 to i64
  %wide.trip.count781 = sext i32 %368 to i64
  %380 = sub nsw i64 %wide.trip.count781, %379
  %xtraiter910 = and i64 %380, 7
  %lcmp.mod911.not = icmp eq i64 %xtraiter910, 0
  br i1 %lcmp.mod911.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph644, %.prol.preheader
  %indvars.iv778.prol = phi i64 [ %indvars.iv.next779.prol, %.prol.preheader ], [ %379, %.lr.ph644 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph644 ]
  %indvars.iv.next779.prol = add nsw i64 %indvars.iv778.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter910
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !32

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph644
  %indvars.iv.next779.lcssa.unr = phi i64 [ poison, %.lr.ph644 ], [ %indvars.iv.next779.prol, %.prol.preheader ]
  %indvars.iv778.unr = phi i64 [ %379, %.lr.ph644 ], [ %indvars.iv.next779.prol, %.prol.preheader ]
  %381 = sub nsw i64 %379, %wide.trip.count781
  %382 = icmp ugt i64 %381, -8
  br i1 %382, label %._crit_edge645, label %.lr.ph644.new

.lr.ph644.new:                                    ; preds = %.prol.loopexit, %.lr.ph644.new
  %indvars.iv778 = phi i64 [ %indvars.iv.next779.7, %.lr.ph644.new ], [ %indvars.iv778.unr, %.prol.loopexit ]
  %indvars.iv.next779.7 = add nsw i64 %indvars.iv778, 8
  %exitcond782.not.7 = icmp eq i64 %indvars.iv.next779.7, %wide.trip.count781
  br i1 %exitcond782.not.7, label %._crit_edge645, label %.lr.ph644.new, !llvm.loop !33

._crit_edge645:                                   ; preds = %.lr.ph644.new, %.prol.loopexit
  %indvars.iv.next779.lcssa = phi i64 [ %indvars.iv.next779.lcssa.unr, %.prol.loopexit ], [ %indvars.iv.next779.7, %.lr.ph644.new ]
  %383 = trunc i64 %indvars.iv.next779.lcssa to i32
  %384 = add i32 %369, %383
  store i32 %384, ptr %21, align 4, !tbaa !5
  br label %385

385:                                              ; preds = %._crit_edge645, %367
  %386 = icmp eq i32 %.pre813, 1
  %387 = icmp eq i32 %305, 1
  %or.cond11 = or i1 %386, %387
  br i1 %or.cond11, label %388, label %427

388:                                              ; preds = %385
  %389 = sub i32 %207, %.pre813
  store i32 %389, ptr %19, align 4, !tbaa !5
  %390 = add nsw i32 %305, %.0524
  %391 = sub i32 %390, %.pre813
  store i32 %391, ptr %21, align 4, !tbaa !5
  %392 = mul nsw i32 %.pre813, %368
  %393 = sext i32 %392 to i64
  %gep670 = getelementptr %struct.doublecomplex, ptr %12, i64 %393
  %394 = add nsw i32 %.pre813, %.0524
  %395 = mul nsw i32 %394, %368
  %396 = sext i32 %395 to i64
  %gep672 = getelementptr %struct.doublecomplex, ptr %12, i64 %396
  call void @zgemm_(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.14, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %21, ptr noundef nonnull @c_b2, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %gep670, ptr noundef nonnull %3, ptr noundef nonnull @c_b1, ptr noundef %gep672, ptr noundef nonnull %3) #7
  store i32 %.0524, ptr %19, align 4, !tbaa !5
  %397 = load i32, ptr %30, align 4, !tbaa !5
  %.not581651 = icmp sgt i32 %397, %.0524
  br i1 %.not581651, label %._crit_edge655, label %.lr.ph654

.lr.ph654:                                        ; preds = %388, %.lr.ph654
  %.4652 = phi i32 [ %416, %.lr.ph654 ], [ %397, %388 ]
  %398 = add nsw i32 %.4652, %.0524
  %399 = load i32, ptr %3, align 4, !tbaa !5
  %400 = mul nsw i32 %399, %398
  %401 = sext i32 %400 to i64
  %gep648 = getelementptr %struct.doublecomplex, ptr %12, i64 %401
  %402 = call i32 @izamax_(ptr noundef nonnull %3, ptr noundef %gep648, ptr noundef nonnull @c__1) #7
  %403 = load i32, ptr %3, align 4, !tbaa !5
  %404 = mul nsw i32 %403, %398
  %405 = add nsw i32 %404, %402
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %406
  %408 = call { double, double } @Cd(ptr noundef nonnull %407)
  %409 = extractvalue { double, double } %408, 0
  %410 = extractvalue { double, double } %408, 1
  %411 = call double @cabs(double noundef %409, double noundef %410) #7
  %412 = fdiv double 1.000000e+00, %411
  store double %412, ptr %28, align 8, !tbaa !23
  %413 = load i32, ptr %3, align 4, !tbaa !5
  %414 = mul nsw i32 %413, %398
  %415 = sext i32 %414 to i64
  %gep650 = getelementptr %struct.doublecomplex, ptr %12, i64 %415
  call void @zdscal_(ptr noundef nonnull %3, ptr noundef nonnull %28, ptr noundef %gep650, ptr noundef nonnull @c__1) #7
  %416 = add nsw i32 %.4652, 1
  %417 = load i32, ptr %19, align 4, !tbaa !5
  %.not581.not = icmp slt i32 %.4652, %417
  br i1 %.not581.not, label %.lr.ph654, label %._crit_edge655.loopexit, !llvm.loop !34

._crit_edge655.loopexit:                          ; preds = %.lr.ph654
  %.pre814 = load i32, ptr %30, align 4, !tbaa !5
  br label %._crit_edge655

._crit_edge655:                                   ; preds = %._crit_edge655.loopexit, %388
  %418 = phi i32 [ %.pre814, %._crit_edge655.loopexit ], [ %397, %388 ]
  %419 = sub i32 %207, %418
  store i32 %419, ptr %19, align 4, !tbaa !5
  %420 = add nsw i32 %418, %.0524
  %421 = load i32, ptr %3, align 4, !tbaa !5
  %422 = mul nsw i32 %421, %420
  %423 = sext i32 %422 to i64
  %gep674 = getelementptr %struct.doublecomplex, ptr %12, i64 %423
  %424 = load i32, ptr %29, align 4, !tbaa !5
  %425 = mul nsw i32 %424, %38
  %426 = sext i32 %425 to i64
  %gep676 = getelementptr %struct.doublecomplex, ptr %invariant.gep675, i64 %426
  call void @zlacpy_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef %gep674, ptr noundef nonnull %3, ptr noundef %gep676, ptr noundef nonnull %9) #7
  store i32 %.0524, ptr %30, align 4, !tbaa !5
  br label %.loopexit599thread-pre-split

427:                                              ; preds = %385
  %428 = add nsw i32 %.pre813, -1
  store i32 %428, ptr %30, align 4, !tbaa !5
  br label %.loopexit599thread-pre-split

..loopexit599_crit_edge:                          ; preds = %.lr.ph659, %.lr.ph659.prol.loopexit
  %indvars.iv.next786.lcssa = phi i64 [ %indvars.iv.next786.lcssa.unr, %.lr.ph659.prol.loopexit ], [ %indvars.iv.next786.7, %.lr.ph659 ]
  %429 = trunc i64 %indvars.iv.next786.lcssa to i32
  %430 = add i32 %311, %429
  store i32 %430, ptr %21, align 4, !tbaa !5
  br label %.loopexit599thread-pre-split

.loopexit599thread-pre-split:                     ; preds = %._crit_edge655, %427, %349, %..loopexit599_crit_edge
  %.pr835 = load i32, ptr %29, align 4, !tbaa !5
  br label %.loopexit599

.loopexit599:                                     ; preds = %.loopexit599thread-pre-split, %306
  %431 = phi i32 [ %.pr835, %.loopexit599thread-pre-split ], [ %323, %306 ]
  %432 = add nsw i32 %431, -1
  store i32 %432, ptr %19, align 4, !tbaa !5
  %.not583.not661 = icmp sgt i32 %431, 1
  br i1 %.not583.not661, label %.lr.ph664.preheader, label %454

.lr.ph664.preheader:                              ; preds = %.loopexit599
  %wide.trip.count793 = zext nneg i32 %431 to i64
  %433 = add nsw i64 %wide.trip.count793, -1
  %xtraiter915 = and i64 %433, 1
  %434 = icmp eq i32 %431, 2
  br i1 %434, label %._crit_edge665.unr-lcssa, label %.lr.ph664.preheader.new

.lr.ph664.preheader.new:                          ; preds = %.lr.ph664.preheader
  %unroll_iter918 = and i64 %433, -2
  br label %.lr.ph664

.lr.ph664:                                        ; preds = %.lr.ph664, %.lr.ph664.preheader.new
  %indvars.iv790 = phi i64 [ 1, %.lr.ph664.preheader.new ], [ %indvars.iv.next791.1, %.lr.ph664 ]
  %niter919 = phi i64 [ 0, %.lr.ph664.preheader.new ], [ %niter919.next.1, %.lr.ph664 ]
  %435 = trunc nuw nsw i64 %indvars.iv790 to i32
  %436 = mul i32 %204, %435
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %indvars.iv790
  %438 = sext i32 %436 to i64
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %438
  %440 = load <2 x double>, ptr %437, align 8, !tbaa !23
  store <2 x double> %440, ptr %439, align 8, !tbaa !23
  %441 = trunc i64 %indvars.iv790 to i32
  %442 = add i32 %441, 1
  %443 = mul i32 %204, %442
  %444 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv790
  %445 = sext i32 %443 to i64
  %446 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %445
  %447 = load <2 x double>, ptr %444, align 8, !tbaa !23
  store <2 x double> %447, ptr %446, align 8, !tbaa !23
  %indvars.iv.next791.1 = add nuw nsw i64 %indvars.iv790, 2
  %niter919.next.1 = add i64 %niter919, 2
  %niter919.ncmp.1 = icmp eq i64 %niter919.next.1, %unroll_iter918
  br i1 %niter919.ncmp.1, label %._crit_edge665.unr-lcssa, label %.lr.ph664, !llvm.loop !35

._crit_edge665.unr-lcssa:                         ; preds = %.lr.ph664, %.lr.ph664.preheader
  %.lcssa898.ph = phi i32 [ poison, %.lr.ph664.preheader ], [ %443, %.lr.ph664 ]
  %indvars.iv790.unr = phi i64 [ 1, %.lr.ph664.preheader ], [ %indvars.iv.next791.1, %.lr.ph664 ]
  %lcmp.mod916.not = icmp eq i64 %xtraiter915, 0
  br i1 %lcmp.mod916.not, label %._crit_edge665, label %.lr.ph664.epil

.lr.ph664.epil:                                   ; preds = %._crit_edge665.unr-lcssa
  %448 = trunc nuw nsw i64 %indvars.iv790.unr to i32
  %449 = mul i32 %204, %448
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %indvars.iv790.unr
  %451 = sext i32 %449 to i64
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %451
  %453 = load <2 x double>, ptr %450, align 8, !tbaa !23
  store <2 x double> %453, ptr %452, align 8, !tbaa !23
  br label %._crit_edge665

._crit_edge665:                                   ; preds = %._crit_edge665.unr-lcssa, %.lr.ph664.epil
  %.lcssa898 = phi i32 [ %.lcssa898.ph, %._crit_edge665.unr-lcssa ], [ %449, %.lr.ph664.epil ]
  store i32 %.lcssa898, ptr %21, align 4, !tbaa !5
  br label %454

454:                                              ; preds = %._crit_edge665, %.loopexit599
  %455 = add nsw i32 %.0525690, -1
  br label %456

456:                                              ; preds = %._crit_edge824, %454
  %.pre-phi = phi i32 [ %.pre825, %._crit_edge824 ], [ %432, %454 ]
  %457 = phi i32 [ %storemerge689, %._crit_edge824 ], [ %431, %454 ]
  %.1526 = phi i32 [ %.0525690, %._crit_edge824 ], [ %455, %454 ]
  store i32 %.pre-phi, ptr %29, align 4, !tbaa !5
  %458 = icmp sgt i32 %457, 1
  br i1 %458, label %213, label %.loopexit600, !llvm.loop !36

.loopexit600:                                     ; preds = %456, %200, %._crit_edge628
  br i1 %50, label %459, label %.loopexit598

459:                                              ; preds = %.loopexit600
  store i32 1, ptr %30, align 4, !tbaa !5
  %460 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %460, ptr %19, align 4, !tbaa !5
  %invariant.gep727 = getelementptr i8, ptr %37, i64 16
  store i32 1, ptr %29, align 4, !tbaa !5
  %.not567743 = icmp slt i32 %460, 1
  br i1 %.not567743, label %.loopexit598, label %.lr.ph747

.lr.ph747:                                        ; preds = %459
  %461 = add i32 %32, 1
  %462 = getelementptr inbounds i8, ptr %22, i64 8
  %463 = icmp eq i32 %.0524, 1
  %464 = add nsw i32 %.0524, 1
  %465 = shl nsw i64 %36, 4
  %scevgep802 = getelementptr i8, ptr %6, i64 %465
  br label %466

466:                                              ; preds = %.lr.ph747, %717
  %467 = phi i32 [ %460, %.lr.ph747 ], [ %718, %717 ]
  %.2527745 = phi i32 [ 1, %.lr.ph747 ], [ %.3528, %717 ]
  %storemerge566744 = phi i32 [ 1, %.lr.ph747 ], [ %720, %717 ]
  br i1 %.not560, label %472, label %468

468:                                              ; preds = %466
  %469 = sext i32 %storemerge566744 to i64
  %470 = getelementptr inbounds i32, ptr %31, i64 %469
  %471 = load i32, ptr %470, align 4, !tbaa !5
  %.not568 = icmp eq i32 %471, 0
  br i1 %.not568, label %717, label %472

472:                                              ; preds = %468, %466
  %473 = mul i32 %storemerge566744, %461
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %474
  %476 = call { double, double } @Cd(ptr noundef %475)
  %477 = extractvalue { double, double } %476, 0
  %478 = extractvalue { double, double } %476, 1
  %479 = call double @cabs(double noundef %477, double noundef %478) #7
  %480 = fmul double %162, %479
  %481 = fcmp oge double %480, %167
  %482 = select i1 %481, double %480, double %167
  %483 = load i32, ptr %29, align 4, !tbaa !5
  %484 = load i32, ptr %30, align 4, !tbaa !5
  %485 = load i32, ptr %3, align 4, !tbaa !5
  %486 = mul nsw i32 %485, %484
  %487 = add nsw i32 %486, %483
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %488
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %489, align 8, !tbaa !23
  store i32 %485, ptr %21, align 4, !tbaa !5
  %.not569.not693 = icmp slt i32 %483, %485
  br i1 %.not569.not693, label %.lr.ph696, label %._crit_edge697

.lr.ph696:                                        ; preds = %472, %.lr.ph696
  %.6.in694 = phi i32 [ %.6, %.lr.ph696 ], [ %483, %472 ]
  %.6 = add nsw i32 %.6.in694, 1
  %490 = load i32, ptr %30, align 4, !tbaa !5
  %491 = load i32, ptr %3, align 4, !tbaa !5
  %492 = mul nsw i32 %491, %490
  %493 = add nsw i32 %492, %.6
  %494 = load i32, ptr %29, align 4, !tbaa !5
  %495 = mul nsw i32 %.6, %32
  %496 = add nsw i32 %494, %495
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %497
  %499 = call { double, double } @Cd(ptr noundef %498)
  %500 = extractvalue { double, double } %499, 0
  %501 = extractvalue { double, double } %499, 1
  %502 = fneg double %501
  %503 = call ptr @_pCd(ptr noundef nonnull %23)
  %504 = getelementptr inbounds i8, ptr %503, i64 8
  store double %500, ptr %503, align 8
  store double %502, ptr %504, align 8
  %505 = load <2 x double>, ptr %23, align 16, !tbaa !23
  %506 = fneg <2 x double> %505
  store <2 x double> %506, ptr %22, align 16, !tbaa !23
  %507 = sext i32 %493 to i64
  %508 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %507
  store <2 x double> %506, ptr %508, align 8, !tbaa !23
  %509 = load i32, ptr %21, align 4, !tbaa !5
  %.not569.not = icmp slt i32 %.6, %509
  br i1 %.not569.not, label %.lr.ph696, label %._crit_edge697.loopexit, !llvm.loop !37

._crit_edge697.loopexit:                          ; preds = %.lr.ph696
  %.pre816 = load i32, ptr %3, align 4, !tbaa !5
  %.pre817 = load i32, ptr %29, align 4, !tbaa !5
  br label %._crit_edge697

._crit_edge697:                                   ; preds = %._crit_edge697.loopexit, %472
  %510 = phi i32 [ %.pre817, %._crit_edge697.loopexit ], [ %483, %472 ]
  %511 = phi i32 [ %.pre816, %._crit_edge697.loopexit ], [ %485, %472 ]
  store i32 %511, ptr %21, align 4, !tbaa !5
  %.not570.not699 = icmp slt i32 %510, %511
  br i1 %.not570.not699, label %.lr.ph702.preheader, label %._crit_edge703

.lr.ph702.preheader:                              ; preds = %._crit_edge697
  %512 = sext i32 %510 to i64
  br label %.lr.ph702

.lr.ph702:                                        ; preds = %.lr.ph702.preheader, %531
  %indvars.iv795 = phi i64 [ %512, %.lr.ph702.preheader ], [ %indvars.iv.next796, %531 ]
  %indvars.iv.next796 = add nsw i64 %indvars.iv795, 1
  %513 = trunc nsw i64 %indvars.iv.next796 to i32
  %514 = mul i32 %461, %513
  %515 = load i32, ptr %29, align 4, !tbaa !5
  %516 = mul i32 %515, %461
  %517 = sext i32 %514 to i64
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %517
  %519 = sext i32 %516 to i64
  %520 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %519
  %521 = load <2 x double>, ptr %518, align 8, !tbaa !23
  %522 = load <2 x double>, ptr %520, align 8, !tbaa !23
  %523 = fsub <2 x double> %521, %522
  store <2 x double> %523, ptr %22, align 16, !tbaa !23
  store <2 x double> %523, ptr %518, align 8, !tbaa !23
  %524 = call { double, double } @Cd(ptr noundef nonnull %518)
  %525 = extractvalue { double, double } %524, 0
  %526 = extractvalue { double, double } %524, 1
  %527 = call double @cabs(double noundef %525, double noundef %526) #7
  %528 = fcmp olt double %527, %482
  br i1 %528, label %529, label %531

529:                                              ; preds = %.lr.ph702
  %530 = getelementptr inbounds i8, ptr %518, i64 8
  store double %482, ptr %518, align 8, !tbaa !19
  store double 0.000000e+00, ptr %530, align 8, !tbaa !22
  br label %531

531:                                              ; preds = %.lr.ph702, %529
  %532 = load i32, ptr %21, align 4, !tbaa !5
  %533 = sext i32 %532 to i64
  %.not570.not = icmp slt i64 %indvars.iv.next796, %533
  br i1 %.not570.not, label %.lr.ph702, label %._crit_edge703.loopexit, !llvm.loop !38

._crit_edge703.loopexit:                          ; preds = %531
  %.pre818 = load i32, ptr %29, align 4, !tbaa !5
  %.pre819 = load i32, ptr %3, align 4, !tbaa !5
  br label %._crit_edge703

._crit_edge703:                                   ; preds = %._crit_edge703.loopexit, %._crit_edge697
  %534 = phi i32 [ %.pre819, %._crit_edge703.loopexit ], [ %511, %._crit_edge697 ]
  %535 = phi i32 [ %.pre818, %._crit_edge703.loopexit ], [ %510, %._crit_edge697 ]
  %536 = icmp slt i32 %535, %534
  br i1 %536, label %537, label %557

537:                                              ; preds = %._crit_edge703
  %538 = sub nsw i32 %534, %535
  store i32 %538, ptr %21, align 4, !tbaa !5
  %539 = add nsw i32 %535, 1
  %540 = mul i32 %539, %461
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %541
  %543 = load i32, ptr %30, align 4, !tbaa !5
  %544 = mul nsw i32 %543, %534
  %545 = add nsw i32 %544, %539
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %546
  call void @zlatrs_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.13, ptr noundef nonnull %21, ptr noundef %542, ptr noundef nonnull %5, ptr noundef nonnull %547, ptr noundef nonnull %27, ptr noundef nonnull %14, ptr noundef nonnull %16) #7
  %548 = load i32, ptr %29, align 4, !tbaa !5
  %549 = load i32, ptr %30, align 4, !tbaa !5
  %550 = load i32, ptr %3, align 4, !tbaa !5
  %551 = mul nsw i32 %550, %549
  %552 = add nsw i32 %551, %548
  store i32 %552, ptr %21, align 4, !tbaa !5
  %553 = load double, ptr %27, align 8, !tbaa !23
  %554 = sext i32 %552 to i64
  %555 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %554
  store double %553, ptr %555, align 8, !tbaa !19
  %556 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %554, i32 1
  store double 0.000000e+00, ptr %556, align 8, !tbaa !22
  br label %557

557:                                              ; preds = %537, %._crit_edge703
  %558 = phi i32 [ %550, %537 ], [ %534, %._crit_edge703 ]
  %559 = phi i32 [ %548, %537 ], [ %535, %._crit_edge703 ]
  br i1 %.not562, label %560, label %605

560:                                              ; preds = %557
  %561 = add i32 %558, 1
  %562 = sub i32 %561, %559
  store i32 %562, ptr %21, align 4, !tbaa !5
  %563 = load i32, ptr %30, align 4, !tbaa !5
  %564 = mul nsw i32 %563, %558
  %565 = add nsw i32 %564, %559
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %566
  %568 = mul nsw i32 %.2527745, %35
  %569 = add nsw i32 %559, %568
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %570
  call void @zcopy_(ptr noundef nonnull %21, ptr noundef nonnull %567, ptr noundef nonnull @c__1, ptr noundef %571, ptr noundef nonnull @c__1) #7
  %572 = load i32, ptr %3, align 4, !tbaa !5
  %573 = load i32, ptr %29, align 4, !tbaa !5
  %574 = add i32 %572, 1
  %575 = sub i32 %574, %573
  store i32 %575, ptr %21, align 4, !tbaa !5
  %576 = add nsw i32 %573, %568
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %577
  %579 = call i32 @izamax_(ptr noundef nonnull %21, ptr noundef %578, ptr noundef nonnull @c__1) #7
  %580 = load i32, ptr %29, align 4, !tbaa !5
  %581 = add i32 %568, -1
  %582 = add i32 %581, %579
  %583 = add i32 %582, %580
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %584
  %586 = call { double, double } @Cd(ptr noundef %585)
  %587 = extractvalue { double, double } %586, 0
  %588 = extractvalue { double, double } %586, 1
  %589 = call double @cabs(double noundef %587, double noundef %588) #7
  %590 = fdiv double 1.000000e+00, %589
  store double %590, ptr %28, align 8, !tbaa !23
  %591 = load i32, ptr %3, align 4, !tbaa !5
  %592 = load i32, ptr %29, align 4, !tbaa !5
  %593 = add i32 %591, 1
  %594 = sub i32 %593, %592
  store i32 %594, ptr %21, align 4, !tbaa !5
  %595 = add nsw i32 %592, %568
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %596
  call void @zdscal_(ptr noundef nonnull %21, ptr noundef nonnull %28, ptr noundef %597, ptr noundef nonnull @c__1) #7
  %598 = load i32, ptr %29, align 4, !tbaa !5
  %.not571.not718 = icmp sgt i32 %598, 1
  br i1 %.not571.not718, label %.lr.ph721.preheader, label %.loopexit

.lr.ph721.preheader:                              ; preds = %560
  %599 = add nsw i32 %598, -1
  %600 = add i32 %568, 1
  %601 = sext i32 %600 to i64
  %602 = shl nsw i64 %601, 4
  %scevgep803 = getelementptr i8, ptr %scevgep802, i64 %602
  %603 = zext nneg i32 %599 to i64
  %604 = shl nuw nsw i64 %603, 4
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep803, i8 0, i64 %604, i1 false), !tbaa !23
  br label %.loopexit

605:                                              ; preds = %557
  br i1 %463, label %606, label %639

606:                                              ; preds = %605
  %607 = icmp slt i32 %559, %558
  br i1 %607, label %608, label %621

608:                                              ; preds = %606
  %609 = sub nsw i32 %558, %559
  store i32 %609, ptr %21, align 4, !tbaa !5
  %610 = load double, ptr %27, align 8, !tbaa !23
  store double %610, ptr %22, align 16, !tbaa !19
  store double 0.000000e+00, ptr %462, align 8, !tbaa !22
  %611 = add nsw i32 %559, 1
  %612 = mul nsw i32 %611, %35
  %613 = sext i32 %612 to i64
  %gep736 = getelementptr %struct.doublecomplex, ptr %invariant.gep727, i64 %613
  %614 = load i32, ptr %30, align 4, !tbaa !5
  %615 = mul nsw i32 %614, %558
  %616 = add nsw i32 %615, %611
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %617
  %619 = mul nsw i32 %559, %35
  %620 = sext i32 %619 to i64
  %gep738 = getelementptr %struct.doublecomplex, ptr %invariant.gep727, i64 %620
  call void @zgemv_(ptr noundef nonnull @.str.14, ptr noundef nonnull %3, ptr noundef nonnull %21, ptr noundef nonnull @c_b2, ptr noundef %gep736, ptr noundef nonnull %7, ptr noundef nonnull %618, ptr noundef nonnull @c__1, ptr noundef nonnull %22, ptr noundef %gep738, ptr noundef nonnull @c__1) #7
  %.pre822 = load i32, ptr %29, align 4, !tbaa !5
  br label %621

621:                                              ; preds = %608, %606
  %622 = phi i32 [ %.pre822, %608 ], [ %559, %606 ]
  %623 = mul nsw i32 %622, %35
  %624 = sext i32 %623 to i64
  %gep740 = getelementptr %struct.doublecomplex, ptr %invariant.gep727, i64 %624
  %625 = call i32 @izamax_(ptr noundef nonnull %3, ptr noundef %gep740, ptr noundef nonnull @c__1) #7
  %626 = load i32, ptr %29, align 4, !tbaa !5
  %627 = mul nsw i32 %626, %35
  %628 = add nsw i32 %627, %625
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %629
  %631 = call { double, double } @Cd(ptr noundef %630)
  %632 = extractvalue { double, double } %631, 0
  %633 = extractvalue { double, double } %631, 1
  %634 = call double @cabs(double noundef %632, double noundef %633) #7
  %635 = fdiv double 1.000000e+00, %634
  store double %635, ptr %28, align 8, !tbaa !23
  %636 = load i32, ptr %29, align 4, !tbaa !5
  %637 = mul nsw i32 %636, %35
  %638 = sext i32 %637 to i64
  %gep742 = getelementptr %struct.doublecomplex, ptr %invariant.gep727, i64 %638
  call void @zdscal_(ptr noundef nonnull %3, ptr noundef nonnull %28, ptr noundef %gep742, ptr noundef nonnull @c__1) #7
  br label %.loopexit

639:                                              ; preds = %605
  %.not572.not704 = icmp sgt i32 %559, 1
  %.pre820 = load i32, ptr %30, align 4, !tbaa !5
  br i1 %.not572.not704, label %.lr.ph707, label %._crit_edge708

.lr.ph707:                                        ; preds = %639
  %640 = add nsw i32 %559, -1
  %641 = mul nsw i32 %558, %.pre820
  %642 = sext i32 %641 to i64
  %643 = shl nsw i64 %642, 4
  %scevgep798 = getelementptr i8, ptr %12, i64 %643
  %644 = zext nneg i32 %640 to i64
  %645 = shl nuw nsw i64 %644, 4
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep798, i8 0, i64 %645, i1 false), !tbaa !23
  br label %._crit_edge708

._crit_edge708:                                   ; preds = %.lr.ph707, %639
  %646 = icmp eq i32 %.pre820, %.0524
  %647 = icmp eq i32 %559, %558
  %or.cond846 = or i1 %646, %647
  br i1 %or.cond846, label %648, label %690

648:                                              ; preds = %._crit_edge708
  %649 = sub i32 %.pre820, %559
  %650 = add i32 %649, %558
  store i32 %650, ptr %21, align 4, !tbaa !5
  %651 = sub nsw i32 %559, %.pre820
  %652 = add nsw i32 %651, 1
  %653 = mul nsw i32 %652, %35
  %654 = sext i32 %653 to i64
  %gep728 = getelementptr %struct.doublecomplex, ptr %invariant.gep727, i64 %654
  %655 = add nsw i32 %558, %652
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %656
  %658 = mul nsw i32 %558, %464
  %659 = sext i32 %658 to i64
  %gep730 = getelementptr %struct.doublecomplex, ptr %12, i64 %659
  call void @zgemm_(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.14, ptr noundef nonnull %3, ptr noundef nonnull %30, ptr noundef nonnull %21, ptr noundef nonnull @c_b2, ptr noundef %gep728, ptr noundef nonnull %7, ptr noundef nonnull %657, ptr noundef nonnull %3, ptr noundef nonnull @c_b1, ptr noundef %gep730, ptr noundef nonnull %3) #7
  %660 = load i32, ptr %30, align 4, !tbaa !5
  store i32 %660, ptr %21, align 4, !tbaa !5
  %.not573713 = icmp slt i32 %660, 1
  br i1 %.not573713, label %._crit_edge717, label %.lr.ph716

.lr.ph716:                                        ; preds = %648, %.lr.ph716
  %.10714 = phi i32 [ %679, %.lr.ph716 ], [ 1, %648 ]
  %661 = add nsw i32 %.10714, %.0524
  %662 = load i32, ptr %3, align 4, !tbaa !5
  %663 = mul nsw i32 %662, %661
  %664 = sext i32 %663 to i64
  %gep710 = getelementptr %struct.doublecomplex, ptr %12, i64 %664
  %665 = call i32 @izamax_(ptr noundef nonnull %3, ptr noundef %gep710, ptr noundef nonnull @c__1) #7
  %666 = load i32, ptr %3, align 4, !tbaa !5
  %667 = mul nsw i32 %666, %661
  %668 = add nsw i32 %667, %665
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %669
  %671 = call { double, double } @Cd(ptr noundef nonnull %670)
  %672 = extractvalue { double, double } %671, 0
  %673 = extractvalue { double, double } %671, 1
  %674 = call double @cabs(double noundef %672, double noundef %673) #7
  %675 = fdiv double 1.000000e+00, %674
  store double %675, ptr %28, align 8, !tbaa !23
  %676 = load i32, ptr %3, align 4, !tbaa !5
  %677 = mul nsw i32 %676, %661
  %678 = sext i32 %677 to i64
  %gep712 = getelementptr %struct.doublecomplex, ptr %12, i64 %678
  call void @zdscal_(ptr noundef nonnull %3, ptr noundef nonnull %28, ptr noundef %gep712, ptr noundef nonnull @c__1) #7
  %679 = add nuw nsw i32 %.10714, 1
  %680 = load i32, ptr %21, align 4, !tbaa !5
  %.not573.not = icmp slt i32 %.10714, %680
  br i1 %.not573.not, label %.lr.ph716, label %._crit_edge717.loopexit, !llvm.loop !39

._crit_edge717.loopexit:                          ; preds = %.lr.ph716
  %.pre821 = load i32, ptr %30, align 4, !tbaa !5
  br label %._crit_edge717

._crit_edge717:                                   ; preds = %._crit_edge717.loopexit, %648
  %681 = phi i32 [ %.pre821, %._crit_edge717.loopexit ], [ %660, %648 ]
  %682 = load i32, ptr %3, align 4, !tbaa !5
  %683 = mul nsw i32 %682, %464
  %684 = sext i32 %683 to i64
  %gep732 = getelementptr %struct.doublecomplex, ptr %12, i64 %684
  %685 = load i32, ptr %29, align 4, !tbaa !5
  %686 = add i32 %685, 1
  %687 = sub i32 %686, %681
  %688 = mul nsw i32 %687, %35
  %689 = sext i32 %688 to i64
  %gep734 = getelementptr %struct.doublecomplex, ptr %invariant.gep727, i64 %689
  call void @zlacpy_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %30, ptr noundef %gep732, ptr noundef nonnull %3, ptr noundef %gep734, ptr noundef nonnull %7) #7
  store i32 1, ptr %30, align 4, !tbaa !5
  br label %.loopexit

690:                                              ; preds = %._crit_edge708
  %691 = add nsw i32 %.pre820, 1
  store i32 %691, ptr %30, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph721.preheader, %560, %621, %690, %._crit_edge717
  %692 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %692, ptr %21, align 4, !tbaa !5
  %693 = load i32, ptr %29, align 4, !tbaa !5
  %.not574.not722 = icmp slt i32 %693, %692
  br i1 %.not574.not722, label %.lr.ph725.preheader, label %._crit_edge726

.lr.ph725.preheader:                              ; preds = %.loopexit
  %694 = sext i32 %693 to i64
  %wide.trip.count810 = sext i32 %692 to i64
  %695 = sub nsw i64 %wide.trip.count810, %694
  %xtraiter920 = and i64 %695, 1
  %lcmp.mod921.not = icmp eq i64 %xtraiter920, 0
  br i1 %lcmp.mod921.not, label %.lr.ph725.prol.loopexit, label %.lr.ph725.prol

.lr.ph725.prol:                                   ; preds = %.lr.ph725.preheader
  %indvars.iv.next808.prol = add nsw i64 %694, 1
  %696 = trunc nsw i64 %indvars.iv.next808.prol to i32
  %697 = mul i32 %461, %696
  %698 = getelementptr %struct.doublecomplex, ptr %12, i64 %694
  %699 = sext i32 %697 to i64
  %700 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %699
  %701 = load <2 x double>, ptr %698, align 8, !tbaa !23
  store <2 x double> %701, ptr %700, align 8, !tbaa !23
  br label %.lr.ph725.prol.loopexit

.lr.ph725.prol.loopexit:                          ; preds = %.lr.ph725.prol, %.lr.ph725.preheader
  %indvars.iv807.unr = phi i64 [ %694, %.lr.ph725.preheader ], [ %indvars.iv.next808.prol, %.lr.ph725.prol ]
  %702 = add nsw i64 %wide.trip.count810, -1
  %703 = icmp eq i64 %702, %694
  br i1 %703, label %._crit_edge726, label %.lr.ph725

.lr.ph725:                                        ; preds = %.lr.ph725.prol.loopexit, %.lr.ph725
  %indvars.iv807 = phi i64 [ %indvars.iv.next808.1, %.lr.ph725 ], [ %indvars.iv807.unr, %.lr.ph725.prol.loopexit ]
  %indvars.iv.next808 = add nsw i64 %indvars.iv807, 1
  %704 = trunc nsw i64 %indvars.iv.next808 to i32
  %705 = mul i32 %461, %704
  %706 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv807
  %707 = sext i32 %705 to i64
  %708 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %707
  %709 = load <2 x double>, ptr %706, align 8, !tbaa !23
  store <2 x double> %709, ptr %708, align 8, !tbaa !23
  %indvars.iv.next808.1 = add nsw i64 %indvars.iv807, 2
  %710 = trunc nsw i64 %indvars.iv.next808.1 to i32
  %711 = mul i32 %461, %710
  %712 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv.next808
  %713 = sext i32 %711 to i64
  %714 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %713
  %715 = load <2 x double>, ptr %712, align 8, !tbaa !23
  store <2 x double> %715, ptr %714, align 8, !tbaa !23
  %exitcond811.not.1 = icmp eq i64 %indvars.iv.next808.1, %wide.trip.count810
  br i1 %exitcond811.not.1, label %._crit_edge726, label %.lr.ph725, !llvm.loop !40

._crit_edge726:                                   ; preds = %.lr.ph725.prol.loopexit, %.lr.ph725, %.loopexit
  %716 = add nsw i32 %.2527745, 1
  %.pre823 = load i32, ptr %19, align 4, !tbaa !5
  br label %717

717:                                              ; preds = %._crit_edge726, %468
  %718 = phi i32 [ %.pre823, %._crit_edge726 ], [ %467, %468 ]
  %719 = phi i32 [ %693, %._crit_edge726 ], [ %storemerge566744, %468 ]
  %.3528 = phi i32 [ %716, %._crit_edge726 ], [ %.2527745, %468 ]
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %29, align 4, !tbaa !5
  %.not567.not = icmp slt i32 %719, %718
  br i1 %.not567.not, label %466, label %.loopexit598, !llvm.loop !41

.loopexit598:                                     ; preds = %717, %459, %.loopexit600, %149, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #7
  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 i32 @lsame_(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

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 i32 @xerbla_(ptr noundef, ptr noundef, i32 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 double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nofree nounwind
declare double @cabs(double noundef, double noundef) local_unnamed_addr #3

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

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

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

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

declare void @zgemv_(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 @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

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

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

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

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

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

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 = { nofree nounwind "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 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !10, !15, !16}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !10, !15}
!18 = distinct !{!18, !10}
!19 = !{!20, !21, i64 0}
!20 = !{!"", !21, i64 0, !21, i64 8}
!21 = !{!"double", !7, i64 0}
!22 = !{!20, !21, i64 8}
!23 = !{!21, !21, i64 0}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10, !15, !16}
!27 = distinct !{!27, !10, !15}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.unroll.disable"}
!31 = distinct !{!31, !10}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10}
!35 = distinct !{!35, !10}
!36 = distinct !{!36, !10}
!37 = distinct !{!37, !10}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10}
!40 = distinct !{!40, !10}
!41 = distinct !{!41, !10}


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