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

; 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 [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local double @zla_gbrcond_c__(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, i64 noundef %14) #0 {
  %16 = alloca double, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca %struct.doublecomplex, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca double, align 8
  %49 = alloca i64, align 8
  %50 = alloca [3 x i64], align 16
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca i64, align 8
  %54 = alloca i32, align 4
  store ptr %0, ptr %17, align 8, !tbaa !5
  store ptr %1, ptr %18, align 8, !tbaa !5
  store ptr %2, ptr %19, align 8, !tbaa !5
  store ptr %3, ptr %20, align 8, !tbaa !5
  store ptr %4, ptr %21, align 8, !tbaa !5
  store ptr %5, ptr %22, align 8, !tbaa !5
  store ptr %6, ptr %23, align 8, !tbaa !5
  store ptr %7, ptr %24, align 8, !tbaa !5
  store ptr %8, ptr %25, align 8, !tbaa !5
  store ptr %9, ptr %26, align 8, !tbaa !5
  store ptr %10, ptr %27, align 8, !tbaa !5
  store ptr %11, ptr %28, align 8, !tbaa !5
  store ptr %12, ptr %29, align 8, !tbaa !5
  store ptr %13, ptr %30, align 8, !tbaa !5
  store i64 %14, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 16, 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 24, 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 8, ptr %53) #3
  %55 = load ptr, ptr %22, align 8, !tbaa !5
  %56 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %56, ptr %32, align 8, !tbaa !9
  %57 = load i64, ptr %32, align 8, !tbaa !9
  %58 = add nsw i64 1, %57
  store i64 %58, ptr %33, align 8, !tbaa !9
  %59 = load i64, ptr %33, align 8, !tbaa !9
  %60 = load ptr, ptr %21, align 8, !tbaa !5
  %61 = sub i64 0, %59
  %62 = getelementptr inbounds %struct.doublecomplex, ptr %60, i64 %61
  store ptr %62, ptr %21, align 8, !tbaa !5
  %63 = load ptr, ptr %24, align 8, !tbaa !5
  %64 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %64, ptr %34, align 8, !tbaa !9
  %65 = load i64, ptr %34, align 8, !tbaa !9
  %66 = add nsw i64 1, %65
  store i64 %66, ptr %35, align 8, !tbaa !9
  %67 = load i64, ptr %35, align 8, !tbaa !9
  %68 = load ptr, ptr %23, align 8, !tbaa !5
  %69 = sub i64 0, %67
  %70 = getelementptr inbounds %struct.doublecomplex, ptr %68, i64 %69
  store ptr %70, ptr %23, align 8, !tbaa !5
  %71 = load ptr, ptr %25, align 8, !tbaa !5
  %72 = getelementptr inbounds i64, ptr %71, i32 -1
  store ptr %72, ptr %25, align 8, !tbaa !5
  %73 = load ptr, ptr %26, align 8, !tbaa !5
  %74 = getelementptr inbounds double, ptr %73, i32 -1
  store ptr %74, ptr %26, align 8, !tbaa !5
  %75 = load ptr, ptr %29, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.doublecomplex, ptr %75, i32 -1
  store ptr %76, ptr %29, align 8, !tbaa !5
  %77 = load ptr, ptr %30, align 8, !tbaa !5
  %78 = getelementptr inbounds double, ptr %77, i32 -1
  store ptr %78, ptr %30, align 8, !tbaa !5
  store double 0.000000e+00, ptr %40, align 8, !tbaa !11
  %79 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 0, ptr %79, align 8, !tbaa !9
  %80 = load ptr, ptr %17, align 8, !tbaa !5
  %81 = call i64 @lsame_(ptr noundef %80, ptr noundef @.str)
  store i64 %81, ptr %53, align 8, !tbaa !9
  %82 = load i64, ptr %53, align 8, !tbaa !9
  %83 = icmp ne i64 %82, 0
  br i1 %83, label %94, label %84

84:                                               ; preds = %15
  %85 = load ptr, ptr %17, align 8, !tbaa !5
  %86 = call i64 @lsame_(ptr noundef %85, ptr noundef @.str.1)
  %87 = icmp ne i64 %86, 0
  br i1 %87, label %94, label %88

88:                                               ; preds = %84
  %89 = load ptr, ptr %17, align 8, !tbaa !5
  %90 = call i64 @lsame_(ptr noundef %89, ptr noundef @.str.2)
  %91 = icmp ne i64 %90, 0
  br i1 %91, label %94, label %92

92:                                               ; preds = %88
  %93 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 -1, ptr %93, align 8, !tbaa !9
  br label %156

94:                                               ; preds = %88, %84, %15
  %95 = load ptr, ptr %18, align 8, !tbaa !5
  %96 = load i64, ptr %95, align 8, !tbaa !9
  %97 = icmp slt i64 %96, 0
  br i1 %97, label %98, label %100

98:                                               ; preds = %94
  %99 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 -2, ptr %99, align 8, !tbaa !9
  br label %155

100:                                              ; preds = %94
  %101 = load ptr, ptr %19, align 8, !tbaa !5
  %102 = load i64, ptr %101, align 8, !tbaa !9
  %103 = icmp slt i64 %102, 0
  br i1 %103, label %111, label %104

104:                                              ; preds = %100
  %105 = load ptr, ptr %19, align 8, !tbaa !5
  %106 = load i64, ptr %105, align 8, !tbaa !9
  %107 = load ptr, ptr %18, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  %109 = sub nsw i64 %108, 1
  %110 = icmp sgt i64 %106, %109
  br i1 %110, label %111, label %113

111:                                              ; preds = %104, %100
  %112 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 -3, ptr %112, align 8, !tbaa !9
  br label %154

113:                                              ; preds = %104
  %114 = load ptr, ptr %20, align 8, !tbaa !5
  %115 = load i64, ptr %114, align 8, !tbaa !9
  %116 = icmp slt i64 %115, 0
  br i1 %116, label %124, label %117

117:                                              ; preds = %113
  %118 = load ptr, ptr %20, align 8, !tbaa !5
  %119 = load i64, ptr %118, align 8, !tbaa !9
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = sub nsw i64 %121, 1
  %123 = icmp sgt i64 %119, %122
  br i1 %123, label %124, label %126

124:                                              ; preds = %117, %113
  %125 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 -4, ptr %125, align 8, !tbaa !9
  br label %153

126:                                              ; preds = %117
  %127 = load ptr, ptr %22, align 8, !tbaa !5
  %128 = load i64, ptr %127, align 8, !tbaa !9
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = load i64, ptr %129, align 8, !tbaa !9
  %131 = load ptr, ptr %20, align 8, !tbaa !5
  %132 = load i64, ptr %131, align 8, !tbaa !9
  %133 = add nsw i64 %130, %132
  %134 = add nsw i64 %133, 1
  %135 = icmp slt i64 %128, %134
  br i1 %135, label %136, label %138

136:                                              ; preds = %126
  %137 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 -6, ptr %137, align 8, !tbaa !9
  br label %152

138:                                              ; preds = %126
  %139 = load ptr, ptr %24, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  %141 = load ptr, ptr %19, align 8, !tbaa !5
  %142 = load i64, ptr %141, align 8, !tbaa !9
  %143 = shl i64 %142, 1
  %144 = load ptr, ptr %20, align 8, !tbaa !5
  %145 = load i64, ptr %144, align 8, !tbaa !9
  %146 = add nsw i64 %143, %145
  %147 = add nsw i64 %146, 1
  %148 = icmp slt i64 %140, %147
  br i1 %148, label %149, label %151

149:                                              ; preds = %138
  %150 = load ptr, ptr %28, align 8, !tbaa !5
  store i64 -8, ptr %150, align 8, !tbaa !9
  br label %151

151:                                              ; preds = %149, %138
  br label %152

152:                                              ; preds = %151, %136
  br label %153

153:                                              ; preds = %152, %124
  br label %154

154:                                              ; preds = %153, %111
  br label %155

155:                                              ; preds = %154, %98
  br label %156

156:                                              ; preds = %155, %92
  %157 = load ptr, ptr %28, align 8, !tbaa !5
  %158 = load i64, ptr %157, align 8, !tbaa !9
  %159 = icmp ne i64 %158, 0
  br i1 %159, label %160, label %166

160:                                              ; preds = %156
  %161 = load ptr, ptr %28, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = sub nsw i64 0, %162
  store i64 %163, ptr %36, align 8, !tbaa !9
  %164 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %36)
  %165 = load double, ptr %40, align 8, !tbaa !11
  store double %165, ptr %16, align 8
  store i32 1, ptr %54, align 4
  br label %883

166:                                              ; preds = %156
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  %167 = load ptr, ptr %20, align 8, !tbaa !5
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = add nsw i64 %168, 1
  store i64 %169, ptr %46, align 8, !tbaa !9
  %170 = load ptr, ptr %19, align 8, !tbaa !5
  %171 = load i64, ptr %170, align 8, !tbaa !9
  %172 = add nsw i64 %171, 1
  store i64 %172, ptr %47, align 8, !tbaa !9
  %173 = load i64, ptr %53, align 8, !tbaa !9
  %174 = icmp ne i64 %173, 0
  br i1 %174, label %175, label %375

175:                                              ; preds = %166
  %176 = load ptr, ptr %18, align 8, !tbaa !5
  %177 = load i64, ptr %176, align 8, !tbaa !9
  store i64 %177, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %178

178:                                              ; preds = %371, %175
  %179 = load i64, ptr %44, align 8, !tbaa !9
  %180 = load i64, ptr %36, align 8, !tbaa !9
  %181 = icmp sle i64 %179, %180
  br i1 %181, label %182, label %374

182:                                              ; preds = %178
  store double 0.000000e+00, ptr %48, align 8, !tbaa !11
  %183 = load ptr, ptr %27, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !9
  %185 = icmp ne i64 %184, 0
  br i1 %185, label %186, label %274

186:                                              ; preds = %182
  %187 = load i64, ptr %44, align 8, !tbaa !9
  %188 = load ptr, ptr %19, align 8, !tbaa !5
  %189 = load i64, ptr %188, align 8, !tbaa !9
  %190 = sub nsw i64 %187, %189
  store i64 %190, ptr %37, align 8, !tbaa !9
  %191 = load i64, ptr %44, align 8, !tbaa !9
  %192 = load ptr, ptr %20, align 8, !tbaa !5
  %193 = load i64, ptr %192, align 8, !tbaa !9
  %194 = add nsw i64 %191, %193
  store i64 %194, ptr %39, align 8, !tbaa !9
  %195 = load i64, ptr %39, align 8, !tbaa !9
  %196 = load ptr, ptr %18, align 8, !tbaa !5
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = icmp sle i64 %195, %197
  br i1 %198, label %199, label %201

199:                                              ; preds = %186
  %200 = load i64, ptr %39, align 8, !tbaa !9
  br label %204

201:                                              ; preds = %186
  %202 = load ptr, ptr %18, align 8, !tbaa !5
  %203 = load i64, ptr %202, align 8, !tbaa !9
  br label %204

204:                                              ; preds = %201, %199
  %205 = phi i64 [ %200, %199 ], [ %203, %201 ]
  store i64 %205, ptr %38, align 8, !tbaa !9
  %206 = load i64, ptr %37, align 8, !tbaa !9
  %207 = icmp sge i64 %206, 1
  br i1 %207, label %208, label %210

208:                                              ; preds = %204
  %209 = load i64, ptr %37, align 8, !tbaa !9
  br label %211

210:                                              ; preds = %204
  br label %211

211:                                              ; preds = %210, %208
  %212 = phi i64 [ %209, %208 ], [ 1, %210 ]
  store i64 %212, ptr %45, align 8, !tbaa !9
  br label %213

213:                                              ; preds = %270, %211
  %214 = load i64, ptr %45, align 8, !tbaa !9
  %215 = load i64, ptr %38, align 8, !tbaa !9
  %216 = icmp sle i64 %214, %215
  br i1 %216, label %217, label %273

