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

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

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

76:                                               ; preds = %12
  %77 = load ptr, ptr %22, align 8, !tbaa !5
  store i64 -2, ptr %77, align 8, !tbaa !9
  br label %78

78:                                               ; preds = %76, %12
  %79 = load ptr, ptr %22, align 8, !tbaa !5
  %80 = load i64, ptr %79, align 8, !tbaa !9
  %81 = icmp ne i64 %80, 0
  br i1 %81, label %82, label %88

82:                                               ; preds = %78
  %83 = load ptr, ptr %22, align 8, !tbaa !5
  %84 = load i64, ptr %83, align 8, !tbaa !9
  %85 = sub nsw i64 0, %84
  store i64 %85, ptr %30, align 8, !tbaa !9
  %86 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %30)
  %87 = load double, ptr %34, align 8, !tbaa !11
  store double %87, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %778

88:                                               ; preds = %78
  store i64 0, ptr %41, align 8, !tbaa !9
  %89 = load ptr, ptr %14, align 8, !tbaa !5
  %90 = call i64 @lsame_(ptr noundef %89, ptr noundef @.str.1)
  %91 = icmp ne i64 %90, 0
  br i1 %91, label %92, label %93

92:                                               ; preds = %88
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %93

93:                                               ; preds = %92, %88
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %94 = load i64, ptr %41, align 8, !tbaa !9
  %95 = icmp ne i64 %94, 0
  br i1 %95, label %96, label %310

96:                                               ; preds = %93
  %97 = load ptr, ptr %15, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %98, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %99

99:                                               ; preds = %306, %96
  %100 = load i64, ptr %39, align 8, !tbaa !9
  %101 = load i64, ptr %30, align 8, !tbaa !9
  %102 = icmp sle i64 %100, %101
  br i1 %102, label %103, label %309

103:                                              ; preds = %99
  store double 0.000000e+00, ptr %42, align 8, !tbaa !11
  %104 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %104, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %105

105:                                              ; preds = %193, %103
  %106 = load i64, ptr %40, align 8, !tbaa !9
  %107 = load i64, ptr %31, align 8, !tbaa !9
  %108 = icmp sle i64 %106, %107
  br i1 %108, label %109, label %196

109:                                              ; preds = %105
  %110 = load i64, ptr %40, align 8, !tbaa !9
  %111 = load i64, ptr %39, align 8, !tbaa !9
  %112 = load i64, ptr %26, align 8, !tbaa !9
  %113 = mul nsw i64 %111, %112
  %114 = add nsw i64 %110, %113
  store i64 %114, ptr %32, align 8, !tbaa !9
  %115 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %115, ptr %33, align 8, !tbaa !9
  %116 = load ptr, ptr %16, align 8, !tbaa !5
  %117 = load i64, ptr %32, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.doublecomplex, ptr %116, i64 %117
  %119 = getelementptr inbounds %struct.doublecomplex, ptr %118, i32 0, i32 0
  %120 = load double, ptr %119, align 8, !tbaa !13
  %121 = load ptr, ptr %21, align 8, !tbaa !5
  %122 = load i64, ptr %33, align 8, !tbaa !9
  %123 = getelementptr inbounds %struct.doublecomplex, ptr %121, i64 %122
  %124 = getelementptr inbounds %struct.doublecomplex, ptr %123, i32 0, i32 0
  %125 = load double, ptr %124, align 8, !tbaa !13
  %126 = load ptr, ptr %16, align 8, !tbaa !5
  %127 = load i64, ptr %32, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.doublecomplex, ptr %126, i64 %127
  %129 = getelementptr inbounds %struct.doublecomplex, ptr %128, i32 0, i32 1
  %130 = load double, ptr %129, align 8, !tbaa !15
  %131 = load ptr, ptr %21, align 8, !tbaa !5
  %132 = load i64, ptr %33, align 8, !tbaa !9
  %133 = getelementptr inbounds %struct.doublecomplex, ptr %131, i64 %132
  %134 = getelementptr inbounds %struct.doublecomplex, ptr %133, i32 0, i32 1
  %135 = load double, ptr %134, align 8, !tbaa !15
  %136 = fmul double %130, %135
  %137 = fneg double %136
  %138 = call double @llvm.fmuladd.f64(double %120, double %125, double %137)
  %139 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  store double %138, ptr %139, align 8, !tbaa !13
  %140 = load ptr, ptr %16, align 8, !tbaa !5
  %141 = load i64, ptr %32, align 8, !tbaa !9
  %142 = getelementptr inbounds %struct.doublecomplex, ptr %140, i64 %141
  %143 = getelementptr inbounds %struct.doublecomplex, ptr %142, i32 0, i32 0
  %144 = load double, ptr %143, align 8, !tbaa !13
  %145 = load ptr, ptr %21, align 8, !tbaa !5
  %146 = load i64, ptr %33, align 8, !tbaa !9
  %147 = getelementptr inbounds %struct.doublecomplex, ptr %145, i64 %146
  %148 = getelementptr inbounds %struct.doublecomplex, ptr %147, i32 0, i32 1
  %149 = load double, ptr %148, align 8, !tbaa !15
  %150 = load ptr, ptr %16, align 8, !tbaa !5
  %151 = load i64, ptr %32, align 8, !tbaa !9
  %152 = getelementptr inbounds %struct.doublecomplex, ptr %150, i64 %151
  %153 = getelementptr inbounds %struct.doublecomplex, ptr %152, i32 0, i32 1
  %154 = load double, ptr %153, align 8, !tbaa !15
  %155 = load ptr, ptr %21, align 8, !tbaa !5
  %156 = load i64, ptr %33, align 8, !tbaa !9
  %157 = getelementptr inbounds %struct.doublecomplex, ptr %155, i64 %156
  %158 = getelementptr inbounds %struct.doublecomplex, ptr %157, i32 0, i32 0
  %159 = load double, ptr %158, align 8, !tbaa !13
  %160 = fmul double %154, %159
  %161 = call double @llvm.fmuladd.f64(double %144, double %149, double %160)
  %162 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  store double %161, ptr %162, align 8, !tbaa !15
  %163 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %164 = load double, ptr %163, align 8, !tbaa !13
  %165 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %164, ptr %165, align 8, !tbaa !13
  %166 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %167 = load double, ptr %166, align 8, !tbaa !15
  %168 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %167, ptr %168, align 8, !tbaa !15
  %169 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %170 = load double, ptr %169, align 8, !tbaa !13
  store double %170, ptr %35, align 8, !tbaa !11
  %171 = load double, ptr %35, align 8, !tbaa !11
  %172 = fcmp oge double %171, 0.000000e+00
  br i1 %172, label %173, label %175

173:                                              ; preds = %109
  %174 = load double, ptr %35, align 8, !tbaa !11
  br label %178

175:                                              ; preds = %109
  %176 = load double, ptr %35, align 8, !tbaa !11
  %177 = fneg double %176
  br label %178

178:                                              ; preds = %175, %173
  %179 = phi double [ %174, %173 ], [ %177, %175 ]
  %180 = call double @d_imag(ptr noundef %37)
  store double %180, ptr %36, align 8, !tbaa !11
  %181 = load double, ptr %36, align 8, !tbaa !11
  %182 = fcmp oge double %181, 0.000000e+00
  br i1 %182, label %183, label %185

183:                                              ; preds = %178
  %184 = load double, ptr %36, align 8, !tbaa !11
  br label %188

185:                                              ; preds = %178
  %186 = load double, ptr %36, align 8, !tbaa !11
  %187 = fneg double %186
  br label %188

188:                                              ; preds = %185, %183
  %189 = phi double [ %184, %183 ], [ %187, %185 ]
  %190 = fadd double %179, %189
  %191 = load double, ptr %42, align 8, !tbaa !11
  %192 = fadd double %191, %190
  store double %192, ptr %42, align 8, !tbaa !11
  br label %193

193:                                              ; preds = %188
  %194 = load i64, ptr %40, align 8, !tbaa !9
  %195 = add nsw i64 %194, 1
  store i64 %195, ptr %40, align 8, !tbaa !9
  br label %105, !llvm.loop !16

196:                                              ; preds = %105
  %197 = load ptr, ptr %15, align 8, !tbaa !5
  %198 = load i64, ptr %197, align 8, !tbaa !9
  store i64 %198, ptr %31, align 8, !tbaa !9
  %199 = load i64, ptr %39, align 8, !tbaa !9
  %200 = add nsw i64 %199, 1
  store i64 %200, ptr %40, align 8, !tbaa !9
  br label %201

201:                                              ; preds = %289, %196
  %202 = load i64, ptr %40, align 8, !tbaa !9
  %203 = load i64, ptr %31, align 8, !tbaa !9
  %204 = icmp sle i64 %202, %203
  br i1 %204, label %205, label %292

