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

; 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 [7 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b1 = external hidden global %struct.doublecomplex, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @zsptrf_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca %struct.doublecomplex, align 8
  %23 = alloca %struct.doublecomplex, align 8
  %24 = alloca %struct.doublecomplex, align 8
  %25 = alloca %struct.doublecomplex, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca %struct.doublecomplex, align 8
  %30 = alloca %struct.doublecomplex, align 8
  %31 = alloca %struct.doublecomplex, align 8
  %32 = alloca %struct.doublecomplex, align 8
  %33 = alloca %struct.doublecomplex, align 8
  %34 = alloca %struct.doublecomplex, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, 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 i64, align 8
  %43 = alloca %struct.doublecomplex, align 8
  %44 = alloca %struct.doublecomplex, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca double, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = getelementptr inbounds i64, ptr %54, i32 -1
  store ptr %55, ptr %10, align 8, !tbaa !5
  %56 = load ptr, ptr %9, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 -1
  store ptr %57, ptr %9, align 8, !tbaa !5
  %58 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 0, ptr %58, align 8, !tbaa !9
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = call i64 @lsame_(ptr noundef %59, ptr noundef @.str)
  store i64 %60, ptr %49, align 8, !tbaa !9
  %61 = load i64, ptr %49, align 8, !tbaa !9
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %69, label %63

63:                                               ; preds = %5
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = call i64 @lsame_(ptr noundef %64, ptr noundef @.str.1)
  %66 = icmp ne i64 %65, 0
  br i1 %66, label %69, label %67

67:                                               ; preds = %63
  %68 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 -1, ptr %68, align 8, !tbaa !9
  br label %76

69:                                               ; preds = %63, %5
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  %71 = load i64, ptr %70, align 8, !tbaa !9
  %72 = icmp slt i64 %71, 0
  br i1 %72, label %73, label %75

73:                                               ; preds = %69
  %74 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 -2, ptr %74, align 8, !tbaa !9
  br label %75

75:                                               ; preds = %73, %69
  br label %76

76:                                               ; preds = %75, %67
  %77 = load ptr, ptr %11, align 8, !tbaa !5
  %78 = load i64, ptr %77, align 8, !tbaa !9
  %79 = icmp ne i64 %78, 0
  br i1 %79, label %80, label %85

80:                                               ; preds = %76
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = load i64, ptr %81, align 8, !tbaa !9
  %83 = sub nsw i64 0, %82
  store i64 %83, ptr %12, align 8, !tbaa !9
  %84 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %12)
  store i32 0, ptr %6, align 4
  store i32 1, ptr %53, align 4
  br label %2409

85:                                               ; preds = %76
  %86 = call double @sqrt(double noundef 1.700000e+01) #5
  %87 = fadd double %86, 1.000000e+00
  %88 = fdiv double %87, 8.000000e+00
  store double %88, ptr %47, align 8, !tbaa !11
  %89 = load i64, ptr %49, align 8, !tbaa !9
  %90 = icmp ne i64 %89, 0
  br i1 %90, label %91, label %1200

91:                                               ; preds = %85
  %92 = load ptr, ptr %8, align 8, !tbaa !5
  %93 = load i64, ptr %92, align 8, !tbaa !9
  store i64 %93, ptr %28, align 8, !tbaa !9
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = load i64, ptr %94, align 8, !tbaa !9
  %96 = sub nsw i64 %95, 1
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  %99 = mul nsw i64 %96, %98
  %100 = sdiv i64 %99, 2
  %101 = add nsw i64 %100, 1
  store i64 %101, ptr %35, align 8, !tbaa !9
  br label %102

102:                                              ; preds = %1193, %91
  %103 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %103, ptr %40, align 8, !tbaa !9
  %104 = load i64, ptr %28, align 8, !tbaa !9
  %105 = icmp slt i64 %104, 1
  br i1 %105, label %106, label %107

106:                                              ; preds = %102
  br label %2408

107:                                              ; preds = %102
  store i64 1, ptr %48, align 8, !tbaa !9
  %108 = load i64, ptr %35, align 8, !tbaa !9
  %109 = load i64, ptr %28, align 8, !tbaa !9
  %110 = add nsw i64 %108, %109
  %111 = sub nsw i64 %110, 1
  store i64 %111, ptr %12, align 8, !tbaa !9
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = load i64, ptr %12, align 8, !tbaa !9
  %114 = getelementptr inbounds %struct.doublecomplex, ptr %112, i64 %113
  %115 = getelementptr inbounds %struct.doublecomplex, ptr %114, i32 0, i32 0
  %116 = load double, ptr %115, align 8, !tbaa !13
  store double %116, ptr %18, align 8, !tbaa !11
  %117 = load double, ptr %18, align 8, !tbaa !11
  %118 = fcmp oge double %117, 0.000000e+00
  br i1 %118, label %119, label %121

119:                                              ; preds = %107
  %120 = load double, ptr %18, align 8, !tbaa !11
  br label %124

121:                                              ; preds = %107
  %122 = load double, ptr %18, align 8, !tbaa !11
  %123 = fneg double %122
  br label %124

124:                                              ; preds = %121, %119
  %125 = phi double [ %120, %119 ], [ %123, %121 ]
  %126 = load ptr, ptr %9, align 8, !tbaa !5
  %127 = load i64, ptr %35, align 8, !tbaa !9
  %128 = load i64, ptr %28, align 8, !tbaa !9
  %129 = add nsw i64 %127, %128
  %130 = sub nsw i64 %129, 1
  %131 = getelementptr inbounds %struct.doublecomplex, ptr %126, i64 %130
  %132 = call double @d_imag(ptr noundef %131)
  store double %132, ptr %19, align 8, !tbaa !11
  %133 = load double, ptr %19, align 8, !tbaa !11
  %134 = fcmp oge double %133, 0.000000e+00
  br i1 %134, label %135, label %137

135:                                              ; preds = %124
  %136 = load double, ptr %19, align 8, !tbaa !11
  br label %140

137:                                              ; preds = %124
  %138 = load double, ptr %19, align 8, !tbaa !11
  %139 = fneg double %138
  br label %140

140:                                              ; preds = %137, %135
  %141 = phi double [ %136, %135 ], [ %139, %137 ]
  %142 = fadd double %125, %141
  store double %142, ptr %50, align 8, !tbaa !11
  %143 = load i64, ptr %28, align 8, !tbaa !9
  %144 = icmp sgt i64 %143, 1
  br i1 %144, label %145, label %187

145:                                              ; preds = %140
  %146 = load i64, ptr %28, align 8, !tbaa !9
  %147 = sub nsw i64 %146, 1
  store i64 %147, ptr %12, align 8, !tbaa !9
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = load i64, ptr %35, align 8, !tbaa !9
  %150 = getelementptr inbounds %struct.doublecomplex, ptr %148, i64 %149
  %151 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %150, ptr noundef @c__1)
  store i64 %151, ptr %45, align 8, !tbaa !9
  %152 = load i64, ptr %35, align 8, !tbaa !9
  %153 = load i64, ptr %45, align 8, !tbaa !9
  %154 = add nsw i64 %152, %153
  %155 = sub nsw i64 %154, 1
  store i64 %155, ptr %12, align 8, !tbaa !9
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = load i64, ptr %12, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct.doublecomplex, ptr %156, i64 %157
  %159 = getelementptr inbounds %struct.doublecomplex, ptr %158, i32 0, i32 0
  %160 = load double, ptr %159, align 8, !tbaa !13
  store double %160, ptr %18, align 8, !tbaa !11
  %161 = load double, ptr %18, align 8, !tbaa !11
  %162 = fcmp oge double %161, 0.000000e+00
  br i1 %162, label %163, label %165

163:                                              ; preds = %145
  %164 = load double, ptr %18, align 8, !tbaa !11
  br label %168

165:                                              ; preds = %145
  %166 = load double, ptr %18, align 8, !tbaa !11
  %167 = fneg double %166
  br label %168

168:                                              ; preds = %165, %163
  %169 = phi double [ %164, %163 ], [ %167, %165 ]
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = load i64, ptr %35, align 8, !tbaa !9
  %172 = load i64, ptr %45, align 8, !tbaa !9
  %173 = add nsw i64 %171, %172
  %174 = sub nsw i64 %173, 1
  %175 = getelementptr inbounds %struct.doublecomplex, ptr %170, i64 %174
  %176 = call double @d_imag(ptr noundef %175)
  store double %176, ptr %19, align 8, !tbaa !11
  %177 = load double, ptr %19, align 8, !tbaa !11
  %178 = fcmp oge double %177, 0.000000e+00
  br i1 %178, label %179, label %181

179:                                              ; preds = %168
  %180 = load double, ptr %19, align 8, !tbaa !11
  br label %184

181:                                              ; preds = %168
  %182 = load double, ptr %19, align 8, !tbaa !11
  %183 = fneg double %182
  br label %184

184:                                              ; preds = %181, %179
  %185 = phi double [ %180, %179 ], [ %183, %181 ]
  %186 = fadd double %169, %185
  store double %186, ptr %51, align 8, !tbaa !11
  br label %188

187:                                              ; preds = %140
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  br label %188

188:                                              ; preds = %187, %184
  %189 = load double, ptr %50, align 8, !tbaa !11
  %190 = load double, ptr %51, align 8, !tbaa !11
  %191 = fcmp oge double %189, %190
  br i1 %191, label %192, label %194

192:                                              ; preds = %188
  %193 = load double, ptr %50, align 8, !tbaa !11
  br label %196

194:                                              ; preds = %188
  %195 = load double, ptr %51, align 8, !tbaa !11
  br label %196

196:                                              ; preds = %194, %192
  %197 = phi double [ %193, %192 ], [ %195, %194 ]
  %198 = fcmp oeq double %197, 0.000000e+00
  br i1 %198, label %199, label %208

199:                                              ; preds = %196
  %200 = load ptr, ptr %11, align 8, !tbaa !5
  %201 = load i64, ptr %200, align 8, !tbaa !9
  %202 = icmp eq i64 %201, 0
  br i1 %202, label %203, label %206

203:                                              ; preds = %199
  %204 = load i64, ptr %28, align 8, !tbaa !9
  %205 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 %204, ptr %205, align 8, !tbaa !9
  br label %206

206:                                              ; preds = %203, %199
  %207 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %207, ptr %37, align 8, !tbaa !9
  br label %1173

208:                                              ; preds = %196
  %209 = load double, ptr %50, align 8, !tbaa !11
  %210 = load double, ptr %47, align 8, !tbaa !11
  %211 = load double, ptr %51, align 8, !tbaa !11
  %212 = fmul double %210, %211
  %213 = fcmp oge double %209, %212
  br i1 %213, label %214, label %216

214:                                              ; preds = %208
  %215 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %215, ptr %37, align 8, !tbaa !9
  br label %421

216:                                              ; preds = %208
  store double 0.000000e+00, ptr %52, align 8, !tbaa !11
  %217 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %217, ptr %46, align 8, !tbaa !9
  %218 = load i64, ptr %45, align 8, !tbaa !9
  %219 = load i64, ptr %45, align 8, !tbaa !9
  %220 = add nsw i64 %219, 1
  %221 = mul nsw i64 %218, %220
  %222 = sdiv i64 %221, 2
  %223 = load i64, ptr %45, align 8, !tbaa !9
  %224 = add nsw i64 %222, %223
  store i64 %224, ptr %39, align 8, !tbaa !9
  %225 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %225, ptr %12, align 8, !tbaa !9
  %226 = load i64, ptr %45, align 8, !tbaa !9
  %227 = add nsw i64 %226, 1
  store i64 %227, ptr %27, align 8, !tbaa !9
  br label %228

228:                                              ; preds = %299, %216
  %229 = load i64, ptr %27, align 8, !tbaa !9
  %230 = load i64, ptr %12, align 8, !tbaa !9
  %231 = icmp sle i64 %229, %230
  br i1 %231, label %232, label %302

232:                                              ; preds = %228
  %233 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %233, ptr %13, align 8, !tbaa !9
  %234 = load ptr, ptr %9, align 8, !tbaa !5
  %235 = load i64, ptr %13, align 8, !tbaa !9
  %236 = getelementptr inbounds %struct.doublecomplex, ptr %234, i64 %235
  %237 = getelementptr inbounds %struct.doublecomplex, ptr %236, i32 0, i32 0
  %238 = load double, ptr %237, align 8, !tbaa !13
  store double %238, ptr %18, align 8, !tbaa !11
  %239 = load double, ptr %18, align 8, !tbaa !11
  %240 = fcmp oge double %239, 0.000000e+00
  br i1 %240, label %241, label %243

241:                                              ; preds = %232
  %242 = load double, ptr %18, align 8, !tbaa !11
  br label %246

243:                                              ; preds = %232
  %244 = load double, ptr %18, align 8, !tbaa !11
  %245 = fneg double %244
  br label %246

246:                                              ; preds = %243, %241
  %247 = phi double [ %242, %241 ], [ %245, %243 ]
  %248 = load ptr, ptr %9, align 8, !tbaa !5
  %249 = load i64, ptr %39, align 8, !tbaa !9
  %250 = getelementptr inbounds %struct.doublecomplex, ptr %248, i64 %249
  %251 = call double @d_imag(ptr noundef %250)
  store double %251, ptr %19, align 8, !tbaa !11
  %252 = load double, ptr %19, align 8, !tbaa !11
  %253 = fcmp oge double %252, 0.000000e+00
  br i1 %253, label %254, label %256

254:                                              ; preds = %246
  %255 = load double, ptr %19, align 8, !tbaa !11
  br label %259

256:                                              ; preds = %246
  %257 = load double, ptr %19, align 8, !tbaa !11
  %258 = fneg double %257
  br label %259

259:                                              ; preds = %256, %254
  %260 = phi double [ %255, %254 ], [ %258, %256 ]
  %261 = fadd double %247, %260
  %262 = load double, ptr %52, align 8, !tbaa !11
  %263 = fcmp ogt double %261, %262
  br i1 %263, label %264, label %295

264:                                              ; preds = %259
  %265 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %265, ptr %13, align 8, !tbaa !9
  %266 = load ptr, ptr %9, align 8, !tbaa !5
  %267 = load i64, ptr %13, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.doublecomplex, ptr %266, i64 %267
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %268, i32 0, i32 0
  %270 = load double, ptr %269, align 8, !tbaa !13
  store double %270, ptr %18, align 8, !tbaa !11
  %271 = load double, ptr %18, align 8, !tbaa !11
  %272 = fcmp oge double %271, 0.000000e+00
  br i1 %272, label %273, label %275

273:                                              ; preds = %264
  %274 = load double, ptr %18, align 8, !tbaa !11
  br label %278

275:                                              ; preds = %264
  %276 = load double, ptr %18, align 8, !tbaa !11
  %277 = fneg double %276
  br label %278

278:                                              ; preds = %275, %273
  %279 = phi double [ %274, %273 ], [ %277, %275 ]
  %280 = load ptr, ptr %9, align 8, !tbaa !5
  %281 = load i64, ptr %39, align 8, !tbaa !9
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %280, i64 %281
  %283 = call double @d_imag(ptr noundef %282)
  store double %283, ptr %19, align 8, !tbaa !11
  %284 = load double, ptr %19, align 8, !tbaa !11
  %285 = fcmp oge double %284, 0.000000e+00
  br i1 %285, label %286, label %288

286:                                              ; preds = %278
  %287 = load double, ptr %19, align 8, !tbaa !11
  br label %291

288:                                              ; preds = %278
  %289 = load double, ptr %19, align 8, !tbaa !11
  %290 = fneg double %289
  br label %291

291:                                              ; preds = %288, %286
  %292 = phi double [ %287, %286 ], [ %290, %288 ]
  %293 = fadd double %279, %292
  store double %293, ptr %52, align 8, !tbaa !11
  %294 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %294, ptr %46, align 8, !tbaa !9
  br label %295

295:                                              ; preds = %291, %259
  %296 = load i64, ptr %27, align 8, !tbaa !9
  %297 = load i64, ptr %39, align 8, !tbaa !9
  %298 = add nsw i64 %297, %296
  store i64 %298, ptr %39, align 8, !tbaa !9
  br label %299

299:                                              ; preds = %295
  %300 = load i64, ptr %27, align 8, !tbaa !9
  %301 = add nsw i64 %300, 1
  store i64 %301, ptr %27, align 8, !tbaa !9
  br label %228, !llvm.loop !15

302:                                              ; preds = %228
  %303 = load i64, ptr %45, align 8, !tbaa !9
  %304 = sub nsw i64 %303, 1
  %305 = load i64, ptr %45, align 8, !tbaa !9
  %306 = mul nsw i64 %304, %305
  %307 = sdiv i64 %306, 2
  %308 = add nsw i64 %307, 1
  store i64 %308, ptr %41, align 8, !tbaa !9
  %309 = load i64, ptr %45, align 8, !tbaa !9
  %310 = icmp sgt i64 %309, 1
  br i1 %310, label %311, label %363

311:                                              ; preds = %302
  %312 = load i64, ptr %45, align 8, !tbaa !9
  %313 = sub nsw i64 %312, 1
  store i64 %313, ptr %12, align 8, !tbaa !9
  %314 = load ptr, ptr %9, align 8, !tbaa !5
  %315 = load i64, ptr %41, align 8, !tbaa !9
  %316 = getelementptr inbounds %struct.doublecomplex, ptr %314, i64 %315
  %317 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %316, ptr noundef @c__1)
  store i64 %317, ptr %46, align 8, !tbaa !9
  %318 = load i64, ptr %41, align 8, !tbaa !9
  %319 = load i64, ptr %46, align 8, !tbaa !9
  %320 = add nsw i64 %318, %319
  %321 = sub nsw i64 %320, 1
  store i64 %321, ptr %12, align 8, !tbaa !9
  %322 = load double, ptr %52, align 8, !tbaa !11
  store double %322, ptr %20, align 8, !tbaa !11
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = load i64, ptr %12, align 8, !tbaa !9
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %323, i64 %324
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %325, i32 0, i32 0
  %327 = load double, ptr %326, align 8, !tbaa !13
  store double %327, ptr %18, align 8, !tbaa !11
  %328 = load double, ptr %18, align 8, !tbaa !11
  %329 = fcmp oge double %328, 0.000000e+00
  br i1 %329, label %330, label %332

330:                                              ; preds = %311
  %331 = load double, ptr %18, align 8, !tbaa !11
  br label %335

332:                                              ; preds = %311
  %333 = load double, ptr %18, align 8, !tbaa !11
  %334 = fneg double %333
  br label %335

335:                                              ; preds = %332, %330
  %336 = phi double [ %331, %330 ], [ %334, %332 ]
  %337 = load ptr, ptr %9, align 8, !tbaa !5
  %338 = load i64, ptr %41, align 8, !tbaa !9
  %339 = load i64, ptr %46, align 8, !tbaa !9
  %340 = add nsw i64 %338, %339
  %341 = sub nsw i64 %340, 1
  %342 = getelementptr inbounds %struct.doublecomplex, ptr %337, i64 %341
  %343 = call double @d_imag(ptr noundef %342)
  store double %343, ptr %19, align 8, !tbaa !11
  %344 = load double, ptr %19, align 8, !tbaa !11
  %345 = fcmp oge double %344, 0.000000e+00
  br i1 %345, label %346, label %348

346:                                              ; preds = %335
  %347 = load double, ptr %19, align 8, !tbaa !11
  br label %351

348:                                              ; preds = %335
  %349 = load double, ptr %19, align 8, !tbaa !11
  %350 = fneg double %349
  br label %351

351:                                              ; preds = %348, %346
  %352 = phi double [ %347, %346 ], [ %350, %348 ]
  %353 = fadd double %336, %352
  store double %353, ptr %21, align 8, !tbaa !11
  %354 = load double, ptr %20, align 8, !tbaa !11
  %355 = load double, ptr %21, align 8, !tbaa !11
  %356 = fcmp oge double %354, %355
  br i1 %356, label %357, label %359

357:                                              ; preds = %351
  %358 = load double, ptr %20, align 8, !tbaa !11
  br label %361

359:                                              ; preds = %351
  %360 = load double, ptr %21, align 8, !tbaa !11
  br label %361

361:                                              ; preds = %359, %357
  %362 = phi double [ %358, %357 ], [ %360, %359 ]
  store double %362, ptr %52, align 8, !tbaa !11
  br label %363

363:                                              ; preds = %361, %302
  %364 = load double, ptr %50, align 8, !tbaa !11
  %365 = load double, ptr %47, align 8, !tbaa !11
  %366 = load double, ptr %51, align 8, !tbaa !11
  %367 = fmul double %365, %366
  %368 = load double, ptr %51, align 8, !tbaa !11
  %369 = load double, ptr %52, align 8, !tbaa !11
  %370 = fdiv double %368, %369
  %371 = fmul double %367, %370
  %372 = fcmp oge double %364, %371
  br i1 %372, label %373, label %375

373:                                              ; preds = %363
  %374 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %374, ptr %37, align 8, !tbaa !9
  br label %420

375:                                              ; preds = %363
  %376 = load i64, ptr %41, align 8, !tbaa !9
  %377 = load i64, ptr %45, align 8, !tbaa !9
  %378 = add nsw i64 %376, %377
  %379 = sub nsw i64 %378, 1
  store i64 %379, ptr %12, align 8, !tbaa !9
  %380 = load ptr, ptr %9, align 8, !tbaa !5
  %381 = load i64, ptr %12, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.doublecomplex, ptr %380, i64 %381
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %382, i32 0, i32 0
  %384 = load double, ptr %383, align 8, !tbaa !13
  store double %384, ptr %18, align 8, !tbaa !11
  %385 = load double, ptr %18, align 8, !tbaa !11
  %386 = fcmp oge double %385, 0.000000e+00
  br i1 %386, label %387, label %389

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

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

392:                                              ; preds = %389, %387
  %393 = phi double [ %388, %387 ], [ %391, %389 ]
  %394 = load ptr, ptr %9, align 8, !tbaa !5
  %395 = load i64, ptr %41, align 8, !tbaa !9
  %396 = load i64, ptr %45, align 8, !tbaa !9
  %397 = add nsw i64 %395, %396
  %398 = sub nsw i64 %397, 1
  %399 = getelementptr inbounds %struct.doublecomplex, ptr %394, i64 %398
  %400 = call double @d_imag(ptr noundef %399)
  store double %400, ptr %19, align 8, !tbaa !11
  %401 = load double, ptr %19, align 8, !tbaa !11
  %402 = fcmp oge double %401, 0.000000e+00
  br i1 %402, label %403, label %405

403:                                              ; preds = %392
  %404 = load double, ptr %19, align 8, !tbaa !11
  br label %408

405:                                              ; preds = %392
  %406 = load double, ptr %19, align 8, !tbaa !11
  %407 = fneg double %406
  br label %408

408:                                              ; preds = %405, %403
  %409 = phi double [ %404, %403 ], [ %407, %405 ]
  %410 = fadd double %393, %409
  %411 = load double, ptr %47, align 8, !tbaa !11
  %412 = load double, ptr %52, align 8, !tbaa !11
  %413 = fmul double %411, %412
  %414 = fcmp oge double %410, %413
  br i1 %414, label %415, label %417

415:                                              ; preds = %408
  %416 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %416, ptr %37, align 8, !tbaa !9
  br label %419

417:                                              ; preds = %408
  %418 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %418, ptr %37, align 8, !tbaa !9
  store i64 2, ptr %48, align 8, !tbaa !9
  br label %419

419:                                              ; preds = %417, %415
  br label %420

420:                                              ; preds = %419, %373
  br label %421

421:                                              ; preds = %420, %214
  %422 = load i64, ptr %28, align 8, !tbaa !9
  %423 = load i64, ptr %48, align 8, !tbaa !9
  %424 = sub nsw i64 %422, %423
  %425 = add nsw i64 %424, 1
  store i64 %425, ptr %36, align 8, !tbaa !9
  %426 = load i64, ptr %48, align 8, !tbaa !9
  %427 = icmp eq i64 %426, 2
  br i1 %427, label %428, label %433

428:                                              ; preds = %421
  %429 = load i64, ptr %40, align 8, !tbaa !9
  %430 = load i64, ptr %28, align 8, !tbaa !9
  %431 = sub nsw i64 %429, %430
  %432 = add nsw i64 %431, 1
  store i64 %432, ptr %40, align 8, !tbaa !9
  br label %433

433:                                              ; preds = %428, %421
  %434 = load i64, ptr %37, align 8, !tbaa !9
  %435 = load i64, ptr %36, align 8, !tbaa !9
  %436 = icmp ne i64 %434, %435
  br i1 %436, label %437, label %640

437:                                              ; preds = %433
  %438 = load i64, ptr %37, align 8, !tbaa !9
  %439 = sub nsw i64 %438, 1
  store i64 %439, ptr %12, align 8, !tbaa !9
  %440 = load ptr, ptr %9, align 8, !tbaa !5
  %441 = load i64, ptr %40, align 8, !tbaa !9
  %442 = getelementptr inbounds %struct.doublecomplex, ptr %440, i64 %441
  %443 = load ptr, ptr %9, align 8, !tbaa !5
  %444 = load i64, ptr %41, align 8, !tbaa !9
  %445 = getelementptr inbounds %struct.doublecomplex, ptr %443, i64 %444
  %446 = call i32 @f2c_zswap(ptr noundef %12, ptr noundef %442, ptr noundef @c__1, ptr noundef %445, ptr noundef @c__1)
  %447 = load i64, ptr %41, align 8, !tbaa !9
  %448 = load i64, ptr %37, align 8, !tbaa !9
  %449 = add nsw i64 %447, %448
  %450 = sub nsw i64 %449, 1
  store i64 %450, ptr %39, align 8, !tbaa !9
  %451 = load i64, ptr %36, align 8, !tbaa !9
  %452 = sub nsw i64 %451, 1
  store i64 %452, ptr %12, align 8, !tbaa !9
  %453 = load i64, ptr %37, align 8, !tbaa !9
  %454 = add nsw i64 %453, 1
  store i64 %454, ptr %27, align 8, !tbaa !9
  br label %455

455:                                              ; preds = %516, %437
  %456 = load i64, ptr %27, align 8, !tbaa !9
  %457 = load i64, ptr %12, align 8, !tbaa !9
  %458 = icmp sle i64 %456, %457
  br i1 %458, label %459, label %519

459:                                              ; preds = %455
  %460 = load i64, ptr %39, align 8, !tbaa !9
  %461 = load i64, ptr %27, align 8, !tbaa !9
  %462 = add nsw i64 %460, %461
  %463 = sub nsw i64 %462, 1
  store i64 %463, ptr %39, align 8, !tbaa !9
  %464 = load i64, ptr %40, align 8, !tbaa !9
  %465 = load i64, ptr %27, align 8, !tbaa !9
  %466 = add nsw i64 %464, %465
  %467 = sub nsw i64 %466, 1
  store i64 %467, ptr %13, align 8, !tbaa !9
  %468 = load ptr, ptr %9, align 8, !tbaa !5
  %469 = load i64, ptr %13, align 8, !tbaa !9
  %470 = getelementptr inbounds %struct.doublecomplex, ptr %468, i64 %469
  %471 = getelementptr inbounds %struct.doublecomplex, ptr %470, i32 0, i32 0
  %472 = load double, ptr %471, align 8, !tbaa !13
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %472, ptr %473, align 8, !tbaa !13
  %474 = load ptr, ptr %9, align 8, !tbaa !5
  %475 = load i64, ptr %13, align 8, !tbaa !9
  %476 = getelementptr inbounds %struct.doublecomplex, ptr %474, i64 %475
  %477 = getelementptr inbounds %struct.doublecomplex, ptr %476, i32 0, i32 1
  %478 = load double, ptr %477, align 8, !tbaa !17
  %479 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %478, ptr %479, align 8, !tbaa !17
  %480 = load i64, ptr %40, align 8, !tbaa !9
  %481 = load i64, ptr %27, align 8, !tbaa !9
  %482 = add nsw i64 %480, %481
  %483 = sub nsw i64 %482, 1
  store i64 %483, ptr %13, align 8, !tbaa !9
  %484 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %484, ptr %14, align 8, !tbaa !9
  %485 = load ptr, ptr %9, align 8, !tbaa !5
  %486 = load i64, ptr %14, align 8, !tbaa !9
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %485, i64 %486
  %488 = getelementptr inbounds %struct.doublecomplex, ptr %487, i32 0, i32 0
  %489 = load double, ptr %488, align 8, !tbaa !13
  %490 = load ptr, ptr %9, align 8, !tbaa !5
  %491 = load i64, ptr %13, align 8, !tbaa !9
  %492 = getelementptr inbounds %struct.doublecomplex, ptr %490, i64 %491
  %493 = getelementptr inbounds %struct.doublecomplex, ptr %492, i32 0, i32 0
  store double %489, ptr %493, align 8, !tbaa !13
  %494 = load ptr, ptr %9, align 8, !tbaa !5
  %495 = load i64, ptr %14, align 8, !tbaa !9
  %496 = getelementptr inbounds %struct.doublecomplex, ptr %494, i64 %495
  %497 = getelementptr inbounds %struct.doublecomplex, ptr %496, i32 0, i32 1
  %498 = load double, ptr %497, align 8, !tbaa !17
  %499 = load ptr, ptr %9, align 8, !tbaa !5
  %500 = load i64, ptr %13, align 8, !tbaa !9
  %501 = getelementptr inbounds %struct.doublecomplex, ptr %499, i64 %500
  %502 = getelementptr inbounds %struct.doublecomplex, ptr %501, i32 0, i32 1
  store double %498, ptr %502, align 8, !tbaa !17
  %503 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %503, ptr %13, align 8, !tbaa !9
  %504 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %505 = load double, ptr %504, align 8, !tbaa !13
  %506 = load ptr, ptr %9, align 8, !tbaa !5
  %507 = load i64, ptr %13, align 8, !tbaa !9
  %508 = getelementptr inbounds %struct.doublecomplex, ptr %506, i64 %507
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %508, i32 0, i32 0
  store double %505, ptr %509, align 8, !tbaa !13
  %510 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %511 = load double, ptr %510, align 8, !tbaa !17
  %512 = load ptr, ptr %9, align 8, !tbaa !5
  %513 = load i64, ptr %13, align 8, !tbaa !9
  %514 = getelementptr inbounds %struct.doublecomplex, ptr %512, i64 %513
  %515 = getelementptr inbounds %struct.doublecomplex, ptr %514, i32 0, i32 1
  store double %511, ptr %515, align 8, !tbaa !17
  br label %516

