; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (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 i32, align 4
@.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 i32, align 4
@c__3 = external hidden global i32, align 4

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

138:                                              ; preds = %20
  %139 = load i32, ptr %72, align 4, !tbaa !9
  %140 = icmp ne i32 %139, 0
  br label %141

141:                                              ; preds = %138, %20
  %142 = phi i1 [ true, %20 ], [ %140, %138 ]
  %143 = zext i1 %142 to i32
  store i32 %143, ptr %65, align 4, !tbaa !9
  %144 = load ptr, ptr %21, align 8, !tbaa !5
  %145 = call i32 @lsame_(ptr noundef %144, ptr noundef @.str.2)
  %146 = icmp ne i32 %145, 0
  br i1 %146, label %150, label %147

147:                                              ; preds = %141
  %148 = load i32, ptr %72, align 4, !tbaa !9
  %149 = icmp ne i32 %148, 0
  br label %150

150:                                              ; preds = %147, %141
  %151 = phi i1 [ true, %141 ], [ %149, %147 ]
  %152 = zext i1 %151 to i32
  store i32 %152, ptr %73, align 4, !tbaa !9
  %153 = load ptr, ptr %22, align 8, !tbaa !5
  %154 = call i32 @lsame_(ptr noundef %153, ptr noundef @.str.3)
  store i32 %154, ptr %74, align 4, !tbaa !9
  %155 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 0, ptr %155, align 4, !tbaa !9
  %156 = load ptr, ptr %38, align 8, !tbaa !5
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = icmp eq i32 %157, -1
  %159 = zext i1 %158 to i32
  store i32 %159, ptr %76, align 4, !tbaa !9
  %160 = load i32, ptr %65, align 4, !tbaa !9
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %167, label %162

162:                                              ; preds = %150
  %163 = load i32, ptr %73, align 4, !tbaa !9
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %167, label %165

165:                                              ; preds = %162
  %166 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -1, ptr %166, align 4, !tbaa !9
  br label %323

167:                                              ; preds = %162, %150
  %168 = load ptr, ptr %22, align 8, !tbaa !5
  %169 = call i32 @lsame_(ptr noundef %168, ptr noundef @.str.4)
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %176, label %171

171:                                              ; preds = %167
  %172 = load i32, ptr %74, align 4, !tbaa !9
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %176, label %174

174:                                              ; preds = %171
  %175 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -2, ptr %175, align 4, !tbaa !9
  br label %322

176:                                              ; preds = %171, %167
  %177 = load ptr, ptr %24, align 8, !tbaa !5
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = icmp slt i32 %178, 0
  br i1 %179, label %180, label %182

180:                                              ; preds = %176
  %181 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -4, ptr %181, align 4, !tbaa !9
  br label %321

182:                                              ; preds = %176
  %183 = load ptr, ptr %26, align 8, !tbaa !5
  %184 = load i32, ptr %183, align 4, !tbaa !9
  %185 = load ptr, ptr %24, align 8, !tbaa !5
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp sge i32 1, %186
  br i1 %187, label %188, label %189

188:                                              ; preds = %182
  br label %192

189:                                              ; preds = %182
  %190 = load ptr, ptr %24, align 8, !tbaa !5
  %191 = load i32, ptr %190, align 4, !tbaa !9
  br label %192

192:                                              ; preds = %189, %188
  %193 = phi i32 [ 1, %188 ], [ %191, %189 ]
  %194 = icmp slt i32 %184, %193
  br i1 %194, label %195, label %197

195:                                              ; preds = %192
  %196 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -6, ptr %196, align 4, !tbaa !9
  br label %320

197:                                              ; preds = %192
  %198 = load ptr, ptr %28, align 8, !tbaa !5
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = load ptr, ptr %24, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = icmp sge i32 1, %201
  br i1 %202, label %203, label %204

203:                                              ; preds = %197
  br label %207

204:                                              ; preds = %197
  %205 = load ptr, ptr %24, align 8, !tbaa !5
  %206 = load i32, ptr %205, align 4, !tbaa !9
  br label %207

207:                                              ; preds = %204, %203
  %208 = phi i32 [ 1, %203 ], [ %206, %204 ]
  %209 = icmp slt i32 %199, %208
  br i1 %209, label %210, label %212

210:                                              ; preds = %207
  %211 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -8, ptr %211, align 4, !tbaa !9
  br label %319

212:                                              ; preds = %207
  %213 = load i32, ptr %65, align 4, !tbaa !9
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %223

215:                                              ; preds = %212
  %216 = load ptr, ptr %30, align 8, !tbaa !5
  %217 = load i32, ptr %216, align 4, !tbaa !9
  %218 = load ptr, ptr %24, align 8, !tbaa !5
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = icmp slt i32 %217, %219
  br i1 %220, label %221, label %223

221:                                              ; preds = %215
  %222 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -10, ptr %222, align 4, !tbaa !9
  br label %318

223:                                              ; preds = %215, %212
  %224 = load i32, ptr %65, align 4, !tbaa !9
  %225 = icmp ne i32 %224, 0
  br i1 %225, label %226, label %234

226:                                              ; preds = %223
  %227 = load ptr, ptr %32, align 8, !tbaa !5
  %228 = load i32, ptr %227, align 4, !tbaa !9
  %229 = load ptr, ptr %24, align 8, !tbaa !5
  %230 = load i32, ptr %229, align 4, !tbaa !9
  %231 = icmp slt i32 %228, %230
  br i1 %231, label %232, label %234

232:                                              ; preds = %226
  %233 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -12, ptr %233, align 4, !tbaa !9
  br label %317

234:                                              ; preds = %226, %223
  %235 = load i32, ptr %74, align 4, !tbaa !9
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %237, label %261

237:                                              ; preds = %234
  %238 = load ptr, ptr %36, align 8, !tbaa !5
  store i32 0, ptr %238, align 4, !tbaa !9
  %239 = load ptr, ptr %24, align 8, !tbaa !5
  %240 = load i32, ptr %239, align 4, !tbaa !9
  store i32 %240, ptr %49, align 4, !tbaa !9
  store i32 1, ptr %62, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %257, %237
  %242 = load i32, ptr %62, align 4, !tbaa !9
  %243 = load i32, ptr %49, align 4, !tbaa !9
  %244 = icmp sle i32 %242, %243
  br i1 %244, label %245, label %260

245:                                              ; preds = %241
  %246 = load ptr, ptr %23, align 8, !tbaa !5
  %247 = load i32, ptr %62, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds i32, ptr %246, i64 %248
  %250 = load i32, ptr %249, align 4, !tbaa !9
  %251 = icmp ne i32 %250, 0
  br i1 %251, label %252, label %256

252:                                              ; preds = %245
  %253 = load ptr, ptr %36, align 8, !tbaa !5
  %254 = load i32, ptr %253, align 4, !tbaa !9
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %253, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %252, %245
  br label %257

257:                                              ; preds = %256
  %258 = load i32, ptr %62, align 4, !tbaa !9
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %62, align 4, !tbaa !9
  br label %241, !llvm.loop !11

260:                                              ; preds = %241
  br label %265

261:                                              ; preds = %234
  %262 = load ptr, ptr %24, align 8, !tbaa !5
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = load ptr, ptr %36, align 8, !tbaa !5
  store i32 %263, ptr %264, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %261, %260
  %266 = load ptr, ptr %24, align 8, !tbaa !5
  %267 = load i32, ptr %266, align 4, !tbaa !9
  %268 = icmp eq i32 %267, 0
  br i1 %268, label %269, label %270

269:                                              ; preds = %265
  store i32 1, ptr %64, align 4, !tbaa !9
  br label %289

270:                                              ; preds = %265
  %271 = load ptr, ptr %21, align 8, !tbaa !5
  %272 = call i32 @lsame_(ptr noundef %271, ptr noundef @.str.2)
  %273 = icmp ne i32 %272, 0
  br i1 %273, label %278, label %274

274:                                              ; preds = %270
  %275 = load ptr, ptr %21, align 8, !tbaa !5
  %276 = call i32 @lsame_(ptr noundef %275, ptr noundef @.str)
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %285

278:                                              ; preds = %274, %270
  %279 = load ptr, ptr %24, align 8, !tbaa !5
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = shl i32 %280, 1
  %282 = load ptr, ptr %24, align 8, !tbaa !5
  %283 = load i32, ptr %282, align 4, !tbaa !9
  %284 = mul nsw i32 %281, %283
  store i32 %284, ptr %64, align 4, !tbaa !9
  br label %288

285:                                              ; preds = %274
  %286 = load ptr, ptr %24, align 8, !tbaa !5
  %287 = load i32, ptr %286, align 4, !tbaa !9
  store i32 %287, ptr %64, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %285, %278
  br label %289

289:                                              ; preds = %288, %269
  %290 = load i32, ptr %64, align 4, !tbaa !9
  %291 = sitofp i32 %290 to double
  %292 = load ptr, ptr %37, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %292, i64 1
  %294 = getelementptr inbounds %struct.doublecomplex, ptr %293, i32 0, i32 0
  store double %291, ptr %294, align 8, !tbaa !13
  %295 = load ptr, ptr %37, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.doublecomplex, ptr %295, i64 1
  %297 = getelementptr inbounds %struct.doublecomplex, ptr %296, i32 0, i32 1
  store double 0.000000e+00, ptr %297, align 8, !tbaa !16
  %298 = load ptr, ptr %35, align 8, !tbaa !5
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = load ptr, ptr %36, align 8, !tbaa !5
  %301 = load i32, ptr %300, align 4, !tbaa !9
  %302 = icmp slt i32 %299, %301
  br i1 %302, label %303, label %305

303:                                              ; preds = %289
  %304 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -15, ptr %304, align 4, !tbaa !9
  br label %316

305:                                              ; preds = %289
  %306 = load ptr, ptr %38, align 8, !tbaa !5
  %307 = load i32, ptr %306, align 4, !tbaa !9
  %308 = load i32, ptr %64, align 4, !tbaa !9
  %309 = icmp slt i32 %307, %308
  br i1 %309, label %310, label %315

310:                                              ; preds = %305
  %311 = load i32, ptr %76, align 4, !tbaa !9
  %312 = icmp ne i32 %311, 0
  br i1 %312, label %315, label %313

313:                                              ; preds = %310
  %314 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -18, ptr %314, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %313, %310, %305
  br label %316

316:                                              ; preds = %315, %303
  br label %317

317:                                              ; preds = %316, %232
  br label %318

318:                                              ; preds = %317, %221
  br label %319

319:                                              ; preds = %318, %210
  br label %320

320:                                              ; preds = %319, %195
  br label %321

321:                                              ; preds = %320, %180
  br label %322

322:                                              ; preds = %321, %174
  br label %323

323:                                              ; preds = %322, %165
  %324 = load ptr, ptr %40, align 8, !tbaa !5
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %327, label %332

327:                                              ; preds = %323
  %328 = load ptr, ptr %40, align 8, !tbaa !5
  %329 = load i32, ptr %328, align 4, !tbaa !9
  %330 = sub nsw i32 0, %329
  store i32 %330, ptr %49, align 4, !tbaa !9
  %331 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %49, i32 noundef 6)
  store i32 1, ptr %78, align 4
  br label %667

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

