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

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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b19 = external hidden global %struct.doublecomplex, align 8
@c_b20 = external hidden global %struct.doublecomplex, align 8
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@c_false = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8

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

127:                                              ; preds = %20
  %128 = load i64, ptr %74, align 8, !tbaa !9
  %129 = icmp ne i64 %128, 0
  br label %130

130:                                              ; preds = %127, %20
  %131 = phi i1 [ true, %20 ], [ %129, %127 ]
  %132 = zext i1 %131 to i32
  %133 = sext i32 %132 to i64
  store i64 %133, ptr %70, align 8, !tbaa !9
  %134 = load ptr, ptr %22, align 8, !tbaa !5
  %135 = call i64 @lsame_(ptr noundef %134, ptr noundef @.str.2)
  %136 = icmp ne i64 %135, 0
  br i1 %136, label %140, label %137

137:                                              ; preds = %130
  %138 = load i64, ptr %74, align 8, !tbaa !9
  %139 = icmp ne i64 %138, 0
  br label %140

140:                                              ; preds = %137, %130
  %141 = phi i1 [ true, %130 ], [ %139, %137 ]
  %142 = zext i1 %141 to i32
  %143 = sext i32 %142 to i64
  store i64 %143, ptr %75, align 8, !tbaa !9
  %144 = load ptr, ptr %23, align 8, !tbaa !5
  %145 = call i64 @lsame_(ptr noundef %144, ptr noundef @.str.3)
  store i64 %145, ptr %76, align 8, !tbaa !9
  %146 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 0, ptr %146, align 8, !tbaa !9
  %147 = load ptr, ptr %39, align 8, !tbaa !5
  %148 = load i64, ptr %147, align 8, !tbaa !9
  %149 = icmp eq i64 %148, -1
  %150 = zext i1 %149 to i32
  %151 = sext i32 %150 to i64
  store i64 %151, ptr %78, align 8, !tbaa !9
  %152 = load i64, ptr %70, align 8, !tbaa !9
  %153 = icmp ne i64 %152, 0
  br i1 %153, label %159, label %154

154:                                              ; preds = %140
  %155 = load i64, ptr %75, align 8, !tbaa !9
  %156 = icmp ne i64 %155, 0
  br i1 %156, label %159, label %157

157:                                              ; preds = %154
  %158 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -1, ptr %158, align 8, !tbaa !9
  br label %314

159:                                              ; preds = %154, %140
  %160 = load ptr, ptr %23, align 8, !tbaa !5
  %161 = call i64 @lsame_(ptr noundef %160, ptr noundef @.str.4)
  %162 = icmp ne i64 %161, 0
  br i1 %162, label %168, label %163

163:                                              ; preds = %159
  %164 = load i64, ptr %76, align 8, !tbaa !9
  %165 = icmp ne i64 %164, 0
  br i1 %165, label %168, label %166

166:                                              ; preds = %163
  %167 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -2, ptr %167, align 8, !tbaa !9
  br label %313

168:                                              ; preds = %163, %159
  %169 = load ptr, ptr %25, align 8, !tbaa !5
  %170 = load i64, ptr %169, align 8, !tbaa !9
  %171 = icmp slt i64 %170, 0
  br i1 %171, label %172, label %174

172:                                              ; preds = %168
  %173 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -4, ptr %173, align 8, !tbaa !9
  br label %312

174:                                              ; preds = %168
  %175 = load ptr, ptr %27, align 8, !tbaa !5
  %176 = load i64, ptr %175, align 8, !tbaa !9
  %177 = load ptr, ptr %25, align 8, !tbaa !5
  %178 = load i64, ptr %177, align 8, !tbaa !9
  %179 = icmp sge i64 1, %178
  br i1 %179, label %180, label %181

180:                                              ; preds = %174
  br label %184

181:                                              ; preds = %174
  %182 = load ptr, ptr %25, align 8, !tbaa !5
  %183 = load i64, ptr %182, align 8, !tbaa !9
  br label %184

184:                                              ; preds = %181, %180
  %185 = phi i64 [ 1, %180 ], [ %183, %181 ]
  %186 = icmp slt i64 %176, %185
  br i1 %186, label %187, label %189

187:                                              ; preds = %184
  %188 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -6, ptr %188, align 8, !tbaa !9
  br label %311

189:                                              ; preds = %184
  %190 = load ptr, ptr %29, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = load ptr, ptr %25, align 8, !tbaa !5
  %193 = load i64, ptr %192, align 8, !tbaa !9
  %194 = icmp sge i64 1, %193
  br i1 %194, label %195, label %196

195:                                              ; preds = %189
  br label %199

196:                                              ; preds = %189
  %197 = load ptr, ptr %25, align 8, !tbaa !5
  %198 = load i64, ptr %197, align 8, !tbaa !9
  br label %199

199:                                              ; preds = %196, %195
  %200 = phi i64 [ 1, %195 ], [ %198, %196 ]
  %201 = icmp slt i64 %191, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %199
  %203 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -8, ptr %203, align 8, !tbaa !9
  br label %310

204:                                              ; preds = %199
  %205 = load i64, ptr %70, align 8, !tbaa !9
  %206 = icmp ne i64 %205, 0
  br i1 %206, label %207, label %215

207:                                              ; preds = %204
  %208 = load ptr, ptr %31, align 8, !tbaa !5
  %209 = load i64, ptr %208, align 8, !tbaa !9
  %210 = load ptr, ptr %25, align 8, !tbaa !5
  %211 = load i64, ptr %210, align 8, !tbaa !9
  %212 = icmp slt i64 %209, %211
  br i1 %212, label %213, label %215

213:                                              ; preds = %207
  %214 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -10, ptr %214, align 8, !tbaa !9
  br label %309

215:                                              ; preds = %207, %204
  %216 = load i64, ptr %70, align 8, !tbaa !9
  %217 = icmp ne i64 %216, 0
  br i1 %217, label %218, label %226

218:                                              ; preds = %215
  %219 = load ptr, ptr %33, align 8, !tbaa !5
  %220 = load i64, ptr %219, align 8, !tbaa !9
  %221 = load ptr, ptr %25, align 8, !tbaa !5
  %222 = load i64, ptr %221, align 8, !tbaa !9
  %223 = icmp slt i64 %220, %222
  br i1 %223, label %224, label %226