205:                                              ; preds = %201
  %206 = load i64, ptr %39, align 8, !tbaa !9
  %207 = load i64, ptr %40, align 8, !tbaa !9
  %208 = load i64, ptr %26, align 8, !tbaa !9
  %209 = mul nsw i64 %207, %208
  %210 = add nsw i64 %206, %209
  store i64 %210, ptr %32, align 8, !tbaa !9
  %211 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %211, ptr %33, align 8, !tbaa !9
  %212 = load ptr, ptr %16, align 8, !tbaa !5
  %213 = load i64, ptr %32, align 8, !tbaa !9
  %214 = getelementptr inbounds %struct.doublecomplex, ptr %212, i64 %213
  %215 = getelementptr inbounds %struct.doublecomplex, ptr %214, i32 0, i32 0
  %216 = load double, ptr %215, align 8, !tbaa !13
  %217 = load ptr, ptr %21, align 8, !tbaa !5
  %218 = load i64, ptr %33, align 8, !tbaa !9
  %219 = getelementptr inbounds %struct.doublecomplex, ptr %217, i64 %218
  %220 = getelementptr inbounds %struct.doublecomplex, ptr %219, i32 0, i32 0
  %221 = load double, ptr %220, align 8, !tbaa !13
  %222 = load ptr, ptr %16, align 8, !tbaa !5
  %223 = load i64, ptr %32, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.doublecomplex, ptr %222, i64 %223
  %225 = getelementptr inbounds %struct.doublecomplex, ptr %224, i32 0, i32 1
  %226 = load double, ptr %225, align 8, !tbaa !15
  %227 = load ptr, ptr %21, align 8, !tbaa !5
  %228 = load i64, ptr %33, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct.doublecomplex, ptr %227, i64 %228
  %230 = getelementptr inbounds %struct.doublecomplex, ptr %229, i32 0, i32 1
  %231 = load double, ptr %230, align 8, !tbaa !15
  %232 = fmul double %226, %231
  %233 = fneg double %232
  %234 = call double @llvm.fmuladd.f64(double %216, double %221, double %233)
  %235 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  store double %234, ptr %235, align 8, !tbaa !13
  %236 = load ptr, ptr %16, align 8, !tbaa !5
  %237 = load i64, ptr %32, align 8, !tbaa !9
  %238 = getelementptr inbounds %struct.doublecomplex, ptr %236, i64 %237
  %239 = getelementptr inbounds %struct.doublecomplex, ptr %238, i32 0, i32 0
  %240 = load double, ptr %239, align 8, !tbaa !13
  %241 = load ptr, ptr %21, align 8, !tbaa !5
  %242 = load i64, ptr %33, align 8, !tbaa !9
  %243 = getelementptr inbounds %struct.doublecomplex, ptr %241, i64 %242
  %244 = getelementptr inbounds %struct.doublecomplex, ptr %243, i32 0, i32 1
  %245 = load double, ptr %244, align 8, !tbaa !15
  %246 = load ptr, ptr %16, align 8, !tbaa !5
  %247 = load i64, ptr %32, align 8, !tbaa !9
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %246, i64 %247
  %249 = getelementptr inbounds %struct.doublecomplex, ptr %248, i32 0, i32 1
  %250 = load double, ptr %249, align 8, !tbaa !15
  %251 = load ptr, ptr %21, align 8, !tbaa !5
  %252 = load i64, ptr %33, align 8, !tbaa !9
  %253 = getelementptr inbounds %struct.doublecomplex, ptr %251, i64 %252
  %254 = getelementptr inbounds %struct.doublecomplex, ptr %253, i32 0, i32 0
  %255 = load double, ptr %254, align 8, !tbaa !13
  %256 = fmul double %250, %255
  %257 = call double @llvm.fmuladd.f64(double %240, double %245, double %256)
  %258 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  store double %257, ptr %258, align 8, !tbaa !15
  %259 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %260 = load double, ptr %259, align 8, !tbaa !13
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %260, ptr %261, align 8, !tbaa !13
  %262 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %263 = load double, ptr %262, align 8, !tbaa !15
  %264 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %263, ptr %264, align 8, !tbaa !15
  %265 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %266 = load double, ptr %265, align 8, !tbaa !13
  store double %266, ptr %35, align 8, !tbaa !11
  %267 = load double, ptr %35, align 8, !tbaa !11
  %268 = fcmp oge double %267, 0.000000e+00
  br i1 %268, label %269, label %271

269:                                              ; preds = %205
  %270 = load double, ptr %35, align 8, !tbaa !11
  br label %274

271:                                              ; preds = %205
  %272 = load double, ptr %35, align 8, !tbaa !11
  %273 = fneg double %272
  br label %274

274:                                              ; preds = %271, %269
  %275 = phi double [ %270, %269 ], [ %273, %271 ]
  %276 = call double @d_imag(ptr noundef %37)
  store double %276, ptr %36, align 8, !tbaa !11
  %277 = load double, ptr %36, align 8, !tbaa !11
  %278 = fcmp oge double %277, 0.000000e+00
  br i1 %278, label %279, label %281

279:                                              ; preds = %274
  %280 = load double, ptr %36, align 8, !tbaa !11
  br label %284

281:                                              ; preds = %274
  %282 = load double, ptr %36, align 8, !tbaa !11
  %283 = fneg double %282
  br label %284

284:                                              ; preds = %281, %279
  %285 = phi double [ %280, %279 ], [ %283, %281 ]
  %286 = fadd double %275, %285
  %287 = load double, ptr %42, align 8, !tbaa !11
  %288 = fadd double %287, %286
  store double %288, ptr %42, align 8, !tbaa !11
  br label %289

289:                                              ; preds = %284
  %290 = load i64, ptr %40, align 8, !tbaa !9
  %291 = add nsw i64 %290, 1
  store i64 %291, ptr %40, align 8, !tbaa !9
  br label %201, !llvm.loop !18

292:                                              ; preds = %201
  %293 = load double, ptr %42, align 8, !tbaa !11
  %294 = load ptr, ptr %24, align 8, !tbaa !5
  %295 = load i64, ptr %39, align 8, !tbaa !9
  %296 = getelementptr inbounds double, ptr %294, i64 %295
  store double %293, ptr %296, align 8, !tbaa !11
  %297 = load double, ptr %45, align 8, !tbaa !11
  %298 = load double, ptr %42, align 8, !tbaa !11
  %299 = fcmp oge double %297, %298
  br i1 %299, label %300, label %302

300:                                              ; preds = %292
  %301 = load double, ptr %45, align 8, !tbaa !11
  br label %304

302:                                              ; preds = %292
  %303 = load double, ptr %42, align 8, !tbaa !11
  br label %304

304:                                              ; preds = %302, %300
  %305 = phi double [ %301, %300 ], [ %303, %302 ]
  store double %305, ptr %45, align 8, !tbaa !11
  br label %306

306:                                              ; preds = %304
  %307 = load i64, ptr %39, align 8, !tbaa !9
  %308 = add nsw i64 %307, 1
  store i64 %308, ptr %39, align 8, !tbaa !9
  br label %99, !llvm.loop !19

309:                                              ; preds = %99
  br label %524

310:                                              ; preds = %93
  %311 = load ptr, ptr %15, align 8, !tbaa !5
  %312 = load i64, ptr %311, align 8, !tbaa !9
  store i64 %312, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %313

313:                                              ; preds = %520, %310
  %314 = load i64, ptr %39, align 8, !tbaa !9
  %315 = load i64, ptr %30, align 8, !tbaa !9
  %316 = icmp sle i64 %314, %315
  br i1 %316, label %317, label %523

317:                                              ; preds = %313
  store double 0.000000e+00, ptr %42, align 8, !tbaa !11
  %318 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %318, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %319

319:                                              ; preds = %407, %317
  %320 = load i64, ptr %40, align 8, !tbaa !9
  %321 = load i64, ptr %31, align 8, !tbaa !9
  %322 = icmp sle i64 %320, %321
  br i1 %322, label %323, label %410

323:                                              ; preds = %319
  %324 = load i64, ptr %39, align 8, !tbaa !9
  %325 = load i64, ptr %40, align 8, !tbaa !9
  %326 = load i64, ptr %26, align 8, !tbaa !9
  %327 = mul nsw i64 %325, %326
  %328 = add nsw i64 %324, %327
  store i64 %328, ptr %32, align 8, !tbaa !9
  %329 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %329, ptr %33, align 8, !tbaa !9
  %330 = load ptr, ptr %16, align 8, !tbaa !5
  %331 = load i64, ptr %32, align 8, !tbaa !9
  %332 = getelementptr inbounds %struct.doublecomplex, ptr %330, i64 %331
  %333 = getelementptr inbounds %struct.doublecomplex, ptr %332, i32 0, i32 0
  %334 = load double, ptr %333, align 8, !tbaa !13
  %335 = load ptr, ptr %21, align 8, !tbaa !5
  %336 = load i64, ptr %33, align 8, !tbaa !9
  %337 = getelementptr inbounds %struct.doublecomplex, ptr %335, i64 %336
  %338 = getelementptr inbounds %struct.doublecomplex, ptr %337, i32 0, i32 0
  %339 = load double, ptr %338, align 8, !tbaa !13
  %340 = load ptr, ptr %16, align 8, !tbaa !5
  %341 = load i64, ptr %32, align 8, !tbaa !9
  %342 = getelementptr inbounds %struct.doublecomplex, ptr %340, i64 %341
  %343 = getelementptr inbounds %struct.doublecomplex, ptr %342, i32 0, i32 1
  %344 = load double, ptr %343, align 8, !tbaa !15
  %345 = load ptr, ptr %21, align 8, !tbaa !5
  %346 = load i64, ptr %33, align 8, !tbaa !9
  %347 = getelementptr inbounds %struct.doublecomplex, ptr %345, i64 %346
  %348 = getelementptr inbounds %struct.doublecomplex, ptr %347, i32 0, i32 1
  %349 = load double, ptr %348, align 8, !tbaa !15
  %350 = fmul double %344, %349
  %351 = fneg double %350
  %352 = call double @llvm.fmuladd.f64(double %334, double %339, double %351)
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  store double %352, ptr %353, align 8, !tbaa !13
  %354 = load ptr, ptr %16, align 8, !tbaa !5
  %355 = load i64, ptr %32, align 8, !tbaa !9
  %356 = getelementptr inbounds %struct.doublecomplex, ptr %354, i64 %355
  %357 = getelementptr inbounds %struct.doublecomplex, ptr %356, i32 0, i32 0
  %358 = load double, ptr %357, align 8, !tbaa !13
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  %360 = load i64, ptr %33, align 8, !tbaa !9
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %359, i64 %360
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %361, i32 0, i32 1
  %363 = load double, ptr %362, align 8, !tbaa !15
  %364 = load ptr, ptr %16, align 8, !tbaa !5
  %365 = load i64, ptr %32, align 8, !tbaa !9
  %366 = getelementptr inbounds %struct.doublecomplex, ptr %364, i64 %365
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %366, i32 0, i32 1
  %368 = load double, ptr %367, align 8, !tbaa !15
  %369 = load ptr, ptr %21, align 8, !tbaa !5
  %370 = load i64, ptr %33, align 8, !tbaa !9
  %371 = getelementptr inbounds %struct.doublecomplex, ptr %369, i64 %370
  %372 = getelementptr inbounds %struct.doublecomplex, ptr %371, i32 0, i32 0
  %373 = load double, ptr %372, align 8, !tbaa !13
  %374 = fmul double %368, %373
  %375 = call double @llvm.fmuladd.f64(double %358, double %363, double %374)
  %376 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  store double %375, ptr %376, align 8, !tbaa !15
  %377 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %378 = load double, ptr %377, align 8, !tbaa !13
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %378, ptr %379, align 8, !tbaa !13
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %381 = load double, ptr %380, align 8, !tbaa !15
  %382 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %381, ptr %382, align 8, !tbaa !15
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %384 = load double, ptr %383, align 8, !tbaa !13
  store double %384, ptr %35, align 8, !tbaa !11
  %385 = load double, ptr %35, align 8, !tbaa !11
  %386 = fcmp oge double %385, 0.000000e+00
  br i1 %386, label %387, label %389