516:                                              ; preds = %459
  %517 = load i64, ptr %27, align 8, !tbaa !9
  %518 = add nsw i64 %517, 1
  store i64 %518, ptr %27, align 8, !tbaa !9
  br label %455, !llvm.loop !18

519:                                              ; preds = %455
  %520 = load i64, ptr %40, align 8, !tbaa !9
  %521 = load i64, ptr %36, align 8, !tbaa !9
  %522 = add nsw i64 %520, %521
  %523 = sub nsw i64 %522, 1
  store i64 %523, ptr %12, align 8, !tbaa !9
  %524 = load ptr, ptr %9, align 8, !tbaa !5
  %525 = load i64, ptr %12, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 %525
  %527 = getelementptr inbounds %struct.doublecomplex, ptr %526, i32 0, i32 0
  %528 = load double, ptr %527, align 8, !tbaa !13
  %529 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %528, ptr %529, align 8, !tbaa !13
  %530 = load ptr, ptr %9, align 8, !tbaa !5
  %531 = load i64, ptr %12, align 8, !tbaa !9
  %532 = getelementptr inbounds %struct.doublecomplex, ptr %530, i64 %531
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %532, i32 0, i32 1
  %534 = load double, ptr %533, align 8, !tbaa !17
  %535 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %534, ptr %535, align 8, !tbaa !17
  %536 = load i64, ptr %40, align 8, !tbaa !9
  %537 = load i64, ptr %36, align 8, !tbaa !9
  %538 = add nsw i64 %536, %537
  %539 = sub nsw i64 %538, 1
  store i64 %539, ptr %12, align 8, !tbaa !9
  %540 = load i64, ptr %41, align 8, !tbaa !9
  %541 = load i64, ptr %37, align 8, !tbaa !9
  %542 = add nsw i64 %540, %541
  %543 = sub nsw i64 %542, 1
  store i64 %543, ptr %13, align 8, !tbaa !9
  %544 = load ptr, ptr %9, align 8, !tbaa !5
  %545 = load i64, ptr %13, align 8, !tbaa !9
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %544, i64 %545
  %547 = getelementptr inbounds %struct.doublecomplex, ptr %546, i32 0, i32 0
  %548 = load double, ptr %547, align 8, !tbaa !13
  %549 = load ptr, ptr %9, align 8, !tbaa !5
  %550 = load i64, ptr %12, align 8, !tbaa !9
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %549, i64 %550
  %552 = getelementptr inbounds %struct.doublecomplex, ptr %551, i32 0, i32 0
  store double %548, ptr %552, align 8, !tbaa !13
  %553 = load ptr, ptr %9, align 8, !tbaa !5
  %554 = load i64, ptr %13, align 8, !tbaa !9
  %555 = getelementptr inbounds %struct.doublecomplex, ptr %553, i64 %554
  %556 = getelementptr inbounds %struct.doublecomplex, ptr %555, i32 0, i32 1
  %557 = load double, ptr %556, align 8, !tbaa !17
  %558 = load ptr, ptr %9, align 8, !tbaa !5
  %559 = load i64, ptr %12, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.doublecomplex, ptr %558, i64 %559
  %561 = getelementptr inbounds %struct.doublecomplex, ptr %560, i32 0, i32 1
  store double %557, ptr %561, align 8, !tbaa !17
  %562 = load i64, ptr %41, align 8, !tbaa !9
  %563 = load i64, ptr %37, align 8, !tbaa !9
  %564 = add nsw i64 %562, %563
  %565 = sub nsw i64 %564, 1
  store i64 %565, ptr %12, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %567 = load double, ptr %566, align 8, !tbaa !13
  %568 = load ptr, ptr %9, align 8, !tbaa !5
  %569 = load i64, ptr %12, align 8, !tbaa !9
  %570 = getelementptr inbounds %struct.doublecomplex, ptr %568, i64 %569
  %571 = getelementptr inbounds %struct.doublecomplex, ptr %570, i32 0, i32 0
  store double %567, ptr %571, align 8, !tbaa !13
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %573 = load double, ptr %572, align 8, !tbaa !17
  %574 = load ptr, ptr %9, align 8, !tbaa !5
  %575 = load i64, ptr %12, align 8, !tbaa !9
  %576 = getelementptr inbounds %struct.doublecomplex, ptr %574, i64 %575
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %576, i32 0, i32 1
  store double %573, ptr %577, align 8, !tbaa !17
  %578 = load i64, ptr %48, align 8, !tbaa !9
  %579 = icmp eq i64 %578, 2
  br i1 %579, label %580, label %639

580:                                              ; preds = %519
  %581 = load i64, ptr %35, align 8, !tbaa !9
  %582 = load i64, ptr %28, align 8, !tbaa !9
  %583 = add nsw i64 %581, %582
  %584 = sub nsw i64 %583, 2
  store i64 %584, ptr %12, align 8, !tbaa !9
  %585 = load ptr, ptr %9, align 8, !tbaa !5
  %586 = load i64, ptr %12, align 8, !tbaa !9
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %585, i64 %586
  %588 = getelementptr inbounds %struct.doublecomplex, ptr %587, i32 0, i32 0
  %589 = load double, ptr %588, align 8, !tbaa !13
  %590 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %589, ptr %590, align 8, !tbaa !13
  %591 = load ptr, ptr %9, align 8, !tbaa !5
  %592 = load i64, ptr %12, align 8, !tbaa !9
  %593 = getelementptr inbounds %struct.doublecomplex, ptr %591, i64 %592
  %594 = getelementptr inbounds %struct.doublecomplex, ptr %593, i32 0, i32 1
  %595 = load double, ptr %594, align 8, !tbaa !17
  %596 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %595, ptr %596, align 8, !tbaa !17
  %597 = load i64, ptr %35, align 8, !tbaa !9
  %598 = load i64, ptr %28, align 8, !tbaa !9
  %599 = add nsw i64 %597, %598
  %600 = sub nsw i64 %599, 2
  store i64 %600, ptr %12, align 8, !tbaa !9
  %601 = load i64, ptr %35, align 8, !tbaa !9
  %602 = load i64, ptr %37, align 8, !tbaa !9
  %603 = add nsw i64 %601, %602
  %604 = sub nsw i64 %603, 1
  store i64 %604, ptr %13, align 8, !tbaa !9
  %605 = load ptr, ptr %9, align 8, !tbaa !5
  %606 = load i64, ptr %13, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %605, i64 %606
  %608 = getelementptr inbounds %struct.doublecomplex, ptr %607, i32 0, i32 0
  %609 = load double, ptr %608, align 8, !tbaa !13
  %610 = load ptr, ptr %9, align 8, !tbaa !5
  %611 = load i64, ptr %12, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %610, i64 %611
  %613 = getelementptr inbounds %struct.doublecomplex, ptr %612, i32 0, i32 0
  store double %609, ptr %613, align 8, !tbaa !13
  %614 = load ptr, ptr %9, align 8, !tbaa !5
  %615 = load i64, ptr %13, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %615
  %617 = getelementptr inbounds %struct.doublecomplex, ptr %616, i32 0, i32 1
  %618 = load double, ptr %617, align 8, !tbaa !17
  %619 = load ptr, ptr %9, align 8, !tbaa !5
  %620 = load i64, ptr %12, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.doublecomplex, ptr %619, i64 %620
  %622 = getelementptr inbounds %struct.doublecomplex, ptr %621, i32 0, i32 1
  store double %618, ptr %622, align 8, !tbaa !17
  %623 = load i64, ptr %35, align 8, !tbaa !9
  %624 = load i64, ptr %37, align 8, !tbaa !9
  %625 = add nsw i64 %623, %624
  %626 = sub nsw i64 %625, 1
  store i64 %626, ptr %12, align 8, !tbaa !9
  %627 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %628 = load double, ptr %627, align 8, !tbaa !13
  %629 = load ptr, ptr %9, align 8, !tbaa !5
  %630 = load i64, ptr %12, align 8, !tbaa !9
  %631 = getelementptr inbounds %struct.doublecomplex, ptr %629, i64 %630
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %631, i32 0, i32 0
  store double %628, ptr %632, align 8, !tbaa !13
  %633 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %634 = load double, ptr %633, align 8, !tbaa !17
  %635 = load ptr, ptr %9, align 8, !tbaa !5
  %636 = load i64, ptr %12, align 8, !tbaa !9
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %635, i64 %636
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %637, i32 0, i32 1
  store double %634, ptr %638, align 8, !tbaa !17
  br label %639

639:                                              ; preds = %580, %519
  br label %640

640:                                              ; preds = %639, %433
  %641 = load i64, ptr %48, align 8, !tbaa !9
  %642 = icmp eq i64 %641, 1
  br i1 %642, label %643, label %679

643:                                              ; preds = %640
  %644 = load ptr, ptr %9, align 8, !tbaa !5
  %645 = load i64, ptr %35, align 8, !tbaa !9
  %646 = load i64, ptr %28, align 8, !tbaa !9
  %647 = add nsw i64 %645, %646
  %648 = sub nsw i64 %647, 1
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %644, i64 %648
  call void @z_div(ptr noundef %22, ptr noundef @c_b1, ptr noundef %649)
  %650 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %651 = load double, ptr %650, align 8, !tbaa !13
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %651, ptr %652, align 8, !tbaa !13
  %653 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %654 = load double, ptr %653, align 8, !tbaa !17
  %655 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %654, ptr %655, align 8, !tbaa !17
  %656 = load i64, ptr %28, align 8, !tbaa !9
  %657 = sub nsw i64 %656, 1
  store i64 %657, ptr %12, align 8, !tbaa !9
  %658 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %659 = load double, ptr %658, align 8, !tbaa !13
  %660 = fneg double %659
  %661 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %660, ptr %661, align 8, !tbaa !13
  %662 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %663 = load double, ptr %662, align 8, !tbaa !17
  %664 = fneg double %663
  %665 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %664, ptr %665, align 8, !tbaa !17
  %666 = load ptr, ptr %7, align 8, !tbaa !5
  %667 = load ptr, ptr %9, align 8, !tbaa !5
  %668 = load i64, ptr %35, align 8, !tbaa !9
  %669 = getelementptr inbounds %struct.doublecomplex, ptr %667, i64 %668
  %670 = load ptr, ptr %9, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %670, i64 1
  %672 = call i32 @zspr_(ptr noundef %666, ptr noundef %12, ptr noundef %22, ptr noundef %669, ptr noundef @c__1, ptr noundef %671)
  %673 = load i64, ptr %28, align 8, !tbaa !9
  %674 = sub nsw i64 %673, 1
  store i64 %674, ptr %12, align 8, !tbaa !9
  %675 = load ptr, ptr %9, align 8, !tbaa !5
  %676 = load i64, ptr %35, align 8, !tbaa !9
  %677 = getelementptr inbounds %struct.doublecomplex, ptr %675, i64 %676
  %678 = call i32 @f2c_zscal(ptr noundef %12, ptr noundef %30, ptr noundef %677, ptr noundef @c__1)
  br label %1172

679:                                              ; preds = %640
  %680 = load i64, ptr %28, align 8, !tbaa !9
  %681 = icmp sgt i64 %680, 2
  br i1 %681, label %682, label %1171

682:                                              ; preds = %679
  %683 = load i64, ptr %28, align 8, !tbaa !9
  %684 = sub nsw i64 %683, 1
  %685 = load i64, ptr %28, align 8, !tbaa !9
  %686 = sub nsw i64 %685, 1
  %687 = load i64, ptr %28, align 8, !tbaa !9
  %688 = mul nsw i64 %686, %687
  %689 = sdiv i64 %688, 2
  %690 = add nsw i64 %684, %689
  store i64 %690, ptr %12, align 8, !tbaa !9
  %691 = load ptr, ptr %9, align 8, !tbaa !5
  %692 = load i64, ptr %12, align 8, !tbaa !9
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %691, i64 %692
  %694 = getelementptr inbounds %struct.doublecomplex, ptr %693, i32 0, i32 0
  %695 = load double, ptr %694, align 8, !tbaa !13
  %696 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %695, ptr %696, align 8, !tbaa !13
  %697 = load ptr, ptr %9, align 8, !tbaa !5
  %698 = load i64, ptr %12, align 8, !tbaa !9
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %697, i64 %698
  %700 = getelementptr inbounds %struct.doublecomplex, ptr %699, i32 0, i32 1
  %701 = load double, ptr %700, align 8, !tbaa !17
  %702 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %701, ptr %702, align 8, !tbaa !17
  %703 = load ptr, ptr %9, align 8, !tbaa !5
  %704 = load i64, ptr %28, align 8, !tbaa !9
  %705 = sub nsw i64 %704, 1
  %706 = load i64, ptr %28, align 8, !tbaa !9
  %707 = sub nsw i64 %706, 2
  %708 = load i64, ptr %28, align 8, !tbaa !9
  %709 = sub nsw i64 %708, 1
  %710 = mul nsw i64 %707, %709
  %711 = sdiv i64 %710, 2
  %712 = add nsw i64 %705, %711
  %713 = getelementptr inbounds %struct.doublecomplex, ptr %703, i64 %712
  call void @z_div(ptr noundef %22, ptr noundef %713, ptr noundef %32)
  %714 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %715 = load double, ptr %714, align 8, !tbaa !13
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  store double %715, ptr %716, align 8, !tbaa !13
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %718 = load double, ptr %717, align 8, !tbaa !17
  %719 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  store double %718, ptr %719, align 8, !tbaa !17
  %720 = load ptr, ptr %9, align 8, !tbaa !5
  %721 = load i64, ptr %28, align 8, !tbaa !9
  %722 = load i64, ptr %28, align 8, !tbaa !9
  %723 = sub nsw i64 %722, 1
  %724 = load i64, ptr %28, align 8, !tbaa !9
  %725 = mul nsw i64 %723, %724
  %726 = sdiv i64 %725, 2
  %727 = add nsw i64 %721, %726
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %720, i64 %727
  call void @z_div(ptr noundef %22, ptr noundef %728, ptr noundef %32)
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %730 = load double, ptr %729, align 8, !tbaa !13
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  store double %730, ptr %731, align 8, !tbaa !13
  %732 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %733 = load double, ptr %732, align 8, !tbaa !17
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  store double %733, ptr %734, align 8, !tbaa !17
  %735 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %736 = load double, ptr %735, align 8, !tbaa !13
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %738 = load double, ptr %737, align 8, !tbaa !13
  %739 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %740 = load double, ptr %739, align 8, !tbaa !17
  %741 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %742 = load double, ptr %741, align 8, !tbaa !17
  %743 = fmul double %740, %742
  %744 = fneg double %743
  %745 = call double @llvm.fmuladd.f64(double %736, double %738, double %744)
  %746 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %745, ptr %746, align 8, !tbaa !13
  %747 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %748 = load double, ptr %747, align 8, !tbaa !13
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %750 = load double, ptr %749, align 8, !tbaa !17
  %751 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %752 = load double, ptr %751, align 8, !tbaa !17
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %754 = load double, ptr %753, align 8, !tbaa !13
  %755 = fmul double %752, %754
  %756 = call double @llvm.fmuladd.f64(double %748, double %750, double %755)
  %757 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %756, ptr %757, align 8, !tbaa !17
  %758 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %759 = load double, ptr %758, align 8, !tbaa !13
  %760 = fsub double %759, 1.000000e+00
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %760, ptr %761, align 8, !tbaa !13
  %762 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %763 = load double, ptr %762, align 8, !tbaa !17
  %764 = fsub double %763, 0.000000e+00
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %764, ptr %765, align 8, !tbaa !17
  call void @z_div(ptr noundef %22, ptr noundef @c_b1, ptr noundef %23)
  %766 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %767 = load double, ptr %766, align 8, !tbaa !13
  %768 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %767, ptr %768, align 8, !tbaa !13
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %770 = load double, ptr %769, align 8, !tbaa !17
  %771 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %770, ptr %771, align 8, !tbaa !17
  call void @z_div(ptr noundef %22, ptr noundef %29, ptr noundef %32)
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %773 = load double, ptr %772, align 8, !tbaa !13
  %774 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %773, ptr %774, align 8, !tbaa !13
  %775 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %776 = load double, ptr %775, align 8, !tbaa !17
  %777 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %776, ptr %777, align 8, !tbaa !17
  %778 = load i64, ptr %28, align 8, !tbaa !9
  %779 = sub nsw i64 %778, 2
  store i64 %779, ptr %27, align 8, !tbaa !9
  br label %780

780:                                              ; preds = %1167, %682
  %781 = load i64, ptr %27, align 8, !tbaa !9
  %782 = icmp sge i64 %781, 1
  br i1 %782, label %783, label %1170

783:                                              ; preds = %780
  %784 = load i64, ptr %27, align 8, !tbaa !9
  %785 = load i64, ptr %28, align 8, !tbaa !9
  %786 = sub nsw i64 %785, 2
  %787 = load i64, ptr %28, align 8, !tbaa !9
  %788 = sub nsw i64 %787, 1
  %789 = mul nsw i64 %786, %788
  %790 = sdiv i64 %789, 2
  %791 = add nsw i64 %784, %790
  store i64 %791, ptr %12, align 8, !tbaa !9
  %792 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %793 = load double, ptr %792, align 8, !tbaa !13
  %794 = load ptr, ptr %9, align 8, !tbaa !5
  %795 = load i64, ptr %12, align 8, !tbaa !9
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %794, i64 %795
  %797 = getelementptr inbounds %struct.doublecomplex, ptr %796, i32 0, i32 0
  %798 = load double, ptr %797, align 8, !tbaa !13
  %799 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %800 = load double, ptr %799, align 8, !tbaa !17
  %801 = load ptr, ptr %9, align 8, !tbaa !5
  %802 = load i64, ptr %12, align 8, !tbaa !9
  %803 = getelementptr inbounds %struct.doublecomplex, ptr %801, i64 %802
  %804 = getelementptr inbounds %struct.doublecomplex, ptr %803, i32 0, i32 1
  %805 = load double, ptr %804, align 8, !tbaa !17
  %806 = fmul double %800, %805
  %807 = fneg double %806
  %808 = call double @llvm.fmuladd.f64(double %793, double %798, double %807)
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %808, ptr %809, align 8, !tbaa !13
  %810 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %811 = load double, ptr %810, align 8, !tbaa !13
  %812 = load ptr, ptr %9, align 8, !tbaa !5
  %813 = load i64, ptr %12, align 8, !tbaa !9
  %814 = getelementptr inbounds %struct.doublecomplex, ptr %812, i64 %813
  %815 = getelementptr inbounds %struct.doublecomplex, ptr %814, i32 0, i32 1
  %816 = load double, ptr %815, align 8, !tbaa !17
  %817 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %818 = load double, ptr %817, align 8, !tbaa !17
  %819 = load ptr, ptr %9, align 8, !tbaa !5
  %820 = load i64, ptr %12, align 8, !tbaa !9
  %821 = getelementptr inbounds %struct.doublecomplex, ptr %819, i64 %820
  %822 = getelementptr inbounds %struct.doublecomplex, ptr %821, i32 0, i32 0
  %823 = load double, ptr %822, align 8, !tbaa !13
  %824 = fmul double %818, %823
  %825 = call double @llvm.fmuladd.f64(double %811, double %816, double %824)
  %826 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %825, ptr %826, align 8, !tbaa !17
  %827 = load i64, ptr %27, align 8, !tbaa !9
  %828 = load i64, ptr %28, align 8, !tbaa !9
  %829 = sub nsw i64 %828, 1
  %830 = load i64, ptr %28, align 8, !tbaa !9
  %831 = mul nsw i64 %829, %830
  %832 = sdiv i64 %831, 2
  %833 = add nsw i64 %827, %832
  store i64 %833, ptr %13, align 8, !tbaa !9
  %834 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %835 = load double, ptr %834, align 8, !tbaa !13
  %836 = load ptr, ptr %9, align 8, !tbaa !5
  %837 = load i64, ptr %13, align 8, !tbaa !9
  %838 = getelementptr inbounds %struct.doublecomplex, ptr %836, i64 %837
  %839 = getelementptr inbounds %struct.doublecomplex, ptr %838, i32 0, i32 0
  %840 = load double, ptr %839, align 8, !tbaa !13
  %841 = fsub double %835, %840
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %841, ptr %842, align 8, !tbaa !13
  %843 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %844 = load double, ptr %843, align 8, !tbaa !17
  %845 = load ptr, ptr %9, align 8, !tbaa !5
  %846 = load i64, ptr %13, align 8, !tbaa !9
  %847 = getelementptr inbounds %struct.doublecomplex, ptr %845, i64 %846
  %848 = getelementptr inbounds %struct.doublecomplex, ptr %847, i32 0, i32 1
  %849 = load double, ptr %848, align 8, !tbaa !17
  %850 = fsub double %844, %849
  %851 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %850, ptr %851, align 8, !tbaa !17
  %852 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %853 = load double, ptr %852, align 8, !tbaa !13
  %854 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %855 = load double, ptr %854, align 8, !tbaa !13
  %856 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %857 = load double, ptr %856, align 8, !tbaa !17
  %858 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %859 = load double, ptr %858, align 8, !tbaa !17
  %860 = fmul double %857, %859
  %861 = fneg double %860
  %862 = call double @llvm.fmuladd.f64(double %853, double %855, double %861)
  %863 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %862, ptr %863, align 8, !tbaa !13
  %864 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %865 = load double, ptr %864, align 8, !tbaa !13
  %866 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %867 = load double, ptr %866, align 8, !tbaa !17
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %869 = load double, ptr %868, align 8, !tbaa !17
  %870 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %871 = load double, ptr %870, align 8, !tbaa !13
  %872 = fmul double %869, %871
  %873 = call double @llvm.fmuladd.f64(double %865, double %867, double %872)
  %874 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %873, ptr %874, align 8, !tbaa !17
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %876 = load double, ptr %875, align 8, !tbaa !13
  %877 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %876, ptr %877, align 8, !tbaa !13
  %878 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %879 = load double, ptr %878, align 8, !tbaa !17
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %879, ptr %880, align 8, !tbaa !17
  %881 = load i64, ptr %27, align 8, !tbaa !9
  %882 = load i64, ptr %28, align 8, !tbaa !9
  %883 = sub nsw i64 %882, 1
  %884 = load i64, ptr %28, align 8, !tbaa !9
  %885 = mul nsw i64 %883, %884
  %886 = sdiv i64 %885, 2
  %887 = add nsw i64 %881, %886
  store i64 %887, ptr %12, align 8, !tbaa !9
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %889 = load double, ptr %888, align 8, !tbaa !13
  %890 = load ptr, ptr %9, align 8, !tbaa !5
  %891 = load i64, ptr %12, align 8, !tbaa !9
  %892 = getelementptr inbounds %struct.doublecomplex, ptr %890, i64 %891
  %893 = getelementptr inbounds %struct.doublecomplex, ptr %892, i32 0, i32 0
  %894 = load double, ptr %893, align 8, !tbaa !13
  %895 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %896 = load double, ptr %895, align 8, !tbaa !17
  %897 = load ptr, ptr %9, align 8, !tbaa !5
  %898 = load i64, ptr %12, align 8, !tbaa !9
  %899 = getelementptr inbounds %struct.doublecomplex, ptr %897, i64 %898
  %900 = getelementptr inbounds %struct.doublecomplex, ptr %899, i32 0, i32 1
  %901 = load double, ptr %900, align 8, !tbaa !17
  %902 = fmul double %896, %901
  %903 = fneg double %902
  %904 = call double @llvm.fmuladd.f64(double %889, double %894, double %903)
  %905 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %904, ptr %905, align 8, !tbaa !13
  %906 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %907 = load double, ptr %906, align 8, !tbaa !13
  %908 = load ptr, ptr %9, align 8, !tbaa !5
  %909 = load i64, ptr %12, align 8, !tbaa !9
  %910 = getelementptr inbounds %struct.doublecomplex, ptr %908, i64 %909
  %911 = getelementptr inbounds %struct.doublecomplex, ptr %910, i32 0, i32 1
  %912 = load double, ptr %911, align 8, !tbaa !17
  %913 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %914 = load double, ptr %913, align 8, !tbaa !17
  %915 = load ptr, ptr %9, align 8, !tbaa !5
  %916 = load i64, ptr %12, align 8, !tbaa !9
  %917 = getelementptr inbounds %struct.doublecomplex, ptr %915, i64 %916
  %918 = getelementptr inbounds %struct.doublecomplex, ptr %917, i32 0, i32 0
  %919 = load double, ptr %918, align 8, !tbaa !13
  %920 = fmul double %914, %919
  %921 = call double @llvm.fmuladd.f64(double %907, double %912, double %920)
  %922 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %921, ptr %922, align 8, !tbaa !17
  %923 = load i64, ptr %27, align 8, !tbaa !9
  %924 = load i64, ptr %28, align 8, !tbaa !9
  %925 = sub nsw i64 %924, 2
  %926 = load i64, ptr %28, align 8, !tbaa !9
  %927 = sub nsw i64 %926, 1
  %928 = mul nsw i64 %925, %927
  %929 = sdiv i64 %928, 2
  %930 = add nsw i64 %923, %929
  store i64 %930, ptr %13, align 8, !tbaa !9
  %931 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %932 = load double, ptr %931, align 8, !tbaa !13
  %933 = load ptr, ptr %9, align 8, !tbaa !5
  %934 = load i64, ptr %13, align 8, !tbaa !9
  %935 = getelementptr inbounds %struct.doublecomplex, ptr %933, i64 %934
  %936 = getelementptr inbounds %struct.doublecomplex, ptr %935, i32 0, i32 0
  %937 = load double, ptr %936, align 8, !tbaa !13
  %938 = fsub double %932, %937
  %939 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %938, ptr %939, align 8, !tbaa !13
  %940 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %941 = load double, ptr %940, align 8, !tbaa !17
  %942 = load ptr, ptr %9, align 8, !tbaa !5
  %943 = load i64, ptr %13, align 8, !tbaa !9
  %944 = getelementptr inbounds %struct.doublecomplex, ptr %942, i64 %943
  %945 = getelementptr inbounds %struct.doublecomplex, ptr %944, i32 0, i32 1
  %946 = load double, ptr %945, align 8, !tbaa !17
  %947 = fsub double %941, %946
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %947, ptr %948, align 8, !tbaa !17
  %949 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %950 = load double, ptr %949, align 8, !tbaa !13
  %951 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %952 = load double, ptr %951, align 8, !tbaa !13
  %953 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %954 = load double, ptr %953, align 8, !tbaa !17
  %955 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %956 = load double, ptr %955, align 8, !tbaa !17
  %957 = fmul double %954, %956
  %958 = fneg double %957
  %959 = call double @llvm.fmuladd.f64(double %950, double %952, double %958)
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %959, ptr %960, align 8, !tbaa !13
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %962 = load double, ptr %961, align 8, !tbaa !13
  %963 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %964 = load double, ptr %963, align 8, !tbaa !17
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %966 = load double, ptr %965, align 8, !tbaa !17
  %967 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %968 = load double, ptr %967, align 8, !tbaa !13
  %969 = fmul double %966, %968
  %970 = call double @llvm.fmuladd.f64(double %962, double %964, double %969)
  %971 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %970, ptr %971, align 8, !tbaa !17
  %972 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %973 = load double, ptr %972, align 8, !tbaa !13
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  store double %973, ptr %974, align 8, !tbaa !13
  %975 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %976 = load double, ptr %975, align 8, !tbaa !17
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  store double %976, ptr %977, align 8, !tbaa !17
  %978 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %978, ptr %26, align 8, !tbaa !9
  br label %979

979:                                              ; preds = %1124, %783
  %980 = load i64, ptr %26, align 8, !tbaa !9
  %981 = icmp sge i64 %980, 1
  br i1 %981, label %982, label %1127