224:                                              ; preds = %218
  %225 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -12, ptr %225, align 8, !tbaa !9
  br label %308

226:                                              ; preds = %218, %215
  %227 = load i64, ptr %76, align 8, !tbaa !9
  %228 = icmp ne i64 %227, 0
  br i1 %228, label %229, label %252

229:                                              ; preds = %226
  %230 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 0, ptr %230, align 8, !tbaa !9
  %231 = load ptr, ptr %25, align 8, !tbaa !5
  %232 = load i64, ptr %231, align 8, !tbaa !9
  store i64 %232, ptr %50, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  br label %233

233:                                              ; preds = %248, %229
  %234 = load i64, ptr %55, align 8, !tbaa !9
  %235 = load i64, ptr %50, align 8, !tbaa !9
  %236 = icmp sle i64 %234, %235
  br i1 %236, label %237, label %251

237:                                              ; preds = %233
  %238 = load ptr, ptr %24, align 8, !tbaa !5
  %239 = load i64, ptr %55, align 8, !tbaa !9
  %240 = getelementptr inbounds i64, ptr %238, i64 %239
  %241 = load i64, ptr %240, align 8, !tbaa !9
  %242 = icmp ne i64 %241, 0
  br i1 %242, label %243, label %247

243:                                              ; preds = %237
  %244 = load ptr, ptr %37, align 8, !tbaa !5
  %245 = load i64, ptr %244, align 8, !tbaa !9
  %246 = add nsw i64 %245, 1
  store i64 %246, ptr %244, align 8, !tbaa !9
  br label %247

247:                                              ; preds = %243, %237
  br label %248

248:                                              ; preds = %247
  %249 = load i64, ptr %55, align 8, !tbaa !9
  %250 = add nsw i64 %249, 1
  store i64 %250, ptr %55, align 8, !tbaa !9
  br label %233, !llvm.loop !11

251:                                              ; preds = %233
  br label %256

252:                                              ; preds = %226
  %253 = load ptr, ptr %25, align 8, !tbaa !5
  %254 = load i64, ptr %253, align 8, !tbaa !9
  %255 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 %254, ptr %255, align 8, !tbaa !9
  br label %256

256:                                              ; preds = %252, %251
  %257 = load ptr, ptr %25, align 8, !tbaa !5
  %258 = load i64, ptr %257, align 8, !tbaa !9
  %259 = icmp eq i64 %258, 0
  br i1 %259, label %260, label %261

260:                                              ; preds = %256
  store i64 1, ptr %69, align 8, !tbaa !9
  br label %280

261:                                              ; preds = %256
  %262 = load ptr, ptr %22, align 8, !tbaa !5
  %263 = call i64 @lsame_(ptr noundef %262, ptr noundef @.str.2)
  %264 = icmp ne i64 %263, 0
  br i1 %264, label %269, label %265

265:                                              ; preds = %261
  %266 = load ptr, ptr %22, align 8, !tbaa !5
  %267 = call i64 @lsame_(ptr noundef %266, ptr noundef @.str)
  %268 = icmp ne i64 %267, 0
  br i1 %268, label %269, label %276

269:                                              ; preds = %265, %261
  %270 = load ptr, ptr %25, align 8, !tbaa !5
  %271 = load i64, ptr %270, align 8, !tbaa !9
  %272 = shl i64 %271, 1
  %273 = load ptr, ptr %25, align 8, !tbaa !5
  %274 = load i64, ptr %273, align 8, !tbaa !9
  %275 = mul nsw i64 %272, %274
  store i64 %275, ptr %69, align 8, !tbaa !9
  br label %279

276:                                              ; preds = %265
  %277 = load ptr, ptr %25, align 8, !tbaa !5
  %278 = load i64, ptr %277, align 8, !tbaa !9
  store i64 %278, ptr %69, align 8, !tbaa !9
  br label %279

279:                                              ; preds = %276, %269
  br label %280

280:                                              ; preds = %279, %260
  %281 = load i64, ptr %69, align 8, !tbaa !9
  %282 = sitofp i64 %281 to double
  %283 = load ptr, ptr %38, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.doublecomplex, ptr %283, i64 1
  %285 = getelementptr inbounds %struct.doublecomplex, ptr %284, i32 0, i32 0
  store double %282, ptr %285, align 8, !tbaa !13
  %286 = load ptr, ptr %38, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.doublecomplex, ptr %286, i64 1
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %287, i32 0, i32 1
  store double 0.000000e+00, ptr %288, align 8, !tbaa !16
  %289 = load ptr, ptr %36, align 8, !tbaa !5
  %290 = load i64, ptr %289, align 8, !tbaa !9
  %291 = load ptr, ptr %37, align 8, !tbaa !5
  %292 = load i64, ptr %291, align 8, !tbaa !9
  %293 = icmp slt i64 %290, %292
  br i1 %293, label %294, label %296

294:                                              ; preds = %280
  %295 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -15, ptr %295, align 8, !tbaa !9
  br label %307

296:                                              ; preds = %280
  %297 = load ptr, ptr %39, align 8, !tbaa !5
  %298 = load i64, ptr %297, align 8, !tbaa !9
  %299 = load i64, ptr %69, align 8, !tbaa !9
  %300 = icmp slt i64 %298, %299
  br i1 %300, label %301, label %306

301:                                              ; preds = %296
  %302 = load i64, ptr %78, align 8, !tbaa !9
  %303 = icmp ne i64 %302, 0
  br i1 %303, label %306, label %304

304:                                              ; preds = %301
  %305 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -18, ptr %305, align 8, !tbaa !9
  br label %306

306:                                              ; preds = %304, %301, %296
  br label %307

307:                                              ; preds = %306, %294
  br label %308

308:                                              ; preds = %307, %224
  br label %309

309:                                              ; preds = %308, %213
  br label %310

310:                                              ; preds = %309, %202
  br label %311

311:                                              ; preds = %310, %187
  br label %312

312:                                              ; preds = %311, %172
  br label %313

313:                                              ; preds = %312, %166
  br label %314

314:                                              ; preds = %313, %157
  %315 = load ptr, ptr %41, align 8, !tbaa !5
  %316 = load i64, ptr %315, align 8, !tbaa !9
  %317 = icmp ne i64 %316, 0
  br i1 %317, label %318, label %323

