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

; 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

; Function Attrs: nounwind uwtable
define dso_local i32 @zhptrf_(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 %struct.doublecomplex, align 8
  %27 = alloca %struct.doublecomplex, align 8
  %28 = alloca double, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca %struct.doublecomplex, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca %struct.doublecomplex, align 8
  %36 = alloca double, align 8
  %37 = alloca %struct.doublecomplex, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca %struct.doublecomplex, align 8
  %42 = alloca i64, align 8
  %43 = alloca double, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca %struct.doublecomplex, align 8
  %48 = alloca %struct.doublecomplex, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca double, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = 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 16, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 8, 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 16, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 8, 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 16, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 16, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  %58 = load ptr, ptr %10, align 8, !tbaa !5
  %59 = getelementptr inbounds i64, ptr %58, i32 -1
  store ptr %59, ptr %10, align 8, !tbaa !5
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.doublecomplex, ptr %60, i32 -1
  store ptr %61, ptr %9, align 8, !tbaa !5
  %62 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 0, ptr %62, align 8, !tbaa !9
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = call i64 @lsame_(ptr noundef %63, ptr noundef @.str)
  store i64 %64, ptr %53, align 8, !tbaa !9
  %65 = load i64, ptr %53, align 8, !tbaa !9
  %66 = icmp ne i64 %65, 0
  br i1 %66, label %73, label %67

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

71:                                               ; preds = %67
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 -1, ptr %72, align 8, !tbaa !9
  br label %80

73:                                               ; preds = %67, %5
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  %75 = load i64, ptr %74, align 8, !tbaa !9
  %76 = icmp slt i64 %75, 0
  br i1 %76, label %77, label %79

77:                                               ; preds = %73
  %78 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 -2, ptr %78, align 8, !tbaa !9
  br label %79

79:                                               ; preds = %77, %73
  br label %80

80:                                               ; preds = %79, %71
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = load i64, ptr %81, align 8, !tbaa !9
  %83 = icmp ne i64 %82, 0
  br i1 %83, label %84, label %89

84:                                               ; preds = %80
  %85 = load ptr, ptr %11, align 8, !tbaa !5
  %86 = load i64, ptr %85, align 8, !tbaa !9
  %87 = sub nsw i64 0, %86
  store i64 %87, ptr %12, align 8, !tbaa !9
  %88 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %12)
  store i32 0, ptr %6, align 4
  store i32 1, ptr %57, align 4
  br label %2561

89:                                               ; preds = %80
  %90 = call double @sqrt(double noundef 1.700000e+01) #5
  %91 = fadd double %90, 1.000000e+00
  %92 = fdiv double %91, 8.000000e+00
  store double %92, ptr %51, align 8, !tbaa !11
  %93 = load i64, ptr %53, align 8, !tbaa !9
  %94 = icmp ne i64 %93, 0
  br i1 %94, label %95, label %1276

95:                                               ; preds = %89
  %96 = load ptr, ptr %8, align 8, !tbaa !5
  %97 = load i64, ptr %96, align 8, !tbaa !9
  store i64 %97, ptr %31, align 8, !tbaa !9
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = load i64, ptr %98, align 8, !tbaa !9
  %100 = sub nsw i64 %99, 1
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = load i64, ptr %101, align 8, !tbaa !9
  %103 = mul nsw i64 %100, %102
  %104 = sdiv i64 %103, 2
  %105 = add nsw i64 %104, 1
  store i64 %105, ptr %38, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %1269, %95
  %107 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %107, ptr %44, align 8, !tbaa !9
  %108 = load i64, ptr %31, align 8, !tbaa !9
  %109 = icmp slt i64 %108, 1
  br i1 %109, label %110, label %111

110:                                              ; preds = %106
  br label %2560

111:                                              ; preds = %106
  store i64 1, ptr %52, align 8, !tbaa !9
  %112 = load i64, ptr %38, align 8, !tbaa !9
  %113 = load i64, ptr %31, align 8, !tbaa !9
  %114 = add nsw i64 %112, %113
  %115 = sub nsw i64 %114, 1
  store i64 %115, ptr %12, align 8, !tbaa !9
  %116 = load ptr, ptr %9, align 8, !tbaa !5
  %117 = load i64, ptr %12, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.doublecomplex, ptr %116, i64 %117
  %119 = getelementptr inbounds %struct.doublecomplex, ptr %118, i32 0, i32 0
  %120 = load double, ptr %119, align 8, !tbaa !13
  store double %120, ptr %18, align 8, !tbaa !11
  %121 = load double, ptr %18, align 8, !tbaa !11
  %122 = fcmp oge double %121, 0.000000e+00
  br i1 %122, label %123, label %125

123:                                              ; preds = %111
  %124 = load double, ptr %18, align 8, !tbaa !11
  br label %128

125:                                              ; preds = %111
  %126 = load double, ptr %18, align 8, !tbaa !11
  %127 = fneg double %126
  br label %128

128:                                              ; preds = %125, %123
  %129 = phi double [ %124, %123 ], [ %127, %125 ]
  store double %129, ptr %54, align 8, !tbaa !11
  %130 = load i64, ptr %31, align 8, !tbaa !9
  %131 = icmp sgt i64 %130, 1
  br i1 %131, label %132, label %174

132:                                              ; preds = %128
  %133 = load i64, ptr %31, align 8, !tbaa !9
  %134 = sub nsw i64 %133, 1
  store i64 %134, ptr %12, align 8, !tbaa !9
  %135 = load ptr, ptr %9, align 8, !tbaa !5
  %136 = load i64, ptr %38, align 8, !tbaa !9
  %137 = getelementptr inbounds %struct.doublecomplex, ptr %135, i64 %136
  %138 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %137, ptr noundef @c__1)
  store i64 %138, ptr %49, align 8, !tbaa !9
  %139 = load i64, ptr %38, align 8, !tbaa !9
  %140 = load i64, ptr %49, align 8, !tbaa !9
  %141 = add nsw i64 %139, %140
  %142 = sub nsw i64 %141, 1
  store i64 %142, ptr %12, align 8, !tbaa !9
  %143 = load ptr, ptr %9, align 8, !tbaa !5
  %144 = load i64, ptr %12, align 8, !tbaa !9
  %145 = getelementptr inbounds %struct.doublecomplex, ptr %143, i64 %144
  %146 = getelementptr inbounds %struct.doublecomplex, ptr %145, i32 0, i32 0
  %147 = load double, ptr %146, align 8, !tbaa !13
  store double %147, ptr %18, align 8, !tbaa !11
  %148 = load double, ptr %18, align 8, !tbaa !11
  %149 = fcmp oge double %148, 0.000000e+00
  br i1 %149, label %150, label %152

150:                                              ; preds = %132
  %151 = load double, ptr %18, align 8, !tbaa !11
  br label %155

152:                                              ; preds = %132
  %153 = load double, ptr %18, align 8, !tbaa !11
  %154 = fneg double %153
  br label %155

155:                                              ; preds = %152, %150
  %156 = phi double [ %151, %150 ], [ %154, %152 ]
  %157 = load ptr, ptr %9, align 8, !tbaa !5
  %158 = load i64, ptr %38, align 8, !tbaa !9
  %159 = load i64, ptr %49, align 8, !tbaa !9
  %160 = add nsw i64 %158, %159
  %161 = sub nsw i64 %160, 1
  %162 = getelementptr inbounds %struct.doublecomplex, ptr %157, i64 %161
  %163 = call double @d_imag(ptr noundef %162)
  store double %163, ptr %19, align 8, !tbaa !11
  %164 = load double, ptr %19, align 8, !tbaa !11
  %165 = fcmp oge double %164, 0.000000e+00
  br i1 %165, label %166, label %168

166:                                              ; preds = %155
  %167 = load double, ptr %19, align 8, !tbaa !11
  br label %171

168:                                              ; preds = %155
  %169 = load double, ptr %19, align 8, !tbaa !11
  %170 = fneg double %169
  br label %171

171:                                              ; preds = %168, %166
  %172 = phi double [ %167, %166 ], [ %170, %168 ]
  %173 = fadd double %156, %172
  store double %173, ptr %55, align 8, !tbaa !11
  br label %175

174:                                              ; preds = %128
  store double 0.000000e+00, ptr %55, align 8, !tbaa !11
  br label %175

175:                                              ; preds = %174, %171
  %176 = load double, ptr %54, align 8, !tbaa !11
  %177 = load double, ptr %55, align 8, !tbaa !11
  %178 = fcmp oge double %176, %177
  br i1 %178, label %179, label %181

179:                                              ; preds = %175
  %180 = load double, ptr %54, align 8, !tbaa !11
  br label %183

181:                                              ; preds = %175
  %182 = load double, ptr %55, align 8, !tbaa !11
  br label %183

183:                                              ; preds = %181, %179
  %184 = phi double [ %180, %179 ], [ %182, %181 ]
  %185 = fcmp oeq double %184, 0.000000e+00
  br i1 %185, label %186, label %217

186:                                              ; preds = %183
  %187 = load ptr, ptr %11, align 8, !tbaa !5
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = icmp eq i64 %188, 0
  br i1 %189, label %190, label %193

190:                                              ; preds = %186
  %191 = load i64, ptr %31, align 8, !tbaa !9
  %192 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 %191, ptr %192, align 8, !tbaa !9
  br label %193

193:                                              ; preds = %190, %186
  %194 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %194, ptr %40, align 8, !tbaa !9
  %195 = load i64, ptr %38, align 8, !tbaa !9
  %196 = load i64, ptr %31, align 8, !tbaa !9
  %197 = add nsw i64 %195, %196
  %198 = sub nsw i64 %197, 1
  store i64 %198, ptr %12, align 8, !tbaa !9
  %199 = load i64, ptr %38, align 8, !tbaa !9
  %200 = load i64, ptr %31, align 8, !tbaa !9
  %201 = add nsw i64 %199, %200
  %202 = sub nsw i64 %201, 1
  store i64 %202, ptr %13, align 8, !tbaa !9
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = load i64, ptr %13, align 8, !tbaa !9
  %205 = getelementptr inbounds %struct.doublecomplex, ptr %203, i64 %204
  %206 = getelementptr inbounds %struct.doublecomplex, ptr %205, i32 0, i32 0
  %207 = load double, ptr %206, align 8, !tbaa !13
  store double %207, ptr %18, align 8, !tbaa !11
  %208 = load double, ptr %18, align 8, !tbaa !11
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = load i64, ptr %12, align 8, !tbaa !9
  %211 = getelementptr inbounds %struct.doublecomplex, ptr %209, i64 %210
  %212 = getelementptr inbounds %struct.doublecomplex, ptr %211, i32 0, i32 0
  store double %208, ptr %212, align 8, !tbaa !13
  %213 = load ptr, ptr %9, align 8, !tbaa !5
  %214 = load i64, ptr %12, align 8, !tbaa !9
  %215 = getelementptr inbounds %struct.doublecomplex, ptr %213, i64 %214
  %216 = getelementptr inbounds %struct.doublecomplex, ptr %215, i32 0, i32 1
  store double 0.000000e+00, ptr %216, align 8, !tbaa !15
  br label %1249

217:                                              ; preds = %183
  %218 = load double, ptr %54, align 8, !tbaa !11
  %219 = load double, ptr %51, align 8, !tbaa !11
  %220 = load double, ptr %55, align 8, !tbaa !11
  %221 = fmul double %219, %220
  %222 = fcmp oge double %218, %221
  br i1 %222, label %223, label %225

223:                                              ; preds = %217
  %224 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %224, ptr %40, align 8, !tbaa !9
  br label %413

225:                                              ; preds = %217
  store double 0.000000e+00, ptr %56, align 8, !tbaa !11
  %226 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %226, ptr %50, align 8, !tbaa !9
  %227 = load i64, ptr %49, align 8, !tbaa !9
  %228 = load i64, ptr %49, align 8, !tbaa !9
  %229 = add nsw i64 %228, 1
  %230 = mul nsw i64 %227, %229
  %231 = sdiv i64 %230, 2
  %232 = load i64, ptr %49, align 8, !tbaa !9
  %233 = add nsw i64 %231, %232
  store i64 %233, ptr %42, align 8, !tbaa !9
  %234 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %234, ptr %12, align 8, !tbaa !9
  %235 = load i64, ptr %49, align 8, !tbaa !9
  %236 = add nsw i64 %235, 1
  store i64 %236, ptr %30, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %308, %225
  %238 = load i64, ptr %30, align 8, !tbaa !9
  %239 = load i64, ptr %12, align 8, !tbaa !9
  %240 = icmp sle i64 %238, %239
  br i1 %240, label %241, label %311

241:                                              ; preds = %237
  %242 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %242, ptr %13, align 8, !tbaa !9
  %243 = load ptr, ptr %9, align 8, !tbaa !5
  %244 = load i64, ptr %13, align 8, !tbaa !9
  %245 = getelementptr inbounds %struct.doublecomplex, ptr %243, i64 %244
  %246 = getelementptr inbounds %struct.doublecomplex, ptr %245, i32 0, i32 0
  %247 = load double, ptr %246, align 8, !tbaa !13
  store double %247, ptr %18, align 8, !tbaa !11
  %248 = load double, ptr %18, align 8, !tbaa !11
  %249 = fcmp oge double %248, 0.000000e+00
  br i1 %249, label %250, label %252

250:                                              ; preds = %241
  %251 = load double, ptr %18, align 8, !tbaa !11
  br label %255

252:                                              ; preds = %241
  %253 = load double, ptr %18, align 8, !tbaa !11
  %254 = fneg double %253
  br label %255

255:                                              ; preds = %252, %250
  %256 = phi double [ %251, %250 ], [ %254, %252 ]
  %257 = load ptr, ptr %9, align 8, !tbaa !5
  %258 = load i64, ptr %42, align 8, !tbaa !9
  %259 = getelementptr inbounds %struct.doublecomplex, ptr %257, i64 %258
  %260 = call double @d_imag(ptr noundef %259)
  store double %260, ptr %19, align 8, !tbaa !11
  %261 = load double, ptr %19, align 8, !tbaa !11
  %262 = fcmp oge double %261, 0.000000e+00
  br i1 %262, label %263, label %265

263:                                              ; preds = %255
  %264 = load double, ptr %19, align 8, !tbaa !11
  br label %268

265:                                              ; preds = %255
  %266 = load double, ptr %19, align 8, !tbaa !11
  %267 = fneg double %266
  br label %268

268:                                              ; preds = %265, %263
  %269 = phi double [ %264, %263 ], [ %267, %265 ]
  %270 = fadd double %256, %269
  %271 = load double, ptr %56, align 8, !tbaa !11
  %272 = fcmp ogt double %270, %271
  br i1 %272, label %273, label %304

273:                                              ; preds = %268
  %274 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %274, ptr %13, align 8, !tbaa !9
  %275 = load ptr, ptr %9, align 8, !tbaa !5
  %276 = load i64, ptr %13, align 8, !tbaa !9
  %277 = getelementptr inbounds %struct.doublecomplex, ptr %275, i64 %276
  %278 = getelementptr inbounds %struct.doublecomplex, ptr %277, i32 0, i32 0
  %279 = load double, ptr %278, align 8, !tbaa !13
  store double %279, ptr %18, align 8, !tbaa !11
  %280 = load double, ptr %18, align 8, !tbaa !11
  %281 = fcmp oge double %280, 0.000000e+00
  br i1 %281, label %282, label %284

282:                                              ; preds = %273
  %283 = load double, ptr %18, align 8, !tbaa !11
  br label %287

284:                                              ; preds = %273
  %285 = load double, ptr %18, align 8, !tbaa !11
  %286 = fneg double %285
  br label %287

287:                                              ; preds = %284, %282
  %288 = phi double [ %283, %282 ], [ %286, %284 ]
  %289 = load ptr, ptr %9, align 8, !tbaa !5
  %290 = load i64, ptr %42, align 8, !tbaa !9
  %291 = getelementptr inbounds %struct.doublecomplex, ptr %289, i64 %290
  %292 = call double @d_imag(ptr noundef %291)
  store double %292, ptr %19, align 8, !tbaa !11
  %293 = load double, ptr %19, align 8, !tbaa !11
  %294 = fcmp oge double %293, 0.000000e+00
  br i1 %294, label %295, label %297

295:                                              ; preds = %287
  %296 = load double, ptr %19, align 8, !tbaa !11
  br label %300

297:                                              ; preds = %287
  %298 = load double, ptr %19, align 8, !tbaa !11
  %299 = fneg double %298
  br label %300

300:                                              ; preds = %297, %295
  %301 = phi double [ %296, %295 ], [ %299, %297 ]
  %302 = fadd double %288, %301
  store double %302, ptr %56, align 8, !tbaa !11
  %303 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %303, ptr %50, align 8, !tbaa !9
  br label %304

304:                                              ; preds = %300, %268
  %305 = load i64, ptr %30, align 8, !tbaa !9
  %306 = load i64, ptr %42, align 8, !tbaa !9
  %307 = add nsw i64 %306, %305
  store i64 %307, ptr %42, align 8, !tbaa !9
  br label %308

308:                                              ; preds = %304
  %309 = load i64, ptr %30, align 8, !tbaa !9
  %310 = add nsw i64 %309, 1
  store i64 %310, ptr %30, align 8, !tbaa !9
  br label %237, !llvm.loop !16

311:                                              ; preds = %237
  %312 = load i64, ptr %49, align 8, !tbaa !9
  %313 = sub nsw i64 %312, 1
  %314 = load i64, ptr %49, align 8, !tbaa !9
  %315 = mul nsw i64 %313, %314
  %316 = sdiv i64 %315, 2
  %317 = add nsw i64 %316, 1
  store i64 %317, ptr %45, align 8, !tbaa !9
  %318 = load i64, ptr %49, align 8, !tbaa !9
  %319 = icmp sgt i64 %318, 1
  br i1 %319, label %320, label %372

320:                                              ; preds = %311
  %321 = load i64, ptr %49, align 8, !tbaa !9
  %322 = sub nsw i64 %321, 1
  store i64 %322, ptr %12, align 8, !tbaa !9
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = load i64, ptr %45, align 8, !tbaa !9
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %323, i64 %324
  %326 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %325, ptr noundef @c__1)
  store i64 %326, ptr %50, align 8, !tbaa !9
  %327 = load i64, ptr %45, align 8, !tbaa !9
  %328 = load i64, ptr %50, align 8, !tbaa !9
  %329 = add nsw i64 %327, %328
  %330 = sub nsw i64 %329, 1
  store i64 %330, ptr %12, align 8, !tbaa !9
  %331 = load double, ptr %56, align 8, !tbaa !11
  store double %331, ptr %20, align 8, !tbaa !11
  %332 = load ptr, ptr %9, align 8, !tbaa !5
  %333 = load i64, ptr %12, align 8, !tbaa !9
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %332, i64 %333
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %334, i32 0, i32 0
  %336 = load double, ptr %335, align 8, !tbaa !13
  store double %336, ptr %18, align 8, !tbaa !11
  %337 = load double, ptr %18, align 8, !tbaa !11
  %338 = fcmp oge double %337, 0.000000e+00
  br i1 %338, label %339, label %341

339:                                              ; preds = %320
  %340 = load double, ptr %18, align 8, !tbaa !11
  br label %344

341:                                              ; preds = %320
  %342 = load double, ptr %18, align 8, !tbaa !11
  %343 = fneg double %342
  br label %344

344:                                              ; preds = %341, %339
  %345 = phi double [ %340, %339 ], [ %343, %341 ]
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = load i64, ptr %45, align 8, !tbaa !9
  %348 = load i64, ptr %50, align 8, !tbaa !9
  %349 = add nsw i64 %347, %348
  %350 = sub nsw i64 %349, 1
  %351 = getelementptr inbounds %struct.doublecomplex, ptr %346, i64 %350
  %352 = call double @d_imag(ptr noundef %351)
  store double %352, ptr %19, align 8, !tbaa !11
  %353 = load double, ptr %19, align 8, !tbaa !11
  %354 = fcmp oge double %353, 0.000000e+00
  br i1 %354, label %355, label %357

355:                                              ; preds = %344
  %356 = load double, ptr %19, align 8, !tbaa !11
  br label %360

357:                                              ; preds = %344
  %358 = load double, ptr %19, align 8, !tbaa !11
  %359 = fneg double %358
  br label %360

360:                                              ; preds = %357, %355
  %361 = phi double [ %356, %355 ], [ %359, %357 ]
  %362 = fadd double %345, %361
  store double %362, ptr %21, align 8, !tbaa !11
  %363 = load double, ptr %20, align 8, !tbaa !11
  %364 = load double, ptr %21, align 8, !tbaa !11
  %365 = fcmp oge double %363, %364
  br i1 %365, label %366, label %368

366:                                              ; preds = %360
  %367 = load double, ptr %20, align 8, !tbaa !11
  br label %370

368:                                              ; preds = %360
  %369 = load double, ptr %21, align 8, !tbaa !11
  br label %370

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

372:                                              ; preds = %370, %311
  %373 = load double, ptr %54, align 8, !tbaa !11
  %374 = load double, ptr %51, align 8, !tbaa !11
  %375 = load double, ptr %55, align 8, !tbaa !11
  %376 = fmul double %374, %375
  %377 = load double, ptr %55, align 8, !tbaa !11
  %378 = load double, ptr %56, align 8, !tbaa !11
  %379 = fdiv double %377, %378
  %380 = fmul double %376, %379
  %381 = fcmp oge double %373, %380
  br i1 %381, label %382, label %384

382:                                              ; preds = %372
  %383 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %383, ptr %40, align 8, !tbaa !9
  br label %412

384:                                              ; preds = %372
  %385 = load i64, ptr %45, align 8, !tbaa !9
  %386 = load i64, ptr %49, align 8, !tbaa !9
  %387 = add nsw i64 %385, %386
  %388 = sub nsw i64 %387, 1
  store i64 %388, ptr %12, align 8, !tbaa !9
  %389 = load ptr, ptr %9, align 8, !tbaa !5
  %390 = load i64, ptr %12, align 8, !tbaa !9
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %389, i64 %390
  %392 = getelementptr inbounds %struct.doublecomplex, ptr %391, i32 0, i32 0
  %393 = load double, ptr %392, align 8, !tbaa !13
  store double %393, ptr %18, align 8, !tbaa !11
  %394 = load double, ptr %18, align 8, !tbaa !11
  %395 = fcmp oge double %394, 0.000000e+00
  br i1 %395, label %396, label %398

396:                                              ; preds = %384
  %397 = load double, ptr %18, align 8, !tbaa !11
  br label %401

398:                                              ; preds = %384
  %399 = load double, ptr %18, align 8, !tbaa !11
  %400 = fneg double %399
  br label %401

401:                                              ; preds = %398, %396
  %402 = phi double [ %397, %396 ], [ %400, %398 ]
  %403 = load double, ptr %51, align 8, !tbaa !11
  %404 = load double, ptr %56, align 8, !tbaa !11
  %405 = fmul double %403, %404
  %406 = fcmp oge double %402, %405
  br i1 %406, label %407, label %409

407:                                              ; preds = %401
  %408 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %408, ptr %40, align 8, !tbaa !9
  br label %411

409:                                              ; preds = %401
  %410 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %410, ptr %40, align 8, !tbaa !9
  store i64 2, ptr %52, align 8, !tbaa !9
  br label %411

411:                                              ; preds = %409, %407
  br label %412

412:                                              ; preds = %411, %382
  br label %413

413:                                              ; preds = %412, %223
  %414 = load i64, ptr %31, align 8, !tbaa !9
  %415 = load i64, ptr %52, align 8, !tbaa !9
  %416 = sub nsw i64 %414, %415
  %417 = add nsw i64 %416, 1
  store i64 %417, ptr %39, align 8, !tbaa !9
  %418 = load i64, ptr %52, align 8, !tbaa !9
  %419 = icmp eq i64 %418, 2
  br i1 %419, label %420, label %425

420:                                              ; preds = %413
  %421 = load i64, ptr %44, align 8, !tbaa !9
  %422 = load i64, ptr %31, align 8, !tbaa !9
  %423 = sub nsw i64 %421, %422
  %424 = add nsw i64 %423, 1
  store i64 %424, ptr %44, align 8, !tbaa !9
  br label %425

425:                                              ; preds = %420, %413
  %426 = load i64, ptr %40, align 8, !tbaa !9
  %427 = load i64, ptr %39, align 8, !tbaa !9
  %428 = icmp ne i64 %426, %427
  br i1 %428, label %429, label %654

429:                                              ; preds = %425
  %430 = load i64, ptr %40, align 8, !tbaa !9
  %431 = sub nsw i64 %430, 1
  store i64 %431, ptr %12, align 8, !tbaa !9
  %432 = load ptr, ptr %9, align 8, !tbaa !5
  %433 = load i64, ptr %44, align 8, !tbaa !9
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %432, i64 %433
  %435 = load ptr, ptr %9, align 8, !tbaa !5
  %436 = load i64, ptr %45, align 8, !tbaa !9
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %435, i64 %436
  %438 = call i32 @f2c_zswap(ptr noundef %12, ptr noundef %434, ptr noundef @c__1, ptr noundef %437, ptr noundef @c__1)
  %439 = load i64, ptr %45, align 8, !tbaa !9
  %440 = load i64, ptr %40, align 8, !tbaa !9
  %441 = add nsw i64 %439, %440
  %442 = sub nsw i64 %441, 1
  store i64 %442, ptr %42, align 8, !tbaa !9
  %443 = load i64, ptr %39, align 8, !tbaa !9
  %444 = sub nsw i64 %443, 1
  store i64 %444, ptr %12, align 8, !tbaa !9
  %445 = load i64, ptr %40, align 8, !tbaa !9
  %446 = add nsw i64 %445, 1
  store i64 %446, ptr %30, align 8, !tbaa !9
  br label %447

447:                                              ; preds = %500, %429
  %448 = load i64, ptr %30, align 8, !tbaa !9
  %449 = load i64, ptr %12, align 8, !tbaa !9
  %450 = icmp sle i64 %448, %449
  br i1 %450, label %451, label %503

451:                                              ; preds = %447
  %452 = load i64, ptr %42, align 8, !tbaa !9
  %453 = load i64, ptr %30, align 8, !tbaa !9
  %454 = add nsw i64 %452, %453
  %455 = sub nsw i64 %454, 1
  store i64 %455, ptr %42, align 8, !tbaa !9
  %456 = load ptr, ptr %9, align 8, !tbaa !5
  %457 = load i64, ptr %44, align 8, !tbaa !9
  %458 = load i64, ptr %30, align 8, !tbaa !9
  %459 = add nsw i64 %457, %458
  %460 = sub nsw i64 %459, 1
  %461 = getelementptr inbounds %struct.doublecomplex, ptr %456, i64 %460
  call void @d_cnjg(ptr noundef %22, ptr noundef %461)
  %462 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %463 = load double, ptr %462, align 8, !tbaa !13
  %464 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %463, ptr %464, align 8, !tbaa !13
  %465 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %466 = load double, ptr %465, align 8, !tbaa !15
  %467 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %466, ptr %467, align 8, !tbaa !15
  %468 = load i64, ptr %44, align 8, !tbaa !9
  %469 = load i64, ptr %30, align 8, !tbaa !9
  %470 = add nsw i64 %468, %469
  %471 = sub nsw i64 %470, 1
  store i64 %471, ptr %13, align 8, !tbaa !9
  %472 = load ptr, ptr %9, align 8, !tbaa !5
  %473 = load i64, ptr %42, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %472, i64 %473
  call void @d_cnjg(ptr noundef %22, ptr noundef %474)
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %476 = load double, ptr %475, align 8, !tbaa !13
  %477 = load ptr, ptr %9, align 8, !tbaa !5
  %478 = load i64, ptr %13, align 8, !tbaa !9
  %479 = getelementptr inbounds %struct.doublecomplex, ptr %477, i64 %478
  %480 = getelementptr inbounds %struct.doublecomplex, ptr %479, i32 0, i32 0
  store double %476, ptr %480, align 8, !tbaa !13
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %482 = load double, ptr %481, align 8, !tbaa !15
  %483 = load ptr, ptr %9, align 8, !tbaa !5
  %484 = load i64, ptr %13, align 8, !tbaa !9
  %485 = getelementptr inbounds %struct.doublecomplex, ptr %483, i64 %484
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %485, i32 0, i32 1
  store double %482, ptr %486, align 8, !tbaa !15
  %487 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %487, ptr %13, align 8, !tbaa !9
  %488 = getelementptr inbounds %struct.doublecomplex, ptr %32, 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 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %495 = load double, ptr %494, align 8, !tbaa !15
  %496 = load ptr, ptr %9, align 8, !tbaa !5
  %497 = load i64, ptr %13, align 8, !tbaa !9
  %498 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 %497
  %499 = getelementptr inbounds %struct.doublecomplex, ptr %498, i32 0, i32 1
  store double %495, ptr %499, align 8, !tbaa !15
  br label %500