387:                                              ; preds = %323
  %388 = load double, ptr %35, align 8, !tbaa !11
  br label %392

389:                                              ; preds = %323
  %390 = load double, ptr %35, align 8, !tbaa !11
  %391 = fneg double %390
  br label %392

392:                                              ; preds = %389, %387
  %393 = phi double [ %388, %387 ], [ %391, %389 ]
  %394 = call double @d_imag(ptr noundef %37)
  store double %394, ptr %36, align 8, !tbaa !11
  %395 = load double, ptr %36, align 8, !tbaa !11
  %396 = fcmp oge double %395, 0.000000e+00
  br i1 %396, label %397, label %399

397:                                              ; preds = %392
  %398 = load double, ptr %36, align 8, !tbaa !11
  br label %402

399:                                              ; preds = %392
  %400 = load double, ptr %36, align 8, !tbaa !11
  %401 = fneg double %400
  br label %402

402:                                              ; preds = %399, %397
  %403 = phi double [ %398, %397 ], [ %401, %399 ]
  %404 = fadd double %393, %403
  %405 = load double, ptr %42, align 8, !tbaa !11
  %406 = fadd double %405, %404
  store double %406, ptr %42, align 8, !tbaa !11
  br label %407

407:                                              ; preds = %402
  %408 = load i64, ptr %40, align 8, !tbaa !9
  %409 = add nsw i64 %408, 1
  store i64 %409, ptr %40, align 8, !tbaa !9
  br label %319, !llvm.loop !20

410:                                              ; preds = %319
  %411 = load ptr, ptr %15, align 8, !tbaa !5
  %412 = load i64, ptr %411, align 8, !tbaa !9
  store i64 %412, ptr %31, align 8, !tbaa !9
  %413 = load i64, ptr %39, align 8, !tbaa !9
  %414 = add nsw i64 %413, 1
  store i64 %414, ptr %40, align 8, !tbaa !9
  br label %415

415:                                              ; preds = %503, %410
  %416 = load i64, ptr %40, align 8, !tbaa !9
  %417 = load i64, ptr %31, align 8, !tbaa !9
  %418 = icmp sle i64 %416, %417
  br i1 %418, label %419, label %506

419:                                              ; preds = %415
  %420 = load i64, ptr %40, align 8, !tbaa !9
  %421 = load i64, ptr %39, align 8, !tbaa !9
  %422 = load i64, ptr %26, align 8, !tbaa !9
  %423 = mul nsw i64 %421, %422
  %424 = add nsw i64 %420, %423
  store i64 %424, ptr %32, align 8, !tbaa !9
  %425 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %425, ptr %33, align 8, !tbaa !9
  %426 = load ptr, ptr %16, align 8, !tbaa !5
  %427 = load i64, ptr %32, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct.doublecomplex, ptr %426, i64 %427
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %428, i32 0, i32 0
  %430 = load double, ptr %429, align 8, !tbaa !13
  %431 = load ptr, ptr %21, align 8, !tbaa !5
  %432 = load i64, ptr %33, align 8, !tbaa !9
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %431, i64 %432
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %433, i32 0, i32 0
  %435 = load double, ptr %434, align 8, !tbaa !13
  %436 = load ptr, ptr %16, align 8, !tbaa !5
  %437 = load i64, ptr %32, align 8, !tbaa !9
  %438 = getelementptr inbounds %struct.doublecomplex, ptr %436, i64 %437
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %438, i32 0, i32 1
  %440 = load double, ptr %439, align 8, !tbaa !15
  %441 = load ptr, ptr %21, align 8, !tbaa !5
  %442 = load i64, ptr %33, align 8, !tbaa !9
  %443 = getelementptr inbounds %struct.doublecomplex, ptr %441, i64 %442
  %444 = getelementptr inbounds %struct.doublecomplex, ptr %443, i32 0, i32 1
  %445 = load double, ptr %444, align 8, !tbaa !15
  %446 = fmul double %440, %445
  %447 = fneg double %446
  %448 = call double @llvm.fmuladd.f64(double %430, double %435, double %447)
  %449 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  store double %448, ptr %449, align 8, !tbaa !13
  %450 = load ptr, ptr %16, align 8, !tbaa !5
  %451 = load i64, ptr %32, align 8, !tbaa !9
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %450, i64 %451
  %453 = getelementptr inbounds %struct.doublecomplex, ptr %452, i32 0, i32 0
  %454 = load double, ptr %453, align 8, !tbaa !13
  %455 = load ptr, ptr %21, align 8, !tbaa !5
  %456 = load i64, ptr %33, align 8, !tbaa !9
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %455, i64 %456
  %458 = getelementptr inbounds %struct.doublecomplex, ptr %457, i32 0, i32 1
  %459 = load double, ptr %458, align 8, !tbaa !15
  %460 = load ptr, ptr %16, align 8, !tbaa !5
  %461 = load i64, ptr %32, align 8, !tbaa !9
  %462 = getelementptr inbounds %struct.doublecomplex, ptr %460, i64 %461
  %463 = getelementptr inbounds %struct.doublecomplex, ptr %462, i32 0, i32 1
  %464 = load double, ptr %463, align 8, !tbaa !15
  %465 = load ptr, ptr %21, align 8, !tbaa !5
  %466 = load i64, ptr %33, align 8, !tbaa !9
  %467 = getelementptr inbounds %struct.doublecomplex, ptr %465, i64 %466
  %468 = getelementptr inbounds %struct.doublecomplex, ptr %467, i32 0, i32 0
  %469 = load double, ptr %468, align 8, !tbaa !13
  %470 = fmul double %464, %469
  %471 = call double @llvm.fmuladd.f64(double %454, double %459, double %470)
  %472 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  store double %471, ptr %472, align 8, !tbaa !15
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %474 = load double, ptr %473, align 8, !tbaa !13
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %474, ptr %475, align 8, !tbaa !13
  %476 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %477 = load double, ptr %476, align 8, !tbaa !15
  %478 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %477, ptr %478, align 8, !tbaa !15
  %479 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %480 = load double, ptr %479, align 8, !tbaa !13
  store double %480, ptr %35, align 8, !tbaa !11
  %481 = load double, ptr %35, align 8, !tbaa !11
  %482 = fcmp oge double %481, 0.000000e+00
  br i1 %482, label %483, label %485

483:                                              ; preds = %419
  %484 = load double, ptr %35, align 8, !tbaa !11
  br label %488

485:                                              ; preds = %419
  %486 = load double, ptr %35, align 8, !tbaa !11
  %487 = fneg double %486
  br label %488

488:                                              ; preds = %485, %483
  %489 = phi double [ %484, %483 ], [ %487, %485 ]
  %490 = call double @d_imag(ptr noundef %37)
  store double %490, ptr %36, align 8, !tbaa !11
  %491 = load double, ptr %36, align 8, !tbaa !11
  %492 = fcmp oge double %491, 0.000000e+00
  br i1 %492, label %493, label %495

493:                                              ; preds = %488
  %494 = load double, ptr %36, align 8, !tbaa !11
  br label %498

495:                                              ; preds = %488
  %496 = load double, ptr %36, align 8, !tbaa !11
  %497 = fneg double %496
  br label %498

498:                                              ; preds = %495, %493
  %499 = phi double [ %494, %493 ], [ %497, %495 ]
  %500 = fadd double %489, %499
  %501 = load double, ptr %42, align 8, !tbaa !11
  %502 = fadd double %501, %500
  store double %502, ptr %42, align 8, !tbaa !11
  br label %503

503:                                              ; preds = %498
  %504 = load i64, ptr %40, align 8, !tbaa !9
  %505 = add nsw i64 %504, 1
  store i64 %505, ptr %40, align 8, !tbaa !9
  br label %415, !llvm.loop !21