335:                                              ; preds = %332
  store i32 1, ptr %78, align 4
  br label %667

336:                                              ; preds = %332
  br label %337

337:                                              ; preds = %336
  %338 = load ptr, ptr %24, align 8, !tbaa !5
  %339 = load i32, ptr %338, align 4, !tbaa !9
  %340 = icmp eq i32 %339, 0
  br i1 %340, label %341, label %342

341:                                              ; preds = %337
  store i32 1, ptr %78, align 4
  br label %667

342:                                              ; preds = %337
  %343 = call double @dlamch_(ptr noundef @.str.6)
  store double %343, ptr %77, align 8, !tbaa !17
  %344 = call double @dlamch_(ptr noundef @.str.3)
  %345 = load double, ptr %77, align 8, !tbaa !17
  %346 = fdiv double %344, %345
  store double %346, ptr %75, align 8, !tbaa !17
  %347 = load double, ptr %75, align 8, !tbaa !17
  %348 = fdiv double 1.000000e+00, %347
  store double %348, ptr %71, align 8, !tbaa !17
  call void @dlabad_(ptr noundef %75, ptr noundef %71)
  store i32 0, ptr %70, align 4, !tbaa !9
  %349 = load ptr, ptr %24, align 8, !tbaa !5
  %350 = load i32, ptr %349, align 4, !tbaa !9
  store i32 %350, ptr %49, align 4, !tbaa !9
  store i32 1, ptr %62, align 4, !tbaa !9
  br label %351