500:                                              ; preds = %451
  %501 = load i64, ptr %30, align 8, !tbaa !9
  %502 = add nsw i64 %501, 1
  store i64 %502, ptr %30, align 8, !tbaa !9
  br label %447, !llvm.loop !18

503:                                              ; preds = %447
  %504 = load i64, ptr %42, align 8, !tbaa !9
  %505 = load i64, ptr %39, align 8, !tbaa !9
  %506 = add nsw i64 %504, %505
  %507 = sub nsw i64 %506, 1
  store i64 %507, ptr %12, align 8, !tbaa !9
  %508 = load ptr, ptr %9, align 8, !tbaa !5
  %509 = load i64, ptr %42, align 8, !tbaa !9
  %510 = load i64, ptr %39, align 8, !tbaa !9
  %511 = add nsw i64 %509, %510
  %512 = sub nsw i64 %511, 1
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %508, i64 %512
  call void @d_cnjg(ptr noundef %22, ptr noundef %513)
  %514 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %515 = load double, ptr %514, align 8, !tbaa !13
  %516 = load ptr, ptr %9, align 8, !tbaa !5
  %517 = load i64, ptr %12, align 8, !tbaa !9
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %516, i64 %517
  %519 = getelementptr inbounds %struct.doublecomplex, ptr %518, i32 0, i32 0
  store double %515, ptr %519, align 8, !tbaa !13
  %520 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %521 = load double, ptr %520, align 8, !tbaa !15
  %522 = load ptr, ptr %9, align 8, !tbaa !5
  %523 = load i64, ptr %12, align 8, !tbaa !9
  %524 = getelementptr inbounds %struct.doublecomplex, ptr %522, i64 %523
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %524, i32 0, i32 1
  store double %521, ptr %525, align 8, !tbaa !15
  %526 = load i64, ptr %44, align 8, !tbaa !9
  %527 = load i64, ptr %39, align 8, !tbaa !9
  %528 = add nsw i64 %526, %527
  %529 = sub nsw i64 %528, 1
  store i64 %529, ptr %12, align 8, !tbaa !9
  %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 0
  %534 = load double, ptr %533, align 8, !tbaa !13
  store double %534, ptr %33, align 8, !tbaa !11
  %535 = load i64, ptr %44, align 8, !tbaa !9
  %536 = load i64, ptr %39, align 8, !tbaa !9
  %537 = add nsw i64 %535, %536
  %538 = sub nsw i64 %537, 1
  store i64 %538, ptr %12, align 8, !tbaa !9
  %539 = load i64, ptr %45, align 8, !tbaa !9
  %540 = load i64, ptr %40, align 8, !tbaa !9
  %541 = add nsw i64 %539, %540
  %542 = sub nsw i64 %541, 1
  store i64 %542, ptr %13, align 8, !tbaa !9
  %543 = load ptr, ptr %9, align 8, !tbaa !5
  %544 = load i64, ptr %13, align 8, !tbaa !9
  %545 = getelementptr inbounds %struct.doublecomplex, ptr %543, i64 %544
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %545, i32 0, i32 0
  %547 = load double, ptr %546, align 8, !tbaa !13
  store double %547, ptr %18, align 8, !tbaa !11
  %548 = load double, ptr %18, align 8, !tbaa !11
  %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 %12, align 8, !tbaa !9
  %555 = getelementptr inbounds %struct.doublecomplex, ptr %553, i64 %554
  %556 = getelementptr inbounds %struct.doublecomplex, ptr %555, i32 0, i32 1
  store double 0.000000e+00, ptr %556, align 8, !tbaa !15
  %557 = load i64, ptr %45, align 8, !tbaa !9
  %558 = load i64, ptr %40, align 8, !tbaa !9
  %559 = add nsw i64 %557, %558
  %560 = sub nsw i64 %559, 1
  store i64 %560, ptr %12, align 8, !tbaa !9
  %561 = load double, ptr %33, align 8, !tbaa !11
  %562 = load ptr, ptr %9, align 8, !tbaa !5
  %563 = load i64, ptr %12, align 8, !tbaa !9
  %564 = getelementptr inbounds %struct.doublecomplex, ptr %562, i64 %563
  %565 = getelementptr inbounds %struct.doublecomplex, ptr %564, i32 0, i32 0
  store double %561, ptr %565, align 8, !tbaa !13
  %566 = load ptr, ptr %9, align 8, !tbaa !5
  %567 = load i64, ptr %12, align 8, !tbaa !9
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %566, i64 %567
  %569 = getelementptr inbounds %struct.doublecomplex, ptr %568, i32 0, i32 1
  store double 0.000000e+00, ptr %569, align 8, !tbaa !15
  %570 = load i64, ptr %52, align 8, !tbaa !9
  %571 = icmp eq i64 %570, 2
  br i1 %571, label %572, label %653

572:                                              ; preds = %503
  %573 = load i64, ptr %38, align 8, !tbaa !9
  %574 = load i64, ptr %31, align 8, !tbaa !9
  %575 = add nsw i64 %573, %574
  %576 = sub nsw i64 %575, 1
  store i64 %576, ptr %12, align 8, !tbaa !9
  %577 = load i64, ptr %38, align 8, !tbaa !9
  %578 = load i64, ptr %31, align 8, !tbaa !9
  %579 = add nsw i64 %577, %578
  %580 = sub nsw i64 %579, 1
  store i64 %580, ptr %13, align 8, !tbaa !9
  %581 = load ptr, ptr %9, align 8, !tbaa !5
  %582 = load i64, ptr %13, align 8, !tbaa !9
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 %582
  %584 = getelementptr inbounds %struct.doublecomplex, ptr %583, i32 0, i32 0
  %585 = load double, ptr %584, align 8, !tbaa !13
  store double %585, ptr %18, align 8, !tbaa !11
  %586 = load double, ptr %18, align 8, !tbaa !11
  %587 = load ptr, ptr %9, align 8, !tbaa !5
  %588 = load i64, ptr %12, align 8, !tbaa !9
  %589 = getelementptr inbounds %struct.doublecomplex, ptr %587, i64 %588
  %590 = getelementptr inbounds %struct.doublecomplex, ptr %589, i32 0, i32 0
  store double %586, 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
  store double 0.000000e+00, ptr %594, align 8, !tbaa !15
  %595 = load i64, ptr %38, align 8, !tbaa !9
  %596 = load i64, ptr %31, align 8, !tbaa !9
  %597 = add nsw i64 %595, %596
  %598 = sub nsw i64 %597, 2
  store i64 %598, ptr %12, align 8, !tbaa !9
  %599 = load ptr, ptr %9, align 8, !tbaa !5
  %600 = load i64, ptr %12, align 8, !tbaa !9
  %601 = getelementptr inbounds %struct.doublecomplex, ptr %599, i64 %600
  %602 = getelementptr inbounds %struct.doublecomplex, ptr %601, i32 0, i32 0
  %603 = load double, ptr %602, align 8, !tbaa !13
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %603, ptr %604, align 8, !tbaa !13
  %605 = load ptr, ptr %9, align 8, !tbaa !5
  %606 = load i64, ptr %12, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %605, i64 %606
  %608 = getelementptr inbounds %struct.doublecomplex, ptr %607, i32 0, i32 1
  %609 = load double, ptr %608, align 8, !tbaa !15
  %610 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %609, ptr %610, align 8, !tbaa !15
  %611 = load i64, ptr %38, align 8, !tbaa !9
  %612 = load i64, ptr %31, align 8, !tbaa !9
  %613 = add nsw i64 %611, %612
  %614 = sub nsw i64 %613, 2
  store i64 %614, ptr %12, align 8, !tbaa !9
  %615 = load i64, ptr %38, align 8, !tbaa !9
  %616 = load i64, ptr %40, align 8, !tbaa !9
  %617 = add nsw i64 %615, %616
  %618 = sub nsw i64 %617, 1
  store i64 %618, ptr %13, align 8, !tbaa !9
  %619 = load ptr, ptr %9, align 8, !tbaa !5
  %620 = load i64, ptr %13, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.doublecomplex, ptr %619, i64 %620
  %622 = getelementptr inbounds %struct.doublecomplex, ptr %621, i32 0, i32 0
  %623 = load double, ptr %622, align 8, !tbaa !13
  %624 = load ptr, ptr %9, align 8, !tbaa !5
  %625 = load i64, ptr %12, align 8, !tbaa !9
  %626 = getelementptr inbounds %struct.doublecomplex, ptr %624, i64 %625
  %627 = getelementptr inbounds %struct.doublecomplex, ptr %626, i32 0, i32 0
  store double %623, ptr %627, align 8, !tbaa !13
  %628 = load ptr, ptr %9, align 8, !tbaa !5
  %629 = load i64, ptr %13, align 8, !tbaa !9
  %630 = getelementptr inbounds %struct.doublecomplex, ptr %628, i64 %629
  %631 = getelementptr inbounds %struct.doublecomplex, ptr %630, i32 0, i32 1
  %632 = load double, ptr %631, align 8, !tbaa !15
  %633 = load ptr, ptr %9, align 8, !tbaa !5
  %634 = load i64, ptr %12, align 8, !tbaa !9
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %633, i64 %634
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %635, i32 0, i32 1
  store double %632, ptr %636, align 8, !tbaa !15
  %637 = load i64, ptr %38, align 8, !tbaa !9
  %638 = load i64, ptr %40, align 8, !tbaa !9
  %639 = add nsw i64 %637, %638
  %640 = sub nsw i64 %639, 1
  store i64 %640, ptr %12, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %642 = load double, ptr %641, align 8, !tbaa !13
  %643 = load ptr, ptr %9, align 8, !tbaa !5
  %644 = load i64, ptr %12, align 8, !tbaa !9
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %643, i64 %644
  %646 = getelementptr inbounds %struct.doublecomplex, ptr %645, i32 0, i32 0
  store double %642, ptr %646, align 8, !tbaa !13
  %647 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %648 = load double, ptr %647, align 8, !tbaa !15
  %649 = load ptr, ptr %9, align 8, !tbaa !5
  %650 = load i64, ptr %12, align 8, !tbaa !9
  %651 = getelementptr inbounds %struct.doublecomplex, ptr %649, i64 %650
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %651, i32 0, i32 1
  store double %648, ptr %652, align 8, !tbaa !15
  br label %653

653:                                              ; preds = %572, %503
  br label %699

654:                                              ; preds = %425
  %655 = load i64, ptr %38, align 8, !tbaa !9
  %656 = load i64, ptr %31, align 8, !tbaa !9
  %657 = add nsw i64 %655, %656
  %658 = sub nsw i64 %657, 1
  store i64 %658, ptr %12, align 8, !tbaa !9
  %659 = load i64, ptr %38, align 8, !tbaa !9
  %660 = load i64, ptr %31, align 8, !tbaa !9
  %661 = add nsw i64 %659, %660
  %662 = sub nsw i64 %661, 1
  store i64 %662, ptr %13, align 8, !tbaa !9
  %663 = load ptr, ptr %9, align 8, !tbaa !5
  %664 = load i64, ptr %13, align 8, !tbaa !9
  %665 = getelementptr inbounds %struct.doublecomplex, ptr %663, i64 %664
  %666 = getelementptr inbounds %struct.doublecomplex, ptr %665, i32 0, i32 0
  %667 = load double, ptr %666, align 8, !tbaa !13
  store double %667, ptr %18, align 8, !tbaa !11
  %668 = load double, ptr %18, align 8, !tbaa !11
  %669 = load ptr, ptr %9, align 8, !tbaa !5
  %670 = load i64, ptr %12, align 8, !tbaa !9
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %669, i64 %670
  %672 = getelementptr inbounds %struct.doublecomplex, ptr %671, i32 0, i32 0
  store double %668, ptr %672, align 8, !tbaa !13
  %673 = load ptr, ptr %9, align 8, !tbaa !5
  %674 = load i64, ptr %12, align 8, !tbaa !9
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %673, i64 %674
  %676 = getelementptr inbounds %struct.doublecomplex, ptr %675, i32 0, i32 1
  store double 0.000000e+00, ptr %676, align 8, !tbaa !15
  %677 = load i64, ptr %52, align 8, !tbaa !9
  %678 = icmp eq i64 %677, 2
  br i1 %678, label %679, label %698

679:                                              ; preds = %654
  %680 = load i64, ptr %38, align 8, !tbaa !9
  %681 = sub nsw i64 %680, 1
  store i64 %681, ptr %12, align 8, !tbaa !9
  %682 = load i64, ptr %38, align 8, !tbaa !9
  %683 = sub nsw i64 %682, 1
  store i64 %683, ptr %13, align 8, !tbaa !9
  %684 = load ptr, ptr %9, align 8, !tbaa !5
  %685 = load i64, ptr %13, align 8, !tbaa !9
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %684, i64 %685
  %687 = getelementptr inbounds %struct.doublecomplex, ptr %686, i32 0, i32 0
  %688 = load double, ptr %687, align 8, !tbaa !13
  store double %688, ptr %18, align 8, !tbaa !11
  %689 = load double, ptr %18, align 8, !tbaa !11
  %690 = load ptr, ptr %9, align 8, !tbaa !5
  %691 = load i64, ptr %12, align 8, !tbaa !9
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %690, i64 %691
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %692, i32 0, i32 0
  store double %689, ptr %693, align 8, !tbaa !13
  %694 = load ptr, ptr %9, align 8, !tbaa !5
  %695 = load i64, ptr %12, align 8, !tbaa !9
  %696 = getelementptr inbounds %struct.doublecomplex, ptr %694, i64 %695
  %697 = getelementptr inbounds %struct.doublecomplex, ptr %696, i32 0, i32 1
  store double 0.000000e+00, ptr %697, align 8, !tbaa !15
  br label %698

698:                                              ; preds = %679, %654
  br label %699

699:                                              ; preds = %698, %653
  %700 = load i64, ptr %52, align 8, !tbaa !9
  %701 = icmp eq i64 %700, 1
  br i1 %701, label %702, label %730

702:                                              ; preds = %699
  %703 = load i64, ptr %38, align 8, !tbaa !9
  %704 = load i64, ptr %31, align 8, !tbaa !9
  %705 = add nsw i64 %703, %704
  %706 = sub nsw i64 %705, 1
  store i64 %706, ptr %12, align 8, !tbaa !9
  %707 = load ptr, ptr %9, align 8, !tbaa !5
  %708 = load i64, ptr %12, align 8, !tbaa !9
  %709 = getelementptr inbounds %struct.doublecomplex, ptr %707, i64 %708
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %709, i32 0, i32 0
  %711 = load double, ptr %710, align 8, !tbaa !13
  %712 = fdiv double 1.000000e+00, %711
  store double %712, ptr %33, align 8, !tbaa !11
  %713 = load i64, ptr %31, align 8, !tbaa !9
  %714 = sub nsw i64 %713, 1
  store i64 %714, ptr %12, align 8, !tbaa !9
  %715 = load double, ptr %33, align 8, !tbaa !11
  %716 = fneg double %715
  store double %716, ptr %18, align 8, !tbaa !11
  %717 = load ptr, ptr %7, align 8, !tbaa !5
  %718 = load ptr, ptr %9, align 8, !tbaa !5
  %719 = load i64, ptr %38, align 8, !tbaa !9
  %720 = getelementptr inbounds %struct.doublecomplex, ptr %718, i64 %719
  %721 = load ptr, ptr %9, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.doublecomplex, ptr %721, i64 1
  %723 = call i32 @f2c_zhpr(ptr noundef %717, ptr noundef %12, ptr noundef %18, ptr noundef %720, ptr noundef @c__1, ptr noundef %722)
  %724 = load i64, ptr %31, align 8, !tbaa !9
  %725 = sub nsw i64 %724, 1
  store i64 %725, ptr %12, align 8, !tbaa !9
  %726 = load ptr, ptr %9, align 8, !tbaa !5
  %727 = load i64, ptr %38, align 8, !tbaa !9
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %726, i64 %727
  %729 = call i32 @f2c_zdscal(ptr noundef %12, ptr noundef %33, ptr noundef %728, ptr noundef @c__1)
  br label %1248

730:                                              ; preds = %699
  %731 = load i64, ptr %31, align 8, !tbaa !9
  %732 = icmp sgt i64 %731, 2
  br i1 %732, label %733, label %1247

733:                                              ; preds = %730
  %734 = load i64, ptr %31, align 8, !tbaa !9
  %735 = sub nsw i64 %734, 1
  %736 = load i64, ptr %31, align 8, !tbaa !9
  %737 = sub nsw i64 %736, 1
  %738 = load i64, ptr %31, align 8, !tbaa !9
  %739 = mul nsw i64 %737, %738
  %740 = sdiv i64 %739, 2
  %741 = add nsw i64 %735, %740
  store i64 %741, ptr %12, align 8, !tbaa !9
  %742 = load ptr, ptr %9, align 8, !tbaa !5
  %743 = load i64, ptr %12, align 8, !tbaa !9
  %744 = getelementptr inbounds %struct.doublecomplex, ptr %742, i64 %743
  %745 = getelementptr inbounds %struct.doublecomplex, ptr %744, i32 0, i32 0
  %746 = load double, ptr %745, align 8, !tbaa !13
  store double %746, ptr %18, align 8, !tbaa !11
  %747 = load ptr, ptr %9, align 8, !tbaa !5
  %748 = load i64, ptr %31, align 8, !tbaa !9
  %749 = sub nsw i64 %748, 1
  %750 = load i64, ptr %31, align 8, !tbaa !9
  %751 = sub nsw i64 %750, 1
  %752 = load i64, ptr %31, align 8, !tbaa !9
  %753 = mul nsw i64 %751, %752
  %754 = sdiv i64 %753, 2
  %755 = add nsw i64 %749, %754
  %756 = getelementptr inbounds %struct.doublecomplex, ptr %747, i64 %755
  %757 = call double @d_imag(ptr noundef %756)
  store double %757, ptr %19, align 8, !tbaa !11
  %758 = call double @dlapy2_(ptr noundef %18, ptr noundef %19)
  store double %758, ptr %28, align 8, !tbaa !11
  %759 = load i64, ptr %31, align 8, !tbaa !9
  %760 = sub nsw i64 %759, 1
  %761 = load i64, ptr %31, align 8, !tbaa !9
  %762 = sub nsw i64 %761, 2
  %763 = load i64, ptr %31, align 8, !tbaa !9
  %764 = sub nsw i64 %763, 1
  %765 = mul nsw i64 %762, %764
  %766 = sdiv i64 %765, 2
  %767 = add nsw i64 %760, %766
  store i64 %767, ptr %12, align 8, !tbaa !9
  %768 = load ptr, ptr %9, align 8, !tbaa !5
  %769 = load i64, ptr %12, align 8, !tbaa !9
  %770 = getelementptr inbounds %struct.doublecomplex, ptr %768, i64 %769
  %771 = getelementptr inbounds %struct.doublecomplex, ptr %770, i32 0, i32 0
  %772 = load double, ptr %771, align 8, !tbaa !13
  %773 = load double, ptr %28, align 8, !tbaa !11
  %774 = fdiv double %772, %773
  store double %774, ptr %36, align 8, !tbaa !11
  %775 = load i64, ptr %31, align 8, !tbaa !9
  %776 = load i64, ptr %31, align 8, !tbaa !9
  %777 = sub nsw i64 %776, 1
  %778 = load i64, ptr %31, align 8, !tbaa !9
  %779 = mul nsw i64 %777, %778
  %780 = sdiv i64 %779, 2
  %781 = add nsw i64 %775, %780
  store i64 %781, ptr %12, align 8, !tbaa !9
  %782 = load ptr, ptr %9, align 8, !tbaa !5
  %783 = load i64, ptr %12, align 8, !tbaa !9
  %784 = getelementptr inbounds %struct.doublecomplex, ptr %782, i64 %783
  %785 = getelementptr inbounds %struct.doublecomplex, ptr %784, i32 0, i32 0
  %786 = load double, ptr %785, align 8, !tbaa !13
  %787 = load double, ptr %28, align 8, !tbaa !11
  %788 = fdiv double %786, %787
  store double %788, ptr %34, align 8, !tbaa !11
  %789 = load double, ptr %34, align 8, !tbaa !11
  %790 = load double, ptr %36, align 8, !tbaa !11
  %791 = call double @llvm.fmuladd.f64(double %789, double %790, double -1.000000e+00)
  %792 = fdiv double 1.000000e+00, %791
  store double %792, ptr %43, align 8, !tbaa !11
  %793 = load i64, ptr %31, align 8, !tbaa !9
  %794 = sub nsw i64 %793, 1
  %795 = load i64, ptr %31, align 8, !tbaa !9
  %796 = sub nsw i64 %795, 1
  %797 = load i64, ptr %31, align 8, !tbaa !9
  %798 = mul nsw i64 %796, %797
  %799 = sdiv i64 %798, 2
  %800 = add nsw i64 %794, %799
  store i64 %800, ptr %12, align 8, !tbaa !9
  %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 0
  %805 = load double, ptr %804, align 8, !tbaa !13
  %806 = load double, ptr %28, align 8, !tbaa !11
  %807 = fdiv double %805, %806
  %808 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %807, ptr %808, align 8, !tbaa !13
  %809 = load ptr, ptr %9, align 8, !tbaa !5
  %810 = load i64, ptr %12, align 8, !tbaa !9
  %811 = getelementptr inbounds %struct.doublecomplex, ptr %809, i64 %810
  %812 = getelementptr inbounds %struct.doublecomplex, ptr %811, i32 0, i32 1
  %813 = load double, ptr %812, align 8, !tbaa !15
  %814 = load double, ptr %28, align 8, !tbaa !11
  %815 = fdiv double %813, %814
  %816 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %815, ptr %816, align 8, !tbaa !15
  %817 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %818 = load double, ptr %817, align 8, !tbaa !13
  %819 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  store double %818, ptr %819, align 8, !tbaa !13
  %820 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %821 = load double, ptr %820, align 8, !tbaa !15
  %822 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  store double %821, ptr %822, align 8, !tbaa !15
  %823 = load double, ptr %43, align 8, !tbaa !11
  %824 = load double, ptr %28, align 8, !tbaa !11
  %825 = fdiv double %823, %824
  store double %825, ptr %28, align 8, !tbaa !11
  %826 = load i64, ptr %31, align 8, !tbaa !9
  %827 = sub nsw i64 %826, 2
  store i64 %827, ptr %30, align 8, !tbaa !9
  br label %828

828:                                              ; preds = %1243, %733
  %829 = load i64, ptr %30, align 8, !tbaa !9
  %830 = icmp sge i64 %829, 1
  br i1 %830, label %831, label %1246

831:                                              ; preds = %828
  %832 = load i64, ptr %30, align 8, !tbaa !9
  %833 = load i64, ptr %31, align 8, !tbaa !9
  %834 = sub nsw i64 %833, 2
  %835 = load i64, ptr %31, align 8, !tbaa !9
  %836 = sub nsw i64 %835, 1
  %837 = mul nsw i64 %834, %836
  %838 = sdiv i64 %837, 2
  %839 = add nsw i64 %832, %838
  store i64 %839, ptr %12, align 8, !tbaa !9
  %840 = load double, ptr %34, align 8, !tbaa !11
  %841 = load ptr, ptr %9, align 8, !tbaa !5
  %842 = load i64, ptr %12, align 8, !tbaa !9
  %843 = getelementptr inbounds %struct.doublecomplex, ptr %841, i64 %842
  %844 = getelementptr inbounds %struct.doublecomplex, ptr %843, i32 0, i32 0
  %845 = load double, ptr %844, align 8, !tbaa !13
  %846 = fmul double %840, %845
  %847 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %846, ptr %847, align 8, !tbaa !13
  %848 = load double, ptr %34, align 8, !tbaa !11
  %849 = load ptr, ptr %9, align 8, !tbaa !5
  %850 = load i64, ptr %12, align 8, !tbaa !9
  %851 = getelementptr inbounds %struct.doublecomplex, ptr %849, i64 %850
  %852 = getelementptr inbounds %struct.doublecomplex, ptr %851, i32 0, i32 1
  %853 = load double, ptr %852, align 8, !tbaa !15
  %854 = fmul double %848, %853
  %855 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %854, ptr %855, align 8, !tbaa !15
  call void @d_cnjg(ptr noundef %26, ptr noundef %35)
  %856 = load i64, ptr %30, align 8, !tbaa !9
  %857 = load i64, ptr %31, align 8, !tbaa !9
  %858 = sub nsw i64 %857, 1
  %859 = load i64, ptr %31, align 8, !tbaa !9
  %860 = mul nsw i64 %858, %859
  %861 = sdiv i64 %860, 2
  %862 = add nsw i64 %856, %861
  store i64 %862, ptr %13, align 8, !tbaa !9
  %863 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  %864 = load double, ptr %863, align 8, !tbaa !13
  %865 = load ptr, ptr %9, align 8, !tbaa !5
  %866 = load i64, ptr %13, align 8, !tbaa !9
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %865, i64 %866
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %867, i32 0, i32 0
  %869 = load double, ptr %868, align 8, !tbaa !13
  %870 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  %871 = load double, ptr %870, align 8, !tbaa !15
  %872 = load ptr, ptr %9, align 8, !tbaa !5
  %873 = load i64, ptr %13, align 8, !tbaa !9
  %874 = getelementptr inbounds %struct.doublecomplex, ptr %872, i64 %873
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %874, i32 0, i32 1
  %876 = load double, ptr %875, align 8, !tbaa !15
  %877 = fmul double %871, %876
  %878 = fneg double %877
  %879 = call double @llvm.fmuladd.f64(double %864, double %869, double %878)
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  store double %879, ptr %880, align 8, !tbaa !13
  %881 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  %882 = load double, ptr %881, align 8, !tbaa !13
  %883 = load ptr, ptr %9, align 8, !tbaa !5
  %884 = load i64, ptr %13, align 8, !tbaa !9
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %883, i64 %884
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %885, i32 0, i32 1
  %887 = load double, ptr %886, align 8, !tbaa !15
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  %889 = load double, ptr %888, align 8, !tbaa !15
  %890 = load ptr, ptr %9, align 8, !tbaa !5
  %891 = load i64, ptr %13, 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 = fmul double %889, %894
  %896 = call double @llvm.fmuladd.f64(double %882, double %887, double %895)
  %897 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  store double %896, ptr %897, align 8, !tbaa !15
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %899 = load double, ptr %898, align 8, !tbaa !13
  %900 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %901 = load double, ptr %900, align 8, !tbaa !13
  %902 = fsub double %899, %901
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %902, ptr %903, align 8, !tbaa !13
  %904 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %905 = load double, ptr %904, align 8, !tbaa !15
  %906 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %907 = load double, ptr %906, align 8, !tbaa !15
  %908 = fsub double %905, %907
  %909 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %908, ptr %909, align 8, !tbaa !15
  %910 = load double, ptr %28, align 8, !tbaa !11
  %911 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %912 = load double, ptr %911, align 8, !tbaa !13
  %913 = fmul double %910, %912
  %914 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %913, ptr %914, align 8, !tbaa !13
  %915 = load double, ptr %28, align 8, !tbaa !11
  %916 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %917 = load double, ptr %916, align 8, !tbaa !15
  %918 = fmul double %915, %917
  %919 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %918, ptr %919, align 8, !tbaa !15
  %920 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %921 = load double, ptr %920, align 8, !tbaa !13
  %922 = getelementptr inbounds %struct.doublecomplex, ptr %47, i32 0, i32 0
  store double %921, ptr %922, align 8, !tbaa !13
  %923 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %924 = load double, ptr %923, align 8, !tbaa !15
  %925 = getelementptr inbounds %struct.doublecomplex, ptr %47, i32 0, i32 1
  store double %924, ptr %925, align 8, !tbaa !15
  %926 = load i64, ptr %30, align 8, !tbaa !9
  %927 = load i64, ptr %31, align 8, !tbaa !9
  %928 = sub nsw i64 %927, 1
  %929 = load i64, ptr %31, align 8, !tbaa !9
  %930 = mul nsw i64 %928, %929
  %931 = sdiv i64 %930, 2
  %932 = add nsw i64 %926, %931
  store i64 %932, ptr %12, align 8, !tbaa !9
  %933 = load double, ptr %36, align 8, !tbaa !11
  %934 = load ptr, ptr %9, align 8, !tbaa !5
  %935 = load i64, ptr %12, align 8, !tbaa !9
  %936 = getelementptr inbounds %struct.doublecomplex, ptr %934, i64 %935
  %937 = getelementptr inbounds %struct.doublecomplex, ptr %936, i32 0, i32 0
  %938 = load double, ptr %937, align 8, !tbaa !13
  %939 = fmul double %933, %938
  %940 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %939, ptr %940, align 8, !tbaa !13
  %941 = load double, ptr %36, align 8, !tbaa !11
  %942 = load ptr, ptr %9, align 8, !tbaa !5
  %943 = load i64, ptr %12, 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 !15
  %947 = fmul double %941, %946
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %947, ptr %948, align 8, !tbaa !15
  %949 = load i64, ptr %30, align 8, !tbaa !9
  %950 = load i64, ptr %31, align 8, !tbaa !9
  %951 = sub nsw i64 %950, 2
  %952 = load i64, ptr %31, align 8, !tbaa !9
  %953 = sub nsw i64 %952, 1
  %954 = mul nsw i64 %951, %953
  %955 = sdiv i64 %954, 2
  %956 = add nsw i64 %949, %955
  store i64 %956, ptr %13, align 8, !tbaa !9
  %957 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  %958 = load double, ptr %957, align 8, !tbaa !13
  %959 = load ptr, ptr %9, align 8, !tbaa !5
  %960 = load i64, ptr %13, align 8, !tbaa !9
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %959, i64 %960
  %962 = getelementptr inbounds %struct.doublecomplex, ptr %961, i32 0, i32 0
  %963 = load double, ptr %962, align 8, !tbaa !13
  %964 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  %965 = load double, ptr %964, align 8, !tbaa !15
  %966 = load ptr, ptr %9, align 8, !tbaa !5
  %967 = load i64, ptr %13, align 8, !tbaa !9
  %968 = getelementptr inbounds %struct.doublecomplex, ptr %966, i64 %967
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %968, i32 0, i32 1
  %970 = load double, ptr %969, align 8, !tbaa !15
  %971 = fmul double %965, %970
  %972 = fneg double %971
  %973 = call double @llvm.fmuladd.f64(double %958, double %963, double %972)
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  store double %973, ptr %974, align 8, !tbaa !13
  %975 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  %976 = load double, ptr %975, align 8, !tbaa !13
  %977 = load ptr, ptr %9, align 8, !tbaa !5
  %978 = load i64, ptr %13, align 8, !tbaa !9
  %979 = getelementptr inbounds %struct.doublecomplex, ptr %977, i64 %978
  %980 = getelementptr inbounds %struct.doublecomplex, ptr %979, i32 0, i32 1
  %981 = load double, ptr %980, align 8, !tbaa !15
  %982 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  %983 = load double, ptr %982, align 8, !tbaa !15
  %984 = load ptr, ptr %9, align 8, !tbaa !5
  %985 = load i64, ptr %13, align 8, !tbaa !9
  %986 = getelementptr inbounds %struct.doublecomplex, ptr %984, i64 %985
  %987 = getelementptr inbounds %struct.doublecomplex, ptr %986, i32 0, i32 0
  %988 = load double, ptr %987, align 8, !tbaa !13
  %989 = fmul double %983, %988
  %990 = call double @llvm.fmuladd.f64(double %976, double %981, double %989)
  %991 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  store double %990, ptr %991, align 8, !tbaa !15
  %992 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %993 = load double, ptr %992, align 8, !tbaa !13
  %994 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %995 = load double, ptr %994, align 8, !tbaa !13
  %996 = fsub double %993, %995
  %997 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %996, ptr %997, align 8, !tbaa !13
  %998 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %999 = load double, ptr %998, align 8, !tbaa !15
  %1000 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %1001 = load double, ptr %1000, align 8, !tbaa !15
  %1002 = fsub double %999, %1001
  %1003 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %1002, ptr %1003, align 8, !tbaa !15
  %1004 = load double, ptr %28, align 8, !tbaa !11
  %1005 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %1006 = load double, ptr %1005, align 8, !tbaa !13
  %1007 = fmul double %1004, %1006
  %1008 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %1007, ptr %1008, align 8, !tbaa !13
  %1009 = load double, ptr %28, align 8, !tbaa !11
  %1010 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %1011 = load double, ptr %1010, align 8, !tbaa !15
  %1012 = fmul double %1009, %1011
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %1012, ptr %1013, align 8, !tbaa !15
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1015 = load double, ptr %1014, align 8, !tbaa !13
  %1016 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %1015, ptr %1016, align 8, !tbaa !13
  %1017 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1018 = load double, ptr %1017, align 8, !tbaa !15
  %1019 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %1018, ptr %1019, align 8, !tbaa !15
  %1020 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %1020, ptr %29, align 8, !tbaa !9
  br label %1021