318:                                              ; preds = %314
  %319 = load ptr, ptr %41, align 8, !tbaa !5
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = sub nsw i64 0, %320
  store i64 %321, ptr %50, align 8, !tbaa !9
  %322 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %50)
  store i32 0, ptr %21, align 4
  store i32 1, ptr %79, align 4
  br label %604

323:                                              ; preds = %314
  %324 = load i64, ptr %78, align 8, !tbaa !9
  %325 = icmp ne i64 %324, 0
  br i1 %325, label %326, label %327

326:                                              ; preds = %323
  store i32 0, ptr %21, align 4
  store i32 1, ptr %79, align 4
  br label %604

327:                                              ; preds = %323
  br label %328

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

332:                                              ; preds = %328
  store i32 0, ptr %21, align 4
  store i32 1, ptr %79, align 4
  br label %604

333:                                              ; preds = %328
  %334 = call double @dlamch_(ptr noundef @.str.6)
  store double %334, ptr %59, align 8, !tbaa !17
  %335 = call double @dlamch_(ptr noundef @.str.3)
  %336 = load double, ptr %59, align 8, !tbaa !17
  %337 = fdiv double %335, %336
  store double %337, ptr %77, align 8, !tbaa !17
  %338 = load double, ptr %77, align 8, !tbaa !17
  %339 = fdiv double 1.000000e+00, %338
  store double %339, ptr %73, align 8, !tbaa !17
  %340 = call i32 @dlabad_(ptr noundef %77, ptr noundef %73)
  store i64 0, ptr %58, align 8, !tbaa !9
  %341 = load ptr, ptr %25, align 8, !tbaa !5
  %342 = load i64, ptr %341, align 8, !tbaa !9
  store i64 %342, ptr %50, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  br label %343

343:                                              ; preds = %592, %333
  %344 = load i64, ptr %55, align 8, !tbaa !9
  %345 = load i64, ptr %50, align 8, !tbaa !9
  %346 = icmp sle i64 %344, %345
  br i1 %346, label %347, label %595

347:                                              ; preds = %343
  %348 = load i64, ptr %76, align 8, !tbaa !9
  %349 = icmp ne i64 %348, 0
  br i1 %349, label %350, label %358

350:                                              ; preds = %347
  %351 = load ptr, ptr %24, align 8, !tbaa !5
  %352 = load i64, ptr %55, align 8, !tbaa !9
  %353 = getelementptr inbounds i64, ptr %351, i64 %352
  %354 = load i64, ptr %353, align 8, !tbaa !9
  %355 = icmp ne i64 %354, 0
  br i1 %355, label %357, label %356

356:                                              ; preds = %350
  br label %591

357:                                              ; preds = %350
  br label %358

358:                                              ; preds = %357, %347
  %359 = load i64, ptr %58, align 8, !tbaa !9
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %58, align 8, !tbaa !9
  %361 = load i64, ptr %70, align 8, !tbaa !9
  %362 = icmp ne i64 %361, 0
  br i1 %362, label %363, label %459

363:                                              ; preds = %358
  %364 = load ptr, ptr %25, align 8, !tbaa !5
  %365 = load ptr, ptr %32, align 8, !tbaa !5
  %366 = load i64, ptr %58, align 8, !tbaa !9
  %367 = load i64, ptr %48, align 8, !tbaa !9
  %368 = mul nsw i64 %366, %367
  %369 = add nsw i64 %368, 1
  %370 = getelementptr inbounds %struct.doublecomplex, ptr %365, i64 %369
  %371 = call double @f2c_dznrm2(ptr noundef %364, ptr noundef %370, ptr noundef @c__1)
  store double %371, ptr %67, align 8, !tbaa !17
  %372 = load ptr, ptr %25, align 8, !tbaa !5
  %373 = load ptr, ptr %30, align 8, !tbaa !5
  %374 = load i64, ptr %58, align 8, !tbaa !9
  %375 = load i64, ptr %46, align 8, !tbaa !9
  %376 = mul nsw i64 %374, %375
  %377 = add nsw i64 %376, 1
  %378 = getelementptr inbounds %struct.doublecomplex, ptr %373, i64 %377
  %379 = call double @f2c_dznrm2(ptr noundef %372, ptr noundef %378, ptr noundef @c__1)
  store double %379, ptr %63, align 8, !tbaa !17
  %380 = load ptr, ptr %25, align 8, !tbaa !5
  %381 = load ptr, ptr %25, align 8, !tbaa !5
  %382 = load ptr, ptr %26, align 8, !tbaa !5
  %383 = load i64, ptr %43, align 8, !tbaa !9
  %384 = getelementptr inbounds %struct.doublecomplex, ptr %382, i64 %383
  %385 = load ptr, ptr %27, align 8, !tbaa !5
  %386 = load ptr, ptr %32, align 8, !tbaa !5
  %387 = load i64, ptr %58, align 8, !tbaa !9
  %388 = load i64, ptr %48, align 8, !tbaa !9
  %389 = mul nsw i64 %387, %388
  %390 = add nsw i64 %389, 1
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %386, i64 %390
  %392 = load ptr, ptr %38, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.doublecomplex, ptr %392, i64 1
  %394 = call i32 @f2c_zgemv(ptr noundef @.str.7, ptr noundef %380, ptr noundef %381, ptr noundef @c_b19, ptr noundef %384, ptr noundef %385, ptr noundef %391, ptr noundef @c__1, ptr noundef @c_b20, ptr noundef %393, ptr noundef @c__1)
  %395 = load ptr, ptr %25, align 8, !tbaa !5
  %396 = load ptr, ptr %38, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.doublecomplex, ptr %396, i64 1
  %398 = load ptr, ptr %30, align 8, !tbaa !5
  %399 = load i64, ptr %58, align 8, !tbaa !9
  %400 = load i64, ptr %46, align 8, !tbaa !9
  %401 = mul nsw i64 %399, %400
  %402 = add nsw i64 %401, 1
  %403 = getelementptr inbounds %struct.doublecomplex, ptr %398, i64 %402
  call void @f2c_zdotc(ptr noundef %53, ptr noundef %395, ptr noundef %397, ptr noundef @c__1, ptr noundef %403, ptr noundef @c__1)
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %53, i32 0, i32 0
  %405 = load double, ptr %404, align 8, !tbaa !13
  %406 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %405, ptr %406, align 8, !tbaa !13
  %407 = getelementptr inbounds %struct.doublecomplex, ptr %53, i32 0, i32 1
  %408 = load double, ptr %407, align 8, !tbaa !16
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %408, ptr %409, align 8, !tbaa !16
  %410 = load ptr, ptr %25, align 8, !tbaa !5
  %411 = load ptr, ptr %25, align 8, !tbaa !5
  %412 = load ptr, ptr %28, align 8, !tbaa !5
  %413 = load i64, ptr %45, align 8, !tbaa !9
  %414 = getelementptr inbounds %struct.doublecomplex, ptr %412, i64 %413
  %415 = load ptr, ptr %29, align 8, !tbaa !5
  %416 = load ptr, ptr %32, align 8, !tbaa !5
  %417 = load i64, ptr %58, align 8, !tbaa !9
  %418 = load i64, ptr %48, align 8, !tbaa !9
  %419 = mul nsw i64 %417, %418
  %420 = add nsw i64 %419, 1
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %416, i64 %420
  %422 = load ptr, ptr %38, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.doublecomplex, ptr %422, i64 1
  %424 = call i32 @f2c_zgemv(ptr noundef @.str.7, ptr noundef %410, ptr noundef %411, ptr noundef @c_b19, ptr noundef %414, ptr noundef %415, ptr noundef %421, ptr noundef @c__1, ptr noundef @c_b20, ptr noundef %423, ptr noundef @c__1)
  %425 = load ptr, ptr %25, align 8, !tbaa !5
  %426 = load ptr, ptr %38, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.doublecomplex, ptr %426, i64 1
  %428 = load ptr, ptr %30, align 8, !tbaa !5
  %429 = load i64, ptr %58, align 8, !tbaa !9
  %430 = load i64, ptr %46, align 8, !tbaa !9
  %431 = mul nsw i64 %429, %430
  %432 = add nsw i64 %431, 1
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %428, i64 %432
  call void @f2c_zdotc(ptr noundef %53, ptr noundef %425, ptr noundef %427, ptr noundef @c__1, ptr noundef %433, ptr noundef @c__1)
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %53, i32 0, i32 0
  %435 = load double, ptr %434, align 8, !tbaa !13
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %435, ptr %436, align 8, !tbaa !13
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %53, i32 0, i32 1
  %438 = load double, ptr %437, align 8, !tbaa !16
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %438, ptr %439, align 8, !tbaa !16
  %440 = call double @z_abs(ptr noundef %64)
  store double %440, ptr %51, align 8, !tbaa !17
  %441 = call double @z_abs(ptr noundef %65)
  store double %441, ptr %52, align 8, !tbaa !17
  %442 = call double @dlapy2_(ptr noundef %51, ptr noundef %52)
  store double %442, ptr %60, align 8, !tbaa !17
  %443 = load double, ptr %60, align 8, !tbaa !17
  %444 = fcmp oeq double %443, 0.000000e+00
  br i1 %444, label %445, label %449