351:                                              ; preds = %655, %342
  %352 = load i32, ptr %62, align 4, !tbaa !9
  %353 = load i32, ptr %49, align 4, !tbaa !9
  %354 = icmp sle i32 %352, %353
  br i1 %354, label %355, label %658

355:                                              ; preds = %351
  %356 = load i32, ptr %74, align 4, !tbaa !9
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %358, label %367

358:                                              ; preds = %355
  %359 = load ptr, ptr %23, align 8, !tbaa !5
  %360 = load i32, ptr %62, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %359, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = icmp ne i32 %363, 0
  br i1 %364, label %366, label %365

365:                                              ; preds = %358
  br label %654

366:                                              ; preds = %358
  br label %367

367:                                              ; preds = %366, %355
  %368 = load i32, ptr %70, align 4, !tbaa !9
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %70, align 4, !tbaa !9
  %370 = load i32, ptr %65, align 4, !tbaa !9
  %371 = icmp ne i32 %370, 0
  br i1 %371, label %372, label %494

372:                                              ; preds = %367
  %373 = load ptr, ptr %24, align 8, !tbaa !5
  %374 = load ptr, ptr %31, align 8, !tbaa !5
  %375 = load i32, ptr %70, align 4, !tbaa !9
  %376 = load i32, ptr %47, align 4, !tbaa !9
  %377 = mul nsw i32 %375, %376
  %378 = add nsw i32 %377, 1
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %374, i64 %379
  %381 = call double @dznrm2_(ptr noundef %373, ptr noundef %380, ptr noundef @c__1)
  store double %381, ptr %60, align 8, !tbaa !17
  %382 = load ptr, ptr %24, align 8, !tbaa !5
  %383 = load ptr, ptr %29, align 8, !tbaa !5
  %384 = load i32, ptr %70, align 4, !tbaa !9
  %385 = load i32, ptr %45, align 4, !tbaa !9
  %386 = mul nsw i32 %384, %385
  %387 = add nsw i32 %386, 1
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds %struct.doublecomplex, ptr %383, i64 %388
  %390 = call double @dznrm2_(ptr noundef %382, ptr noundef %389, ptr noundef @c__1)
  store double %390, ptr %56, align 8, !tbaa !17
  %391 = load ptr, ptr %24, align 8, !tbaa !5
  %392 = load ptr, ptr %24, align 8, !tbaa !5
  %393 = load ptr, ptr %25, align 8, !tbaa !5
  %394 = load i32, ptr %42, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds %struct.doublecomplex, ptr %393, i64 %395
  %397 = load ptr, ptr %26, align 8, !tbaa !5
  %398 = load ptr, ptr %31, align 8, !tbaa !5
  %399 = load i32, ptr %70, align 4, !tbaa !9
  %400 = load i32, ptr %47, align 4, !tbaa !9
  %401 = mul nsw i32 %399, %400
  %402 = add nsw i32 %401, 1
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %398, i64 %403
  %405 = load ptr, ptr %37, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.doublecomplex, ptr %405, i64 1
  call void @zgemv_(ptr noundef @.str.7, ptr noundef %391, ptr noundef %392, ptr noundef @c_b19, ptr noundef %396, ptr noundef %397, ptr noundef %404, ptr noundef @c__1, ptr noundef @c_b20, ptr noundef %406, ptr noundef @c__1)
  %407 = load ptr, ptr %24, align 8, !tbaa !5
  %408 = load ptr, ptr %37, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %408, i64 1
  %410 = load ptr, ptr %29, align 8, !tbaa !5
  %411 = load i32, ptr %70, align 4, !tbaa !9
  %412 = load i32, ptr %45, align 4, !tbaa !9
  %413 = mul nsw i32 %411, %412
  %414 = add nsw i32 %413, 1
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds %struct.doublecomplex, ptr %410, i64 %415
  call void @zdotc_(ptr noundef %52, ptr noundef %407, ptr noundef %409, ptr noundef @c__1, ptr noundef %416, ptr noundef @c__1)
  %417 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %418 = load double, ptr %417, align 8, !tbaa !13
  %419 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %418, ptr %419, align 8, !tbaa !13
  %420 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %421 = load double, ptr %420, align 8, !tbaa !16
  %422 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %421, ptr %422, align 8, !tbaa !16
  %423 = load ptr, ptr %24, align 8, !tbaa !5
  %424 = load ptr, ptr %24, align 8, !tbaa !5
  %425 = load ptr, ptr %27, align 8, !tbaa !5
  %426 = load i32, ptr %44, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds %struct.doublecomplex, ptr %425, i64 %427
  %429 = load ptr, ptr %28, align 8, !tbaa !5
  %430 = load ptr, ptr %31, align 8, !tbaa !5
  %431 = load i32, ptr %70, align 4, !tbaa !9
  %432 = load i32, ptr %47, align 4, !tbaa !9
  %433 = mul nsw i32 %431, %432
  %434 = add nsw i32 %433, 1
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %430, i64 %435
  %437 = load ptr, ptr %37, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.doublecomplex, ptr %437, i64 1
  call void @zgemv_(ptr noundef @.str.7, ptr noundef %423, ptr noundef %424, ptr noundef @c_b19, ptr noundef %428, ptr noundef %429, ptr noundef %436, ptr noundef @c__1, ptr noundef @c_b20, ptr noundef %438, ptr noundef @c__1)
  %439 = load ptr, ptr %24, align 8, !tbaa !5
  %440 = load ptr, ptr %37, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.doublecomplex, ptr %440, i64 1
  %442 = load ptr, ptr %29, align 8, !tbaa !5
  %443 = load i32, ptr %70, align 4, !tbaa !9
  %444 = load i32, ptr %45, align 4, !tbaa !9
  %445 = mul nsw i32 %443, %444
  %446 = add nsw i32 %445, 1
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds %struct.doublecomplex, ptr %442, i64 %447
  call void @zdotc_(ptr noundef %52, ptr noundef %439, ptr noundef %441, ptr noundef @c__1, ptr noundef %448, ptr noundef @c__1)
  %449 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %450 = load double, ptr %449, align 8, !tbaa !13
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  store double %450, ptr %451, align 8, !tbaa !13
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %453 = load double, ptr %452, align 8, !tbaa !16
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  store double %453, ptr %454, align 8, !tbaa !16
  %455 = call { double, double } @Cd(ptr noundef %57)
  %456 = extractvalue { double, double } %455, 0
  %457 = extractvalue { double, double } %455, 1
  %458 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %459 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  store double %456, ptr %458, align 8
  store double %457, ptr %459, align 8
  %460 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %461 = load double, ptr %460, align 8
  %462 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  %463 = load double, ptr %462, align 8
  %464 = call double @cabs(double noundef %461, double noundef %463) #5
  store double %464, ptr %50, align 8, !tbaa !17
  %465 = call { double, double } @Cd(ptr noundef %58)
  %466 = extractvalue { double, double } %465, 0
  %467 = extractvalue { double, double } %465, 1
  %468 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 0
  %469 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 1
  store double %466, ptr %468, align 8
  store double %467, ptr %469, align 8
  %470 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 0
  %471 = load double, ptr %470, align 8
  %472 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 1
  %473 = load double, ptr %472, align 8
  %474 = call double @cabs(double noundef %471, double noundef %473) #5
  store double %474, ptr %51, align 8, !tbaa !17
  %475 = call double @dlapy2_(ptr noundef %50, ptr noundef %51)
  store double %475, ptr %53, align 8, !tbaa !17
  %476 = load double, ptr %53, align 8, !tbaa !17
  %477 = fcmp oeq double %476, 0.000000e+00
  br i1 %477, label %478, label %483