1021:                                             ; preds = %1166, %831
  %1022 = load i64, ptr %29, align 8, !tbaa !9
  %1023 = icmp sge i64 %1022, 1
  br i1 %1023, label %1024, label %1169

1024:                                             ; preds = %1021
  %1025 = load i64, ptr %29, align 8, !tbaa !9
  %1026 = load i64, ptr %30, align 8, !tbaa !9
  %1027 = sub nsw i64 %1026, 1
  %1028 = load i64, ptr %30, align 8, !tbaa !9
  %1029 = mul nsw i64 %1027, %1028
  %1030 = sdiv i64 %1029, 2
  %1031 = add nsw i64 %1025, %1030
  store i64 %1031, ptr %12, align 8, !tbaa !9
  %1032 = load i64, ptr %29, align 8, !tbaa !9
  %1033 = load i64, ptr %30, align 8, !tbaa !9
  %1034 = sub nsw i64 %1033, 1
  %1035 = load i64, ptr %30, align 8, !tbaa !9
  %1036 = mul nsw i64 %1034, %1035
  %1037 = sdiv i64 %1036, 2
  %1038 = add nsw i64 %1032, %1037
  store i64 %1038, ptr %13, align 8, !tbaa !9
  %1039 = load i64, ptr %29, align 8, !tbaa !9
  %1040 = load i64, ptr %31, align 8, !tbaa !9
  %1041 = sub nsw i64 %1040, 1
  %1042 = load i64, ptr %31, align 8, !tbaa !9
  %1043 = mul nsw i64 %1041, %1042
  %1044 = sdiv i64 %1043, 2
  %1045 = add nsw i64 %1039, %1044
  store i64 %1045, ptr %14, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %25, ptr noundef %41)
  %1046 = load ptr, ptr %9, align 8, !tbaa !5
  %1047 = load i64, ptr %14, align 8, !tbaa !9
  %1048 = getelementptr inbounds %struct.doublecomplex, ptr %1046, i64 %1047
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %1048, i32 0, i32 0
  %1050 = load double, ptr %1049, align 8, !tbaa !13
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %1052 = load double, ptr %1051, align 8, !tbaa !13
  %1053 = load ptr, ptr %9, align 8, !tbaa !5
  %1054 = load i64, ptr %14, align 8, !tbaa !9
  %1055 = getelementptr inbounds %struct.doublecomplex, ptr %1053, i64 %1054
  %1056 = getelementptr inbounds %struct.doublecomplex, ptr %1055, i32 0, i32 1
  %1057 = load double, ptr %1056, align 8, !tbaa !15
  %1058 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %1059 = load double, ptr %1058, align 8, !tbaa !15
  %1060 = fmul double %1057, %1059
  %1061 = fneg double %1060
  %1062 = call double @llvm.fmuladd.f64(double %1050, double %1052, double %1061)
  %1063 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %1062, ptr %1063, align 8, !tbaa !13
  %1064 = load ptr, ptr %9, align 8, !tbaa !5
  %1065 = load i64, ptr %14, align 8, !tbaa !9
  %1066 = getelementptr inbounds %struct.doublecomplex, ptr %1064, i64 %1065
  %1067 = getelementptr inbounds %struct.doublecomplex, ptr %1066, i32 0, i32 0
  %1068 = load double, ptr %1067, align 8, !tbaa !13
  %1069 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %1070 = load double, ptr %1069, align 8, !tbaa !15
  %1071 = load ptr, ptr %9, align 8, !tbaa !5
  %1072 = load i64, ptr %14, align 8, !tbaa !9
  %1073 = getelementptr inbounds %struct.doublecomplex, ptr %1071, i64 %1072
  %1074 = getelementptr inbounds %struct.doublecomplex, ptr %1073, i32 0, i32 1
  %1075 = load double, ptr %1074, align 8, !tbaa !15
  %1076 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %1077 = load double, ptr %1076, align 8, !tbaa !13
  %1078 = fmul double %1075, %1077
  %1079 = call double @llvm.fmuladd.f64(double %1068, double %1070, double %1078)
  %1080 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %1079, ptr %1080, align 8, !tbaa !15
  %1081 = load ptr, ptr %9, align 8, !tbaa !5
  %1082 = load i64, ptr %13, align 8, !tbaa !9
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1081, i64 %1082
  %1084 = getelementptr inbounds %struct.doublecomplex, ptr %1083, i32 0, i32 0
  %1085 = load double, ptr %1084, align 8, !tbaa !13
  %1086 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %1087 = load double, ptr %1086, align 8, !tbaa !13
  %1088 = fsub double %1085, %1087
  %1089 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %1088, ptr %1089, align 8, !tbaa !13
  %1090 = load ptr, ptr %9, align 8, !tbaa !5
  %1091 = load i64, ptr %13, 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 !15
  %1095 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %1096 = load double, ptr %1095, align 8, !tbaa !15
  %1097 = fsub double %1094, %1096
  %1098 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %1097, ptr %1098, align 8, !tbaa !15
  %1099 = load i64, ptr %29, align 8, !tbaa !9
  %1100 = load i64, ptr %31, align 8, !tbaa !9
  %1101 = sub nsw i64 %1100, 2
  %1102 = load i64, ptr %31, align 8, !tbaa !9
  %1103 = sub nsw i64 %1102, 1
  %1104 = mul nsw i64 %1101, %1103
  %1105 = sdiv i64 %1104, 2
  %1106 = add nsw i64 %1099, %1105
  store i64 %1106, ptr %15, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %27, ptr noundef %47)
  %1107 = load ptr, ptr %9, align 8, !tbaa !5
  %1108 = load i64, ptr %15, align 8, !tbaa !9
  %1109 = getelementptr inbounds %struct.doublecomplex, ptr %1107, i64 %1108
  %1110 = getelementptr inbounds %struct.doublecomplex, ptr %1109, i32 0, i32 0
  %1111 = load double, ptr %1110, align 8, !tbaa !13
  %1112 = getelementptr inbounds %struct.doublecomplex, ptr %27, 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 %15, align 8, !tbaa !9
  %1116 = getelementptr inbounds %struct.doublecomplex, ptr %1114, i64 %1115
  %1117 = getelementptr inbounds %struct.doublecomplex, ptr %1116, i32 0, i32 1
  %1118 = load double, ptr %1117, align 8, !tbaa !15
  %1119 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 1
  %1120 = load double, ptr %1119, align 8, !tbaa !15
  %1121 = fmul double %1118, %1120
  %1122 = fneg double %1121
  %1123 = call double @llvm.fmuladd.f64(double %1111, double %1113, double %1122)
  %1124 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  store double %1123, ptr %1124, align 8, !tbaa !13
  %1125 = load ptr, ptr %9, align 8, !tbaa !5
  %1126 = load i64, ptr %15, align 8, !tbaa !9
  %1127 = getelementptr inbounds %struct.doublecomplex, ptr %1125, i64 %1126
  %1128 = getelementptr inbounds %struct.doublecomplex, ptr %1127, i32 0, i32 0
  %1129 = load double, ptr %1128, align 8, !tbaa !13
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 1
  %1131 = load double, ptr %1130, align 8, !tbaa !15
  %1132 = load ptr, ptr %9, align 8, !tbaa !5
  %1133 = load i64, ptr %15, align 8, !tbaa !9
  %1134 = getelementptr inbounds %struct.doublecomplex, ptr %1132, i64 %1133
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %1134, i32 0, i32 1
  %1136 = load double, ptr %1135, align 8, !tbaa !15
  %1137 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 0
  %1138 = load double, ptr %1137, align 8, !tbaa !13
  %1139 = fmul double %1136, %1138
  %1140 = call double @llvm.fmuladd.f64(double %1129, double %1131, double %1139)
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  store double %1140, ptr %1141, align 8, !tbaa !15
  %1142 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %1143 = load double, ptr %1142, align 8, !tbaa !13
  %1144 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  %1145 = load double, ptr %1144, align 8, !tbaa !13
  %1146 = fsub double %1143, %1145
  %1147 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %1146, ptr %1147, align 8, !tbaa !13
  %1148 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %1149 = load double, ptr %1148, align 8, !tbaa !15
  %1150 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  %1151 = load double, ptr %1150, align 8, !tbaa !15
  %1152 = fsub double %1149, %1151
  %1153 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %1152, ptr %1153, align 8, !tbaa !15
  %1154 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1155 = load double, ptr %1154, align 8, !tbaa !13
  %1156 = load ptr, ptr %9, align 8, !tbaa !5
  %1157 = load i64, ptr %12, align 8, !tbaa !9
  %1158 = getelementptr inbounds %struct.doublecomplex, ptr %1156, i64 %1157
  %1159 = getelementptr inbounds %struct.doublecomplex, ptr %1158, i32 0, i32 0
  store double %1155, ptr %1159, align 8, !tbaa !13
  %1160 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1161 = load double, ptr %1160, align 8, !tbaa !15
  %1162 = load ptr, ptr %9, align 8, !tbaa !5
  %1163 = load i64, ptr %12, align 8, !tbaa !9
  %1164 = getelementptr inbounds %struct.doublecomplex, ptr %1162, i64 %1163
  %1165 = getelementptr inbounds %struct.doublecomplex, ptr %1164, i32 0, i32 1
  store double %1161, ptr %1165, align 8, !tbaa !15
  br label %1166

1166:                                             ; preds = %1024
  %1167 = load i64, ptr %29, align 8, !tbaa !9
  %1168 = add nsw i64 %1167, -1
  store i64 %1168, ptr %29, align 8, !tbaa !9
  br label %1021, !llvm.loop !19

1169:                                             ; preds = %1021
  %1170 = load i64, ptr %30, align 8, !tbaa !9
  %1171 = load i64, ptr %31, align 8, !tbaa !9
  %1172 = sub nsw i64 %1171, 1
  %1173 = load i64, ptr %31, align 8, !tbaa !9
  %1174 = mul nsw i64 %1172, %1173
  %1175 = sdiv i64 %1174, 2
  %1176 = add nsw i64 %1170, %1175
  store i64 %1176, ptr %12, align 8, !tbaa !9
  %1177 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %1178 = load double, ptr %1177, align 8, !tbaa !13
  %1179 = load ptr, ptr %9, align 8, !tbaa !5
  %1180 = load i64, ptr %12, align 8, !tbaa !9
  %1181 = getelementptr inbounds %struct.doublecomplex, ptr %1179, i64 %1180
  %1182 = getelementptr inbounds %struct.doublecomplex, ptr %1181, i32 0, i32 0
  store double %1178, ptr %1182, align 8, !tbaa !13
  %1183 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %1184 = load double, ptr %1183, align 8, !tbaa !15
  %1185 = load ptr, ptr %9, align 8, !tbaa !5
  %1186 = load i64, ptr %12, align 8, !tbaa !9
  %1187 = getelementptr inbounds %struct.doublecomplex, ptr %1185, i64 %1186
  %1188 = getelementptr inbounds %struct.doublecomplex, ptr %1187, i32 0, i32 1
  store double %1184, ptr %1188, align 8, !tbaa !15
  %1189 = load i64, ptr %30, align 8, !tbaa !9
  %1190 = load i64, ptr %31, align 8, !tbaa !9
  %1191 = sub nsw i64 %1190, 2
  %1192 = load i64, ptr %31, align 8, !tbaa !9
  %1193 = sub nsw i64 %1192, 1
  %1194 = mul nsw i64 %1191, %1193
  %1195 = sdiv i64 %1194, 2
  %1196 = add nsw i64 %1189, %1195
  store i64 %1196, ptr %12, align 8, !tbaa !9
  %1197 = getelementptr inbounds %struct.doublecomplex, ptr %47, i32 0, i32 0
  %1198 = load double, ptr %1197, align 8, !tbaa !13
  %1199 = load ptr, ptr %9, align 8, !tbaa !5
  %1200 = load i64, ptr %12, align 8, !tbaa !9
  %1201 = getelementptr inbounds %struct.doublecomplex, ptr %1199, i64 %1200
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %1201, i32 0, i32 0
  store double %1198, ptr %1202, align 8, !tbaa !13
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %47, i32 0, i32 1
  %1204 = load double, ptr %1203, align 8, !tbaa !15
  %1205 = load ptr, ptr %9, align 8, !tbaa !5
  %1206 = load i64, ptr %12, align 8, !tbaa !9
  %1207 = getelementptr inbounds %struct.doublecomplex, ptr %1205, i64 %1206
  %1208 = getelementptr inbounds %struct.doublecomplex, ptr %1207, i32 0, i32 1
  store double %1204, ptr %1208, align 8, !tbaa !15
  %1209 = load i64, ptr %30, align 8, !tbaa !9
  %1210 = load i64, ptr %30, align 8, !tbaa !9
  %1211 = sub nsw i64 %1210, 1
  %1212 = load i64, ptr %30, align 8, !tbaa !9
  %1213 = mul nsw i64 %1211, %1212
  %1214 = sdiv i64 %1213, 2
  %1215 = add nsw i64 %1209, %1214
  store i64 %1215, ptr %12, align 8, !tbaa !9
  %1216 = load i64, ptr %30, align 8, !tbaa !9
  %1217 = load i64, ptr %30, align 8, !tbaa !9
  %1218 = sub nsw i64 %1217, 1
  %1219 = load i64, ptr %30, align 8, !tbaa !9
  %1220 = mul nsw i64 %1218, %1219
  %1221 = sdiv i64 %1220, 2
  %1222 = add nsw i64 %1216, %1221
  store i64 %1222, ptr %13, align 8, !tbaa !9
  %1223 = load ptr, ptr %9, align 8, !tbaa !5
  %1224 = load i64, ptr %13, align 8, !tbaa !9
  %1225 = getelementptr inbounds %struct.doublecomplex, ptr %1223, i64 %1224
  %1226 = getelementptr inbounds %struct.doublecomplex, ptr %1225, i32 0, i32 0
  %1227 = load double, ptr %1226, align 8, !tbaa !13
  store double %1227, ptr %18, align 8, !tbaa !11
  %1228 = load double, ptr %18, align 8, !tbaa !11
  %1229 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %1228, ptr %1229, align 8, !tbaa !13
  %1230 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double 0.000000e+00, ptr %1230, align 8, !tbaa !15
  %1231 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1232 = load double, ptr %1231, align 8, !tbaa !13
  %1233 = load ptr, ptr %9, align 8, !tbaa !5
  %1234 = load i64, ptr %12, align 8, !tbaa !9
  %1235 = getelementptr inbounds %struct.doublecomplex, ptr %1233, i64 %1234
  %1236 = getelementptr inbounds %struct.doublecomplex, ptr %1235, i32 0, i32 0
  store double %1232, ptr %1236, align 8, !tbaa !13
  %1237 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1238 = load double, ptr %1237, align 8, !tbaa !15
  %1239 = load ptr, ptr %9, align 8, !tbaa !5
  %1240 = load i64, ptr %12, align 8, !tbaa !9
  %1241 = getelementptr inbounds %struct.doublecomplex, ptr %1239, i64 %1240
  %1242 = getelementptr inbounds %struct.doublecomplex, ptr %1241, i32 0, i32 1
  store double %1238, ptr %1242, align 8, !tbaa !15
  br label %1243

1243:                                             ; preds = %1169
  %1244 = load i64, ptr %30, align 8, !tbaa !9
  %1245 = add nsw i64 %1244, -1
  store i64 %1245, ptr %30, align 8, !tbaa !9
  br label %828, !llvm.loop !20

1246:                                             ; preds = %828
  br label %1247

1247:                                             ; preds = %1246, %730
  br label %1248

1248:                                             ; preds = %1247, %702
  br label %1249

1249:                                             ; preds = %1248, %193
  %1250 = load i64, ptr %52, align 8, !tbaa !9
  %1251 = icmp eq i64 %1250, 1
  br i1 %1251, label %1252, label %1257

1252:                                             ; preds = %1249
  %1253 = load i64, ptr %40, align 8, !tbaa !9
  %1254 = load ptr, ptr %10, align 8, !tbaa !5
  %1255 = load i64, ptr %31, align 8, !tbaa !9
  %1256 = getelementptr inbounds i64, ptr %1254, i64 %1255
  store i64 %1253, ptr %1256, align 8, !tbaa !9
  br label %1269

1257:                                             ; preds = %1249
  %1258 = load i64, ptr %40, align 8, !tbaa !9
  %1259 = sub nsw i64 0, %1258
  %1260 = load ptr, ptr %10, align 8, !tbaa !5
  %1261 = load i64, ptr %31, align 8, !tbaa !9
  %1262 = getelementptr inbounds i64, ptr %1260, i64 %1261
  store i64 %1259, ptr %1262, align 8, !tbaa !9
  %1263 = load i64, ptr %40, align 8, !tbaa !9
  %1264 = sub nsw i64 0, %1263
  %1265 = load ptr, ptr %10, align 8, !tbaa !5
  %1266 = load i64, ptr %31, align 8, !tbaa !9
  %1267 = sub nsw i64 %1266, 1
  %1268 = getelementptr inbounds i64, ptr %1265, i64 %1267
  store i64 %1264, ptr %1268, align 8, !tbaa !9
  br label %1269

1269:                                             ; preds = %1257, %1252
  %1270 = load i64, ptr %52, align 8, !tbaa !9
  %1271 = load i64, ptr %31, align 8, !tbaa !9
  %1272 = sub nsw i64 %1271, %1270
  store i64 %1272, ptr %31, align 8, !tbaa !9
  %1273 = load i64, ptr %44, align 8, !tbaa !9
  %1274 = load i64, ptr %31, align 8, !tbaa !9
  %1275 = sub nsw i64 %1273, %1274
  store i64 %1275, ptr %38, align 8, !tbaa !9
  br label %106

1276:                                             ; preds = %89
  store i64 1, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  %1277 = load ptr, ptr %8, align 8, !tbaa !5
  %1278 = load i64, ptr %1277, align 8, !tbaa !9
  %1279 = load ptr, ptr %8, align 8, !tbaa !5
  %1280 = load i64, ptr %1279, align 8, !tbaa !9
  %1281 = add nsw i64 %1280, 1
  %1282 = mul nsw i64 %1278, %1281
  %1283 = sdiv i64 %1282, 2
  store i64 %1283, ptr %46, align 8, !tbaa !9
  br label %1284

1284:                                             ; preds = %2549, %1276
  %1285 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1285, ptr %44, align 8, !tbaa !9
  %1286 = load i64, ptr %31, align 8, !tbaa !9
  %1287 = load ptr, ptr %8, align 8, !tbaa !5
  %1288 = load i64, ptr %1287, align 8, !tbaa !9
  %1289 = icmp sgt i64 %1286, %1288
  br i1 %1289, label %1290, label %1291

1290:                                             ; preds = %1284
  br label %2560

1291:                                             ; preds = %1284
  store i64 1, ptr %52, align 8, !tbaa !9
  %1292 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1292, ptr %12, align 8, !tbaa !9
  %1293 = load ptr, ptr %9, align 8, !tbaa !5
  %1294 = load i64, ptr %12, align 8, !tbaa !9
  %1295 = getelementptr inbounds %struct.doublecomplex, ptr %1293, i64 %1294
  %1296 = getelementptr inbounds %struct.doublecomplex, ptr %1295, i32 0, i32 0
  %1297 = load double, ptr %1296, align 8, !tbaa !13
  store double %1297, ptr %18, align 8, !tbaa !11
  %1298 = load double, ptr %18, align 8, !tbaa !11
  %1299 = fcmp oge double %1298, 0.000000e+00
  br i1 %1299, label %1300, label %1302

1300:                                             ; preds = %1291
  %1301 = load double, ptr %18, align 8, !tbaa !11
  br label %1305

1302:                                             ; preds = %1291
  %1303 = load double, ptr %18, align 8, !tbaa !11
  %1304 = fneg double %1303
  br label %1305

1305:                                             ; preds = %1302, %1300
  %1306 = phi double [ %1301, %1300 ], [ %1304, %1302 ]
  store double %1306, ptr %54, align 8, !tbaa !11
  %1307 = load i64, ptr %31, align 8, !tbaa !9
  %1308 = load ptr, ptr %8, align 8, !tbaa !5
  %1309 = load i64, ptr %1308, align 8, !tbaa !9
  %1310 = icmp slt i64 %1307, %1309
  br i1 %1310, label %1311, label %1360

1311:                                             ; preds = %1305
  %1312 = load ptr, ptr %8, align 8, !tbaa !5
  %1313 = load i64, ptr %1312, align 8, !tbaa !9
  %1314 = load i64, ptr %31, align 8, !tbaa !9
  %1315 = sub nsw i64 %1313, %1314
  store i64 %1315, ptr %12, align 8, !tbaa !9
  %1316 = load i64, ptr %31, align 8, !tbaa !9
  %1317 = load ptr, ptr %9, align 8, !tbaa !5
  %1318 = load i64, ptr %38, align 8, !tbaa !9
  %1319 = add nsw i64 %1318, 1
  %1320 = getelementptr inbounds %struct.doublecomplex, ptr %1317, i64 %1319
  %1321 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %1320, ptr noundef @c__1)
  %1322 = add nsw i64 %1316, %1321
  store i64 %1322, ptr %49, align 8, !tbaa !9
  %1323 = load i64, ptr %38, align 8, !tbaa !9
  %1324 = load i64, ptr %49, align 8, !tbaa !9
  %1325 = add nsw i64 %1323, %1324
  %1326 = load i64, ptr %31, align 8, !tbaa !9
  %1327 = sub nsw i64 %1325, %1326
  store i64 %1327, ptr %12, align 8, !tbaa !9
  %1328 = load ptr, ptr %9, align 8, !tbaa !5
  %1329 = load i64, ptr %12, align 8, !tbaa !9
  %1330 = getelementptr inbounds %struct.doublecomplex, ptr %1328, i64 %1329
  %1331 = getelementptr inbounds %struct.doublecomplex, ptr %1330, i32 0, i32 0
  %1332 = load double, ptr %1331, align 8, !tbaa !13
  store double %1332, ptr %18, align 8, !tbaa !11
  %1333 = load double, ptr %18, align 8, !tbaa !11
  %1334 = fcmp oge double %1333, 0.000000e+00
  br i1 %1334, label %1335, label %1337

1335:                                             ; preds = %1311
  %1336 = load double, ptr %18, align 8, !tbaa !11
  br label %1340

1337:                                             ; preds = %1311
  %1338 = load double, ptr %18, align 8, !tbaa !11
  %1339 = fneg double %1338
  br label %1340

1340:                                             ; preds = %1337, %1335
  %1341 = phi double [ %1336, %1335 ], [ %1339, %1337 ]
  %1342 = load ptr, ptr %9, align 8, !tbaa !5
  %1343 = load i64, ptr %38, align 8, !tbaa !9
  %1344 = load i64, ptr %49, align 8, !tbaa !9
  %1345 = add nsw i64 %1343, %1344
  %1346 = load i64, ptr %31, align 8, !tbaa !9
  %1347 = sub nsw i64 %1345, %1346
  %1348 = getelementptr inbounds %struct.doublecomplex, ptr %1342, i64 %1347
  %1349 = call double @d_imag(ptr noundef %1348)
  store double %1349, ptr %19, align 8, !tbaa !11
  %1350 = load double, ptr %19, align 8, !tbaa !11
  %1351 = fcmp oge double %1350, 0.000000e+00
  br i1 %1351, label %1352, label %1354

1352:                                             ; preds = %1340
  %1353 = load double, ptr %19, align 8, !tbaa !11
  br label %1357

1354:                                             ; preds = %1340
  %1355 = load double, ptr %19, align 8, !tbaa !11
  %1356 = fneg double %1355
  br label %1357

1357:                                             ; preds = %1354, %1352
  %1358 = phi double [ %1353, %1352 ], [ %1356, %1354 ]
  %1359 = fadd double %1341, %1358
  store double %1359, ptr %55, align 8, !tbaa !11
  br label %1361

1360:                                             ; preds = %1305
  store double 0.000000e+00, ptr %55, align 8, !tbaa !11
  br label %1361

1361:                                             ; preds = %1360, %1357
  %1362 = load double, ptr %54, align 8, !tbaa !11
  %1363 = load double, ptr %55, align 8, !tbaa !11
  %1364 = fcmp oge double %1362, %1363
  br i1 %1364, label %1365, label %1367

1365:                                             ; preds = %1361
  %1366 = load double, ptr %54, align 8, !tbaa !11
  br label %1369

1367:                                             ; preds = %1361
  %1368 = load double, ptr %55, align 8, !tbaa !11
  br label %1369

1369:                                             ; preds = %1367, %1365
  %1370 = phi double [ %1366, %1365 ], [ %1368, %1367 ]
  %1371 = fcmp oeq double %1370, 0.000000e+00
  br i1 %1371, label %1372, label %1397