445:                                              ; preds = %363
  %446 = load ptr, ptr %34, align 8, !tbaa !5
  %447 = load i64, ptr %58, align 8, !tbaa !9
  %448 = getelementptr inbounds double, ptr %446, i64 %447
  store double -1.000000e+00, ptr %448, align 8, !tbaa !17
  br label %458

449:                                              ; preds = %363
  %450 = load double, ptr %60, align 8, !tbaa !17
  %451 = load double, ptr %67, align 8, !tbaa !17
  %452 = load double, ptr %63, align 8, !tbaa !17
  %453 = fmul double %451, %452
  %454 = fdiv double %450, %453
  %455 = load ptr, ptr %34, align 8, !tbaa !5
  %456 = load i64, ptr %58, align 8, !tbaa !9
  %457 = getelementptr inbounds double, ptr %455, i64 %456
  store double %454, ptr %457, align 8, !tbaa !17
  br label %458

458:                                              ; preds = %449, %445
  br label %459

459:                                              ; preds = %458, %358
  %460 = load i64, ptr %75, align 8, !tbaa !9
  %461 = icmp ne i64 %460, 0
  br i1 %461, label %462, label %590

462:                                              ; preds = %459
  %463 = load ptr, ptr %25, align 8, !tbaa !5
  %464 = load i64, ptr %463, align 8, !tbaa !9
  %465 = icmp eq i64 %464, 1
  br i1 %465, label %466, label %481

466:                                              ; preds = %462
  %467 = load ptr, ptr %26, align 8, !tbaa !5
  %468 = load i64, ptr %42, align 8, !tbaa !9
  %469 = add nsw i64 %468, 1
  %470 = getelementptr inbounds %struct.doublecomplex, ptr %467, i64 %469
  %471 = call double @z_abs(ptr noundef %470)
  store double %471, ptr %51, align 8, !tbaa !17
  %472 = load ptr, ptr %28, align 8, !tbaa !5
  %473 = load i64, ptr %44, align 8, !tbaa !9
  %474 = add nsw i64 %473, 1
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %472, i64 %474
  %476 = call double @z_abs(ptr noundef %475)
  store double %476, ptr %52, align 8, !tbaa !17
  %477 = call double @dlapy2_(ptr noundef %51, ptr noundef %52)
  %478 = load ptr, ptr %35, align 8, !tbaa !5
  %479 = load i64, ptr %58, align 8, !tbaa !9
  %480 = getelementptr inbounds double, ptr %478, i64 %479
  store double %477, ptr %480, align 8, !tbaa !17
  br label %589