217:                                              ; preds = %213
  %218 = load i64, ptr %46, align 8, !tbaa !9
  %219 = load i64, ptr %44, align 8, !tbaa !9
  %220 = add nsw i64 %218, %219
  %221 = load i64, ptr %45, align 8, !tbaa !9
  %222 = sub nsw i64 %220, %221
  %223 = load i64, ptr %45, align 8, !tbaa !9
  %224 = load i64, ptr %32, align 8, !tbaa !9
  %225 = mul nsw i64 %223, %224
  %226 = add nsw i64 %222, %225
  store i64 %226, ptr %37, align 8, !tbaa !9
  %227 = load ptr, ptr %21, align 8, !tbaa !5
  %228 = load i64, ptr %37, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct.doublecomplex, ptr %227, i64 %228
  %230 = getelementptr inbounds %struct.doublecomplex, ptr %229, i32 0, i32 0
  %231 = load double, ptr %230, align 8, !tbaa !13
  store double %231, ptr %41, align 8, !tbaa !11
  %232 = load double, ptr %41, align 8, !tbaa !11
  %233 = fcmp oge double %232, 0.000000e+00
  br i1 %233, label %234, label %236

234:                                              ; preds = %217
  %235 = load double, ptr %41, align 8, !tbaa !11
  br label %239

236:                                              ; preds = %217
  %237 = load double, ptr %41, align 8, !tbaa !11
  %238 = fneg double %237
  br label %239

239:                                              ; preds = %236, %234
  %240 = phi double [ %235, %234 ], [ %238, %236 ]
  %241 = load ptr, ptr %21, align 8, !tbaa !5
  %242 = load i64, ptr %46, align 8, !tbaa !9
  %243 = load i64, ptr %44, align 8, !tbaa !9
  %244 = add nsw i64 %242, %243
  %245 = load i64, ptr %45, align 8, !tbaa !9
  %246 = sub nsw i64 %244, %245
  %247 = load i64, ptr %45, align 8, !tbaa !9
  %248 = load i64, ptr %32, align 8, !tbaa !9
  %249 = mul nsw i64 %247, %248
  %250 = add nsw i64 %246, %249
  %251 = getelementptr inbounds %struct.doublecomplex, ptr %241, i64 %250
  %252 = call double @d_imag(ptr noundef %251)
  store double %252, ptr %42, align 8, !tbaa !11
  %253 = load double, ptr %42, align 8, !tbaa !11
  %254 = fcmp oge double %253, 0.000000e+00
  br i1 %254, label %255, label %257

255:                                              ; preds = %239
  %256 = load double, ptr %42, align 8, !tbaa !11
  br label %260

257:                                              ; preds = %239
  %258 = load double, ptr %42, align 8, !tbaa !11
  %259 = fneg double %258
  br label %260

260:                                              ; preds = %257, %255
  %261 = phi double [ %256, %255 ], [ %259, %257 ]
  %262 = fadd double %240, %261
  %263 = load ptr, ptr %26, align 8, !tbaa !5
  %264 = load i64, ptr %45, align 8, !tbaa !9
  %265 = getelementptr inbounds double, ptr %263, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !11
  %267 = fdiv double %262, %266
  %268 = load double, ptr %48, align 8, !tbaa !11
  %269 = fadd double %268, %267
  store double %269, ptr %48, align 8, !tbaa !11
  br label %270

270:                                              ; preds = %260
  %271 = load i64, ptr %45, align 8, !tbaa !9
  %272 = add nsw i64 %271, 1
  store i64 %272, ptr %45, align 8, !tbaa !9
  br label %213, !llvm.loop !15

273:                                              ; preds = %213
  br label %357

274:                                              ; preds = %182
  %275 = load i64, ptr %44, align 8, !tbaa !9
  %276 = load ptr, ptr %19, align 8, !tbaa !5
  %277 = load i64, ptr %276, align 8, !tbaa !9
  %278 = sub nsw i64 %275, %277
  store i64 %278, ptr %38, align 8, !tbaa !9
  %279 = load i64, ptr %44, align 8, !tbaa !9
  %280 = load ptr, ptr %20, align 8, !tbaa !5
  %281 = load i64, ptr %280, align 8, !tbaa !9
  %282 = add nsw i64 %279, %281
  store i64 %282, ptr %39, align 8, !tbaa !9
  %283 = load i64, ptr %39, align 8, !tbaa !9
  %284 = load ptr, ptr %18, align 8, !tbaa !5
  %285 = load i64, ptr %284, align 8, !tbaa !9
  %286 = icmp sle i64 %283, %285
  br i1 %286, label %287, label %289

287:                                              ; preds = %274
  %288 = load i64, ptr %39, align 8, !tbaa !9
  br label %292

289:                                              ; preds = %274
  %290 = load ptr, ptr %18, align 8, !tbaa !5
  %291 = load i64, ptr %290, align 8, !tbaa !9
  br label %292

292:                                              ; preds = %289, %287
  %293 = phi i64 [ %288, %287 ], [ %291, %289 ]
  store i64 %293, ptr %37, align 8, !tbaa !9
  %294 = load i64, ptr %38, align 8, !tbaa !9
  %295 = icmp sge i64 %294, 1
  br i1 %295, label %296, label %298

296:                                              ; preds = %292
  %297 = load i64, ptr %38, align 8, !tbaa !9
  br label %299

298:                                              ; preds = %292
  br label %299

299:                                              ; preds = %298, %296
  %300 = phi i64 [ %297, %296 ], [ 1, %298 ]
  store i64 %300, ptr %45, align 8, !tbaa !9
  br label %301

301:                                              ; preds = %353, %299
  %302 = load i64, ptr %45, align 8, !tbaa !9
  %303 = load i64, ptr %37, align 8, !tbaa !9
  %304 = icmp sle i64 %302, %303
  br i1 %304, label %305, label %356

305:                                              ; preds = %301
  %306 = load i64, ptr %46, align 8, !tbaa !9
  %307 = load i64, ptr %44, align 8, !tbaa !9
  %308 = add nsw i64 %306, %307
  %309 = load i64, ptr %45, align 8, !tbaa !9
  %310 = sub nsw i64 %308, %309
  %311 = load i64, ptr %45, align 8, !tbaa !9
  %312 = load i64, ptr %32, align 8, !tbaa !9
  %313 = mul nsw i64 %311, %312
  %314 = add nsw i64 %310, %313
  store i64 %314, ptr %38, align 8, !tbaa !9
  %315 = load ptr, ptr %21, align 8, !tbaa !5
  %316 = load i64, ptr %38, align 8, !tbaa !9
  %317 = getelementptr inbounds %struct.doublecomplex, ptr %315, i64 %316
  %318 = getelementptr inbounds %struct.doublecomplex, ptr %317, i32 0, i32 0
  %319 = load double, ptr %318, align 8, !tbaa !13
  store double %319, ptr %41, align 8, !tbaa !11
  %320 = load double, ptr %41, align 8, !tbaa !11
  %321 = fcmp oge double %320, 0.000000e+00
  br i1 %321, label %322, label %324

322:                                              ; preds = %305
  %323 = load double, ptr %41, align 8, !tbaa !11
  br label %327

324:                                              ; preds = %305
  %325 = load double, ptr %41, align 8, !tbaa !11
  %326 = fneg double %325
  br label %327

327:                                              ; preds = %324, %322
  %328 = phi double [ %323, %322 ], [ %326, %324 ]
  %329 = load ptr, ptr %21, align 8, !tbaa !5
  %330 = load i64, ptr %46, align 8, !tbaa !9
  %331 = load i64, ptr %44, align 8, !tbaa !9
  %332 = add nsw i64 %330, %331
  %333 = load i64, ptr %45, align 8, !tbaa !9
  %334 = sub nsw i64 %332, %333
  %335 = load i64, ptr %45, align 8, !tbaa !9
  %336 = load i64, ptr %32, align 8, !tbaa !9
  %337 = mul nsw i64 %335, %336
  %338 = add nsw i64 %334, %337
  %339 = getelementptr inbounds %struct.doublecomplex, ptr %329, i64 %338
  %340 = call double @d_imag(ptr noundef %339)
  store double %340, ptr %42, align 8, !tbaa !11
  %341 = load double, ptr %42, align 8, !tbaa !11
  %342 = fcmp oge double %341, 0.000000e+00
  br i1 %342, label %343, label %345

343:                                              ; preds = %327
  %344 = load double, ptr %42, align 8, !tbaa !11
  br label %348

345:                                              ; preds = %327
  %346 = load double, ptr %42, align 8, !tbaa !11
  %347 = fneg double %346
  br label %348

348:                                              ; preds = %345, %343
  %349 = phi double [ %344, %343 ], [ %347, %345 ]
  %350 = fadd double %328, %349
  %351 = load double, ptr %48, align 8, !tbaa !11
  %352 = fadd double %351, %350
  store double %352, ptr %48, align 8, !tbaa !11
  br label %353

353:                                              ; preds = %348
  %354 = load i64, ptr %45, align 8, !tbaa !9
  %355 = add nsw i64 %354, 1
  store i64 %355, ptr %45, align 8, !tbaa !9
  br label %301, !llvm.loop !17

356:                                              ; preds = %301
  br label %357

357:                                              ; preds = %356, %273
  %358 = load double, ptr %48, align 8, !tbaa !11
  %359 = load ptr, ptr %30, align 8, !tbaa !5
  %360 = load i64, ptr %44, align 8, !tbaa !9
  %361 = getelementptr inbounds double, ptr %359, i64 %360
  store double %358, ptr %361, align 8, !tbaa !11
  %362 = load double, ptr %51, align 8, !tbaa !11
  %363 = load double, ptr %48, align 8, !tbaa !11
  %364 = fcmp oge double %362, %363
  br i1 %364, label %365, label %367

365:                                              ; preds = %357
  %366 = load double, ptr %51, align 8, !tbaa !11
  br label %369

367:                                              ; preds = %357
  %368 = load double, ptr %48, align 8, !tbaa !11
  br label %369

369:                                              ; preds = %367, %365
  %370 = phi double [ %366, %365 ], [ %368, %367 ]
  store double %370, ptr %51, align 8, !tbaa !11
  br label %371

371:                                              ; preds = %369
  %372 = load i64, ptr %44, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %44, align 8, !tbaa !9
  br label %178, !llvm.loop !18

374:                                              ; preds = %178
  br label %575

375:                                              ; preds = %166
  %376 = load ptr, ptr %18, align 8, !tbaa !5
  %377 = load i64, ptr %376, align 8, !tbaa !9
  store i64 %377, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %378

378:                                              ; preds = %571, %375
  %379 = load i64, ptr %44, align 8, !tbaa !9
  %380 = load i64, ptr %36, align 8, !tbaa !9
  %381 = icmp sle i64 %379, %380
  br i1 %381, label %382, label %574

382:                                              ; preds = %378
  store double 0.000000e+00, ptr %48, align 8, !tbaa !11
  %383 = load ptr, ptr %27, align 8, !tbaa !5
  %384 = load i64, ptr %383, align 8, !tbaa !9
  %385 = icmp ne i64 %384, 0
  br i1 %385, label %386, label %474

386:                                              ; preds = %382
  %387 = load i64, ptr %44, align 8, !tbaa !9
  %388 = load ptr, ptr %19, align 8, !tbaa !5
  %389 = load i64, ptr %388, align 8, !tbaa !9
  %390 = sub nsw i64 %387, %389
  store i64 %390, ptr %37, align 8, !tbaa !9
  %391 = load i64, ptr %44, align 8, !tbaa !9
  %392 = load ptr, ptr %20, align 8, !tbaa !5
  %393 = load i64, ptr %392, align 8, !tbaa !9
  %394 = add nsw i64 %391, %393
  store i64 %394, ptr %39, align 8, !tbaa !9
  %395 = load i64, ptr %39, align 8, !tbaa !9
  %396 = load ptr, ptr %18, align 8, !tbaa !5
  %397 = load i64, ptr %396, align 8, !tbaa !9
  %398 = icmp sle i64 %395, %397
  br i1 %398, label %399, label %401

399:                                              ; preds = %386
  %400 = load i64, ptr %39, align 8, !tbaa !9
  br label %404