1372:                                             ; preds = %1369
  %1373 = load ptr, ptr %11, align 8, !tbaa !5
  %1374 = load i64, ptr %1373, align 8, !tbaa !9
  %1375 = icmp eq i64 %1374, 0
  br i1 %1375, label %1376, label %1379

1376:                                             ; preds = %1372
  %1377 = load i64, ptr %31, align 8, !tbaa !9
  %1378 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 %1377, ptr %1378, align 8, !tbaa !9
  br label %1379

1379:                                             ; preds = %1376, %1372
  %1380 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %1380, ptr %40, align 8, !tbaa !9
  %1381 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1381, ptr %12, align 8, !tbaa !9
  %1382 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1382, ptr %13, align 8, !tbaa !9
  %1383 = load ptr, ptr %9, align 8, !tbaa !5
  %1384 = load i64, ptr %13, align 8, !tbaa !9
  %1385 = getelementptr inbounds %struct.doublecomplex, ptr %1383, i64 %1384
  %1386 = getelementptr inbounds %struct.doublecomplex, ptr %1385, i32 0, i32 0
  %1387 = load double, ptr %1386, align 8, !tbaa !13
  store double %1387, ptr %18, align 8, !tbaa !11
  %1388 = load double, ptr %18, align 8, !tbaa !11
  %1389 = load ptr, ptr %9, align 8, !tbaa !5
  %1390 = load i64, ptr %12, align 8, !tbaa !9
  %1391 = getelementptr inbounds %struct.doublecomplex, ptr %1389, i64 %1390
  %1392 = getelementptr inbounds %struct.doublecomplex, ptr %1391, i32 0, i32 0
  store double %1388, ptr %1392, align 8, !tbaa !13
  %1393 = load ptr, ptr %9, align 8, !tbaa !5
  %1394 = load i64, ptr %12, align 8, !tbaa !9
  %1395 = getelementptr inbounds %struct.doublecomplex, ptr %1393, i64 %1394
  %1396 = getelementptr inbounds %struct.doublecomplex, ptr %1395, i32 0, i32 1
  store double 0.000000e+00, ptr %1396, align 8, !tbaa !15
  br label %2529

1397:                                             ; preds = %1369
  %1398 = load double, ptr %54, align 8, !tbaa !11
  %1399 = load double, ptr %51, align 8, !tbaa !11
  %1400 = load double, ptr %55, align 8, !tbaa !11
  %1401 = fmul double %1399, %1400
  %1402 = fcmp oge double %1398, %1401
  br i1 %1402, label %1403, label %1405

1403:                                             ; preds = %1397
  %1404 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %1404, ptr %40, align 8, !tbaa !9
  br label %1608

1405:                                             ; preds = %1397
  store double 0.000000e+00, ptr %56, align 8, !tbaa !11
  %1406 = load i64, ptr %38, align 8, !tbaa !9
  %1407 = load i64, ptr %49, align 8, !tbaa !9
  %1408 = add nsw i64 %1406, %1407
  %1409 = load i64, ptr %31, align 8, !tbaa !9
  %1410 = sub nsw i64 %1408, %1409
  store i64 %1410, ptr %42, align 8, !tbaa !9
  %1411 = load i64, ptr %49, align 8, !tbaa !9
  %1412 = sub nsw i64 %1411, 1
  store i64 %1412, ptr %12, align 8, !tbaa !9
  %1413 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %1413, ptr %30, align 8, !tbaa !9
  br label %1414

1414:                                             ; preds = %1488, %1405
  %1415 = load i64, ptr %30, align 8, !tbaa !9
  %1416 = load i64, ptr %12, align 8, !tbaa !9
  %1417 = icmp sle i64 %1415, %1416
  br i1 %1417, label %1418, label %1491

1418:                                             ; preds = %1414
  %1419 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %1419, ptr %13, align 8, !tbaa !9
  %1420 = load ptr, ptr %9, align 8, !tbaa !5
  %1421 = load i64, ptr %13, align 8, !tbaa !9
  %1422 = getelementptr inbounds %struct.doublecomplex, ptr %1420, i64 %1421
  %1423 = getelementptr inbounds %struct.doublecomplex, ptr %1422, i32 0, i32 0
  %1424 = load double, ptr %1423, align 8, !tbaa !13
  store double %1424, ptr %18, align 8, !tbaa !11
  %1425 = load double, ptr %18, align 8, !tbaa !11
  %1426 = fcmp oge double %1425, 0.000000e+00
  br i1 %1426, label %1427, label %1429

1427:                                             ; preds = %1418
  %1428 = load double, ptr %18, align 8, !tbaa !11
  br label %1432

1429:                                             ; preds = %1418
  %1430 = load double, ptr %18, align 8, !tbaa !11
  %1431 = fneg double %1430
  br label %1432

1432:                                             ; preds = %1429, %1427
  %1433 = phi double [ %1428, %1427 ], [ %1431, %1429 ]
  %1434 = load ptr, ptr %9, align 8, !tbaa !5
  %1435 = load i64, ptr %42, align 8, !tbaa !9
  %1436 = getelementptr inbounds %struct.doublecomplex, ptr %1434, i64 %1435
  %1437 = call double @d_imag(ptr noundef %1436)
  store double %1437, ptr %19, align 8, !tbaa !11
  %1438 = load double, ptr %19, align 8, !tbaa !11
  %1439 = fcmp oge double %1438, 0.000000e+00
  br i1 %1439, label %1440, label %1442

1440:                                             ; preds = %1432
  %1441 = load double, ptr %19, align 8, !tbaa !11
  br label %1445

1442:                                             ; preds = %1432
  %1443 = load double, ptr %19, align 8, !tbaa !11
  %1444 = fneg double %1443
  br label %1445

1445:                                             ; preds = %1442, %1440
  %1446 = phi double [ %1441, %1440 ], [ %1444, %1442 ]
  %1447 = fadd double %1433, %1446
  %1448 = load double, ptr %56, align 8, !tbaa !11
  %1449 = fcmp ogt double %1447, %1448
  br i1 %1449, label %1450, label %1481

1450:                                             ; preds = %1445
  %1451 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %1451, ptr %13, align 8, !tbaa !9
  %1452 = load ptr, ptr %9, align 8, !tbaa !5
  %1453 = load i64, ptr %13, align 8, !tbaa !9
  %1454 = getelementptr inbounds %struct.doublecomplex, ptr %1452, i64 %1453
  %1455 = getelementptr inbounds %struct.doublecomplex, ptr %1454, i32 0, i32 0
  %1456 = load double, ptr %1455, align 8, !tbaa !13
  store double %1456, ptr %18, align 8, !tbaa !11
  %1457 = load double, ptr %18, align 8, !tbaa !11
  %1458 = fcmp oge double %1457, 0.000000e+00
  br i1 %1458, label %1459, label %1461

1459:                                             ; preds = %1450
  %1460 = load double, ptr %18, align 8, !tbaa !11
  br label %1464

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

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

1472:                                             ; preds = %1464
  %1473 = load double, ptr %19, align 8, !tbaa !11
  br label %1477

1474:                                             ; preds = %1464
  %1475 = load double, ptr %19, align 8, !tbaa !11
  %1476 = fneg double %1475
  br label %1477

1477:                                             ; preds = %1474, %1472
  %1478 = phi double [ %1473, %1472 ], [ %1476, %1474 ]
  %1479 = fadd double %1465, %1478
  store double %1479, ptr %56, align 8, !tbaa !11
  %1480 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %1480, ptr %50, align 8, !tbaa !9
  br label %1481

1481:                                             ; preds = %1477, %1445
  %1482 = load i64, ptr %42, align 8, !tbaa !9
  %1483 = load ptr, ptr %8, align 8, !tbaa !5
  %1484 = load i64, ptr %1483, align 8, !tbaa !9
  %1485 = add nsw i64 %1482, %1484
  %1486 = load i64, ptr %30, align 8, !tbaa !9
  %1487 = sub nsw i64 %1485, %1486
  store i64 %1487, ptr %42, align 8, !tbaa !9
  br label %1488

1488:                                             ; preds = %1481
  %1489 = load i64, ptr %30, align 8, !tbaa !9
  %1490 = add nsw i64 %1489, 1
  store i64 %1490, ptr %30, align 8, !tbaa !9
  br label %1414, !llvm.loop !21

1491:                                             ; preds = %1414
  %1492 = load i64, ptr %46, align 8, !tbaa !9
  %1493 = load ptr, ptr %8, align 8, !tbaa !5
  %1494 = load i64, ptr %1493, align 8, !tbaa !9
  %1495 = load i64, ptr %49, align 8, !tbaa !9
  %1496 = sub nsw i64 %1494, %1495
  %1497 = add nsw i64 %1496, 1
  %1498 = load ptr, ptr %8, align 8, !tbaa !5
  %1499 = load i64, ptr %1498, align 8, !tbaa !9
  %1500 = load i64, ptr %49, align 8, !tbaa !9
  %1501 = sub nsw i64 %1499, %1500
  %1502 = add nsw i64 %1501, 2
  %1503 = mul nsw i64 %1497, %1502
  %1504 = sdiv i64 %1503, 2
  %1505 = sub nsw i64 %1492, %1504
  %1506 = add nsw i64 %1505, 1
  store i64 %1506, ptr %45, align 8, !tbaa !9
  %1507 = load i64, ptr %49, align 8, !tbaa !9
  %1508 = load ptr, ptr %8, align 8, !tbaa !5
  %1509 = load i64, ptr %1508, align 8, !tbaa !9
  %1510 = icmp slt i64 %1507, %1509
  br i1 %1510, label %1511, label %1570

1511:                                             ; preds = %1491
  %1512 = load ptr, ptr %8, align 8, !tbaa !5
  %1513 = load i64, ptr %1512, align 8, !tbaa !9
  %1514 = load i64, ptr %49, align 8, !tbaa !9
  %1515 = sub nsw i64 %1513, %1514
  store i64 %1515, ptr %12, align 8, !tbaa !9
  %1516 = load i64, ptr %49, align 8, !tbaa !9
  %1517 = load ptr, ptr %9, align 8, !tbaa !5
  %1518 = load i64, ptr %45, align 8, !tbaa !9
  %1519 = add nsw i64 %1518, 1
  %1520 = getelementptr inbounds %struct.doublecomplex, ptr %1517, i64 %1519
  %1521 = call i64 @f2c_izamax(ptr noundef %12, ptr noundef %1520, ptr noundef @c__1)
  %1522 = add nsw i64 %1516, %1521
  store i64 %1522, ptr %50, align 8, !tbaa !9
  %1523 = load i64, ptr %45, align 8, !tbaa !9
  %1524 = load i64, ptr %50, align 8, !tbaa !9
  %1525 = add nsw i64 %1523, %1524
  %1526 = load i64, ptr %49, align 8, !tbaa !9
  %1527 = sub nsw i64 %1525, %1526
  store i64 %1527, ptr %12, align 8, !tbaa !9
  %1528 = load double, ptr %56, align 8, !tbaa !11
  store double %1528, ptr %20, align 8, !tbaa !11
  %1529 = load ptr, ptr %9, align 8, !tbaa !5
  %1530 = load i64, ptr %12, align 8, !tbaa !9
  %1531 = getelementptr inbounds %struct.doublecomplex, ptr %1529, i64 %1530
  %1532 = getelementptr inbounds %struct.doublecomplex, ptr %1531, i32 0, i32 0
  %1533 = load double, ptr %1532, align 8, !tbaa !13
  store double %1533, ptr %18, align 8, !tbaa !11
  %1534 = load double, ptr %18, align 8, !tbaa !11
  %1535 = fcmp oge double %1534, 0.000000e+00
  br i1 %1535, label %1536, label %1538

1536:                                             ; preds = %1511
  %1537 = load double, ptr %18, align 8, !tbaa !11
  br label %1541

1538:                                             ; preds = %1511
  %1539 = load double, ptr %18, align 8, !tbaa !11
  %1540 = fneg double %1539
  br label %1541

1541:                                             ; preds = %1538, %1536
  %1542 = phi double [ %1537, %1536 ], [ %1540, %1538 ]
  %1543 = load ptr, ptr %9, align 8, !tbaa !5
  %1544 = load i64, ptr %45, align 8, !tbaa !9
  %1545 = load i64, ptr %50, align 8, !tbaa !9
  %1546 = add nsw i64 %1544, %1545
  %1547 = load i64, ptr %49, align 8, !tbaa !9
  %1548 = sub nsw i64 %1546, %1547
  %1549 = getelementptr inbounds %struct.doublecomplex, ptr %1543, i64 %1548
  %1550 = call double @d_imag(ptr noundef %1549)
  store double %1550, ptr %19, align 8, !tbaa !11
  %1551 = load double, ptr %19, align 8, !tbaa !11
  %1552 = fcmp oge double %1551, 0.000000e+00
  br i1 %1552, label %1553, label %1555

1553:                                             ; preds = %1541
  %1554 = load double, ptr %19, align 8, !tbaa !11
  br label %1558

1555:                                             ; preds = %1541
  %1556 = load double, ptr %19, align 8, !tbaa !11
  %1557 = fneg double %1556
  br label %1558

1558:                                             ; preds = %1555, %1553
  %1559 = phi double [ %1554, %1553 ], [ %1557, %1555 ]
  %1560 = fadd double %1542, %1559
  store double %1560, ptr %21, align 8, !tbaa !11
  %1561 = load double, ptr %20, align 8, !tbaa !11
  %1562 = load double, ptr %21, align 8, !tbaa !11
  %1563 = fcmp oge double %1561, %1562
  br i1 %1563, label %1564, label %1566

1564:                                             ; preds = %1558
  %1565 = load double, ptr %20, align 8, !tbaa !11
  br label %1568

1566:                                             ; preds = %1558
  %1567 = load double, ptr %21, align 8, !tbaa !11
  br label %1568

1568:                                             ; preds = %1566, %1564
  %1569 = phi double [ %1565, %1564 ], [ %1567, %1566 ]
  store double %1569, ptr %56, align 8, !tbaa !11
  br label %1570

1570:                                             ; preds = %1568, %1491
  %1571 = load double, ptr %54, align 8, !tbaa !11
  %1572 = load double, ptr %51, align 8, !tbaa !11
  %1573 = load double, ptr %55, align 8, !tbaa !11
  %1574 = fmul double %1572, %1573
  %1575 = load double, ptr %55, align 8, !tbaa !11
  %1576 = load double, ptr %56, align 8, !tbaa !11
  %1577 = fdiv double %1575, %1576
  %1578 = fmul double %1574, %1577
  %1579 = fcmp oge double %1571, %1578
  br i1 %1579, label %1580, label %1582

1580:                                             ; preds = %1570
  %1581 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %1581, ptr %40, align 8, !tbaa !9
  br label %1607

1582:                                             ; preds = %1570
  %1583 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1583, ptr %12, align 8, !tbaa !9
  %1584 = load ptr, ptr %9, align 8, !tbaa !5
  %1585 = load i64, ptr %12, align 8, !tbaa !9
  %1586 = getelementptr inbounds %struct.doublecomplex, ptr %1584, i64 %1585
  %1587 = getelementptr inbounds %struct.doublecomplex, ptr %1586, i32 0, i32 0
  %1588 = load double, ptr %1587, align 8, !tbaa !13
  store double %1588, ptr %18, align 8, !tbaa !11
  %1589 = load double, ptr %18, align 8, !tbaa !11
  %1590 = fcmp oge double %1589, 0.000000e+00
  br i1 %1590, label %1591, label %1593

1591:                                             ; preds = %1582
  %1592 = load double, ptr %18, align 8, !tbaa !11
  br label %1596

1593:                                             ; preds = %1582
  %1594 = load double, ptr %18, align 8, !tbaa !11
  %1595 = fneg double %1594
  br label %1596

1596:                                             ; preds = %1593, %1591
  %1597 = phi double [ %1592, %1591 ], [ %1595, %1593 ]
  %1598 = load double, ptr %51, align 8, !tbaa !11
  %1599 = load double, ptr %56, align 8, !tbaa !11
  %1600 = fmul double %1598, %1599
  %1601 = fcmp oge double %1597, %1600
  br i1 %1601, label %1602, label %1604

1602:                                             ; preds = %1596
  %1603 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %1603, ptr %40, align 8, !tbaa !9
  br label %1606

1604:                                             ; preds = %1596
  %1605 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %1605, ptr %40, align 8, !tbaa !9
  store i64 2, ptr %52, align 8, !tbaa !9
  br label %1606

1606:                                             ; preds = %1604, %1602
  br label %1607

1607:                                             ; preds = %1606, %1580
  br label %1608

1608:                                             ; preds = %1607, %1403
  %1609 = load i64, ptr %31, align 8, !tbaa !9
  %1610 = load i64, ptr %52, align 8, !tbaa !9
  %1611 = add nsw i64 %1609, %1610
  %1612 = sub nsw i64 %1611, 1
  store i64 %1612, ptr %39, align 8, !tbaa !9
  %1613 = load i64, ptr %52, align 8, !tbaa !9
  %1614 = icmp eq i64 %1613, 2
  br i1 %1614, label %1615, label %1623

1615:                                             ; preds = %1608
  %1616 = load i64, ptr %44, align 8, !tbaa !9
  %1617 = load ptr, ptr %8, align 8, !tbaa !5
  %1618 = load i64, ptr %1617, align 8, !tbaa !9
  %1619 = add nsw i64 %1616, %1618
  %1620 = load i64, ptr %31, align 8, !tbaa !9
  %1621 = sub nsw i64 %1619, %1620
  %1622 = add nsw i64 %1621, 1
  store i64 %1622, ptr %44, align 8, !tbaa !9
  br label %1623

1623:                                             ; preds = %1615, %1608
  %1624 = load i64, ptr %40, align 8, !tbaa !9
  %1625 = load i64, ptr %39, align 8, !tbaa !9
  %1626 = icmp ne i64 %1624, %1625
  br i1 %1626, label %1627, label %1854

1627:                                             ; preds = %1623
  %1628 = load i64, ptr %40, align 8, !tbaa !9
  %1629 = load ptr, ptr %8, align 8, !tbaa !5
  %1630 = load i64, ptr %1629, align 8, !tbaa !9
  %1631 = icmp slt i64 %1628, %1630
  br i1 %1631, label %1632, label %1650

1632:                                             ; preds = %1627
  %1633 = load ptr, ptr %8, align 8, !tbaa !5
  %1634 = load i64, ptr %1633, align 8, !tbaa !9
  %1635 = load i64, ptr %40, align 8, !tbaa !9
  %1636 = sub nsw i64 %1634, %1635
  store i64 %1636, ptr %12, align 8, !tbaa !9
  %1637 = load ptr, ptr %9, align 8, !tbaa !5
  %1638 = load i64, ptr %44, align 8, !tbaa !9
  %1639 = load i64, ptr %40, align 8, !tbaa !9
  %1640 = add nsw i64 %1638, %1639
  %1641 = load i64, ptr %39, align 8, !tbaa !9
  %1642 = sub nsw i64 %1640, %1641
  %1643 = add nsw i64 %1642, 1
  %1644 = getelementptr inbounds %struct.doublecomplex, ptr %1637, i64 %1643
  %1645 = load ptr, ptr %9, align 8, !tbaa !5
  %1646 = load i64, ptr %45, align 8, !tbaa !9
  %1647 = add nsw i64 %1646, 1
  %1648 = getelementptr inbounds %struct.doublecomplex, ptr %1645, i64 %1647
  %1649 = call i32 @f2c_zswap(ptr noundef %12, ptr noundef %1644, ptr noundef @c__1, ptr noundef %1648, ptr noundef @c__1)
  br label %1650

1650:                                             ; preds = %1632, %1627
  %1651 = load i64, ptr %44, align 8, !tbaa !9
  %1652 = load i64, ptr %40, align 8, !tbaa !9
  %1653 = add nsw i64 %1651, %1652
  %1654 = load i64, ptr %39, align 8, !tbaa !9
  %1655 = sub nsw i64 %1653, %1654
  store i64 %1655, ptr %42, align 8, !tbaa !9
  %1656 = load i64, ptr %40, align 8, !tbaa !9
  %1657 = sub nsw i64 %1656, 1
  store i64 %1657, ptr %12, align 8, !tbaa !9
  %1658 = load i64, ptr %39, align 8, !tbaa !9
  %1659 = add nsw i64 %1658, 1
  store i64 %1659, ptr %30, align 8, !tbaa !9
  br label %1660

1660:                                             ; preds = %1718, %1650
  %1661 = load i64, ptr %30, align 8, !tbaa !9
  %1662 = load i64, ptr %12, align 8, !tbaa !9
  %1663 = icmp sle i64 %1661, %1662
  br i1 %1663, label %1664, label %1721

1664:                                             ; preds = %1660
  %1665 = load i64, ptr %42, align 8, !tbaa !9
  %1666 = load ptr, ptr %8, align 8, !tbaa !5
  %1667 = load i64, ptr %1666, align 8, !tbaa !9
  %1668 = add nsw i64 %1665, %1667
  %1669 = load i64, ptr %30, align 8, !tbaa !9
  %1670 = sub nsw i64 %1668, %1669
  %1671 = add nsw i64 %1670, 1
  store i64 %1671, ptr %42, align 8, !tbaa !9
  %1672 = load ptr, ptr %9, align 8, !tbaa !5
  %1673 = load i64, ptr %44, align 8, !tbaa !9
  %1674 = load i64, ptr %30, align 8, !tbaa !9
  %1675 = add nsw i64 %1673, %1674
  %1676 = load i64, ptr %39, align 8, !tbaa !9
  %1677 = sub nsw i64 %1675, %1676
  %1678 = getelementptr inbounds %struct.doublecomplex, ptr %1672, i64 %1677
  call void @d_cnjg(ptr noundef %22, ptr noundef %1678)
  %1679 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1680 = load double, ptr %1679, align 8, !tbaa !13
  %1681 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %1680, ptr %1681, align 8, !tbaa !13
  %1682 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1683 = load double, ptr %1682, align 8, !tbaa !15
  %1684 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %1683, ptr %1684, align 8, !tbaa !15
  %1685 = load i64, ptr %44, align 8, !tbaa !9
  %1686 = load i64, ptr %30, align 8, !tbaa !9
  %1687 = add nsw i64 %1685, %1686
  %1688 = load i64, ptr %39, align 8, !tbaa !9
  %1689 = sub nsw i64 %1687, %1688
  store i64 %1689, ptr %13, align 8, !tbaa !9
  %1690 = load ptr, ptr %9, align 8, !tbaa !5
  %1691 = load i64, ptr %42, align 8, !tbaa !9
  %1692 = getelementptr inbounds %struct.doublecomplex, ptr %1690, i64 %1691
  call void @d_cnjg(ptr noundef %22, ptr noundef %1692)
  %1693 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1694 = load double, ptr %1693, align 8, !tbaa !13
  %1695 = load ptr, ptr %9, align 8, !tbaa !5
  %1696 = load i64, ptr %13, align 8, !tbaa !9
  %1697 = getelementptr inbounds %struct.doublecomplex, ptr %1695, i64 %1696
  %1698 = getelementptr inbounds %struct.doublecomplex, ptr %1697, i32 0, i32 0
  store double %1694, ptr %1698, align 8, !tbaa !13
  %1699 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1700 = load double, ptr %1699, align 8, !tbaa !15
  %1701 = load ptr, ptr %9, align 8, !tbaa !5
  %1702 = load i64, ptr %13, align 8, !tbaa !9
  %1703 = getelementptr inbounds %struct.doublecomplex, ptr %1701, i64 %1702
  %1704 = getelementptr inbounds %struct.doublecomplex, ptr %1703, i32 0, i32 1
  store double %1700, ptr %1704, align 8, !tbaa !15
  %1705 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %1705, ptr %13, align 8, !tbaa !9
  %1706 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %1707 = load double, ptr %1706, align 8, !tbaa !13
  %1708 = load ptr, ptr %9, align 8, !tbaa !5
  %1709 = load i64, ptr %13, align 8, !tbaa !9
  %1710 = getelementptr inbounds %struct.doublecomplex, ptr %1708, i64 %1709
  %1711 = getelementptr inbounds %struct.doublecomplex, ptr %1710, i32 0, i32 0
  store double %1707, ptr %1711, align 8, !tbaa !13
  %1712 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %1713 = load double, ptr %1712, align 8, !tbaa !15
  %1714 = load ptr, ptr %9, align 8, !tbaa !5
  %1715 = load i64, ptr %13, align 8, !tbaa !9
  %1716 = getelementptr inbounds %struct.doublecomplex, ptr %1714, i64 %1715
  %1717 = getelementptr inbounds %struct.doublecomplex, ptr %1716, i32 0, i32 1
  store double %1713, ptr %1717, align 8, !tbaa !15
  br label %1718

1718:                                             ; preds = %1664
  %1719 = load i64, ptr %30, align 8, !tbaa !9
  %1720 = add nsw i64 %1719, 1
  store i64 %1720, ptr %30, align 8, !tbaa !9
  br label %1660, !llvm.loop !22

1721:                                             ; preds = %1660
  %1722 = load i64, ptr %44, align 8, !tbaa !9
  %1723 = load i64, ptr %40, align 8, !tbaa !9
  %1724 = add nsw i64 %1722, %1723
  %1725 = load i64, ptr %39, align 8, !tbaa !9
  %1726 = sub nsw i64 %1724, %1725
  store i64 %1726, ptr %12, align 8, !tbaa !9
  %1727 = load ptr, ptr %9, align 8, !tbaa !5
  %1728 = load i64, ptr %44, align 8, !tbaa !9
  %1729 = load i64, ptr %40, align 8, !tbaa !9
  %1730 = add nsw i64 %1728, %1729
  %1731 = load i64, ptr %39, align 8, !tbaa !9
  %1732 = sub nsw i64 %1730, %1731
  %1733 = getelementptr inbounds %struct.doublecomplex, ptr %1727, i64 %1732
  call void @d_cnjg(ptr noundef %22, ptr noundef %1733)
  %1734 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %1735 = load double, ptr %1734, align 8, !tbaa !13
  %1736 = load ptr, ptr %9, align 8, !tbaa !5
  %1737 = load i64, ptr %12, align 8, !tbaa !9
  %1738 = getelementptr inbounds %struct.doublecomplex, ptr %1736, i64 %1737
  %1739 = getelementptr inbounds %struct.doublecomplex, ptr %1738, i32 0, i32 0
  store double %1735, ptr %1739, align 8, !tbaa !13
  %1740 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %1741 = load double, ptr %1740, align 8, !tbaa !15
  %1742 = load ptr, ptr %9, align 8, !tbaa !5
  %1743 = load i64, ptr %12, align 8, !tbaa !9
  %1744 = getelementptr inbounds %struct.doublecomplex, ptr %1742, i64 %1743
  %1745 = getelementptr inbounds %struct.doublecomplex, ptr %1744, i32 0, i32 1
  store double %1741, ptr %1745, align 8, !tbaa !15
  %1746 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1746, ptr %12, align 8, !tbaa !9
  %1747 = load ptr, ptr %9, align 8, !tbaa !5
  %1748 = load i64, ptr %12, align 8, !tbaa !9
  %1749 = getelementptr inbounds %struct.doublecomplex, ptr %1747, i64 %1748
  %1750 = getelementptr inbounds %struct.doublecomplex, ptr %1749, i32 0, i32 0
  %1751 = load double, ptr %1750, align 8, !tbaa !13
  store double %1751, ptr %33, align 8, !tbaa !11
  %1752 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1752, ptr %12, align 8, !tbaa !9
  %1753 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1753, ptr %13, align 8, !tbaa !9
  %1754 = load ptr, ptr %9, align 8, !tbaa !5
  %1755 = load i64, ptr %13, align 8, !tbaa !9
  %1756 = getelementptr inbounds %struct.doublecomplex, ptr %1754, i64 %1755
  %1757 = getelementptr inbounds %struct.doublecomplex, ptr %1756, i32 0, i32 0
  %1758 = load double, ptr %1757, align 8, !tbaa !13
  store double %1758, ptr %18, align 8, !tbaa !11
  %1759 = load double, ptr %18, align 8, !tbaa !11
  %1760 = load ptr, ptr %9, align 8, !tbaa !5
  %1761 = load i64, ptr %12, align 8, !tbaa !9
  %1762 = getelementptr inbounds %struct.doublecomplex, ptr %1760, i64 %1761
  %1763 = getelementptr inbounds %struct.doublecomplex, ptr %1762, i32 0, i32 0
  store double %1759, ptr %1763, align 8, !tbaa !13
  %1764 = load ptr, ptr %9, align 8, !tbaa !5
  %1765 = load i64, ptr %12, align 8, !tbaa !9
  %1766 = getelementptr inbounds %struct.doublecomplex, ptr %1764, i64 %1765
  %1767 = getelementptr inbounds %struct.doublecomplex, ptr %1766, i32 0, i32 1
  store double 0.000000e+00, ptr %1767, align 8, !tbaa !15
  %1768 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1768, ptr %12, align 8, !tbaa !9
  %1769 = load double, ptr %33, align 8, !tbaa !11
  %1770 = load ptr, ptr %9, align 8, !tbaa !5
  %1771 = load i64, ptr %12, align 8, !tbaa !9
  %1772 = getelementptr inbounds %struct.doublecomplex, ptr %1770, i64 %1771
  %1773 = getelementptr inbounds %struct.doublecomplex, ptr %1772, i32 0, i32 0
  store double %1769, ptr %1773, align 8, !tbaa !13
  %1774 = load ptr, ptr %9, align 8, !tbaa !5
  %1775 = load i64, ptr %12, align 8, !tbaa !9
  %1776 = getelementptr inbounds %struct.doublecomplex, ptr %1774, i64 %1775
  %1777 = getelementptr inbounds %struct.doublecomplex, ptr %1776, i32 0, i32 1
  store double 0.000000e+00, ptr %1777, align 8, !tbaa !15
  %1778 = load i64, ptr %52, align 8, !tbaa !9
  %1779 = icmp eq i64 %1778, 2
  br i1 %1779, label %1780, label %1853