481:                                              ; preds = %462
  %482 = load ptr, ptr %25, align 8, !tbaa !5
  %483 = load ptr, ptr %25, align 8, !tbaa !5
  %484 = load ptr, ptr %26, align 8, !tbaa !5
  %485 = load i64, ptr %43, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %484, i64 %485
  %487 = load ptr, ptr %27, align 8, !tbaa !5
  %488 = load ptr, ptr %38, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.doublecomplex, ptr %488, i64 1
  %490 = load ptr, ptr %25, align 8, !tbaa !5
  %491 = call i32 @zlacpy_(ptr noundef @.str.8, ptr noundef %482, ptr noundef %483, ptr noundef %486, ptr noundef %487, ptr noundef %489, ptr noundef %490)
  %492 = load ptr, ptr %25, align 8, !tbaa !5
  %493 = load ptr, ptr %25, align 8, !tbaa !5
  %494 = load ptr, ptr %28, align 8, !tbaa !5
  %495 = load i64, ptr %45, align 8, !tbaa !9
  %496 = getelementptr inbounds %struct.doublecomplex, ptr %494, i64 %495
  %497 = load ptr, ptr %29, align 8, !tbaa !5
  %498 = load ptr, ptr %38, align 8, !tbaa !5
  %499 = load ptr, ptr %25, align 8, !tbaa !5
  %500 = load i64, ptr %499, align 8, !tbaa !9
  %501 = load ptr, ptr %25, align 8, !tbaa !5
  %502 = load i64, ptr %501, align 8, !tbaa !9
  %503 = mul nsw i64 %500, %502
  %504 = add nsw i64 %503, 1
  %505 = getelementptr inbounds %struct.doublecomplex, ptr %498, i64 %504
  %506 = load ptr, ptr %25, align 8, !tbaa !5
  %507 = call i32 @zlacpy_(ptr noundef @.str.8, ptr noundef %492, ptr noundef %493, ptr noundef %496, ptr noundef %497, ptr noundef %505, ptr noundef %506)
  %508 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %508, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %66, align 8, !tbaa !9
  %509 = load ptr, ptr %25, align 8, !tbaa !5
  %510 = load ptr, ptr %38, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.doublecomplex, ptr %510, i64 1
  %512 = load ptr, ptr %25, align 8, !tbaa !5
  %513 = load ptr, ptr %38, align 8, !tbaa !5
  %514 = load ptr, ptr %25, align 8, !tbaa !5
  %515 = load i64, ptr %514, align 8, !tbaa !9
  %516 = load ptr, ptr %25, align 8, !tbaa !5
  %517 = load i64, ptr %516, align 8, !tbaa !9
  %518 = mul nsw i64 %515, %517
  %519 = add nsw i64 %518, 1
  %520 = getelementptr inbounds %struct.doublecomplex, ptr %513, i64 %519
  %521 = load ptr, ptr %25, align 8, !tbaa !5
  %522 = getelementptr inbounds [1 x %struct.doublecomplex], ptr %71, i64 0, i64 0
  %523 = getelementptr inbounds [1 x %struct.doublecomplex], ptr %72, i64 0, i64 0
  %524 = call i32 @ztgexc_(ptr noundef @c_false, ptr noundef @c_false, ptr noundef %509, ptr noundef %511, ptr noundef %512, ptr noundef %520, ptr noundef %521, ptr noundef %522, ptr noundef @c__1, ptr noundef %523, ptr noundef @c__1, ptr noundef %62, ptr noundef %66, ptr noundef %61)
  %525 = load i64, ptr %61, align 8, !tbaa !9
  %526 = icmp sgt i64 %525, 0
  br i1 %526, label %527, label %531

527:                                              ; preds = %481
  %528 = load ptr, ptr %35, align 8, !tbaa !5
  %529 = load i64, ptr %58, align 8, !tbaa !9
  %530 = getelementptr inbounds double, ptr %528, i64 %529
  store double 0.000000e+00, ptr %530, align 8, !tbaa !17
  br label %588

531:                                              ; preds = %481
  store i64 1, ptr %56, align 8, !tbaa !9
  %532 = load ptr, ptr %25, align 8, !tbaa !5
  %533 = load i64, ptr %532, align 8, !tbaa !9
  %534 = load i64, ptr %56, align 8, !tbaa !9
  %535 = sub nsw i64 %533, %534
  store i64 %535, ptr %57, align 8, !tbaa !9
  %536 = load ptr, ptr %25, align 8, !tbaa !5
  %537 = load i64, ptr %536, align 8, !tbaa !9
  %538 = load ptr, ptr %25, align 8, !tbaa !5
  %539 = load i64, ptr %538, align 8, !tbaa !9
  %540 = mul nsw i64 %537, %539
  %541 = add nsw i64 %540, 1
  store i64 %541, ptr %54, align 8, !tbaa !9
  %542 = load ptr, ptr %38, align 8, !tbaa !5
  %543 = load ptr, ptr %25, align 8, !tbaa !5
  %544 = load i64, ptr %543, align 8, !tbaa !9
  %545 = load i64, ptr %56, align 8, !tbaa !9
  %546 = mul nsw i64 %544, %545
  %547 = load i64, ptr %56, align 8, !tbaa !9
  %548 = add nsw i64 %546, %547
  %549 = add nsw i64 %548, 1
  %550 = getelementptr inbounds %struct.doublecomplex, ptr %542, i64 %549
  %551 = load ptr, ptr %25, align 8, !tbaa !5
  %552 = load ptr, ptr %38, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %552, i64 1
  %554 = load ptr, ptr %25, align 8, !tbaa !5
  %555 = load ptr, ptr %38, align 8, !tbaa !5
  %556 = load i64, ptr %56, align 8, !tbaa !9
  %557 = add nsw i64 %556, 1
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %555, i64 %557
  %559 = load ptr, ptr %25, align 8, !tbaa !5
  %560 = load ptr, ptr %38, align 8, !tbaa !5
  %561 = load ptr, ptr %25, align 8, !tbaa !5
  %562 = load i64, ptr %561, align 8, !tbaa !9
  %563 = load i64, ptr %56, align 8, !tbaa !9
  %564 = mul nsw i64 %562, %563
  %565 = load i64, ptr %56, align 8, !tbaa !9
  %566 = add nsw i64 %564, %565
  %567 = load i64, ptr %54, align 8, !tbaa !9
  %568 = add nsw i64 %566, %567
  %569 = getelementptr inbounds %struct.doublecomplex, ptr %560, i64 %568
  %570 = load ptr, ptr %25, align 8, !tbaa !5
  %571 = load ptr, ptr %38, align 8, !tbaa !5
  %572 = load i64, ptr %54, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct.doublecomplex, ptr %571, i64 %572
  %574 = load ptr, ptr %25, align 8, !tbaa !5
  %575 = load ptr, ptr %38, align 8, !tbaa !5
  %576 = load i64, ptr %56, align 8, !tbaa !9
  %577 = load i64, ptr %54, align 8, !tbaa !9
  %578 = add nsw i64 %576, %577
  %579 = getelementptr inbounds %struct.doublecomplex, ptr %575, i64 %578
  %580 = load ptr, ptr %25, align 8, !tbaa !5
  %581 = load ptr, ptr %35, align 8, !tbaa !5
  %582 = load i64, ptr %58, align 8, !tbaa !9
  %583 = getelementptr inbounds double, ptr %581, i64 %582
  %584 = getelementptr inbounds [1 x %struct.doublecomplex], ptr %71, i64 0, i64 0
  %585 = load ptr, ptr %40, align 8, !tbaa !5
  %586 = getelementptr inbounds i64, ptr %585, i64 1
  %587 = call i32 @ztgsyl_(ptr noundef @.str.7, ptr noundef @c__3, ptr noundef %57, ptr noundef %56, ptr noundef %550, ptr noundef %551, ptr noundef %553, ptr noundef %554, ptr noundef %558, ptr noundef %559, ptr noundef %569, ptr noundef %570, ptr noundef %573, ptr noundef %574, ptr noundef %579, ptr noundef %580, ptr noundef %68, ptr noundef %583, ptr noundef %584, ptr noundef @c__1, ptr noundef %586, ptr noundef %61)
  br label %588