506:                                              ; preds = %415
  %507 = load double, ptr %42, align 8, !tbaa !11
  %508 = load ptr, ptr %24, align 8, !tbaa !5
  %509 = load i64, ptr %39, align 8, !tbaa !9
  %510 = getelementptr inbounds double, ptr %508, i64 %509
  store double %507, ptr %510, align 8, !tbaa !11
  %511 = load double, ptr %45, align 8, !tbaa !11
  %512 = load double, ptr %42, align 8, !tbaa !11
  %513 = fcmp oge double %511, %512
  br i1 %513, label %514, label %516

514:                                              ; preds = %506
  %515 = load double, ptr %45, align 8, !tbaa !11
  br label %518

516:                                              ; preds = %506
  %517 = load double, ptr %42, align 8, !tbaa !11
  br label %518

518:                                              ; preds = %516, %514
  %519 = phi double [ %515, %514 ], [ %517, %516 ]
  store double %519, ptr %45, align 8, !tbaa !11
  br label %520

520:                                              ; preds = %518
  %521 = load i64, ptr %39, align 8, !tbaa !9
  %522 = add nsw i64 %521, 1
  store i64 %522, ptr %39, align 8, !tbaa !9
  br label %313, !llvm.loop !22

523:                                              ; preds = %313
  br label %524

524:                                              ; preds = %523, %309
  %525 = load ptr, ptr %15, align 8, !tbaa !5
  %526 = load i64, ptr %525, align 8, !tbaa !9
  %527 = icmp eq i64 %526, 0
  br i1 %527, label %528, label %530

528:                                              ; preds = %524
  store double 1.000000e+00, ptr %34, align 8, !tbaa !11
  %529 = load double, ptr %34, align 8, !tbaa !11
  store double %529, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %778

530:                                              ; preds = %524
  %531 = load double, ptr %45, align 8, !tbaa !11
  %532 = fcmp oeq double %531, 0.000000e+00
  br i1 %532, label %533, label %535

533:                                              ; preds = %530
  %534 = load double, ptr %34, align 8, !tbaa !11
  store double %534, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %778

535:                                              ; preds = %530
  br label %536

536:                                              ; preds = %535
  store double 0.000000e+00, ptr %46, align 8, !tbaa !11
  store i64 0, ptr %43, align 8, !tbaa !9
  br label %537

537:                                              ; preds = %769, %536
  %538 = load ptr, ptr %15, align 8, !tbaa !5
  %539 = load ptr, ptr %23, align 8, !tbaa !5
  %540 = load ptr, ptr %15, align 8, !tbaa !5
  %541 = load i64, ptr %540, align 8, !tbaa !9
  %542 = add nsw i64 %541, 1
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %539, i64 %542
  %544 = load ptr, ptr %23, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.doublecomplex, ptr %544, i64 1
  %546 = getelementptr inbounds [3 x i64], ptr %44, i64 0, i64 0
  %547 = call i32 @zlacn2_(ptr noundef %538, ptr noundef %543, ptr noundef %545, ptr noundef %46, ptr noundef %43, ptr noundef %546)
  %548 = load i64, ptr %43, align 8, !tbaa !9
  %549 = icmp ne i64 %548, 0
  br i1 %549, label %550, label %770

550:                                              ; preds = %537
  %551 = load i64, ptr %43, align 8, !tbaa !9
  %552 = icmp eq i64 %551, 2
  br i1 %552, label %553, label %661

553:                                              ; preds = %550
  %554 = load ptr, ptr %15, align 8, !tbaa !5
  %555 = load i64, ptr %554, align 8, !tbaa !9
  store i64 %555, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %556

556:                                              ; preds = %598, %553
  %557 = load i64, ptr %39, align 8, !tbaa !9
  %558 = load i64, ptr %30, align 8, !tbaa !9
  %559 = icmp sle i64 %557, %558
  br i1 %559, label %560, label %601

560:                                              ; preds = %556
  %561 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %561, ptr %31, align 8, !tbaa !9
  %562 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %562, ptr %32, align 8, !tbaa !9
  %563 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %563, ptr %33, align 8, !tbaa !9
  %564 = load ptr, ptr %24, align 8, !tbaa !5
  %565 = load i64, ptr %33, align 8, !tbaa !9
  %566 = getelementptr inbounds double, ptr %564, i64 %565
  %567 = load double, ptr %566, align 8, !tbaa !11
  %568 = load ptr, ptr %23, align 8, !tbaa !5
  %569 = load i64, ptr %32, align 8, !tbaa !9
  %570 = getelementptr inbounds %struct.doublecomplex, ptr %568, i64 %569
  %571 = getelementptr inbounds %struct.doublecomplex, ptr %570, i32 0, i32 0
  %572 = load double, ptr %571, align 8, !tbaa !13
  %573 = fmul double %567, %572
  %574 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %573, ptr %574, align 8, !tbaa !13
  %575 = load ptr, ptr %24, align 8, !tbaa !5
  %576 = load i64, ptr %33, align 8, !tbaa !9
  %577 = getelementptr inbounds double, ptr %575, i64 %576
  %578 = load double, ptr %577, align 8, !tbaa !11
  %579 = load ptr, ptr %23, align 8, !tbaa !5
  %580 = load i64, ptr %32, align 8, !tbaa !9
  %581 = getelementptr inbounds %struct.doublecomplex, ptr %579, i64 %580
  %582 = getelementptr inbounds %struct.doublecomplex, ptr %581, i32 0, i32 1
  %583 = load double, ptr %582, align 8, !tbaa !15
  %584 = fmul double %578, %583
  %585 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %584, ptr %585, align 8, !tbaa !15
  %586 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %587 = load double, ptr %586, align 8, !tbaa !13
  %588 = load ptr, ptr %23, align 8, !tbaa !5
  %589 = load i64, ptr %31, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.doublecomplex, ptr %588, i64 %589
  %591 = getelementptr inbounds %struct.doublecomplex, ptr %590, i32 0, i32 0
  store double %587, ptr %591, align 8, !tbaa !13
  %592 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %593 = load double, ptr %592, align 8, !tbaa !15
  %594 = load ptr, ptr %23, align 8, !tbaa !5
  %595 = load i64, ptr %31, align 8, !tbaa !9
  %596 = getelementptr inbounds %struct.doublecomplex, ptr %594, i64 %595
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %596, i32 0, i32 1
  store double %593, ptr %597, align 8, !tbaa !15
  br label %598

598:                                              ; preds = %560
  %599 = load i64, ptr %39, align 8, !tbaa !9
  %600 = add nsw i64 %599, 1
  store i64 %600, ptr %39, align 8, !tbaa !9
  br label %556, !llvm.loop !23

601:                                              ; preds = %556
  %602 = load i64, ptr %41, align 8, !tbaa !9
  %603 = icmp ne i64 %602, 0
  br i1 %603, label %604, label %617

604:                                              ; preds = %601
  %605 = load ptr, ptr %15, align 8, !tbaa !5
  %606 = load ptr, ptr %18, align 8, !tbaa !5
  %607 = load i64, ptr %29, align 8, !tbaa !9
  %608 = getelementptr inbounds %struct.doublecomplex, ptr %606, i64 %607
  %609 = load ptr, ptr %19, align 8, !tbaa !5
  %610 = load ptr, ptr %20, align 8, !tbaa !5
  %611 = getelementptr inbounds i64, ptr %610, i64 1
  %612 = load ptr, ptr %23, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.doublecomplex, ptr %612, i64 1
  %614 = load ptr, ptr %15, align 8, !tbaa !5
  %615 = load ptr, ptr %22, align 8, !tbaa !5
  %616 = call i32 @zhetrs_(ptr noundef @.str.1, ptr noundef %605, ptr noundef @c__1, ptr noundef %608, ptr noundef %609, ptr noundef %611, ptr noundef %613, ptr noundef %614, ptr noundef %615)
  br label %630

617:                                              ; preds = %601
  %618 = load ptr, ptr %15, align 8, !tbaa !5
  %619 = load ptr, ptr %18, align 8, !tbaa !5
  %620 = load i64, ptr %29, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.doublecomplex, ptr %619, i64 %620
  %622 = load ptr, ptr %19, align 8, !tbaa !5
  %623 = load ptr, ptr %20, align 8, !tbaa !5
  %624 = getelementptr inbounds i64, ptr %623, i64 1
  %625 = load ptr, ptr %23, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.doublecomplex, ptr %625, i64 1
  %627 = load ptr, ptr %15, align 8, !tbaa !5
  %628 = load ptr, ptr %22, align 8, !tbaa !5
  %629 = call i32 @zhetrs_(ptr noundef @.str.2, ptr noundef %618, ptr noundef @c__1, ptr noundef %621, ptr noundef %622, ptr noundef %624, ptr noundef %626, ptr noundef %627, ptr noundef %628)
  br label %630

630:                                              ; preds = %617, %604
  %631 = load ptr, ptr %15, align 8, !tbaa !5
  %632 = load i64, ptr %631, align 8, !tbaa !9
  store i64 %632, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %633

633:                                              ; preds = %657, %630
  %634 = load i64, ptr %39, align 8, !tbaa !9
  %635 = load i64, ptr %30, align 8, !tbaa !9
  %636 = icmp sle i64 %634, %635
  br i1 %636, label %637, label %660