1780:                                             ; preds = %1721
  %1781 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1781, ptr %12, align 8, !tbaa !9
  %1782 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1782, ptr %13, align 8, !tbaa !9
  %1783 = load ptr, ptr %9, align 8, !tbaa !5
  %1784 = load i64, ptr %13, align 8, !tbaa !9
  %1785 = getelementptr inbounds %struct.doublecomplex, ptr %1783, i64 %1784
  %1786 = getelementptr inbounds %struct.doublecomplex, ptr %1785, i32 0, i32 0
  %1787 = load double, ptr %1786, align 8, !tbaa !13
  store double %1787, ptr %18, align 8, !tbaa !11
  %1788 = load double, ptr %18, align 8, !tbaa !11
  %1789 = load ptr, ptr %9, align 8, !tbaa !5
  %1790 = load i64, ptr %12, align 8, !tbaa !9
  %1791 = getelementptr inbounds %struct.doublecomplex, ptr %1789, i64 %1790
  %1792 = getelementptr inbounds %struct.doublecomplex, ptr %1791, i32 0, i32 0
  store double %1788, ptr %1792, align 8, !tbaa !13
  %1793 = load ptr, ptr %9, align 8, !tbaa !5
  %1794 = load i64, ptr %12, align 8, !tbaa !9
  %1795 = getelementptr inbounds %struct.doublecomplex, ptr %1793, i64 %1794
  %1796 = getelementptr inbounds %struct.doublecomplex, ptr %1795, i32 0, i32 1
  store double 0.000000e+00, ptr %1796, align 8, !tbaa !15
  %1797 = load i64, ptr %38, align 8, !tbaa !9
  %1798 = add nsw i64 %1797, 1
  store i64 %1798, ptr %12, align 8, !tbaa !9
  %1799 = load ptr, ptr %9, align 8, !tbaa !5
  %1800 = load i64, ptr %12, align 8, !tbaa !9
  %1801 = getelementptr inbounds %struct.doublecomplex, ptr %1799, i64 %1800
  %1802 = getelementptr inbounds %struct.doublecomplex, ptr %1801, i32 0, i32 0
  %1803 = load double, ptr %1802, align 8, !tbaa !13
  %1804 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %1803, ptr %1804, align 8, !tbaa !13
  %1805 = load ptr, ptr %9, align 8, !tbaa !5
  %1806 = load i64, ptr %12, align 8, !tbaa !9
  %1807 = getelementptr inbounds %struct.doublecomplex, ptr %1805, i64 %1806
  %1808 = getelementptr inbounds %struct.doublecomplex, ptr %1807, i32 0, i32 1
  %1809 = load double, ptr %1808, align 8, !tbaa !15
  %1810 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %1809, ptr %1810, align 8, !tbaa !15
  %1811 = load i64, ptr %38, align 8, !tbaa !9
  %1812 = add nsw i64 %1811, 1
  store i64 %1812, ptr %12, align 8, !tbaa !9
  %1813 = load i64, ptr %38, align 8, !tbaa !9
  %1814 = load i64, ptr %40, align 8, !tbaa !9
  %1815 = add nsw i64 %1813, %1814
  %1816 = load i64, ptr %31, align 8, !tbaa !9
  %1817 = sub nsw i64 %1815, %1816
  store i64 %1817, ptr %13, align 8, !tbaa !9
  %1818 = load ptr, ptr %9, align 8, !tbaa !5
  %1819 = load i64, ptr %13, align 8, !tbaa !9
  %1820 = getelementptr inbounds %struct.doublecomplex, ptr %1818, i64 %1819
  %1821 = getelementptr inbounds %struct.doublecomplex, ptr %1820, i32 0, i32 0
  %1822 = load double, ptr %1821, align 8, !tbaa !13
  %1823 = load ptr, ptr %9, align 8, !tbaa !5
  %1824 = load i64, ptr %12, align 8, !tbaa !9
  %1825 = getelementptr inbounds %struct.doublecomplex, ptr %1823, i64 %1824
  %1826 = getelementptr inbounds %struct.doublecomplex, ptr %1825, i32 0, i32 0
  store double %1822, ptr %1826, align 8, !tbaa !13
  %1827 = load ptr, ptr %9, align 8, !tbaa !5
  %1828 = load i64, ptr %13, align 8, !tbaa !9
  %1829 = getelementptr inbounds %struct.doublecomplex, ptr %1827, i64 %1828
  %1830 = getelementptr inbounds %struct.doublecomplex, ptr %1829, i32 0, i32 1
  %1831 = load double, ptr %1830, align 8, !tbaa !15
  %1832 = load ptr, ptr %9, align 8, !tbaa !5
  %1833 = load i64, ptr %12, align 8, !tbaa !9
  %1834 = getelementptr inbounds %struct.doublecomplex, ptr %1832, i64 %1833
  %1835 = getelementptr inbounds %struct.doublecomplex, ptr %1834, i32 0, i32 1
  store double %1831, ptr %1835, align 8, !tbaa !15
  %1836 = load i64, ptr %38, align 8, !tbaa !9
  %1837 = load i64, ptr %40, align 8, !tbaa !9
  %1838 = add nsw i64 %1836, %1837
  %1839 = load i64, ptr %31, align 8, !tbaa !9
  %1840 = sub nsw i64 %1838, %1839
  store i64 %1840, ptr %12, align 8, !tbaa !9
  %1841 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %1842 = load double, ptr %1841, align 8, !tbaa !13
  %1843 = load ptr, ptr %9, align 8, !tbaa !5
  %1844 = load i64, ptr %12, align 8, !tbaa !9
  %1845 = getelementptr inbounds %struct.doublecomplex, ptr %1843, i64 %1844
  %1846 = getelementptr inbounds %struct.doublecomplex, ptr %1845, i32 0, i32 0
  store double %1842, ptr %1846, align 8, !tbaa !13
  %1847 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %1848 = load double, ptr %1847, align 8, !tbaa !15
  %1849 = load ptr, ptr %9, align 8, !tbaa !5
  %1850 = load i64, ptr %12, align 8, !tbaa !9
  %1851 = getelementptr inbounds %struct.doublecomplex, ptr %1849, i64 %1850
  %1852 = getelementptr inbounds %struct.doublecomplex, ptr %1851, i32 0, i32 1
  store double %1848, ptr %1852, align 8, !tbaa !15
  br label %1853

1853:                                             ; preds = %1780, %1721
  br label %1891

1854:                                             ; preds = %1623
  %1855 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1855, ptr %12, align 8, !tbaa !9
  %1856 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1856, ptr %13, align 8, !tbaa !9
  %1857 = load ptr, ptr %9, align 8, !tbaa !5
  %1858 = load i64, ptr %13, align 8, !tbaa !9
  %1859 = getelementptr inbounds %struct.doublecomplex, ptr %1857, i64 %1858
  %1860 = getelementptr inbounds %struct.doublecomplex, ptr %1859, i32 0, i32 0
  %1861 = load double, ptr %1860, align 8, !tbaa !13
  store double %1861, ptr %18, align 8, !tbaa !11
  %1862 = load double, ptr %18, align 8, !tbaa !11
  %1863 = load ptr, ptr %9, align 8, !tbaa !5
  %1864 = load i64, ptr %12, align 8, !tbaa !9
  %1865 = getelementptr inbounds %struct.doublecomplex, ptr %1863, i64 %1864
  %1866 = getelementptr inbounds %struct.doublecomplex, ptr %1865, i32 0, i32 0
  store double %1862, ptr %1866, align 8, !tbaa !13
  %1867 = load ptr, ptr %9, align 8, !tbaa !5
  %1868 = load i64, ptr %12, align 8, !tbaa !9
  %1869 = getelementptr inbounds %struct.doublecomplex, ptr %1867, i64 %1868
  %1870 = getelementptr inbounds %struct.doublecomplex, ptr %1869, i32 0, i32 1
  store double 0.000000e+00, ptr %1870, align 8, !tbaa !15
  %1871 = load i64, ptr %52, align 8, !tbaa !9
  %1872 = icmp eq i64 %1871, 2
  br i1 %1872, label %1873, label %1890

1873:                                             ; preds = %1854
  %1874 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1874, ptr %12, align 8, !tbaa !9
  %1875 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1875, ptr %13, align 8, !tbaa !9
  %1876 = load ptr, ptr %9, align 8, !tbaa !5
  %1877 = load i64, ptr %13, align 8, !tbaa !9
  %1878 = getelementptr inbounds %struct.doublecomplex, ptr %1876, i64 %1877
  %1879 = getelementptr inbounds %struct.doublecomplex, ptr %1878, i32 0, i32 0
  %1880 = load double, ptr %1879, align 8, !tbaa !13
  store double %1880, ptr %18, align 8, !tbaa !11
  %1881 = load double, ptr %18, align 8, !tbaa !11
  %1882 = load ptr, ptr %9, align 8, !tbaa !5
  %1883 = load i64, ptr %12, align 8, !tbaa !9
  %1884 = getelementptr inbounds %struct.doublecomplex, ptr %1882, i64 %1883
  %1885 = getelementptr inbounds %struct.doublecomplex, ptr %1884, i32 0, i32 0
  store double %1881, ptr %1885, align 8, !tbaa !13
  %1886 = load ptr, ptr %9, align 8, !tbaa !5
  %1887 = load i64, ptr %12, align 8, !tbaa !9
  %1888 = getelementptr inbounds %struct.doublecomplex, ptr %1886, i64 %1887
  %1889 = getelementptr inbounds %struct.doublecomplex, ptr %1888, i32 0, i32 1
  store double 0.000000e+00, ptr %1889, align 8, !tbaa !15
  br label %1890

1890:                                             ; preds = %1873, %1854
  br label %1891

1891:                                             ; preds = %1890, %1853
  %1892 = load i64, ptr %52, align 8, !tbaa !9
  %1893 = icmp eq i64 %1892, 1
  br i1 %1893, label %1894, label %1938

1894:                                             ; preds = %1891
  %1895 = load i64, ptr %31, align 8, !tbaa !9
  %1896 = load ptr, ptr %8, align 8, !tbaa !5
  %1897 = load i64, ptr %1896, align 8, !tbaa !9
  %1898 = icmp slt i64 %1895, %1897
  br i1 %1898, label %1899, label %1937

1899:                                             ; preds = %1894
  %1900 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1900, ptr %12, align 8, !tbaa !9
  %1901 = load ptr, ptr %9, align 8, !tbaa !5
  %1902 = load i64, ptr %12, align 8, !tbaa !9
  %1903 = getelementptr inbounds %struct.doublecomplex, ptr %1901, i64 %1902
  %1904 = getelementptr inbounds %struct.doublecomplex, ptr %1903, i32 0, i32 0
  %1905 = load double, ptr %1904, align 8, !tbaa !13
  %1906 = fdiv double 1.000000e+00, %1905
  store double %1906, ptr %33, align 8, !tbaa !11
  %1907 = load ptr, ptr %8, align 8, !tbaa !5
  %1908 = load i64, ptr %1907, align 8, !tbaa !9
  %1909 = load i64, ptr %31, align 8, !tbaa !9
  %1910 = sub nsw i64 %1908, %1909
  store i64 %1910, ptr %12, align 8, !tbaa !9
  %1911 = load double, ptr %33, align 8, !tbaa !11
  %1912 = fneg double %1911
  store double %1912, ptr %18, align 8, !tbaa !11
  %1913 = load ptr, ptr %7, align 8, !tbaa !5
  %1914 = load ptr, ptr %9, align 8, !tbaa !5
  %1915 = load i64, ptr %38, align 8, !tbaa !9
  %1916 = add nsw i64 %1915, 1
  %1917 = getelementptr inbounds %struct.doublecomplex, ptr %1914, i64 %1916
  %1918 = load ptr, ptr %9, align 8, !tbaa !5
  %1919 = load i64, ptr %38, align 8, !tbaa !9
  %1920 = load ptr, ptr %8, align 8, !tbaa !5
  %1921 = load i64, ptr %1920, align 8, !tbaa !9
  %1922 = add nsw i64 %1919, %1921
  %1923 = load i64, ptr %31, align 8, !tbaa !9
  %1924 = sub nsw i64 %1922, %1923
  %1925 = add nsw i64 %1924, 1
  %1926 = getelementptr inbounds %struct.doublecomplex, ptr %1918, i64 %1925
  %1927 = call i32 @f2c_zhpr(ptr noundef %1913, ptr noundef %12, ptr noundef %18, ptr noundef %1917, ptr noundef @c__1, ptr noundef %1926)
  %1928 = load ptr, ptr %8, align 8, !tbaa !5
  %1929 = load i64, ptr %1928, align 8, !tbaa !9
  %1930 = load i64, ptr %31, align 8, !tbaa !9
  %1931 = sub nsw i64 %1929, %1930
  store i64 %1931, ptr %12, align 8, !tbaa !9
  %1932 = load ptr, ptr %9, align 8, !tbaa !5
  %1933 = load i64, ptr %38, align 8, !tbaa !9
  %1934 = add nsw i64 %1933, 1
  %1935 = getelementptr inbounds %struct.doublecomplex, ptr %1932, i64 %1934
  %1936 = call i32 @f2c_zdscal(ptr noundef %12, ptr noundef %33, ptr noundef %1935, ptr noundef @c__1)
  br label %1937

1937:                                             ; preds = %1899, %1894
  br label %2528

1938:                                             ; preds = %1891
  %1939 = load i64, ptr %31, align 8, !tbaa !9
  %1940 = load ptr, ptr %8, align 8, !tbaa !5
  %1941 = load i64, ptr %1940, align 8, !tbaa !9
  %1942 = sub nsw i64 %1941, 1
  %1943 = icmp slt i64 %1939, %1942
  br i1 %1943, label %1944, label %2527

1944:                                             ; preds = %1938
  %1945 = load i64, ptr %31, align 8, !tbaa !9
  %1946 = add nsw i64 %1945, 1
  %1947 = load i64, ptr %31, align 8, !tbaa !9
  %1948 = sub nsw i64 %1947, 1
  %1949 = load ptr, ptr %8, align 8, !tbaa !5
  %1950 = load i64, ptr %1949, align 8, !tbaa !9
  %1951 = shl i64 %1950, 1
  %1952 = load i64, ptr %31, align 8, !tbaa !9
  %1953 = sub nsw i64 %1951, %1952
  %1954 = mul nsw i64 %1948, %1953
  %1955 = sdiv i64 %1954, 2
  %1956 = add nsw i64 %1946, %1955
  store i64 %1956, ptr %12, align 8, !tbaa !9
  %1957 = load ptr, ptr %9, align 8, !tbaa !5
  %1958 = load i64, ptr %12, align 8, !tbaa !9
  %1959 = getelementptr inbounds %struct.doublecomplex, ptr %1957, i64 %1958
  %1960 = getelementptr inbounds %struct.doublecomplex, ptr %1959, i32 0, i32 0
  %1961 = load double, ptr %1960, align 8, !tbaa !13
  store double %1961, ptr %18, align 8, !tbaa !11
  %1962 = load ptr, ptr %9, align 8, !tbaa !5
  %1963 = load i64, ptr %31, align 8, !tbaa !9
  %1964 = add nsw i64 %1963, 1
  %1965 = load i64, ptr %31, align 8, !tbaa !9
  %1966 = sub nsw i64 %1965, 1
  %1967 = load ptr, ptr %8, align 8, !tbaa !5
  %1968 = load i64, ptr %1967, align 8, !tbaa !9
  %1969 = shl i64 %1968, 1
  %1970 = load i64, ptr %31, align 8, !tbaa !9
  %1971 = sub nsw i64 %1969, %1970
  %1972 = mul nsw i64 %1966, %1971
  %1973 = sdiv i64 %1972, 2
  %1974 = add nsw i64 %1964, %1973
  %1975 = getelementptr inbounds %struct.doublecomplex, ptr %1962, i64 %1974
  %1976 = call double @d_imag(ptr noundef %1975)
  store double %1976, ptr %19, align 8, !tbaa !11
  %1977 = call double @dlapy2_(ptr noundef %18, ptr noundef %19)
  store double %1977, ptr %28, align 8, !tbaa !11
  %1978 = load i64, ptr %31, align 8, !tbaa !9
  %1979 = add nsw i64 %1978, 1
  %1980 = load i64, ptr %31, align 8, !tbaa !9
  %1981 = load ptr, ptr %8, align 8, !tbaa !5
  %1982 = load i64, ptr %1981, align 8, !tbaa !9
  %1983 = shl i64 %1982, 1
  %1984 = load i64, ptr %31, align 8, !tbaa !9
  %1985 = sub nsw i64 %1983, %1984
  %1986 = sub nsw i64 %1985, 1
  %1987 = mul nsw i64 %1980, %1986
  %1988 = sdiv i64 %1987, 2
  %1989 = add nsw i64 %1979, %1988
  store i64 %1989, ptr %12, align 8, !tbaa !9
  %1990 = load ptr, ptr %9, align 8, !tbaa !5
  %1991 = load i64, ptr %12, align 8, !tbaa !9
  %1992 = getelementptr inbounds %struct.doublecomplex, ptr %1990, i64 %1991
  %1993 = getelementptr inbounds %struct.doublecomplex, ptr %1992, i32 0, i32 0
  %1994 = load double, ptr %1993, align 8, !tbaa !13
  %1995 = load double, ptr %28, align 8, !tbaa !11
  %1996 = fdiv double %1994, %1995
  store double %1996, ptr %34, align 8, !tbaa !11
  %1997 = load i64, ptr %31, align 8, !tbaa !9
  %1998 = load i64, ptr %31, align 8, !tbaa !9
  %1999 = sub nsw i64 %1998, 1
  %2000 = load ptr, ptr %8, align 8, !tbaa !5
  %2001 = load i64, ptr %2000, align 8, !tbaa !9
  %2002 = shl i64 %2001, 1
  %2003 = load i64, ptr %31, align 8, !tbaa !9
  %2004 = sub nsw i64 %2002, %2003
  %2005 = mul nsw i64 %1999, %2004
  %2006 = sdiv i64 %2005, 2
  %2007 = add nsw i64 %1997, %2006
  store i64 %2007, ptr %12, align 8, !tbaa !9
  %2008 = load ptr, ptr %9, align 8, !tbaa !5
  %2009 = load i64, ptr %12, 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 = load double, ptr %28, align 8, !tbaa !11
  %2014 = fdiv double %2012, %2013
  store double %2014, ptr %36, align 8, !tbaa !11
  %2015 = load double, ptr %34, align 8, !tbaa !11
  %2016 = load double, ptr %36, align 8, !tbaa !11
  %2017 = call double @llvm.fmuladd.f64(double %2015, double %2016, double -1.000000e+00)
  %2018 = fdiv double 1.000000e+00, %2017
  store double %2018, ptr %43, align 8, !tbaa !11
  %2019 = load i64, ptr %31, align 8, !tbaa !9
  %2020 = add nsw i64 %2019, 1
  %2021 = load i64, ptr %31, align 8, !tbaa !9
  %2022 = sub nsw i64 %2021, 1
  %2023 = load ptr, ptr %8, align 8, !tbaa !5
  %2024 = load i64, ptr %2023, align 8, !tbaa !9
  %2025 = shl i64 %2024, 1
  %2026 = load i64, ptr %31, align 8, !tbaa !9
  %2027 = sub nsw i64 %2025, %2026
  %2028 = mul nsw i64 %2022, %2027
  %2029 = sdiv i64 %2028, 2
  %2030 = add nsw i64 %2020, %2029
  store i64 %2030, ptr %12, align 8, !tbaa !9
  %2031 = load ptr, ptr %9, align 8, !tbaa !5
  %2032 = load i64, ptr %12, align 8, !tbaa !9
  %2033 = getelementptr inbounds %struct.doublecomplex, ptr %2031, i64 %2032
  %2034 = getelementptr inbounds %struct.doublecomplex, ptr %2033, i32 0, i32 0
  %2035 = load double, ptr %2034, align 8, !tbaa !13
  %2036 = load double, ptr %28, align 8, !tbaa !11
  %2037 = fdiv double %2035, %2036
  %2038 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2037, ptr %2038, align 8, !tbaa !13
  %2039 = load ptr, ptr %9, align 8, !tbaa !5
  %2040 = load i64, ptr %12, align 8, !tbaa !9
  %2041 = getelementptr inbounds %struct.doublecomplex, ptr %2039, i64 %2040
  %2042 = getelementptr inbounds %struct.doublecomplex, ptr %2041, i32 0, i32 1
  %2043 = load double, ptr %2042, align 8, !tbaa !15
  %2044 = load double, ptr %28, align 8, !tbaa !11
  %2045 = fdiv double %2043, %2044
  %2046 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2045, ptr %2046, align 8, !tbaa !15
  %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 %37, 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 !15
  %2052 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %2051, ptr %2052, align 8, !tbaa !15
  %2053 = load double, ptr %43, align 8, !tbaa !11
  %2054 = load double, ptr %28, align 8, !tbaa !11
  %2055 = fdiv double %2053, %2054
  store double %2055, ptr %28, align 8, !tbaa !11
  %2056 = load ptr, ptr %8, align 8, !tbaa !5
  %2057 = load i64, ptr %2056, align 8, !tbaa !9
  store i64 %2057, ptr %12, align 8, !tbaa !9
  %2058 = load i64, ptr %31, align 8, !tbaa !9
  %2059 = add nsw i64 %2058, 2
  store i64 %2059, ptr %30, align 8, !tbaa !9
  br label %2060

2060:                                             ; preds = %2523, %1944
  %2061 = load i64, ptr %30, align 8, !tbaa !9
  %2062 = load i64, ptr %12, align 8, !tbaa !9
  %2063 = icmp sle i64 %2061, %2062
  br i1 %2063, label %2064, label %2526