982:                                              ; preds = %979
  %983 = load i64, ptr %26, align 8, !tbaa !9
  %984 = load i64, ptr %27, align 8, !tbaa !9
  %985 = sub nsw i64 %984, 1
  %986 = load i64, ptr %27, align 8, !tbaa !9
  %987 = mul nsw i64 %985, %986
  %988 = sdiv i64 %987, 2
  %989 = add nsw i64 %983, %988
  store i64 %989, ptr %12, align 8, !tbaa !9
  %990 = load i64, ptr %26, align 8, !tbaa !9
  %991 = load i64, ptr %27, align 8, !tbaa !9
  %992 = sub nsw i64 %991, 1
  %993 = load i64, ptr %27, align 8, !tbaa !9
  %994 = mul nsw i64 %992, %993
  %995 = sdiv i64 %994, 2
  %996 = add nsw i64 %990, %995
  store i64 %996, ptr %13, align 8, !tbaa !9
  %997 = load i64, ptr %26, align 8, !tbaa !9
  %998 = load i64, ptr %28, align 8, !tbaa !9
  %999 = sub nsw i64 %998, 1
  %1000 = load i64, ptr %28, align 8, !tbaa !9
  %1001 = mul nsw i64 %999, %1000
  %1002 = sdiv i64 %1001, 2
  %1003 = add nsw i64 %997, %1002
  store i64 %1003, ptr %14, align 8, !tbaa !9
  %1004 = load ptr, ptr %9, align 8, !tbaa !5
  %1005 = load i64, ptr %14, align 8, !tbaa !9
  %1006 = getelementptr inbounds %struct.doublecomplex, ptr %1004, i64 %1005
  %1007 = getelementptr inbounds %struct.doublecomplex, ptr %1006, i32 0, i32 0
  %1008 = load double, ptr %1007, align 8, !tbaa !13
  %1009 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %1010 = load double, ptr %1009, align 8, !tbaa !13
  %1011 = load ptr, ptr %9, align 8, !tbaa !5
  %1012 = load i64, ptr %14, align 8, !tbaa !9
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %1011, i64 %1012
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %1013, i32 0, i32 1
  %1015 = load double, ptr %1014, align 8, !tbaa !17
  %1016 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %1017 = load double, ptr %1016, align 8, !tbaa !17
  %1018 = fmul double %1015, %1017
  %1019 = fneg double %1018
  %1020 = call double @llvm.fmuladd.f64(double %1008, double %1010, double %1019)
  %1021 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %1020, ptr %1021, align 8, !tbaa !13
  %1022 = load ptr, ptr %9, align 8, !tbaa !5
  %1023 = load i64, ptr %14, align 8, !tbaa !9
  %1024 = getelementptr inbounds %struct.doublecomplex, ptr %1022, i64 %1023
  %1025 = getelementptr inbounds %struct.doublecomplex, ptr %1024, i32 0, i32 0
  %1026 = load double, ptr %1025, align 8, !tbaa !13
  %1027 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %1028 = load double, ptr %1027, align 8, !tbaa !17
  %1029 = load ptr, ptr %9, align 8, !tbaa !5
  %1030 = load i64, ptr %14, align 8, !tbaa !9
  %1031 = getelementptr inbounds %struct.doublecomplex, ptr %1029, i64 %1030
  %1032 = getelementptr inbounds %struct.doublecomplex, ptr %1031, i32 0, i32 1
  %1033 = load double, ptr %1032, align 8, !tbaa !17
  %1034 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %1035 = load double, ptr %1034, align 8, !tbaa !13
  %1036 = fmul double %1033, %1035
  %1037 = call double @llvm.fmuladd.f64(double %1026, double %1028, double %1036)
  %1038 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %1037, ptr %1038, align 8, !tbaa !17
  %1039 = load ptr, ptr %9, align 8, !tbaa !5
  %1040 = load i64, ptr %13, align 8, !tbaa !9
  %1041 = getelementptr inbounds %struct.doublecomplex, ptr %1039, i64 %1040
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %1041, i32 0, i32 0
  %1043 = load double, ptr %1042, align 8, !tbaa !13
  %1044 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %1045 = load double, ptr %1044, align 8, !tbaa !13
  %1046 = fsub double %1043, %1045
  %1047 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %1046, ptr %1047, align 8, !tbaa !13
  %1048 = load ptr, ptr %9, align 8, !tbaa !5
  %1049 = load i64, ptr %13, align 8, !tbaa !9
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %1048, i64 %1049
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %1050, i32 0, i32 1
  %1052 = load double, ptr %1051, align 8, !tbaa !17
  %1053 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %1054 = load double, ptr %1053, align 8, !tbaa !17
  %1055 = fsub double %1052, %1054
  %1056 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %1055, ptr %1056, align 8, !tbaa !17
  %1057 = load i64, ptr %26, align 8, !tbaa !9
  %1058 = load i64, ptr %28, align 8, !tbaa !9
  %1059 = sub nsw i64 %1058, 2
  %1060 = load i64, ptr %28, align 8, !tbaa !9
  %1061 = sub nsw i64 %1060, 1
  %1062 = mul nsw i64 %1059, %1061
  %1063 = sdiv i64 %1062, 2
  %1064 = add nsw i64 %1057, %1063
  store i64 %1064, ptr %15, align 8, !tbaa !9
  %1065 = load ptr, ptr %9, align 8, !tbaa !5
  %1066 = load i64, ptr %15, align 8, !tbaa !9
  %1067 = getelementptr inbounds %struct.doublecomplex, ptr %1065, i64 %1066
  %1068 = getelementptr inbounds %struct.doublecomplex, ptr %1067, i32 0, i32 0
  %1069 = load double, ptr %1068, align 8, !tbaa !13
  %1070 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1071 = load double, ptr %1070, align 8, !tbaa !13
  %1072 = load ptr, ptr %9, align 8, !tbaa !5
  %1073 = load i64, ptr %15, align 8, !tbaa !9
  %1074 = getelementptr inbounds %struct.doublecomplex, ptr %1072, i64 %1073
  %1075 = getelementptr inbounds %struct.doublecomplex, ptr %1074, i32 0, i32 1
  %1076 = load double, ptr %1075, align 8, !tbaa !17
  %1077 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1078 = load double, ptr %1077, align 8, !tbaa !17
  %1079 = fmul double %1076, %1078
  %1080 = fneg double %1079
  %1081 = call double @llvm.fmuladd.f64(double %1069, double %1071, double %1080)
  %1082 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  store double %1081, ptr %1082, align 8, !tbaa !13
  %1083 = load ptr, ptr %9, align 8, !tbaa !5
  %1084 = load i64, ptr %15, align 8, !tbaa !9
  %1085 = getelementptr inbounds %struct.doublecomplex, ptr %1083, i64 %1084
  %1086 = getelementptr inbounds %struct.doublecomplex, ptr %1085, i32 0, i32 0
  %1087 = load double, ptr %1086, align 8, !tbaa !13
  %1088 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1089 = load double, ptr %1088, align 8, !tbaa !17
  %1090 = load ptr, ptr %9, align 8, !tbaa !5
  %1091 = load i64, ptr %15, align 8, !tbaa !9
  %1092 = getelementptr inbounds %struct.doublecomplex, ptr %1090, i64 %1091
  %1093 = getelementptr inbounds %struct.doublecomplex, ptr %1092, i32 0, i32 1
  %1094 = load double, ptr %1093, align 8, !tbaa !17
  %1095 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1096 = load double, ptr %1095, align 8, !tbaa !13
  %1097 = fmul double %1094, %1096
  %1098 = call double @llvm.fmuladd.f64(double %1087, double %1089, double %1097)
  %1099 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  store double %1098, ptr %1099, align 8, !tbaa !17
  %1100 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %1101 = load double, ptr %1100, align 8, !tbaa !13
  %1102 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %1103 = load double, ptr %1102, align 8, !tbaa !13
  %1104 = fsub double %1101, %1103
  %1105 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %1104, ptr %1105, align 8, !tbaa !13
  %1106 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %1107 = load double, ptr %1106, align 8, !tbaa !17
  %1108 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %1109 = load double, ptr %1108, align 8, !tbaa !17
  %1110 = fsub double %1107, %1109
  %1111 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %1110, ptr %1111, align 8, !tbaa !17
  %1112 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1113 = load double, ptr %1112, align 8, !tbaa !13
  %1114 = load ptr, ptr %9, align 8, !tbaa !5
  %1115 = load i64, ptr %12, align 8, !tbaa !9
  %1116 = getelementptr inbounds %struct.doublecomplex, ptr %1114, i64 %1115
  %1117 = getelementptr inbounds %struct.doublecomplex, ptr %1116, i32 0, i32 0
  store double %1113, ptr %1117, align 8, !tbaa !13
  %1118 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1119 = load double, ptr %1118, align 8, !tbaa !17
  %1120 = load ptr, ptr %9, align 8, !tbaa !5
  %1121 = load i64, ptr %12, align 8, !tbaa !9
  %1122 = getelementptr inbounds %struct.doublecomplex, ptr %1120, i64 %1121
  %1123 = getelementptr inbounds %struct.doublecomplex, ptr %1122, i32 0, i32 1
  store double %1119, ptr %1123, align 8, !tbaa !17
  br label %1124

1124:                                             ; preds = %982
  %1125 = load i64, ptr %26, align 8, !tbaa !9
  %1126 = add nsw i64 %1125, -1
  store i64 %1126, ptr %26, align 8, !tbaa !9
  br label %979, !llvm.loop !19

1127:                                             ; preds = %979
  %1128 = load i64, ptr %27, align 8, !tbaa !9
  %1129 = load i64, ptr %28, align 8, !tbaa !9
  %1130 = sub nsw i64 %1129, 1
  %1131 = load i64, ptr %28, align 8, !tbaa !9
  %1132 = mul nsw i64 %1130, %1131
  %1133 = sdiv i64 %1132, 2
  %1134 = add nsw i64 %1128, %1133
  store i64 %1134, ptr %12, align 8, !tbaa !9
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %1136 = load double, ptr %1135, align 8, !tbaa !13
  %1137 = load ptr, ptr %9, align 8, !tbaa !5
  %1138 = load i64, ptr %12, align 8, !tbaa !9
  %1139 = getelementptr inbounds %struct.doublecomplex, ptr %1137, i64 %1138
  %1140 = getelementptr inbounds %struct.doublecomplex, ptr %1139, i32 0, i32 0
  store double %1136, ptr %1140, align 8, !tbaa !13
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %1142 = load double, ptr %1141, align 8, !tbaa !17
  %1143 = load ptr, ptr %9, align 8, !tbaa !5
  %1144 = load i64, ptr %12, align 8, !tbaa !9
  %1145 = getelementptr inbounds %struct.doublecomplex, ptr %1143, i64 %1144
  %1146 = getelementptr inbounds %struct.doublecomplex, ptr %1145, i32 0, i32 1
  store double %1142, ptr %1146, align 8, !tbaa !17
  %1147 = load i64, ptr %27, align 8, !tbaa !9
  %1148 = load i64, ptr %28, align 8, !tbaa !9
  %1149 = sub nsw i64 %1148, 2
  %1150 = load i64, ptr %28, align 8, !tbaa !9
  %1151 = sub nsw i64 %1150, 1
  %1152 = mul nsw i64 %1149, %1151
  %1153 = sdiv i64 %1152, 2
  %1154 = add nsw i64 %1147, %1153
  store i64 %1154, ptr %12, align 8, !tbaa !9
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1156 = load double, ptr %1155, align 8, !tbaa !13
  %1157 = load ptr, ptr %9, align 8, !tbaa !5
  %1158 = load i64, ptr %12, align 8, !tbaa !9
  %1159 = getelementptr inbounds %struct.doublecomplex, ptr %1157, i64 %1158
  %1160 = getelementptr inbounds %struct.doublecomplex, ptr %1159, i32 0, i32 0
  store double %1156, ptr %1160, align 8, !tbaa !13
  %1161 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1162 = load double, ptr %1161, align 8, !tbaa !17
  %1163 = load ptr, ptr %9, align 8, !tbaa !5
  %1164 = load i64, ptr %12, align 8, !tbaa !9
  %1165 = getelementptr inbounds %struct.doublecomplex, ptr %1163, i64 %1164
  %1166 = getelementptr inbounds %struct.doublecomplex, ptr %1165, i32 0, i32 1
  store double %1162, ptr %1166, align 8, !tbaa !17
  br label %1167

1167:                                             ; preds = %1127
  %1168 = load i64, ptr %27, align 8, !tbaa !9
  %1169 = add nsw i64 %1168, -1
  store i64 %1169, ptr %27, align 8, !tbaa !9
  br label %780, !llvm.loop !20

1170:                                             ; preds = %780
  br label %1171

1171:                                             ; preds = %1170, %679
  br label %1172

1172:                                             ; preds = %1171, %643
  br label %1173

1173:                                             ; preds = %1172, %206
  %1174 = load i64, ptr %48, align 8, !tbaa !9
  %1175 = icmp eq i64 %1174, 1
  br i1 %1175, label %1176, label %1181

1176:                                             ; preds = %1173
  %1177 = load i64, ptr %37, align 8, !tbaa !9
  %1178 = load ptr, ptr %10, align 8, !tbaa !5
  %1179 = load i64, ptr %28, align 8, !tbaa !9
  %1180 = getelementptr inbounds i64, ptr %1178, i64 %1179
  store i64 %1177, ptr %1180, align 8, !tbaa !9
  br label %1193

1181:                                             ; preds = %1173
  %1182 = load i64, ptr %37, align 8, !tbaa !9
  %1183 = sub nsw i64 0, %1182
  %1184 = load ptr, ptr %10, align 8, !tbaa !5
  %1185 = load i64, ptr %28, align 8, !tbaa !9
  %1186 = getelementptr inbounds i64, ptr %1184, i64 %1185
  store i64 %1183, ptr %1186, align 8, !tbaa !9
  %1187 = load i64, ptr %37, align 8, !tbaa !9
  %1188 = sub nsw i64 0, %1187
  %1189 = load ptr, ptr %10, align 8, !tbaa !5
  %1190 = load i64, ptr %28, align 8, !tbaa !9
  %1191 = sub nsw i64 %1190, 1
  %1192 = getelementptr inbounds i64, ptr %1189, i64 %1191
  store i64 %1188, ptr %1192, align 8, !tbaa !9
  br label %1193

1193:                                             ; preds = %1181, %1176
  %1194 = load i64, ptr %48, align 8, !tbaa !9
  %1195 = load i64, ptr %28, align 8, !tbaa !9
  %1196 = sub nsw i64 %1195, %1194
  store i64 %1196, ptr %28, align 8, !tbaa !9
  %1197 = load i64, ptr %40, align 8, !tbaa !9
  %1198 = load i64, ptr %28, align 8, !tbaa !9
  %1199 = sub nsw i64 %1197, %1198
  store i64 %1199, ptr %35, align 8, !tbaa !9
  br label %102

1200:                                             ; preds = %85
  store i64 1, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  %1201 = load ptr, ptr %8, align 8, !tbaa !5
  %1202 = load i64, ptr %1201, align 8, !tbaa !9
  %1203 = load ptr, ptr %8, align 8, !tbaa !5
  %1204 = load i64, ptr %1203, align 8, !tbaa !9
  %1205 = add nsw i64 %1204, 1
  %1206 = mul nsw i64 %1202, %1205
  %1207 = sdiv i64 %1206, 2
  store i64 %1207, ptr %42, align 8, !tbaa !9
  br label %1208

1208:                                             ; preds = %2397, %1200
  %1209 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %1209, ptr %40, align 8, !tbaa !9
  %1210 = load i64, ptr %28, align 8, !tbaa !9
  %1211 = load ptr, ptr %8, align 8, !tbaa !5
  %1212 = load i64, ptr %1211, align 8, !tbaa !9
  %1213 = icmp sgt i64 %1210, %1212
  br i1 %1213, label %1214, label %1215

1214:                                             ; preds = %1208
  br label %2408

1215:                                             ; preds = %1208
  store i64 1, ptr %48, align 8, !tbaa !9
  %1216 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %1216, ptr %12, align 8, !tbaa !9
  %1217 = load ptr, ptr %9, align 8, !tbaa !5
  %1218 = load i64, ptr %12, align 8, !tbaa !9
  %1219 = getelementptr inbounds %struct.doublecomplex, ptr %1217, i64 %1218
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %1219, i32 0, i32 0
  %1221 = load double, ptr %1220, align 8, !tbaa !13
  store double %1221, ptr %18, align 8, !tbaa !11
  %1222 = load double, ptr %18, align 8, !tbaa !11
  %1223 = fcmp oge double %1222, 0.000000e+00
  br i1 %1223, label %1224, label %1226

1224:                                             ; preds = %1215
  %1225 = load double, ptr %18, align 8, !tbaa !11
  br label %1229

1226:                                             ; preds = %1215
  %1227 = load double, ptr %18, align 8, !tbaa !11
  %1228 = fneg double %1227
  br label %1229

1229:                                             ; preds = %1226, %1224
  %1230 = phi double [ %1225, %1224 ], [ %1228, %1226 ]
  %1231 = load ptr, ptr %9, align 8, !tbaa !5
  %1232 = load i64, ptr %35, align 8, !tbaa !9
  %1233 = getelementptr inbounds %struct.doublecomplex, ptr %1231, i64 %1232
  %1234 = call double @d_imag(ptr noundef %1233)
  store double %1234, ptr %19, align 8, !tbaa !11
  %1235 = load double, ptr %19, align 8, !tbaa !11
  %1236 = fcmp oge double %1235, 0.000000e+00
  br i1 %1236, label %1237, label %1239

1237:                                             ; preds = %1229
  %1238 = load double, ptr %19, align 8, !tbaa !11
  br label %1242

1239:                                             ; preds = %1229
  %1240 = load double, ptr %19, align 8, !tbaa !11
  %1241 = fneg double %1240
  br label %1242

1242:                                             ; preds = %1239, %1237
  %1243 = phi double [ %1238, %1237 ], [ %1241, %1239 ]
  %1244 = fadd double %1230, %1243
  store double %1244, ptr %50, align 8, !tbaa !11
  %1245 = load i64, ptr %28, align 8, !tbaa !9
  %1246 = load ptr, ptr %8, align 8, !tbaa !5
  %1247 = load i64, ptr %1246, align 8, !tbaa !9
  %1248 = icmp slt i64 %1245, %1247
  br i1 %1248, label %1249, label %1298

1249:                                             ; preds = %1242
  %1250 = load ptr, ptr %8, align 8, !tbaa !5
  %1251 = load i64, ptr %1250, align 8, !tbaa !9
  %1252 = load i64, ptr %28, align 8, !tbaa !9
  %1253 = sub nsw i64 %1251, %1252
  store i64 %1253, ptr %12, align 8, !tbaa !9
  %1254 = load i64, ptr %28, align 8, !tbaa !9
  %1255 = load ptr, ptr %9, align 8, !tbaa !5
  %1256 = load i64, ptr %35, align 8, !tbaa !9
  %1257 = add nsw i64 %1256, 1
  %1258 = getelementptr inbounds %struct.doublecomplex, ptr %1255, i64 %1257
  %1259 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %1258, ptr noundef @c__1)
  %1260 = add nsw i64 %1254, %1259
  store i64 %1260, ptr %45, align 8, !tbaa !9
  %1261 = load i64, ptr %35, align 8, !tbaa !9
  %1262 = load i64, ptr %45, align 8, !tbaa !9
  %1263 = add nsw i64 %1261, %1262
  %1264 = load i64, ptr %28, align 8, !tbaa !9
  %1265 = sub nsw i64 %1263, %1264
  store i64 %1265, ptr %12, align 8, !tbaa !9
  %1266 = load ptr, ptr %9, align 8, !tbaa !5
  %1267 = load i64, ptr %12, align 8, !tbaa !9
  %1268 = getelementptr inbounds %struct.doublecomplex, ptr %1266, i64 %1267
  %1269 = getelementptr inbounds %struct.doublecomplex, ptr %1268, i32 0, i32 0
  %1270 = load double, ptr %1269, align 8, !tbaa !13
  store double %1270, ptr %18, align 8, !tbaa !11
  %1271 = load double, ptr %18, align 8, !tbaa !11
  %1272 = fcmp oge double %1271, 0.000000e+00
  br i1 %1272, label %1273, label %1275

1273:                                             ; preds = %1249
  %1274 = load double, ptr %18, align 8, !tbaa !11
  br label %1278

1275:                                             ; preds = %1249
  %1276 = load double, ptr %18, align 8, !tbaa !11
  %1277 = fneg double %1276
  br label %1278

1278:                                             ; preds = %1275, %1273
  %1279 = phi double [ %1274, %1273 ], [ %1277, %1275 ]
  %1280 = load ptr, ptr %9, align 8, !tbaa !5
  %1281 = load i64, ptr %35, align 8, !tbaa !9
  %1282 = load i64, ptr %45, align 8, !tbaa !9
  %1283 = add nsw i64 %1281, %1282
  %1284 = load i64, ptr %28, align 8, !tbaa !9
  %1285 = sub nsw i64 %1283, %1284
  %1286 = getelementptr inbounds %struct.doublecomplex, ptr %1280, i64 %1285
  %1287 = call double @d_imag(ptr noundef %1286)
  store double %1287, ptr %19, align 8, !tbaa !11
  %1288 = load double, ptr %19, align 8, !tbaa !11
  %1289 = fcmp oge double %1288, 0.000000e+00
  br i1 %1289, label %1290, label %1292

1290:                                             ; preds = %1278
  %1291 = load double, ptr %19, align 8, !tbaa !11
  br label %1295

1292:                                             ; preds = %1278
  %1293 = load double, ptr %19, align 8, !tbaa !11
  %1294 = fneg double %1293
  br label %1295

1295:                                             ; preds = %1292, %1290
  %1296 = phi double [ %1291, %1290 ], [ %1294, %1292 ]
  %1297 = fadd double %1279, %1296
  store double %1297, ptr %51, align 8, !tbaa !11
  br label %1299

1298:                                             ; preds = %1242
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  br label %1299

1299:                                             ; preds = %1298, %1295
  %1300 = load double, ptr %50, align 8, !tbaa !11
  %1301 = load double, ptr %51, align 8, !tbaa !11
  %1302 = fcmp oge double %1300, %1301
  br i1 %1302, label %1303, label %1305

1303:                                             ; preds = %1299
  %1304 = load double, ptr %50, align 8, !tbaa !11
  br label %1307

1305:                                             ; preds = %1299
  %1306 = load double, ptr %51, align 8, !tbaa !11
  br label %1307

1307:                                             ; preds = %1305, %1303
  %1308 = phi double [ %1304, %1303 ], [ %1306, %1305 ]
  %1309 = fcmp oeq double %1308, 0.000000e+00
  br i1 %1309, label %1310, label %1319

1310:                                             ; preds = %1307
  %1311 = load ptr, ptr %11, align 8, !tbaa !5
  %1312 = load i64, ptr %1311, align 8, !tbaa !9
  %1313 = icmp eq i64 %1312, 0
  br i1 %1313, label %1314, label %1317

1314:                                             ; preds = %1310
  %1315 = load i64, ptr %28, align 8, !tbaa !9
  %1316 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 %1315, ptr %1316, align 8, !tbaa !9
  br label %1317

1317:                                             ; preds = %1314, %1310
  %1318 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %1318, ptr %37, align 8, !tbaa !9
  br label %2377

1319:                                             ; preds = %1307
  %1320 = load double, ptr %50, align 8, !tbaa !11
  %1321 = load double, ptr %47, align 8, !tbaa !11
  %1322 = load double, ptr %51, align 8, !tbaa !11
  %1323 = fmul double %1321, %1322
  %1324 = fcmp oge double %1320, %1323
  br i1 %1324, label %1325, label %1327

1325:                                             ; preds = %1319
  %1326 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %1326, ptr %37, align 8, !tbaa !9
  br label %1544

1327:                                             ; preds = %1319
  store double 0.000000e+00, ptr %52, align 8, !tbaa !11
  %1328 = load i64, ptr %35, align 8, !tbaa !9
  %1329 = load i64, ptr %45, align 8, !tbaa !9
  %1330 = add nsw i64 %1328, %1329
  %1331 = load i64, ptr %28, align 8, !tbaa !9
  %1332 = sub nsw i64 %1330, %1331
  store i64 %1332, ptr %39, align 8, !tbaa !9
  %1333 = load i64, ptr %45, align 8, !tbaa !9
  %1334 = sub nsw i64 %1333, 1
  store i64 %1334, ptr %12, align 8, !tbaa !9
  %1335 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %1335, ptr %27, align 8, !tbaa !9
  br label %1336

1336:                                             ; preds = %1410, %1327
  %1337 = load i64, ptr %27, align 8, !tbaa !9
  %1338 = load i64, ptr %12, align 8, !tbaa !9
  %1339 = icmp sle i64 %1337, %1338
  br i1 %1339, label %1340, label %1413

1340:                                             ; preds = %1336
  %1341 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1341, ptr %13, align 8, !tbaa !9
  %1342 = load ptr, ptr %9, align 8, !tbaa !5
  %1343 = load i64, ptr %13, align 8, !tbaa !9
  %1344 = getelementptr inbounds %struct.doublecomplex, ptr %1342, i64 %1343
  %1345 = getelementptr inbounds %struct.doublecomplex, ptr %1344, i32 0, i32 0
  %1346 = load double, ptr %1345, align 8, !tbaa !13
  store double %1346, ptr %18, align 8, !tbaa !11
  %1347 = load double, ptr %18, align 8, !tbaa !11
  %1348 = fcmp oge double %1347, 0.000000e+00
  br i1 %1348, label %1349, label %1351

1349:                                             ; preds = %1340
  %1350 = load double, ptr %18, align 8, !tbaa !11
  br label %1354

1351:                                             ; preds = %1340
  %1352 = load double, ptr %18, align 8, !tbaa !11
  %1353 = fneg double %1352
  br label %1354

1354:                                             ; preds = %1351, %1349
  %1355 = phi double [ %1350, %1349 ], [ %1353, %1351 ]
  %1356 = load ptr, ptr %9, align 8, !tbaa !5
  %1357 = load i64, ptr %39, align 8, !tbaa !9
  %1358 = getelementptr inbounds %struct.doublecomplex, ptr %1356, i64 %1357
  %1359 = call double @d_imag(ptr noundef %1358)
  store double %1359, ptr %19, align 8, !tbaa !11
  %1360 = load double, ptr %19, align 8, !tbaa !11
  %1361 = fcmp oge double %1360, 0.000000e+00
  br i1 %1361, label %1362, label %1364

1362:                                             ; preds = %1354
  %1363 = load double, ptr %19, align 8, !tbaa !11
  br label %1367

1364:                                             ; preds = %1354
  %1365 = load double, ptr %19, align 8, !tbaa !11
  %1366 = fneg double %1365
  br label %1367

1367:                                             ; preds = %1364, %1362
  %1368 = phi double [ %1363, %1362 ], [ %1366, %1364 ]
  %1369 = fadd double %1355, %1368
  %1370 = load double, ptr %52, align 8, !tbaa !11
  %1371 = fcmp ogt double %1369, %1370
  br i1 %1371, label %1372, label %1403

1372:                                             ; preds = %1367
  %1373 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1373, ptr %13, align 8, !tbaa !9
  %1374 = load ptr, ptr %9, align 8, !tbaa !5
  %1375 = load i64, ptr %13, align 8, !tbaa !9
  %1376 = getelementptr inbounds %struct.doublecomplex, ptr %1374, i64 %1375
  %1377 = getelementptr inbounds %struct.doublecomplex, ptr %1376, i32 0, i32 0
  %1378 = load double, ptr %1377, align 8, !tbaa !13
  store double %1378, ptr %18, align 8, !tbaa !11
  %1379 = load double, ptr %18, align 8, !tbaa !11
  %1380 = fcmp oge double %1379, 0.000000e+00
  br i1 %1380, label %1381, label %1383

1381:                                             ; preds = %1372
  %1382 = load double, ptr %18, align 8, !tbaa !11
  br label %1386

1383:                                             ; preds = %1372
  %1384 = load double, ptr %18, align 8, !tbaa !11
  %1385 = fneg double %1384
  br label %1386

1386:                                             ; preds = %1383, %1381
  %1387 = phi double [ %1382, %1381 ], [ %1385, %1383 ]
  %1388 = load ptr, ptr %9, align 8, !tbaa !5
  %1389 = load i64, ptr %39, align 8, !tbaa !9
  %1390 = getelementptr inbounds %struct.doublecomplex, ptr %1388, i64 %1389
  %1391 = call double @d_imag(ptr noundef %1390)
  store double %1391, ptr %19, align 8, !tbaa !11
  %1392 = load double, ptr %19, align 8, !tbaa !11
  %1393 = fcmp oge double %1392, 0.000000e+00
  br i1 %1393, label %1394, label %1396

1394:                                             ; preds = %1386
  %1395 = load double, ptr %19, align 8, !tbaa !11
  br label %1399

1396:                                             ; preds = %1386
  %1397 = load double, ptr %19, align 8, !tbaa !11
  %1398 = fneg double %1397
  br label %1399

1399:                                             ; preds = %1396, %1394
  %1400 = phi double [ %1395, %1394 ], [ %1398, %1396 ]
  %1401 = fadd double %1387, %1400
  store double %1401, ptr %52, align 8, !tbaa !11
  %1402 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %1402, ptr %46, align 8, !tbaa !9
  br label %1403

1403:                                             ; preds = %1399, %1367
  %1404 = load i64, ptr %39, align 8, !tbaa !9
  %1405 = load ptr, ptr %8, align 8, !tbaa !5
  %1406 = load i64, ptr %1405, align 8, !tbaa !9
  %1407 = add nsw i64 %1404, %1406
  %1408 = load i64, ptr %27, align 8, !tbaa !9
  %1409 = sub nsw i64 %1407, %1408
  store i64 %1409, ptr %39, align 8, !tbaa !9
  br label %1410

1410:                                             ; preds = %1403
  %1411 = load i64, ptr %27, align 8, !tbaa !9
  %1412 = add nsw i64 %1411, 1
  store i64 %1412, ptr %27, align 8, !tbaa !9
  br label %1336, !llvm.loop !21

1413:                                             ; preds = %1336
  %1414 = load i64, ptr %42, align 8, !tbaa !9
  %1415 = load ptr, ptr %8, align 8, !tbaa !5
  %1416 = load i64, ptr %1415, align 8, !tbaa !9
  %1417 = load i64, ptr %45, align 8, !tbaa !9
  %1418 = sub nsw i64 %1416, %1417
  %1419 = add nsw i64 %1418, 1
  %1420 = load ptr, ptr %8, align 8, !tbaa !5
  %1421 = load i64, ptr %1420, align 8, !tbaa !9
  %1422 = load i64, ptr %45, align 8, !tbaa !9
  %1423 = sub nsw i64 %1421, %1422
  %1424 = add nsw i64 %1423, 2
  %1425 = mul nsw i64 %1419, %1424
  %1426 = sdiv i64 %1425, 2
  %1427 = sub nsw i64 %1414, %1426
  %1428 = add nsw i64 %1427, 1
  store i64 %1428, ptr %41, align 8, !tbaa !9
  %1429 = load i64, ptr %45, align 8, !tbaa !9
  %1430 = load ptr, ptr %8, align 8, !tbaa !5
  %1431 = load i64, ptr %1430, align 8, !tbaa !9
  %1432 = icmp slt i64 %1429, %1431
  br i1 %1432, label %1433, label %1492