588:                                              ; preds = %531, %527
  br label %589

589:                                              ; preds = %588, %466
  br label %590

590:                                              ; preds = %589, %459
  br label %591

591:                                              ; preds = %590, %356
  br label %592

592:                                              ; preds = %591
  %593 = load i64, ptr %55, align 8, !tbaa !9
  %594 = add nsw i64 %593, 1
  store i64 %594, ptr %55, align 8, !tbaa !9
  br label %343, !llvm.loop !18

595:                                              ; preds = %343
  %596 = load i64, ptr %69, align 8, !tbaa !9
  %597 = sitofp i64 %596 to double
  %598 = load ptr, ptr %38, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.doublecomplex, ptr %598, i64 1
  %600 = getelementptr inbounds %struct.doublecomplex, ptr %599, i32 0, i32 0
  store double %597, ptr %600, align 8, !tbaa !13
  %601 = load ptr, ptr %38, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.doublecomplex, ptr %601, i64 1
  %603 = getelementptr inbounds %struct.doublecomplex, ptr %602, i32 0, i32 1
  store double 0.000000e+00, ptr %603, align 8, !tbaa !16
  store i32 0, ptr %21, align 4
  store i32 1, ptr %79, align 4
  br label %604

604:                                              ; preds = %595, %332, %326, %318
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  %605 = load i32, ptr %21, align 4
  ret i32 %605
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

declare double @z_abs(ptr noundef) #2

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !15, i64 0}
!14 = !{!"", !15, i64 0, !15, i64 8}
!15 = !{!"double", !7, i64 0}
!16 = !{!14, !15, i64 8}
!17 = !{!15, !15, i64 0}
!18 = distinct !{!18, !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
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b19 = external hidden global %struct.doublecomplex, align 8
@c_b20 = external hidden global %struct.doublecomplex, align 8
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@c_false = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8

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

55:                                               ; preds = %20
  %56 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #4
  %57 = icmp ne i64 %56, 0
  %58 = icmp ne i64 %52, 0
  %or.cond3 = select i1 %57, i1 true, i1 %58
  br i1 %or.cond3, label %59, label %.thread.sink.split

59:                                               ; preds = %55
  %60 = load i64, ptr %3, align 8, !tbaa !5
  %61 = icmp slt i64 %60, 0
  br i1 %61, label %.thread.sink.split, label %62

62:                                               ; preds = %59
  %63 = load i64, ptr %5, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %60, i64 1)
  %64 = icmp slt i64 %63, %spec.select
  br i1 %64, label %.thread.sink.split, label %65

65:                                               ; preds = %62
  %66 = load i64, ptr %7, align 8, !tbaa !5
  %67 = icmp slt i64 %66, %spec.select
  br i1 %67, label %.thread.sink.split, label %68

68:                                               ; preds = %65
  br i1 %48, label %69, label %.critedge

69:                                               ; preds = %68
  %70 = load i64, ptr %9, align 8, !tbaa !5
  %71 = icmp slt i64 %70, %60
  br i1 %71, label %.thread.sink.split, label %72

72:                                               ; preds = %69
  %73 = load i64, ptr %11, align 8, !tbaa !5
  %74 = icmp slt i64 %73, %60
  br i1 %74, label %.thread.sink.split, label %.critedge

.critedge:                                        ; preds = %68, %72
  br i1 %58, label %75, label %91

75:                                               ; preds = %.critedge
  store i64 0, ptr %15, align 8, !tbaa !5
  %76 = load i64, ptr %3, align 8, !tbaa !5
  store i64 %76, ptr %21, align 8, !tbaa !5
  %.not219 = icmp slt i64 %76, 1
  br i1 %.not219, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %75
  %xtraiter = and i64 %76, 1
  %77 = icmp eq i64 %76, 1
  br i1 %77, label %.loopexitthread-pre-split.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph:                                           ; preds = %88, %.lr.ph.preheader.new
  %78 = phi i64 [ 0, %.lr.ph.preheader.new ], [ %89, %88 ]
  %.0204220 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %90, %88 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %88 ]
  %79 = getelementptr inbounds i64, ptr %37, i64 %.0204220
  %80 = load i64, ptr %79, align 8, !tbaa !5
  %.not211 = icmp eq i64 %80, 0
  br i1 %.not211, label %.lr.ph.1, label %81

81:                                               ; preds = %.lr.ph
  %82 = add nsw i64 %78, 1
  store i64 %82, ptr %15, align 8, !tbaa !5
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph, %81
  %83 = phi i64 [ %78, %.lr.ph ], [ %82, %81 ]
  %84 = getelementptr i64, ptr %2, i64 %.0204220
  %85 = load i64, ptr %84, align 8, !tbaa !5
  %.not211.1 = icmp eq i64 %85, 0
  br i1 %.not211.1, label %88, label %86

86:                                               ; preds = %.lr.ph.1
  %87 = add nsw i64 %83, 1
  store i64 %87, ptr %15, align 8, !tbaa !5
  br label %88

88:                                               ; preds = %86, %.lr.ph.1
  %89 = phi i64 [ %83, %.lr.ph.1 ], [ %87, %86 ]
  %90 = add nuw i64 %.0204220, 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 %.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit, label %.lr.ph, !llvm.loop !9