2064:                                             ; preds = %2060
  %2065 = load i64, ptr %30, align 8, !tbaa !9
  %2066 = load i64, ptr %31, align 8, !tbaa !9
  %2067 = sub nsw i64 %2066, 1
  %2068 = load ptr, ptr %8, align 8, !tbaa !5
  %2069 = load i64, ptr %2068, align 8, !tbaa !9
  %2070 = shl i64 %2069, 1
  %2071 = load i64, ptr %31, align 8, !tbaa !9
  %2072 = sub nsw i64 %2070, %2071
  %2073 = mul nsw i64 %2067, %2072
  %2074 = sdiv i64 %2073, 2
  %2075 = add nsw i64 %2065, %2074
  store i64 %2075, ptr %13, align 8, !tbaa !9
  %2076 = load double, ptr %34, align 8, !tbaa !11
  %2077 = load ptr, ptr %9, align 8, !tbaa !5
  %2078 = load i64, ptr %13, align 8, !tbaa !9
  %2079 = getelementptr inbounds %struct.doublecomplex, ptr %2077, i64 %2078
  %2080 = getelementptr inbounds %struct.doublecomplex, ptr %2079, i32 0, i32 0
  %2081 = load double, ptr %2080, align 8, !tbaa !13
  %2082 = fmul double %2076, %2081
  %2083 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %2082, ptr %2083, align 8, !tbaa !13
  %2084 = load double, ptr %34, align 8, !tbaa !11
  %2085 = load ptr, ptr %9, align 8, !tbaa !5
  %2086 = load i64, ptr %13, align 8, !tbaa !9
  %2087 = getelementptr inbounds %struct.doublecomplex, ptr %2085, i64 %2086
  %2088 = getelementptr inbounds %struct.doublecomplex, ptr %2087, i32 0, i32 1
  %2089 = load double, ptr %2088, align 8, !tbaa !15
  %2090 = fmul double %2084, %2089
  %2091 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %2090, ptr %2091, align 8, !tbaa !15
  %2092 = load i64, ptr %30, align 8, !tbaa !9
  %2093 = load i64, ptr %31, align 8, !tbaa !9
  %2094 = load ptr, ptr %8, align 8, !tbaa !5
  %2095 = load i64, ptr %2094, align 8, !tbaa !9
  %2096 = shl i64 %2095, 1
  %2097 = load i64, ptr %31, align 8, !tbaa !9
  %2098 = sub nsw i64 %2096, %2097
  %2099 = sub nsw i64 %2098, 1
  %2100 = mul nsw i64 %2093, %2099
  %2101 = sdiv i64 %2100, 2
  %2102 = add nsw i64 %2092, %2101
  store i64 %2102, ptr %14, align 8, !tbaa !9
  %2103 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2104 = load double, ptr %2103, align 8, !tbaa !13
  %2105 = load ptr, ptr %9, align 8, !tbaa !5
  %2106 = load i64, ptr %14, align 8, !tbaa !9
  %2107 = getelementptr inbounds %struct.doublecomplex, ptr %2105, i64 %2106
  %2108 = getelementptr inbounds %struct.doublecomplex, ptr %2107, i32 0, i32 0
  %2109 = load double, ptr %2108, align 8, !tbaa !13
  %2110 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2111 = load double, ptr %2110, align 8, !tbaa !15
  %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 1
  %2116 = load double, ptr %2115, align 8, !tbaa !15
  %2117 = fmul double %2111, %2116
  %2118 = fneg double %2117
  %2119 = call double @llvm.fmuladd.f64(double %2104, double %2109, double %2118)
  %2120 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  store double %2119, ptr %2120, align 8, !tbaa !13
  %2121 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2122 = load double, ptr %2121, align 8, !tbaa !13
  %2123 = load ptr, ptr %9, align 8, !tbaa !5
  %2124 = load i64, ptr %14, align 8, !tbaa !9
  %2125 = getelementptr inbounds %struct.doublecomplex, ptr %2123, i64 %2124
  %2126 = getelementptr inbounds %struct.doublecomplex, ptr %2125, i32 0, i32 1
  %2127 = load double, ptr %2126, align 8, !tbaa !15
  %2128 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2129 = load double, ptr %2128, align 8, !tbaa !15
  %2130 = load ptr, ptr %9, align 8, !tbaa !5
  %2131 = load i64, ptr %14, align 8, !tbaa !9
  %2132 = getelementptr inbounds %struct.doublecomplex, ptr %2130, i64 %2131
  %2133 = getelementptr inbounds %struct.doublecomplex, ptr %2132, i32 0, i32 0
  %2134 = load double, ptr %2133, align 8, !tbaa !13
  %2135 = fmul double %2129, %2134
  %2136 = call double @llvm.fmuladd.f64(double %2122, double %2127, double %2135)
  %2137 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  store double %2136, ptr %2137, align 8, !tbaa !15
  %2138 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %2139 = load double, ptr %2138, align 8, !tbaa !13
  %2140 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %2141 = load double, ptr %2140, align 8, !tbaa !13
  %2142 = fsub double %2139, %2141
  %2143 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %2142, ptr %2143, align 8, !tbaa !13
  %2144 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %2145 = load double, ptr %2144, align 8, !tbaa !15
  %2146 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %2147 = load double, ptr %2146, align 8, !tbaa !15
  %2148 = fsub double %2145, %2147
  %2149 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %2148, ptr %2149, align 8, !tbaa !15
  %2150 = load double, ptr %28, align 8, !tbaa !11
  %2151 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2152 = load double, ptr %2151, align 8, !tbaa !13
  %2153 = fmul double %2150, %2152
  %2154 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2153, ptr %2154, align 8, !tbaa !13
  %2155 = load double, ptr %28, align 8, !tbaa !11
  %2156 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2157 = load double, ptr %2156, align 8, !tbaa !15
  %2158 = fmul double %2155, %2157
  %2159 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2158, ptr %2159, align 8, !tbaa !15
  %2160 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2161 = load double, ptr %2160, align 8, !tbaa !13
  %2162 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %2161, ptr %2162, align 8, !tbaa !13
  %2163 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2164 = load double, ptr %2163, align 8, !tbaa !15
  %2165 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %2164, ptr %2165, align 8, !tbaa !15
  %2166 = load i64, ptr %30, align 8, !tbaa !9
  %2167 = load i64, ptr %31, align 8, !tbaa !9
  %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 %31, align 8, !tbaa !9
  %2172 = sub nsw i64 %2170, %2171
  %2173 = sub nsw i64 %2172, 1
  %2174 = mul nsw i64 %2167, %2173
  %2175 = sdiv i64 %2174, 2
  %2176 = add nsw i64 %2166, %2175
  store i64 %2176, ptr %13, align 8, !tbaa !9
  %2177 = load double, ptr %36, align 8, !tbaa !11
  %2178 = load ptr, ptr %9, align 8, !tbaa !5
  %2179 = load i64, ptr %13, align 8, !tbaa !9
  %2180 = getelementptr inbounds %struct.doublecomplex, ptr %2178, i64 %2179
  %2181 = getelementptr inbounds %struct.doublecomplex, ptr %2180, i32 0, i32 0
  %2182 = load double, ptr %2181, align 8, !tbaa !13
  %2183 = fmul double %2177, %2182
  %2184 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %2183, ptr %2184, align 8, !tbaa !13
  %2185 = load double, ptr %36, align 8, !tbaa !11
  %2186 = load ptr, ptr %9, align 8, !tbaa !5
  %2187 = load i64, ptr %13, align 8, !tbaa !9
  %2188 = getelementptr inbounds %struct.doublecomplex, ptr %2186, i64 %2187
  %2189 = getelementptr inbounds %struct.doublecomplex, ptr %2188, i32 0, i32 1
  %2190 = load double, ptr %2189, align 8, !tbaa !15
  %2191 = fmul double %2185, %2190
  %2192 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %2191, ptr %2192, align 8, !tbaa !15
  call void @d_cnjg(ptr noundef %26, ptr noundef %37)
  %2193 = load i64, ptr %30, align 8, !tbaa !9
  %2194 = load i64, ptr %31, align 8, !tbaa !9
  %2195 = sub nsw i64 %2194, 1
  %2196 = load ptr, ptr %8, align 8, !tbaa !5
  %2197 = load i64, ptr %2196, align 8, !tbaa !9
  %2198 = shl i64 %2197, 1
  %2199 = load i64, ptr %31, align 8, !tbaa !9
  %2200 = sub nsw i64 %2198, %2199
  %2201 = mul nsw i64 %2195, %2200
  %2202 = sdiv i64 %2201, 2
  %2203 = add nsw i64 %2193, %2202
  store i64 %2203, ptr %14, align 8, !tbaa !9
  %2204 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  %2205 = load double, ptr %2204, align 8, !tbaa !13
  %2206 = load ptr, ptr %9, align 8, !tbaa !5
  %2207 = load i64, ptr %14, align 8, !tbaa !9
  %2208 = getelementptr inbounds %struct.doublecomplex, ptr %2206, i64 %2207
  %2209 = getelementptr inbounds %struct.doublecomplex, ptr %2208, i32 0, i32 0
  %2210 = load double, ptr %2209, align 8, !tbaa !13
  %2211 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  %2212 = load double, ptr %2211, align 8, !tbaa !15
  %2213 = load ptr, ptr %9, align 8, !tbaa !5
  %2214 = load i64, ptr %14, align 8, !tbaa !9
  %2215 = getelementptr inbounds %struct.doublecomplex, ptr %2213, i64 %2214
  %2216 = getelementptr inbounds %struct.doublecomplex, ptr %2215, i32 0, i32 1
  %2217 = load double, ptr %2216, align 8, !tbaa !15
  %2218 = fmul double %2212, %2217
  %2219 = fneg double %2218
  %2220 = call double @llvm.fmuladd.f64(double %2205, double %2210, double %2219)
  %2221 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  store double %2220, ptr %2221, align 8, !tbaa !13
  %2222 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  %2223 = load double, ptr %2222, align 8, !tbaa !13
  %2224 = load ptr, ptr %9, align 8, !tbaa !5
  %2225 = load i64, ptr %14, align 8, !tbaa !9
  %2226 = getelementptr inbounds %struct.doublecomplex, ptr %2224, i64 %2225
  %2227 = getelementptr inbounds %struct.doublecomplex, ptr %2226, i32 0, i32 1
  %2228 = load double, ptr %2227, align 8, !tbaa !15
  %2229 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  %2230 = load double, ptr %2229, align 8, !tbaa !15
  %2231 = load ptr, ptr %9, align 8, !tbaa !5
  %2232 = load i64, ptr %14, align 8, !tbaa !9
  %2233 = getelementptr inbounds %struct.doublecomplex, ptr %2231, i64 %2232
  %2234 = getelementptr inbounds %struct.doublecomplex, ptr %2233, i32 0, i32 0
  %2235 = load double, ptr %2234, align 8, !tbaa !13
  %2236 = fmul double %2230, %2235
  %2237 = call double @llvm.fmuladd.f64(double %2223, double %2228, double %2236)
  %2238 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  store double %2237, ptr %2238, align 8, !tbaa !15
  %2239 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %2240 = load double, ptr %2239, align 8, !tbaa !13
  %2241 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %2242 = load double, ptr %2241, align 8, !tbaa !13
  %2243 = fsub double %2240, %2242
  %2244 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %2243, ptr %2244, align 8, !tbaa !13
  %2245 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %2246 = load double, ptr %2245, align 8, !tbaa !15
  %2247 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %2248 = load double, ptr %2247, align 8, !tbaa !15
  %2249 = fsub double %2246, %2248
  %2250 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %2249, ptr %2250, align 8, !tbaa !15
  %2251 = load double, ptr %28, align 8, !tbaa !11
  %2252 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2253 = load double, ptr %2252, align 8, !tbaa !13
  %2254 = fmul double %2251, %2253
  %2255 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2254, ptr %2255, align 8, !tbaa !13
  %2256 = load double, ptr %28, align 8, !tbaa !11
  %2257 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2258 = load double, ptr %2257, align 8, !tbaa !15
  %2259 = fmul double %2256, %2258
  %2260 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2259, ptr %2260, align 8, !tbaa !15
  %2261 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2262 = load double, ptr %2261, align 8, !tbaa !13
  %2263 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  store double %2262, ptr %2263, align 8, !tbaa !13
  %2264 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2265 = load double, ptr %2264, align 8, !tbaa !15
  %2266 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  store double %2265, ptr %2266, align 8, !tbaa !15
  %2267 = load ptr, ptr %8, align 8, !tbaa !5
  %2268 = load i64, ptr %2267, align 8, !tbaa !9
  store i64 %2268, ptr %13, align 8, !tbaa !9
  %2269 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %2269, ptr %29, align 8, !tbaa !9
  br label %2270

2270:                                             ; preds = %2431, %2064
  %2271 = load i64, ptr %29, align 8, !tbaa !9
  %2272 = load i64, ptr %13, align 8, !tbaa !9
  %2273 = icmp sle i64 %2271, %2272
  br i1 %2273, label %2274, label %2434

2274:                                             ; preds = %2270
  %2275 = load i64, ptr %29, align 8, !tbaa !9
  %2276 = load i64, ptr %30, align 8, !tbaa !9
  %2277 = sub nsw i64 %2276, 1
  %2278 = load ptr, ptr %8, align 8, !tbaa !5
  %2279 = load i64, ptr %2278, align 8, !tbaa !9
  %2280 = shl i64 %2279, 1
  %2281 = load i64, ptr %30, align 8, !tbaa !9
  %2282 = sub nsw i64 %2280, %2281
  %2283 = mul nsw i64 %2277, %2282
  %2284 = sdiv i64 %2283, 2
  %2285 = add nsw i64 %2275, %2284
  store i64 %2285, ptr %14, align 8, !tbaa !9
  %2286 = load i64, ptr %29, align 8, !tbaa !9
  %2287 = load i64, ptr %30, align 8, !tbaa !9
  %2288 = sub nsw i64 %2287, 1
  %2289 = load ptr, ptr %8, align 8, !tbaa !5
  %2290 = load i64, ptr %2289, align 8, !tbaa !9
  %2291 = shl i64 %2290, 1
  %2292 = load i64, ptr %30, align 8, !tbaa !9
  %2293 = sub nsw i64 %2291, %2292
  %2294 = mul nsw i64 %2288, %2293
  %2295 = sdiv i64 %2294, 2
  %2296 = add nsw i64 %2286, %2295
  store i64 %2296, ptr %15, align 8, !tbaa !9
  %2297 = load i64, ptr %29, align 8, !tbaa !9
  %2298 = load i64, ptr %31, align 8, !tbaa !9
  %2299 = sub nsw i64 %2298, 1
  %2300 = load ptr, ptr %8, align 8, !tbaa !5
  %2301 = load i64, ptr %2300, align 8, !tbaa !9
  %2302 = shl i64 %2301, 1
  %2303 = load i64, ptr %31, align 8, !tbaa !9
  %2304 = sub nsw i64 %2302, %2303
  %2305 = mul nsw i64 %2299, %2304
  %2306 = sdiv i64 %2305, 2
  %2307 = add nsw i64 %2297, %2306
  store i64 %2307, ptr %16, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %25, ptr noundef %41)
  %2308 = load ptr, ptr %9, align 8, !tbaa !5
  %2309 = load i64, ptr %16, align 8, !tbaa !9
  %2310 = getelementptr inbounds %struct.doublecomplex, ptr %2308, i64 %2309
  %2311 = getelementptr inbounds %struct.doublecomplex, ptr %2310, i32 0, i32 0
  %2312 = load double, ptr %2311, align 8, !tbaa !13
  %2313 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %2314 = load double, ptr %2313, align 8, !tbaa !13
  %2315 = load ptr, ptr %9, align 8, !tbaa !5
  %2316 = load i64, ptr %16, align 8, !tbaa !9
  %2317 = getelementptr inbounds %struct.doublecomplex, ptr %2315, i64 %2316
  %2318 = getelementptr inbounds %struct.doublecomplex, ptr %2317, i32 0, i32 1
  %2319 = load double, ptr %2318, align 8, !tbaa !15
  %2320 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %2321 = load double, ptr %2320, align 8, !tbaa !15
  %2322 = fmul double %2319, %2321
  %2323 = fneg double %2322
  %2324 = call double @llvm.fmuladd.f64(double %2312, double %2314, double %2323)
  %2325 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  store double %2324, ptr %2325, align 8, !tbaa !13
  %2326 = load ptr, ptr %9, align 8, !tbaa !5
  %2327 = load i64, ptr %16, align 8, !tbaa !9
  %2328 = getelementptr inbounds %struct.doublecomplex, ptr %2326, i64 %2327
  %2329 = getelementptr inbounds %struct.doublecomplex, ptr %2328, i32 0, i32 0
  %2330 = load double, ptr %2329, align 8, !tbaa !13
  %2331 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 1
  %2332 = load double, ptr %2331, align 8, !tbaa !15
  %2333 = load ptr, ptr %9, align 8, !tbaa !5
  %2334 = load i64, ptr %16, align 8, !tbaa !9
  %2335 = getelementptr inbounds %struct.doublecomplex, ptr %2333, i64 %2334
  %2336 = getelementptr inbounds %struct.doublecomplex, ptr %2335, i32 0, i32 1
  %2337 = load double, ptr %2336, align 8, !tbaa !15
  %2338 = getelementptr inbounds %struct.doublecomplex, ptr %25, i32 0, i32 0
  %2339 = load double, ptr %2338, align 8, !tbaa !13
  %2340 = fmul double %2337, %2339
  %2341 = call double @llvm.fmuladd.f64(double %2330, double %2332, double %2340)
  %2342 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  store double %2341, ptr %2342, align 8, !tbaa !15
  %2343 = load ptr, ptr %9, align 8, !tbaa !5
  %2344 = load i64, ptr %15, align 8, !tbaa !9
  %2345 = getelementptr inbounds %struct.doublecomplex, ptr %2343, i64 %2344
  %2346 = getelementptr inbounds %struct.doublecomplex, ptr %2345, i32 0, i32 0
  %2347 = load double, ptr %2346, align 8, !tbaa !13
  %2348 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 0
  %2349 = load double, ptr %2348, align 8, !tbaa !13
  %2350 = fsub double %2347, %2349
  %2351 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  store double %2350, ptr %2351, align 8, !tbaa !13
  %2352 = load ptr, ptr %9, align 8, !tbaa !5
  %2353 = load i64, ptr %15, align 8, !tbaa !9
  %2354 = getelementptr inbounds %struct.doublecomplex, ptr %2352, i64 %2353
  %2355 = getelementptr inbounds %struct.doublecomplex, ptr %2354, i32 0, i32 1
  %2356 = load double, ptr %2355, align 8, !tbaa !15
  %2357 = getelementptr inbounds %struct.doublecomplex, ptr %24, i32 0, i32 1
  %2358 = load double, ptr %2357, align 8, !tbaa !15
  %2359 = fsub double %2356, %2358
  %2360 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  store double %2359, ptr %2360, align 8, !tbaa !15
  %2361 = load i64, ptr %29, align 8, !tbaa !9
  %2362 = load i64, ptr %31, align 8, !tbaa !9
  %2363 = load ptr, ptr %8, align 8, !tbaa !5
  %2364 = load i64, ptr %2363, align 8, !tbaa !9
  %2365 = shl i64 %2364, 1
  %2366 = load i64, ptr %31, align 8, !tbaa !9
  %2367 = sub nsw i64 %2365, %2366
  %2368 = sub nsw i64 %2367, 1
  %2369 = mul nsw i64 %2362, %2368
  %2370 = sdiv i64 %2369, 2
  %2371 = add nsw i64 %2361, %2370
  store i64 %2371, ptr %17, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %27, ptr noundef %48)
  %2372 = load ptr, ptr %9, align 8, !tbaa !5
  %2373 = load i64, ptr %17, align 8, !tbaa !9
  %2374 = getelementptr inbounds %struct.doublecomplex, ptr %2372, i64 %2373
  %2375 = getelementptr inbounds %struct.doublecomplex, ptr %2374, i32 0, i32 0
  %2376 = load double, ptr %2375, align 8, !tbaa !13
  %2377 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 0
  %2378 = load double, ptr %2377, align 8, !tbaa !13
  %2379 = load ptr, ptr %9, align 8, !tbaa !5
  %2380 = load i64, ptr %17, align 8, !tbaa !9
  %2381 = getelementptr inbounds %struct.doublecomplex, ptr %2379, i64 %2380
  %2382 = getelementptr inbounds %struct.doublecomplex, ptr %2381, i32 0, i32 1
  %2383 = load double, ptr %2382, align 8, !tbaa !15
  %2384 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 1
  %2385 = load double, ptr %2384, align 8, !tbaa !15
  %2386 = fmul double %2383, %2385
  %2387 = fneg double %2386
  %2388 = call double @llvm.fmuladd.f64(double %2376, double %2378, double %2387)
  %2389 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  store double %2388, ptr %2389, align 8, !tbaa !13
  %2390 = load ptr, ptr %9, align 8, !tbaa !5
  %2391 = load i64, ptr %17, align 8, !tbaa !9
  %2392 = getelementptr inbounds %struct.doublecomplex, ptr %2390, i64 %2391
  %2393 = getelementptr inbounds %struct.doublecomplex, ptr %2392, i32 0, i32 0
  %2394 = load double, ptr %2393, align 8, !tbaa !13
  %2395 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 1
  %2396 = load double, ptr %2395, align 8, !tbaa !15
  %2397 = load ptr, ptr %9, align 8, !tbaa !5
  %2398 = load i64, ptr %17, align 8, !tbaa !9
  %2399 = getelementptr inbounds %struct.doublecomplex, ptr %2397, i64 %2398
  %2400 = getelementptr inbounds %struct.doublecomplex, ptr %2399, i32 0, i32 1
  %2401 = load double, ptr %2400, align 8, !tbaa !15
  %2402 = getelementptr inbounds %struct.doublecomplex, ptr %27, i32 0, i32 0
  %2403 = load double, ptr %2402, align 8, !tbaa !13
  %2404 = fmul double %2401, %2403
  %2405 = call double @llvm.fmuladd.f64(double %2394, double %2396, double %2404)
  %2406 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  store double %2405, ptr %2406, align 8, !tbaa !15
  %2407 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 0
  %2408 = load double, ptr %2407, align 8, !tbaa !13
  %2409 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 0
  %2410 = load double, ptr %2409, align 8, !tbaa !13
  %2411 = fsub double %2408, %2410
  %2412 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2411, ptr %2412, align 8, !tbaa !13
  %2413 = getelementptr inbounds %struct.doublecomplex, ptr %23, i32 0, i32 1
  %2414 = load double, ptr %2413, align 8, !tbaa !15
  %2415 = getelementptr inbounds %struct.doublecomplex, ptr %26, i32 0, i32 1
  %2416 = load double, ptr %2415, align 8, !tbaa !15
  %2417 = fsub double %2414, %2416
  %2418 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double %2417, ptr %2418, align 8, !tbaa !15
  %2419 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2420 = load double, ptr %2419, align 8, !tbaa !13
  %2421 = load ptr, ptr %9, align 8, !tbaa !5
  %2422 = load i64, ptr %14, align 8, !tbaa !9
  %2423 = getelementptr inbounds %struct.doublecomplex, ptr %2421, i64 %2422
  %2424 = getelementptr inbounds %struct.doublecomplex, ptr %2423, i32 0, i32 0
  store double %2420, ptr %2424, align 8, !tbaa !13
  %2425 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2426 = load double, ptr %2425, align 8, !tbaa !15
  %2427 = load ptr, ptr %9, align 8, !tbaa !5
  %2428 = load i64, ptr %14, align 8, !tbaa !9
  %2429 = getelementptr inbounds %struct.doublecomplex, ptr %2427, i64 %2428
  %2430 = getelementptr inbounds %struct.doublecomplex, ptr %2429, i32 0, i32 1
  store double %2426, ptr %2430, align 8, !tbaa !15
  br label %2431

2431:                                             ; preds = %2274
  %2432 = load i64, ptr %29, align 8, !tbaa !9
  %2433 = add nsw i64 %2432, 1
  store i64 %2433, ptr %29, align 8, !tbaa !9
  br label %2270, !llvm.loop !23

2434:                                             ; preds = %2270
  %2435 = load i64, ptr %30, align 8, !tbaa !9
  %2436 = load i64, ptr %31, align 8, !tbaa !9
  %2437 = sub nsw i64 %2436, 1
  %2438 = load ptr, ptr %8, align 8, !tbaa !5
  %2439 = load i64, ptr %2438, align 8, !tbaa !9
  %2440 = shl i64 %2439, 1
  %2441 = load i64, ptr %31, align 8, !tbaa !9
  %2442 = sub nsw i64 %2440, %2441
  %2443 = mul nsw i64 %2437, %2442
  %2444 = sdiv i64 %2443, 2
  %2445 = add nsw i64 %2435, %2444
  store i64 %2445, ptr %13, align 8, !tbaa !9
  %2446 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %2447 = load double, ptr %2446, align 8, !tbaa !13
  %2448 = load ptr, ptr %9, align 8, !tbaa !5
  %2449 = load i64, ptr %13, align 8, !tbaa !9
  %2450 = getelementptr inbounds %struct.doublecomplex, ptr %2448, i64 %2449
  %2451 = getelementptr inbounds %struct.doublecomplex, ptr %2450, i32 0, i32 0
  store double %2447, ptr %2451, align 8, !tbaa !13
  %2452 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %2453 = load double, ptr %2452, align 8, !tbaa !15
  %2454 = load ptr, ptr %9, align 8, !tbaa !5
  %2455 = load i64, ptr %13, align 8, !tbaa !9
  %2456 = getelementptr inbounds %struct.doublecomplex, ptr %2454, i64 %2455
  %2457 = getelementptr inbounds %struct.doublecomplex, ptr %2456, i32 0, i32 1
  store double %2453, ptr %2457, align 8, !tbaa !15
  %2458 = load i64, ptr %30, align 8, !tbaa !9
  %2459 = load i64, ptr %31, align 8, !tbaa !9
  %2460 = load ptr, ptr %8, align 8, !tbaa !5
  %2461 = load i64, ptr %2460, align 8, !tbaa !9
  %2462 = shl i64 %2461, 1
  %2463 = load i64, ptr %31, align 8, !tbaa !9
  %2464 = sub nsw i64 %2462, %2463
  %2465 = sub nsw i64 %2464, 1
  %2466 = mul nsw i64 %2459, %2465
  %2467 = sdiv i64 %2466, 2
  %2468 = add nsw i64 %2458, %2467
  store i64 %2468, ptr %13, align 8, !tbaa !9
  %2469 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  %2470 = load double, ptr %2469, align 8, !tbaa !13
  %2471 = load ptr, ptr %9, align 8, !tbaa !5
  %2472 = load i64, ptr %13, align 8, !tbaa !9
  %2473 = getelementptr inbounds %struct.doublecomplex, ptr %2471, i64 %2472
  %2474 = getelementptr inbounds %struct.doublecomplex, ptr %2473, i32 0, i32 0
  store double %2470, ptr %2474, align 8, !tbaa !13
  %2475 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  %2476 = load double, ptr %2475, align 8, !tbaa !15
  %2477 = load ptr, ptr %9, align 8, !tbaa !5
  %2478 = load i64, ptr %13, align 8, !tbaa !9
  %2479 = getelementptr inbounds %struct.doublecomplex, ptr %2477, i64 %2478
  %2480 = getelementptr inbounds %struct.doublecomplex, ptr %2479, i32 0, i32 1
  store double %2476, ptr %2480, align 8, !tbaa !15
  %2481 = load i64, ptr %30, align 8, !tbaa !9
  %2482 = load i64, ptr %30, align 8, !tbaa !9
  %2483 = sub nsw i64 %2482, 1
  %2484 = load ptr, ptr %8, align 8, !tbaa !5
  %2485 = load i64, ptr %2484, align 8, !tbaa !9
  %2486 = shl i64 %2485, 1
  %2487 = load i64, ptr %30, align 8, !tbaa !9
  %2488 = sub nsw i64 %2486, %2487
  %2489 = mul nsw i64 %2483, %2488
  %2490 = sdiv i64 %2489, 2
  %2491 = add nsw i64 %2481, %2490
  store i64 %2491, ptr %13, align 8, !tbaa !9
  %2492 = load i64, ptr %30, align 8, !tbaa !9
  %2493 = load i64, ptr %30, align 8, !tbaa !9
  %2494 = sub nsw i64 %2493, 1
  %2495 = load ptr, ptr %8, align 8, !tbaa !5
  %2496 = load i64, ptr %2495, align 8, !tbaa !9
  %2497 = shl i64 %2496, 1
  %2498 = load i64, ptr %30, align 8, !tbaa !9
  %2499 = sub nsw i64 %2497, %2498
  %2500 = mul nsw i64 %2494, %2499
  %2501 = sdiv i64 %2500, 2
  %2502 = add nsw i64 %2492, %2501
  store i64 %2502, ptr %14, align 8, !tbaa !9
  %2503 = load ptr, ptr %9, align 8, !tbaa !5
  %2504 = load i64, ptr %14, align 8, !tbaa !9
  %2505 = getelementptr inbounds %struct.doublecomplex, ptr %2503, i64 %2504
  %2506 = getelementptr inbounds %struct.doublecomplex, ptr %2505, i32 0, i32 0
  %2507 = load double, ptr %2506, align 8, !tbaa !13
  store double %2507, ptr %18, align 8, !tbaa !11
  %2508 = load double, ptr %18, align 8, !tbaa !11
  %2509 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  store double %2508, ptr %2509, align 8, !tbaa !13
  %2510 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  store double 0.000000e+00, ptr %2510, align 8, !tbaa !15
  %2511 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 0
  %2512 = load double, ptr %2511, align 8, !tbaa !13
  %2513 = load ptr, ptr %9, align 8, !tbaa !5
  %2514 = load i64, ptr %13, align 8, !tbaa !9
  %2515 = getelementptr inbounds %struct.doublecomplex, ptr %2513, i64 %2514
  %2516 = getelementptr inbounds %struct.doublecomplex, ptr %2515, i32 0, i32 0
  store double %2512, ptr %2516, align 8, !tbaa !13
  %2517 = getelementptr inbounds %struct.doublecomplex, ptr %22, i32 0, i32 1
  %2518 = load double, ptr %2517, align 8, !tbaa !15
  %2519 = load ptr, ptr %9, align 8, !tbaa !5
  %2520 = load i64, ptr %13, align 8, !tbaa !9
  %2521 = getelementptr inbounds %struct.doublecomplex, ptr %2519, i64 %2520
  %2522 = getelementptr inbounds %struct.doublecomplex, ptr %2521, i32 0, i32 1
  store double %2518, ptr %2522, align 8, !tbaa !15
  br label %2523

2523:                                             ; preds = %2434
  %2524 = load i64, ptr %30, align 8, !tbaa !9
  %2525 = add nsw i64 %2524, 1
  store i64 %2525, ptr %30, align 8, !tbaa !9
  br label %2060, !llvm.loop !24

2526:                                             ; preds = %2060
  br label %2527

2527:                                             ; preds = %2526, %1938
  br label %2528

2528:                                             ; preds = %2527, %1937
  br label %2529

2529:                                             ; preds = %2528, %1379
  %2530 = load i64, ptr %52, align 8, !tbaa !9
  %2531 = icmp eq i64 %2530, 1
  br i1 %2531, label %2532, label %2537

2532:                                             ; preds = %2529
  %2533 = load i64, ptr %40, align 8, !tbaa !9
  %2534 = load ptr, ptr %10, align 8, !tbaa !5
  %2535 = load i64, ptr %31, align 8, !tbaa !9
  %2536 = getelementptr inbounds i64, ptr %2534, i64 %2535
  store i64 %2533, ptr %2536, align 8, !tbaa !9
  br label %2549

2537:                                             ; preds = %2529
  %2538 = load i64, ptr %40, align 8, !tbaa !9
  %2539 = sub nsw i64 0, %2538
  %2540 = load ptr, ptr %10, align 8, !tbaa !5
  %2541 = load i64, ptr %31, align 8, !tbaa !9
  %2542 = getelementptr inbounds i64, ptr %2540, i64 %2541
  store i64 %2539, ptr %2542, align 8, !tbaa !9
  %2543 = load i64, ptr %40, align 8, !tbaa !9
  %2544 = sub nsw i64 0, %2543
  %2545 = load ptr, ptr %10, align 8, !tbaa !5
  %2546 = load i64, ptr %31, align 8, !tbaa !9
  %2547 = add nsw i64 %2546, 1
  %2548 = getelementptr inbounds i64, ptr %2545, i64 %2547
  store i64 %2544, ptr %2548, align 8, !tbaa !9
  br label %2549

2549:                                             ; preds = %2537, %2532
  %2550 = load i64, ptr %52, align 8, !tbaa !9
  %2551 = load i64, ptr %31, align 8, !tbaa !9
  %2552 = add nsw i64 %2551, %2550
  store i64 %2552, ptr %31, align 8, !tbaa !9
  %2553 = load i64, ptr %44, align 8, !tbaa !9
  %2554 = load ptr, ptr %8, align 8, !tbaa !5
  %2555 = load i64, ptr %2554, align 8, !tbaa !9
  %2556 = add nsw i64 %2553, %2555
  %2557 = load i64, ptr %31, align 8, !tbaa !9
  %2558 = sub nsw i64 %2556, %2557
  %2559 = add nsw i64 %2558, 2
  store i64 %2559, ptr %38, align 8, !tbaa !9
  br label %1284

2560:                                             ; preds = %1290, %110
  store i32 0, ptr %6, align 4
  store i32 1, ptr %57, align 4
  br label %2561

2561:                                             ; preds = %2560, %84
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  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 16, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 16, 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 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 16, 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 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 16, 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
  %2562 = load i32, ptr %6, align 4
  ret i32 %2562
}

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

declare double @d_imag(ptr noundef) #2

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

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

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

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

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