1433:                                             ; preds = %1413
  %1434 = load ptr, ptr %8, align 8, !tbaa !5
  %1435 = load i64, ptr %1434, align 8, !tbaa !9
  %1436 = load i64, ptr %45, align 8, !tbaa !9
  %1437 = sub nsw i64 %1435, %1436
  store i64 %1437, ptr %12, align 8, !tbaa !9
  %1438 = load i64, ptr %45, align 8, !tbaa !9
  %1439 = load ptr, ptr %9, align 8, !tbaa !5
  %1440 = load i64, ptr %41, align 8, !tbaa !9
  %1441 = add nsw i64 %1440, 1
  %1442 = getelementptr inbounds %struct.doublecomplex, ptr %1439, i64 %1441
  %1443 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %1442, ptr noundef @c__1)
  %1444 = add nsw i64 %1438, %1443
  store i64 %1444, ptr %46, align 8, !tbaa !9
  %1445 = load i64, ptr %41, align 8, !tbaa !9
  %1446 = load i64, ptr %46, align 8, !tbaa !9
  %1447 = add nsw i64 %1445, %1446
  %1448 = load i64, ptr %45, align 8, !tbaa !9
  %1449 = sub nsw i64 %1447, %1448
  store i64 %1449, ptr %12, align 8, !tbaa !9
  %1450 = load double, ptr %52, align 8, !tbaa !11
  store double %1450, ptr %20, align 8, !tbaa !11
  %1451 = load ptr, ptr %9, align 8, !tbaa !5
  %1452 = load i64, ptr %12, align 8, !tbaa !9
  %1453 = getelementptr inbounds %struct.doublecomplex, ptr %1451, i64 %1452
  %1454 = getelementptr inbounds %struct.doublecomplex, ptr %1453, i32 0, i32 0
  %1455 = load double, ptr %1454, align 8, !tbaa !13
  store double %1455, ptr %18, align 8, !tbaa !11
  %1456 = load double, ptr %18, align 8, !tbaa !11
  %1457 = fcmp oge double %1456, 0.000000e+00
  br i1 %1457, label %1458, label %1460

1458:                                             ; preds = %1433
  %1459 = load double, ptr %18, align 8, !tbaa !11
  br label %1463

1460:                                             ; preds = %1433
  %1461 = load double, ptr %18, align 8, !tbaa !11
  %1462 = fneg double %1461
  br label %1463

1463:                                             ; preds = %1460, %1458
  %1464 = phi double [ %1459, %1458 ], [ %1462, %1460 ]
  %1465 = load ptr, ptr %9, align 8, !tbaa !5
  %1466 = load i64, ptr %41, align 8, !tbaa !9
  %1467 = load i64, ptr %46, align 8, !tbaa !9
  %1468 = add nsw i64 %1466, %1467
  %1469 = load i64, ptr %45, align 8, !tbaa !9
  %1470 = sub nsw i64 %1468, %1469
  %1471 = getelementptr inbounds %struct.doublecomplex, ptr %1465, i64 %1470
  %1472 = call double @d_imag(ptr noundef %1471)
  store double %1472, ptr %19, align 8, !tbaa !11
  %1473 = load double, ptr %19, align 8, !tbaa !11
  %1474 = fcmp oge double %1473, 0.000000e+00
  br i1 %1474, label %1475, label %1477

1475:                                             ; preds = %1463
  %1476 = load double, ptr %19, align 8, !tbaa !11
  br label %1480

1477:                                             ; preds = %1463
  %1478 = load double, ptr %19, align 8, !tbaa !11
  %1479 = fneg double %1478
  br label %1480

1480:                                             ; preds = %1477, %1475
  %1481 = phi double [ %1476, %1475 ], [ %1479, %1477 ]
  %1482 = fadd double %1464, %1481
  store double %1482, ptr %21, align 8, !tbaa !11
  %1483 = load double, ptr %20, align 8, !tbaa !11
  %1484 = load double, ptr %21, align 8, !tbaa !11
  %1485 = fcmp oge double %1483, %1484
  br i1 %1485, label %1486, label %1488

1486:                                             ; preds = %1480
  %1487 = load double, ptr %20, align 8, !tbaa !11
  br label %1490

1488:                                             ; preds = %1480
  %1489 = load double, ptr %21, align 8, !tbaa !11
  br label %1490

1490:                                             ; preds = %1488, %1486
  %1491 = phi double [ %1487, %1486 ], [ %1489, %1488 ]
  store double %1491, ptr %52, align 8, !tbaa !11
  br label %1492

1492:                                             ; preds = %1490, %1413
  %1493 = load double, ptr %50, align 8, !tbaa !11
  %1494 = load double, ptr %47, align 8, !tbaa !11
  %1495 = load double, ptr %51, align 8, !tbaa !11
  %1496 = fmul double %1494, %1495
  %1497 = load double, ptr %51, align 8, !tbaa !11
  %1498 = load double, ptr %52, align 8, !tbaa !11
  %1499 = fdiv double %1497, %1498
  %1500 = fmul double %1496, %1499
  %1501 = fcmp oge double %1493, %1500
  br i1 %1501, label %1502, label %1504

1502:                                             ; preds = %1492
  %1503 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %1503, ptr %37, align 8, !tbaa !9
  br label %1543

1504:                                             ; preds = %1492
  %1505 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %1505, ptr %12, align 8, !tbaa !9
  %1506 = load ptr, ptr %9, align 8, !tbaa !5
  %1507 = load i64, ptr %12, align 8, !tbaa !9
  %1508 = getelementptr inbounds %struct.doublecomplex, ptr %1506, i64 %1507
  %1509 = getelementptr inbounds %struct.doublecomplex, ptr %1508, i32 0, i32 0
  %1510 = load double, ptr %1509, align 8, !tbaa !13
  store double %1510, ptr %18, align 8, !tbaa !11
  %1511 = load double, ptr %18, align 8, !tbaa !11
  %1512 = fcmp oge double %1511, 0.000000e+00
  br i1 %1512, label %1513, label %1515

1513:                                             ; preds = %1504
  %1514 = load double, ptr %18, align 8, !tbaa !11
  br label %1518

1515:                                             ; preds = %1504
  %1516 = load double, ptr %18, align 8, !tbaa !11
  %1517 = fneg double %1516
  br label %1518

1518:                                             ; preds = %1515, %1513
  %1519 = phi double [ %1514, %1513 ], [ %1517, %1515 ]
  %1520 = load ptr, ptr %9, align 8, !tbaa !5
  %1521 = load i64, ptr %41, align 8, !tbaa !9
  %1522 = getelementptr inbounds %struct.doublecomplex, ptr %1520, i64 %1521
  %1523 = call double @d_imag(ptr noundef %1522)
  store double %1523, ptr %19, align 8, !tbaa !11
  %1524 = load double, ptr %19, align 8, !tbaa !11
  %1525 = fcmp oge double %1524, 0.000000e+00
  br i1 %1525, label %1526, label %1528

1526:                                             ; preds = %1518
  %1527 = load double, ptr %19, align 8, !tbaa !11
  br label %1531

1528:                                             ; preds = %1518
  %1529 = load double, ptr %19, align 8, !tbaa !11
  %1530 = fneg double %1529
  br label %1531

1531:                                             ; preds = %1528, %1526
  %1532 = phi double [ %1527, %1526 ], [ %1530, %1528 ]
  %1533 = fadd double %1519, %1532
  %1534 = load double, ptr %47, align 8, !tbaa !11
  %1535 = load double, ptr %52, align 8, !tbaa !11
  %1536 = fmul double %1534, %1535
  %1537 = fcmp oge double %1533, %1536
  br i1 %1537, label %1538, label %1540

1538:                                             ; preds = %1531
  %1539 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1539, ptr %37, align 8, !tbaa !9
  br label %1542

1540:                                             ; preds = %1531
  %1541 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1541, ptr %37, align 8, !tbaa !9
  store i64 2, ptr %48, align 8, !tbaa !9
  br label %1542

1542:                                             ; preds = %1540, %1538
  br label %1543

1543:                                             ; preds = %1542, %1502
  br label %1544

1544:                                             ; preds = %1543, %1325
  %1545 = load i64, ptr %28, align 8, !tbaa !9
  %1546 = load i64, ptr %48, align 8, !tbaa !9
  %1547 = add nsw i64 %1545, %1546
  %1548 = sub nsw i64 %1547, 1
  store i64 %1548, ptr %36, align 8, !tbaa !9
  %1549 = load i64, ptr %48, align 8, !tbaa !9
  %1550 = icmp eq i64 %1549, 2
  br i1 %1550, label %1551, label %1559

1551:                                             ; preds = %1544
  %1552 = load i64, ptr %40, align 8, !tbaa !9
  %1553 = load ptr, ptr %8, align 8, !tbaa !5
  %1554 = load i64, ptr %1553, align 8, !tbaa !9
  %1555 = add nsw i64 %1552, %1554
  %1556 = load i64, ptr %28, align 8, !tbaa !9
  %1557 = sub nsw i64 %1555, %1556
  %1558 = add nsw i64 %1557, 1
  store i64 %1558, ptr %40, align 8, !tbaa !9
  br label %1559

1559:                                             ; preds = %1551, %1544
  %1560 = load i64, ptr %37, align 8, !tbaa !9
  %1561 = load i64, ptr %36, align 8, !tbaa !9
  %1562 = icmp ne i64 %1560, %1561
  br i1 %1562, label %1563, label %1772

1563:                                             ; preds = %1559
  %1564 = load i64, ptr %37, align 8, !tbaa !9
  %1565 = load ptr, ptr %8, align 8, !tbaa !5
  %1566 = load i64, ptr %1565, align 8, !tbaa !9
  %1567 = icmp slt i64 %1564, %1566
  br i1 %1567, label %1568, label %1586

1568:                                             ; preds = %1563
  %1569 = load ptr, ptr %8, align 8, !tbaa !5
  %1570 = load i64, ptr %1569, align 8, !tbaa !9
  %1571 = load i64, ptr %37, align 8, !tbaa !9
  %1572 = sub nsw i64 %1570, %1571
  store i64 %1572, ptr %12, align 8, !tbaa !9
  %1573 = load ptr, ptr %9, align 8, !tbaa !5
  %1574 = load i64, ptr %40, align 8, !tbaa !9
  %1575 = load i64, ptr %37, align 8, !tbaa !9
  %1576 = add nsw i64 %1574, %1575
  %1577 = load i64, ptr %36, align 8, !tbaa !9
  %1578 = sub nsw i64 %1576, %1577
  %1579 = add nsw i64 %1578, 1
  %1580 = getelementptr inbounds %struct.doublecomplex, ptr %1573, i64 %1579
  %1581 = load ptr, ptr %9, align 8, !tbaa !5
  %1582 = load i64, ptr %41, align 8, !tbaa !9
  %1583 = add nsw i64 %1582, 1
  %1584 = getelementptr inbounds %struct.doublecomplex, ptr %1581, i64 %1583
  %1585 = call i32 @f2c_zswap(ptr noundef %12, ptr noundef %1580, ptr noundef @c__1, ptr noundef %1584, ptr noundef @c__1)
  br label %1586

1586:                                             ; preds = %1568, %1563
  %1587 = load i64, ptr %40, align 8, !tbaa !9
  %1588 = load i64, ptr %37, align 8, !tbaa !9
  %1589 = add nsw i64 %1587, %1588
  %1590 = load i64, ptr %36, align 8, !tbaa !9
  %1591 = sub nsw i64 %1589, %1590
  store i64 %1591, ptr %39, align 8, !tbaa !9
  %1592 = load i64, ptr %37, align 8, !tbaa !9
  %1593 = sub nsw i64 %1592, 1
  store i64 %1593, ptr %12, align 8, !tbaa !9
  %1594 = load i64, ptr %36, align 8, !tbaa !9
  %1595 = add nsw i64 %1594, 1
  store i64 %1595, ptr %27, align 8, !tbaa !9
  br label %1596

1596:                                             ; preds = %1662, %1586
  %1597 = load i64, ptr %27, align 8, !tbaa !9
  %1598 = load i64, ptr %12, align 8, !tbaa !9
  %1599 = icmp sle i64 %1597, %1598
  br i1 %1599, label %1600, label %1665

1600:                                             ; preds = %1596
  %1601 = load i64, ptr %39, align 8, !tbaa !9
  %1602 = load ptr, ptr %8, align 8, !tbaa !5
  %1603 = load i64, ptr %1602, align 8, !tbaa !9
  %1604 = add nsw i64 %1601, %1603
  %1605 = load i64, ptr %27, align 8, !tbaa !9
  %1606 = sub nsw i64 %1604, %1605
  %1607 = add nsw i64 %1606, 1
  store i64 %1607, ptr %39, align 8, !tbaa !9
  %1608 = load i64, ptr %40, align 8, !tbaa !9
  %1609 = load i64, ptr %27, align 8, !tbaa !9
  %1610 = add nsw i64 %1608, %1609
  %1611 = load i64, ptr %36, align 8, !tbaa !9
  %1612 = sub nsw i64 %1610, %1611
  store i64 %1612, ptr %13, align 8, !tbaa !9
  %1613 = load ptr, ptr %9, align 8, !tbaa !5
  %1614 = load i64, ptr %13, align 8, !tbaa !9
  %1615 = getelementptr inbounds %struct.doublecomplex, ptr %1613, i64 %1614
  %1616 = getelementptr inbounds %struct.doublecomplex, ptr %1615, i32 0, i32 0
  %1617 = load double, ptr %1616, align 8, !tbaa !13
  %1618 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1617, ptr %1618, align 8, !tbaa !13
  %1619 = load ptr, ptr %9, align 8, !tbaa !5
  %1620 = load i64, ptr %13, align 8, !tbaa !9
  %1621 = getelementptr inbounds %struct.doublecomplex, ptr %1619, i64 %1620
  %1622 = getelementptr inbounds %struct.doublecomplex, ptr %1621, i32 0, i32 1
  %1623 = load double, ptr %1622, align 8, !tbaa !17
  %1624 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1623, ptr %1624, align 8, !tbaa !17
  %1625 = load i64, ptr %40, align 8, !tbaa !9
  %1626 = load i64, ptr %27, align 8, !tbaa !9
  %1627 = add nsw i64 %1625, %1626
  %1628 = load i64, ptr %36, align 8, !tbaa !9
  %1629 = sub nsw i64 %1627, %1628
  store i64 %1629, ptr %13, align 8, !tbaa !9
  %1630 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1630, ptr %14, align 8, !tbaa !9
  %1631 = load ptr, ptr %9, align 8, !tbaa !5
  %1632 = load i64, ptr %14, align 8, !tbaa !9
  %1633 = getelementptr inbounds %struct.doublecomplex, ptr %1631, i64 %1632
  %1634 = getelementptr inbounds %struct.doublecomplex, ptr %1633, i32 0, i32 0
  %1635 = load double, ptr %1634, align 8, !tbaa !13
  %1636 = load ptr, ptr %9, align 8, !tbaa !5
  %1637 = load i64, ptr %13, align 8, !tbaa !9
  %1638 = getelementptr inbounds %struct.doublecomplex, ptr %1636, i64 %1637
  %1639 = getelementptr inbounds %struct.doublecomplex, ptr %1638, i32 0, i32 0
  store double %1635, ptr %1639, align 8, !tbaa !13
  %1640 = load ptr, ptr %9, align 8, !tbaa !5
  %1641 = load i64, ptr %14, align 8, !tbaa !9
  %1642 = getelementptr inbounds %struct.doublecomplex, ptr %1640, i64 %1641
  %1643 = getelementptr inbounds %struct.doublecomplex, ptr %1642, i32 0, i32 1
  %1644 = load double, ptr %1643, align 8, !tbaa !17
  %1645 = load ptr, ptr %9, align 8, !tbaa !5
  %1646 = load i64, ptr %13, align 8, !tbaa !9
  %1647 = getelementptr inbounds %struct.doublecomplex, ptr %1645, i64 %1646
  %1648 = getelementptr inbounds %struct.doublecomplex, ptr %1647, i32 0, i32 1
  store double %1644, ptr %1648, align 8, !tbaa !17
  %1649 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1649, ptr %13, align 8, !tbaa !9
  %1650 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1651 = load double, ptr %1650, align 8, !tbaa !13
  %1652 = load ptr, ptr %9, align 8, !tbaa !5
  %1653 = load i64, ptr %13, align 8, !tbaa !9
  %1654 = getelementptr inbounds %struct.doublecomplex, ptr %1652, i64 %1653
  %1655 = getelementptr inbounds %struct.doublecomplex, ptr %1654, i32 0, i32 0
  store double %1651, ptr %1655, align 8, !tbaa !13
  %1656 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1657 = load double, ptr %1656, align 8, !tbaa !17
  %1658 = load ptr, ptr %9, align 8, !tbaa !5
  %1659 = load i64, ptr %13, align 8, !tbaa !9
  %1660 = getelementptr inbounds %struct.doublecomplex, ptr %1658, i64 %1659
  %1661 = getelementptr inbounds %struct.doublecomplex, ptr %1660, i32 0, i32 1
  store double %1657, ptr %1661, align 8, !tbaa !17
  br label %1662

1662:                                             ; preds = %1600
  %1663 = load i64, ptr %27, align 8, !tbaa !9
  %1664 = add nsw i64 %1663, 1
  store i64 %1664, ptr %27, align 8, !tbaa !9
  br label %1596, !llvm.loop !22

1665:                                             ; preds = %1596
  %1666 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %1666, ptr %12, align 8, !tbaa !9
  %1667 = load ptr, ptr %9, align 8, !tbaa !5
  %1668 = load i64, ptr %12, align 8, !tbaa !9
  %1669 = getelementptr inbounds %struct.doublecomplex, ptr %1667, i64 %1668
  %1670 = getelementptr inbounds %struct.doublecomplex, ptr %1669, i32 0, i32 0
  %1671 = load double, ptr %1670, align 8, !tbaa !13
  %1672 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1671, ptr %1672, align 8, !tbaa !13
  %1673 = load ptr, ptr %9, align 8, !tbaa !5
  %1674 = load i64, ptr %12, align 8, !tbaa !9
  %1675 = getelementptr inbounds %struct.doublecomplex, ptr %1673, i64 %1674
  %1676 = getelementptr inbounds %struct.doublecomplex, ptr %1675, i32 0, i32 1
  %1677 = load double, ptr %1676, align 8, !tbaa !17
  %1678 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1677, ptr %1678, align 8, !tbaa !17
  %1679 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %1679, ptr %12, align 8, !tbaa !9
  %1680 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %1680, ptr %13, align 8, !tbaa !9
  %1681 = load ptr, ptr %9, align 8, !tbaa !5
  %1682 = load i64, ptr %13, align 8, !tbaa !9
  %1683 = getelementptr inbounds %struct.doublecomplex, ptr %1681, i64 %1682
  %1684 = getelementptr inbounds %struct.doublecomplex, ptr %1683, i32 0, i32 0
  %1685 = load double, ptr %1684, align 8, !tbaa !13
  %1686 = load ptr, ptr %9, align 8, !tbaa !5
  %1687 = load i64, ptr %12, align 8, !tbaa !9
  %1688 = getelementptr inbounds %struct.doublecomplex, ptr %1686, i64 %1687
  %1689 = getelementptr inbounds %struct.doublecomplex, ptr %1688, i32 0, i32 0
  store double %1685, ptr %1689, align 8, !tbaa !13
  %1690 = load ptr, ptr %9, align 8, !tbaa !5
  %1691 = load i64, ptr %13, align 8, !tbaa !9
  %1692 = getelementptr inbounds %struct.doublecomplex, ptr %1690, i64 %1691
  %1693 = getelementptr inbounds %struct.doublecomplex, ptr %1692, i32 0, i32 1
  %1694 = load double, ptr %1693, align 8, !tbaa !17
  %1695 = load ptr, ptr %9, align 8, !tbaa !5
  %1696 = load i64, ptr %12, align 8, !tbaa !9
  %1697 = getelementptr inbounds %struct.doublecomplex, ptr %1695, i64 %1696
  %1698 = getelementptr inbounds %struct.doublecomplex, ptr %1697, i32 0, i32 1
  store double %1694, ptr %1698, align 8, !tbaa !17
  %1699 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %1699, ptr %12, align 8, !tbaa !9
  %1700 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1701 = load double, ptr %1700, align 8, !tbaa !13
  %1702 = load ptr, ptr %9, align 8, !tbaa !5
  %1703 = load i64, ptr %12, align 8, !tbaa !9
  %1704 = getelementptr inbounds %struct.doublecomplex, ptr %1702, i64 %1703
  %1705 = getelementptr inbounds %struct.doublecomplex, ptr %1704, i32 0, i32 0
  store double %1701, ptr %1705, align 8, !tbaa !13
  %1706 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1707 = load double, ptr %1706, align 8, !tbaa !17
  %1708 = load ptr, ptr %9, align 8, !tbaa !5
  %1709 = load i64, ptr %12, align 8, !tbaa !9
  %1710 = getelementptr inbounds %struct.doublecomplex, ptr %1708, i64 %1709
  %1711 = getelementptr inbounds %struct.doublecomplex, ptr %1710, i32 0, i32 1
  store double %1707, ptr %1711, align 8, !tbaa !17
  %1712 = load i64, ptr %48, align 8, !tbaa !9
  %1713 = icmp eq i64 %1712, 2
  br i1 %1713, label %1714, label %1771

1714:                                             ; preds = %1665
  %1715 = load i64, ptr %35, align 8, !tbaa !9
  %1716 = add nsw i64 %1715, 1
  store i64 %1716, ptr %12, align 8, !tbaa !9
  %1717 = load ptr, ptr %9, align 8, !tbaa !5
  %1718 = load i64, ptr %12, align 8, !tbaa !9
  %1719 = getelementptr inbounds %struct.doublecomplex, ptr %1717, i64 %1718
  %1720 = getelementptr inbounds %struct.doublecomplex, ptr %1719, i32 0, i32 0
  %1721 = load double, ptr %1720, align 8, !tbaa !13
  %1722 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1721, ptr %1722, align 8, !tbaa !13
  %1723 = load ptr, ptr %9, align 8, !tbaa !5
  %1724 = load i64, ptr %12, align 8, !tbaa !9
  %1725 = getelementptr inbounds %struct.doublecomplex, ptr %1723, i64 %1724
  %1726 = getelementptr inbounds %struct.doublecomplex, ptr %1725, i32 0, i32 1
  %1727 = load double, ptr %1726, align 8, !tbaa !17
  %1728 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1727, ptr %1728, align 8, !tbaa !17
  %1729 = load i64, ptr %35, align 8, !tbaa !9
  %1730 = add nsw i64 %1729, 1
  store i64 %1730, ptr %12, align 8, !tbaa !9
  %1731 = load i64, ptr %35, align 8, !tbaa !9
  %1732 = load i64, ptr %37, align 8, !tbaa !9
  %1733 = add nsw i64 %1731, %1732
  %1734 = load i64, ptr %28, align 8, !tbaa !9
  %1735 = sub nsw i64 %1733, %1734
  store i64 %1735, ptr %13, align 8, !tbaa !9
  %1736 = load ptr, ptr %9, align 8, !tbaa !5
  %1737 = load i64, ptr %13, align 8, !tbaa !9
  %1738 = getelementptr inbounds %struct.doublecomplex, ptr %1736, i64 %1737
  %1739 = getelementptr inbounds %struct.doublecomplex, ptr %1738, i32 0, i32 0
  %1740 = load double, ptr %1739, align 8, !tbaa !13
  %1741 = load ptr, ptr %9, align 8, !tbaa !5
  %1742 = load i64, ptr %12, align 8, !tbaa !9
  %1743 = getelementptr inbounds %struct.doublecomplex, ptr %1741, i64 %1742
  %1744 = getelementptr inbounds %struct.doublecomplex, ptr %1743, i32 0, i32 0
  store double %1740, ptr %1744, align 8, !tbaa !13
  %1745 = load ptr, ptr %9, align 8, !tbaa !5
  %1746 = load i64, ptr %13, align 8, !tbaa !9
  %1747 = getelementptr inbounds %struct.doublecomplex, ptr %1745, i64 %1746
  %1748 = getelementptr inbounds %struct.doublecomplex, ptr %1747, i32 0, i32 1
  %1749 = load double, ptr %1748, align 8, !tbaa !17
  %1750 = load ptr, ptr %9, align 8, !tbaa !5
  %1751 = load i64, ptr %12, align 8, !tbaa !9
  %1752 = getelementptr inbounds %struct.doublecomplex, ptr %1750, i64 %1751
  %1753 = getelementptr inbounds %struct.doublecomplex, ptr %1752, i32 0, i32 1
  store double %1749, ptr %1753, align 8, !tbaa !17
  %1754 = load i64, ptr %35, align 8, !tbaa !9
  %1755 = load i64, ptr %37, align 8, !tbaa !9
  %1756 = add nsw i64 %1754, %1755
  %1757 = load i64, ptr %28, align 8, !tbaa !9
  %1758 = sub nsw i64 %1756, %1757
  store i64 %1758, ptr %12, align 8, !tbaa !9
  %1759 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1760 = load double, ptr %1759, align 8, !tbaa !13
  %1761 = load ptr, ptr %9, align 8, !tbaa !5
  %1762 = load i64, ptr %12, align 8, !tbaa !9
  %1763 = getelementptr inbounds %struct.doublecomplex, ptr %1761, i64 %1762
  %1764 = getelementptr inbounds %struct.doublecomplex, ptr %1763, i32 0, i32 0
  store double %1760, ptr %1764, align 8, !tbaa !13
  %1765 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1766 = load double, ptr %1765, align 8, !tbaa !17
  %1767 = load ptr, ptr %9, align 8, !tbaa !5
  %1768 = load i64, ptr %12, align 8, !tbaa !9
  %1769 = getelementptr inbounds %struct.doublecomplex, ptr %1767, i64 %1768
  %1770 = getelementptr inbounds %struct.doublecomplex, ptr %1769, i32 0, i32 1
  store double %1766, ptr %1770, align 8, !tbaa !17
  br label %1771

1771:                                             ; preds = %1714, %1665
  br label %1772

1772:                                             ; preds = %1771, %1559
  %1773 = load i64, ptr %48, align 8, !tbaa !9
  %1774 = icmp eq i64 %1773, 1
  br i1 %1774, label %1775, label %1827

1775:                                             ; preds = %1772
  %1776 = load i64, ptr %28, align 8, !tbaa !9
  %1777 = load ptr, ptr %8, align 8, !tbaa !5
  %1778 = load i64, ptr %1777, align 8, !tbaa !9
  %1779 = icmp slt i64 %1776, %1778
  br i1 %1779, label %1780, label %1826

1780:                                             ; preds = %1775
  %1781 = load ptr, ptr %9, align 8, !tbaa !5
  %1782 = load i64, ptr %35, align 8, !tbaa !9
  %1783 = getelementptr inbounds %struct.doublecomplex, ptr %1781, i64 %1782
  call void @z_div(ptr noundef %22, ptr noundef @c_b1, ptr noundef %1783)
  %1784 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1785 = load double, ptr %1784, align 8, !tbaa !13
  %1786 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %1785, ptr %1786, align 8, !tbaa !13
  %1787 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1788 = load double, ptr %1787, align 8, !tbaa !17
  %1789 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %1788, ptr %1789, align 8, !tbaa !17
  %1790 = load ptr, ptr %8, align 8, !tbaa !5
  %1791 = load i64, ptr %1790, align 8, !tbaa !9
  %1792 = load i64, ptr %28, align 8, !tbaa !9
  %1793 = sub nsw i64 %1791, %1792
  store i64 %1793, ptr %12, align 8, !tbaa !9
  %1794 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %1795 = load double, ptr %1794, align 8, !tbaa !13
  %1796 = fneg double %1795
  %1797 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %1796, ptr %1797, align 8, !tbaa !13
  %1798 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %1799 = load double, ptr %1798, align 8, !tbaa !17
  %1800 = fneg double %1799
  %1801 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %1800, ptr %1801, align 8, !tbaa !17
  %1802 = load ptr, ptr %7, align 8, !tbaa !5
  %1803 = load ptr, ptr %9, align 8, !tbaa !5
  %1804 = load i64, ptr %35, align 8, !tbaa !9
  %1805 = add nsw i64 %1804, 1
  %1806 = getelementptr inbounds %struct.doublecomplex, ptr %1803, i64 %1805
  %1807 = load ptr, ptr %9, align 8, !tbaa !5
  %1808 = load i64, ptr %35, align 8, !tbaa !9
  %1809 = load ptr, ptr %8, align 8, !tbaa !5
  %1810 = load i64, ptr %1809, align 8, !tbaa !9
  %1811 = add nsw i64 %1808, %1810
  %1812 = load i64, ptr %28, align 8, !tbaa !9
  %1813 = sub nsw i64 %1811, %1812
  %1814 = add nsw i64 %1813, 1
  %1815 = getelementptr inbounds %struct.doublecomplex, ptr %1807, i64 %1814
  %1816 = call i32 @zspr_(ptr noundef %1802, ptr noundef %12, ptr noundef %22, ptr noundef %1806, ptr noundef @c__1, ptr noundef %1815)
  %1817 = load ptr, ptr %8, align 8, !tbaa !5
  %1818 = load i64, ptr %1817, align 8, !tbaa !9
  %1819 = load i64, ptr %28, align 8, !tbaa !9
  %1820 = sub nsw i64 %1818, %1819
  store i64 %1820, ptr %12, align 8, !tbaa !9
  %1821 = load ptr, ptr %9, align 8, !tbaa !5
  %1822 = load i64, ptr %35, align 8, !tbaa !9
  %1823 = add nsw i64 %1822, 1
  %1824 = getelementptr inbounds %struct.doublecomplex, ptr %1821, i64 %1823
  %1825 = call i32 @f2c_zscal(ptr noundef %12, ptr noundef %30, ptr noundef %1824, ptr noundef @c__1)
  br label %1826