637:                                              ; preds = %633
  %638 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %638, ptr %31, align 8, !tbaa !9
  %639 = load ptr, ptr %23, align 8, !tbaa !5
  %640 = load i64, ptr %39, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %639, i64 %640
  %642 = load ptr, ptr %21, align 8, !tbaa !5
  %643 = load i64, ptr %39, align 8, !tbaa !9
  %644 = getelementptr inbounds %struct.doublecomplex, ptr %642, i64 %643
  call void @z_div(ptr noundef %37, ptr noundef %641, ptr noundef %644)
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %646 = load double, ptr %645, align 8, !tbaa !13
  %647 = load ptr, ptr %23, align 8, !tbaa !5
  %648 = load i64, ptr %31, align 8, !tbaa !9
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %647, i64 %648
  %650 = getelementptr inbounds %struct.doublecomplex, ptr %649, i32 0, i32 0
  store double %646, ptr %650, align 8, !tbaa !13
  %651 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %652 = load double, ptr %651, align 8, !tbaa !15
  %653 = load ptr, ptr %23, align 8, !tbaa !5
  %654 = load i64, ptr %31, align 8, !tbaa !9
  %655 = getelementptr inbounds %struct.doublecomplex, ptr %653, i64 %654
  %656 = getelementptr inbounds %struct.doublecomplex, ptr %655, i32 0, i32 1
  store double %652, ptr %656, align 8, !tbaa !15
  br label %657

657:                                              ; preds = %637
  %658 = load i64, ptr %39, align 8, !tbaa !9
  %659 = add nsw i64 %658, 1
  store i64 %659, ptr %39, align 8, !tbaa !9
  br label %633, !llvm.loop !24

660:                                              ; preds = %633
  br label %769

661:                                              ; preds = %550
  %662 = load ptr, ptr %15, align 8, !tbaa !5
  %663 = load i64, ptr %662, align 8, !tbaa !9
  store i64 %663, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %664

664:                                              ; preds = %688, %661
  %665 = load i64, ptr %39, align 8, !tbaa !9
  %666 = load i64, ptr %30, align 8, !tbaa !9
  %667 = icmp sle i64 %665, %666
  br i1 %667, label %668, label %691

668:                                              ; preds = %664
  %669 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %669, ptr %31, align 8, !tbaa !9
  %670 = load ptr, ptr %23, align 8, !tbaa !5
  %671 = load i64, ptr %39, align 8, !tbaa !9
  %672 = getelementptr inbounds %struct.doublecomplex, ptr %670, i64 %671
  %673 = load ptr, ptr %21, align 8, !tbaa !5
  %674 = load i64, ptr %39, align 8, !tbaa !9
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %673, i64 %674
  call void @z_div(ptr noundef %37, ptr noundef %672, ptr noundef %675)
  %676 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %677 = load double, ptr %676, align 8, !tbaa !13
  %678 = load ptr, ptr %23, align 8, !tbaa !5
  %679 = load i64, ptr %31, align 8, !tbaa !9
  %680 = getelementptr inbounds %struct.doublecomplex, ptr %678, i64 %679
  %681 = getelementptr inbounds %struct.doublecomplex, ptr %680, i32 0, i32 0
  store double %677, ptr %681, align 8, !tbaa !13
  %682 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %683 = load double, ptr %682, align 8, !tbaa !15
  %684 = load ptr, ptr %23, align 8, !tbaa !5
  %685 = load i64, ptr %31, align 8, !tbaa !9
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %684, i64 %685
  %687 = getelementptr inbounds %struct.doublecomplex, ptr %686, i32 0, i32 1
  store double %683, ptr %687, align 8, !tbaa !15
  br label %688

688:                                              ; preds = %668
  %689 = load i64, ptr %39, align 8, !tbaa !9
  %690 = add nsw i64 %689, 1
  store i64 %690, ptr %39, align 8, !tbaa !9
  br label %664, !llvm.loop !25

691:                                              ; preds = %664
  %692 = load i64, ptr %41, align 8, !tbaa !9
  %693 = icmp ne i64 %692, 0
  br i1 %693, label %694, label %707

694:                                              ; preds = %691
  %695 = load ptr, ptr %15, align 8, !tbaa !5
  %696 = load ptr, ptr %18, align 8, !tbaa !5
  %697 = load i64, ptr %29, align 8, !tbaa !9
  %698 = getelementptr inbounds %struct.doublecomplex, ptr %696, i64 %697
  %699 = load ptr, ptr %19, align 8, !tbaa !5
  %700 = load ptr, ptr %20, align 8, !tbaa !5
  %701 = getelementptr inbounds i64, ptr %700, i64 1
  %702 = load ptr, ptr %23, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.doublecomplex, ptr %702, i64 1
  %704 = load ptr, ptr %15, align 8, !tbaa !5
  %705 = load ptr, ptr %22, align 8, !tbaa !5
  %706 = call i32 @zhetrs_(ptr noundef @.str.1, ptr noundef %695, ptr noundef @c__1, ptr noundef %698, ptr noundef %699, ptr noundef %701, ptr noundef %703, ptr noundef %704, ptr noundef %705)
  br label %720

707:                                              ; preds = %691
  %708 = load ptr, ptr %15, align 8, !tbaa !5
  %709 = load ptr, ptr %18, align 8, !tbaa !5
  %710 = load i64, ptr %29, align 8, !tbaa !9
  %711 = getelementptr inbounds %struct.doublecomplex, ptr %709, i64 %710
  %712 = load ptr, ptr %19, align 8, !tbaa !5
  %713 = load ptr, ptr %20, align 8, !tbaa !5
  %714 = getelementptr inbounds i64, ptr %713, i64 1
  %715 = load ptr, ptr %23, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %715, i64 1
  %717 = load ptr, ptr %15, align 8, !tbaa !5
  %718 = load ptr, ptr %22, align 8, !tbaa !5
  %719 = call i32 @zhetrs_(ptr noundef @.str.2, ptr noundef %708, ptr noundef @c__1, ptr noundef %711, ptr noundef %712, ptr noundef %714, ptr noundef %716, ptr noundef %717, ptr noundef %718)
  br label %720

720:                                              ; preds = %707, %694
  %721 = load ptr, ptr %15, align 8, !tbaa !5
  %722 = load i64, ptr %721, align 8, !tbaa !9
  store i64 %722, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %723

723:                                              ; preds = %765, %720
  %724 = load i64, ptr %39, align 8, !tbaa !9
  %725 = load i64, ptr %30, align 8, !tbaa !9
  %726 = icmp sle i64 %724, %725
  br i1 %726, label %727, label %768

727:                                              ; preds = %723
  %728 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %728, ptr %31, align 8, !tbaa !9
  %729 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %729, ptr %32, align 8, !tbaa !9
  %730 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %730, ptr %33, align 8, !tbaa !9
  %731 = load ptr, ptr %24, align 8, !tbaa !5
  %732 = load i64, ptr %33, align 8, !tbaa !9
  %733 = getelementptr inbounds double, ptr %731, i64 %732
  %734 = load double, ptr %733, align 8, !tbaa !11
  %735 = load ptr, ptr %23, align 8, !tbaa !5
  %736 = load i64, ptr %32, align 8, !tbaa !9
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %735, i64 %736
  %738 = getelementptr inbounds %struct.doublecomplex, ptr %737, i32 0, i32 0
  %739 = load double, ptr %738, align 8, !tbaa !13
  %740 = fmul double %734, %739
  %741 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %740, ptr %741, align 8, !tbaa !13
  %742 = load ptr, ptr %24, align 8, !tbaa !5
  %743 = load i64, ptr %33, align 8, !tbaa !9
  %744 = getelementptr inbounds double, ptr %742, i64 %743
  %745 = load double, ptr %744, align 8, !tbaa !11
  %746 = load ptr, ptr %23, align 8, !tbaa !5
  %747 = load i64, ptr %32, align 8, !tbaa !9
  %748 = getelementptr inbounds %struct.doublecomplex, ptr %746, i64 %747
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %748, i32 0, i32 1
  %750 = load double, ptr %749, align 8, !tbaa !15
  %751 = fmul double %745, %750
  %752 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %751, ptr %752, align 8, !tbaa !15
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %754 = load double, ptr %753, align 8, !tbaa !13
  %755 = load ptr, ptr %23, align 8, !tbaa !5
  %756 = load i64, ptr %31, align 8, !tbaa !9
  %757 = getelementptr inbounds %struct.doublecomplex, ptr %755, i64 %756
  %758 = getelementptr inbounds %struct.doublecomplex, ptr %757, i32 0, i32 0
  store double %754, ptr %758, align 8, !tbaa !13
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %760 = load double, ptr %759, align 8, !tbaa !15
  %761 = load ptr, ptr %23, align 8, !tbaa !5
  %762 = load i64, ptr %31, align 8, !tbaa !9
  %763 = getelementptr inbounds %struct.doublecomplex, ptr %761, i64 %762
  %764 = getelementptr inbounds %struct.doublecomplex, ptr %763, i32 0, i32 1
  store double %760, ptr %764, align 8, !tbaa !15
  br label %765

765:                                              ; preds = %727
  %766 = load i64, ptr %39, align 8, !tbaa !9
  %767 = add nsw i64 %766, 1
  store i64 %767, ptr %39, align 8, !tbaa !9
  br label %723, !llvm.loop !26

768:                                              ; preds = %723
  br label %769

769:                                              ; preds = %768, %660
  br label %537

770:                                              ; preds = %537
  %771 = load double, ptr %46, align 8, !tbaa !11
  %772 = fcmp une double %771, 0.000000e+00
  br i1 %772, label %773, label %776

773:                                              ; preds = %770
  %774 = load double, ptr %46, align 8, !tbaa !11
  %775 = fdiv double 1.000000e+00, %774
  store double %775, ptr %34, align 8, !tbaa !11
  br label %776

776:                                              ; preds = %773, %770
  %777 = load double, ptr %34, align 8, !tbaa !11
  store double %777, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %778

778:                                              ; preds = %776, %533, %528, %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  %779 = load double, ptr %13, align 8
  ret double %779
}

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

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

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

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

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

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


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1

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

26:                                               ; preds = %12
  store i64 2, ptr %13, align 8, !tbaa !5
  %27 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %13) #4
  br label %250