478:                                              ; preds = %372
  %479 = load ptr, ptr %33, align 8, !tbaa !5
  %480 = load i32, ptr %70, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %479, i64 %481
  store double -1.000000e+00, ptr %482, align 8, !tbaa !17
  br label %493

483:                                              ; preds = %372
  %484 = load double, ptr %53, align 8, !tbaa !17
  %485 = load double, ptr %60, align 8, !tbaa !17
  %486 = load double, ptr %56, align 8, !tbaa !17
  %487 = fmul double %485, %486
  %488 = fdiv double %484, %487
  %489 = load ptr, ptr %33, align 8, !tbaa !5
  %490 = load i32, ptr %70, align 4, !tbaa !9
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds double, ptr %489, i64 %491
  store double %488, ptr %492, align 8, !tbaa !17
  br label %493

493:                                              ; preds = %483, %478
  br label %494

494:                                              ; preds = %493, %367
  %495 = load i32, ptr %73, align 4, !tbaa !9
  %496 = icmp ne i32 %495, 0
  br i1 %496, label %497, label %653

497:                                              ; preds = %494
  %498 = load ptr, ptr %24, align 8, !tbaa !5
  %499 = load i32, ptr %498, align 4, !tbaa !9
  %500 = icmp eq i32 %499, 1
  br i1 %500, label %501, label %537

501:                                              ; preds = %497
  %502 = load ptr, ptr %25, align 8, !tbaa !5
  %503 = load i32, ptr %41, align 4, !tbaa !9
  %504 = add nsw i32 %503, 1
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds %struct.doublecomplex, ptr %502, i64 %505
  %507 = call { double, double } @Cd(ptr noundef %506)
  %508 = extractvalue { double, double } %507, 0
  %509 = extractvalue { double, double } %507, 1
  %510 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %511 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  store double %508, ptr %510, align 8
  store double %509, ptr %511, align 8
  %512 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %513 = load double, ptr %512, align 8
  %514 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %515 = load double, ptr %514, align 8
  %516 = call double @cabs(double noundef %513, double noundef %515) #5
  store double %516, ptr %50, align 8, !tbaa !17
  %517 = load ptr, ptr %27, align 8, !tbaa !5
  %518 = load i32, ptr %43, align 4, !tbaa !9
  %519 = add nsw i32 %518, 1
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds %struct.doublecomplex, ptr %517, i64 %520
  %522 = call { double, double } @Cd(ptr noundef %521)
  %523 = extractvalue { double, double } %522, 0
  %524 = extractvalue { double, double } %522, 1
  %525 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %526 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  store double %523, ptr %525, align 8
  store double %524, ptr %526, align 8
  %527 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %528 = load double, ptr %527, align 8
  %529 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %530 = load double, ptr %529, align 8
  %531 = call double @cabs(double noundef %528, double noundef %530) #5
  store double %531, ptr %51, align 8, !tbaa !17
  %532 = call double @dlapy2_(ptr noundef %50, ptr noundef %51)
  %533 = load ptr, ptr %34, align 8, !tbaa !5
  %534 = load i32, ptr %70, align 4, !tbaa !9
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds double, ptr %533, i64 %535
  store double %532, ptr %536, align 8, !tbaa !17
  br label %652