401:                                              ; preds = %386
  %402 = load ptr, ptr %18, align 8, !tbaa !5
  %403 = load i64, ptr %402, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %401, %399
  %405 = phi i64 [ %400, %399 ], [ %403, %401 ]
  store i64 %405, ptr %38, align 8, !tbaa !9
  %406 = load i64, ptr %37, align 8, !tbaa !9
  %407 = icmp sge i64 %406, 1
  br i1 %407, label %408, label %410

408:                                              ; preds = %404
  %409 = load i64, ptr %37, align 8, !tbaa !9
  br label %411

410:                                              ; preds = %404
  br label %411

411:                                              ; preds = %410, %408
  %412 = phi i64 [ %409, %408 ], [ 1, %410 ]
  store i64 %412, ptr %45, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %470, %411
  %414 = load i64, ptr %45, align 8, !tbaa !9
  %415 = load i64, ptr %38, align 8, !tbaa !9
  %416 = icmp sle i64 %414, %415
  br i1 %416, label %417, label %473

417:                                              ; preds = %413
  %418 = load i64, ptr %47, align 8, !tbaa !9
  %419 = load i64, ptr %44, align 8, !tbaa !9
  %420 = sub nsw i64 %418, %419
  %421 = load i64, ptr %45, align 8, !tbaa !9
  %422 = add nsw i64 %420, %421
  %423 = load i64, ptr %44, align 8, !tbaa !9
  %424 = load i64, ptr %32, align 8, !tbaa !9
  %425 = mul nsw i64 %423, %424
  %426 = add nsw i64 %422, %425
  store i64 %426, ptr %37, align 8, !tbaa !9
  %427 = load ptr, ptr %21, align 8, !tbaa !5
  %428 = load i64, ptr %37, align 8, !tbaa !9
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %427, i64 %428
  %430 = getelementptr inbounds %struct.doublecomplex, ptr %429, i32 0, i32 0
  %431 = load double, ptr %430, align 8, !tbaa !13
  store double %431, ptr %41, align 8, !tbaa !11
  %432 = load double, ptr %41, align 8, !tbaa !11
  %433 = fcmp oge double %432, 0.000000e+00
  br i1 %433, label %434, label %436

434:                                              ; preds = %417
  %435 = load double, ptr %41, align 8, !tbaa !11
  br label %439

436:                                              ; preds = %417
  %437 = load double, ptr %41, align 8, !tbaa !11
  %438 = fneg double %437
  br label %439

439:                                              ; preds = %436, %434
  %440 = phi double [ %435, %434 ], [ %438, %436 ]
  %441 = load ptr, ptr %21, align 8, !tbaa !5
  %442 = load i64, ptr %47, align 8, !tbaa !9
  %443 = load i64, ptr %44, align 8, !tbaa !9
  %444 = sub nsw i64 %442, %443
  %445 = load i64, ptr %45, align 8, !tbaa !9
  %446 = add nsw i64 %444, %445
  %447 = load i64, ptr %44, align 8, !tbaa !9
  %448 = load i64, ptr %32, align 8, !tbaa !9
  %449 = mul nsw i64 %447, %448
  %450 = add nsw i64 %446, %449
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %441, i64 %450
  %452 = call double @d_imag(ptr noundef %451)
  store double %452, ptr %42, align 8, !tbaa !11
  %453 = load double, ptr %42, align 8, !tbaa !11
  %454 = fcmp oge double %453, 0.000000e+00
  br i1 %454, label %455, label %457

455:                                              ; preds = %439
  %456 = load double, ptr %42, align 8, !tbaa !11
  br label %460

457:                                              ; preds = %439
  %458 = load double, ptr %42, align 8, !tbaa !11
  %459 = fneg double %458
  br label %460

460:                                              ; preds = %457, %455
  %461 = phi double [ %456, %455 ], [ %459, %457 ]
  %462 = fadd double %440, %461
  %463 = load ptr, ptr %26, align 8, !tbaa !5
  %464 = load i64, ptr %45, align 8, !tbaa !9
  %465 = getelementptr inbounds double, ptr %463, i64 %464
  %466 = load double, ptr %465, align 8, !tbaa !11
  %467 = fdiv double %462, %466
  %468 = load double, ptr %48, align 8, !tbaa !11
  %469 = fadd double %468, %467
  store double %469, ptr %48, align 8, !tbaa !11
  br label %470

470:                                              ; preds = %460
  %471 = load i64, ptr %45, align 8, !tbaa !9
  %472 = add nsw i64 %471, 1
  store i64 %472, ptr %45, align 8, !tbaa !9
  br label %413, !llvm.loop !19

473:                                              ; preds = %413
  br label %557

474:                                              ; preds = %382
  %475 = load i64, ptr %44, align 8, !tbaa !9
  %476 = load ptr, ptr %19, align 8, !tbaa !5
  %477 = load i64, ptr %476, align 8, !tbaa !9
  %478 = sub nsw i64 %475, %477
  store i64 %478, ptr %38, align 8, !tbaa !9
  %479 = load i64, ptr %44, align 8, !tbaa !9
  %480 = load ptr, ptr %20, align 8, !tbaa !5
  %481 = load i64, ptr %480, align 8, !tbaa !9
  %482 = add nsw i64 %479, %481
  store i64 %482, ptr %39, align 8, !tbaa !9
  %483 = load i64, ptr %39, align 8, !tbaa !9
  %484 = load ptr, ptr %18, align 8, !tbaa !5
  %485 = load i64, ptr %484, align 8, !tbaa !9
  %486 = icmp sle i64 %483, %485
  br i1 %486, label %487, label %489

487:                                              ; preds = %474
  %488 = load i64, ptr %39, align 8, !tbaa !9
  br label %492

489:                                              ; preds = %474
  %490 = load ptr, ptr %18, align 8, !tbaa !5
  %491 = load i64, ptr %490, align 8, !tbaa !9
  br label %492

492:                                              ; preds = %489, %487
  %493 = phi i64 [ %488, %487 ], [ %491, %489 ]
  store i64 %493, ptr %37, align 8, !tbaa !9
  %494 = load i64, ptr %38, align 8, !tbaa !9
  %495 = icmp sge i64 %494, 1
  br i1 %495, label %496, label %498

496:                                              ; preds = %492
  %497 = load i64, ptr %38, align 8, !tbaa !9
  br label %499

498:                                              ; preds = %492
  br label %499

499:                                              ; preds = %498, %496
  %500 = phi i64 [ %497, %496 ], [ 1, %498 ]
  store i64 %500, ptr %45, align 8, !tbaa !9
  br label %501

501:                                              ; preds = %553, %499
  %502 = load i64, ptr %45, align 8, !tbaa !9
  %503 = load i64, ptr %37, align 8, !tbaa !9
  %504 = icmp sle i64 %502, %503
  br i1 %504, label %505, label %556

505:                                              ; preds = %501
  %506 = load i64, ptr %47, align 8, !tbaa !9
  %507 = load i64, ptr %44, align 8, !tbaa !9
  %508 = sub nsw i64 %506, %507
  %509 = load i64, ptr %45, align 8, !tbaa !9
  %510 = add nsw i64 %508, %509
  %511 = load i64, ptr %44, align 8, !tbaa !9
  %512 = load i64, ptr %32, align 8, !tbaa !9
  %513 = mul nsw i64 %511, %512
  %514 = add nsw i64 %510, %513
  store i64 %514, ptr %38, align 8, !tbaa !9
  %515 = load ptr, ptr %21, align 8, !tbaa !5
  %516 = load i64, ptr %38, align 8, !tbaa !9
  %517 = getelementptr inbounds %struct.doublecomplex, ptr %515, i64 %516
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %517, i32 0, i32 0
  %519 = load double, ptr %518, align 8, !tbaa !13
  store double %519, ptr %41, align 8, !tbaa !11
  %520 = load double, ptr %41, align 8, !tbaa !11
  %521 = fcmp oge double %520, 0.000000e+00
  br i1 %521, label %522, label %524

522:                                              ; preds = %505
  %523 = load double, ptr %41, align 8, !tbaa !11
  br label %527

524:                                              ; preds = %505
  %525 = load double, ptr %41, align 8, !tbaa !11
  %526 = fneg double %525
  br label %527

527:                                              ; preds = %524, %522
  %528 = phi double [ %523, %522 ], [ %526, %524 ]
  %529 = load ptr, ptr %21, align 8, !tbaa !5
  %530 = load i64, ptr %47, align 8, !tbaa !9
  %531 = load i64, ptr %44, align 8, !tbaa !9
  %532 = sub nsw i64 %530, %531
  %533 = load i64, ptr %45, align 8, !tbaa !9
  %534 = add nsw i64 %532, %533
  %535 = load i64, ptr %44, align 8, !tbaa !9
  %536 = load i64, ptr %32, align 8, !tbaa !9
  %537 = mul nsw i64 %535, %536
  %538 = add nsw i64 %534, %537
  %539 = getelementptr inbounds %struct.doublecomplex, ptr %529, i64 %538
  %540 = call double @d_imag(ptr noundef %539)
  store double %540, ptr %42, align 8, !tbaa !11
  %541 = load double, ptr %42, align 8, !tbaa !11
  %542 = fcmp oge double %541, 0.000000e+00
  br i1 %542, label %543, label %545

543:                                              ; preds = %527
  %544 = load double, ptr %42, align 8, !tbaa !11
  br label %548

545:                                              ; preds = %527
  %546 = load double, ptr %42, align 8, !tbaa !11
  %547 = fneg double %546
  br label %548

548:                                              ; preds = %545, %543
  %549 = phi double [ %544, %543 ], [ %547, %545 ]
  %550 = fadd double %528, %549
  %551 = load double, ptr %48, align 8, !tbaa !11
  %552 = fadd double %551, %550
  store double %552, ptr %48, align 8, !tbaa !11
  br label %553

553:                                              ; preds = %548
  %554 = load i64, ptr %45, align 8, !tbaa !9
  %555 = add nsw i64 %554, 1
  store i64 %555, ptr %45, align 8, !tbaa !9
  br label %501, !llvm.loop !20

556:                                              ; preds = %501
  br label %557

557:                                              ; preds = %556, %473
  %558 = load double, ptr %48, align 8, !tbaa !11
  %559 = load ptr, ptr %30, align 8, !tbaa !5
  %560 = load i64, ptr %44, align 8, !tbaa !9
  %561 = getelementptr inbounds double, ptr %559, i64 %560
  store double %558, ptr %561, align 8, !tbaa !11
  %562 = load double, ptr %51, align 8, !tbaa !11
  %563 = load double, ptr %48, align 8, !tbaa !11
  %564 = fcmp oge double %562, %563
  br i1 %564, label %565, label %567

565:                                              ; preds = %557
  %566 = load double, ptr %51, align 8, !tbaa !11
  br label %569

567:                                              ; preds = %557
  %568 = load double, ptr %48, align 8, !tbaa !11
  br label %569

569:                                              ; preds = %567, %565
  %570 = phi double [ %566, %565 ], [ %568, %567 ]
  store double %570, ptr %51, align 8, !tbaa !11
  br label %571

571:                                              ; preds = %569
  %572 = load i64, ptr %44, align 8, !tbaa !9
  %573 = add nsw i64 %572, 1
  store i64 %573, ptr %44, align 8, !tbaa !9
  br label %378, !llvm.loop !21

574:                                              ; preds = %378
  br label %575

575:                                              ; preds = %574, %374
  %576 = load ptr, ptr %18, align 8, !tbaa !5
  %577 = load i64, ptr %576, align 8, !tbaa !9
  %578 = icmp eq i64 %577, 0
  br i1 %578, label %579, label %581

579:                                              ; preds = %575
  store double 1.000000e+00, ptr %40, align 8, !tbaa !11
  %580 = load double, ptr %40, align 8, !tbaa !11
  store double %580, ptr %16, align 8
  store i32 1, ptr %54, align 4
  br label %883

581:                                              ; preds = %575
  %582 = load double, ptr %51, align 8, !tbaa !11
  %583 = fcmp oeq double %582, 0.000000e+00
  br i1 %583, label %584, label %586

584:                                              ; preds = %581
  %585 = load double, ptr %40, align 8, !tbaa !11
  store double %585, ptr %16, align 8
  store i32 1, ptr %54, align 4
  br label %883

586:                                              ; preds = %581
  br label %587