28:                                               ; preds = %12
  %29 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %.not292 = icmp eq i64 %29, 0
  %30 = load i64, ptr %1, align 8, !tbaa !5
  %.not294329 = icmp slt i64 %30, 1
  br i1 %.not292, label %90, label %31

31:                                               ; preds = %28
  br i1 %.not294329, label %.loopexit306, label %.preheader307

.preheader307:                                    ; preds = %31, %._crit_edge
  %indvars.iv = phi i64 [ %indvars.iv.next, %._crit_edge ], [ 2, %31 ]
  %.0316 = phi double [ %89, %._crit_edge ], [ 0.000000e+00, %31 ]
  %.0283315 = phi i64 [ %60, %._crit_edge ], [ 1, %31 ]
  %32 = mul nsw i64 %.0283315, %18
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %20, i64 %32
  br label %33

33:                                               ; preds = %.preheader307, %33
  %.0275310 = phi double [ 0.000000e+00, %.preheader307 ], [ %56, %33 ]
  %.0279309 = phi i64 [ 1, %.preheader307 ], [ %57, %33 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0279309
  %34 = load double, ptr %gep, align 8, !tbaa !9
  %35 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.0279309
  %36 = getelementptr inbounds i8, ptr %gep, i64 8
  %37 = load double, ptr %36, align 8, !tbaa !12
  %38 = fneg double %37
  %39 = load <2 x double>, ptr %35, align 8, !tbaa !13
  %40 = insertelement <2 x double> poison, double %37, i64 0
  %41 = insertelement <2 x double> %40, double %38, i64 1
  %42 = fmul <2 x double> %39, %41
  %43 = shufflevector <2 x double> %42, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %44 = insertelement <2 x double> poison, double %34, i64 0
  %45 = shufflevector <2 x double> %44, <2 x double> poison, <2 x i32> zeroinitializer
  %46 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %45, <2 x double> %39, <2 x double> %43)
  store <2 x double> %46, ptr %14, align 16, !tbaa !13
  %47 = extractelement <2 x double> %46, i64 0
  %48 = fcmp oge double %47, 0.000000e+00
  %49 = fneg double %47
  %50 = select i1 %48, double %47, double %49
  %51 = call double @d_imag(ptr noundef nonnull %14) #4
  %52 = fcmp oge double %51, 0.000000e+00
  %53 = fneg double %51
  %54 = select i1 %52, double %51, double %53
  %55 = fadd double %50, %54
  %56 = fadd double %.0275310, %55
  %57 = add nuw i64 %.0279309, 1
  %exitcond.not = icmp eq i64 %57, %indvars.iv
  br i1 %exitcond.not, label %58, label %33, !llvm.loop !14

58:                                               ; preds = %33
  %59 = load i64, ptr %1, align 8, !tbaa !5
  %60 = add nuw nsw i64 %.0283315, 1
  %.not304311.not = icmp slt i64 %.0283315, %59
  br i1 %.not304311.not, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %58
  %61 = getelementptr %struct.doublecomplex, ptr %20, i64 %.0283315
  br label %62

62:                                               ; preds = %.lr.ph, %62
  %.1276313 = phi double [ %56, %.lr.ph ], [ %85, %62 ]
  %.1280312 = phi i64 [ %60, %.lr.ph ], [ %86, %62 ]
  %63 = mul nsw i64 %.1280312, %18
  %64 = getelementptr %struct.doublecomplex, ptr %61, i64 %63
  %65 = load double, ptr %64, align 8, !tbaa !9
  %66 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.1280312
  %67 = getelementptr inbounds i8, ptr %64, i64 8
  %68 = load double, ptr %67, align 8, !tbaa !12
  %69 = fneg double %68
  %70 = load <2 x double>, ptr %66, align 8, !tbaa !13
  %71 = insertelement <2 x double> poison, double %68, i64 0
  %72 = insertelement <2 x double> %71, double %69, i64 1
  %73 = fmul <2 x double> %70, %72
  %74 = shufflevector <2 x double> %73, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %75 = insertelement <2 x double> poison, double %65, i64 0
  %76 = shufflevector <2 x double> %75, <2 x double> poison, <2 x i32> zeroinitializer
  %77 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %76, <2 x double> %70, <2 x double> %74)
  store <2 x double> %77, ptr %14, align 16, !tbaa !13
  %78 = call double @d_imag(ptr noundef nonnull %14) #4
  %79 = insertelement <2 x double> %77, double %78, i64 1
  %80 = fcmp oge <2 x double> %79, zeroinitializer
  %81 = fneg <2 x double> %79
  %82 = select <2 x i1> %80, <2 x double> %79, <2 x double> %81
  %shift = shufflevector <2 x double> %82, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %83 = fadd <2 x double> %82, %shift
  %84 = extractelement <2 x double> %83, i64 0
  %85 = fadd double %.1276313, %84
  %86 = add nuw nsw i64 %.1280312, 1
  %.not304.not = icmp slt i64 %.1280312, %59
  br i1 %.not304.not, label %62, label %._crit_edge, !llvm.loop !16

._crit_edge:                                      ; preds = %62, %58
  %.1276.lcssa = phi double [ %56, %58 ], [ %85, %62 ]
  %87 = getelementptr inbounds double, ptr %23, i64 %.0283315
  store double %.1276.lcssa, ptr %87, align 8, !tbaa !13
  %88 = fcmp oge double %.0316, %.1276.lcssa
  %89 = select i1 %88, double %.0316, double %.1276.lcssa
  %.not297.not = icmp slt i64 %.0283315, %30
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  br i1 %.not297.not, label %.preheader307, label %.loopexit306thread-pre-split, !llvm.loop !17

90:                                               ; preds = %28
  br i1 %.not294329, label %.loopexit306, label %.preheader

.preheader:                                       ; preds = %90, %._crit_edge325
  %indvars.iv364 = phi i64 [ %indvars.iv.next365, %._crit_edge325 ], [ 2, %90 ]
  %.1331 = phi double [ %148, %._crit_edge325 ], [ 0.000000e+00, %90 ]
  %.1284330 = phi i64 [ %121, %._crit_edge325 ], [ 1, %90 ]
  %91 = getelementptr %struct.doublecomplex, ptr %20, i64 %.1284330
  br label %92

92:                                               ; preds = %.preheader, %92
  %.2277319 = phi double [ 0.000000e+00, %.preheader ], [ %117, %92 ]
  %.2281318 = phi i64 [ 1, %.preheader ], [ %118, %92 ]
  %93 = mul nsw i64 %.2281318, %18
  %94 = getelementptr %struct.doublecomplex, ptr %91, i64 %93
  %95 = load double, ptr %94, align 8, !tbaa !9
  %96 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.2281318
  %97 = getelementptr inbounds i8, ptr %94, i64 8
  %98 = load double, ptr %97, align 8, !tbaa !12
  %99 = fneg double %98
  %100 = load <2 x double>, ptr %96, align 8, !tbaa !13
  %101 = insertelement <2 x double> poison, double %98, i64 0
  %102 = insertelement <2 x double> %101, double %99, i64 1
  %103 = fmul <2 x double> %100, %102
  %104 = shufflevector <2 x double> %103, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %105 = insertelement <2 x double> poison, double %95, i64 0
  %106 = shufflevector <2 x double> %105, <2 x double> poison, <2 x i32> zeroinitializer
  %107 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %106, <2 x double> %100, <2 x double> %104)
  store <2 x double> %107, ptr %14, align 16, !tbaa !13
  %108 = extractelement <2 x double> %107, i64 0
  %109 = fcmp oge double %108, 0.000000e+00
  %110 = fneg double %108
  %111 = select i1 %109, double %108, double %110
  %112 = call double @d_imag(ptr noundef nonnull %14) #4
  %113 = fcmp oge double %112, 0.000000e+00
  %114 = fneg double %112
  %115 = select i1 %113, double %112, double %114
  %116 = fadd double %111, %115
  %117 = fadd double %.2277319, %116
  %118 = add nuw i64 %.2281318, 1
  %exitcond366.not = icmp eq i64 %118, %indvars.iv364
  br i1 %exitcond366.not, label %119, label %92, !llvm.loop !18

119:                                              ; preds = %92
  %120 = load i64, ptr %1, align 8, !tbaa !5
  %121 = add nuw nsw i64 %.1284330, 1
  %.not296320.not = icmp slt i64 %.1284330, %120
  br i1 %.not296320.not, label %.lr.ph324, label %._crit_edge325

.lr.ph324:                                        ; preds = %119
  %122 = mul nsw i64 %.1284330, %18
  %invariant.gep327 = getelementptr %struct.doublecomplex, ptr %20, i64 %122
  br label %123

123:                                              ; preds = %.lr.ph324, %123
  %.3322 = phi double [ %117, %.lr.ph324 ], [ %144, %123 ]
  %.3282321 = phi i64 [ %121, %.lr.ph324 ], [ %145, %123 ]
  %gep328 = getelementptr %struct.doublecomplex, ptr %invariant.gep327, i64 %.3282321
  %124 = load double, ptr %gep328, align 8, !tbaa !9
  %125 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.3282321
  %126 = getelementptr inbounds i8, ptr %gep328, i64 8
  %127 = load double, ptr %126, align 8, !tbaa !12
  %128 = fneg double %127
  %129 = load <2 x double>, ptr %125, align 8, !tbaa !13
  %130 = insertelement <2 x double> poison, double %127, i64 0
  %131 = insertelement <2 x double> %130, double %128, i64 1
  %132 = fmul <2 x double> %129, %131
  %133 = shufflevector <2 x double> %132, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %134 = insertelement <2 x double> poison, double %124, i64 0
  %135 = shufflevector <2 x double> %134, <2 x double> poison, <2 x i32> zeroinitializer
  %136 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %135, <2 x double> %129, <2 x double> %133)
  store <2 x double> %136, ptr %14, align 16, !tbaa !13
  %137 = call double @d_imag(ptr noundef nonnull %14) #4
  %138 = insertelement <2 x double> %136, double %137, i64 1
  %139 = fcmp oge <2 x double> %138, zeroinitializer
  %140 = fneg <2 x double> %138
  %141 = select <2 x i1> %139, <2 x double> %138, <2 x double> %140
  %shift416 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %142 = fadd <2 x double> %141, %shift416
  %143 = extractelement <2 x double> %142, i64 0
  %144 = fadd double %.3322, %143
  %145 = add nuw nsw i64 %.3282321, 1
  %.not296.not = icmp slt i64 %.3282321, %120
  br i1 %.not296.not, label %123, label %._crit_edge325, !llvm.loop !19