537:                                              ; preds = %497
  %538 = load ptr, ptr %24, align 8, !tbaa !5
  %539 = load ptr, ptr %24, align 8, !tbaa !5
  %540 = load ptr, ptr %25, align 8, !tbaa !5
  %541 = load i32, ptr %42, align 4, !tbaa !9
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %540, i64 %542
  %544 = load ptr, ptr %26, align 8, !tbaa !5
  %545 = load ptr, ptr %37, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %545, i64 1
  %547 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.8, ptr noundef %538, ptr noundef %539, ptr noundef %543, ptr noundef %544, ptr noundef %546, ptr noundef %547)
  %548 = load ptr, ptr %24, align 8, !tbaa !5
  %549 = load ptr, ptr %24, align 8, !tbaa !5
  %550 = load ptr, ptr %27, align 8, !tbaa !5
  %551 = load i32, ptr %44, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %550, i64 %552
  %554 = load ptr, ptr %28, align 8, !tbaa !5
  %555 = load ptr, ptr %37, align 8, !tbaa !5
  %556 = load ptr, ptr %24, align 8, !tbaa !5
  %557 = load i32, ptr %556, align 4, !tbaa !9
  %558 = load ptr, ptr %24, align 8, !tbaa !5
  %559 = load i32, ptr %558, align 4, !tbaa !9
  %560 = mul nsw i32 %557, %559
  %561 = add nsw i32 %560, 1
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %555, i64 %562
  %564 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.8, ptr noundef %548, ptr noundef %549, ptr noundef %553, ptr noundef %554, ptr noundef %563, ptr noundef %564)
  %565 = load i32, ptr %62, align 4, !tbaa !9
  store i32 %565, ptr %55, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  %566 = load ptr, ptr %24, align 8, !tbaa !5
  %567 = load ptr, ptr %37, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %567, i64 1
  %569 = load ptr, ptr %24, align 8, !tbaa !5
  %570 = load ptr, ptr %37, align 8, !tbaa !5
  %571 = load ptr, ptr %24, align 8, !tbaa !5
  %572 = load i32, ptr %571, align 4, !tbaa !9
  %573 = load ptr, ptr %24, align 8, !tbaa !5
  %574 = load i32, ptr %573, align 4, !tbaa !9
  %575 = mul nsw i32 %572, %574
  %576 = add nsw i32 %575, 1
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds %struct.doublecomplex, ptr %570, i64 %577
  %579 = load ptr, ptr %24, align 8, !tbaa !5
  %580 = getelementptr inbounds [1 x %struct.doublecomplex], ptr %66, i64 0, i64 0
  %581 = getelementptr inbounds [1 x %struct.doublecomplex], ptr %69, i64 0, i64 0
  call void @ztgexc_(ptr noundef @c_false, ptr noundef @c_false, ptr noundef %566, ptr noundef %568, ptr noundef %569, ptr noundef %578, ptr noundef %579, ptr noundef %580, ptr noundef @c__1, ptr noundef %581, ptr noundef @c__1, ptr noundef %55, ptr noundef %59, ptr noundef %54)
  %582 = load i32, ptr %54, align 4, !tbaa !9
  %583 = icmp sgt i32 %582, 0
  br i1 %583, label %584, label %589

584:                                              ; preds = %537
  %585 = load ptr, ptr %34, align 8, !tbaa !5
  %586 = load i32, ptr %70, align 4, !tbaa !9
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds double, ptr %585, i64 %587
  store double 0.000000e+00, ptr %588, align 8, !tbaa !17
  br label %651

589:                                              ; preds = %537
  store i32 1, ptr %67, align 4, !tbaa !9
  %590 = load ptr, ptr %24, align 8, !tbaa !5
  %591 = load i32, ptr %590, align 4, !tbaa !9
  %592 = load i32, ptr %67, align 4, !tbaa !9
  %593 = sub nsw i32 %591, %592
  store i32 %593, ptr %68, align 4, !tbaa !9
  %594 = load ptr, ptr %24, align 8, !tbaa !5
  %595 = load i32, ptr %594, align 4, !tbaa !9
  %596 = load ptr, ptr %24, align 8, !tbaa !5
  %597 = load i32, ptr %596, align 4, !tbaa !9
  %598 = mul nsw i32 %595, %597
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %61, align 4, !tbaa !9
  %600 = load ptr, ptr %37, align 8, !tbaa !5
  %601 = load ptr, ptr %24, align 8, !tbaa !5
  %602 = load i32, ptr %601, align 4, !tbaa !9
  %603 = load i32, ptr %67, align 4, !tbaa !9
  %604 = mul nsw i32 %602, %603
  %605 = load i32, ptr %67, align 4, !tbaa !9
  %606 = add nsw i32 %604, %605
  %607 = add nsw i32 %606, 1
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds %struct.doublecomplex, ptr %600, i64 %608
  %610 = load ptr, ptr %24, align 8, !tbaa !5
  %611 = load ptr, ptr %37, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %611, i64 1
  %613 = load ptr, ptr %24, align 8, !tbaa !5
  %614 = load ptr, ptr %37, align 8, !tbaa !5
  %615 = load i32, ptr %67, align 4, !tbaa !9
  %616 = add nsw i32 %615, 1
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %617
  %619 = load ptr, ptr %24, align 8, !tbaa !5
  %620 = load ptr, ptr %37, align 8, !tbaa !5
  %621 = load ptr, ptr %24, align 8, !tbaa !5
  %622 = load i32, ptr %621, align 4, !tbaa !9
  %623 = load i32, ptr %67, align 4, !tbaa !9
  %624 = mul nsw i32 %622, %623
  %625 = load i32, ptr %67, align 4, !tbaa !9
  %626 = add nsw i32 %624, %625
  %627 = load i32, ptr %61, align 4, !tbaa !9
  %628 = add nsw i32 %626, %627
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds %struct.doublecomplex, ptr %620, i64 %629
  %631 = load ptr, ptr %24, align 8, !tbaa !5
  %632 = load ptr, ptr %37, align 8, !tbaa !5
  %633 = load i32, ptr %61, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %632, i64 %634
  %636 = load ptr, ptr %24, align 8, !tbaa !5
  %637 = load ptr, ptr %37, align 8, !tbaa !5
  %638 = load i32, ptr %67, align 4, !tbaa !9
  %639 = load i32, ptr %61, align 4, !tbaa !9
  %640 = add nsw i32 %638, %639
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %637, i64 %641
  %643 = load ptr, ptr %24, align 8, !tbaa !5
  %644 = load ptr, ptr %34, align 8, !tbaa !5
  %645 = load i32, ptr %70, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds double, ptr %644, i64 %646
  %648 = getelementptr inbounds [1 x %struct.doublecomplex], ptr %66, i64 0, i64 0
  %649 = load ptr, ptr %39, align 8, !tbaa !5
  %650 = getelementptr inbounds i32, ptr %649, i64 1
  call void @ztgsyl_(ptr noundef @.str.7, ptr noundef @c__3, ptr noundef %68, ptr noundef %67, ptr noundef %609, ptr noundef %610, ptr noundef %612, ptr noundef %613, ptr noundef %618, ptr noundef %619, ptr noundef %630, ptr noundef %631, ptr noundef %635, ptr noundef %636, ptr noundef %642, ptr noundef %643, ptr noundef %63, ptr noundef %647, ptr noundef %648, ptr noundef @c__1, ptr noundef %650, ptr noundef %54)
  br label %651