587:                                              ; preds = %586
  store double 0.000000e+00, ptr %52, align 8, !tbaa !11
  store i64 0, ptr %49, align 8, !tbaa !9
  br label %588

588:                                              ; preds = %874, %587
  %589 = load ptr, ptr %18, align 8, !tbaa !5
  %590 = load ptr, ptr %29, align 8, !tbaa !5
  %591 = load ptr, ptr %18, align 8, !tbaa !5
  %592 = load i64, ptr %591, align 8, !tbaa !9
  %593 = add nsw i64 %592, 1
  %594 = getelementptr inbounds %struct.doublecomplex, ptr %590, i64 %593
  %595 = load ptr, ptr %29, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.doublecomplex, ptr %595, i64 1
  %597 = getelementptr inbounds [3 x i64], ptr %50, i64 0, i64 0
  %598 = call i32 @zlacn2_(ptr noundef %589, ptr noundef %594, ptr noundef %596, ptr noundef %52, ptr noundef %49, ptr noundef %597)
  %599 = load i64, ptr %49, align 8, !tbaa !9
  %600 = icmp ne i64 %599, 0
  br i1 %600, label %601, label %875

601:                                              ; preds = %588
  %602 = load i64, ptr %49, align 8, !tbaa !9
  %603 = icmp eq i64 %602, 2
  br i1 %603, label %604, label %739

604:                                              ; preds = %601
  %605 = load ptr, ptr %18, align 8, !tbaa !5
  %606 = load i64, ptr %605, align 8, !tbaa !9
  store i64 %606, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %607

607:                                              ; preds = %649, %604
  %608 = load i64, ptr %44, align 8, !tbaa !9
  %609 = load i64, ptr %36, align 8, !tbaa !9
  %610 = icmp sle i64 %608, %609
  br i1 %610, label %611, label %652

611:                                              ; preds = %607
  %612 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %612, ptr %37, align 8, !tbaa !9
  %613 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %613, ptr %38, align 8, !tbaa !9
  %614 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %614, ptr %39, align 8, !tbaa !9
  %615 = load ptr, ptr %30, align 8, !tbaa !5
  %616 = load i64, ptr %39, align 8, !tbaa !9
  %617 = getelementptr inbounds double, ptr %615, i64 %616
  %618 = load double, ptr %617, align 8, !tbaa !11
  %619 = load ptr, ptr %29, align 8, !tbaa !5
  %620 = load i64, ptr %38, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.doublecomplex, ptr %619, i64 %620
  %622 = getelementptr inbounds %struct.doublecomplex, ptr %621, i32 0, i32 0
  %623 = load double, ptr %622, align 8, !tbaa !13
  %624 = fmul double %618, %623
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %624, ptr %625, align 8, !tbaa !13
  %626 = load ptr, ptr %30, align 8, !tbaa !5
  %627 = load i64, ptr %39, align 8, !tbaa !9
  %628 = getelementptr inbounds double, ptr %626, i64 %627
  %629 = load double, ptr %628, align 8, !tbaa !11
  %630 = load ptr, ptr %29, align 8, !tbaa !5
  %631 = load i64, ptr %38, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %630, i64 %631
  %633 = getelementptr inbounds %struct.doublecomplex, ptr %632, i32 0, i32 1
  %634 = load double, ptr %633, align 8, !tbaa !22
  %635 = fmul double %629, %634
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %635, ptr %636, align 8, !tbaa !22
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %638 = load double, ptr %637, align 8, !tbaa !13
  %639 = load ptr, ptr %29, align 8, !tbaa !5
  %640 = load i64, ptr %37, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %639, i64 %640
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %641, i32 0, i32 0
  store double %638, ptr %642, align 8, !tbaa !13
  %643 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %644 = load double, ptr %643, align 8, !tbaa !22
  %645 = load ptr, ptr %29, align 8, !tbaa !5
  %646 = load i64, ptr %37, align 8, !tbaa !9
  %647 = getelementptr inbounds %struct.doublecomplex, ptr %645, i64 %646
  %648 = getelementptr inbounds %struct.doublecomplex, ptr %647, i32 0, i32 1
  store double %644, ptr %648, align 8, !tbaa !22
  br label %649

649:                                              ; preds = %611
  %650 = load i64, ptr %44, align 8, !tbaa !9
  %651 = add nsw i64 %650, 1
  store i64 %651, ptr %44, align 8, !tbaa !9
  br label %607, !llvm.loop !23

652:                                              ; preds = %607
  %653 = load i64, ptr %53, align 8, !tbaa !9
  %654 = icmp ne i64 %653, 0
  br i1 %654, label %655, label %670

655:                                              ; preds = %652
  %656 = load ptr, ptr %18, align 8, !tbaa !5
  %657 = load ptr, ptr %19, align 8, !tbaa !5
  %658 = load ptr, ptr %20, align 8, !tbaa !5
  %659 = load ptr, ptr %23, align 8, !tbaa !5
  %660 = load i64, ptr %35, align 8, !tbaa !9
  %661 = getelementptr inbounds %struct.doublecomplex, ptr %659, i64 %660
  %662 = load ptr, ptr %24, align 8, !tbaa !5
  %663 = load ptr, ptr %25, align 8, !tbaa !5
  %664 = getelementptr inbounds i64, ptr %663, i64 1
  %665 = load ptr, ptr %29, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.doublecomplex, ptr %665, i64 1
  %667 = load ptr, ptr %18, align 8, !tbaa !5
  %668 = load ptr, ptr %28, align 8, !tbaa !5
  %669 = call i32 @zgbtrs_(ptr noundef @.str.4, ptr noundef %656, ptr noundef %657, ptr noundef %658, ptr noundef @c__1, ptr noundef %661, ptr noundef %662, ptr noundef %664, ptr noundef %666, ptr noundef %667, ptr noundef %668)
  br label %685

670:                                              ; preds = %652
  %671 = load ptr, ptr %18, align 8, !tbaa !5
  %672 = load ptr, ptr %19, align 8, !tbaa !5
  %673 = load ptr, ptr %20, align 8, !tbaa !5
  %674 = load ptr, ptr %23, align 8, !tbaa !5
  %675 = load i64, ptr %35, align 8, !tbaa !9
  %676 = getelementptr inbounds %struct.doublecomplex, ptr %674, i64 %675
  %677 = load ptr, ptr %24, align 8, !tbaa !5
  %678 = load ptr, ptr %25, align 8, !tbaa !5
  %679 = getelementptr inbounds i64, ptr %678, i64 1
  %680 = load ptr, ptr %29, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.doublecomplex, ptr %680, i64 1
  %682 = load ptr, ptr %18, align 8, !tbaa !5
  %683 = load ptr, ptr %28, align 8, !tbaa !5
  %684 = call i32 @zgbtrs_(ptr noundef @.str.5, ptr noundef %671, ptr noundef %672, ptr noundef %673, ptr noundef @c__1, ptr noundef %676, ptr noundef %677, ptr noundef %679, ptr noundef %681, ptr noundef %682, ptr noundef %683)
  br label %685

685:                                              ; preds = %670, %655
  %686 = load ptr, ptr %27, align 8, !tbaa !5
  %687 = load i64, ptr %686, align 8, !tbaa !9
  %688 = icmp ne i64 %687, 0
  br i1 %688, label %689, label %738

689:                                              ; preds = %685
  %690 = load ptr, ptr %18, align 8, !tbaa !5
  %691 = load i64, ptr %690, align 8, !tbaa !9
  store i64 %691, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %692

692:                                              ; preds = %734, %689
  %693 = load i64, ptr %44, align 8, !tbaa !9
  %694 = load i64, ptr %36, align 8, !tbaa !9
  %695 = icmp sle i64 %693, %694
  br i1 %695, label %696, label %737

696:                                              ; preds = %692
  %697 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %697, ptr %37, align 8, !tbaa !9
  %698 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %698, ptr %38, align 8, !tbaa !9
  %699 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %699, ptr %39, align 8, !tbaa !9
  %700 = load ptr, ptr %26, align 8, !tbaa !5
  %701 = load i64, ptr %39, align 8, !tbaa !9
  %702 = getelementptr inbounds double, ptr %700, i64 %701
  %703 = load double, ptr %702, align 8, !tbaa !11
  %704 = load ptr, ptr %29, align 8, !tbaa !5
  %705 = load i64, ptr %38, align 8, !tbaa !9
  %706 = getelementptr inbounds %struct.doublecomplex, ptr %704, i64 %705
  %707 = getelementptr inbounds %struct.doublecomplex, ptr %706, i32 0, i32 0
  %708 = load double, ptr %707, align 8, !tbaa !13
  %709 = fmul double %703, %708
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %709, ptr %710, align 8, !tbaa !13
  %711 = load ptr, ptr %26, align 8, !tbaa !5
  %712 = load i64, ptr %39, align 8, !tbaa !9
  %713 = getelementptr inbounds double, ptr %711, i64 %712
  %714 = load double, ptr %713, align 8, !tbaa !11
  %715 = load ptr, ptr %29, align 8, !tbaa !5
  %716 = load i64, ptr %38, align 8, !tbaa !9
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %715, i64 %716
  %718 = getelementptr inbounds %struct.doublecomplex, ptr %717, i32 0, i32 1
  %719 = load double, ptr %718, align 8, !tbaa !22
  %720 = fmul double %714, %719
  %721 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %720, ptr %721, align 8, !tbaa !22
  %722 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %723 = load double, ptr %722, align 8, !tbaa !13
  %724 = load ptr, ptr %29, align 8, !tbaa !5
  %725 = load i64, ptr %37, align 8, !tbaa !9
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %724, i64 %725
  %727 = getelementptr inbounds %struct.doublecomplex, ptr %726, i32 0, i32 0
  store double %723, ptr %727, align 8, !tbaa !13
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %729 = load double, ptr %728, align 8, !tbaa !22
  %730 = load ptr, ptr %29, align 8, !tbaa !5
  %731 = load i64, ptr %37, align 8, !tbaa !9
  %732 = getelementptr inbounds %struct.doublecomplex, ptr %730, i64 %731
  %733 = getelementptr inbounds %struct.doublecomplex, ptr %732, i32 0, i32 1
  store double %729, ptr %733, align 8, !tbaa !22
  br label %734

734:                                              ; preds = %696
  %735 = load i64, ptr %44, align 8, !tbaa !9
  %736 = add nsw i64 %735, 1
  store i64 %736, ptr %44, align 8, !tbaa !9
  br label %692, !llvm.loop !24

737:                                              ; preds = %692
  br label %738

738:                                              ; preds = %737, %685
  br label %874

739:                                              ; preds = %601
  %740 = load ptr, ptr %27, align 8, !tbaa !5
  %741 = load i64, ptr %740, align 8, !tbaa !9
  %742 = icmp ne i64 %741, 0
  br i1 %742, label %743, label %792

743:                                              ; preds = %739
  %744 = load ptr, ptr %18, align 8, !tbaa !5
  %745 = load i64, ptr %744, align 8, !tbaa !9
  store i64 %745, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %746

746:                                              ; preds = %788, %743
  %747 = load i64, ptr %44, align 8, !tbaa !9
  %748 = load i64, ptr %36, align 8, !tbaa !9
  %749 = icmp sle i64 %747, %748
  br i1 %749, label %750, label %791