._crit_edge325:                                   ; preds = %123, %119
  %.3.lcssa = phi double [ %117, %119 ], [ %144, %123 ]
  %146 = getelementptr inbounds double, ptr %23, i64 %.1284330
  store double %.3.lcssa, ptr %146, align 8, !tbaa !13
  %147 = fcmp oge double %.1331, %.3.lcssa
  %148 = select i1 %147, double %.1331, double %.3.lcssa
  %.not294.not = icmp slt i64 %.1284330, %30
  %indvars.iv.next365 = add nuw i64 %indvars.iv364, 1
  br i1 %.not294.not, label %.preheader, label %.loopexit306thread-pre-split, !llvm.loop !20

.loopexit306thread-pre-split:                     ; preds = %._crit_edge, %._crit_edge325
  %.2.ph = phi double [ %148, %._crit_edge325 ], [ %89, %._crit_edge ]
  %.pr = load i64, ptr %1, align 8, !tbaa !5
  %149 = fcmp oeq double %.2.ph, 0.000000e+00
  br label %.loopexit306

.loopexit306:                                     ; preds = %.loopexit306thread-pre-split, %31, %90
  %150 = phi i64 [ %.pr, %.loopexit306thread-pre-split ], [ %30, %31 ], [ %30, %90 ]
  %.2 = phi i1 [ %149, %.loopexit306thread-pre-split ], [ true, %31 ], [ true, %90 ]
  %151 = icmp eq i64 %150, 0
  %brmerge = select i1 %151, i1 true, i1 %.2
  %.mux = select i1 %151, double 1.000000e+00, double 0.000000e+00
  br i1 %brmerge, label %250, label %152

152:                                              ; preds = %.loopexit306
  store double 0.000000e+00, ptr %17, align 8, !tbaa !13
  store i64 0, ptr %15, align 8, !tbaa !5
  %.str.2..str.1 = select i1 %.not292, ptr @.str.2, ptr @.str.1
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %152
  %153 = phi i64 [ %150, %152 ], [ %.be, %.loopexit.backedge ]
  %154 = getelementptr %struct.doublecomplex, ptr %9, i64 %153
  %155 = call i32 @zlacn2_(ptr noundef nonnull %1, ptr noundef %154, ptr noundef %9, ptr noundef nonnull %17, ptr noundef nonnull %15, ptr noundef nonnull %16) #4
  %156 = load i64, ptr %15, align 8, !tbaa !5
  switch i64 %156, label %204 [
    i64 0, label %246
    i64 2, label %157
  ]

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

.lr.ph336.preheader:                              ; preds = %157
  %min.iters.check400 = icmp eq i64 %158, 1
  br i1 %min.iters.check400, label %.lr.ph336.preheader418, label %vector.memcheck392

vector.memcheck392:                               ; preds = %.lr.ph336.preheader
  %159 = shl i64 %158, 4
  %scevgep393 = getelementptr i8, ptr %9, i64 %159
  %160 = shl i64 %158, 3
  %scevgep394 = getelementptr i8, ptr %10, i64 %160
  %bound0395 = icmp ugt ptr %scevgep394, %9
  %bound1396 = icmp ugt ptr %scevgep393, %10
  %found.conflict397 = and i1 %bound0395, %bound1396
  br i1 %found.conflict397, label %.lr.ph336.preheader418, label %vector.ph401

vector.ph401:                                     ; preds = %vector.memcheck392
  %n.vec403 = and i64 %158, 9223372036854775806
  %ind.end404 = or i64 %158, 1
  br label %vector.body406

vector.body406:                                   ; preds = %vector.body406, %vector.ph401
  %index407 = phi i64 [ 0, %vector.ph401 ], [ %index.next414, %vector.body406 ]
  %161 = getelementptr double, ptr %10, i64 %index407
  %wide.load409 = load <2 x double>, ptr %161, align 8, !tbaa !13, !alias.scope !21
  %162 = getelementptr %struct.doublecomplex, ptr %9, i64 %index407
  %wide.vec410 = load <4 x double>, ptr %162, align 8, !tbaa !13
  %strided.vec411 = shufflevector <4 x double> %wide.vec410, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec412 = shufflevector <4 x double> %wide.vec410, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %163 = fmul <2 x double> %wide.load409, %strided.vec411
  %164 = fmul <2 x double> %wide.load409, %strided.vec412
  %interleaved.vec413 = 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.vec413, ptr %162, align 8, !tbaa !13
  %index.next414 = add nuw i64 %index407, 2
  %165 = icmp eq i64 %index.next414, %n.vec403
  br i1 %165, label %middle.block398, label %vector.body406, !llvm.loop !24

middle.block398:                                  ; preds = %vector.body406
  %cmp.n415 = icmp eq i64 %158, %n.vec403
  %166 = shufflevector <2 x double> %163, <2 x double> %164, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n415, label %._crit_edge337, label %.lr.ph336.preheader418

.lr.ph336.preheader418:                           ; preds = %middle.block398, %vector.memcheck392, %.lr.ph336.preheader
  %.2285334.ph = phi i64 [ 1, %vector.memcheck392 ], [ 1, %.lr.ph336.preheader ], [ %ind.end404, %middle.block398 ]
  %xtraiter = and i64 %158, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph336.prol.loopexit, label %.lr.ph336.prol

.lr.ph336.prol:                                   ; preds = %.lr.ph336.preheader418
  %167 = getelementptr inbounds double, ptr %23, i64 %.2285334.ph
  %168 = load double, ptr %167, align 8, !tbaa !13
  %169 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.2285334.ph
  %170 = load <2 x double>, ptr %169, align 8, !tbaa !13
  %171 = insertelement <2 x double> poison, double %168, i64 0
  %172 = shufflevector <2 x double> %171, <2 x double> poison, <2 x i32> zeroinitializer
  %173 = fmul <2 x double> %172, %170
  store <2 x double> %173, ptr %169, align 8, !tbaa !13
  %174 = add nuw i64 %.2285334.ph, 1
  br label %.lr.ph336.prol.loopexit

.lr.ph336.prol.loopexit:                          ; preds = %.lr.ph336.prol, %.lr.ph336.preheader418
  %.lcssa420.unr = phi <2 x double> [ poison, %.lr.ph336.preheader418 ], [ %173, %.lr.ph336.prol ]
  %.2285334.unr = phi i64 [ %.2285334.ph, %.lr.ph336.preheader418 ], [ %174, %.lr.ph336.prol ]
  %175 = icmp eq i64 %158, %.2285334.ph
  br i1 %175, label %._crit_edge337, label %.lr.ph336

.lr.ph336:                                        ; preds = %.lr.ph336.prol.loopexit, %.lr.ph336
  %.2285334 = phi i64 [ %191, %.lr.ph336 ], [ %.2285334.unr, %.lr.ph336.prol.loopexit ]
  %176 = getelementptr inbounds double, ptr %23, i64 %.2285334
  %177 = load double, ptr %176, align 8, !tbaa !13
  %178 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.2285334
  %179 = load <2 x double>, ptr %178, align 8, !tbaa !13
  %180 = insertelement <2 x double> poison, double %177, i64 0
  %181 = shufflevector <2 x double> %180, <2 x double> poison, <2 x i32> zeroinitializer
  %182 = fmul <2 x double> %181, %179
  store <2 x double> %182, ptr %178, align 8, !tbaa !13
  %183 = add nuw i64 %.2285334, 1
  %184 = getelementptr double, ptr %10, i64 %.2285334
  %185 = load double, ptr %184, align 8, !tbaa !13
  %186 = getelementptr %struct.doublecomplex, ptr %9, i64 %.2285334
  %187 = load <2 x double>, ptr %186, align 8, !tbaa !13
  %188 = insertelement <2 x double> poison, double %185, i64 0
  %189 = shufflevector <2 x double> %188, <2 x double> poison, <2 x i32> zeroinitializer
  %190 = fmul <2 x double> %189, %187
  store <2 x double> %190, ptr %186, align 8, !tbaa !13
  %191 = add nuw i64 %.2285334, 2
  %exitcond367.not.1 = icmp eq i64 %183, %158
  br i1 %exitcond367.not.1, label %._crit_edge337, label %.lr.ph336, !llvm.loop !27

._crit_edge337:                                   ; preds = %.lr.ph336.prol.loopexit, %.lr.ph336, %middle.block398
  %192 = phi <2 x double> [ %166, %middle.block398 ], [ %.lcssa420.unr, %.lr.ph336.prol.loopexit ], [ %190, %.lr.ph336 ]
  store <2 x double> %192, ptr %14, align 16, !tbaa !13
  br label %193

193:                                              ; preds = %._crit_edge337, %157
  br i1 %.not292, label %196, label %194