1826:                                             ; preds = %1780, %1775
  br label %2376

1827:                                             ; preds = %1772
  %1828 = load i64, ptr %28, align 8, !tbaa !9
  %1829 = load ptr, ptr %8, align 8, !tbaa !5
  %1830 = load i64, ptr %1829, align 8, !tbaa !9
  %1831 = sub nsw i64 %1830, 1
  %1832 = icmp slt i64 %1828, %1831
  br i1 %1832, label %1833, label %2375

1833:                                             ; preds = %1827
  %1834 = load i64, ptr %28, align 8, !tbaa !9
  %1835 = add nsw i64 %1834, 1
  %1836 = load i64, ptr %28, align 8, !tbaa !9
  %1837 = sub nsw i64 %1836, 1
  %1838 = load ptr, ptr %8, align 8, !tbaa !5
  %1839 = load i64, ptr %1838, align 8, !tbaa !9
  %1840 = shl i64 %1839, 1
  %1841 = load i64, ptr %28, align 8, !tbaa !9
  %1842 = sub nsw i64 %1840, %1841
  %1843 = mul nsw i64 %1837, %1842
  %1844 = sdiv i64 %1843, 2
  %1845 = add nsw i64 %1835, %1844
  store i64 %1845, ptr %12, align 8, !tbaa !9
  %1846 = load ptr, ptr %9, align 8, !tbaa !5
  %1847 = load i64, ptr %12, align 8, !tbaa !9
  %1848 = getelementptr inbounds %struct.doublecomplex, ptr %1846, i64 %1847
  %1849 = getelementptr inbounds %struct.doublecomplex, ptr %1848, i32 0, i32 0
  %1850 = load double, ptr %1849, align 8, !tbaa !13
  %1851 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  store double %1850, ptr %1851, align 8, !tbaa !13
  %1852 = load ptr, ptr %9, align 8, !tbaa !5
  %1853 = load i64, ptr %12, align 8, !tbaa !9
  %1854 = getelementptr inbounds %struct.doublecomplex, ptr %1852, i64 %1853
  %1855 = getelementptr inbounds %struct.doublecomplex, ptr %1854, i32 0, i32 1
  %1856 = load double, ptr %1855, align 8, !tbaa !17
  %1857 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  store double %1856, ptr %1857, align 8, !tbaa !17
  %1858 = load ptr, ptr %9, align 8, !tbaa !5
  %1859 = load i64, ptr %28, align 8, !tbaa !9
  %1860 = add nsw i64 %1859, 1
  %1861 = load i64, ptr %28, align 8, !tbaa !9
  %1862 = load ptr, ptr %8, align 8, !tbaa !5
  %1863 = load i64, ptr %1862, align 8, !tbaa !9
  %1864 = shl i64 %1863, 1
  %1865 = load i64, ptr %28, align 8, !tbaa !9
  %1866 = sub nsw i64 %1864, %1865
  %1867 = sub nsw i64 %1866, 1
  %1868 = mul nsw i64 %1861, %1867
  %1869 = sdiv i64 %1868, 2
  %1870 = add nsw i64 %1860, %1869
  %1871 = getelementptr inbounds %struct.doublecomplex, ptr %1858, i64 %1870
  call void @z_div(ptr noundef %22, ptr noundef %1871, ptr noundef %33)
  %1872 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1873 = load double, ptr %1872, align 8, !tbaa !13
  %1874 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  store double %1873, ptr %1874, align 8, !tbaa !13
  %1875 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1876 = load double, ptr %1875, align 8, !tbaa !17
  %1877 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  store double %1876, ptr %1877, align 8, !tbaa !17
  %1878 = load ptr, ptr %9, align 8, !tbaa !5
  %1879 = load i64, ptr %28, align 8, !tbaa !9
  %1880 = load i64, ptr %28, align 8, !tbaa !9
  %1881 = sub nsw i64 %1880, 1
  %1882 = load ptr, ptr %8, align 8, !tbaa !5
  %1883 = load i64, ptr %1882, align 8, !tbaa !9
  %1884 = shl i64 %1883, 1
  %1885 = load i64, ptr %28, align 8, !tbaa !9
  %1886 = sub nsw i64 %1884, %1885
  %1887 = mul nsw i64 %1881, %1886
  %1888 = sdiv i64 %1887, 2
  %1889 = add nsw i64 %1879, %1888
  %1890 = getelementptr inbounds %struct.doublecomplex, ptr %1878, i64 %1889
  call void @z_div(ptr noundef %22, ptr noundef %1890, ptr noundef %33)
  %1891 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1892 = load double, ptr %1891, align 8, !tbaa !13
  %1893 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  store double %1892, ptr %1893, align 8, !tbaa !13
  %1894 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1895 = load double, ptr %1894, align 8, !tbaa !17
  %1896 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  store double %1895, ptr %1896, align 8, !tbaa !17
  %1897 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %1898 = load double, ptr %1897, align 8, !tbaa !13
  %1899 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %1900 = load double, ptr %1899, align 8, !tbaa !13
  %1901 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %1902 = load double, ptr %1901, align 8, !tbaa !17
  %1903 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %1904 = load double, ptr %1903, align 8, !tbaa !17
  %1905 = fmul double %1902, %1904
  %1906 = fneg double %1905
  %1907 = call double @llvm.fmuladd.f64(double %1898, double %1900, double %1906)
  %1908 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %1907, ptr %1908, align 8, !tbaa !13
  %1909 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %1910 = load double, ptr %1909, align 8, !tbaa !13
  %1911 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %1912 = load double, ptr %1911, align 8, !tbaa !17
  %1913 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %1914 = load double, ptr %1913, align 8, !tbaa !17
  %1915 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %1916 = load double, ptr %1915, align 8, !tbaa !13
  %1917 = fmul double %1914, %1916
  %1918 = call double @llvm.fmuladd.f64(double %1910, double %1912, double %1917)
  %1919 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %1918, ptr %1919, align 8, !tbaa !17
  %1920 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %1921 = load double, ptr %1920, align 8, !tbaa !13
  %1922 = fsub double %1921, 1.000000e+00
  %1923 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %1922, ptr %1923, align 8, !tbaa !13
  %1924 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %1925 = load double, ptr %1924, align 8, !tbaa !17
  %1926 = fsub double %1925, 0.000000e+00
  %1927 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %1926, ptr %1927, align 8, !tbaa !17
  call void @z_div(ptr noundef %22, ptr noundef @c_b1, ptr noundef %23)
  %1928 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1929 = load double, ptr %1928, align 8, !tbaa !13
  %1930 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1929, ptr %1930, align 8, !tbaa !13
  %1931 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1932 = load double, ptr %1931, align 8, !tbaa !17
  %1933 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1932, ptr %1933, align 8, !tbaa !17
  call void @z_div(ptr noundef %22, ptr noundef %29, ptr noundef %33)
  %1934 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1935 = load double, ptr %1934, align 8, !tbaa !13
  %1936 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  store double %1935, ptr %1936, align 8, !tbaa !13
  %1937 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1938 = load double, ptr %1937, align 8, !tbaa !17
  %1939 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  store double %1938, ptr %1939, align 8, !tbaa !17
  %1940 = load ptr, ptr %8, align 8, !tbaa !5
  %1941 = load i64, ptr %1940, align 8, !tbaa !9
  store i64 %1941, ptr %12, align 8, !tbaa !9
  %1942 = load i64, ptr %28, align 8, !tbaa !9
  %1943 = add nsw i64 %1942, 2
  store i64 %1943, ptr %27, align 8, !tbaa !9
  br label %1944

1944:                                             ; preds = %2371, %1833
  %1945 = load i64, ptr %27, align 8, !tbaa !9
  %1946 = load i64, ptr %12, align 8, !tbaa !9
  %1947 = icmp sle i64 %1945, %1946
  br i1 %1947, label %1948, label %2374

1948:                                             ; preds = %1944
  %1949 = load i64, ptr %27, align 8, !tbaa !9
  %1950 = load i64, ptr %28, align 8, !tbaa !9
  %1951 = sub nsw i64 %1950, 1
  %1952 = load ptr, ptr %8, align 8, !tbaa !5
  %1953 = load i64, ptr %1952, align 8, !tbaa !9
  %1954 = shl i64 %1953, 1
  %1955 = load i64, ptr %28, align 8, !tbaa !9
  %1956 = sub nsw i64 %1954, %1955
  %1957 = mul nsw i64 %1951, %1956
  %1958 = sdiv i64 %1957, 2
  %1959 = add nsw i64 %1949, %1958
  store i64 %1959, ptr %13, align 8, !tbaa !9
  %1960 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %1961 = load double, ptr %1960, align 8, !tbaa !13
  %1962 = load ptr, ptr %9, align 8, !tbaa !5
  %1963 = load i64, ptr %13, align 8, !tbaa !9
  %1964 = getelementptr inbounds %struct.doublecomplex, ptr %1962, i64 %1963
  %1965 = getelementptr inbounds %struct.doublecomplex, ptr %1964, i32 0, i32 0
  %1966 = load double, ptr %1965, align 8, !tbaa !13
  %1967 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %1968 = load double, ptr %1967, align 8, !tbaa !17
  %1969 = load ptr, ptr %9, align 8, !tbaa !5
  %1970 = load i64, ptr %13, align 8, !tbaa !9
  %1971 = getelementptr inbounds %struct.doublecomplex, ptr %1969, i64 %1970
  %1972 = getelementptr inbounds %struct.doublecomplex, ptr %1971, i32 0, i32 1
  %1973 = load double, ptr %1972, align 8, !tbaa !17
  %1974 = fmul double %1968, %1973
  %1975 = fneg double %1974
  %1976 = call double @llvm.fmuladd.f64(double %1961, double %1966, double %1975)
  %1977 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %1976, ptr %1977, align 8, !tbaa !13
  %1978 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 0
  %1979 = load double, ptr %1978, align 8, !tbaa !13
  %1980 = load ptr, ptr %9, align 8, !tbaa !5
  %1981 = load i64, ptr %13, align 8, !tbaa !9
  %1982 = getelementptr inbounds %struct.doublecomplex, ptr %1980, i64 %1981
  %1983 = getelementptr inbounds %struct.doublecomplex, ptr %1982, i32 0, i32 1
  %1984 = load double, ptr %1983, align 8, !tbaa !17
  %1985 = getelementptr inbounds %struct.doublecomplex, ptr %31, i32 0, i32 1
  %1986 = load double, ptr %1985, align 8, !tbaa !17
  %1987 = load ptr, ptr %9, align 8, !tbaa !5
  %1988 = load i64, ptr %13, align 8, !tbaa !9
  %1989 = getelementptr inbounds %struct.doublecomplex, ptr %1987, i64 %1988
  %1990 = getelementptr inbounds %struct.doublecomplex, ptr %1989, i32 0, i32 0
  %1991 = load double, ptr %1990, align 8, !tbaa !13
  %1992 = fmul double %1986, %1991
  %1993 = call double @llvm.fmuladd.f64(double %1979, double %1984, double %1992)
  %1994 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %1993, ptr %1994, align 8, !tbaa !17
  %1995 = load i64, ptr %27, align 8, !tbaa !9
  %1996 = load i64, ptr %28, align 8, !tbaa !9
  %1997 = load ptr, ptr %8, align 8, !tbaa !5
  %1998 = load i64, ptr %1997, align 8, !tbaa !9
  %1999 = shl i64 %1998, 1
  %2000 = load i64, ptr %28, align 8, !tbaa !9
  %2001 = sub nsw i64 %1999, %2000
  %2002 = sub nsw i64 %2001, 1
  %2003 = mul nsw i64 %1996, %2002
  %2004 = sdiv i64 %2003, 2
  %2005 = add nsw i64 %1995, %2004
  store i64 %2005, ptr %14, align 8, !tbaa !9
  %2006 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %2007 = load double, ptr %2006, align 8, !tbaa !13
  %2008 = load ptr, ptr %9, align 8, !tbaa !5
  %2009 = load i64, ptr %14, align 8, !tbaa !9
  %2010 = getelementptr inbounds %struct.doublecomplex, ptr %2008, i64 %2009
  %2011 = getelementptr inbounds %struct.doublecomplex, ptr %2010, i32 0, i32 0
  %2012 = load double, ptr %2011, align 8, !tbaa !13
  %2013 = fsub double %2007, %2012
  %2014 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %2013, ptr %2014, align 8, !tbaa !13
  %2015 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %2016 = load double, ptr %2015, align 8, !tbaa !17
  %2017 = load ptr, ptr %9, align 8, !tbaa !5
  %2018 = load i64, ptr %14, align 8, !tbaa !9
  %2019 = getelementptr inbounds %struct.doublecomplex, ptr %2017, i64 %2018
  %2020 = getelementptr inbounds %struct.doublecomplex, ptr %2019, i32 0, i32 1
  %2021 = load double, ptr %2020, align 8, !tbaa !17
  %2022 = fsub double %2016, %2021
  %2023 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %2022, ptr %2023, align 8, !tbaa !17
  %2024 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  %2025 = load double, ptr %2024, align 8, !tbaa !13
  %2026 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2027 = load double, ptr %2026, align 8, !tbaa !13
  %2028 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  %2029 = load double, ptr %2028, align 8, !tbaa !17
  %2030 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2031 = load double, ptr %2030, align 8, !tbaa !17
  %2032 = fmul double %2029, %2031
  %2033 = fneg double %2032
  %2034 = call double @llvm.fmuladd.f64(double %2025, double %2027, double %2033)
  %2035 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2034, ptr %2035, align 8, !tbaa !13
  %2036 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  %2037 = load double, ptr %2036, align 8, !tbaa !13
  %2038 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2039 = load double, ptr %2038, align 8, !tbaa !17
  %2040 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  %2041 = load double, ptr %2040, align 8, !tbaa !17
  %2042 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2043 = load double, ptr %2042, align 8, !tbaa !13
  %2044 = fmul double %2041, %2043
  %2045 = call double @llvm.fmuladd.f64(double %2037, double %2039, double %2044)
  %2046 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2045, ptr %2046, align 8, !tbaa !17
  %2047 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2048 = load double, ptr %2047, align 8, !tbaa !13
  %2049 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  store double %2048, ptr %2049, align 8, !tbaa !13
  %2050 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2051 = load double, ptr %2050, align 8, !tbaa !17
  %2052 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  store double %2051, ptr %2052, align 8, !tbaa !17
  %2053 = load i64, ptr %27, align 8, !tbaa !9
  %2054 = load i64, ptr %28, align 8, !tbaa !9
  %2055 = load ptr, ptr %8, align 8, !tbaa !5
  %2056 = load i64, ptr %2055, align 8, !tbaa !9
  %2057 = shl i64 %2056, 1
  %2058 = load i64, ptr %28, align 8, !tbaa !9
  %2059 = sub nsw i64 %2057, %2058
  %2060 = sub nsw i64 %2059, 1
  %2061 = mul nsw i64 %2054, %2060
  %2062 = sdiv i64 %2061, 2
  %2063 = add nsw i64 %2053, %2062
  store i64 %2063, ptr %13, align 8, !tbaa !9
  %2064 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %2065 = load double, ptr %2064, align 8, !tbaa !13
  %2066 = load ptr, ptr %9, align 8, !tbaa !5
  %2067 = load i64, ptr %13, align 8, !tbaa !9
  %2068 = getelementptr inbounds %struct.doublecomplex, ptr %2066, i64 %2067
  %2069 = getelementptr inbounds %struct.doublecomplex, ptr %2068, i32 0, i32 0
  %2070 = load double, ptr %2069, align 8, !tbaa !13
  %2071 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %2072 = load double, ptr %2071, align 8, !tbaa !17
  %2073 = load ptr, ptr %9, align 8, !tbaa !5
  %2074 = load i64, ptr %13, align 8, !tbaa !9
  %2075 = getelementptr inbounds %struct.doublecomplex, ptr %2073, i64 %2074
  %2076 = getelementptr inbounds %struct.doublecomplex, ptr %2075, i32 0, i32 1
  %2077 = load double, ptr %2076, align 8, !tbaa !17
  %2078 = fmul double %2072, %2077
  %2079 = fneg double %2078
  %2080 = call double @llvm.fmuladd.f64(double %2065, double %2070, double %2079)
  %2081 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %2080, ptr %2081, align 8, !tbaa !13
  %2082 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 0
  %2083 = load double, ptr %2082, align 8, !tbaa !13
  %2084 = load ptr, ptr %9, align 8, !tbaa !5
  %2085 = load i64, ptr %13, align 8, !tbaa !9
  %2086 = getelementptr inbounds %struct.doublecomplex, ptr %2084, i64 %2085
  %2087 = getelementptr inbounds %struct.doublecomplex, ptr %2086, i32 0, i32 1
  %2088 = load double, ptr %2087, align 8, !tbaa !17
  %2089 = getelementptr inbounds %struct.doublecomplex, ptr %34, i32 0, i32 1
  %2090 = load double, ptr %2089, align 8, !tbaa !17
  %2091 = load ptr, ptr %9, align 8, !tbaa !5
  %2092 = load i64, ptr %13, align 8, !tbaa !9
  %2093 = getelementptr inbounds %struct.doublecomplex, ptr %2091, i64 %2092
  %2094 = getelementptr inbounds %struct.doublecomplex, ptr %2093, i32 0, i32 0
  %2095 = load double, ptr %2094, align 8, !tbaa !13
  %2096 = fmul double %2090, %2095
  %2097 = call double @llvm.fmuladd.f64(double %2083, double %2088, double %2096)
  %2098 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %2097, ptr %2098, align 8, !tbaa !17
  %2099 = load i64, ptr %27, align 8, !tbaa !9
  %2100 = load i64, ptr %28, align 8, !tbaa !9
  %2101 = sub nsw i64 %2100, 1
  %2102 = load ptr, ptr %8, align 8, !tbaa !5
  %2103 = load i64, ptr %2102, align 8, !tbaa !9
  %2104 = shl i64 %2103, 1
  %2105 = load i64, ptr %28, align 8, !tbaa !9
  %2106 = sub nsw i64 %2104, %2105
  %2107 = mul nsw i64 %2101, %2106
  %2108 = sdiv i64 %2107, 2
  %2109 = add nsw i64 %2099, %2108
  store i64 %2109, ptr %14, align 8, !tbaa !9
  %2110 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %2111 = load double, ptr %2110, align 8, !tbaa !13
  %2112 = load ptr, ptr %9, align 8, !tbaa !5
  %2113 = load i64, ptr %14, align 8, !tbaa !9
  %2114 = getelementptr inbounds %struct.doublecomplex, ptr %2112, i64 %2113
  %2115 = getelementptr inbounds %struct.doublecomplex, ptr %2114, i32 0, i32 0
  %2116 = load double, ptr %2115, align 8, !tbaa !13
  %2117 = fsub double %2111, %2116
  %2118 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %2117, ptr %2118, align 8, !tbaa !13
  %2119 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %2120 = load double, ptr %2119, align 8, !tbaa !17
  %2121 = load ptr, ptr %9, align 8, !tbaa !5
  %2122 = load i64, ptr %14, align 8, !tbaa !9
  %2123 = getelementptr inbounds %struct.doublecomplex, ptr %2121, i64 %2122
  %2124 = getelementptr inbounds %struct.doublecomplex, ptr %2123, i32 0, i32 1
  %2125 = load double, ptr %2124, align 8, !tbaa !17
  %2126 = fsub double %2120, %2125
  %2127 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %2126, ptr %2127, align 8, !tbaa !17
  %2128 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  %2129 = load double, ptr %2128, align 8, !tbaa !13
  %2130 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2131 = load double, ptr %2130, align 8, !tbaa !13
  %2132 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  %2133 = load double, ptr %2132, align 8, !tbaa !17
  %2134 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2135 = load double, ptr %2134, align 8, !tbaa !17
  %2136 = fmul double %2133, %2135
  %2137 = fneg double %2136
  %2138 = call double @llvm.fmuladd.f64(double %2129, double %2131, double %2137)
  %2139 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2138, ptr %2139, align 8, !tbaa !13
  %2140 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  %2141 = load double, ptr %2140, align 8, !tbaa !13
  %2142 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2143 = load double, ptr %2142, align 8, !tbaa !17
  %2144 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  %2145 = load double, ptr %2144, align 8, !tbaa !17
  %2146 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2147 = load double, ptr %2146, align 8, !tbaa !13
  %2148 = fmul double %2145, %2147
  %2149 = call double @llvm.fmuladd.f64(double %2141, double %2143, double %2148)
  %2150 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2149, ptr %2150, align 8, !tbaa !17
  %2151 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2152 = load double, ptr %2151, align 8, !tbaa !13
  %2153 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %2152, ptr %2153, align 8, !tbaa !13
  %2154 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2155 = load double, ptr %2154, align 8, !tbaa !17
  %2156 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %2155, ptr %2156, align 8, !tbaa !17
  %2157 = load ptr, ptr %8, align 8, !tbaa !5
  %2158 = load i64, ptr %2157, align 8, !tbaa !9
  store i64 %2158, ptr %13, align 8, !tbaa !9
  %2159 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %2159, ptr %26, align 8, !tbaa !9
  br label %2160

2160:                                             ; preds = %2321, %1948
  %2161 = load i64, ptr %26, align 8, !tbaa !9
  %2162 = load i64, ptr %13, align 8, !tbaa !9
  %2163 = icmp sle i64 %2161, %2162
  br i1 %2163, label %2164, label %2324

2164:                                             ; preds = %2160
  %2165 = load i64, ptr %26, align 8, !tbaa !9
  %2166 = load i64, ptr %27, align 8, !tbaa !9
  %2167 = sub nsw i64 %2166, 1
  %2168 = load ptr, ptr %8, align 8, !tbaa !5
  %2169 = load i64, ptr %2168, align 8, !tbaa !9
  %2170 = shl i64 %2169, 1
  %2171 = load i64, ptr %27, align 8, !tbaa !9
  %2172 = sub nsw i64 %2170, %2171
  %2173 = mul nsw i64 %2167, %2172
  %2174 = sdiv i64 %2173, 2
  %2175 = add nsw i64 %2165, %2174
  store i64 %2175, ptr %14, align 8, !tbaa !9
  %2176 = load i64, ptr %26, align 8, !tbaa !9
  %2177 = load i64, ptr %27, align 8, !tbaa !9
  %2178 = sub nsw i64 %2177, 1
  %2179 = load ptr, ptr %8, align 8, !tbaa !5
  %2180 = load i64, ptr %2179, align 8, !tbaa !9
  %2181 = shl i64 %2180, 1
  %2182 = load i64, ptr %27, align 8, !tbaa !9
  %2183 = sub nsw i64 %2181, %2182
  %2184 = mul nsw i64 %2178, %2183
  %2185 = sdiv i64 %2184, 2
  %2186 = add nsw i64 %2176, %2185
  store i64 %2186, ptr %15, align 8, !tbaa !9
  %2187 = load i64, ptr %26, align 8, !tbaa !9
  %2188 = load i64, ptr %28, align 8, !tbaa !9
  %2189 = sub nsw i64 %2188, 1
  %2190 = load ptr, ptr %8, align 8, !tbaa !5
  %2191 = load i64, ptr %2190, align 8, !tbaa !9
  %2192 = shl i64 %2191, 1
  %2193 = load i64, ptr %28, align 8, !tbaa !9
  %2194 = sub nsw i64 %2192, %2193
  %2195 = mul nsw i64 %2189, %2194
  %2196 = sdiv i64 %2195, 2
  %2197 = add nsw i64 %2187, %2196
  store i64 %2197, ptr %16, align 8, !tbaa !9
  %2198 = load ptr, ptr %9, align 8, !tbaa !5
  %2199 = load i64, ptr %16, align 8, !tbaa !9
  %2200 = getelementptr inbounds %struct.doublecomplex, ptr %2198, i64 %2199
  %2201 = getelementptr inbounds %struct.doublecomplex, ptr %2200, i32 0, i32 0
  %2202 = load double, ptr %2201, align 8, !tbaa !13
  %2203 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %2204 = load double, ptr %2203, align 8, !tbaa !13
  %2205 = load ptr, ptr %9, align 8, !tbaa !5
  %2206 = load i64, ptr %16, align 8, !tbaa !9
  %2207 = getelementptr inbounds %struct.doublecomplex, ptr %2205, i64 %2206
  %2208 = getelementptr inbounds %struct.doublecomplex, ptr %2207, i32 0, i32 1
  %2209 = load double, ptr %2208, align 8, !tbaa !17
  %2210 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %2211 = load double, ptr %2210, align 8, !tbaa !17
  %2212 = fmul double %2209, %2211
  %2213 = fneg double %2212
  %2214 = call double @llvm.fmuladd.f64(double %2202, double %2204, double %2213)
  %2215 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %2214, ptr %2215, align 8, !tbaa !13
  %2216 = load ptr, ptr %9, align 8, !tbaa !5
  %2217 = load i64, ptr %16, align 8, !tbaa !9
  %2218 = getelementptr inbounds %struct.doublecomplex, ptr %2216, i64 %2217
  %2219 = getelementptr inbounds %struct.doublecomplex, ptr %2218, i32 0, i32 0
  %2220 = load double, ptr %2219, align 8, !tbaa !13
  %2221 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %2222 = load double, ptr %2221, align 8, !tbaa !17
  %2223 = load ptr, ptr %9, align 8, !tbaa !5
  %2224 = load i64, ptr %16, align 8, !tbaa !9
  %2225 = getelementptr inbounds %struct.doublecomplex, ptr %2223, i64 %2224
  %2226 = getelementptr inbounds %struct.doublecomplex, ptr %2225, i32 0, i32 1
  %2227 = load double, ptr %2226, align 8, !tbaa !17
  %2228 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %2229 = load double, ptr %2228, align 8, !tbaa !13
  %2230 = fmul double %2227, %2229
  %2231 = call double @llvm.fmuladd.f64(double %2220, double %2222, double %2230)
  %2232 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %2231, ptr %2232, align 8, !tbaa !17
  %2233 = load ptr, ptr %9, align 8, !tbaa !5
  %2234 = load i64, ptr %15, align 8, !tbaa !9
  %2235 = getelementptr inbounds %struct.doublecomplex, ptr %2233, i64 %2234
  %2236 = getelementptr inbounds %struct.doublecomplex, ptr %2235, i32 0, i32 0
  %2237 = load double, ptr %2236, align 8, !tbaa !13
  %2238 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %2239 = load double, ptr %2238, align 8, !tbaa !13
  %2240 = fsub double %2237, %2239
  %2241 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %2240, ptr %2241, align 8, !tbaa !13
  %2242 = load ptr, ptr %9, align 8, !tbaa !5
  %2243 = load i64, ptr %15, align 8, !tbaa !9
  %2244 = getelementptr inbounds %struct.doublecomplex, ptr %2242, i64 %2243
  %2245 = getelementptr inbounds %struct.doublecomplex, ptr %2244, i32 0, i32 1
  %2246 = load double, ptr %2245, align 8, !tbaa !17
  %2247 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %2248 = load double, ptr %2247, align 8, !tbaa !17
  %2249 = fsub double %2246, %2248
  %2250 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %2249, ptr %2250, align 8, !tbaa !17
  %2251 = load i64, ptr %26, align 8, !tbaa !9
  %2252 = load i64, ptr %28, align 8, !tbaa !9
  %2253 = load ptr, ptr %8, align 8, !tbaa !5
  %2254 = load i64, ptr %2253, align 8, !tbaa !9
  %2255 = shl i64 %2254, 1
  %2256 = load i64, ptr %28, align 8, !tbaa !9
  %2257 = sub nsw i64 %2255, %2256
  %2258 = sub nsw i64 %2257, 1
  %2259 = mul nsw i64 %2252, %2258
  %2260 = sdiv i64 %2259, 2
  %2261 = add nsw i64 %2251, %2260
  store i64 %2261, ptr %17, align 8, !tbaa !9
  %2262 = load ptr, ptr %9, align 8, !tbaa !5
  %2263 = load i64, ptr %17, align 8, !tbaa !9
  %2264 = getelementptr inbounds %struct.doublecomplex, ptr %2262, i64 %2263
  %2265 = getelementptr inbounds %struct.doublecomplex, ptr %2264, i32 0, i32 0
  %2266 = load double, ptr %2265, align 8, !tbaa !13
  %2267 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2268 = load double, ptr %2267, align 8, !tbaa !13
  %2269 = load ptr, ptr %9, align 8, !tbaa !5
  %2270 = load i64, ptr %17, align 8, !tbaa !9
  %2271 = getelementptr inbounds %struct.doublecomplex, ptr %2269, i64 %2270
  %2272 = getelementptr inbounds %struct.doublecomplex, ptr %2271, i32 0, i32 1
  %2273 = load double, ptr %2272, align 8, !tbaa !17
  %2274 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2275 = load double, ptr %2274, align 8, !tbaa !17
  %2276 = fmul double %2273, %2275
  %2277 = fneg double %2276
  %2278 = call double @llvm.fmuladd.f64(double %2266, double %2268, double %2277)
  %2279 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  store double %2278, ptr %2279, align 8, !tbaa !13
  %2280 = load ptr, ptr %9, align 8, !tbaa !5
  %2281 = load i64, ptr %17, align 8, !tbaa !9
  %2282 = getelementptr inbounds %struct.doublecomplex, ptr %2280, i64 %2281
  %2283 = getelementptr inbounds %struct.doublecomplex, ptr %2282, i32 0, i32 0
  %2284 = load double, ptr %2283, align 8, !tbaa !13
  %2285 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2286 = load double, ptr %2285, align 8, !tbaa !17
  %2287 = load ptr, ptr %9, align 8, !tbaa !5
  %2288 = load i64, ptr %17, align 8, !tbaa !9
  %2289 = getelementptr inbounds %struct.doublecomplex, ptr %2287, i64 %2288
  %2290 = getelementptr inbounds %struct.doublecomplex, ptr %2289, i32 0, i32 1
  %2291 = load double, ptr %2290, align 8, !tbaa !17
  %2292 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2293 = load double, ptr %2292, align 8, !tbaa !13
  %2294 = fmul double %2291, %2293
  %2295 = call double @llvm.fmuladd.f64(double %2284, double %2286, double %2294)
  %2296 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  store double %2295, ptr %2296, align 8, !tbaa !17
  %2297 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2298 = load double, ptr %2297, align 8, !tbaa !13
  %2299 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %2300 = load double, ptr %2299, align 8, !tbaa !13
  %2301 = fsub double %2298, %2300
  %2302 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2301, ptr %2302, align 8, !tbaa !13
  %2303 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2304 = load double, ptr %2303, align 8, !tbaa !17
  %2305 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %2306 = load double, ptr %2305, align 8, !tbaa !17
  %2307 = fsub double %2304, %2306
  %2308 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2307, ptr %2308, align 8, !tbaa !17
  %2309 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2310 = load double, ptr %2309, align 8, !tbaa !13
  %2311 = load ptr, ptr %9, align 8, !tbaa !5
  %2312 = load i64, ptr %14, align 8, !tbaa !9
  %2313 = getelementptr inbounds %struct.doublecomplex, ptr %2311, i64 %2312
  %2314 = getelementptr inbounds %struct.doublecomplex, ptr %2313, i32 0, i32 0
  store double %2310, ptr %2314, align 8, !tbaa !13
  %2315 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2316 = load double, ptr %2315, align 8, !tbaa !17
  %2317 = load ptr, ptr %9, align 8, !tbaa !5
  %2318 = load i64, ptr %14, align 8, !tbaa !9
  %2319 = getelementptr inbounds %struct.doublecomplex, ptr %2317, i64 %2318
  %2320 = getelementptr inbounds %struct.doublecomplex, ptr %2319, i32 0, i32 1
  store double %2316, ptr %2320, align 8, !tbaa !17
  br label %2321