750:                                              ; preds = %746
  %751 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %751, ptr %37, align 8, !tbaa !9
  %752 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %752, ptr %38, align 8, !tbaa !9
  %753 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %753, ptr %39, align 8, !tbaa !9
  %754 = load ptr, ptr %26, align 8, !tbaa !5
  %755 = load i64, ptr %39, align 8, !tbaa !9
  %756 = getelementptr inbounds double, ptr %754, i64 %755
  %757 = load double, ptr %756, align 8, !tbaa !11
  %758 = load ptr, ptr %29, align 8, !tbaa !5
  %759 = load i64, ptr %38, align 8, !tbaa !9
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %758, i64 %759
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %760, i32 0, i32 0
  %762 = load double, ptr %761, align 8, !tbaa !13
  %763 = fmul double %757, %762
  %764 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %763, ptr %764, align 8, !tbaa !13
  %765 = load ptr, ptr %26, align 8, !tbaa !5
  %766 = load i64, ptr %39, align 8, !tbaa !9
  %767 = getelementptr inbounds double, ptr %765, i64 %766
  %768 = load double, ptr %767, align 8, !tbaa !11
  %769 = load ptr, ptr %29, align 8, !tbaa !5
  %770 = load i64, ptr %38, align 8, !tbaa !9
  %771 = getelementptr inbounds %struct.doublecomplex, ptr %769, i64 %770
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %771, i32 0, i32 1
  %773 = load double, ptr %772, align 8, !tbaa !22
  %774 = fmul double %768, %773
  %775 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %774, ptr %775, align 8, !tbaa !22
  %776 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %777 = load double, ptr %776, align 8, !tbaa !13
  %778 = load ptr, ptr %29, align 8, !tbaa !5
  %779 = load i64, ptr %37, align 8, !tbaa !9
  %780 = getelementptr inbounds %struct.doublecomplex, ptr %778, i64 %779
  %781 = getelementptr inbounds %struct.doublecomplex, ptr %780, i32 0, i32 0
  store double %777, ptr %781, align 8, !tbaa !13
  %782 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %783 = load double, ptr %782, align 8, !tbaa !22
  %784 = load ptr, ptr %29, align 8, !tbaa !5
  %785 = load i64, ptr %37, align 8, !tbaa !9
  %786 = getelementptr inbounds %struct.doublecomplex, ptr %784, i64 %785
  %787 = getelementptr inbounds %struct.doublecomplex, ptr %786, i32 0, i32 1
  store double %783, ptr %787, align 8, !tbaa !22
  br label %788

788:                                              ; preds = %750
  %789 = load i64, ptr %44, align 8, !tbaa !9
  %790 = add nsw i64 %789, 1
  store i64 %790, ptr %44, align 8, !tbaa !9
  br label %746, !llvm.loop !25

791:                                              ; preds = %746
  br label %792

792:                                              ; preds = %791, %739
  %793 = load i64, ptr %53, align 8, !tbaa !9
  %794 = icmp ne i64 %793, 0
  br i1 %794, label %795, label %810

795:                                              ; preds = %792
  %796 = load ptr, ptr %18, align 8, !tbaa !5
  %797 = load ptr, ptr %19, align 8, !tbaa !5
  %798 = load ptr, ptr %20, align 8, !tbaa !5
  %799 = load ptr, ptr %23, align 8, !tbaa !5
  %800 = load i64, ptr %35, align 8, !tbaa !9
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %799, i64 %800
  %802 = load ptr, ptr %24, align 8, !tbaa !5
  %803 = load ptr, ptr %25, align 8, !tbaa !5
  %804 = getelementptr inbounds i64, ptr %803, i64 1
  %805 = load ptr, ptr %29, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.doublecomplex, ptr %805, i64 1
  %807 = load ptr, ptr %18, align 8, !tbaa !5
  %808 = load ptr, ptr %28, align 8, !tbaa !5
  %809 = call i32 @zgbtrs_(ptr noundef @.str.5, ptr noundef %796, ptr noundef %797, ptr noundef %798, ptr noundef @c__1, ptr noundef %801, ptr noundef %802, ptr noundef %804, ptr noundef %806, ptr noundef %807, ptr noundef %808)
  br label %825

810:                                              ; preds = %792
  %811 = load ptr, ptr %18, align 8, !tbaa !5
  %812 = load ptr, ptr %19, align 8, !tbaa !5
  %813 = load ptr, ptr %20, align 8, !tbaa !5
  %814 = load ptr, ptr %23, align 8, !tbaa !5
  %815 = load i64, ptr %35, align 8, !tbaa !9
  %816 = getelementptr inbounds %struct.doublecomplex, ptr %814, i64 %815
  %817 = load ptr, ptr %24, align 8, !tbaa !5
  %818 = load ptr, ptr %25, align 8, !tbaa !5
  %819 = getelementptr inbounds i64, ptr %818, i64 1
  %820 = load ptr, ptr %29, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.doublecomplex, ptr %820, i64 1
  %822 = load ptr, ptr %18, align 8, !tbaa !5
  %823 = load ptr, ptr %28, align 8, !tbaa !5
  %824 = call i32 @zgbtrs_(ptr noundef @.str.4, ptr noundef %811, ptr noundef %812, ptr noundef %813, ptr noundef @c__1, ptr noundef %816, ptr noundef %817, ptr noundef %819, ptr noundef %821, ptr noundef %822, ptr noundef %823)
  br label %825

825:                                              ; preds = %810, %795
  %826 = load ptr, ptr %18, align 8, !tbaa !5
  %827 = load i64, ptr %826, align 8, !tbaa !9
  store i64 %827, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %828

828:                                              ; preds = %870, %825
  %829 = load i64, ptr %44, align 8, !tbaa !9
  %830 = load i64, ptr %36, align 8, !tbaa !9
  %831 = icmp sle i64 %829, %830
  br i1 %831, label %832, label %873

832:                                              ; preds = %828
  %833 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %833, ptr %37, align 8, !tbaa !9
  %834 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %834, ptr %38, align 8, !tbaa !9
  %835 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %835, ptr %39, align 8, !tbaa !9
  %836 = load ptr, ptr %30, align 8, !tbaa !5
  %837 = load i64, ptr %39, align 8, !tbaa !9
  %838 = getelementptr inbounds double, ptr %836, i64 %837
  %839 = load double, ptr %838, align 8, !tbaa !11
  %840 = load ptr, ptr %29, align 8, !tbaa !5
  %841 = load i64, ptr %38, align 8, !tbaa !9
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %840, i64 %841
  %843 = getelementptr inbounds %struct.doublecomplex, ptr %842, i32 0, i32 0
  %844 = load double, ptr %843, align 8, !tbaa !13
  %845 = fmul double %839, %844
  %846 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %845, ptr %846, align 8, !tbaa !13
  %847 = load ptr, ptr %30, align 8, !tbaa !5
  %848 = load i64, ptr %39, align 8, !tbaa !9
  %849 = getelementptr inbounds double, ptr %847, i64 %848
  %850 = load double, ptr %849, align 8, !tbaa !11
  %851 = load ptr, ptr %29, align 8, !tbaa !5
  %852 = load i64, ptr %38, align 8, !tbaa !9
  %853 = getelementptr inbounds %struct.doublecomplex, ptr %851, i64 %852
  %854 = getelementptr inbounds %struct.doublecomplex, ptr %853, i32 0, i32 1
  %855 = load double, ptr %854, align 8, !tbaa !22
  %856 = fmul double %850, %855
  %857 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %856, ptr %857, align 8, !tbaa !22
  %858 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %859 = load double, ptr %858, align 8, !tbaa !13
  %860 = load ptr, ptr %29, align 8, !tbaa !5
  %861 = load i64, ptr %37, align 8, !tbaa !9
  %862 = getelementptr inbounds %struct.doublecomplex, ptr %860, i64 %861
  %863 = getelementptr inbounds %struct.doublecomplex, ptr %862, i32 0, i32 0
  store double %859, ptr %863, align 8, !tbaa !13
  %864 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %865 = load double, ptr %864, align 8, !tbaa !22
  %866 = load ptr, ptr %29, align 8, !tbaa !5
  %867 = load i64, ptr %37, align 8, !tbaa !9
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %866, i64 %867
  %869 = getelementptr inbounds %struct.doublecomplex, ptr %868, i32 0, i32 1
  store double %865, ptr %869, align 8, !tbaa !22
  br label %870

870:                                              ; preds = %832
  %871 = load i64, ptr %44, align 8, !tbaa !9
  %872 = add nsw i64 %871, 1
  store i64 %872, ptr %44, align 8, !tbaa !9
  br label %828, !llvm.loop !26

873:                                              ; preds = %828
  br label %874

874:                                              ; preds = %873, %738
  br label %588

875:                                              ; preds = %588
  %876 = load double, ptr %52, align 8, !tbaa !11
  %877 = fcmp une double %876, 0.000000e+00
  br i1 %877, label %878, label %881

878:                                              ; preds = %875
  %879 = load double, ptr %52, align 8, !tbaa !11
  %880 = fdiv double 1.000000e+00, %879
  store double %880, ptr %40, align 8, !tbaa !11
  br label %881

881:                                              ; preds = %878, %875
  %882 = load double, ptr %40, align 8, !tbaa !11
  store double %882, ptr %16, align 8
  store i32 1, ptr %54, align 4
  br label %883

883:                                              ; preds = %881, %584, %579, %160
  call void @llvm.lifetime.end.p0(i64 8, 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 24, 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 16, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  %884 = load double, ptr %16, align 8
  ret double %884
}

; 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 @d_imag(ptr noundef) #2

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

declare i32 @zgbtrs_(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 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !12, i64 0}
!14 = !{!"", !12, i64 0, !12, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = !{!14, !12, i64 8}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}


; 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 [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local double @zla_gbrcond_c__(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr nocapture noundef readonly %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr nocapture noundef readonly %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr noundef %12, ptr nocapture noundef %13, i64 noundef %14) local_unnamed_addr #0 {
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca [3 x i64], align 16
  %19 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  %20 = load i64, ptr %5, align 8, !tbaa !5
  %21 = xor i64 %20, -1
  %22 = getelementptr inbounds %struct.doublecomplex, ptr %4, i64 %21
  %23 = getelementptr inbounds i8, ptr %9, i64 -8
  %24 = getelementptr inbounds i8, ptr %12, i64 -16
  %25 = getelementptr inbounds i8, ptr %13, i64 -8
  store i64 0, ptr %11, align 8, !tbaa !5
  %26 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %.not = icmp eq i64 %26, 0
  br i1 %.not, label %27, label %31

27:                                               ; preds = %15
  %28 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %.not361 = icmp eq i64 %28, 0
  br i1 %.not361, label %29, label %31

29:                                               ; preds = %27
  %30 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not362 = icmp eq i64 %30, 0
  br i1 %.not362, label %.thread.sink.split, label %31

31:                                               ; preds = %29, %27, %15
  %32 = load i64, ptr %1, align 8, !tbaa !5
  %33 = icmp slt i64 %32, 0
  br i1 %33, label %.thread.sink.split, label %34

34:                                               ; preds = %31
  %35 = load i64, ptr %2, align 8, !tbaa !5
  %or.cond = icmp ult i64 %35, %32
  br i1 %or.cond, label %36, label %.thread.sink.split

36:                                               ; preds = %34
  %37 = load i64, ptr %3, align 8, !tbaa !5
  %or.cond387 = icmp ult i64 %37, %32
  br i1 %or.cond387, label %38, label %.thread.sink.split

38:                                               ; preds = %36
  %39 = load i64, ptr %5, align 8, !tbaa !5
  %40 = add nuw nsw i64 %37, %35
  %.not365 = icmp sgt i64 %39, %40
  br i1 %.not365, label %41, label %.thread.sink.split

41:                                               ; preds = %38
  %42 = load i64, ptr %7, align 8, !tbaa !5
  %43 = shl nuw i64 %35, 1
  %44 = add nsw i64 %37, %43
  %.not366 = icmp sgt i64 %42, %44
  br i1 %.not366, label %45, label %.thread.sink.split

45:                                               ; preds = %41
  %.pr = load i64, ptr %11, align 8, !tbaa !5
  %.not367 = icmp eq i64 %.pr, 0
  br i1 %.not367, label %49, label %.thread

.thread.sink.split:                               ; preds = %41, %38, %36, %34, %31, %29
  %.sink = phi i64 [ -1, %29 ], [ -2, %31 ], [ -3, %34 ], [ -4, %36 ], [ -6, %38 ], [ -8, %41 ]
  store i64 %.sink, ptr %11, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %45
  %46 = phi i64 [ %.pr, %45 ], [ %.sink, %.thread.sink.split ]
  %47 = sub nsw i64 0, %46
  store i64 %47, ptr %16, align 8, !tbaa !5
  %48 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %16) #4
  br label %299

49:                                               ; preds = %45
  %50 = add nuw nsw i64 %37, 1
  %51 = add nuw nsw i64 %35, 1
  br i1 %.not, label %.lr.ph430, label %.lr.ph412