194:                                              ; preds = %193
  %195 = call i32 @zhetrs_(ptr noundef nonnull @.str.1, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %9, ptr noundef nonnull %1, ptr noundef nonnull %8) #4
  br label %198

196:                                              ; preds = %193
  %197 = call i32 @zhetrs_(ptr noundef nonnull @.str.2, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %9, ptr noundef nonnull %1, ptr noundef nonnull %8) #4
  br label %198

198:                                              ; preds = %196, %194
  %199 = load i64, ptr %1, align 8, !tbaa !5
  %.not302339 = icmp slt i64 %199, 1
  br i1 %.not302339, label %.loopexit.backedge, label %.lr.ph342

.lr.ph342:                                        ; preds = %198, %.lr.ph342
  %.3286340 = phi i64 [ %203, %.lr.ph342 ], [ 1, %198 ]
  %200 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.3286340
  %201 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.3286340
  call void @z_div(ptr noundef nonnull %14, ptr noundef nonnull %200, ptr noundef nonnull %201) #4
  %202 = load <2 x double>, ptr %14, align 16, !tbaa !13
  store <2 x double> %202, ptr %200, align 8, !tbaa !13
  %203 = add nuw nsw i64 %.3286340, 1
  %.not302.not = icmp slt i64 %.3286340, %199
  br i1 %.not302.not, label %.lr.ph342, label %.loopexit.loopexit, !llvm.loop !28

204:                                              ; preds = %.loopexit
  %205 = load i64, ptr %1, align 8, !tbaa !5
  %.not299343 = icmp slt i64 %205, 1
  br i1 %.not299343, label %._crit_edge347, label %.lr.ph346

.lr.ph346:                                        ; preds = %204, %.lr.ph346
  %.4344 = phi i64 [ %209, %.lr.ph346 ], [ 1, %204 ]
  %206 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.4344
  %207 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.4344
  call void @z_div(ptr noundef nonnull %14, ptr noundef nonnull %206, ptr noundef nonnull %207) #4
  %208 = load <2 x double>, ptr %14, align 16, !tbaa !13
  store <2 x double> %208, ptr %206, align 8, !tbaa !13
  %209 = add nuw nsw i64 %.4344, 1
  %.not299.not = icmp slt i64 %.4344, %205
  br i1 %.not299.not, label %.lr.ph346, label %._crit_edge347, !llvm.loop !29

._crit_edge347:                                   ; preds = %.lr.ph346, %204
  %210 = call i32 @zhetrs_(ptr noundef nonnull %.str.2..str.1, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %9, ptr noundef nonnull %1, ptr noundef nonnull %8) #4
  %211 = load i64, ptr %1, align 8, !tbaa !5
  %.not300348 = icmp slt i64 %211, 1
  br i1 %.not300348, label %.loopexit.backedge, label %.lr.ph351.preheader

.lr.ph351.preheader:                              ; preds = %._crit_edge347
  %min.iters.check = icmp eq i64 %211, 1
  br i1 %min.iters.check, label %.lr.ph351.preheader417, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph351.preheader
  %212 = shl i64 %211, 4
  %scevgep = getelementptr i8, ptr %9, i64 %212
  %213 = shl i64 %211, 3
  %scevgep390 = getelementptr i8, ptr %10, i64 %213
  %bound0 = icmp ugt ptr %scevgep390, %9
  %bound1 = icmp ugt ptr %scevgep, %10
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph351.preheader417, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %214 = getelementptr double, ptr %10, i64 %index
  %wide.load = load <2 x double>, ptr %214, align 8, !tbaa !13, !alias.scope !30
  %215 = getelementptr %struct.doublecomplex, ptr %9, i64 %index
  %wide.vec = load <4 x double>, ptr %215, align 8, !tbaa !13
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec391 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %216 = fmul <2 x double> %wide.load, %strided.vec
  %217 = fmul <2 x double> %wide.load, %strided.vec391
  %interleaved.vec = shufflevector <2 x double> %216, <2 x double> %217, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %215, align 8, !tbaa !13
  %index.next = add nuw i64 %index, 2
  %218 = icmp eq i64 %index.next, %n.vec
  br i1 %218, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %211, %n.vec
  %219 = shufflevector <2 x double> %216, <2 x double> %217, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %..loopexit_crit_edge, label %.lr.ph351.preheader417

.lr.ph351.preheader417:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph351.preheader
  %.5349.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph351.preheader ], [ %ind.end, %middle.block ]
  %xtraiter431 = and i64 %211, 1
  %lcmp.mod432.not = icmp eq i64 %xtraiter431, 0
  br i1 %lcmp.mod432.not, label %.lr.ph351.prol.loopexit, label %.lr.ph351.prol

.lr.ph351.prol:                                   ; preds = %.lr.ph351.preheader417
  %220 = getelementptr inbounds double, ptr %23, i64 %.5349.ph
  %221 = load double, ptr %220, align 8, !tbaa !13
  %222 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.5349.ph
  %223 = load <2 x double>, ptr %222, align 8, !tbaa !13
  %224 = insertelement <2 x double> poison, double %221, i64 0
  %225 = shufflevector <2 x double> %224, <2 x double> poison, <2 x i32> zeroinitializer
  %226 = fmul <2 x double> %225, %223
  store <2 x double> %226, ptr %222, align 8, !tbaa !13
  %227 = add nuw i64 %.5349.ph, 1
  br label %.lr.ph351.prol.loopexit

.lr.ph351.prol.loopexit:                          ; preds = %.lr.ph351.prol, %.lr.ph351.preheader417
  %.lcssa423.unr = phi <2 x double> [ poison, %.lr.ph351.preheader417 ], [ %226, %.lr.ph351.prol ]
  %.5349.unr = phi i64 [ %.5349.ph, %.lr.ph351.preheader417 ], [ %227, %.lr.ph351.prol ]
  %228 = icmp eq i64 %211, %.5349.ph
  br i1 %228, label %..loopexit_crit_edge, label %.lr.ph351

.lr.ph351:                                        ; preds = %.lr.ph351.prol.loopexit, %.lr.ph351
  %.5349 = phi i64 [ %244, %.lr.ph351 ], [ %.5349.unr, %.lr.ph351.prol.loopexit ]
  %229 = getelementptr inbounds double, ptr %23, i64 %.5349
  %230 = load double, ptr %229, align 8, !tbaa !13
  %231 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.5349
  %232 = load <2 x double>, ptr %231, align 8, !tbaa !13
  %233 = insertelement <2 x double> poison, double %230, i64 0
  %234 = shufflevector <2 x double> %233, <2 x double> poison, <2 x i32> zeroinitializer
  %235 = fmul <2 x double> %234, %232
  store <2 x double> %235, ptr %231, align 8, !tbaa !13
  %236 = add nuw i64 %.5349, 1
  %237 = getelementptr double, ptr %10, i64 %.5349
  %238 = load double, ptr %237, align 8, !tbaa !13
  %239 = getelementptr %struct.doublecomplex, ptr %9, i64 %.5349
  %240 = load <2 x double>, ptr %239, align 8, !tbaa !13
  %241 = insertelement <2 x double> poison, double %238, i64 0
  %242 = shufflevector <2 x double> %241, <2 x double> poison, <2 x i32> zeroinitializer
  %243 = fmul <2 x double> %242, %240
  store <2 x double> %243, ptr %239, align 8, !tbaa !13
  %244 = add nuw i64 %.5349, 2
  %exitcond368.not.1 = icmp eq i64 %236, %211
  br i1 %exitcond368.not.1, label %..loopexit_crit_edge, label %.lr.ph351, !llvm.loop !34

..loopexit_crit_edge:                             ; preds = %.lr.ph351.prol.loopexit, %.lr.ph351, %middle.block
  %245 = phi <2 x double> [ %219, %middle.block ], [ %.lcssa423.unr, %.lr.ph351.prol.loopexit ], [ %243, %.lr.ph351 ]
  store <2 x double> %245, ptr %14, align 16, !tbaa !13
  br label %.loopexit.backedge

.loopexit.loopexit:                               ; preds = %.lr.ph342
  %.pre.pre = load i64, ptr %1, align 8, !tbaa !5
  br label %.loopexit.backedge

.loopexit.backedge:                               ; preds = %.loopexit.loopexit, %198, %._crit_edge347, %..loopexit_crit_edge
  %.be = phi i64 [ %.pre.pre, %.loopexit.loopexit ], [ %199, %198 ], [ %211, %._crit_edge347 ], [ %211, %..loopexit_crit_edge ]
  br label %.loopexit

246:                                              ; preds = %.loopexit
  %247 = load double, ptr %17, align 8, !tbaa !13
  %248 = fcmp une double %247, 0.000000e+00
  %249 = fdiv double 1.000000e+00, %247
  %.0287 = select i1 %248, double %249, double 0.000000e+00
  br label %250

250:                                              ; preds = %.loopexit306, %246, %26
  %.0288 = phi double [ 0.000000e+00, %26 ], [ %.0287, %246 ], [ %.mux, %.loopexit306 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #4
  ret double %.0288
}

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

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

declare i64 @lsame_(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 @zhetrs_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @z_div(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 <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #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 = !{!10, !11, i64 8}
!13 = !{!11, !11, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = distinct !{!24, !15, !25, !26}
!25 = !{!"llvm.loop.isvectorized", i32 1}
!26 = !{!"llvm.loop.unroll.runtime.disable"}
!27 = distinct !{!27, !15, !25}
!28 = distinct !{!28, !15}
!29 = distinct !{!29, !15}
!30 = !{!31}
!31 = distinct !{!31, !32}
!32 = distinct !{!32, !"LVerDomain"}
!33 = distinct !{!33, !15, !25, !26}
!34 = distinct !{!34, !15, !25}


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