2321:                                             ; preds = %2164
  %2322 = load i64, ptr %26, align 8, !tbaa !9
  %2323 = add nsw i64 %2322, 1
  store i64 %2323, ptr %26, align 8, !tbaa !9
  br label %2160, !llvm.loop !23

2324:                                             ; preds = %2160
  %2325 = load i64, ptr %27, align 8, !tbaa !9
  %2326 = load i64, ptr %28, align 8, !tbaa !9
  %2327 = sub nsw i64 %2326, 1
  %2328 = load ptr, ptr %8, align 8, !tbaa !5
  %2329 = load i64, ptr %2328, align 8, !tbaa !9
  %2330 = shl i64 %2329, 1
  %2331 = load i64, ptr %28, align 8, !tbaa !9
  %2332 = sub nsw i64 %2330, %2331
  %2333 = mul nsw i64 %2327, %2332
  %2334 = sdiv i64 %2333, 2
  %2335 = add nsw i64 %2325, %2334
  store i64 %2335, ptr %13, align 8, !tbaa !9
  %2336 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 0
  %2337 = load double, ptr %2336, align 8, !tbaa !13
  %2338 = load ptr, ptr %9, align 8, !tbaa !5
  %2339 = load i64, ptr %13, align 8, !tbaa !9
  %2340 = getelementptr inbounds %struct.doublecomplex, ptr %2338, i64 %2339
  %2341 = getelementptr inbounds %struct.doublecomplex, ptr %2340, i32 0, i32 0
  store double %2337, ptr %2341, align 8, !tbaa !13
  %2342 = getelementptr inbounds %struct.doublecomplex, ptr %38, i32 0, i32 1
  %2343 = load double, ptr %2342, align 8, !tbaa !17
  %2344 = load ptr, ptr %9, align 8, !tbaa !5
  %2345 = load i64, ptr %13, align 8, !tbaa !9
  %2346 = getelementptr inbounds %struct.doublecomplex, ptr %2344, i64 %2345
  %2347 = getelementptr inbounds %struct.doublecomplex, ptr %2346, i32 0, i32 1
  store double %2343, ptr %2347, align 8, !tbaa !17
  %2348 = load i64, ptr %27, align 8, !tbaa !9
  %2349 = load i64, ptr %28, align 8, !tbaa !9
  %2350 = load ptr, ptr %8, align 8, !tbaa !5
  %2351 = load i64, ptr %2350, align 8, !tbaa !9
  %2352 = shl i64 %2351, 1
  %2353 = load i64, ptr %28, align 8, !tbaa !9
  %2354 = sub nsw i64 %2352, %2353
  %2355 = sub nsw i64 %2354, 1
  %2356 = mul nsw i64 %2349, %2355
  %2357 = sdiv i64 %2356, 2
  %2358 = add nsw i64 %2348, %2357
  store i64 %2358, ptr %13, align 8, !tbaa !9
  %2359 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2360 = load double, ptr %2359, align 8, !tbaa !13
  %2361 = load ptr, ptr %9, align 8, !tbaa !5
  %2362 = load i64, ptr %13, align 8, !tbaa !9
  %2363 = getelementptr inbounds %struct.doublecomplex, ptr %2361, i64 %2362
  %2364 = getelementptr inbounds %struct.doublecomplex, ptr %2363, i32 0, i32 0
  store double %2360, ptr %2364, align 8, !tbaa !13
  %2365 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2366 = load double, ptr %2365, align 8, !tbaa !17
  %2367 = load ptr, ptr %9, align 8, !tbaa !5
  %2368 = load i64, ptr %13, align 8, !tbaa !9
  %2369 = getelementptr inbounds %struct.doublecomplex, ptr %2367, i64 %2368
  %2370 = getelementptr inbounds %struct.doublecomplex, ptr %2369, i32 0, i32 1
  store double %2366, ptr %2370, align 8, !tbaa !17
  br label %2371

2371:                                             ; preds = %2324
  %2372 = load i64, ptr %27, align 8, !tbaa !9
  %2373 = add nsw i64 %2372, 1
  store i64 %2373, ptr %27, align 8, !tbaa !9
  br label %1944, !llvm.loop !24

2374:                                             ; preds = %1944
  br label %2375

2375:                                             ; preds = %2374, %1827
  br label %2376

2376:                                             ; preds = %2375, %1826
  br label %2377

2377:                                             ; preds = %2376, %1317
  %2378 = load i64, ptr %48, align 8, !tbaa !9
  %2379 = icmp eq i64 %2378, 1
  br i1 %2379, label %2380, label %2385

2380:                                             ; preds = %2377
  %2381 = load i64, ptr %37, align 8, !tbaa !9
  %2382 = load ptr, ptr %10, align 8, !tbaa !5
  %2383 = load i64, ptr %28, align 8, !tbaa !9
  %2384 = getelementptr inbounds i64, ptr %2382, i64 %2383
  store i64 %2381, ptr %2384, align 8, !tbaa !9
  br label %2397

2385:                                             ; preds = %2377
  %2386 = load i64, ptr %37, align 8, !tbaa !9
  %2387 = sub nsw i64 0, %2386
  %2388 = load ptr, ptr %10, align 8, !tbaa !5
  %2389 = load i64, ptr %28, align 8, !tbaa !9
  %2390 = getelementptr inbounds i64, ptr %2388, i64 %2389
  store i64 %2387, ptr %2390, align 8, !tbaa !9
  %2391 = load i64, ptr %37, align 8, !tbaa !9
  %2392 = sub nsw i64 0, %2391
  %2393 = load ptr, ptr %10, align 8, !tbaa !5
  %2394 = load i64, ptr %28, align 8, !tbaa !9
  %2395 = add nsw i64 %2394, 1
  %2396 = getelementptr inbounds i64, ptr %2393, i64 %2395
  store i64 %2392, ptr %2396, align 8, !tbaa !9
  br label %2397

2397:                                             ; preds = %2385, %2380
  %2398 = load i64, ptr %48, align 8, !tbaa !9
  %2399 = load i64, ptr %28, align 8, !tbaa !9
  %2400 = add nsw i64 %2399, %2398
  store i64 %2400, ptr %28, align 8, !tbaa !9
  %2401 = load i64, ptr %40, align 8, !tbaa !9
  %2402 = load ptr, ptr %8, align 8, !tbaa !5
  %2403 = load i64, ptr %2402, align 8, !tbaa !9
  %2404 = add nsw i64 %2401, %2403
  %2405 = load i64, ptr %28, align 8, !tbaa !9
  %2406 = sub nsw i64 %2404, %2405
  %2407 = add nsw i64 %2406, 2
  store i64 %2407, ptr %35, align 8, !tbaa !9
  br label %1208

2408:                                             ; preds = %1214, %106
  store i32 0, ptr %6, align 4
  store i32 1, ptr %53, align 4
  br label %2409

2409:                                             ; preds = %2408, %80
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  %2410 = load i32, ptr %6, align 4
  ret i32 %2410
}

; 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

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

declare double @d_imag(ptr noundef) #2

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

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

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

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

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

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

; 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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"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 = !{!14, !12, i64 8}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !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 [7 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b1 = external hidden global %struct.doublecomplex, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zsptrf_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr nocapture noundef writeonly %3, ptr nocapture noundef %4) local_unnamed_addr #0 {
  %6 = alloca i64, align 8
  %7 = alloca %struct.doublecomplex, align 16
  %8 = alloca %struct.doublecomplex, align 16
  %9 = alloca %struct.doublecomplex, align 16
  %10 = alloca %struct.doublecomplex, align 16
  %11 = alloca %struct.doublecomplex, align 16
  %12 = alloca %struct.doublecomplex, align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #5
  %13 = getelementptr inbounds i8, ptr %3, i64 -8
  %14 = getelementptr inbounds i8, ptr %2, i64 -16
  store i64 0, ptr %4, align 8, !tbaa !5
  %15 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not = icmp eq i64 %15, 0
  br i1 %.not, label %16, label %18

16:                                               ; preds = %5
  %17 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not828 = icmp eq i64 %17, 0
  br i1 %.not828, label %.thread.sink.split, label %18

18:                                               ; preds = %16, %5
  %19 = load i64, ptr %1, align 8, !tbaa !5
  %20 = icmp slt i64 %19, 0
  br i1 %20, label %.thread.sink.split, label %21

21:                                               ; preds = %18
  %.pr = load i64, ptr %4, align 8, !tbaa !5
  %.not829 = icmp eq i64 %.pr, 0
  br i1 %.not829, label %25, label %.thread

.thread.sink.split:                               ; preds = %18, %16
  %.sink = phi i64 [ -1, %16 ], [ -2, %18 ]
  store i64 %.sink, ptr %4, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %21
  %22 = phi i64 [ %.pr, %21 ], [ %.sink, %.thread.sink.split ]
  %23 = sub nsw i64 0, %22
  store i64 %23, ptr %6, align 8, !tbaa !5
  %24 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %6) #5
  br label %.loopexit919

25:                                               ; preds = %21
  br i1 %.not, label %394, label %26

26:                                               ; preds = %25
  %27 = icmp eq i64 %19, 0
  br i1 %27, label %.loopexit919, label %.lr.ph950

.lr.ph950:                                        ; preds = %26
  %28 = add nsw i64 %19, -1
  %29 = mul nsw i64 %28, %19
  %30 = lshr i64 %29, 1
  %31 = add nuw nsw i64 %30, 1
  %32 = getelementptr inbounds i8, ptr %7, i64 8
  %33 = getelementptr inbounds i8, ptr %8, i64 8
  %scevgep1030 = getelementptr i8, ptr %2, i64 -16
  %scevgep1043 = getelementptr i8, ptr %2, i64 -8
  %scevgep1055 = getelementptr i8, ptr %2, i64 -8
  %scevgep1057 = getelementptr i8, ptr %2, i64 -16
  %scevgep1061 = getelementptr i8, ptr %2, i64 -16
  %scevgep1068 = getelementptr i8, ptr %2, i64 -8
  %scevgep1072 = getelementptr i8, ptr %2, i64 -8
  %invariant.gep1262 = getelementptr i8, ptr %14, i64 -32
  %invariant.gep1256 = getelementptr i8, ptr %2, i64 16
  %invariant.gep1258 = getelementptr i8, ptr %2, i64 24
  %invariant.gep1264 = getelementptr i8, ptr %2, i64 -48
  %invariant.gep1266 = getelementptr i8, ptr %2, i64 -48
  %invariant.gep1248 = getelementptr i8, ptr %14, i64 -16
  %invariant.gep1250 = getelementptr i8, ptr %14, i64 -16
  %invariant.gep1252 = getelementptr i8, ptr %14, i64 -24
  br label %34

34:                                               ; preds = %.lr.ph950, %390
  %.0785948 = phi i64 [ undef, %.lr.ph950 ], [ %.1786, %390 ]
  %.0807946 = phi i64 [ %31, %.lr.ph950 ], [ %392, %390 ]
  %.0809943 = phi i64 [ %19, %.lr.ph950 ], [ %391, %390 ]
  %35 = add nsw i64 %.0807946, %.0809943
  %36 = add nsw i64 %35, -1
  store i64 %36, ptr %6, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %36
  %38 = load double, ptr %37, align 8, !tbaa !9
  %39 = fcmp oge double %38, 0.000000e+00
  %40 = fneg double %38
  %41 = select i1 %39, double %38, double %40
  %42 = call double @d_imag(ptr noundef nonnull %37) #5
  %43 = fcmp oge double %42, 0.000000e+00
  %44 = fneg double %42
  %45 = select i1 %43, double %42, double %44
  %46 = fadd double %41, %45
  %.not835 = icmp eq i64 %.0809943, 1
  br i1 %.not835, label %63, label %47

47:                                               ; preds = %34
  %48 = add nsw i64 %.0809943, -1
  store i64 %48, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.0807946
  %50 = call i64 @f2c_izamax(ptr noundef nonnull %6, ptr noundef nonnull %49, ptr noundef nonnull @c__1) #5
  %51 = add i64 %.0807946, -1
  %52 = add i64 %51, %50
  store i64 %52, ptr %6, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %52
  %54 = load double, ptr %53, align 8, !tbaa !9
  %55 = call double @d_imag(ptr noundef nonnull %53) #5
  %56 = insertelement <2 x double> poison, double %54, i64 0
  %57 = insertelement <2 x double> %56, double %55, i64 1
  %58 = fcmp oge <2 x double> %57, zeroinitializer
  %59 = fneg <2 x double> %57
  %60 = select <2 x i1> %58, <2 x double> %57, <2 x double> %59
  %shift = shufflevector <2 x double> %60, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %61 = fadd <2 x double> %60, %shift
  %62 = extractelement <2 x double> %61, i64 0
  br label %63

63:                                               ; preds = %34, %47
  %.1786 = phi i64 [ %50, %47 ], [ %.0785948, %34 ]
  %.0778 = phi double [ %62, %47 ], [ 0.000000e+00, %34 ]
  %64 = fcmp oge double %46, %.0778
  %65 = select i1 %64, double %46, double %.0778
  %66 = fcmp oeq double %65, 0.000000e+00
  br i1 %66, label %67, label %71

67:                                               ; preds = %63
  %68 = load i64, ptr %4, align 8, !tbaa !5
  %69 = icmp eq i64 %68, 0
  br i1 %69, label %70, label %385

70:                                               ; preds = %67
  store i64 %.0809943, ptr %4, align 8, !tbaa !5
  br label %385

71:                                               ; preds = %63
  %72 = fmul double %.0778, 0x3FE47E0F66AFED07
  %73 = fcmp ult double %46, %72
  br i1 %73, label %74, label %.thread859

74:                                               ; preds = %71
  store i64 %.0809943, ptr %6, align 8, !tbaa !5
  %.not836922.not = icmp slt i64 %.1786, %.0809943
  br i1 %.not836922.not, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %74
  %75 = add nsw i64 %.1786, 1
  %76 = mul nsw i64 %75, %.1786
  %77 = sdiv i64 %76, 2
  %78 = add nsw i64 %77, %.1786
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %100
  %.0925 = phi double [ %.1, %100 ], [ 0.000000e+00, %.lr.ph.preheader ]
  %.0799924 = phi i64 [ %101, %100 ], [ %78, %.lr.ph.preheader ]
  %.0811923 = phi i64 [ %102, %100 ], [ %75, %.lr.ph.preheader ]
  %79 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.0799924
  %80 = load double, ptr %79, align 8, !tbaa !9
  %81 = call double @d_imag(ptr noundef nonnull %79) #5
  %82 = insertelement <2 x double> poison, double %80, i64 0
  %83 = insertelement <2 x double> %82, double %81, i64 1
  %84 = fcmp oge <2 x double> %83, zeroinitializer
  %85 = fneg <2 x double> %83
  %86 = select <2 x i1> %84, <2 x double> %83, <2 x double> %85
  %shift1204 = shufflevector <2 x double> %86, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %87 = fadd <2 x double> %86, %shift1204
  %88 = extractelement <2 x double> %87, i64 0
  %89 = fcmp ogt double %88, %.0925
  br i1 %89, label %90, label %100

90:                                               ; preds = %.lr.ph
  %91 = load double, ptr %79, align 8, !tbaa !9
  %92 = call double @d_imag(ptr noundef nonnull %79) #5
  %93 = insertelement <2 x double> poison, double %91, i64 0
  %94 = insertelement <2 x double> %93, double %92, i64 1
  %95 = fcmp oge <2 x double> %94, zeroinitializer
  %96 = fneg <2 x double> %94
  %97 = select <2 x i1> %95, <2 x double> %94, <2 x double> %96
  %shift1205 = shufflevector <2 x double> %97, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %98 = fadd <2 x double> %97, %shift1205
  %99 = extractelement <2 x double> %98, i64 0
  br label %100

100:                                              ; preds = %90, %.lr.ph
  %.1 = phi double [ %99, %90 ], [ %.0925, %.lr.ph ]
  %101 = add nsw i64 %.0799924, %.0811923
  %102 = add nsw i64 %.0811923, 1
  %103 = load i64, ptr %6, align 8, !tbaa !5
  %.not836.not = icmp slt i64 %.0811923, %103
  br i1 %.not836.not, label %.lr.ph, label %._crit_edge, !llvm.loop !12

._crit_edge:                                      ; preds = %100, %74
  %.0.lcssa = phi double [ 0.000000e+00, %74 ], [ %.1, %100 ]
  %104 = add nsw i64 %.1786, -1
  %105 = mul nsw i64 %104, %.1786
  %106 = sdiv i64 %105, 2
  %107 = icmp sgt i64 %.1786, 1
  br i1 %107, label %108, label %124

108:                                              ; preds = %._crit_edge
  store i64 %104, ptr %6, align 8, !tbaa !5
  %109 = getelementptr %struct.doublecomplex, ptr %2, i64 %106
  %110 = call i64 @f2c_izamax(ptr noundef nonnull %6, ptr noundef %109, ptr noundef nonnull @c__1) #5
  %111 = add i64 %110, %106
  store i64 %111, ptr %6, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %111
  %113 = load double, ptr %112, align 8, !tbaa !9
  %114 = call double @d_imag(ptr noundef nonnull %112) #5
  %115 = insertelement <2 x double> poison, double %113, i64 0
  %116 = insertelement <2 x double> %115, double %114, i64 1
  %117 = fcmp oge <2 x double> %116, zeroinitializer
  %118 = fneg <2 x double> %116
  %119 = select <2 x i1> %117, <2 x double> %116, <2 x double> %118
  %shift1206 = shufflevector <2 x double> %119, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %120 = fadd <2 x double> %119, %shift1206
  %121 = extractelement <2 x double> %120, i64 0
  %122 = fcmp oge double %.0.lcssa, %121
  %123 = select i1 %122, double %.0.lcssa, double %121
  br label %124

124:                                              ; preds = %108, %._crit_edge
  %.2 = phi double [ %123, %108 ], [ %.0.lcssa, %._crit_edge ]
  %125 = fdiv double %.0778, %.2
  %126 = fmul double %72, %125
  %127 = fcmp ult double %46, %126
  br i1 %127, label %128, label %.thread859

128:                                              ; preds = %124
  %129 = add i64 %106, %.1786
  store i64 %129, ptr %6, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %129
  %131 = load double, ptr %130, align 8, !tbaa !9
  %132 = call double @d_imag(ptr noundef nonnull %130) #5
  %133 = insertelement <2 x double> poison, double %131, i64 0
  %134 = insertelement <2 x double> %133, double %132, i64 1
  %135 = fcmp oge <2 x double> %134, zeroinitializer
  %136 = fneg <2 x double> %134
  %137 = select <2 x i1> %135, <2 x double> %134, <2 x double> %136
  %shift1207 = shufflevector <2 x double> %137, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %138 = fadd <2 x double> %137, %shift1207
  %139 = extractelement <2 x double> %138, i64 0
  %140 = fmul double %.2, 0x3FE47E0F66AFED07
  %141 = fcmp ult double %139, %140
  %cond.fr = freeze i1 %141
  %.840 = select i1 %cond.fr, i64 -2, i64 -1
  %142 = add nsw i64 %.840, %.0809943
  %143 = add nsw i64 %142, 1
  %reass.sub = sub i64 %.0807946, %.0809943
  %144 = add i64 %reass.sub, 1
  %spec.select = select i1 %cond.fr, i64 %144, i64 %.0807946
  %.not837 = icmp eq i64 %.1786, %143
  br i1 %.not837, label %179, label %145

145:                                              ; preds = %128
  store i64 %104, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %spec.select
  %147 = getelementptr %struct.doublecomplex, ptr %2, i64 %106
  %148 = call i32 @f2c_zswap(ptr noundef nonnull %6, ptr noundef nonnull %146, ptr noundef nonnull @c__1, ptr noundef nonnull %147, ptr noundef nonnull @c__1) #5
  %.not838.not926 = icmp slt i64 %.1786, %142
  br i1 %.not838.not926, label %.lr.ph930.preheader, label %._crit_edge931

.lr.ph930.preheader:                              ; preds = %145
  %149 = add i64 %.840, %.0809943
  %150 = sub i64 %149, %.1786
  %151 = add nsw i64 %.840, -1
  %152 = add i64 %151, %.0809943
  %xtraiter = and i64 %150, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph930.prol.loopexit, label %.lr.ph930.prol

.lr.ph930.prol:                                   ; preds = %.lr.ph930.preheader
  %.1812.prol = add nsw i64 %.1786, 1
  %153 = add i64 %129, %.1786
  %154 = getelementptr %struct.doublecomplex, ptr %146, i64 %.1786
  %155 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %153
  %156 = load <2 x double>, ptr %154, align 8, !tbaa !14
  %157 = load <2 x double>, ptr %155, align 8, !tbaa !14
  store <2 x double> %157, ptr %154, align 8, !tbaa !14
  store <2 x double> %156, ptr %155, align 8, !tbaa !14
  br label %.lr.ph930.prol.loopexit

.lr.ph930.prol.loopexit:                          ; preds = %.lr.ph930.prol, %.lr.ph930.preheader
  %.1800928.unr = phi i64 [ %129, %.lr.ph930.preheader ], [ %153, %.lr.ph930.prol ]
  %.1812.in927.unr = phi i64 [ %.1786, %.lr.ph930.preheader ], [ %.1812.prol, %.lr.ph930.prol ]
  %158 = icmp eq i64 %152, %.1786
  br i1 %158, label %._crit_edge931, label %.lr.ph930

.lr.ph930:                                        ; preds = %.lr.ph930.prol.loopexit, %.lr.ph930
  %.1800928 = phi i64 [ %164, %.lr.ph930 ], [ %.1800928.unr, %.lr.ph930.prol.loopexit ]
  %.1812.in927 = phi i64 [ %.1812.1, %.lr.ph930 ], [ %.1812.in927.unr, %.lr.ph930.prol.loopexit ]
  %.1812 = add nsw i64 %.1812.in927, 1
  %159 = add i64 %.1800928, %.1812.in927
  %160 = getelementptr %struct.doublecomplex, ptr %146, i64 %.1812.in927
  %161 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %159
  %162 = load <2 x double>, ptr %160, align 8, !tbaa !14
  %163 = load <2 x double>, ptr %161, align 8, !tbaa !14
  store <2 x double> %163, ptr %160, align 8, !tbaa !14
  store <2 x double> %162, ptr %161, align 8, !tbaa !14
  %.1812.1 = add nsw i64 %.1812.in927, 2
  %164 = add i64 %159, %.1812
  %165 = getelementptr %struct.doublecomplex, ptr %146, i64 %.1812
  %166 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %164
  %167 = load <2 x double>, ptr %165, align 8, !tbaa !14
  %168 = load <2 x double>, ptr %166, align 8, !tbaa !14
  store <2 x double> %168, ptr %165, align 8, !tbaa !14
  store <2 x double> %167, ptr %166, align 8, !tbaa !14
  %.not838.not.1 = icmp slt i64 %.1812.1, %142
  br i1 %.not838.not.1, label %.lr.ph930, label %._crit_edge931, !llvm.loop !15

._crit_edge931:                                   ; preds = %.lr.ph930.prol.loopexit, %.lr.ph930, %145
  %169 = getelementptr %struct.doublecomplex, ptr %14, i64 %142
  %170 = getelementptr %struct.doublecomplex, ptr %169, i64 %spec.select
  %171 = load <2 x double>, ptr %170, align 8, !tbaa !14
  store <2 x double> %171, ptr %9, align 16, !tbaa !14
  %172 = load <2 x double>, ptr %130, align 8, !tbaa !14
  store <2 x double> %172, ptr %170, align 8, !tbaa !14
  store i64 %129, ptr %6, align 8, !tbaa !5
  store <2 x double> %171, ptr %130, align 8, !tbaa !14
  br i1 %cond.fr, label %173, label %.thread859

173:                                              ; preds = %._crit_edge931
  %gep1263 = getelementptr %struct.doublecomplex, ptr %invariant.gep1262, i64 %35
  %174 = load <2 x double>, ptr %gep1263, align 8, !tbaa !14
  store <2 x double> %174, ptr %9, align 16, !tbaa !14
  %175 = add i64 %.0807946, -1
  %176 = add i64 %175, %.1786
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %176
  %178 = load <2 x double>, ptr %177, align 8, !tbaa !14
  store <2 x double> %178, ptr %gep1263, align 8, !tbaa !14
  store i64 %176, ptr %6, align 8, !tbaa !5
  store <2 x double> %174, ptr %177, align 8, !tbaa !14
  br label %186

179:                                              ; preds = %128
  br i1 %cond.fr, label %186, label %.thread859

.thread859:                                       ; preds = %._crit_edge931, %124, %71, %179
  %.0803851858862 = phi i64 [ %.1786, %179 ], [ %.0809943, %124 ], [ %.0809943, %71 ], [ %.1786, %._crit_edge931 ]
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef nonnull %37) #5
  %180 = load <2 x double>, ptr %7, align 16, !tbaa !14
  store <2 x double> %180, ptr %10, align 16, !tbaa !14
  %181 = add nsw i64 %.0809943, -1
  store i64 %181, ptr %6, align 8, !tbaa !5
  %182 = fneg <2 x double> %180
  store <2 x double> %182, ptr %7, align 16, !tbaa !14
  %183 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.0807946
  %184 = call i32 @zspr_(ptr noundef %0, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %183, ptr noundef nonnull @c__1, ptr noundef nonnull %2) #5
  store i64 %181, ptr %6, align 8, !tbaa !5
  %185 = call i32 @f2c_zscal(ptr noundef nonnull %6, ptr noundef nonnull %10, ptr noundef nonnull %183, ptr noundef nonnull @c__1) #5
  br label %385

186:                                              ; preds = %173, %179
  %187 = icmp sgt i64 %.0809943, 2
  br i1 %187, label %.lr.ph941, label %.loopexit920