.lr.ph412:                                        ; preds = %49, %.loopexit397
  %.0331411 = phi double [ %100, %.loopexit397 ], [ 0.000000e+00, %49 ]
  %.0339409 = phi i64 [ %101, %.loopexit397 ], [ 1, %49 ]
  %52 = load i64, ptr %10, align 8, !tbaa !5
  %.not382 = icmp eq i64 %52, 0
  %53 = load i64, ptr %2, align 8, !tbaa !5
  %54 = sub nsw i64 %.0339409, %53
  %55 = load i64, ptr %3, align 8, !tbaa !5
  %56 = add nsw i64 %55, %.0339409
  %57 = load i64, ptr %1, align 8, !tbaa !5
  %.388 = tail call i64 @llvm.smin.i64(i64 %56, i64 %57)
  %58 = tail call i64 @llvm.smax.i64(i64 %54, i64 1)
  %.not384403 = icmp sgt i64 %58, %.388
  br i1 %.not382, label %80, label %59

59:                                               ; preds = %.lr.ph412
  br i1 %.not384403, label %.loopexit397, label %.lr.ph

.lr.ph:                                           ; preds = %59
  %60 = add nsw i64 %.0339409, %50
  br label %61

61:                                               ; preds = %.lr.ph, %61
  %.0332402 = phi double [ 0.000000e+00, %.lr.ph ], [ %78, %61 ]
  %.0335401 = phi i64 [ %58, %.lr.ph ], [ %79, %61 ]
  %62 = sub i64 %60, %.0335401
  %63 = mul nsw i64 %.0335401, %20
  %64 = getelementptr %struct.doublecomplex, ptr %22, i64 %62
  %65 = getelementptr %struct.doublecomplex, ptr %64, i64 %63
  %66 = load double, ptr %65, align 8, !tbaa !9
  %67 = tail call double @d_imag(ptr noundef nonnull %65) #4
  %68 = insertelement <2 x double> poison, double %66, i64 0
  %69 = insertelement <2 x double> %68, double %67, i64 1
  %70 = fcmp oge <2 x double> %69, zeroinitializer
  %71 = fneg <2 x double> %69
  %72 = select <2 x i1> %70, <2 x double> %69, <2 x double> %71
  %shift = shufflevector <2 x double> %72, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %73 = fadd <2 x double> %72, %shift
  %74 = extractelement <2 x double> %73, i64 0
  %75 = getelementptr inbounds double, ptr %23, i64 %.0335401
  %76 = load double, ptr %75, align 8, !tbaa !12
  %77 = fdiv double %74, %76
  %78 = fadd double %.0332402, %77
  %79 = add nuw nsw i64 %.0335401, 1
  %.not386.not = icmp slt i64 %.0335401, %.388
  br i1 %.not386.not, label %61, label %.loopexit397, !llvm.loop !13

80:                                               ; preds = %.lr.ph412
  br i1 %.not384403, label %.loopexit397, label %.lr.ph406

.lr.ph406:                                        ; preds = %80
  %81 = add nsw i64 %.0339409, %50
  br label %82

82:                                               ; preds = %.lr.ph406, %82
  %.1333405 = phi double [ 0.000000e+00, %.lr.ph406 ], [ %96, %82 ]
  %.1336404 = phi i64 [ %58, %.lr.ph406 ], [ %97, %82 ]
  %83 = sub i64 %81, %.1336404
  %84 = mul nsw i64 %.1336404, %20
  %85 = getelementptr %struct.doublecomplex, ptr %22, i64 %83
  %86 = getelementptr %struct.doublecomplex, ptr %85, i64 %84
  %87 = load double, ptr %86, align 8, !tbaa !9
  %88 = tail call double @d_imag(ptr noundef nonnull %86) #4
  %89 = insertelement <2 x double> poison, double %87, i64 0
  %90 = insertelement <2 x double> %89, double %88, i64 1
  %91 = fcmp oge <2 x double> %90, zeroinitializer
  %92 = fneg <2 x double> %90
  %93 = select <2 x i1> %91, <2 x double> %90, <2 x double> %92
  %shift555 = shufflevector <2 x double> %93, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %94 = fadd <2 x double> %93, %shift555
  %95 = extractelement <2 x double> %94, i64 0
  %96 = fadd double %.1333405, %95
  %97 = add nuw nsw i64 %.1336404, 1
  %.not384.not = icmp slt i64 %.1336404, %.388
  br i1 %.not384.not, label %82, label %.loopexit397, !llvm.loop !15

.loopexit397:                                     ; preds = %61, %82, %59, %80
  %.2334 = phi double [ 0.000000e+00, %80 ], [ 0.000000e+00, %59 ], [ %96, %82 ], [ %78, %61 ]
  %98 = getelementptr inbounds double, ptr %25, i64 %.0339409
  store double %.2334, ptr %98, align 8, !tbaa !12
  %99 = fcmp oge double %.0331411, %.2334
  %100 = select i1 %99, double %.0331411, double %.2334
  %101 = add nuw i64 %.0339409, 1
  %exitcond.not = icmp eq i64 %.0339409, %32
  br i1 %exitcond.not, label %.loopexit396, label %.lr.ph412, !llvm.loop !16

.lr.ph430:                                        ; preds = %49, %.loopexit394
  %.1429 = phi double [ %146, %.loopexit394 ], [ 0.000000e+00, %49 ]
  %.1340427 = phi i64 [ %147, %.loopexit394 ], [ 1, %49 ]
  %102 = load i64, ptr %10, align 8, !tbaa !5
  %.not369 = icmp eq i64 %102, 0
  %103 = load i64, ptr %2, align 8, !tbaa !5
  %104 = sub nsw i64 %.1340427, %103
  %105 = load i64, ptr %3, align 8, !tbaa !5
  %106 = add nsw i64 %105, %.1340427
  %107 = load i64, ptr %1, align 8, !tbaa !5
  %.390 = tail call i64 @llvm.smin.i64(i64 %106, i64 %107)
  %108 = tail call i64 @llvm.smax.i64(i64 %104, i64 1)
  %.not371419 = icmp sgt i64 %108, %.390
  br i1 %.not369, label %128, label %109

109:                                              ; preds = %.lr.ph430
  br i1 %.not371419, label %.loopexit394, label %.lr.ph417

.lr.ph417:                                        ; preds = %109
  %110 = sub nsw i64 %51, %.1340427
  %111 = mul nsw i64 %.1340427, %20
  %112 = getelementptr %struct.doublecomplex, ptr %22, i64 %110
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %112, i64 %111
  br label %113