651:                                              ; preds = %589, %584
  br label %652

652:                                              ; preds = %651, %501
  br label %653

653:                                              ; preds = %652, %494
  br label %654

654:                                              ; preds = %653, %365
  br label %655

655:                                              ; preds = %654
  %656 = load i32, ptr %62, align 4, !tbaa !9
  %657 = add nsw i32 %656, 1
  store i32 %657, ptr %62, align 4, !tbaa !9
  br label %351, !llvm.loop !18

658:                                              ; preds = %351
  %659 = load i32, ptr %64, align 4, !tbaa !9
  %660 = sitofp i32 %659 to double
  %661 = load ptr, ptr %37, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.doublecomplex, ptr %661, i64 1
  %663 = getelementptr inbounds %struct.doublecomplex, ptr %662, i32 0, i32 0
  store double %660, ptr %663, align 8, !tbaa !13
  %664 = load ptr, ptr %37, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.doublecomplex, ptr %664, i64 1
  %666 = getelementptr inbounds %struct.doublecomplex, ptr %665, i32 0, i32 1
  store double 0.000000e+00, ptr %666, align 8, !tbaa !16
  store i32 1, ptr %78, align 4
  br label %667

667:                                              ; preds = %658, %341, %335, %327
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 16, 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 16, 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 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, 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 4, 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
  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

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

declare double @dlamch_(ptr noundef) #2

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

declare double @dznrm2_(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

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

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

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

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

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

declare void @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 void @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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #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 = !{!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 i32, align 4
@.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 i32, align 4
@c__3 = external hidden global i32, align 4

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

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

62:                                               ; preds = %58
  %63 = load i32, ptr %3, align 4, !tbaa !5
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %.thread.sink.split, label %65

65:                                               ; preds = %62
  %66 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %63, i32 1)
  %67 = icmp slt i32 %66, %spec.select
  br i1 %67, label %.thread.sink.split, label %68

68:                                               ; preds = %65
  %69 = load i32, ptr %7, align 4, !tbaa !5
  %70 = icmp slt i32 %69, %spec.select
  br i1 %70, label %.thread.sink.split, label %71

71:                                               ; preds = %68
  br i1 %51, label %72, label %.critedge

72:                                               ; preds = %71
  %73 = load i32, ptr %9, align 4, !tbaa !5
  %74 = icmp slt i32 %73, %63
  br i1 %74, label %.thread.sink.split, label %75

75:                                               ; preds = %72
  %76 = load i32, ptr %11, align 4, !tbaa !5
  %77 = icmp slt i32 %76, %63
  br i1 %77, label %.thread.sink.split, label %.critedge

.critedge:                                        ; preds = %71, %75
  br i1 %61, label %78, label %94

78:                                               ; preds = %.critedge
  store i32 0, ptr %15, align 4, !tbaa !5
  %79 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %79, ptr %21, align 4, !tbaa !5
  %.not225 = icmp slt i32 %79, 1
  br i1 %.not225, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %78
  %80 = zext nneg i32 %79 to i64
  %xtraiter = and i64 %80, 1
  %81 = icmp eq i32 %79, 1
  br i1 %81, label %.loopexitthread-pre-split.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph:                                           ; preds = %92, %.lr.ph.preheader.new
  %82 = phi i32 [ 0, %.lr.ph.preheader.new ], [ %93, %92 ]
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %92 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %92 ]
  %83 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv
  %84 = load i32, ptr %83, align 4, !tbaa !5
  %.not217 = icmp eq i32 %84, 0
  br i1 %.not217, label %.lr.ph.1, label %85

85:                                               ; preds = %.lr.ph
  %86 = add nsw i32 %82, 1
  store i32 %86, ptr %15, align 4, !tbaa !5
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph, %85
  %87 = phi i32 [ %82, %.lr.ph ], [ %86, %85 ]
  %88 = getelementptr i32, ptr %2, i64 %indvars.iv
  %89 = load i32, ptr %88, align 4, !tbaa !5
  %.not217.1 = icmp eq i32 %89, 0
  br i1 %.not217.1, label %92, label %90