.lr.ph941:                                        ; preds = %186
  %188 = add nsw i64 %.0809943, -1
  %189 = mul nsw i64 %188, %.0809943
  %190 = lshr i64 %189, 1
  %191 = add nuw nsw i64 %190, %188
  store i64 %191, ptr %6, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %191
  %193 = load <2 x double>, ptr %192, align 8, !tbaa !14
  store <2 x double> %193, ptr %11, align 16, !tbaa !14
  %194 = add nsw i64 %.0809943, -2
  %195 = mul nsw i64 %194, %188
  %196 = lshr i64 %195, 1
  %197 = getelementptr %struct.doublecomplex, ptr %14, i64 %188
  %198 = getelementptr %struct.doublecomplex, ptr %197, i64 %196
  call void @z_div(ptr noundef nonnull %7, ptr noundef %198, ptr noundef nonnull %11) #5
  %199 = load double, ptr %7, align 16, !tbaa !9
  %200 = load double, ptr %32, align 8, !tbaa !16
  %201 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.0809943
  %202 = getelementptr inbounds %struct.doublecomplex, ptr %201, i64 %190
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull %202, ptr noundef nonnull %11) #5
  %203 = load double, ptr %7, align 16, !tbaa !9
  %204 = load double, ptr %32, align 8, !tbaa !16
  %205 = fneg double %204
  %206 = fmul double %200, %205
  %207 = call double @llvm.fmuladd.f64(double %203, double %199, double %206)
  %208 = fmul double %199, %204
  %209 = call double @llvm.fmuladd.f64(double %203, double %200, double %208)
  %210 = fadd double %207, -1.000000e+00
  store double %210, ptr %8, align 16, !tbaa !9
  store double %209, ptr %33, align 8, !tbaa !16
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef nonnull %8) #5
  %211 = load <2 x double>, ptr %7, align 16, !tbaa !14
  store <2 x double> %211, ptr %9, align 16, !tbaa !14
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull %9, ptr noundef nonnull %11) #5
  %212 = load <2 x double>, ptr %7, align 16, !tbaa !14
  store <2 x double> %212, ptr %11, align 16, !tbaa !14
  %213 = fneg double %200
  %214 = shl i64 %.0809943, 4
  %215 = shl nuw nsw i64 %196, 4
  %216 = add nsw i64 %.0809943, -3
  %217 = mul i64 %194, %216
  %218 = shl nuw nsw i64 %190, 4
  %219 = add i64 %214, -40
  %220 = shl i64 %.0809943, 4
  %221 = shl nuw nsw i64 %190, 4
  %scevgep1058 = getelementptr i8, ptr %scevgep1057, i64 %221
  %222 = add i64 %220, -40
  %223 = shl nuw nsw i64 %196, 4
  %scevgep1062 = getelementptr i8, ptr %scevgep1061, i64 %223
  %scevgep1069 = getelementptr i8, ptr %scevgep1068, i64 %221
  %224 = add i64 %220, -32
  %scevgep1073 = getelementptr i8, ptr %scevgep1072, i64 %223
  %225 = shufflevector <2 x double> %212, <2 x double> poison, <2 x i32> zeroinitializer
  %226 = insertelement <2 x double> poison, double %199, i64 0
  %227 = shufflevector <2 x double> %226, <2 x double> poison, <2 x i32> zeroinitializer
  %228 = insertelement <2 x double> poison, double %200, i64 0
  %229 = insertelement <2 x double> %228, double %213, i64 1
  %230 = insertelement <2 x double> poison, double %203, i64 0
  %231 = shufflevector <2 x double> %230, <2 x double> poison, <2 x i32> zeroinitializer
  %232 = insertelement <2 x double> poison, double %204, i64 0
  %233 = insertelement <2 x double> %232, double %205, i64 1
  %234 = shufflevector <2 x double> %212, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %235 = getelementptr i8, ptr %2, i64 %222
  %236 = getelementptr i8, ptr %235, i64 %221
  %237 = getelementptr i8, ptr %2, i64 %222
  %238 = getelementptr i8, ptr %237, i64 %223
  %239 = getelementptr i8, ptr %2, i64 %224
  %240 = getelementptr i8, ptr %239, i64 %221
  %241 = getelementptr i8, ptr %2, i64 %224
  %242 = getelementptr i8, ptr %241, i64 %223
  %invariant.gep1260 = getelementptr %struct.doublecomplex, ptr %14, i64 %190
  %243 = fneg <2 x double> %212
  %244 = shufflevector <2 x double> %234, <2 x double> %243, <2 x i32> <i32 0, i32 3>
  %245 = getelementptr i8, ptr %2, i64 %219
  %246 = getelementptr i8, ptr %245, i64 %218
  %247 = getelementptr i8, ptr %2, i64 %219
  %248 = getelementptr i8, ptr %247, i64 %215
  %gep1265 = getelementptr i8, ptr %invariant.gep1264, i64 %214
  %249 = getelementptr i8, ptr %gep1265, i64 %218
  %gep1267 = getelementptr i8, ptr %invariant.gep1266, i64 %214
  %250 = getelementptr i8, ptr %gep1267, i64 %215
  br label %251

251:                                              ; preds = %.lr.ph941, %.loopexit1197
  %scev.check.iv = phi i64 [ %217, %.lr.ph941 ], [ %scev.check.iv.next, %.loopexit1197 ]
  %indvar = phi i64 [ 0, %.lr.ph941 ], [ %indvar.next, %.loopexit1197 ]
  %.2813939 = phi i64 [ %194, %.lr.ph941 ], [ %282, %.loopexit1197 ]
  %252 = sub i64 %188, %indvar
  %253 = icmp ne i64 %.2813939, 0
  %umin1090.neg = sext i1 %253 to i64
  %254 = add i64 %252, %umin1090.neg
  %255 = shl i64 %indvar, 4
  %reass.sub1198 = sub i64 %255, %220
  %gep1257 = getelementptr i8, ptr %invariant.gep1256, i64 %reass.sub1198
  %.not1199 = icmp eq i64 %.2813939, 0
  %256 = select i1 %.not1199, i64 0, i64 16
  %257 = lshr i64 %scev.check.iv, 1
  %258 = add i64 %.2813939, %257
  %259 = shl i64 %258, 4
  %260 = add i64 %256, %259
  %scevgep1054 = getelementptr i8, ptr %gep1257, i64 %260
  %scevgep1056 = getelementptr i8, ptr %scevgep1055, i64 %259
  %scevgep1059 = getelementptr i8, ptr %scevgep1058, i64 %256
  %261 = mul i64 %indvar, -16
  %scevgep1060 = getelementptr i8, ptr %236, i64 %261
  %scevgep1063 = getelementptr i8, ptr %scevgep1062, i64 %256
  %scevgep1064 = getelementptr i8, ptr %238, i64 %261
  %reass.sub1200 = sub i64 %255, %220
  %gep1259 = getelementptr i8, ptr %invariant.gep1258, i64 %reass.sub1200
  %scevgep1066 = getelementptr i8, ptr %gep1259, i64 %260
  %scevgep1067 = getelementptr i8, ptr %2, i64 %259
  %scevgep1070 = getelementptr i8, ptr %scevgep1069, i64 %256
  %scevgep1071 = getelementptr i8, ptr %240, i64 %261
  %scevgep1074 = getelementptr i8, ptr %scevgep1073, i64 %256
  %scevgep1075 = getelementptr i8, ptr %242, i64 %261
  %262 = sub i64 %indvar, %.0809943
  %reass.sub1201 = shl i64 %262, 1
  %263 = add i64 %reass.sub1201, 6
  %264 = add nuw nsw i64 %.2813939, %196
  %265 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %264
  %gep1261 = getelementptr %struct.doublecomplex, ptr %invariant.gep1260, i64 %.2813939
  %266 = load <2 x double>, ptr %265, align 8, !tbaa !14
  %267 = load <2 x double>, ptr %gep1261, align 8, !tbaa !14
  %268 = fmul <2 x double> %266, %233
  %269 = shufflevector <2 x double> %268, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %270 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %231, <2 x double> %266, <2 x double> %269)
  %271 = fsub <2 x double> %270, %267
  %272 = fmul <2 x double> %271, %244
  %273 = shufflevector <2 x double> %272, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %274 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %225, <2 x double> %271, <2 x double> %273)
  %275 = fmul <2 x double> %267, %229
  %276 = shufflevector <2 x double> %275, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %277 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %227, <2 x double> %267, <2 x double> %276)
  %278 = fsub <2 x double> %277, %266
  %279 = fmul <2 x double> %278, %244
  %280 = shufflevector <2 x double> %279, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %281 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %225, <2 x double> %278, <2 x double> %280)
  %282 = add nsw i64 %.2813939, -1
  %283 = mul nsw i64 %282, %.2813939
  %284 = lshr i64 %283, 1
  %min.iters.check = icmp ult i64 %254, 10
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %251
  %285 = mul i64 %indvar, -16
  %scevgep1048 = getelementptr i8, ptr %246, i64 %285
  %286 = lshr i64 %scev.check.iv, 1
  %287 = add i64 %.2813939, %286
  %288 = shl i64 %287, 4
  %scevgep1044 = getelementptr i8, ptr %scevgep1043, i64 %288
  %scevgep1039 = getelementptr i8, ptr %248, i64 %285
  %scevgep1035 = getelementptr i8, ptr %249, i64 %285
  %scevgep1031 = getelementptr i8, ptr %scevgep1030, i64 %288
  %scevgep = getelementptr i8, ptr %250, i64 %285
  %289 = icmp ne i64 %.2813939, 0
  %umin.neg = sext i1 %289 to i64
  %290 = add i64 %.2813939, %umin.neg
  %mul.result.neg = mul i64 %290, -16
  %291 = getelementptr i8, ptr %scevgep, i64 %mul.result.neg
  %292 = icmp ugt ptr %291, %scevgep
  %mul.result1033.neg = mul i64 %290, -16
  %mul.overflow1034 = icmp ugt i64 %290, 1152921504606846975
  %293 = getelementptr i8, ptr %scevgep1031, i64 %mul.result1033.neg
  %294 = icmp ugt ptr %293, %scevgep1031
  %295 = or i1 %294, %mul.overflow1034
  %mul.result1037.neg = mul i64 %290, -16
  %296 = getelementptr i8, ptr %scevgep1035, i64 %mul.result1037.neg
  %297 = icmp ugt ptr %296, %scevgep1035
  %mul.result1041.neg = mul i64 %290, -16
  %298 = getelementptr i8, ptr %scevgep1039, i64 %mul.result1041.neg
  %299 = icmp ugt ptr %298, %scevgep1039
  %mul.result1046.neg = mul i64 %290, -16
  %300 = getelementptr i8, ptr %scevgep1044, i64 %mul.result1046.neg
  %301 = icmp ugt ptr %300, %scevgep1044
  %mul.result1050.neg = mul i64 %290, -16
  %302 = getelementptr i8, ptr %scevgep1048, i64 %mul.result1050.neg
  %303 = icmp ugt ptr %302, %scevgep1048
  %304 = or i1 %292, %295
  %305 = or i1 %297, %304
  %306 = or i1 %299, %305
  %307 = or i1 %301, %306
  %308 = or i1 %303, %307
  br i1 %308, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %bound0 = icmp ult ptr %scevgep1054, %scevgep1060
  %bound1 = icmp ult ptr %scevgep1059, %scevgep1056
  %found.conflict = and i1 %bound0, %bound1
  %bound01076 = icmp ult ptr %scevgep1054, %scevgep1064
  %bound11077 = icmp ult ptr %scevgep1063, %scevgep1056
  %found.conflict1078 = and i1 %bound01076, %bound11077
  %conflict.rdx = or i1 %found.conflict, %found.conflict1078
  %bound01079 = icmp ult ptr %scevgep1066, %scevgep1071
  %bound11080 = icmp ult ptr %scevgep1070, %scevgep1067
  %found.conflict1081 = and i1 %bound01079, %bound11080
  %conflict.rdx1082 = or i1 %conflict.rdx, %found.conflict1081
  %bound01083 = icmp ult ptr %scevgep1066, %scevgep1067
  %conflict.rdx1085 = or i1 %conflict.rdx1082, %bound01083
  %bound01086 = icmp ult ptr %scevgep1066, %scevgep1075
  %bound11087 = icmp ult ptr %scevgep1074, %scevgep1067
  %found.conflict1088 = and i1 %bound01086, %bound11087
  %conflict.rdx1089 = or i1 %conflict.rdx1085, %found.conflict1088
  br i1 %conflict.rdx1089, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %254, -2
  %ind.end = sub i64 %.2813939, %n.vec
  %broadcast.splat = shufflevector <2 x double> %281, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %broadcast.splat1092 = shufflevector <2 x double> %281, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splat1096 = shufflevector <2 x double> %274, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %broadcast.splat1098 = shufflevector <2 x double> %274, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = sub i64 %.2813939, %index
  %309 = add nuw nsw i64 %offset.idx, %284
  %310 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %offset.idx
  %gep1249 = getelementptr %struct.doublecomplex, ptr %invariant.gep1248, i64 %offset.idx
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %310, i64 %190
  %312 = getelementptr inbounds %struct.doublecomplex, ptr %gep1249, i64 %190
  %313 = load double, ptr %311, align 8, !tbaa !9, !alias.scope !17
  %314 = load double, ptr %312, align 8, !tbaa !9, !alias.scope !17
  %315 = insertelement <2 x double> poison, double %313, i64 0
  %316 = insertelement <2 x double> %315, double %314, i64 1
  %317 = getelementptr inbounds i8, ptr %311, i64 8
  %318 = getelementptr inbounds i8, ptr %312, i64 8
  %319 = load double, ptr %317, align 8, !tbaa !16, !alias.scope !20
  %320 = load double, ptr %318, align 8, !tbaa !16, !alias.scope !20
  %321 = insertelement <2 x double> poison, double %319, i64 0
  %322 = insertelement <2 x double> %321, double %320, i64 1
  %323 = fneg <2 x double> %322
  %324 = fmul <2 x double> %broadcast.splat, %323
  %325 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %316, <2 x double> %broadcast.splat1092, <2 x double> %324)
  %326 = fmul <2 x double> %broadcast.splat1092, %322
  %327 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %316, <2 x double> %broadcast.splat, <2 x double> %326)
  %gep1251 = getelementptr %struct.doublecomplex, ptr %invariant.gep1250, i64 %309
  %wide.vec = load <4 x double>, ptr %gep1251, align 8, !tbaa !14
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %reverse = shufflevector <2 x double> %strided.vec, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %strided.vec1093 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %reverse1094 = shufflevector <2 x double> %strided.vec1093, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %328 = fsub <2 x double> %reverse, %325
  %329 = fsub <2 x double> %reverse1094, %327
  %330 = getelementptr inbounds %struct.doublecomplex, ptr %310, i64 %196
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %gep1249, i64 %196
  %332 = load double, ptr %330, align 8, !tbaa !9, !alias.scope !22
  %333 = load double, ptr %331, align 8, !tbaa !9, !alias.scope !22
  %334 = insertelement <2 x double> poison, double %332, i64 0
  %335 = insertelement <2 x double> %334, double %333, i64 1
  %336 = getelementptr inbounds i8, ptr %330, i64 8
  %337 = getelementptr inbounds i8, ptr %331, i64 8
  %338 = load double, ptr %336, align 8, !tbaa !16, !alias.scope !24
  %339 = load double, ptr %337, align 8, !tbaa !16, !alias.scope !24
  %340 = insertelement <2 x double> poison, double %338, i64 0
  %341 = insertelement <2 x double> %340, double %339, i64 1
  %342 = fneg <2 x double> %341
  %343 = fmul <2 x double> %broadcast.splat1096, %342
  %344 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %335, <2 x double> %broadcast.splat1098, <2 x double> %343)
  %345 = fmul <2 x double> %broadcast.splat1098, %341
  %346 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %335, <2 x double> %broadcast.splat1096, <2 x double> %345)
  %347 = fsub <2 x double> %328, %344
  %348 = fsub <2 x double> %329, %346
  %gep1253 = getelementptr %struct.doublecomplex, ptr %invariant.gep1252, i64 %309, i32 1
  %interleaved.vec = shufflevector <2 x double> %347, <2 x double> %348, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
  store <4 x double> %interleaved.vec, ptr %gep1253, align 8, !tbaa !14
  %index.next = add nuw i64 %index, 2
  %349 = icmp eq i64 %index.next, %n.vec
  br i1 %349, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %254, %n.vec
  %350 = shufflevector <2 x double> %328, <2 x double> %329, <2 x i32> <i32 1, i32 3>
  %351 = shufflevector <2 x double> %347, <2 x double> %348, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %.loopexit1197, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %vector.scevcheck, %251
  %.0817933.ph = phi i64 [ %.2813939, %vector.memcheck ], [ %.2813939, %vector.scevcheck ], [ %.2813939, %251 ], [ %ind.end, %middle.block ]
  %invariant.gep1254 = getelementptr %struct.doublecomplex, ptr %14, i64 %284
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.0817933 = phi i64 [ %380, %scalar.ph ], [ %.0817933.ph, %scalar.ph.preheader ]
  %352 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.0817933
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %352, i64 %190
  %354 = load double, ptr %353, align 8, !tbaa !9
  %355 = getelementptr inbounds i8, ptr %353, i64 8
  %356 = load double, ptr %355, align 8, !tbaa !16
  %357 = fneg double %356
  %gep1255 = getelementptr %struct.doublecomplex, ptr %invariant.gep1254, i64 %.0817933
  %358 = insertelement <2 x double> poison, double %356, i64 0
  %359 = insertelement <2 x double> %358, double %357, i64 1
  %360 = fmul <2 x double> %281, %359
  %361 = shufflevector <2 x double> %360, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %362 = insertelement <2 x double> poison, double %354, i64 0
  %363 = shufflevector <2 x double> %362, <2 x double> poison, <2 x i32> zeroinitializer
  %364 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %363, <2 x double> %281, <2 x double> %361)
  %365 = load <2 x double>, ptr %gep1255, align 8, !tbaa !14
  %366 = fsub <2 x double> %365, %364
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %352, i64 %196
  %368 = load double, ptr %367, align 8, !tbaa !9
  %369 = getelementptr inbounds i8, ptr %367, i64 8
  %370 = load double, ptr %369, align 8, !tbaa !16
  %371 = fneg double %370
  %372 = insertelement <2 x double> poison, double %370, i64 0
  %373 = insertelement <2 x double> %372, double %371, i64 1
  %374 = fmul <2 x double> %274, %373
  %375 = shufflevector <2 x double> %374, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %376 = insertelement <2 x double> poison, double %368, i64 0
  %377 = shufflevector <2 x double> %376, <2 x double> poison, <2 x i32> zeroinitializer
  %378 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %377, <2 x double> %274, <2 x double> %375)
  %379 = fsub <2 x double> %366, %378
  store <2 x double> %379, ptr %gep1255, align 8, !tbaa !14
  %380 = add nsw i64 %.0817933, -1
  %381 = icmp ugt i64 %.0817933, 1
  br i1 %381, label %scalar.ph, label %.loopexit1197, !llvm.loop !29

.loopexit1197:                                    ; preds = %scalar.ph, %middle.block
  %382 = phi <2 x double> [ %350, %middle.block ], [ %366, %scalar.ph ]
  %383 = phi <2 x double> [ %351, %middle.block ], [ %379, %scalar.ph ]
  store <2 x double> %281, ptr %gep1261, align 8, !tbaa !14
  store <2 x double> %274, ptr %265, align 8, !tbaa !14
  %384 = icmp sgt i64 %.2813939, 1
  %indvar.next = add i64 %indvar, 1
  %scev.check.iv.next = add i64 %scev.check.iv, %263
  br i1 %384, label %251, label %..loopexit920_crit_edge, !llvm.loop !30

385:                                              ; preds = %.thread859, %70, %67
  %.1804.ph = phi i64 [ %.0809943, %67 ], [ %.0809943, %70 ], [ %.0803851858862, %.thread859 ]
  %386 = getelementptr inbounds i64, ptr %13, i64 %.0809943
  store i64 %.1804.ph, ptr %386, align 8, !tbaa !5
  br label %390

..loopexit920_crit_edge:                          ; preds = %.loopexit1197
  store i64 %264, ptr %6, align 8, !tbaa !5
  store <2 x double> %382, ptr %8, align 16, !tbaa !14
  store <2 x double> %383, ptr %7, align 16, !tbaa !14
  br label %.loopexit920

.loopexit920:                                     ; preds = %..loopexit920_crit_edge, %186
  %387 = sub nsw i64 0, %.1786
  %388 = getelementptr inbounds i64, ptr %13, i64 %.0809943
  store i64 %387, ptr %388, align 8, !tbaa !5
  %389 = getelementptr i8, ptr %388, i64 -8
  store i64 %387, ptr %389, align 8, !tbaa !5
  br label %390

390:                                              ; preds = %.loopexit920, %385
  %.1782.neg877 = phi i64 [ -2, %.loopexit920 ], [ -1, %385 ]
  %.1796873 = phi i64 [ %spec.select, %.loopexit920 ], [ %.0807946, %385 ]
  %391 = add nsw i64 %.1782.neg877, %.0809943
  %392 = sub nsw i64 %.1796873, %391
  %393 = icmp slt i64 %391, 1
  br i1 %393, label %.loopexit919, label %34

394:                                              ; preds = %25
  %395 = add nuw nsw i64 %19, 1
  %396 = mul nuw nsw i64 %395, %19
  %397 = lshr i64 %396, 1
  %invariant.gep = getelementptr i8, ptr %2, i64 16
  %398 = icmp eq i64 %19, 0
  br i1 %398, label %.loopexit919, label %.lr.ph983

.lr.ph983:                                        ; preds = %394
  %399 = getelementptr inbounds i8, ptr %7, i64 8
  %400 = getelementptr inbounds i8, ptr %8, i64 8
  %invariant.gep1268 = getelementptr i8, ptr %2, i64 24
  br label %401

401:                                              ; preds = %.lr.ph983, %778
  %.1810.neg981 = phi i64 [ -1, %.lr.ph983 ], [ %.1810.neg, %778 ]
  %.2787980 = phi i64 [ undef, %.lr.ph983 ], [ %.3788, %778 ]
  %.1808977 = phi i64 [ 1, %.lr.ph983 ], [ %783, %778 ]
  %.1810976 = phi i64 [ 1, %.lr.ph983 ], [ %780, %778 ]
  store i64 %.1808977, ptr %6, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.1808977
  %403 = load double, ptr %402, align 8, !tbaa !9
  %404 = fcmp oge double %403, 0.000000e+00
  %405 = fneg double %403
  %406 = select i1 %404, double %403, double %405
  %407 = call double @d_imag(ptr noundef nonnull %402) #5
  %408 = fcmp oge double %407, 0.000000e+00
  %409 = fneg double %407
  %410 = select i1 %408, double %407, double %409
  %411 = fadd double %406, %410
  %412 = load i64, ptr %1, align 8, !tbaa !5
  %413 = icmp slt i64 %.1810976, %412
  br i1 %413, label %414, label %431

414:                                              ; preds = %401
  %415 = sub nsw i64 %412, %.1810976
  store i64 %415, ptr %6, align 8, !tbaa !5
  %416 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1808977
  %417 = call i64 @f2c_izamax(ptr noundef nonnull %6, ptr noundef %416, ptr noundef nonnull @c__1) #5
  %418 = add nsw i64 %417, %.1810976
  %419 = add i64 %.1808977, %.1810.neg981
  %420 = add i64 %419, %418
  store i64 %420, ptr %6, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !9
  %423 = call double @d_imag(ptr noundef nonnull %421) #5
  %424 = insertelement <2 x double> poison, double %422, i64 0
  %425 = insertelement <2 x double> %424, double %423, i64 1
  %426 = fcmp oge <2 x double> %425, zeroinitializer
  %427 = fneg <2 x double> %425
  %428 = select <2 x i1> %426, <2 x double> %425, <2 x double> %427
  %shift1208 = shufflevector <2 x double> %428, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %429 = fadd <2 x double> %428, %shift1208
  %430 = extractelement <2 x double> %429, i64 0
  br label %431

431:                                              ; preds = %401, %414
  %.3788 = phi i64 [ %418, %414 ], [ %.2787980, %401 ]
  %.1779 = phi double [ %430, %414 ], [ 0.000000e+00, %401 ]
  %432 = sub i64 0, %.3788
  %433 = fcmp oge double %411, %.1779
  %434 = select i1 %433, double %411, double %.1779
  %435 = fcmp oeq double %434, 0.000000e+00
  br i1 %435, label %436, label %440

436:                                              ; preds = %431
  %437 = load i64, ptr %4, align 8, !tbaa !5
  %438 = icmp eq i64 %437, 0
  br i1 %438, label %439, label %778

439:                                              ; preds = %436
  store i64 %.1810976, ptr %4, align 8, !tbaa !5
  br label %778

440:                                              ; preds = %431
  %441 = fmul double %.1779, 0x3FE47E0F66AFED07
  %442 = fcmp ult double %411, %441
  br i1 %442, label %443, label %.thread894

443:                                              ; preds = %440
  %444 = add i64 %.1808977, %.1810.neg981
  %445 = add i64 %444, %.3788
  %446 = add nsw i64 %.3788, -1
  store i64 %446, ptr %6, align 8, !tbaa !5
  %.not830951.not = icmp slt i64 %.1810976, %.3788
  br i1 %.not830951.not, label %.lr.ph956, label %.._crit_edge957_crit_edge

.._crit_edge957_crit_edge:                        ; preds = %443
  %.pre = load i64, ptr %1, align 8, !tbaa !5
  br label %._crit_edge957

.lr.ph956:                                        ; preds = %443, %468
  %.3954 = phi double [ %.4, %468 ], [ 0.000000e+00, %443 ]
  %.2801953 = phi i64 [ %471, %468 ], [ %445, %443 ]
  %.3814952 = phi i64 [ %472, %468 ], [ %.1810976, %443 ]
  %447 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.2801953
  %448 = load double, ptr %447, align 8, !tbaa !9
  %449 = call double @d_imag(ptr noundef nonnull %447) #5
  %450 = insertelement <2 x double> poison, double %448, i64 0
  %451 = insertelement <2 x double> %450, double %449, i64 1
  %452 = fcmp oge <2 x double> %451, zeroinitializer
  %453 = fneg <2 x double> %451
  %454 = select <2 x i1> %452, <2 x double> %451, <2 x double> %453
  %shift1209 = shufflevector <2 x double> %454, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %455 = fadd <2 x double> %454, %shift1209
  %456 = extractelement <2 x double> %455, i64 0
  %457 = fcmp ogt double %456, %.3954
  br i1 %457, label %458, label %468

458:                                              ; preds = %.lr.ph956
  %459 = load double, ptr %447, align 8, !tbaa !9
  %460 = call double @d_imag(ptr noundef nonnull %447) #5
  %461 = insertelement <2 x double> poison, double %459, i64 0
  %462 = insertelement <2 x double> %461, double %460, i64 1
  %463 = fcmp oge <2 x double> %462, zeroinitializer
  %464 = fneg <2 x double> %462
  %465 = select <2 x i1> %463, <2 x double> %462, <2 x double> %464
  %shift1210 = shufflevector <2 x double> %465, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %466 = fadd <2 x double> %465, %shift1210
  %467 = extractelement <2 x double> %466, i64 0
  br label %468

468:                                              ; preds = %458, %.lr.ph956
  %.4 = phi double [ %467, %458 ], [ %.3954, %.lr.ph956 ]
  %469 = load i64, ptr %1, align 8, !tbaa !5
  %470 = sub i64 %.2801953, %.3814952
  %471 = add i64 %470, %469
  %472 = add nuw nsw i64 %.3814952, 1
  %473 = load i64, ptr %6, align 8, !tbaa !5
  %.not830.not = icmp slt i64 %.3814952, %473
  br i1 %.not830.not, label %.lr.ph956, label %._crit_edge957, !llvm.loop !31

._crit_edge957:                                   ; preds = %468, %.._crit_edge957_crit_edge
  %474 = phi i64 [ %.pre, %.._crit_edge957_crit_edge ], [ %469, %468 ]
  %.3.lcssa = phi double [ 0.000000e+00, %.._crit_edge957_crit_edge ], [ %.4, %468 ]
  %475 = sub nsw i64 %474, %.3788
  %476 = add nsw i64 %475, 1
  %477 = add nsw i64 %475, 2
  %478 = mul nsw i64 %476, %477
  %.neg = sdiv i64 %478, -2
  %479 = add nsw i64 %.neg, %397
  %480 = add nsw i64 %479, 1
  %481 = icmp slt i64 %.3788, %474
  br i1 %481, label %482, label %497

482:                                              ; preds = %._crit_edge957
  store i64 %475, ptr %6, align 8, !tbaa !5
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %479
  %483 = call i64 @f2c_izamax(ptr noundef nonnull %6, ptr noundef %gep, ptr noundef nonnull @c__1) #5
  %484 = add i64 %483, %480
  store i64 %484, ptr %6, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %484
  %486 = load double, ptr %485, align 8, !tbaa !9
  %487 = call double @d_imag(ptr noundef nonnull %485) #5
  %488 = insertelement <2 x double> poison, double %486, i64 0
  %489 = insertelement <2 x double> %488, double %487, i64 1
  %490 = fcmp oge <2 x double> %489, zeroinitializer
  %491 = fneg <2 x double> %489
  %492 = select <2 x i1> %490, <2 x double> %489, <2 x double> %491
  %shift1211 = shufflevector <2 x double> %492, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %493 = fadd <2 x double> %492, %shift1211
  %494 = extractelement <2 x double> %493, i64 0
  %495 = fcmp oge double %.3.lcssa, %494
  %496 = select i1 %495, double %.3.lcssa, double %494
  br label %497

497:                                              ; preds = %482, %._crit_edge957
  %.5 = phi double [ %496, %482 ], [ %.3.lcssa, %._crit_edge957 ]
  %498 = fdiv double %.1779, %.5
  %499 = fmul double %441, %498
  %500 = fcmp ult double %411, %499
  br i1 %500, label %501, label %.thread894

501:                                              ; preds = %497
  store i64 %480, ptr %6, align 8, !tbaa !5
  %502 = getelementptr %struct.doublecomplex, ptr %2, i64 %479
  %503 = load double, ptr %502, align 8, !tbaa !9
  %504 = call double @d_imag(ptr noundef nonnull %502) #5
  %505 = insertelement <2 x double> poison, double %503, i64 0
  %506 = insertelement <2 x double> %505, double %504, i64 1
  %507 = fcmp oge <2 x double> %506, zeroinitializer
  %508 = fneg <2 x double> %506
  %509 = select <2 x i1> %507, <2 x double> %506, <2 x double> %508
  %shift1212 = shufflevector <2 x double> %509, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %510 = fadd <2 x double> %509, %shift1212
  %511 = extractelement <2 x double> %510, i64 0
  %512 = fmul double %.5, 0x3FE47E0F66AFED07
  %513 = fcmp ult double %511, %512
  %.843 = select i1 %513, i64 2, i64 1
  %514 = add nuw nsw i64 %.843, %.1810976
  %515 = add nsw i64 %514, -1
  %.neg917 = sub nsw i64 1, %514
  br i1 %513, label %516, label %.thread999

516:                                              ; preds = %501
  %517 = load i64, ptr %1, align 8, !tbaa !5
  %518 = add nsw i64 %.1810.neg981, 1
  %519 = add i64 %518, %.1808977
  %520 = add i64 %519, %517
  %.not831 = icmp eq i64 %.3788, %515
  br i1 %.not831, label %568, label %521

.thread999:                                       ; preds = %501
  %.not8311001 = icmp eq i64 %.3788, %515
  br i1 %.not8311001, label %.thread894, label %521