113:                                              ; preds = %.lr.ph417, %113
  %.3416 = phi double [ 0.000000e+00, %.lr.ph417 ], [ %126, %113 ]
  %.2337415 = phi i64 [ %108, %.lr.ph417 ], [ %127, %113 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.2337415
  %114 = load double, ptr %gep, align 8, !tbaa !9
  %115 = tail call double @d_imag(ptr noundef nonnull %gep) #4
  %116 = insertelement <2 x double> poison, double %114, i64 0
  %117 = insertelement <2 x double> %116, double %115, i64 1
  %118 = fcmp oge <2 x double> %117, zeroinitializer
  %119 = fneg <2 x double> %117
  %120 = select <2 x i1> %118, <2 x double> %117, <2 x double> %119
  %shift556 = shufflevector <2 x double> %120, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %121 = fadd <2 x double> %120, %shift556
  %122 = extractelement <2 x double> %121, i64 0
  %123 = getelementptr inbounds double, ptr %23, i64 %.2337415
  %124 = load double, ptr %123, align 8, !tbaa !12
  %125 = fdiv double %122, %124
  %126 = fadd double %.3416, %125
  %127 = add nuw nsw i64 %.2337415, 1
  %.not373.not = icmp slt i64 %.2337415, %.390
  br i1 %.not373.not, label %113, label %.loopexit394, !llvm.loop !17

128:                                              ; preds = %.lr.ph430
  br i1 %.not371419, label %.loopexit394, label %.lr.ph422

.lr.ph422:                                        ; preds = %128
  %129 = sub nsw i64 %51, %.1340427
  %130 = mul nsw i64 %.1340427, %20
  %131 = getelementptr %struct.doublecomplex, ptr %22, i64 %129
  %invariant.gep424 = getelementptr %struct.doublecomplex, ptr %131, i64 %130
  br label %132

132:                                              ; preds = %.lr.ph422, %132
  %.4421 = phi double [ 0.000000e+00, %.lr.ph422 ], [ %142, %132 ]
  %.3338420 = phi i64 [ %108, %.lr.ph422 ], [ %143, %132 ]
  %gep425 = getelementptr %struct.doublecomplex, ptr %invariant.gep424, i64 %.3338420
  %133 = load double, ptr %gep425, align 8, !tbaa !9
  %134 = tail call double @d_imag(ptr noundef nonnull %gep425) #4
  %135 = insertelement <2 x double> poison, double %133, i64 0
  %136 = insertelement <2 x double> %135, double %134, i64 1
  %137 = fcmp oge <2 x double> %136, zeroinitializer
  %138 = fneg <2 x double> %136
  %139 = select <2 x i1> %137, <2 x double> %136, <2 x double> %138
  %shift557 = shufflevector <2 x double> %139, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %140 = fadd <2 x double> %139, %shift557
  %141 = extractelement <2 x double> %140, i64 0
  %142 = fadd double %.4421, %141
  %143 = add nuw nsw i64 %.3338420, 1
  %.not371.not = icmp slt i64 %.3338420, %.390
  br i1 %.not371.not, label %132, label %.loopexit394, !llvm.loop !18

.loopexit394:                                     ; preds = %113, %132, %109, %128
  %.5 = phi double [ 0.000000e+00, %128 ], [ 0.000000e+00, %109 ], [ %142, %132 ], [ %126, %113 ]
  %144 = getelementptr inbounds double, ptr %25, i64 %.1340427
  store double %.5, ptr %144, align 8, !tbaa !12
  %145 = fcmp oge double %.1429, %.5
  %146 = select i1 %145, double %.1429, double %.5
  %147 = add nuw i64 %.1340427, 1
  %exitcond456.not = icmp eq i64 %.1340427, %32
  br i1 %exitcond456.not, label %.loopexit396, label %.lr.ph430, !llvm.loop !19

.loopexit396:                                     ; preds = %.loopexit397, %.loopexit394
  %.2 = phi double [ %146, %.loopexit394 ], [ %100, %.loopexit397 ]
  %148 = load i64, ptr %1, align 8, !tbaa !5
  %149 = icmp eq i64 %148, 0
  br i1 %149, label %299, label %150

150:                                              ; preds = %.loopexit396
  %151 = fcmp oeq double %.2, 0.000000e+00
  br i1 %151, label %299, label %152

152:                                              ; preds = %150
  store double 0.000000e+00, ptr %19, align 8, !tbaa !12
  store i64 0, ptr %17, align 8, !tbaa !5
  %.str.5..str.4 = select i1 %.not, ptr @.str.5, ptr @.str.4
  %.str.4..str.5 = select i1 %.not, ptr @.str.4, ptr @.str.5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %152
  %153 = phi i64 [ %148, %152 ], [ %.be, %.loopexit.backedge ]
  %154 = getelementptr %struct.doublecomplex, ptr %12, i64 %153
  %155 = call i32 @zlacn2_(ptr noundef nonnull %1, ptr noundef %154, ptr noundef %12, ptr noundef nonnull %19, ptr noundef nonnull %17, ptr noundef nonnull %18) #4
  %156 = load i64, ptr %17, align 8, !tbaa !5
  switch i64 %156, label %225 [
    i64 0, label %295
    i64 2, label %157
  ]

157:                                              ; preds = %.loopexit
  %158 = load i64, ptr %1, align 8, !tbaa !5
  %.not379432 = icmp slt i64 %158, 1
  br i1 %.not379432, label %._crit_edge, label %.lr.ph434.preheader

.lr.ph434.preheader:                              ; preds = %157
  %min.iters.check539 = icmp eq i64 %158, 1
  br i1 %min.iters.check539, label %.lr.ph434.preheader562, label %vector.memcheck531

vector.memcheck531:                               ; preds = %.lr.ph434.preheader
  %159 = shl i64 %158, 4
  %scevgep532 = getelementptr i8, ptr %12, i64 %159
  %160 = shl i64 %158, 3
  %scevgep533 = getelementptr i8, ptr %13, i64 %160
  %bound0534 = icmp ugt ptr %scevgep533, %12
  %bound1535 = icmp ugt ptr %scevgep532, %13
  %found.conflict536 = and i1 %bound0534, %bound1535
  br i1 %found.conflict536, label %.lr.ph434.preheader562, label %vector.ph540

vector.ph540:                                     ; preds = %vector.memcheck531
  %n.vec542 = and i64 %158, 9223372036854775806
  %ind.end543 = or i64 %158, 1
  br label %vector.body545

vector.body545:                                   ; preds = %vector.body545, %vector.ph540
  %index546 = phi i64 [ 0, %vector.ph540 ], [ %index.next553, %vector.body545 ]
  %161 = getelementptr double, ptr %13, i64 %index546
  %wide.load548 = load <2 x double>, ptr %161, align 8, !tbaa !12, !alias.scope !20
  %162 = getelementptr %struct.doublecomplex, ptr %12, i64 %index546
  %wide.vec549 = load <4 x double>, ptr %162, align 8, !tbaa !12
  %strided.vec550 = shufflevector <4 x double> %wide.vec549, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec551 = shufflevector <4 x double> %wide.vec549, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %163 = fmul <2 x double> %wide.load548, %strided.vec550
  %164 = fmul <2 x double> %wide.load548, %strided.vec551
  %interleaved.vec552 = shufflevector <2 x double> %163, <2 x double> %164, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec552, ptr %162, align 8, !tbaa !12
  %index.next553 = add nuw i64 %index546, 2
  %165 = icmp eq i64 %index.next553, %n.vec542
  br i1 %165, label %middle.block537, label %vector.body545, !llvm.loop !23

middle.block537:                                  ; preds = %vector.body545
  %cmp.n554 = icmp eq i64 %158, %n.vec542
  br i1 %cmp.n554, label %._crit_edge, label %.lr.ph434.preheader562

.lr.ph434.preheader562:                           ; preds = %middle.block537, %vector.memcheck531, %.lr.ph434.preheader
  %.2341433.ph = phi i64 [ 1, %vector.memcheck531 ], [ 1, %.lr.ph434.preheader ], [ %ind.end543, %middle.block537 ]
  %xtraiter = and i64 %158, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph434.prol.loopexit, label %.lr.ph434.prol

.lr.ph434.prol:                                   ; preds = %.lr.ph434.preheader562
  %166 = getelementptr inbounds double, ptr %25, i64 %.2341433.ph
  %167 = load double, ptr %166, align 8, !tbaa !12
  %168 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.2341433.ph
  %169 = load <2 x double>, ptr %168, align 8, !tbaa !12
  %170 = insertelement <2 x double> poison, double %167, i64 0
  %171 = shufflevector <2 x double> %170, <2 x double> poison, <2 x i32> zeroinitializer
  %172 = fmul <2 x double> %171, %169
  store <2 x double> %172, ptr %168, align 8, !tbaa !12
  %173 = add nuw i64 %.2341433.ph, 1
  br label %.lr.ph434.prol.loopexit

.lr.ph434.prol.loopexit:                          ; preds = %.lr.ph434.prol, %.lr.ph434.preheader562
  %.2341433.unr = phi i64 [ %.2341433.ph, %.lr.ph434.preheader562 ], [ %173, %.lr.ph434.prol ]
  %174 = icmp eq i64 %158, %.2341433.ph
  br i1 %174, label %._crit_edge, label %.lr.ph434

.lr.ph434:                                        ; preds = %.lr.ph434.prol.loopexit, %.lr.ph434
  %.2341433 = phi i64 [ %190, %.lr.ph434 ], [ %.2341433.unr, %.lr.ph434.prol.loopexit ]
  %175 = getelementptr inbounds double, ptr %25, i64 %.2341433
  %176 = load double, ptr %175, align 8, !tbaa !12
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.2341433
  %178 = load <2 x double>, ptr %177, align 8, !tbaa !12
  %179 = insertelement <2 x double> poison, double %176, i64 0
  %180 = shufflevector <2 x double> %179, <2 x double> poison, <2 x i32> zeroinitializer
  %181 = fmul <2 x double> %180, %178
  store <2 x double> %181, ptr %177, align 8, !tbaa !12
  %182 = add nuw i64 %.2341433, 1
  %183 = getelementptr double, ptr %13, i64 %.2341433
  %184 = load double, ptr %183, align 8, !tbaa !12
  %185 = getelementptr %struct.doublecomplex, ptr %12, i64 %.2341433
  %186 = load <2 x double>, ptr %185, align 8, !tbaa !12
  %187 = insertelement <2 x double> poison, double %184, i64 0
  %188 = shufflevector <2 x double> %187, <2 x double> poison, <2 x i32> zeroinitializer
  %189 = fmul <2 x double> %188, %186
  store <2 x double> %189, ptr %185, align 8, !tbaa !12
  %190 = add nuw i64 %.2341433, 2
  %exitcond457.not.1 = icmp eq i64 %182, %158
  br i1 %exitcond457.not.1, label %._crit_edge, label %.lr.ph434, !llvm.loop !26

._crit_edge:                                      ; preds = %.lr.ph434.prol.loopexit, %.lr.ph434, %middle.block537, %157
  %191 = call i32 @zgbtrs_(ptr noundef nonnull %.str.5..str.4, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %11) #4
  %192 = load i64, ptr %10, align 8, !tbaa !5
  %.not380 = icmp eq i64 %192, 0
  %.pre.pre = load i64, ptr %1, align 8, !tbaa !5
  %.not381435 = icmp slt i64 %.pre.pre, 1
  %or.cond471 = select i1 %.not380, i1 true, i1 %.not381435
  br i1 %or.cond471, label %.loopexit.backedge, label %.lr.ph438.preheader

.lr.ph438.preheader:                              ; preds = %._crit_edge
  %min.iters.check515 = icmp ult i64 %.pre.pre, 2
  br i1 %min.iters.check515, label %.lr.ph438.preheader560, label %vector.memcheck507

vector.memcheck507:                               ; preds = %.lr.ph438.preheader
  %193 = shl i64 %.pre.pre, 4
  %scevgep508 = getelementptr i8, ptr %12, i64 %193
  %194 = shl i64 %.pre.pre, 3
  %scevgep509 = getelementptr i8, ptr %9, i64 %194
  %bound0510 = icmp ugt ptr %scevgep509, %12
  %bound1511 = icmp ugt ptr %scevgep508, %9
  %found.conflict512 = and i1 %bound0510, %bound1511
  br i1 %found.conflict512, label %.lr.ph438.preheader560, label %vector.ph516

vector.ph516:                                     ; preds = %vector.memcheck507
  %n.vec518 = and i64 %.pre.pre, 9223372036854775806
  %ind.end519 = or i64 %.pre.pre, 1
  br label %vector.body521

vector.body521:                                   ; preds = %vector.body521, %vector.ph516
  %index522 = phi i64 [ 0, %vector.ph516 ], [ %index.next529, %vector.body521 ]
  %195 = getelementptr double, ptr %9, i64 %index522
  %wide.load524 = load <2 x double>, ptr %195, align 8, !tbaa !12, !alias.scope !27
  %196 = getelementptr %struct.doublecomplex, ptr %12, i64 %index522
  %wide.vec525 = load <4 x double>, ptr %196, align 8, !tbaa !12
  %strided.vec526 = shufflevector <4 x double> %wide.vec525, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec527 = shufflevector <4 x double> %wide.vec525, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %197 = fmul <2 x double> %wide.load524, %strided.vec526
  %198 = fmul <2 x double> %wide.load524, %strided.vec527
  %interleaved.vec528 = shufflevector <2 x double> %197, <2 x double> %198, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec528, ptr %196, align 8, !tbaa !12
  %index.next529 = add nuw i64 %index522, 2
  %199 = icmp eq i64 %index.next529, %n.vec518
  br i1 %199, label %middle.block513, label %vector.body521, !llvm.loop !30

middle.block513:                                  ; preds = %vector.body521
  %cmp.n530 = icmp eq i64 %.pre.pre, %n.vec518
  br i1 %cmp.n530, label %.loopexit.backedge, label %.lr.ph438.preheader560

.loopexit.backedge:                               ; preds = %.lr.ph438.prol.loopexit, %.lr.ph438, %.lr.ph446.prol.loopexit, %.lr.ph446, %middle.block513, %middle.block, %.loopexit392, %._crit_edge
  %.be = phi i64 [ %262, %.loopexit392 ], [ %.pre.pre, %._crit_edge ], [ %262, %middle.block ], [ %.pre.pre, %middle.block513 ], [ %262, %.lr.ph446 ], [ %262, %.lr.ph446.prol.loopexit ], [ %.pre.pre, %.lr.ph438 ], [ %.pre.pre, %.lr.ph438.prol.loopexit ]
  br label %.loopexit

.lr.ph438.preheader560:                           ; preds = %middle.block513, %vector.memcheck507, %.lr.ph438.preheader
  %.3342436.ph = phi i64 [ 1, %vector.memcheck507 ], [ 1, %.lr.ph438.preheader ], [ %ind.end519, %middle.block513 ]
  %xtraiter571 = and i64 %.pre.pre, 1
  %lcmp.mod572.not = icmp eq i64 %xtraiter571, 0
  br i1 %lcmp.mod572.not, label %.lr.ph438.prol.loopexit, label %.lr.ph438.prol

.lr.ph438.prol:                                   ; preds = %.lr.ph438.preheader560
  %200 = getelementptr inbounds double, ptr %23, i64 %.3342436.ph
  %201 = load double, ptr %200, align 8, !tbaa !12
  %202 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.3342436.ph
  %203 = load <2 x double>, ptr %202, align 8, !tbaa !12
  %204 = insertelement <2 x double> poison, double %201, i64 0
  %205 = shufflevector <2 x double> %204, <2 x double> poison, <2 x i32> zeroinitializer
  %206 = fmul <2 x double> %205, %203
  store <2 x double> %206, ptr %202, align 8, !tbaa !12
  %207 = add nuw i64 %.3342436.ph, 1
  br label %.lr.ph438.prol.loopexit

.lr.ph438.prol.loopexit:                          ; preds = %.lr.ph438.prol, %.lr.ph438.preheader560
  %.3342436.unr = phi i64 [ %.3342436.ph, %.lr.ph438.preheader560 ], [ %207, %.lr.ph438.prol ]
  %208 = icmp eq i64 %.pre.pre, %.3342436.ph
  br i1 %208, label %.loopexit.backedge, label %.lr.ph438

.lr.ph438:                                        ; preds = %.lr.ph438.prol.loopexit, %.lr.ph438
  %.3342436 = phi i64 [ %224, %.lr.ph438 ], [ %.3342436.unr, %.lr.ph438.prol.loopexit ]
  %209 = getelementptr inbounds double, ptr %23, i64 %.3342436
  %210 = load double, ptr %209, align 8, !tbaa !12
  %211 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.3342436
  %212 = load <2 x double>, ptr %211, align 8, !tbaa !12
  %213 = insertelement <2 x double> poison, double %210, i64 0
  %214 = shufflevector <2 x double> %213, <2 x double> poison, <2 x i32> zeroinitializer
  %215 = fmul <2 x double> %214, %212
  store <2 x double> %215, ptr %211, align 8, !tbaa !12
  %216 = add nuw i64 %.3342436, 1
  %217 = getelementptr double, ptr %9, i64 %.3342436
  %218 = load double, ptr %217, align 8, !tbaa !12
  %219 = getelementptr %struct.doublecomplex, ptr %12, i64 %.3342436
  %220 = load <2 x double>, ptr %219, align 8, !tbaa !12
  %221 = insertelement <2 x double> poison, double %218, i64 0
  %222 = shufflevector <2 x double> %221, <2 x double> poison, <2 x i32> zeroinitializer
  %223 = fmul <2 x double> %222, %220
  store <2 x double> %223, ptr %219, align 8, !tbaa !12
  %224 = add nuw i64 %.3342436, 2
  %exitcond458.not.1 = icmp eq i64 %216, %.pre.pre
  br i1 %exitcond458.not.1, label %.loopexit.backedge, label %.lr.ph438, !llvm.loop !31

225:                                              ; preds = %.loopexit
  %226 = load i64, ptr %10, align 8, !tbaa !5
  %.not376 = icmp eq i64 %226, 0
  br i1 %.not376, label %.loopexit392, label %227

227:                                              ; preds = %225
  %228 = load i64, ptr %1, align 8, !tbaa !5
  %.not377439 = icmp slt i64 %228, 1
  br i1 %.not377439, label %.loopexit392, label %.lr.ph442.preheader

.lr.ph442.preheader:                              ; preds = %227
  %min.iters.check491 = icmp eq i64 %228, 1
  br i1 %min.iters.check491, label %.lr.ph442.preheader559, label %vector.memcheck483

vector.memcheck483:                               ; preds = %.lr.ph442.preheader
  %229 = shl i64 %228, 4
  %scevgep484 = getelementptr i8, ptr %12, i64 %229
  %230 = shl i64 %228, 3
  %scevgep485 = getelementptr i8, ptr %9, i64 %230
  %bound0486 = icmp ugt ptr %scevgep485, %12
  %bound1487 = icmp ugt ptr %scevgep484, %9
  %found.conflict488 = and i1 %bound0486, %bound1487
  br i1 %found.conflict488, label %.lr.ph442.preheader559, label %vector.ph492

vector.ph492:                                     ; preds = %vector.memcheck483
  %n.vec494 = and i64 %228, 9223372036854775806
  %ind.end495 = or i64 %228, 1
  br label %vector.body497

vector.body497:                                   ; preds = %vector.body497, %vector.ph492
  %index498 = phi i64 [ 0, %vector.ph492 ], [ %index.next505, %vector.body497 ]
  %231 = getelementptr double, ptr %9, i64 %index498
  %wide.load500 = load <2 x double>, ptr %231, align 8, !tbaa !12, !alias.scope !32
  %232 = getelementptr %struct.doublecomplex, ptr %12, i64 %index498
  %wide.vec501 = load <4 x double>, ptr %232, align 8, !tbaa !12
  %strided.vec502 = shufflevector <4 x double> %wide.vec501, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec503 = shufflevector <4 x double> %wide.vec501, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %233 = fmul <2 x double> %wide.load500, %strided.vec502
  %234 = fmul <2 x double> %wide.load500, %strided.vec503
  %interleaved.vec504 = shufflevector <2 x double> %233, <2 x double> %234, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec504, ptr %232, align 8, !tbaa !12
  %index.next505 = add nuw i64 %index498, 2
  %235 = icmp eq i64 %index.next505, %n.vec494
  br i1 %235, label %middle.block489, label %vector.body497, !llvm.loop !35

middle.block489:                                  ; preds = %vector.body497
  %cmp.n506 = icmp eq i64 %228, %n.vec494
  br i1 %cmp.n506, label %.loopexit392, label %.lr.ph442.preheader559

.lr.ph442.preheader559:                           ; preds = %middle.block489, %vector.memcheck483, %.lr.ph442.preheader
  %.4343440.ph = phi i64 [ 1, %vector.memcheck483 ], [ 1, %.lr.ph442.preheader ], [ %ind.end495, %middle.block489 ]
  %xtraiter573 = and i64 %228, 1
  %lcmp.mod574.not = icmp eq i64 %xtraiter573, 0
  br i1 %lcmp.mod574.not, label %.lr.ph442.prol.loopexit, label %.lr.ph442.prol

.lr.ph442.prol:                                   ; preds = %.lr.ph442.preheader559
  %236 = getelementptr inbounds double, ptr %23, i64 %.4343440.ph
  %237 = load double, ptr %236, align 8, !tbaa !12
  %238 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.4343440.ph
  %239 = load <2 x double>, ptr %238, align 8, !tbaa !12
  %240 = insertelement <2 x double> poison, double %237, i64 0
  %241 = shufflevector <2 x double> %240, <2 x double> poison, <2 x i32> zeroinitializer
  %242 = fmul <2 x double> %241, %239
  store <2 x double> %242, ptr %238, align 8, !tbaa !12
  %243 = add nuw i64 %.4343440.ph, 1
  br label %.lr.ph442.prol.loopexit

.lr.ph442.prol.loopexit:                          ; preds = %.lr.ph442.prol, %.lr.ph442.preheader559
  %.4343440.unr = phi i64 [ %.4343440.ph, %.lr.ph442.preheader559 ], [ %243, %.lr.ph442.prol ]
  %244 = icmp eq i64 %228, %.4343440.ph
  br i1 %244, label %.loopexit392, label %.lr.ph442

.lr.ph442:                                        ; preds = %.lr.ph442.prol.loopexit, %.lr.ph442
  %.4343440 = phi i64 [ %260, %.lr.ph442 ], [ %.4343440.unr, %.lr.ph442.prol.loopexit ]
  %245 = getelementptr inbounds double, ptr %23, i64 %.4343440
  %246 = load double, ptr %245, align 8, !tbaa !12
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.4343440
  %248 = load <2 x double>, ptr %247, align 8, !tbaa !12
  %249 = insertelement <2 x double> poison, double %246, i64 0
  %250 = shufflevector <2 x double> %249, <2 x double> poison, <2 x i32> zeroinitializer
  %251 = fmul <2 x double> %250, %248
  store <2 x double> %251, ptr %247, align 8, !tbaa !12
  %252 = add nuw i64 %.4343440, 1
  %253 = getelementptr double, ptr %9, i64 %.4343440
  %254 = load double, ptr %253, align 8, !tbaa !12
  %255 = getelementptr %struct.doublecomplex, ptr %12, i64 %.4343440
  %256 = load <2 x double>, ptr %255, align 8, !tbaa !12
  %257 = insertelement <2 x double> poison, double %254, i64 0
  %258 = shufflevector <2 x double> %257, <2 x double> poison, <2 x i32> zeroinitializer
  %259 = fmul <2 x double> %258, %256
  store <2 x double> %259, ptr %255, align 8, !tbaa !12
  %260 = add nuw i64 %.4343440, 2
  %exitcond459.not.1 = icmp eq i64 %252, %228
  br i1 %exitcond459.not.1, label %.loopexit392, label %.lr.ph442, !llvm.loop !36

.loopexit392:                                     ; preds = %.lr.ph442.prol.loopexit, %.lr.ph442, %middle.block489, %227, %225
  %261 = call i32 @zgbtrs_(ptr noundef nonnull %.str.4..str.5, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %11) #4
  %262 = load i64, ptr %1, align 8, !tbaa !5
  %.not378443 = icmp slt i64 %262, 1
  br i1 %.not378443, label %.loopexit.backedge, label %.lr.ph446.preheader

.lr.ph446.preheader:                              ; preds = %.loopexit392
  %min.iters.check = icmp eq i64 %262, 1
  br i1 %min.iters.check, label %.lr.ph446.preheader558, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph446.preheader
  %263 = shl i64 %262, 4
  %scevgep = getelementptr i8, ptr %12, i64 %263
  %264 = shl i64 %262, 3
  %scevgep481 = getelementptr i8, ptr %13, i64 %264
  %bound0 = icmp ugt ptr %scevgep481, %12
  %bound1 = icmp ugt ptr %scevgep, %13
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph446.preheader558, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %262, 9223372036854775806
  %ind.end = or i64 %262, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %265 = getelementptr double, ptr %13, i64 %index
  %wide.load = load <2 x double>, ptr %265, align 8, !tbaa !12, !alias.scope !37
  %266 = getelementptr %struct.doublecomplex, ptr %12, i64 %index
  %wide.vec = load <4 x double>, ptr %266, align 8, !tbaa !12
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec482 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %267 = fmul <2 x double> %wide.load, %strided.vec
  %268 = fmul <2 x double> %wide.load, %strided.vec482
  %interleaved.vec = shufflevector <2 x double> %267, <2 x double> %268, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %266, align 8, !tbaa !12
  %index.next = add nuw i64 %index, 2
  %269 = icmp eq i64 %index.next, %n.vec
  br i1 %269, label %middle.block, label %vector.body, !llvm.loop !40

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %262, %n.vec
  br i1 %cmp.n, label %.loopexit.backedge, label %.lr.ph446.preheader558

.lr.ph446.preheader558:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph446.preheader
  %.5344444.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph446.preheader ], [ %ind.end, %middle.block ]
  %xtraiter575 = and i64 %262, 1
  %lcmp.mod576.not = icmp eq i64 %xtraiter575, 0
  br i1 %lcmp.mod576.not, label %.lr.ph446.prol.loopexit, label %.lr.ph446.prol