90:                                               ; preds = %.lr.ph.1
  %91 = add nsw i32 %87, 1
  store i32 %91, ptr %15, align 4, !tbaa !5
  br label %92

92:                                               ; preds = %90, %.lr.ph.1
  %93 = phi i32 [ %87, %.lr.ph.1 ], [ %91, %90 ]
  %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 %.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit, label %.lr.ph, !llvm.loop !9

94:                                               ; preds = %.critedge
  store i32 %63, ptr %15, align 4, !tbaa !5
  br label %.loopexitthread-pre-split

.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit: ; preds = %92
  %95 = add nsw i32 %93, 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 i32 [ 1, %.lr.ph.preheader ], [ %95, %.loopexitthread-pre-split.loopexit.unr-lcssa.loopexit ]
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.1, %.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
  %96 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.unr
  %97 = load i32, ptr %96, align 4, !tbaa !5
  %.not217.epil = icmp eq i32 %97, 0
  br i1 %.not217.epil, label %.loopexitthread-pre-split, label %98

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

.loopexitthread-pre-split:                        ; preds = %.loopexitthread-pre-split.loopexit.unr-lcssa, %98, %.lr.ph.epil, %94
  %.pr245 = load i32, ptr %3, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexitthread-pre-split, %78
  %99 = phi i32 [ %.pr245, %.loopexitthread-pre-split ], [ %79, %78 ]
  %100 = icmp eq i32 %99, 0
  br i1 %100, label %111, label %101

101:                                              ; preds = %.loopexit
  %102 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %.not215 = icmp eq i32 %102, 0
  br i1 %.not215, label %103, label %105

103:                                              ; preds = %101
  %104 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not216 = icmp eq i32 %104, 0
  br i1 %.not216, label %109, label %105

105:                                              ; preds = %103, %101
  %106 = load i32, ptr %3, align 4, !tbaa !5
  %107 = shl i32 %106, 1
  %108 = mul nsw i32 %107, %106
  br label %111

109:                                              ; preds = %103
  %110 = load i32, ptr %3, align 4, !tbaa !5
  br label %111

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

118:                                              ; preds = %111
  %119 = load i32, ptr %17, align 4, !tbaa !5
  %120 = icmp sge i32 %119, %.0206
  %or.cond5 = select i1 %120, i1 true, i1 %57
  br i1 %or.cond5, label %121, label %.thread.sink.split

121:                                              ; preds = %118
  %.pr = load i32, ptr %19, align 4, !tbaa !5
  %.not218 = icmp eq i32 %.pr, 0
  br i1 %.not218, label %125, label %.thread

.thread.sink.split:                               ; preds = %118, %111, %75, %72, %68, %65, %62, %58, %20
  %.sink = phi i32 [ -1, %20 ], [ -2, %58 ], [ -4, %62 ], [ -6, %65 ], [ -8, %68 ], [ -10, %72 ], [ -12, %75 ], [ -15, %111 ], [ -18, %118 ]
  store i32 %.sink, ptr %19, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %121
  %122 = phi i32 [ %.pr, %121 ], [ %.sink, %.thread.sink.split ]
  %123 = sub nsw i32 0, %122
  store i32 %123, ptr %21, align 4, !tbaa !5
  %124 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %21, i32 noundef 6) #6
  br label %207

125:                                              ; preds = %121
  %126 = icmp eq i32 %112, 0
  %or.cond246 = select i1 %57, i1 true, i1 %126
  br i1 %or.cond246, label %207, label %127

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

.lr.ph240:                                        ; preds = %127
  %.not220 = icmp eq i32 %55, 0
  %133 = zext nneg i32 %132 to i64
  br label %134

134:                                              ; preds = %.lr.ph240, %206
  %indvars.iv242 = phi i64 [ 1, %.lr.ph240 ], [ %indvars.iv.next243, %206 ]
  %.0208238 = phi i32 [ 0, %.lr.ph240 ], [ %.1209, %206 ]
  br i1 %.not220, label %138, label %135

135:                                              ; preds = %134
  %136 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv242
  %137 = load i32, ptr %136, align 4, !tbaa !5
  %.not221 = icmp eq i32 %137, 0
  br i1 %.not221, label %206, label %138

138:                                              ; preds = %135, %134
  %139 = add nsw i32 %.0208238, 1
  br i1 %51, label %.sink.split, label %162

.sink.split:                                      ; preds = %138
  %140 = mul nsw i32 %139, %41
  %141 = sext i32 %140 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %141
  %142 = call double @dznrm2_(ptr noundef nonnull %3, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  %143 = mul nsw i32 %139, %38
  %144 = sext i32 %143 to i64
  %gep228 = getelementptr %struct.doublecomplex, ptr %invariant.gep227, i64 %144
  %145 = call double @dznrm2_(ptr noundef nonnull %3, ptr noundef %gep228, ptr noundef nonnull @c__1) #6
  call void @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) #6
  call void @zdotc_(ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull @c__1, ptr noundef %gep228, ptr noundef nonnull @c__1)
  %146 = load <2 x double>, ptr %24, align 16, !tbaa !15
  store <2 x double> %146, ptr %27, align 16, !tbaa !15
  call void @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) #6
  call void @zdotc_(ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull @c__1, ptr noundef %gep228, ptr noundef nonnull @c__1)
  %147 = load <2 x double>, ptr %24, align 16, !tbaa !15
  store <2 x double> %147, ptr %28, align 16, !tbaa !15
  %148 = call { double, double } @Cd(ptr noundef nonnull %27)
  %149 = extractvalue { double, double } %148, 0
  %150 = extractvalue { double, double } %148, 1
  %151 = call double @cabs(double noundef %149, double noundef %150) #6
  store double %151, ptr %22, align 8, !tbaa !15
  %152 = call { double, double } @Cd(ptr noundef nonnull %28)
  %153 = extractvalue { double, double } %152, 0
  %154 = extractvalue { double, double } %152, 1
  %155 = call double @cabs(double noundef %153, double noundef %154) #6
  store double %155, ptr %23, align 8, !tbaa !15
  %156 = call double @dlapy2_(ptr noundef nonnull %22, ptr noundef nonnull %23) #6
  %157 = fcmp oeq double %156, 0.000000e+00
  %158 = fmul double %142, %145
  %159 = fdiv double %156, %158
  %.sink247 = select i1 %157, double -1.000000e+00, double %159
  %160 = sext i32 %139 to i64
  %161 = getelementptr inbounds double, ptr %44, i64 %160
  store double %.sink247, ptr %161, align 8, !tbaa !15
  br label %162