521:                                              ; preds = %.thread999, %516
  %.27971002 = phi i64 [ %.1808977, %.thread999 ], [ %520, %516 ]
  %522 = load i64, ptr %1, align 8, !tbaa !5
  %523 = icmp slt i64 %.3788, %522
  br i1 %523, label %524, label %531

524:                                              ; preds = %521
  %525 = sub nsw i64 %522, %.3788
  store i64 %525, ptr %6, align 8, !tbaa !5
  %526 = getelementptr %struct.doublecomplex, ptr %2, i64 %.neg917
  %527 = getelementptr %struct.doublecomplex, ptr %526, i64 %.3788
  %528 = getelementptr %struct.doublecomplex, ptr %527, i64 %.27971002
  %529 = getelementptr %struct.doublecomplex, ptr %2, i64 %480
  %530 = call i32 @f2c_zswap(ptr noundef nonnull %6, ptr noundef %528, ptr noundef nonnull @c__1, ptr noundef %529, ptr noundef nonnull @c__1) #5
  br label %531

531:                                              ; preds = %524, %521
  %.not832.not959 = icmp slt i64 %514, %.3788
  br i1 %.not832.not959, label %.lr.ph963, label %._crit_edge964

.lr.ph963:                                        ; preds = %531
  %532 = add i64 %.neg917, %.3788
  %533 = add i64 %532, %.27971002
  %534 = load i64, ptr %1, align 8, !tbaa !5
  %535 = getelementptr %struct.doublecomplex, ptr %14, i64 %.27971002
  %536 = getelementptr %struct.doublecomplex, ptr %535, i64 %.neg917
  br label %537

537:                                              ; preds = %.lr.ph963, %537
  %.3802961 = phi i64 [ %533, %.lr.ph963 ], [ %540, %537 ]
  %.4815960 = phi i64 [ %514, %.lr.ph963 ], [ %545, %537 ]
  %538 = sub i64 %.3802961, %.4815960
  %539 = add i64 %538, %534
  %540 = add nsw i64 %539, 1
  %541 = getelementptr %struct.doublecomplex, ptr %536, i64 %.4815960
  %542 = getelementptr %struct.doublecomplex, ptr %2, i64 %539
  %543 = load <2 x double>, ptr %541, align 8, !tbaa !14
  %544 = load <2 x double>, ptr %542, align 8, !tbaa !14
  store <2 x double> %544, ptr %541, align 8, !tbaa !14
  store <2 x double> %543, ptr %542, align 8, !tbaa !14
  %545 = add nuw nsw i64 %.4815960, 1
  %.not832.not = icmp slt i64 %545, %.3788
  br i1 %.not832.not, label %537, label %._crit_edge964, !llvm.loop !32

._crit_edge964:                                   ; preds = %537, %531
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %.27971002
  %547 = load <2 x double>, ptr %546, align 8, !tbaa !14
  store <2 x double> %547, ptr %9, align 16, !tbaa !14
  %548 = load <2 x double>, ptr %502, align 8, !tbaa !14
  store <2 x double> %548, ptr %546, align 8, !tbaa !14
  store i64 %480, ptr %6, align 8, !tbaa !5
  store <2 x double> %547, ptr %502, align 8, !tbaa !14
  br i1 %513, label %549, label %.thread894

549:                                              ; preds = %._crit_edge964
  %550 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1808977
  %551 = load <2 x double>, ptr %550, align 8, !tbaa !14
  store <2 x double> %551, ptr %9, align 16, !tbaa !14
  %552 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %445
  %553 = load <2 x double>, ptr %552, align 8, !tbaa !14
  store <2 x double> %553, ptr %550, align 8, !tbaa !14
  store i64 %445, ptr %6, align 8, !tbaa !5
  store <2 x double> %551, ptr %552, align 8, !tbaa !14
  br label %568

.thread894:                                       ; preds = %.thread999, %._crit_edge964, %497, %440
  %.2805884892899 = phi i64 [ %.1810976, %497 ], [ %.1810976, %440 ], [ %.3788, %._crit_edge964 ], [ %.3788, %.thread999 ]
  %.2797893898 = phi i64 [ %.1808977, %497 ], [ %.1808977, %440 ], [ %.27971002, %._crit_edge964 ], [ %.1808977, %.thread999 ]
  %554 = load i64, ptr %1, align 8, !tbaa !5
  %555 = icmp slt i64 %.1810976, %554
  br i1 %555, label %556, label %778

556:                                              ; preds = %.thread894
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef nonnull %402) #5
  %557 = load <2 x double>, ptr %7, align 16, !tbaa !14
  store <2 x double> %557, ptr %10, align 16, !tbaa !14
  %558 = load i64, ptr %1, align 8, !tbaa !5
  %559 = sub nsw i64 %558, %.1810976
  store i64 %559, ptr %6, align 8, !tbaa !5
  %560 = fneg <2 x double> %557
  store <2 x double> %560, ptr %7, align 16, !tbaa !14
  %561 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1808977
  %562 = getelementptr %struct.doublecomplex, ptr %561, i64 %.1810.neg981
  %563 = getelementptr %struct.doublecomplex, ptr %562, i64 %558
  %564 = call i32 @zspr_(ptr noundef %0, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef %561, ptr noundef nonnull @c__1, ptr noundef %563) #5
  %565 = load i64, ptr %1, align 8, !tbaa !5
  %566 = sub nsw i64 %565, %.1810976
  store i64 %566, ptr %6, align 8, !tbaa !5
  %567 = call i32 @f2c_zscal(ptr noundef nonnull %6, ptr noundef nonnull %10, ptr noundef %561, ptr noundef nonnull @c__1) #5
  br label %778

568:                                              ; preds = %516, %549
  %.27971004 = phi i64 [ %.27971002, %549 ], [ %520, %516 ]
  %569 = load i64, ptr %1, align 8, !tbaa !5
  %570 = add nsw i64 %569, -1
  %571 = icmp slt i64 %.1810976, %570
  br i1 %571, label %572, label %.loopexit

572:                                              ; preds = %568
  %573 = add nuw nsw i64 %.1810976, 1
  %574 = add nsw i64 %.1810976, -1
  %575 = shl i64 %569, 1
  %576 = sub nsw i64 %575, %.1810976
  %577 = mul nsw i64 %576, %574
  %578 = sdiv i64 %577, 2
  %579 = add nsw i64 %573, %578
  store i64 %579, ptr %6, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.doublecomplex, ptr %14, i64 %579
  %581 = load <2 x double>, ptr %580, align 8, !tbaa !14
  store <2 x double> %581, ptr %12, align 16, !tbaa !14
  %582 = xor i64 %.1810976, -1
  %583 = add i64 %575, %582
  %584 = mul nsw i64 %583, %.1810976
  %585 = sdiv i64 %584, 2
  %586 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1810976
  %587 = getelementptr %struct.doublecomplex, ptr %586, i64 %585
  call void @z_div(ptr noundef nonnull %7, ptr noundef %587, ptr noundef nonnull %12) #5
  %588 = load double, ptr %7, align 16, !tbaa !9
  %589 = load double, ptr %399, align 8, !tbaa !16
  %590 = load i64, ptr %1, align 8, !tbaa !5
  %591 = shl i64 %590, 1
  %592 = sub nsw i64 %591, %.1810976
  %593 = mul nsw i64 %592, %574
  %594 = sdiv i64 %593, 2
  %595 = getelementptr %struct.doublecomplex, ptr %14, i64 %.1810976
  %596 = getelementptr %struct.doublecomplex, ptr %595, i64 %594
  call void @z_div(ptr noundef nonnull %7, ptr noundef %596, ptr noundef nonnull %12) #5
  %597 = load double, ptr %7, align 16, !tbaa !9
  %598 = load double, ptr %399, align 8, !tbaa !16
  %599 = fneg double %589
  %600 = fmul double %598, %599
  %601 = call double @llvm.fmuladd.f64(double %588, double %597, double %600)
  %602 = fmul double %589, %597
  %603 = call double @llvm.fmuladd.f64(double %588, double %598, double %602)
  %604 = fadd double %601, -1.000000e+00
  store double %604, ptr %8, align 16, !tbaa !9
  store double %603, ptr %400, align 8, !tbaa !16
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef nonnull %8) #5
  %605 = load <2 x double>, ptr %7, align 16, !tbaa !14
  store <2 x double> %605, ptr %9, align 16, !tbaa !14
  call void @z_div(ptr noundef nonnull %7, ptr noundef nonnull %9, ptr noundef nonnull %12) #5
  %606 = load <2 x double>, ptr %7, align 16, !tbaa !14
  store <2 x double> %606, ptr %12, align 16, !tbaa !14
  %607 = load i64, ptr %1, align 8, !tbaa !5
  store i64 %607, ptr %6, align 8, !tbaa !5
  %608 = add nuw nsw i64 %.1810976, 2
  %.not833972 = icmp sgt i64 %608, %607
  br i1 %.not833972, label %.loopexit, label %.lr.ph975

.lr.ph975:                                        ; preds = %572
  %609 = shl i64 %607, 1
  %610 = sub nsw i64 %609, %.1810976
  %611 = mul nsw i64 %610, %574
  %612 = sdiv i64 %611, 2
  %613 = add nsw i64 %610, -1
  %614 = mul nsw i64 %613, %.1810976
  %615 = sdiv i64 %614, 2
  %616 = fneg double %598
  %617 = add i64 %609, %582
  %618 = mul nsw i64 %617, %.1810976
  %619 = sdiv i64 %618, 2
  %620 = shl i64 %.1810976, 4
  %621 = add i64 %620, 16
  %622 = shl i64 %619, 4
  %623 = shl i64 %612, 4
  %624 = add i64 %620, 24
  %625 = shl i64 %.1810976, 4
  %626 = add i64 %625, 16
  %627 = add i64 %625, 24
  %628 = shl i64 %612, 4
  %629 = shl i64 %619, 4
  %630 = add i64 %625, 32
  %631 = shufflevector <2 x double> %606, <2 x double> poison, <2 x i32> zeroinitializer
  %632 = insertelement <2 x double> poison, double %588, i64 0
  %633 = shufflevector <2 x double> %632, <2 x double> poison, <2 x i32> zeroinitializer
  %634 = insertelement <2 x double> poison, double %589, i64 0
  %635 = insertelement <2 x double> %634, double %599, i64 1
  %636 = insertelement <2 x double> poison, double %597, i64 0
  %637 = shufflevector <2 x double> %636, <2 x double> poison, <2 x i32> zeroinitializer
  %638 = insertelement <2 x double> poison, double %598, i64 0
  %639 = insertelement <2 x double> %638, double %616, i64 1
  %640 = shufflevector <2 x double> %606, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %641 = getelementptr i8, ptr %2, i64 %626
  %642 = getelementptr i8, ptr %2, i64 %627
  %643 = getelementptr i8, ptr %2, i64 %626
  %644 = getelementptr i8, ptr %643, i64 %628
  %645 = getelementptr i8, ptr %2, i64 %627
  %646 = getelementptr i8, ptr %645, i64 %628
  %647 = getelementptr i8, ptr %2, i64 %626
  %648 = getelementptr i8, ptr %647, i64 %629
  %gep1269 = getelementptr i8, ptr %invariant.gep1268, i64 %625
  %649 = getelementptr i8, ptr %gep1269, i64 %629
  %650 = getelementptr i8, ptr %2, i64 %630
  %651 = getelementptr i8, ptr %2, i64 %630
  %652 = getelementptr i8, ptr %651, i64 %628
  %653 = getelementptr i8, ptr %2, i64 %630
  %654 = getelementptr i8, ptr %653, i64 %629
  %655 = fneg <2 x double> %606
  %656 = shufflevector <2 x double> %640, <2 x double> %655, <2 x i32> <i32 0, i32 3>
  %657 = getelementptr i8, ptr %2, i64 %624
  %658 = getelementptr i8, ptr %657, i64 %623
  %659 = getelementptr i8, ptr %2, i64 %624
  %660 = getelementptr i8, ptr %2, i64 %624
  %661 = getelementptr i8, ptr %660, i64 %622
  %662 = getelementptr i8, ptr %2, i64 %621
  %663 = getelementptr i8, ptr %662, i64 %623
  %664 = getelementptr i8, ptr %2, i64 %621
  %665 = getelementptr i8, ptr %2, i64 %621
  %666 = getelementptr i8, ptr %665, i64 %622
  br label %667

667:                                              ; preds = %.lr.ph975, %.loopexit1196
  %indvar1102 = phi i64 [ 0, %.lr.ph975 ], [ %indvar.next1103, %.loopexit1196 ]
  %.5816973 = phi i64 [ %608, %.lr.ph975 ], [ %776, %.loopexit1196 ]
  %smax1164 = call i64 @llvm.smax.i64(i64 %607, i64 %.5816973)
  %668 = sub i64 %582, %indvar1102
  %669 = add i64 %smax1164, %668
  %670 = shl i64 %indvar1102, 4
  %scevgep1131 = getelementptr i8, ptr %641, i64 %670
  %scevgep1133 = getelementptr i8, ptr %642, i64 %670
  %smax1134 = call i64 @llvm.smax.i64(i64 %607, i64 %.5816973)
  %671 = add i64 %.1810976, %indvar1102
  %reass.sub1202 = sub i64 %smax1134, %671
  %672 = shl i64 %reass.sub1202, 4
  %673 = add i64 %672, -32
  %scevgep1136 = getelementptr i8, ptr %644, i64 %670
  %scevgep1137 = getelementptr i8, ptr %646, i64 %670
  %scevgep1138 = getelementptr i8, ptr %scevgep1137, i64 %673
  %scevgep1139 = getelementptr i8, ptr %648, i64 %670
  %scevgep1140 = getelementptr i8, ptr %649, i64 %670
  %scevgep1141 = getelementptr i8, ptr %scevgep1140, i64 %673
  %scevgep1143 = getelementptr i8, ptr %650, i64 %670
  %scevgep1145 = getelementptr i8, ptr %652, i64 %670
  %scevgep1146 = getelementptr i8, ptr %scevgep1145, i64 %673
  %scevgep1147 = getelementptr i8, ptr %654, i64 %670
  %scevgep1148 = getelementptr i8, ptr %scevgep1147, i64 %673
  %674 = getelementptr %struct.doublecomplex, ptr %14, i64 %.5816973
  %675 = getelementptr %struct.doublecomplex, ptr %674, i64 %612
  %676 = getelementptr %struct.doublecomplex, ptr %674, i64 %615
  %677 = load <2 x double>, ptr %675, align 8, !tbaa !14
  %678 = fmul <2 x double> %677, %635
  %679 = shufflevector <2 x double> %678, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %680 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %633, <2 x double> %677, <2 x double> %679)
  %681 = load <2 x double>, ptr %676, align 8, !tbaa !14
  %682 = fsub <2 x double> %680, %681
  %683 = fmul <2 x double> %682, %656
  %684 = shufflevector <2 x double> %683, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %685 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %631, <2 x double> %682, <2 x double> %684)
  %686 = fmul <2 x double> %681, %639
  %687 = shufflevector <2 x double> %686, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %688 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %637, <2 x double> %681, <2 x double> %687)
  %689 = fsub <2 x double> %688, %677
  %690 = fmul <2 x double> %689, %656
  %691 = shufflevector <2 x double> %690, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %692 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %631, <2 x double> %689, <2 x double> %691)
  %693 = add nsw i64 %.5816973, -1
  %694 = sub nsw i64 %609, %.5816973
  %695 = mul nsw i64 %693, %694
  %696 = sdiv i64 %695, 2
  %min.iters.check1167 = icmp ult i64 %669, 10
  br i1 %min.iters.check1167, label %scalar.ph1166.preheader, label %vector.scevcheck1101

vector.scevcheck1101:                             ; preds = %667
  %697 = shl i64 %indvar1102, 4
  %scevgep1126 = getelementptr i8, ptr %658, i64 %697
  %scevgep1121 = getelementptr i8, ptr %659, i64 %697
  %scevgep1117 = getelementptr i8, ptr %661, i64 %697
  %scevgep1113 = getelementptr i8, ptr %663, i64 %697
  %scevgep1108 = getelementptr i8, ptr %664, i64 %697
  %scevgep1104 = getelementptr i8, ptr %666, i64 %697
  %smax = call i64 @llvm.smax.i64(i64 %607, i64 %.5816973)
  %698 = add i64 %.1810976, %indvar1102
  %reass.sub1203 = sub i64 %smax, %698
  %699 = add i64 %reass.sub1203, -2
  %mul.result1106 = shl i64 %699, 4
  %700 = getelementptr i8, ptr %scevgep1104, i64 %mul.result1106
  %701 = icmp ult ptr %700, %scevgep1104
  %702 = shl i64 %696, 4
  %scevgep1109 = getelementptr i8, ptr %scevgep1108, i64 %702
  %mul.result1111 = shl i64 %699, 4
  %mul.overflow1112 = icmp ugt i64 %699, 1152921504606846975
  %703 = getelementptr i8, ptr %scevgep1109, i64 %mul.result1111
  %704 = icmp ult ptr %703, %scevgep1109
  %705 = or i1 %704, %mul.overflow1112
  %mul.result1115 = shl i64 %699, 4
  %706 = getelementptr i8, ptr %scevgep1113, i64 %mul.result1115
  %707 = icmp ult ptr %706, %scevgep1113
  %mul.result1119 = shl i64 %699, 4
  %708 = getelementptr i8, ptr %scevgep1117, i64 %mul.result1119
  %709 = icmp ult ptr %708, %scevgep1117
  %scevgep1122 = getelementptr i8, ptr %scevgep1121, i64 %702
  %mul.result1124 = shl i64 %699, 4
  %710 = getelementptr i8, ptr %scevgep1122, i64 %mul.result1124
  %711 = icmp ult ptr %710, %scevgep1122
  %mul.result1128 = shl i64 %699, 4
  %712 = getelementptr i8, ptr %scevgep1126, i64 %mul.result1128
  %713 = icmp ult ptr %712, %scevgep1126
  %714 = or i1 %701, %705
  %715 = or i1 %707, %714
  %716 = or i1 %709, %715
  %717 = or i1 %711, %716
  %718 = or i1 %713, %717
  br i1 %718, label %scalar.ph1166.preheader, label %vector.memcheck1130

vector.memcheck1130:                              ; preds = %vector.scevcheck1101
  %719 = shl i64 %696, 4
  %scevgep1132 = getelementptr i8, ptr %scevgep1131, i64 %719
  %720 = add i64 %719, %673
  %scevgep1135 = getelementptr i8, ptr %scevgep1133, i64 %720
  %scevgep1142 = getelementptr i8, ptr %scevgep1133, i64 %719
  %scevgep1144 = getelementptr i8, ptr %scevgep1143, i64 %720
  %bound01149 = icmp ult ptr %scevgep1132, %scevgep1138
  %bound11150 = icmp ult ptr %scevgep1136, %scevgep1135
  %found.conflict1151 = and i1 %bound01149, %bound11150
  %bound01152 = icmp ult ptr %scevgep1132, %scevgep1141
  %bound11153 = icmp ult ptr %scevgep1139, %scevgep1135
  %found.conflict1154 = and i1 %bound01152, %bound11153
  %conflict.rdx1155 = or i1 %found.conflict1151, %found.conflict1154
  %bound01156 = icmp ult ptr %scevgep1142, %scevgep1146
  %bound11157 = icmp ult ptr %scevgep1137, %scevgep1144
  %found.conflict1158 = and i1 %bound01156, %bound11157
  %conflict.rdx1159 = or i1 %conflict.rdx1155, %found.conflict1158
  %bound01160 = icmp ult ptr %scevgep1142, %scevgep1148
  %bound11161 = icmp ult ptr %scevgep1140, %scevgep1144
  %found.conflict1162 = and i1 %bound01160, %bound11161
  %conflict.rdx1163 = or i1 %conflict.rdx1159, %found.conflict1162
  br i1 %conflict.rdx1163, label %scalar.ph1166.preheader, label %vector.ph1168

vector.ph1168:                                    ; preds = %vector.memcheck1130
  %n.vec1170 = and i64 %669, -2
  %ind.end1171 = add i64 %.5816973, %n.vec1170
  %broadcast.splat1180 = shufflevector <2 x double> %685, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %broadcast.splat1182 = shufflevector <2 x double> %685, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splat1190 = shufflevector <2 x double> %692, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %broadcast.splat1192 = shufflevector <2 x double> %692, <2 x double> poison, <2 x i32> zeroinitializer
  %721 = getelementptr %struct.doublecomplex, ptr %14, i64 %.5816973
  br label %vector.body1173

vector.body1173:                                  ; preds = %vector.body1173, %vector.ph1168
  %index1174 = phi i64 [ 0, %vector.ph1168 ], [ %index.next1194, %vector.body1173 ]
  %722 = getelementptr %struct.doublecomplex, ptr %721, i64 %index1174
  %723 = getelementptr %struct.doublecomplex, ptr %722, i64 %612
  %wide.vec1176 = load <4 x double>, ptr %723, align 8, !tbaa !14
  %strided.vec1177 = shufflevector <4 x double> %wide.vec1176, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1178 = shufflevector <4 x double> %wide.vec1176, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %724 = fneg <2 x double> %strided.vec1178
  %725 = fmul <2 x double> %broadcast.splat1180, %724
  %726 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %strided.vec1177, <2 x double> %broadcast.splat1182, <2 x double> %725)
  %727 = fmul <2 x double> %broadcast.splat1182, %strided.vec1178
  %728 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %strided.vec1177, <2 x double> %broadcast.splat1180, <2 x double> %727)
  %729 = getelementptr %struct.doublecomplex, ptr %722, i64 %696
  %wide.vec1183 = load <4 x double>, ptr %729, align 8, !tbaa !14
  %strided.vec1184 = shufflevector <4 x double> %wide.vec1183, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1185 = shufflevector <4 x double> %wide.vec1183, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %730 = fsub <2 x double> %strided.vec1184, %726
  %731 = fsub <2 x double> %strided.vec1185, %728
  %732 = getelementptr %struct.doublecomplex, ptr %722, i64 %619
  %wide.vec1186 = load <4 x double>, ptr %732, align 8, !tbaa !14
  %strided.vec1187 = shufflevector <4 x double> %wide.vec1186, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1188 = shufflevector <4 x double> %wide.vec1186, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %733 = fneg <2 x double> %strided.vec1188
  %734 = fmul <2 x double> %broadcast.splat1190, %733
  %735 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %strided.vec1187, <2 x double> %broadcast.splat1192, <2 x double> %734)
  %736 = fmul <2 x double> %broadcast.splat1192, %strided.vec1188
  %737 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %strided.vec1187, <2 x double> %broadcast.splat1190, <2 x double> %736)
  %738 = fsub <2 x double> %730, %735
  %739 = fsub <2 x double> %731, %737
  %interleaved.vec1193 = shufflevector <2 x double> %738, <2 x double> %739, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec1193, ptr %729, align 8, !tbaa !14
  %index.next1194 = add nuw i64 %index1174, 2
  %740 = icmp eq i64 %index.next1194, %n.vec1170
  br i1 %740, label %middle.block1165, label %vector.body1173, !llvm.loop !33

middle.block1165:                                 ; preds = %vector.body1173
  %cmp.n1195 = icmp eq i64 %669, %n.vec1170
  %741 = shufflevector <2 x double> %730, <2 x double> %731, <2 x i32> <i32 1, i32 3>
  %742 = shufflevector <2 x double> %738, <2 x double> %739, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n1195, label %.loopexit1196, label %scalar.ph1166.preheader

scalar.ph1166.preheader:                          ; preds = %middle.block1165, %vector.memcheck1130, %vector.scevcheck1101, %667
  %.1818967.ph = phi i64 [ %.5816973, %vector.memcheck1130 ], [ %.5816973, %vector.scevcheck1101 ], [ %.5816973, %667 ], [ %ind.end1171, %middle.block1165 ]
  br label %scalar.ph1166

scalar.ph1166:                                    ; preds = %scalar.ph1166.preheader, %scalar.ph1166
  %.1818967 = phi i64 [ %772, %scalar.ph1166 ], [ %.1818967.ph, %scalar.ph1166.preheader ]
  %743 = getelementptr %struct.doublecomplex, ptr %14, i64 %.1818967
  %744 = getelementptr %struct.doublecomplex, ptr %743, i64 %612
  %745 = load double, ptr %744, align 8, !tbaa !9
  %746 = getelementptr inbounds i8, ptr %744, i64 8
  %747 = load double, ptr %746, align 8, !tbaa !16
  %748 = fneg double %747
  %749 = getelementptr %struct.doublecomplex, ptr %743, i64 %696
  %750 = insertelement <2 x double> poison, double %747, i64 0
  %751 = insertelement <2 x double> %750, double %748, i64 1
  %752 = fmul <2 x double> %685, %751
  %753 = shufflevector <2 x double> %752, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %754 = insertelement <2 x double> poison, double %745, i64 0
  %755 = shufflevector <2 x double> %754, <2 x double> poison, <2 x i32> zeroinitializer
  %756 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %755, <2 x double> %685, <2 x double> %753)
  %757 = load <2 x double>, ptr %749, align 8, !tbaa !14
  %758 = fsub <2 x double> %757, %756
  %759 = getelementptr %struct.doublecomplex, ptr %743, i64 %619
  %760 = load double, ptr %759, align 8, !tbaa !9
  %761 = getelementptr inbounds i8, ptr %759, i64 8
  %762 = load double, ptr %761, align 8, !tbaa !16
  %763 = fneg double %762
  %764 = insertelement <2 x double> poison, double %762, i64 0
  %765 = insertelement <2 x double> %764, double %763, i64 1
  %766 = fmul <2 x double> %692, %765
  %767 = shufflevector <2 x double> %766, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %768 = insertelement <2 x double> poison, double %760, i64 0
  %769 = shufflevector <2 x double> %768, <2 x double> poison, <2 x i32> zeroinitializer
  %770 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %769, <2 x double> %692, <2 x double> %767)
  %771 = fsub <2 x double> %758, %770
  store <2 x double> %771, ptr %749, align 8, !tbaa !14
  %772 = add nuw nsw i64 %.1818967, 1
  %.not834.not = icmp slt i64 %.1818967, %607
  br i1 %.not834.not, label %scalar.ph1166, label %.loopexit1196, !llvm.loop !34

.loopexit1196:                                    ; preds = %scalar.ph1166, %middle.block1165
  %773 = phi <2 x double> [ %741, %middle.block1165 ], [ %758, %scalar.ph1166 ]
  %774 = phi <2 x double> [ %742, %middle.block1165 ], [ %771, %scalar.ph1166 ]
  store <2 x double> %685, ptr %675, align 8, !tbaa !14
  %775 = getelementptr %struct.doublecomplex, ptr %674, i64 %619
  store <2 x double> %692, ptr %775, align 8, !tbaa !14
  %776 = add i64 %.5816973, 1
  %exitcond.not = icmp eq i64 %.5816973, %607
  %indvar.next1103 = add i64 %indvar1102, 1
  br i1 %exitcond.not, label %..loopexit_crit_edge, label %667, !llvm.loop !35

..loopexit_crit_edge:                             ; preds = %.loopexit1196
  store <2 x double> %773, ptr %8, align 16, !tbaa !14
  store <2 x double> %774, ptr %7, align 16, !tbaa !14
  br label %.loopexit

.loopexit:                                        ; preds = %572, %..loopexit_crit_edge, %568
  %777 = getelementptr inbounds i64, ptr %13, i64 %.1810976
  store i64 %432, ptr %777, align 8, !tbaa !5
  br label %778

778:                                              ; preds = %436, %439, %.thread894, %556, %.loopexit
  %.sink1019 = phi ptr [ %3, %.loopexit ], [ %13, %556 ], [ %13, %.thread894 ], [ %13, %439 ], [ %13, %436 ]
  %.sink1017 = phi i64 [ %432, %.loopexit ], [ %.2805884892899, %556 ], [ %.2805884892899, %.thread894 ], [ %.1810976, %439 ], [ %.1810976, %436 ]
  %.3784915 = phi i64 [ 2, %.loopexit ], [ 1, %556 ], [ 1, %.thread894 ], [ 1, %439 ], [ 1, %436 ]
  %.3798911 = phi i64 [ %.27971004, %.loopexit ], [ %.2797893898, %556 ], [ %.2797893898, %.thread894 ], [ %.1808977, %439 ], [ %.1808977, %436 ]
  %779 = getelementptr i64, ptr %.sink1019, i64 %.1810976
  store i64 %.sink1017, ptr %779, align 8, !tbaa !5
  %780 = add nuw nsw i64 %.3784915, %.1810976
  %781 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub984 = sub i64 %.3798911, %780
  %782 = add i64 %reass.sub984, 2
  %783 = add i64 %782, %781
  %.1810.neg = sub nsw i64 0, %780
  %784 = icmp sgt i64 %780, %781
  br i1 %784, label %.loopexit919, label %401

.loopexit919:                                     ; preds = %390, %778, %26, %394, %.thread
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  ret i32 0
}

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

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

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

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

declare i32 @f2c_zswap(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

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

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

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

; 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>) #4

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!11, !11, i64 0}
!15 = distinct !{!15, !13}
!16 = !{!10, !11, i64 8}
!17 = !{!18}
!18 = distinct !{!18, !19}
!19 = distinct !{!19, !"LVerDomain"}
!20 = !{!21}
!21 = distinct !{!21, !19}
!22 = !{!23}
!23 = distinct !{!23, !19}
!24 = !{!25}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !13, !27, !28}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !13, !27}
!30 = distinct !{!30, !13}
!31 = distinct !{!31, !13}
!32 = distinct !{!32, !13}
!33 = distinct !{!33, !13, !27, !28}
!34 = distinct !{!34, !13, !27}
!35 = distinct !{!35, !13}


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