.lr.ph446.prol:                                   ; preds = %.lr.ph446.preheader558
  %270 = getelementptr inbounds double, ptr %25, i64 %.5344444.ph
  %271 = load double, ptr %270, align 8, !tbaa !12
  %272 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.5344444.ph
  %273 = load <2 x double>, ptr %272, align 8, !tbaa !12
  %274 = insertelement <2 x double> poison, double %271, i64 0
  %275 = shufflevector <2 x double> %274, <2 x double> poison, <2 x i32> zeroinitializer
  %276 = fmul <2 x double> %275, %273
  store <2 x double> %276, ptr %272, align 8, !tbaa !12
  %277 = add nuw i64 %.5344444.ph, 1
  br label %.lr.ph446.prol.loopexit

.lr.ph446.prol.loopexit:                          ; preds = %.lr.ph446.prol, %.lr.ph446.preheader558
  %.5344444.unr = phi i64 [ %.5344444.ph, %.lr.ph446.preheader558 ], [ %277, %.lr.ph446.prol ]
  %278 = icmp eq i64 %262, %.5344444.ph
  br i1 %278, label %.loopexit.backedge, label %.lr.ph446

.lr.ph446:                                        ; preds = %.lr.ph446.prol.loopexit, %.lr.ph446
  %.5344444 = phi i64 [ %294, %.lr.ph446 ], [ %.5344444.unr, %.lr.ph446.prol.loopexit ]
  %279 = getelementptr inbounds double, ptr %25, i64 %.5344444
  %280 = load double, ptr %279, align 8, !tbaa !12
  %281 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.5344444
  %282 = load <2 x double>, ptr %281, align 8, !tbaa !12
  %283 = insertelement <2 x double> poison, double %280, i64 0
  %284 = shufflevector <2 x double> %283, <2 x double> poison, <2 x i32> zeroinitializer
  %285 = fmul <2 x double> %284, %282
  store <2 x double> %285, ptr %281, align 8, !tbaa !12
  %286 = add nuw i64 %.5344444, 1
  %287 = getelementptr double, ptr %13, i64 %.5344444
  %288 = load double, ptr %287, align 8, !tbaa !12
  %289 = getelementptr %struct.doublecomplex, ptr %12, i64 %.5344444
  %290 = load <2 x double>, ptr %289, align 8, !tbaa !12
  %291 = insertelement <2 x double> poison, double %288, i64 0
  %292 = shufflevector <2 x double> %291, <2 x double> poison, <2 x i32> zeroinitializer
  %293 = fmul <2 x double> %292, %290
  store <2 x double> %293, ptr %289, align 8, !tbaa !12
  %294 = add nuw i64 %.5344444, 2
  %exitcond460.not.1 = icmp eq i64 %286, %262
  br i1 %exitcond460.not.1, label %.loopexit.backedge, label %.lr.ph446, !llvm.loop !41

295:                                              ; preds = %.loopexit
  %296 = load double, ptr %19, align 8, !tbaa !12
  %297 = fcmp une double %296, 0.000000e+00
  %298 = fdiv double 1.000000e+00, %296
  %.0345 = select i1 %297, double %298, double 0.000000e+00
  br label %299

299:                                              ; preds = %150, %.loopexit396, %295, %.thread
  %.0 = phi double [ 0.000000e+00, %.thread ], [ %.0345, %295 ], [ 1.000000e+00, %.loopexit396 ], [ 0.000000e+00, %150 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  ret double %.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 @d_imag(ptr noundef) local_unnamed_addr #2

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

declare i32 @zgbtrs_(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.smax.i64(i64, i64) #3

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


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