91:                                               ; preds = %.critedge
  store i64 %60, ptr %15, align 8, !tbaa !5
  br label %.loopexitthread-pre-split

.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit: ; preds = %88
  %92 = add nsw i64 %89, 1
  br label %.loopexitthread-pre-split.loopexit.unr-lcssa

.loopexitthread-pre-split.loopexit.unr-lcssa:     ; preds = %.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit, %.lr.ph.preheader
  %.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %92, %.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit ]
  %.0204220.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %90, %.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexitthread-pre-split, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.loopexitthread-pre-split.loopexit.unr-lcssa
  %93 = getelementptr inbounds i64, ptr %37, i64 %.0204220.unr
  %94 = load i64, ptr %93, align 8, !tbaa !5
  %.not211.epil = icmp eq i64 %94, 0
  br i1 %.not211.epil, label %.loopexitthread-pre-split, label %95

95:                                               ; preds = %.lr.ph.epil
  store i64 %.unr, ptr %15, align 8, !tbaa !5
  br label %.loopexitthread-pre-split

.loopexitthread-pre-split:                        ; preds = %.loopexitthread-pre-split.loopexit.unr-lcssa, %95, %.lr.ph.epil, %91
  %.pr231 = load i64, ptr %3, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexitthread-pre-split, %75
  %96 = phi i64 [ %.pr231, %.loopexitthread-pre-split ], [ %76, %75 ]
  %97 = icmp eq i64 %96, 0
  br i1 %97, label %108, label %98

98:                                               ; preds = %.loopexit
  %99 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not209 = icmp eq i64 %99, 0
  br i1 %.not209, label %100, label %102

100:                                              ; preds = %98
  %101 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %.not210 = icmp eq i64 %101, 0
  br i1 %.not210, label %106, label %102

102:                                              ; preds = %100, %98
  %103 = load i64, ptr %3, align 8, !tbaa !5
  %104 = shl i64 %103, 1
  %105 = mul nsw i64 %104, %103
  br label %108

106:                                              ; preds = %100
  %107 = load i64, ptr %3, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %.loopexit, %102, %106
  %109 = phi i64 [ %103, %102 ], [ %107, %106 ], [ 0, %.loopexit ]
  %.0201 = phi i64 [ %105, %102 ], [ %107, %106 ], [ 1, %.loopexit ]
  %110 = sitofp i64 %.0201 to double
  store double %110, ptr %16, align 8, !tbaa !11
  %111 = getelementptr inbounds i8, ptr %16, i64 8
  store double 0.000000e+00, ptr %111, align 8, !tbaa !14
  %112 = load i64, ptr %14, align 8, !tbaa !5
  %113 = load i64, ptr %15, align 8, !tbaa !5
  %114 = icmp slt i64 %112, %113
  br i1 %114, label %.thread.sink.split, label %115

115:                                              ; preds = %108
  %116 = load i64, ptr %17, align 8, !tbaa !5
  %117 = icmp sge i64 %116, %.0201
  %or.cond5 = select i1 %117, i1 true, i1 %54
  br i1 %or.cond5, label %118, label %.thread.sink.split

118:                                              ; preds = %115
  %.pr = load i64, ptr %19, align 8, !tbaa !5
  %.not212 = icmp eq i64 %.pr, 0
  br i1 %.not212, label %122, label %.thread

.thread.sink.split:                               ; preds = %115, %108, %72, %69, %65, %62, %59, %55, %20
  %.sink = phi i64 [ -1, %20 ], [ -2, %55 ], [ -4, %59 ], [ -6, %62 ], [ -8, %65 ], [ -10, %69 ], [ -12, %72 ], [ -15, %108 ], [ -18, %115 ]
  store i64 %.sink, ptr %19, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %118
  %119 = phi i64 [ %.pr, %118 ], [ %.sink, %.thread.sink.split ]
  %120 = sub nsw i64 0, %119
  store i64 %120, ptr %21, align 8, !tbaa !5
  %121 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %21) #4
  br label %187

122:                                              ; preds = %118
  %123 = icmp eq i64 %109, 0
  %or.cond232 = select i1 %54, i1 true, i1 %123
  br i1 %or.cond232, label %187, label %124

124:                                              ; preds = %122
  %125 = tail call double @dlamch_(ptr noundef nonnull @.str.6) #4
  %126 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #4
  %127 = fdiv double %126, %125
  store double %127, ptr %36, align 8, !tbaa !15
  %128 = fdiv double 1.000000e+00, %127
  store double %128, ptr %35, align 8, !tbaa !15
  %129 = call i32 @dlabad_(ptr noundef nonnull %36, ptr noundef nonnull %35) #4
  %130 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %43, i64 16
  %invariant.gep221 = getelementptr i8, ptr %40, i64 16
  %invariant.gep223 = getelementptr i8, ptr %16, i64 16
  %.not213227 = icmp slt i64 %130, 1
  br i1 %.not213227, label %._crit_edge, label %.lr.ph230

.lr.ph230:                                        ; preds = %124
  %.not214 = icmp eq i64 %52, 0
  br label %131

131:                                              ; preds = %.lr.ph230, %185
  %.0202229 = phi i64 [ 0, %.lr.ph230 ], [ %.1203, %185 ]
  %.1205228 = phi i64 [ 1, %.lr.ph230 ], [ %186, %185 ]
  br i1 %.not214, label %135, label %132

132:                                              ; preds = %131
  %133 = getelementptr inbounds i64, ptr %37, i64 %.1205228
  %134 = load i64, ptr %133, align 8, !tbaa !5
  %.not215 = icmp eq i64 %134, 0
  br i1 %.not215, label %185, label %135

135:                                              ; preds = %132, %131
  %136 = add nsw i64 %.0202229, 1
  br i1 %48, label %.sink.split, label %152