; 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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zhptrf_(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 double, align 8
  %8 = alloca double, align 8
  %9 = alloca %struct.doublecomplex, align 16
  %10 = alloca %struct.doublecomplex, align 16
  %11 = alloca %struct.doublecomplex, align 16
  %12 = alloca %struct.doublecomplex, align 16
  %13 = alloca double, align 8
  %14 = alloca %struct.doublecomplex, align 16
  %15 = alloca %struct.doublecomplex, align 16
  %16 = alloca %struct.doublecomplex, align 16
  %17 = alloca %struct.doublecomplex, align 16
  %18 = alloca %struct.doublecomplex, align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 8, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #5
  %19 = getelementptr inbounds i8, ptr %3, i64 -8
  %20 = getelementptr inbounds i8, ptr %2, i64 -16
  store i64 0, ptr %4, align 8, !tbaa !5
  %21 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not = icmp eq i64 %21, 0
  br i1 %.not, label %22, label %24

22:                                               ; preds = %5
  %23 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not836 = icmp eq i64 %23, 0
  br i1 %.not836, label %.thread.sink.split, label %24

24:                                               ; preds = %22, %5
  %25 = load i64, ptr %1, align 8, !tbaa !5
  %26 = icmp slt i64 %25, 0
  br i1 %26, label %.thread.sink.split, label %27

27:                                               ; preds = %24
  %.pr = load i64, ptr %4, align 8, !tbaa !5
  %.not837 = icmp eq i64 %.pr, 0
  br i1 %.not837, label %31, label %.thread

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

.thread:                                          ; preds = %.thread.sink.split, %27
  %28 = phi i64 [ %.pr, %27 ], [ %.sink, %.thread.sink.split ]
  %29 = sub nsw i64 0, %28
  store i64 %29, ptr %6, align 8, !tbaa !5
  %30 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %6) #5
  br label %.loopexit939

31:                                               ; preds = %27
  br i1 %.not, label %315, label %32

32:                                               ; preds = %31
  %33 = icmp eq i64 %25, 0
  br i1 %33, label %.loopexit939, label %.lr.ph964

.lr.ph964:                                        ; preds = %32
  %34 = add nsw i64 %25, -1
  %35 = mul nsw i64 %34, %25
  %36 = lshr i64 %35, 1
  %37 = add nuw nsw i64 %36, 1
  %38 = getelementptr inbounds i8, ptr %9, i64 8
  %39 = getelementptr inbounds i8, ptr %14, i64 8
  %40 = getelementptr inbounds i8, ptr %11, i64 8
  br label %41

41:                                               ; preds = %.lr.ph964, %311
  %.0793962 = phi i64 [ undef, %.lr.ph964 ], [ %.1794, %311 ]
  %.0815960 = phi i64 [ %37, %.lr.ph964 ], [ %313, %311 ]
  %.0817957 = phi i64 [ %25, %.lr.ph964 ], [ %312, %311 ]
  %42 = add nsw i64 %.0815960, %.0817957
  %43 = add nsw i64 %42, -1
  %44 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %43
  %45 = load double, ptr %44, align 8, !tbaa !9
  store double %45, ptr %7, align 8, !tbaa !12
  %46 = fcmp oge double %45, 0.000000e+00
  %47 = fneg double %45
  %48 = select i1 %46, double %45, double %47
  %.not843 = icmp eq i64 %.0817957, 1
  br i1 %.not843, label %65, label %49

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

65:                                               ; preds = %41, %49
  %.1794 = phi i64 [ %52, %49 ], [ %.0793962, %41 ]
  %.0786 = phi double [ %64, %49 ], [ 0.000000e+00, %41 ]
  %66 = fcmp oge double %48, %.0786
  %67 = select i1 %66, double %48, double %.0786
  %68 = fcmp oeq double %67, 0.000000e+00
  br i1 %68, label %69, label %76

69:                                               ; preds = %65
  %70 = load i64, ptr %4, align 8, !tbaa !5
  %71 = icmp eq i64 %70, 0
  br i1 %71, label %72, label %73

72:                                               ; preds = %69
  store i64 %.0817957, ptr %4, align 8, !tbaa !5
  br label %73

73:                                               ; preds = %72, %69
  store i64 %43, ptr %6, align 8, !tbaa !5
  %74 = load double, ptr %44, align 8, !tbaa !9
  store double %74, ptr %7, align 8, !tbaa !12
  %75 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %43, i32 1
  store double 0.000000e+00, ptr %75, align 8, !tbaa !13
  br label %306

76:                                               ; preds = %65
  %77 = fmul double %.0786, 0x3FE47E0F66AFED07
  %78 = fcmp ult double %48, %77
  br i1 %78, label %79, label %.thread872

79:                                               ; preds = %76
  store i64 %.0817957, ptr %6, align 8, !tbaa !5
  %.not844942.not = icmp slt i64 %.1794, %.0817957
  br i1 %.not844942.not, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %79
  %80 = add nsw i64 %.1794, 1
  %81 = mul nsw i64 %80, %.1794
  %82 = sdiv i64 %81, 2
  %83 = add nsw i64 %82, %.1794
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %105
  %.0945 = phi double [ %.1, %105 ], [ 0.000000e+00, %.lr.ph.preheader ]
  %.0807944 = phi i64 [ %106, %105 ], [ %83, %.lr.ph.preheader ]
  %.0819943 = phi i64 [ %107, %105 ], [ %80, %.lr.ph.preheader ]
  %84 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.0807944
  %85 = load double, ptr %84, align 8, !tbaa !9
  store double %85, ptr %7, align 8, !tbaa !12
  %86 = call double @d_imag(ptr noundef nonnull %84) #5
  store double %86, ptr %8, align 8, !tbaa !12
  %87 = insertelement <2 x double> poison, double %85, i64 0
  %88 = insertelement <2 x double> %87, double %86, i64 1
  %89 = fcmp oge <2 x double> %88, zeroinitializer
  %90 = fneg <2 x double> %88
  %91 = select <2 x i1> %89, <2 x double> %88, <2 x double> %90
  %shift1037 = shufflevector <2 x double> %91, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %92 = fadd <2 x double> %91, %shift1037
  %93 = extractelement <2 x double> %92, i64 0
  %94 = fcmp ogt double %93, %.0945
  br i1 %94, label %95, label %105

95:                                               ; preds = %.lr.ph
  %96 = load double, ptr %84, align 8, !tbaa !9
  store double %96, ptr %7, align 8, !tbaa !12
  %97 = call double @d_imag(ptr noundef nonnull %84) #5
  store double %97, ptr %8, align 8, !tbaa !12
  %98 = insertelement <2 x double> poison, double %96, i64 0
  %99 = insertelement <2 x double> %98, double %97, i64 1
  %100 = fcmp oge <2 x double> %99, zeroinitializer
  %101 = fneg <2 x double> %99
  %102 = select <2 x i1> %100, <2 x double> %99, <2 x double> %101
  %shift1038 = shufflevector <2 x double> %102, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %103 = fadd <2 x double> %102, %shift1038
  %104 = extractelement <2 x double> %103, i64 0
  br label %105

105:                                              ; preds = %95, %.lr.ph
  %.1 = phi double [ %104, %95 ], [ %.0945, %.lr.ph ]
  %106 = add nsw i64 %.0807944, %.0819943
  %107 = add nsw i64 %.0819943, 1
  %108 = load i64, ptr %6, align 8, !tbaa !5
  %.not844.not = icmp slt i64 %.0819943, %108
  br i1 %.not844.not, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %105, %79
  %.0.lcssa = phi double [ 0.000000e+00, %79 ], [ %.1, %105 ]
  %109 = add nsw i64 %.1794, -1
  %110 = mul nsw i64 %109, %.1794
  %111 = sdiv i64 %110, 2
  %112 = icmp sgt i64 %.1794, 1
  br i1 %112, label %113, label %129

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

129:                                              ; preds = %113, %._crit_edge
  %.2 = phi double [ %128, %113 ], [ %.0.lcssa, %._crit_edge ]
  %130 = fdiv double %.0786, %.2
  %131 = fmul double %77, %130
  %132 = fcmp ult double %48, %131
  br i1 %132, label %135, label %.thread872

.thread872:                                       ; preds = %129, %76
  %133 = load double, ptr %44, align 8, !tbaa !9
  %134 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %43, i32 1
  store double 0.000000e+00, ptr %134, align 8, !tbaa !13
  br label %186

135:                                              ; preds = %129
  %136 = add i64 %111, %.1794
  %137 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %136
  %138 = load double, ptr %137, align 8, !tbaa !9
  store double %138, ptr %7, align 8, !tbaa !12
  %139 = fcmp oge double %138, 0.000000e+00
  %140 = fneg double %138
  %141 = select i1 %139, double %138, double %140
  %142 = fmul double %.2, 0x3FE47E0F66AFED07
  %143 = fcmp ult double %141, %142
  %cond.fr = freeze i1 %143
  %.848 = select i1 %cond.fr, i64 -2, i64 -1
  %144 = add nsw i64 %.848, %.0817957
  %145 = add nsw i64 %144, 1
  %reass.sub = sub i64 %.0815960, %.0817957
  %146 = add i64 %reass.sub, 1
  %spec.select = select i1 %cond.fr, i64 %146, i64 %.0815960
  %.not845 = icmp eq i64 %.1794, %145
  br i1 %.not845, label %179, label %147

147:                                              ; preds = %135
  store i64 %109, ptr %6, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %spec.select
  %149 = getelementptr %struct.doublecomplex, ptr %2, i64 %111
  %150 = call i32 @f2c_zswap(ptr noundef nonnull %6, ptr noundef nonnull %148, ptr noundef nonnull @c__1, ptr noundef nonnull %149, ptr noundef nonnull @c__1) #5
  store i64 %144, ptr %6, align 8, !tbaa !5
  %.not846.not946 = icmp slt i64 %.1794, %144
  br i1 %.not846.not946, label %.lr.ph950, label %._crit_edge951

.lr.ph950:                                        ; preds = %147, %.lr.ph950
  %.1808948 = phi i64 [ %151, %.lr.ph950 ], [ %136, %147 ]
  %.1820.in947 = phi i64 [ %.1820, %.lr.ph950 ], [ %.1794, %147 ]
  %.1820 = add nsw i64 %.1820.in947, 1
  %151 = add i64 %.1808948, %.1820.in947
  %152 = getelementptr %struct.doublecomplex, ptr %148, i64 %.1820.in947
  call void @d_cnjg(ptr noundef nonnull %9, ptr noundef %152) #5
  %153 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %151
  %154 = load <2 x double>, ptr %9, align 16, !tbaa !12
  call void @d_cnjg(ptr noundef nonnull %9, ptr noundef nonnull %153) #5
  %155 = load <2 x double>, ptr %9, align 16, !tbaa !12
  store <2 x double> %155, ptr %152, align 8, !tbaa !12
  store <2 x double> %154, ptr %153, align 8, !tbaa !12
  %156 = load i64, ptr %6, align 8, !tbaa !5
  %.not846.not = icmp slt i64 %.1820, %156
  br i1 %.not846.not, label %.lr.ph950, label %._crit_edge951, !llvm.loop !16

._crit_edge951:                                   ; preds = %.lr.ph950, %147
  %.1808.lcssa = phi i64 [ %136, %147 ], [ %151, %.lr.ph950 ]
  %157 = add i64 %.1808.lcssa, %144
  store i64 %157, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %157
  call void @d_cnjg(ptr noundef nonnull %9, ptr noundef nonnull %158) #5
  %159 = load i64, ptr %6, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %159
  %161 = load <2 x double>, ptr %9, align 16, !tbaa !12
  store <2 x double> %161, ptr %160, align 8, !tbaa !12
  %162 = add i64 %144, %spec.select
  %163 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !9
  store double %164, ptr %13, align 8, !tbaa !12
  %165 = load double, ptr %137, align 8, !tbaa !9
  store double %165, ptr %163, align 8, !tbaa !9
  %166 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %162, i32 1
  store double 0.000000e+00, ptr %166, align 8, !tbaa !13
  store double %164, ptr %137, align 8, !tbaa !9
  %167 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %136, i32 1
  store double 0.000000e+00, ptr %167, align 8, !tbaa !13
  %.pre = load double, ptr %44, align 8, !tbaa !9
  br i1 %cond.fr, label %168, label %186

168:                                              ; preds = %._crit_edge951
  store double %.pre, ptr %7, align 8, !tbaa !12
  %169 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %43, i32 1
  store double 0.000000e+00, ptr %169, align 8, !tbaa !13
  %170 = getelementptr %struct.doublecomplex, ptr %20, i64 %42
  %171 = getelementptr i8, ptr %170, i64 -32
  %172 = load double, ptr %171, align 8, !tbaa !9
  %173 = getelementptr i8, ptr %170, i64 -24
  %174 = load double, ptr %173, align 8, !tbaa !13
  %175 = add i64 %.0815960, -1
  %176 = add i64 %175, %.1794
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %176
  %178 = load <2 x double>, ptr %177, align 8, !tbaa !12
  store <2 x double> %178, ptr %171, align 8, !tbaa !12
  store i64 %176, ptr %6, align 8, !tbaa !5
  store double %172, ptr %177, align 8, !tbaa !9
  br label %194

179:                                              ; preds = %135
  %180 = load double, ptr %44, align 8, !tbaa !9
  %181 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %43, i32 1
  store double 0.000000e+00, ptr %181, align 8, !tbaa !13
  br i1 %cond.fr, label %182, label %186

182:                                              ; preds = %179
  %183 = add nsw i64 %.0815960, -1
  store i64 %183, ptr %6, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %183
  %185 = load double, ptr %184, align 8, !tbaa !9
  store double %185, ptr %7, align 8, !tbaa !12
  br label %194

186:                                              ; preds = %._crit_edge951, %179, %.thread872
  %187 = phi double [ %133, %.thread872 ], [ %180, %179 ], [ %.pre, %._crit_edge951 ]
  %.0811859867875 = phi i64 [ %.0817957, %.thread872 ], [ %.1794, %179 ], [ %.1794, %._crit_edge951 ]
  %188 = fdiv double 1.000000e+00, %187
  store double %188, ptr %13, align 8, !tbaa !12
  %189 = add nsw i64 %.0817957, -1
  store i64 %189, ptr %6, align 8, !tbaa !5
  %190 = fneg double %188
  store double %190, ptr %7, align 8, !tbaa !12
  %191 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.0815960
  %192 = call i32 @f2c_zhpr(ptr noundef %0, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %191, ptr noundef nonnull @c__1, ptr noundef nonnull %2) #5
  store i64 %189, ptr %6, align 8, !tbaa !5
  %193 = call i32 @f2c_zdscal(ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef nonnull %191, ptr noundef nonnull @c__1) #5
  br label %306

194:                                              ; preds = %182, %168
  %.sink1027 = phi i64 [ %183, %182 ], [ %176, %168 ]
  %.sink1025 = phi double [ 0.000000e+00, %182 ], [ %174, %168 ]
  %195 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.sink1027, i32 1
  store double %.sink1025, ptr %195, align 8, !tbaa !13
  %196 = icmp sgt i64 %.0817957, 2
  br i1 %196, label %.lr.ph956.preheader, label %.loopexit940

.lr.ph956.preheader:                              ; preds = %194
  %197 = add nsw i64 %.0817957, -1
  %198 = mul nsw i64 %197, %.0817957
  %199 = lshr i64 %198, 1
  %200 = add nuw nsw i64 %199, %197
  store i64 %200, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %200
  %202 = load double, ptr %201, align 8, !tbaa !9
  store double %202, ptr %7, align 8, !tbaa !12
  %203 = call double @d_imag(ptr noundef nonnull %201) #5
  store double %203, ptr %8, align 8, !tbaa !12
  %204 = call double @dlapy2_(ptr noundef nonnull %7, ptr noundef nonnull %8) #5
  %205 = add nsw i64 %.0817957, -2
  %206 = mul nsw i64 %205, %197
  %207 = lshr i64 %206, 1
  %208 = getelementptr %struct.doublecomplex, ptr %20, i64 %207
  %209 = getelementptr %struct.doublecomplex, ptr %208, i64 %197
  %210 = load double, ptr %209, align 8, !tbaa !9
  %211 = fdiv double %210, %204
  %212 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %199
  %213 = getelementptr inbounds %struct.doublecomplex, ptr %212, i64 %.0817957
  %214 = load double, ptr %213, align 8, !tbaa !9
  %215 = fdiv double %214, %204
  %216 = call double @llvm.fmuladd.f64(double %215, double %211, double -1.000000e+00)
  %217 = fdiv double 1.000000e+00, %216
  %218 = load <2 x double>, ptr %201, align 8, !tbaa !12
  %219 = insertelement <2 x double> poison, double %204, i64 0
  %220 = shufflevector <2 x double> %219, <2 x double> poison, <2 x i32> zeroinitializer
  %221 = fdiv <2 x double> %218, %220
  store <2 x double> %221, ptr %9, align 16, !tbaa !12
  store <2 x double> %221, ptr %14, align 16, !tbaa !12
  %222 = fdiv double %217, %204
  %223 = insertelement <2 x double> poison, double %222, i64 0
  %224 = shufflevector <2 x double> %223, <2 x double> poison, <2 x i32> zeroinitializer
  %225 = insertelement <2 x double> poison, double %215, i64 0
  %226 = shufflevector <2 x double> %225, <2 x double> poison, <2 x i32> zeroinitializer
  %227 = insertelement <2 x double> poison, double %211, i64 0
  %228 = shufflevector <2 x double> %227, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1047 = getelementptr %struct.doublecomplex, ptr %20, i64 %199
  br label %.lr.ph956

.lr.ph956:                                        ; preds = %.lr.ph956.preheader, %298
  %.2821954 = phi i64 [ %258, %298 ], [ %205, %.lr.ph956.preheader ]
  %229 = add nuw nsw i64 %.2821954, %207
  store i64 %229, ptr %6, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %229
  %gep1048 = getelementptr %struct.doublecomplex, ptr %invariant.gep1047, i64 %.2821954
  %231 = load <2 x double>, ptr %230, align 8, !tbaa !12
  %232 = fmul <2 x double> %226, %231
  call void @d_cnjg(ptr noundef nonnull %11, ptr noundef nonnull %14) #5
  %233 = load <2 x double>, ptr %11, align 16
  %234 = load double, ptr %40, align 8, !tbaa !13
  %235 = load <2 x double>, ptr %gep1048, align 8, !tbaa !12
  %236 = fneg double %234
  %237 = insertelement <2 x double> poison, double %234, i64 0
  %238 = insertelement <2 x double> %237, double %236, i64 1
  %239 = fmul <2 x double> %235, %238
  %240 = shufflevector <2 x double> %239, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %241 = shufflevector <2 x double> %233, <2 x double> poison, <2 x i32> zeroinitializer
  %242 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %241, <2 x double> %235, <2 x double> %240)
  %243 = fsub <2 x double> %232, %242
  %244 = fmul <2 x double> %224, %243
  store <2 x double> %244, ptr %17, align 16, !tbaa !12
  %245 = load <2 x double>, ptr %14, align 16
  %246 = load double, ptr %39, align 8, !tbaa !13
  %247 = fneg double %246
  %248 = load <2 x double>, ptr %230, align 8, !tbaa !12
  %249 = insertelement <2 x double> poison, double %246, i64 0
  %250 = insertelement <2 x double> %249, double %247, i64 1
  %251 = fmul <2 x double> %248, %250
  %252 = shufflevector <2 x double> %251, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %253 = shufflevector <2 x double> %245, <2 x double> poison, <2 x i32> zeroinitializer
  %254 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %253, <2 x double> %248, <2 x double> %252)
  store <2 x double> %254, ptr %10, align 16, !tbaa !12
  %255 = fmul <2 x double> %228, %235
  %256 = fsub <2 x double> %255, %254
  %257 = fmul <2 x double> %224, %256
  store <2 x double> %257, ptr %9, align 16, !tbaa !12
  store <2 x double> %257, ptr %16, align 16, !tbaa !12
  %258 = add nsw i64 %.2821954, -1
  %259 = mul nsw i64 %258, %.2821954
  %260 = lshr i64 %259, 1
  br label %261

261:                                              ; preds = %.lr.ph956, %261
  %.0825953 = phi i64 [ %.2821954, %.lr.ph956 ], [ %296, %261 ]
  %262 = add nuw nsw i64 %.0825953, %260
  store i64 %262, ptr %6, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %10, ptr noundef nonnull %16) #5
  %263 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.0825953
  %264 = getelementptr inbounds %struct.doublecomplex, ptr %263, i64 %199
  %265 = load double, ptr %264, align 8, !tbaa !9
  %266 = getelementptr inbounds i8, ptr %264, i64 8
  %267 = load double, ptr %266, align 8, !tbaa !13
  %268 = fneg double %267
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %262
  %270 = getelementptr inbounds %struct.doublecomplex, ptr %263, i64 %207
  %271 = getelementptr inbounds i8, ptr %270, i64 8
  %272 = load <2 x double>, ptr %10, align 16, !tbaa !12
  %273 = insertelement <2 x double> poison, double %267, i64 0
  %274 = insertelement <2 x double> %273, double %268, i64 1
  %275 = fmul <2 x double> %272, %274
  %276 = shufflevector <2 x double> %275, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %277 = insertelement <2 x double> poison, double %265, i64 0
  %278 = shufflevector <2 x double> %277, <2 x double> poison, <2 x i32> zeroinitializer
  %279 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %278, <2 x double> %272, <2 x double> %276)
  %280 = load <2 x double>, ptr %269, align 8, !tbaa !12
  %281 = fsub <2 x double> %280, %279
  call void @d_cnjg(ptr noundef nonnull %12, ptr noundef nonnull %17) #5
  %282 = load double, ptr %270, align 8, !tbaa !9
  %283 = load double, ptr %271, align 8, !tbaa !13
  %284 = fneg double %283
  %285 = load <2 x double>, ptr %12, align 16, !tbaa !12
  %286 = insertelement <2 x double> poison, double %283, i64 0
  %287 = insertelement <2 x double> %286, double %284, i64 1
  %288 = fmul <2 x double> %285, %287
  %289 = shufflevector <2 x double> %288, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %290 = insertelement <2 x double> poison, double %282, i64 0
  %291 = shufflevector <2 x double> %290, <2 x double> poison, <2 x i32> zeroinitializer
  %292 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %291, <2 x double> %285, <2 x double> %289)
  store <2 x double> %292, ptr %11, align 16, !tbaa !12
  %293 = fsub <2 x double> %281, %292
  store <2 x double> %293, ptr %9, align 16, !tbaa !12
  %294 = load i64, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %294
  store <2 x double> %293, ptr %295, align 8, !tbaa !12
  %296 = add nsw i64 %.0825953, -1
  %297 = icmp ugt i64 %.0825953, 1
  br i1 %297, label %261, label %298, !llvm.loop !17

298:                                              ; preds = %261
  %299 = load <2 x double>, ptr %16, align 16, !tbaa !12
  store <2 x double> %299, ptr %gep1048, align 8, !tbaa !12
  %300 = load <2 x double>, ptr %17, align 16, !tbaa !12
  store <2 x double> %300, ptr %230, align 8, !tbaa !12
  %301 = add nuw nsw i64 %260, %.2821954
  store i64 %301, ptr %6, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %301
  %303 = load double, ptr %302, align 8, !tbaa !9
  store double %303, ptr %7, align 8, !tbaa !12
  store double %303, ptr %9, align 16, !tbaa !9
  store double 0.000000e+00, ptr %38, align 8, !tbaa !13
  %304 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %301, i32 1
  store double 0.000000e+00, ptr %304, align 8, !tbaa !13
  %305 = icmp sgt i64 %.2821954, 1
  br i1 %305, label %.lr.ph956, label %.loopexit940, !llvm.loop !18

306:                                              ; preds = %73, %186
  %.1812.ph = phi i64 [ %.0811859867875, %186 ], [ %.0817957, %73 ]
  %307 = getelementptr inbounds i64, ptr %19, i64 %.0817957
  store i64 %.1812.ph, ptr %307, align 8, !tbaa !5
  br label %311

.loopexit940:                                     ; preds = %298, %194
  %308 = sub nsw i64 0, %.1794
  %309 = getelementptr inbounds i64, ptr %19, i64 %.0817957
  store i64 %308, ptr %309, align 8, !tbaa !5
  %310 = getelementptr i8, ptr %309, i64 -8
  store i64 %308, ptr %310, align 8, !tbaa !5
  br label %311

311:                                              ; preds = %.loopexit940, %306
  %.1790.neg890 = phi i64 [ -2, %.loopexit940 ], [ -1, %306 ]
  %.1804886 = phi i64 [ %spec.select, %.loopexit940 ], [ %.0815960, %306 ]
  %312 = add nsw i64 %.1790.neg890, %.0817957
  %313 = sub nsw i64 %.1804886, %312
  %314 = icmp slt i64 %312, 1
  br i1 %314, label %.loopexit939, label %41

315:                                              ; preds = %31
  %316 = add nuw nsw i64 %25, 1
  %317 = mul nuw nsw i64 %316, %25
  %318 = lshr i64 %317, 1
  %invariant.gep = getelementptr i8, ptr %2, i64 16
  %319 = icmp eq i64 %25, 0
  br i1 %319, label %.loopexit939, label %.lr.ph999

.lr.ph999:                                        ; preds = %315
  %320 = getelementptr inbounds i8, ptr %9, i64 8
  %321 = getelementptr inbounds i8, ptr %15, i64 8
  %322 = getelementptr inbounds i8, ptr %11, i64 8
  br label %323

323:                                              ; preds = %.lr.ph999, %663
  %324 = phi i64 [ %25, %.lr.ph999 ], [ %666, %663 ]
  %.1818.neg997 = phi i64 [ -1, %.lr.ph999 ], [ %.1818.neg, %663 ]
  %.2795996 = phi i64 [ undef, %.lr.ph999 ], [ %.3796, %663 ]
  %.1816993 = phi i64 [ 1, %.lr.ph999 ], [ %668, %663 ]
  %.1818988 = phi i64 [ 1, %.lr.ph999 ], [ %665, %663 ]
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.1816993
  %326 = load double, ptr %325, align 8, !tbaa !9
  store double %326, ptr %7, align 8, !tbaa !12
  %327 = fcmp oge double %326, 0.000000e+00
  %328 = fneg double %326
  %329 = select i1 %327, double %326, double %328
  %330 = icmp slt i64 %.1818988, %324
  br i1 %330, label %331, label %348

331:                                              ; preds = %323
  %332 = sub nsw i64 %324, %.1818988
  store i64 %332, ptr %6, align 8, !tbaa !5
  %333 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1816993
  %334 = call i64 @f2c_izamax(ptr noundef nonnull %6, ptr noundef %333, ptr noundef nonnull @c__1) #5
  %335 = add nsw i64 %334, %.1818988
  %336 = add i64 %.1816993, %.1818.neg997
  %337 = add i64 %336, %335
  store i64 %337, ptr %6, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !9
  store double %339, ptr %7, align 8, !tbaa !12
  %340 = call double @d_imag(ptr noundef nonnull %338) #5
  store double %340, ptr %8, align 8, !tbaa !12
  %341 = insertelement <2 x double> poison, double %339, i64 0
  %342 = insertelement <2 x double> %341, double %340, i64 1
  %343 = fcmp oge <2 x double> %342, zeroinitializer
  %344 = fneg <2 x double> %342
  %345 = select <2 x i1> %343, <2 x double> %342, <2 x double> %344
  %shift1040 = shufflevector <2 x double> %345, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %346 = fadd <2 x double> %345, %shift1040
  %347 = extractelement <2 x double> %346, i64 0
  br label %348

348:                                              ; preds = %323, %331
  %.3796 = phi i64 [ %335, %331 ], [ %.2795996, %323 ]
  %.1787 = phi double [ %347, %331 ], [ 0.000000e+00, %323 ]
  %349 = sub i64 0, %.3796
  %350 = fcmp oge double %329, %.1787
  %351 = select i1 %350, double %329, double %.1787
  %352 = fcmp oeq double %351, 0.000000e+00
  br i1 %352, label %353, label %360

353:                                              ; preds = %348
  %354 = load i64, ptr %4, align 8, !tbaa !5
  %355 = icmp eq i64 %354, 0
  br i1 %355, label %356, label %357

356:                                              ; preds = %353
  store i64 %.1818988, ptr %4, align 8, !tbaa !5
  br label %357

357:                                              ; preds = %356, %353
  store i64 %.1816993, ptr %6, align 8, !tbaa !5
  %358 = load double, ptr %325, align 8, !tbaa !9
  store double %358, ptr %7, align 8, !tbaa !12
  %359 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.1816993, i32 1
  store double 0.000000e+00, ptr %359, align 8, !tbaa !13
  br label %663

360:                                              ; preds = %348
  %361 = fmul double %.1787, 0x3FE47E0F66AFED07
  %362 = fcmp ult double %329, %361
  br i1 %362, label %363, label %.critedge.sink.split

363:                                              ; preds = %360
  %364 = add i64 %.1816993, %.1818.neg997
  %365 = add i64 %364, %.3796
  %366 = add nsw i64 %.3796, -1
  store i64 %366, ptr %6, align 8, !tbaa !5
  %.not838965.not = icmp slt i64 %.1818988, %.3796
  br i1 %.not838965.not, label %.lr.ph970, label %.._crit_edge971_crit_edge

.._crit_edge971_crit_edge:                        ; preds = %363
  %.pre1002 = load i64, ptr %1, align 8, !tbaa !5
  br label %._crit_edge971