162:                                              ; preds = %.sink.split, %138
  br i1 %54, label %163, label %206

163:                                              ; preds = %162
  %164 = load i32, ptr %3, align 4, !tbaa !5
  %165 = icmp eq i32 %164, 1
  br i1 %165, label %166, label %178

166:                                              ; preds = %163
  %167 = call { double, double } @Cd(ptr noundef %4)
  %168 = extractvalue { double, double } %167, 0
  %169 = extractvalue { double, double } %167, 1
  %170 = call double @cabs(double noundef %168, double noundef %169) #6
  store double %170, ptr %22, align 8, !tbaa !15
  %171 = call { double, double } @Cd(ptr noundef %6)
  %172 = extractvalue { double, double } %171, 0
  %173 = extractvalue { double, double } %171, 1
  %174 = call double @cabs(double noundef %172, double noundef %173) #6
  store double %174, ptr %23, align 8, !tbaa !15
  %175 = call double @dlapy2_(ptr noundef nonnull %22, ptr noundef nonnull %23) #6
  %176 = sext i32 %139 to i64
  %177 = getelementptr inbounds double, ptr %45, i64 %176
  store double %175, ptr %177, align 8, !tbaa !15
  br label %206

178:                                              ; preds = %163
  call void @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) #6
  %179 = load i32, ptr %3, align 4, !tbaa !5
  %180 = mul nsw i32 %179, %179
  %181 = zext nneg i32 %180 to i64
  %gep230 = getelementptr inbounds %struct.doublecomplex, ptr %16, i64 %181
  call void @zlacpy_(ptr noundef nonnull @.str.8, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %gep230, ptr noundef nonnull %3) #6
  %182 = trunc nuw nsw i64 %indvars.iv242 to i32
  store i32 %182, ptr %26, align 4, !tbaa !5
  store i32 1, ptr %29, align 4, !tbaa !5
  %183 = load i32, ptr %3, align 4, !tbaa !5
  %184 = mul nsw i32 %183, %183
  %185 = zext nneg i32 %184 to i64
  %gep232 = getelementptr inbounds %struct.doublecomplex, ptr %16, i64 %185
  call void @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 nonnull %gep232, ptr noundef nonnull %3, ptr noundef nonnull %31, ptr noundef nonnull @c__1, ptr noundef nonnull %34, ptr noundef nonnull @c__1, ptr noundef nonnull %26, ptr noundef nonnull %29, ptr noundef nonnull %25) #6
  %186 = load i32, ptr %25, align 4, !tbaa !5
  %187 = icmp sgt i32 %186, 0
  br i1 %187, label %188, label %191

188:                                              ; preds = %178
  %189 = sext i32 %139 to i64
  %190 = getelementptr inbounds double, ptr %45, i64 %189
  store double 0.000000e+00, ptr %190, align 8, !tbaa !15
  br label %206

191:                                              ; preds = %178
  store i32 1, ptr %32, align 4, !tbaa !5
  %192 = load i32, ptr %3, align 4, !tbaa !5
  %193 = add nsw i32 %192, -1
  store i32 %193, ptr %33, align 4, !tbaa !5
  %194 = mul nsw i32 %192, %192
  %195 = add nuw nsw i32 %194, 1
  %196 = add nsw i32 %192, 1
  %197 = sext i32 %192 to i64
  %gep234 = getelementptr %struct.doublecomplex, ptr %invariant.gep233, i64 %197
  %198 = add nsw i32 %196, %195
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %199
  %201 = zext nneg i32 %195 to i64
  %202 = getelementptr inbounds %struct.doublecomplex, ptr %46, i64 %201
  %203 = zext nneg i32 %194 to i64
  %gep236 = getelementptr inbounds %struct.doublecomplex, ptr %invariant.gep233, i64 %203
  %204 = sext i32 %139 to i64
  %205 = getelementptr inbounds double, ptr %45, i64 %204
  call void @ztgsyl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__3, ptr noundef nonnull %33, ptr noundef nonnull %32, ptr noundef %gep234, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull %3, ptr noundef nonnull %invariant.gep233, ptr noundef nonnull %3, ptr noundef nonnull %200, ptr noundef nonnull %3, ptr noundef nonnull %202, ptr noundef nonnull %3, ptr noundef nonnull %gep236, ptr noundef nonnull %3, ptr noundef nonnull %30, ptr noundef nonnull %205, ptr noundef nonnull %31, ptr noundef nonnull @c__1, ptr noundef %18, ptr noundef nonnull %25) #6
  br label %206

206:                                              ; preds = %135, %166, %191, %188, %162
  %.1209 = phi i32 [ %139, %166 ], [ %139, %188 ], [ %139, %191 ], [ %139, %162 ], [ %.0208238, %135 ]
  %indvars.iv.next243 = add nuw nsw i64 %indvars.iv242, 1
  %.not219.not = icmp ult i64 %indvars.iv242, %133
  br i1 %.not219.not, label %134, label %._crit_edge, !llvm.loop !16

._crit_edge:                                      ; preds = %206, %127
  store double %113, ptr %16, align 8, !tbaa !11
  store double 0.000000e+00, ptr %114, align 8, !tbaa !14
  br label %207

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

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

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

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 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 @dznrm2_(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

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

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

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

declare double @dlapy2_(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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = 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