.sink.split:                                      ; preds = %135
  %137 = mul nsw i64 %136, %41
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %137
  %138 = call double @f2c_dznrm2(ptr noundef nonnull %3, ptr noundef %gep, ptr noundef nonnull @c__1) #4
  %139 = mul nsw i64 %136, %38
  %gep222 = getelementptr %struct.doublecomplex, ptr %invariant.gep221, i64 %139
  %140 = call double @f2c_dznrm2(ptr noundef nonnull %3, ptr noundef %gep222, ptr noundef nonnull @c__1) #4
  %141 = call i32 @f2c_zgemv(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b20, ptr noundef nonnull %16, ptr noundef nonnull @c__1) #4
  call void @f2c_zdotc(ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull @c__1, ptr noundef %gep222, ptr noundef nonnull @c__1) #4
  %142 = load <2 x double>, ptr %24, align 16, !tbaa !15
  store <2 x double> %142, ptr %29, align 16, !tbaa !15
  %143 = call i32 @f2c_zgemv(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b20, ptr noundef nonnull %16, ptr noundef nonnull @c__1) #4
  call void @f2c_zdotc(ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull @c__1, ptr noundef %gep222, ptr noundef nonnull @c__1) #4
  %144 = load <2 x double>, ptr %24, align 16, !tbaa !15
  store <2 x double> %144, ptr %30, align 16, !tbaa !15
  %145 = call double @z_abs(ptr noundef nonnull %29) #4
  store double %145, ptr %22, align 8, !tbaa !15
  %146 = call double @z_abs(ptr noundef nonnull %30) #4
  store double %146, ptr %23, align 8, !tbaa !15
  %147 = call double @dlapy2_(ptr noundef nonnull %22, ptr noundef nonnull %23) #4
  %148 = fcmp oeq double %147, 0.000000e+00
  %149 = fmul double %138, %140
  %150 = fdiv double %147, %149
  %.sink233 = select i1 %148, double -1.000000e+00, double %150
  %151 = getelementptr double, ptr %12, i64 %.0202229
  store double %.sink233, ptr %151, align 8, !tbaa !15
  br label %152

152:                                              ; preds = %.sink.split, %135
  br i1 %51, label %153, label %185

153:                                              ; preds = %152
  %154 = load i64, ptr %3, align 8, !tbaa !5
  %155 = icmp eq i64 %154, 1
  br i1 %155, label %156, label %161

156:                                              ; preds = %153
  %157 = call double @z_abs(ptr noundef %4) #4
  store double %157, ptr %22, align 8, !tbaa !15
  %158 = call double @z_abs(ptr noundef %6) #4
  store double %158, ptr %23, align 8, !tbaa !15
  %159 = call double @dlapy2_(ptr noundef nonnull %22, ptr noundef nonnull %23) #4
  %160 = getelementptr double, ptr %13, i64 %.0202229
  store double %159, ptr %160, align 8, !tbaa !15
  br label %185

161:                                              ; preds = %153
  %162 = call i32 @zlacpy_(ptr noundef nonnull @.str.8, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %16, ptr noundef nonnull %3) #4
  %163 = load i64, ptr %3, align 8, !tbaa !5
  %164 = mul nsw i64 %163, %163
  %165 = getelementptr %struct.doublecomplex, ptr %16, i64 %164
  %166 = call i32 @zlacpy_(ptr noundef nonnull @.str.8, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %165, ptr noundef nonnull %3) #4
  store i64 %.1205228, ptr %28, align 8, !tbaa !5
  store i64 1, ptr %31, align 8, !tbaa !5
  %167 = load i64, ptr %3, align 8, !tbaa !5
  %168 = mul nsw i64 %167, %167
  %169 = getelementptr %struct.doublecomplex, ptr %16, i64 %168
  %170 = call i32 @ztgexc_(ptr noundef nonnull @c_false, ptr noundef nonnull @c_false, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull %3, ptr noundef %169, ptr noundef nonnull %3, ptr noundef nonnull %33, ptr noundef nonnull @c__1, ptr noundef nonnull %34, ptr noundef nonnull @c__1, ptr noundef nonnull %28, ptr noundef nonnull %31, ptr noundef nonnull %27) #4
  %171 = load i64, ptr %27, align 8, !tbaa !5
  %172 = icmp sgt i64 %171, 0
  br i1 %172, label %173, label %175

173:                                              ; preds = %161
  %174 = getelementptr double, ptr %13, i64 %.0202229
  store double 0.000000e+00, ptr %174, align 8, !tbaa !15
  br label %185

175:                                              ; preds = %161
  store i64 1, ptr %25, align 8, !tbaa !5
  %176 = load i64, ptr %3, align 8, !tbaa !5
  %177 = add nsw i64 %176, -1
  store i64 %177, ptr %26, align 8, !tbaa !5
  %178 = mul nsw i64 %176, %176
  %gep224 = getelementptr %struct.doublecomplex, ptr %invariant.gep223, i64 %176
  %179 = getelementptr %struct.doublecomplex, ptr %16, i64 %176
  %180 = getelementptr %struct.doublecomplex, ptr %179, i64 %178
  %181 = getelementptr i8, ptr %180, i64 16
  %182 = getelementptr %struct.doublecomplex, ptr %16, i64 %178
  %gep226 = getelementptr inbounds %struct.doublecomplex, ptr %invariant.gep223, i64 %178
  %183 = getelementptr double, ptr %13, i64 %.0202229
  %184 = call i32 @ztgsyl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__3, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef %gep224, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull %3, ptr noundef nonnull %invariant.gep223, ptr noundef nonnull %3, ptr noundef %181, ptr noundef nonnull %3, ptr noundef %182, ptr noundef nonnull %3, ptr noundef nonnull %gep226, ptr noundef nonnull %3, ptr noundef nonnull %32, ptr noundef %183, ptr noundef nonnull %33, ptr noundef nonnull @c__1, ptr noundef %18, ptr noundef nonnull %27) #4
  br label %185

185:                                              ; preds = %132, %156, %175, %173, %152
  %.1203 = phi i64 [ %136, %156 ], [ %136, %173 ], [ %136, %175 ], [ %136, %152 ], [ %.0202229, %132 ]
  %186 = add nuw nsw i64 %.1205228, 1
  %.not213.not = icmp slt i64 %.1205228, %130
  br i1 %.not213.not, label %131, label %._crit_edge, !llvm.loop !16

._crit_edge:                                      ; preds = %185, %124
  store double %110, ptr %16, align 8, !tbaa !11
  store double 0.000000e+00, ptr %111, align 8, !tbaa !14
  br label %187

187:                                              ; preds = %122, %._crit_edge, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #4
  ret i32 0
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

declare i32 @f2c_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 @f2c_zdotc(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare double @z_abs(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

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


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