.lr.ph970:                                        ; preds = %363, %388
  %.3968 = phi double [ %.4, %388 ], [ 0.000000e+00, %363 ]
  %.2809967 = phi i64 [ %391, %388 ], [ %365, %363 ]
  %.3822966 = phi i64 [ %392, %388 ], [ %.1818988, %363 ]
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.2809967
  %368 = load double, ptr %367, align 8, !tbaa !9
  store double %368, ptr %7, align 8, !tbaa !12
  %369 = call double @d_imag(ptr noundef nonnull %367) #5
  store double %369, ptr %8, align 8, !tbaa !12
  %370 = insertelement <2 x double> poison, double %368, i64 0
  %371 = insertelement <2 x double> %370, double %369, i64 1
  %372 = fcmp oge <2 x double> %371, zeroinitializer
  %373 = fneg <2 x double> %371
  %374 = select <2 x i1> %372, <2 x double> %371, <2 x double> %373
  %shift1041 = shufflevector <2 x double> %374, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %375 = fadd <2 x double> %374, %shift1041
  %376 = extractelement <2 x double> %375, i64 0
  %377 = fcmp ogt double %376, %.3968
  br i1 %377, label %378, label %388

378:                                              ; preds = %.lr.ph970
  %379 = load double, ptr %367, align 8, !tbaa !9
  store double %379, ptr %7, align 8, !tbaa !12
  %380 = call double @d_imag(ptr noundef nonnull %367) #5
  store double %380, ptr %8, align 8, !tbaa !12
  %381 = insertelement <2 x double> poison, double %379, i64 0
  %382 = insertelement <2 x double> %381, double %380, i64 1
  %383 = fcmp oge <2 x double> %382, zeroinitializer
  %384 = fneg <2 x double> %382
  %385 = select <2 x i1> %383, <2 x double> %382, <2 x double> %384
  %shift1042 = shufflevector <2 x double> %385, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %386 = fadd <2 x double> %385, %shift1042
  %387 = extractelement <2 x double> %386, i64 0
  br label %388

388:                                              ; preds = %378, %.lr.ph970
  %.4 = phi double [ %387, %378 ], [ %.3968, %.lr.ph970 ]
  %389 = load i64, ptr %1, align 8, !tbaa !5
  %390 = sub i64 %.2809967, %.3822966
  %391 = add i64 %390, %389
  %392 = add nuw nsw i64 %.3822966, 1
  %393 = load i64, ptr %6, align 8, !tbaa !5
  %.not838.not = icmp slt i64 %.3822966, %393
  br i1 %.not838.not, label %.lr.ph970, label %._crit_edge971, !llvm.loop !19

._crit_edge971:                                   ; preds = %388, %.._crit_edge971_crit_edge
  %394 = phi i64 [ %.pre1002, %.._crit_edge971_crit_edge ], [ %389, %388 ]
  %.3.lcssa = phi double [ 0.000000e+00, %.._crit_edge971_crit_edge ], [ %.4, %388 ]
  %395 = sub nsw i64 %394, %.3796
  %396 = add nsw i64 %395, 1
  %397 = add nsw i64 %395, 2
  %398 = mul nsw i64 %396, %397
  %.neg = sdiv i64 %398, -2
  %399 = add nsw i64 %.neg, %318
  %400 = add nsw i64 %399, 1
  %401 = icmp slt i64 %.3796, %394
  br i1 %401, label %402, label %417

402:                                              ; preds = %._crit_edge971
  store i64 %395, ptr %6, align 8, !tbaa !5
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %399
  %403 = call i64 @f2c_izamax(ptr noundef nonnull %6, ptr noundef %gep, ptr noundef nonnull @c__1) #5
  %404 = add i64 %403, %400
  store i64 %404, ptr %6, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !9
  store double %406, ptr %7, align 8, !tbaa !12
  %407 = call double @d_imag(ptr noundef nonnull %405) #5
  store double %407, ptr %8, align 8, !tbaa !12
  %408 = insertelement <2 x double> poison, double %406, i64 0
  %409 = insertelement <2 x double> %408, double %407, i64 1
  %410 = fcmp oge <2 x double> %409, zeroinitializer
  %411 = fneg <2 x double> %409
  %412 = select <2 x i1> %410, <2 x double> %409, <2 x double> %411
  %shift1043 = shufflevector <2 x double> %412, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %413 = fadd <2 x double> %412, %shift1043
  %414 = extractelement <2 x double> %413, i64 0
  %415 = fcmp oge double %.3.lcssa, %414
  %416 = select i1 %415, double %.3.lcssa, double %414
  br label %417

417:                                              ; preds = %402, %._crit_edge971
  %.5 = phi double [ %416, %402 ], [ %.3.lcssa, %._crit_edge971 ]
  %418 = fdiv double %.1787, %.5
  %419 = fmul double %361, %418
  %420 = fcmp ult double %329, %419
  br i1 %420, label %421, label %.critedge.sink.split

421:                                              ; preds = %417
  %422 = getelementptr %struct.doublecomplex, ptr %2, i64 %399
  %423 = load double, ptr %422, align 8, !tbaa !9
  store double %423, ptr %7, align 8, !tbaa !12
  %424 = fcmp oge double %423, 0.000000e+00
  %425 = fneg double %423
  %426 = select i1 %424, double %423, double %425
  %427 = fmul double %.5, 0x3FE47E0F66AFED07
  %428 = fcmp ult double %426, %427
  %.851 = select i1 %428, i64 2, i64 1
  %429 = add nuw nsw i64 %.851, %.1818988
  %430 = add nsw i64 %429, -1
  %.neg937 = sub nsw i64 1, %429
  br i1 %428, label %431, label %.thread1015

431:                                              ; preds = %421
  %432 = load i64, ptr %1, align 8, !tbaa !5
  %433 = add nsw i64 %.1818.neg997, 1
  %434 = add i64 %433, %.1816993
  %435 = add i64 %434, %432
  %.not839 = icmp eq i64 %.3796, %430
  br i1 %.not839, label %480, label %436

.thread1015:                                      ; preds = %421
  %.not8391017 = icmp eq i64 %.3796, %430
  br i1 %.not8391017, label %.critedge.sink.split, label %436

436:                                              ; preds = %.thread1015, %431
  %.28051018 = phi i64 [ %.1816993, %.thread1015 ], [ %435, %431 ]
  %437 = load i64, ptr %1, align 8, !tbaa !5
  %438 = icmp slt i64 %.3796, %437
  br i1 %438, label %439, label %446

439:                                              ; preds = %436
  %440 = sub nsw i64 %437, %.3796
  store i64 %440, ptr %6, align 8, !tbaa !5
  %441 = getelementptr %struct.doublecomplex, ptr %2, i64 %.neg937
  %442 = getelementptr %struct.doublecomplex, ptr %441, i64 %.3796
  %443 = getelementptr %struct.doublecomplex, ptr %442, i64 %.28051018
  %444 = getelementptr %struct.doublecomplex, ptr %2, i64 %400
  %445 = call i32 @f2c_zswap(ptr noundef nonnull %6, ptr noundef %443, ptr noundef nonnull @c__1, ptr noundef %444, ptr noundef nonnull @c__1) #5
  br label %446

446:                                              ; preds = %439, %436
  %447 = add i64 %.neg937, %.3796
  %448 = add i64 %447, %.28051018
  store i64 %366, ptr %6, align 8, !tbaa !5
  %.not840973.not = icmp slt i64 %429, %.3796
  br i1 %.not840973.not, label %.lr.ph977, label %._crit_edge978

.lr.ph977:                                        ; preds = %446
  %449 = getelementptr %struct.doublecomplex, ptr %20, i64 %.28051018
  %450 = getelementptr %struct.doublecomplex, ptr %449, i64 %.neg937
  br label %451

451:                                              ; preds = %.lr.ph977, %451
  %.3810975 = phi i64 [ %448, %.lr.ph977 ], [ %455, %451 ]
  %.4823974 = phi i64 [ %429, %.lr.ph977 ], [ %460, %451 ]
  %452 = load i64, ptr %1, align 8, !tbaa !5
  %453 = sub i64 %.3810975, %.4823974
  %454 = add i64 %453, %452
  %455 = add nsw i64 %454, 1
  %456 = getelementptr %struct.doublecomplex, ptr %450, i64 %.4823974
  call void @d_cnjg(ptr noundef nonnull %9, ptr noundef nonnull %456) #5
  %457 = getelementptr %struct.doublecomplex, ptr %2, i64 %454
  %458 = load <2 x double>, ptr %9, align 16, !tbaa !12
  call void @d_cnjg(ptr noundef nonnull %9, ptr noundef %457) #5
  %459 = load <2 x double>, ptr %9, align 16, !tbaa !12
  store <2 x double> %459, ptr %456, align 8, !tbaa !12
  store <2 x double> %458, ptr %457, align 8, !tbaa !12
  %460 = add nuw nsw i64 %.4823974, 1
  %461 = load i64, ptr %6, align 8, !tbaa !5
  %.not840.not = icmp slt i64 %.4823974, %461
  br i1 %.not840.not, label %451, label %._crit_edge978, !llvm.loop !20

._crit_edge978:                                   ; preds = %451, %446
  store i64 %448, ptr %6, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %448
  call void @d_cnjg(ptr noundef nonnull %9, ptr noundef nonnull %462) #5
  %463 = load i64, ptr %6, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %463
  %465 = load <2 x double>, ptr %9, align 16, !tbaa !12
  store <2 x double> %465, ptr %464, align 8, !tbaa !12
  %466 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.28051018
  %467 = load double, ptr %466, align 8, !tbaa !9
  store double %467, ptr %13, align 8, !tbaa !12
  %468 = load double, ptr %422, align 8, !tbaa !9
  store double %468, ptr %7, align 8, !tbaa !12
  store double %468, ptr %466, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.28051018, i32 1
  store double 0.000000e+00, ptr %469, align 8, !tbaa !13
  store i64 %400, ptr %6, align 8, !tbaa !5
  store double %467, ptr %422, align 8, !tbaa !9
  %470 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %400, i32 1
  store double 0.000000e+00, ptr %470, align 8, !tbaa !13
  br i1 %428, label %471, label %.critedge

471:                                              ; preds = %._crit_edge978
  %472 = load double, ptr %325, align 8, !tbaa !9
  store double %472, ptr %7, align 8, !tbaa !12
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.1816993, i32 1
  store double 0.000000e+00, ptr %473, align 8, !tbaa !13
  %474 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1816993
  %475 = load double, ptr %474, align 8, !tbaa !9
  %476 = getelementptr inbounds i8, ptr %474, i64 8
  %477 = load double, ptr %476, align 8, !tbaa !13
  %478 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %365
  %479 = load <2 x double>, ptr %478, align 8, !tbaa !12
  store <2 x double> %479, ptr %474, align 8, !tbaa !12
  store i64 %365, ptr %6, align 8, !tbaa !5
  store double %475, ptr %478, align 8, !tbaa !9
  br label %499

480:                                              ; preds = %431
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.1816993, i32 1
  store double 0.000000e+00, ptr %481, align 8, !tbaa !13
  store i64 %435, ptr %6, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %435
  %483 = load double, ptr %482, align 8, !tbaa !9
  store double %483, ptr %7, align 8, !tbaa !12
  br label %499

.critedge.sink.split:                             ; preds = %.thread1015, %360, %417
  %.2813897906919.ph = phi i64 [ %.1818988, %417 ], [ %.1818988, %360 ], [ %.3796, %.thread1015 ]
  store i64 %.1816993, ptr %6, align 8, !tbaa !5
  %storemerge = load double, ptr %325, align 8, !tbaa !9
  store double %storemerge, ptr %7, align 8, !tbaa !12
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.1816993, i32 1
  store double 0.000000e+00, ptr %484, align 8, !tbaa !13
  br label %.critedge

.critedge:                                        ; preds = %.critedge.sink.split, %._crit_edge978
  %.2813897906919 = phi i64 [ %.3796, %._crit_edge978 ], [ %.2813897906919.ph, %.critedge.sink.split ]
  %.2805908918 = phi i64 [ %.28051018, %._crit_edge978 ], [ %.1816993, %.critedge.sink.split ]
  %485 = load i64, ptr %1, align 8, !tbaa !5
  %486 = icmp slt i64 %.1818988, %485
  br i1 %486, label %487, label %663

487:                                              ; preds = %.critedge
  %488 = load double, ptr %325, align 8, !tbaa !9
  %489 = fdiv double 1.000000e+00, %488
  store double %489, ptr %13, align 8, !tbaa !12
  %490 = sub nsw i64 %485, %.1818988
  store i64 %490, ptr %6, align 8, !tbaa !5
  %491 = fneg double %489
  store double %491, ptr %7, align 8, !tbaa !12
  %492 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1816993
  %493 = getelementptr %struct.doublecomplex, ptr %492, i64 %.1818.neg997
  %494 = getelementptr %struct.doublecomplex, ptr %493, i64 %485
  %495 = call i32 @f2c_zhpr(ptr noundef %0, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef %492, ptr noundef nonnull @c__1, ptr noundef %494) #5
  %496 = load i64, ptr %1, align 8, !tbaa !5
  %497 = sub nsw i64 %496, %.1818988
  store i64 %497, ptr %6, align 8, !tbaa !5
  %498 = call i32 @f2c_zdscal(ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %492, ptr noundef nonnull @c__1) #5
  br label %663

499:                                              ; preds = %480, %471
  %.sink1031 = phi i64 [ %435, %480 ], [ %365, %471 ]
  %.sink1029 = phi double [ 0.000000e+00, %480 ], [ %477, %471 ]
  %.28051020 = phi i64 [ %435, %480 ], [ %.28051018, %471 ]
  %500 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %.sink1031, i32 1
  store double %.sink1029, ptr %500, align 8, !tbaa !13
  %501 = load i64, ptr %1, align 8, !tbaa !5
  %502 = add nsw i64 %501, -1
  %503 = icmp slt i64 %.1818988, %502
  br i1 %503, label %504, label %.loopexit

504:                                              ; preds = %499
  %505 = add nuw nsw i64 %.1818988, 1
  %506 = add nsw i64 %.1818988, -1
  %507 = shl i64 %501, 1
  %508 = sub nsw i64 %507, %.1818988
  %509 = mul nsw i64 %508, %506
  %510 = sdiv i64 %509, 2
  %511 = add nsw i64 %510, %505
  store i64 %511, ptr %6, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %511
  %513 = load double, ptr %512, align 8, !tbaa !9
  store double %513, ptr %7, align 8, !tbaa !12
  %514 = getelementptr %struct.doublecomplex, ptr %2, i64 %.1818988
  %515 = getelementptr %struct.doublecomplex, ptr %514, i64 %510
  %516 = call double @d_imag(ptr noundef %515) #5
  store double %516, ptr %8, align 8, !tbaa !12
  %517 = call double @dlapy2_(ptr noundef nonnull %7, ptr noundef nonnull %8) #5
  %518 = load i64, ptr %1, align 8, !tbaa !5
  %519 = shl i64 %518, 1
  %520 = xor i64 %.1818988, -1
  %521 = add i64 %519, %520
  %522 = mul nsw i64 %521, %.1818988
  %523 = sdiv i64 %522, 2
  %524 = getelementptr %struct.doublecomplex, ptr %20, i64 %523
  %525 = getelementptr %struct.doublecomplex, ptr %524, i64 %505
  %526 = load double, ptr %525, align 8, !tbaa !9
  %527 = fdiv double %526, %517
  %528 = sub nsw i64 %519, %.1818988
  %529 = mul nsw i64 %528, %506
  %530 = sdiv i64 %529, 2
  %531 = getelementptr %struct.doublecomplex, ptr %20, i64 %530
  %532 = getelementptr %struct.doublecomplex, ptr %531, i64 %.1818988
  %533 = load double, ptr %532, align 8, !tbaa !9
  %534 = fdiv double %533, %517
  %535 = call double @llvm.fmuladd.f64(double %527, double %534, double -1.000000e+00)
  %536 = fdiv double 1.000000e+00, %535
  %537 = getelementptr %struct.doublecomplex, ptr %20, i64 %530
  %538 = getelementptr %struct.doublecomplex, ptr %537, i64 %505
  %539 = load <2 x double>, ptr %538, align 8, !tbaa !12
  %540 = insertelement <2 x double> poison, double %517, i64 0
  %541 = shufflevector <2 x double> %540, <2 x double> poison, <2 x i32> zeroinitializer
  %542 = fdiv <2 x double> %539, %541
  store <2 x double> %542, ptr %9, align 16, !tbaa !12
  store <2 x double> %542, ptr %15, align 16, !tbaa !12
  %543 = fdiv double %536, %517
  store i64 %518, ptr %6, align 8, !tbaa !5
  %544 = add nuw nsw i64 %.1818988, 2
  %.not841984 = icmp sgt i64 %544, %518
  br i1 %.not841984, label %.loopexit, label %.lr.ph987.preheader

.lr.ph987.preheader:                              ; preds = %504
  %545 = insertelement <2 x double> poison, double %527, i64 0
  %546 = shufflevector <2 x double> %545, <2 x double> poison, <2 x i32> zeroinitializer
  %547 = insertelement <2 x double> poison, double %543, i64 0
  %548 = shufflevector <2 x double> %547, <2 x double> poison, <2 x i32> zeroinitializer
  %549 = insertelement <2 x double> poison, double %534, i64 0
  %550 = shufflevector <2 x double> %549, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.lr.ph987

.lr.ph987:                                        ; preds = %.lr.ph987.preheader, %._crit_edge983
  %551 = phi i64 [ %646, %._crit_edge983 ], [ %518, %.lr.ph987.preheader ]
  %.5824985 = phi i64 [ %660, %._crit_edge983 ], [ %544, %.lr.ph987.preheader ]
  %552 = shl i64 %551, 1
  %553 = sub nsw i64 %552, %.1818988
  %554 = mul nsw i64 %553, %506
  %555 = sdiv i64 %554, 2
  %556 = getelementptr %struct.doublecomplex, ptr %20, i64 %.5824985
  %557 = getelementptr %struct.doublecomplex, ptr %556, i64 %555
  %558 = add nsw i64 %553, -1
  %559 = mul nsw i64 %558, %.1818988
  %560 = sdiv i64 %559, 2
  %561 = load <2 x double>, ptr %15, align 16
  %562 = getelementptr %struct.doublecomplex, ptr %556, i64 %560
  %563 = load double, ptr %321, align 8, !tbaa !13
  %564 = fneg double %563
  %565 = load <2 x double>, ptr %562, align 8, !tbaa !12
  %566 = insertelement <2 x double> poison, double %563, i64 0
  %567 = insertelement <2 x double> %566, double %564, i64 1
  %568 = fmul <2 x double> %565, %567
  %569 = shufflevector <2 x double> %568, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %570 = shufflevector <2 x double> %561, <2 x double> poison, <2 x i32> zeroinitializer
  %571 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %570, <2 x double> %565, <2 x double> %569)
  store <2 x double> %571, ptr %10, align 16, !tbaa !12
  %572 = load <2 x double>, ptr %557, align 8, !tbaa !12
  %573 = fmul <2 x double> %546, %572
  %574 = fsub <2 x double> %573, %571
  %575 = fmul <2 x double> %548, %574
  store <2 x double> %575, ptr %9, align 16, !tbaa !12
  store <2 x double> %575, ptr %16, align 16, !tbaa !12
  %576 = add i64 %552, %520
  %577 = mul nsw i64 %576, %.1818988
  %578 = sdiv i64 %577, 2
  %579 = getelementptr %struct.doublecomplex, ptr %556, i64 %578
  %580 = load <2 x double>, ptr %579, align 8, !tbaa !12
  %581 = fmul <2 x double> %550, %580
  call void @d_cnjg(ptr noundef nonnull %11, ptr noundef nonnull %15) #5
  %582 = load i64, ptr %1, align 8, !tbaa !5
  %583 = shl i64 %582, 1
  %584 = sub nsw i64 %583, %.1818988
  %585 = mul nsw i64 %584, %506
  %586 = sdiv i64 %585, 2
  %587 = load <2 x double>, ptr %11, align 16
  %588 = getelementptr %struct.doublecomplex, ptr %556, i64 %586
  %589 = load double, ptr %322, align 8, !tbaa !13
  %590 = load <2 x double>, ptr %588, align 8, !tbaa !12
  %591 = fneg double %589
  %592 = insertelement <2 x double> poison, double %589, i64 0
  %593 = insertelement <2 x double> %592, double %591, i64 1
  %594 = fmul <2 x double> %590, %593
  %595 = shufflevector <2 x double> %594, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %596 = shufflevector <2 x double> %587, <2 x double> poison, <2 x i32> zeroinitializer
  %597 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %596, <2 x double> %590, <2 x double> %595)
  store <2 x double> %597, ptr %10, align 16, !tbaa !12
  %598 = fsub <2 x double> %581, %597
  %599 = fmul <2 x double> %548, %598
  store <2 x double> %599, ptr %9, align 16, !tbaa !12
  store <2 x double> %599, ptr %18, align 16, !tbaa !12
  %.not842979 = icmp sgt i64 %.5824985, %582
  %.pre1013 = add nsw i64 %.5824985, -1
  br i1 %.not842979, label %._crit_edge983, label %.lr.ph982

.lr.ph982:                                        ; preds = %.lr.ph987, %.lr.ph982
  %.1826980 = phi i64 [ %644, %.lr.ph982 ], [ %.5824985, %.lr.ph987 ]
  %600 = load i64, ptr %1, align 8, !tbaa !5
  %601 = shl i64 %600, 1
  %602 = sub nsw i64 %601, %.5824985
  %603 = mul nsw i64 %602, %.pre1013
  %604 = sdiv i64 %603, 2
  %605 = sub nsw i64 %601, %.1818988
  %606 = mul nsw i64 %605, %506
  %607 = sdiv i64 %606, 2
  call void @d_cnjg(ptr noundef nonnull %10, ptr noundef nonnull %16) #5
  %608 = getelementptr %struct.doublecomplex, ptr %20, i64 %.1826980
  %609 = getelementptr %struct.doublecomplex, ptr %608, i64 %607
  %610 = load double, ptr %609, align 8, !tbaa !9
  %611 = getelementptr inbounds i8, ptr %609, i64 8
  %612 = load double, ptr %611, align 8, !tbaa !13
  %613 = fneg double %612
  %614 = getelementptr %struct.doublecomplex, ptr %608, i64 %604
  %615 = load i64, ptr %1, align 8, !tbaa !5
  %616 = shl i64 %615, 1
  %617 = add i64 %616, %520
  %618 = mul nsw i64 %617, %.1818988
  %619 = sdiv i64 %618, 2
  %620 = getelementptr %struct.doublecomplex, ptr %608, i64 %619
  %621 = getelementptr inbounds i8, ptr %620, i64 8
  %622 = load <2 x double>, ptr %10, align 16, !tbaa !12
  %623 = insertelement <2 x double> poison, double %612, i64 0
  %624 = insertelement <2 x double> %623, double %613, i64 1
  %625 = fmul <2 x double> %622, %624
  %626 = shufflevector <2 x double> %625, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %627 = insertelement <2 x double> poison, double %610, i64 0
  %628 = shufflevector <2 x double> %627, <2 x double> poison, <2 x i32> zeroinitializer
  %629 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %628, <2 x double> %622, <2 x double> %626)
  %630 = load <2 x double>, ptr %614, align 8, !tbaa !12
  %631 = fsub <2 x double> %630, %629
  call void @d_cnjg(ptr noundef nonnull %12, ptr noundef nonnull %18) #5
  %632 = load double, ptr %620, align 8, !tbaa !9
  %633 = load double, ptr %621, align 8, !tbaa !13
  %634 = fneg double %633
  %635 = load <2 x double>, ptr %12, align 16, !tbaa !12
  %636 = insertelement <2 x double> poison, double %633, i64 0
  %637 = insertelement <2 x double> %636, double %634, i64 1
  %638 = fmul <2 x double> %635, %637
  %639 = shufflevector <2 x double> %638, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %640 = insertelement <2 x double> poison, double %632, i64 0
  %641 = shufflevector <2 x double> %640, <2 x double> poison, <2 x i32> zeroinitializer
  %642 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %641, <2 x double> %635, <2 x double> %639)
  store <2 x double> %642, ptr %11, align 16, !tbaa !12
  %643 = fsub <2 x double> %631, %642
  store <2 x double> %643, ptr %9, align 16, !tbaa !12
  store <2 x double> %643, ptr %614, align 8, !tbaa !12
  %644 = add nuw nsw i64 %.1826980, 1
  %.not842.not = icmp slt i64 %.1826980, %582
  br i1 %.not842.not, label %.lr.ph982, label %._crit_edge983.loopexit, !llvm.loop !21

._crit_edge983.loopexit:                          ; preds = %.lr.ph982
  %.pre1003 = load i64, ptr %1, align 8, !tbaa !5
  %645 = load <2 x double>, ptr %18, align 16, !tbaa !12
  %.pre1006 = shl i64 %.pre1003, 1
  %.pre1007 = sub nsw i64 %.pre1006, %.1818988
  %.pre1009 = mul nsw i64 %.pre1007, %506
  %.pre1011 = sdiv i64 %.pre1009, 2
  br label %._crit_edge983

._crit_edge983:                                   ; preds = %.lr.ph987, %._crit_edge983.loopexit
  %.pre-phi1012 = phi i64 [ %.pre1011, %._crit_edge983.loopexit ], [ %586, %.lr.ph987 ]
  %.pre-phi = phi i64 [ %.pre1006, %._crit_edge983.loopexit ], [ %583, %.lr.ph987 ]
  %646 = phi i64 [ %.pre1003, %._crit_edge983.loopexit ], [ %582, %.lr.ph987 ]
  %647 = phi <2 x double> [ %645, %._crit_edge983.loopexit ], [ %599, %.lr.ph987 ]
  %648 = getelementptr %struct.doublecomplex, ptr %556, i64 %.pre-phi1012
  %649 = load <2 x double>, ptr %16, align 16, !tbaa !12
  store <2 x double> %649, ptr %648, align 8, !tbaa !12
  %650 = add i64 %.pre-phi, %520
  %651 = mul nsw i64 %650, %.1818988
  %652 = sdiv i64 %651, 2
  %653 = getelementptr %struct.doublecomplex, ptr %556, i64 %652
  store <2 x double> %647, ptr %653, align 8, !tbaa !12
  %654 = sub nsw i64 %.pre-phi, %.5824985
  %655 = mul nsw i64 %654, %.pre1013
  %656 = sdiv i64 %655, 2
  %657 = getelementptr %struct.doublecomplex, ptr %556, i64 %656
  %658 = load double, ptr %657, align 8, !tbaa !9
  store double %658, ptr %7, align 8, !tbaa !12
  store double %658, ptr %9, align 16, !tbaa !9
  store double 0.000000e+00, ptr %320, align 8, !tbaa !13
  %659 = getelementptr inbounds i8, ptr %657, i64 8
  store double 0.000000e+00, ptr %659, align 8, !tbaa !13
  %660 = add nuw nsw i64 %.5824985, 1
  %661 = load i64, ptr %6, align 8, !tbaa !5
  %.not841.not = icmp slt i64 %.5824985, %661
  br i1 %.not841.not, label %.lr.ph987, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %._crit_edge983, %504, %499
  %662 = getelementptr inbounds i64, ptr %19, i64 %.1818988
  store i64 %349, ptr %662, align 8, !tbaa !5
  br label %663

663:                                              ; preds = %.critedge, %487, %357, %.loopexit
  %.sink1034 = phi ptr [ %3, %.loopexit ], [ %19, %357 ], [ %19, %487 ], [ %19, %.critedge ]
  %.sink1032 = phi i64 [ %349, %.loopexit ], [ %.1818988, %357 ], [ %.2813897906919, %487 ], [ %.2813897906919, %.critedge ]
  %.3792935 = phi i64 [ 2, %.loopexit ], [ 1, %357 ], [ 1, %487 ], [ 1, %.critedge ]
  %.3806931 = phi i64 [ %.28051020, %.loopexit ], [ %.1816993, %357 ], [ %.2805908918, %487 ], [ %.2805908918, %.critedge ]
  %664 = getelementptr i64, ptr %.sink1034, i64 %.1818988
  store i64 %.sink1032, ptr %664, align 8, !tbaa !5
  %665 = add nuw nsw i64 %.3792935, %.1818988
  %666 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub1000 = sub i64 %.3806931, %665
  %667 = add i64 %reass.sub1000, 2
  %668 = add i64 %667, %666
  %.1818.neg = sub nsw i64 0, %665
  %669 = icmp sgt i64 %665, %666
  br i1 %669, label %.loopexit939, label %323

.loopexit939:                                     ; preds = %311, %663, %32, %315, %.thread
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  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 8, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 i64 @f2c_izamax(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare double @d_imag(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 @d_cnjg(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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 = !{!11, !11, i64 0}
!13 = !{!10, !11, i64 8}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}


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