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

; 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 }

@c__1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@c__2 = external hidden global i64, align 8

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

112:                                              ; preds = %13
  store i32 0, ptr %14, align 4
  store i32 1, ptr %89, align 4
  br label %3013

113:                                              ; preds = %13
  %114 = load ptr, ptr %18, align 8, !tbaa !5
  %115 = load i64, ptr %114, align 8, !tbaa !9
  %116 = load ptr, ptr %19, align 8, !tbaa !5
  %117 = load i64, ptr %116, align 8, !tbaa !9
  %118 = icmp eq i64 %115, %117
  br i1 %118, label %119, label %147

119:                                              ; preds = %113
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  store i64 %121, ptr %32, align 8, !tbaa !9
  %122 = load ptr, ptr %18, align 8, !tbaa !5
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = load ptr, ptr %18, align 8, !tbaa !5
  %125 = load i64, ptr %124, align 8, !tbaa !9
  %126 = load i64, ptr %28, align 8, !tbaa !9
  %127 = mul nsw i64 %125, %126
  %128 = add nsw i64 %123, %127
  store i64 %128, ptr %33, align 8, !tbaa !9
  %129 = load ptr, ptr %20, align 8, !tbaa !5
  %130 = load i64, ptr %33, align 8, !tbaa !9
  %131 = getelementptr inbounds %struct.doublecomplex, ptr %129, i64 %130
  %132 = getelementptr inbounds %struct.doublecomplex, ptr %131, i32 0, i32 0
  %133 = load double, ptr %132, align 8, !tbaa !11
  %134 = load ptr, ptr %22, align 8, !tbaa !5
  %135 = load i64, ptr %32, align 8, !tbaa !9
  %136 = getelementptr inbounds %struct.doublecomplex, ptr %134, i64 %135
  %137 = getelementptr inbounds %struct.doublecomplex, ptr %136, i32 0, i32 0
  store double %133, ptr %137, align 8, !tbaa !11
  %138 = load ptr, ptr %20, align 8, !tbaa !5
  %139 = load i64, ptr %33, align 8, !tbaa !9
  %140 = getelementptr inbounds %struct.doublecomplex, ptr %138, i64 %139
  %141 = getelementptr inbounds %struct.doublecomplex, ptr %140, i32 0, i32 1
  %142 = load double, ptr %141, align 8, !tbaa !14
  %143 = load ptr, ptr %22, align 8, !tbaa !5
  %144 = load i64, ptr %32, align 8, !tbaa !9
  %145 = getelementptr inbounds %struct.doublecomplex, ptr %143, i64 %144
  %146 = getelementptr inbounds %struct.doublecomplex, ptr %145, i32 0, i32 1
  store double %142, ptr %146, align 8, !tbaa !14
  store i32 0, ptr %14, align 4
  store i32 1, ptr %89, align 4
  br label %3013

147:                                              ; preds = %113
  %148 = load ptr, ptr %19, align 8, !tbaa !5
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = sub nsw i64 %149, 3
  store i64 %150, ptr %32, align 8, !tbaa !9
  %151 = load ptr, ptr %18, align 8, !tbaa !5
  %152 = load i64, ptr %151, align 8, !tbaa !9
  store i64 %152, ptr %50, align 8, !tbaa !9
  br label %153

153:                                              ; preds = %186, %147
  %154 = load i64, ptr %50, align 8, !tbaa !9
  %155 = load i64, ptr %32, align 8, !tbaa !9
  %156 = icmp sle i64 %154, %155
  br i1 %156, label %157, label %189

157:                                              ; preds = %153
  %158 = load i64, ptr %50, align 8, !tbaa !9
  %159 = add nsw i64 %158, 2
  %160 = load i64, ptr %50, align 8, !tbaa !9
  %161 = load i64, ptr %28, align 8, !tbaa !9
  %162 = mul nsw i64 %160, %161
  %163 = add nsw i64 %159, %162
  store i64 %163, ptr %33, align 8, !tbaa !9
  %164 = load ptr, ptr %20, align 8, !tbaa !5
  %165 = load i64, ptr %33, align 8, !tbaa !9
  %166 = getelementptr inbounds %struct.doublecomplex, ptr %164, i64 %165
  %167 = getelementptr inbounds %struct.doublecomplex, ptr %166, i32 0, i32 0
  store double 0.000000e+00, ptr %167, align 8, !tbaa !11
  %168 = load ptr, ptr %20, align 8, !tbaa !5
  %169 = load i64, ptr %33, align 8, !tbaa !9
  %170 = getelementptr inbounds %struct.doublecomplex, ptr %168, i64 %169
  %171 = getelementptr inbounds %struct.doublecomplex, ptr %170, i32 0, i32 1
  store double 0.000000e+00, ptr %171, align 8, !tbaa !14
  %172 = load i64, ptr %50, align 8, !tbaa !9
  %173 = add nsw i64 %172, 3
  %174 = load i64, ptr %50, align 8, !tbaa !9
  %175 = load i64, ptr %28, align 8, !tbaa !9
  %176 = mul nsw i64 %174, %175
  %177 = add nsw i64 %173, %176
  store i64 %177, ptr %33, align 8, !tbaa !9
  %178 = load ptr, ptr %20, align 8, !tbaa !5
  %179 = load i64, ptr %33, align 8, !tbaa !9
  %180 = getelementptr inbounds %struct.doublecomplex, ptr %178, i64 %179
  %181 = getelementptr inbounds %struct.doublecomplex, ptr %180, i32 0, i32 0
  store double 0.000000e+00, ptr %181, align 8, !tbaa !11
  %182 = load ptr, ptr %20, align 8, !tbaa !5
  %183 = load i64, ptr %33, align 8, !tbaa !9
  %184 = getelementptr inbounds %struct.doublecomplex, ptr %182, i64 %183
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %184, i32 0, i32 1
  store double 0.000000e+00, ptr %185, align 8, !tbaa !14
  br label %186

186:                                              ; preds = %157
  %187 = load i64, ptr %50, align 8, !tbaa !9
  %188 = add nsw i64 %187, 1
  store i64 %188, ptr %50, align 8, !tbaa !9
  br label %153, !llvm.loop !15

189:                                              ; preds = %153
  %190 = load ptr, ptr %18, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = load ptr, ptr %19, align 8, !tbaa !5
  %193 = load i64, ptr %192, align 8, !tbaa !9
  %194 = sub nsw i64 %193, 2
  %195 = icmp sle i64 %191, %194
  br i1 %195, label %196, label %213

196:                                              ; preds = %189
  %197 = load ptr, ptr %19, align 8, !tbaa !5
  %198 = load i64, ptr %197, align 8, !tbaa !9
  %199 = load ptr, ptr %19, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = sub nsw i64 %200, 2
  %202 = load i64, ptr %28, align 8, !tbaa !9
  %203 = mul nsw i64 %201, %202
  %204 = add nsw i64 %198, %203
  store i64 %204, ptr %32, align 8, !tbaa !9
  %205 = load ptr, ptr %20, align 8, !tbaa !5
  %206 = load i64, ptr %32, align 8, !tbaa !9
  %207 = getelementptr inbounds %struct.doublecomplex, ptr %205, i64 %206
  %208 = getelementptr inbounds %struct.doublecomplex, ptr %207, i32 0, i32 0
  store double 0.000000e+00, ptr %208, align 8, !tbaa !11
  %209 = load ptr, ptr %20, align 8, !tbaa !5
  %210 = load i64, ptr %32, align 8, !tbaa !9
  %211 = getelementptr inbounds %struct.doublecomplex, ptr %209, i64 %210
  %212 = getelementptr inbounds %struct.doublecomplex, ptr %211, i32 0, i32 1
  store double 0.000000e+00, ptr %212, align 8, !tbaa !14
  br label %213

213:                                              ; preds = %196, %189
  %214 = load ptr, ptr %15, align 8, !tbaa !5
  %215 = load i64, ptr %214, align 8, !tbaa !9
  %216 = icmp ne i64 %215, 0
  br i1 %216, label %217, label %220

217:                                              ; preds = %213
  store i64 1, ptr %79, align 8, !tbaa !9
  %218 = load ptr, ptr %17, align 8, !tbaa !5
  %219 = load i64, ptr %218, align 8, !tbaa !9
  store i64 %219, ptr %77, align 8, !tbaa !9
  br label %225

220:                                              ; preds = %213
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = load i64, ptr %221, align 8, !tbaa !9
  store i64 %222, ptr %79, align 8, !tbaa !9
  %223 = load ptr, ptr %19, align 8, !tbaa !5
  %224 = load i64, ptr %223, align 8, !tbaa !9
  store i64 %224, ptr %77, align 8, !tbaa !9
  br label %225

225:                                              ; preds = %220, %217
  %226 = load ptr, ptr %19, align 8, !tbaa !5
  %227 = load i64, ptr %226, align 8, !tbaa !9
  store i64 %227, ptr %32, align 8, !tbaa !9
  %228 = load ptr, ptr %18, align 8, !tbaa !5
  %229 = load i64, ptr %228, align 8, !tbaa !9
  %230 = add nsw i64 %229, 1
  store i64 %230, ptr %49, align 8, !tbaa !9
  br label %231

231:                                              ; preds = %412, %225
  %232 = load i64, ptr %49, align 8, !tbaa !9
  %233 = load i64, ptr %32, align 8, !tbaa !9
  %234 = icmp sle i64 %232, %233
  br i1 %234, label %235, label %415

235:                                              ; preds = %231
  %236 = load ptr, ptr %20, align 8, !tbaa !5
  %237 = load i64, ptr %49, align 8, !tbaa !9
  %238 = load i64, ptr %49, align 8, !tbaa !9
  %239 = sub nsw i64 %238, 1
  %240 = load i64, ptr %28, align 8, !tbaa !9
  %241 = mul nsw i64 %239, %240
  %242 = add nsw i64 %237, %241
  %243 = getelementptr inbounds %struct.doublecomplex, ptr %236, i64 %242
  %244 = call double @d_imag(ptr noundef %243)
  %245 = fcmp une double %244, 0.000000e+00
  br i1 %245, label %246, label %411

246:                                              ; preds = %235
  %247 = load i64, ptr %49, align 8, !tbaa !9
  %248 = load i64, ptr %49, align 8, !tbaa !9
  %249 = sub nsw i64 %248, 1
  %250 = load i64, ptr %28, align 8, !tbaa !9
  %251 = mul nsw i64 %249, %250
  %252 = add nsw i64 %247, %251
  store i64 %252, ptr %33, align 8, !tbaa !9
  %253 = load i64, ptr %49, align 8, !tbaa !9
  %254 = load i64, ptr %49, align 8, !tbaa !9
  %255 = sub nsw i64 %254, 1
  %256 = load i64, ptr %28, align 8, !tbaa !9
  %257 = mul nsw i64 %255, %256
  %258 = add nsw i64 %253, %257
  store i64 %258, ptr %34, align 8, !tbaa !9
  %259 = load ptr, ptr %20, align 8, !tbaa !5
  %260 = load i64, ptr %34, align 8, !tbaa !9
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %259, i64 %260
  %262 = getelementptr inbounds %struct.doublecomplex, ptr %261, i32 0, i32 0
  %263 = load double, ptr %262, align 8, !tbaa !11
  store double %263, ptr %36, align 8, !tbaa !17
  %264 = load double, ptr %36, align 8, !tbaa !17
  %265 = fcmp oge double %264, 0.000000e+00
  br i1 %265, label %266, label %268

266:                                              ; preds = %246
  %267 = load double, ptr %36, align 8, !tbaa !17
  br label %271

268:                                              ; preds = %246
  %269 = load double, ptr %36, align 8, !tbaa !17
  %270 = fneg double %269
  br label %271

271:                                              ; preds = %268, %266
  %272 = phi double [ %267, %266 ], [ %270, %268 ]
  %273 = load ptr, ptr %20, align 8, !tbaa !5
  %274 = load i64, ptr %49, align 8, !tbaa !9
  %275 = load i64, ptr %49, align 8, !tbaa !9
  %276 = sub nsw i64 %275, 1
  %277 = load i64, ptr %28, align 8, !tbaa !9
  %278 = mul nsw i64 %276, %277
  %279 = add nsw i64 %274, %278
  %280 = getelementptr inbounds %struct.doublecomplex, ptr %273, i64 %279
  %281 = call double @d_imag(ptr noundef %280)
  store double %281, ptr %37, align 8, !tbaa !17
  %282 = load double, ptr %37, align 8, !tbaa !17
  %283 = fcmp oge double %282, 0.000000e+00
  br i1 %283, label %284, label %286

284:                                              ; preds = %271
  %285 = load double, ptr %37, align 8, !tbaa !17
  br label %289

286:                                              ; preds = %271
  %287 = load double, ptr %37, align 8, !tbaa !17
  %288 = fneg double %287
  br label %289

289:                                              ; preds = %286, %284
  %290 = phi double [ %285, %284 ], [ %288, %286 ]
  %291 = fadd double %272, %290
  store double %291, ptr %38, align 8, !tbaa !17
  %292 = load ptr, ptr %20, align 8, !tbaa !5
  %293 = load i64, ptr %33, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.doublecomplex, ptr %292, i64 %293
  %295 = getelementptr inbounds %struct.doublecomplex, ptr %294, i32 0, i32 0
  %296 = load double, ptr %295, align 8, !tbaa !11
  %297 = load double, ptr %38, align 8, !tbaa !17
  %298 = fdiv double %296, %297
  %299 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %298, ptr %299, align 8, !tbaa !11
  %300 = load ptr, ptr %20, align 8, !tbaa !5
  %301 = load i64, ptr %33, align 8, !tbaa !9
  %302 = getelementptr inbounds %struct.doublecomplex, ptr %300, i64 %301
  %303 = getelementptr inbounds %struct.doublecomplex, ptr %302, i32 0, i32 1
  %304 = load double, ptr %303, align 8, !tbaa !14
  %305 = load double, ptr %38, align 8, !tbaa !17
  %306 = fdiv double %304, %305
  %307 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %306, ptr %307, align 8, !tbaa !14
  %308 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %309 = load double, ptr %308, align 8, !tbaa !11
  %310 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 0
  store double %309, ptr %310, align 8, !tbaa !11
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %312 = load double, ptr %311, align 8, !tbaa !14
  %313 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 1
  store double %312, ptr %313, align 8, !tbaa !14
  call void @d_cnjg(ptr noundef %43, ptr noundef %73)
  %314 = call double @z_abs(ptr noundef %73)
  store double %314, ptr %36, align 8, !tbaa !17
  %315 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %316 = load double, ptr %315, align 8, !tbaa !11
  %317 = load double, ptr %36, align 8, !tbaa !17
  %318 = fdiv double %316, %317
  %319 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %318, ptr %319, align 8, !tbaa !11
  %320 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %321 = load double, ptr %320, align 8, !tbaa !14
  %322 = load double, ptr %36, align 8, !tbaa !17
  %323 = fdiv double %321, %322
  %324 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %323, ptr %324, align 8, !tbaa !14
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %326 = load double, ptr %325, align 8, !tbaa !11
  %327 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 0
  store double %326, ptr %327, align 8, !tbaa !11
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %329 = load double, ptr %328, align 8, !tbaa !14
  %330 = getelementptr inbounds %struct.doublecomplex, ptr %73, i32 0, i32 1
  store double %329, ptr %330, align 8, !tbaa !14
  %331 = load i64, ptr %49, align 8, !tbaa !9
  %332 = load i64, ptr %49, align 8, !tbaa !9
  %333 = sub nsw i64 %332, 1
  %334 = load i64, ptr %28, align 8, !tbaa !9
  %335 = mul nsw i64 %333, %334
  %336 = add nsw i64 %331, %335
  store i64 %336, ptr %33, align 8, !tbaa !9
  %337 = load ptr, ptr %20, align 8, !tbaa !5
  %338 = load i64, ptr %49, align 8, !tbaa !9
  %339 = load i64, ptr %49, align 8, !tbaa !9
  %340 = sub nsw i64 %339, 1
  %341 = load i64, ptr %28, align 8, !tbaa !9
  %342 = mul nsw i64 %340, %341
  %343 = add nsw i64 %338, %342
  %344 = getelementptr inbounds %struct.doublecomplex, ptr %337, i64 %343
  %345 = call double @z_abs(ptr noundef %344)
  store double %345, ptr %36, align 8, !tbaa !17
  %346 = load double, ptr %36, align 8, !tbaa !17
  %347 = load ptr, ptr %20, align 8, !tbaa !5
  %348 = load i64, ptr %33, align 8, !tbaa !9
  %349 = getelementptr inbounds %struct.doublecomplex, ptr %347, i64 %348
  %350 = getelementptr inbounds %struct.doublecomplex, ptr %349, i32 0, i32 0
  store double %346, ptr %350, align 8, !tbaa !11
  %351 = load ptr, ptr %20, align 8, !tbaa !5
  %352 = load i64, ptr %33, align 8, !tbaa !9
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %351, i64 %352
  %354 = getelementptr inbounds %struct.doublecomplex, ptr %353, i32 0, i32 1
  store double 0.000000e+00, ptr %354, align 8, !tbaa !14
  %355 = load i64, ptr %77, align 8, !tbaa !9
  %356 = load i64, ptr %49, align 8, !tbaa !9
  %357 = sub nsw i64 %355, %356
  %358 = add nsw i64 %357, 1
  store i64 %358, ptr %33, align 8, !tbaa !9
  %359 = load ptr, ptr %20, align 8, !tbaa !5
  %360 = load i64, ptr %49, align 8, !tbaa !9
  %361 = load i64, ptr %49, align 8, !tbaa !9
  %362 = load i64, ptr %28, align 8, !tbaa !9
  %363 = mul nsw i64 %361, %362
  %364 = add nsw i64 %360, %363
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %359, i64 %364
  %366 = load ptr, ptr %21, align 8, !tbaa !5
  %367 = call i32 @f2c_zscal(ptr noundef %33, ptr noundef %73, ptr noundef %365, ptr noundef %366)
  %368 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %368, ptr %34, align 8, !tbaa !9
  %369 = load i64, ptr %49, align 8, !tbaa !9
  %370 = add nsw i64 %369, 1
  store i64 %370, ptr %35, align 8, !tbaa !9
  %371 = load i64, ptr %34, align 8, !tbaa !9
  %372 = load i64, ptr %35, align 8, !tbaa !9
  %373 = icmp sle i64 %371, %372
  br i1 %373, label %374, label %376

374:                                              ; preds = %289
  %375 = load i64, ptr %34, align 8, !tbaa !9
  br label %378

376:                                              ; preds = %289
  %377 = load i64, ptr %35, align 8, !tbaa !9
  br label %378

378:                                              ; preds = %376, %374
  %379 = phi i64 [ %375, %374 ], [ %377, %376 ]
  %380 = load i64, ptr %79, align 8, !tbaa !9
  %381 = sub nsw i64 %379, %380
  %382 = add nsw i64 %381, 1
  store i64 %382, ptr %33, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %42, ptr noundef %73)
  %383 = load ptr, ptr %20, align 8, !tbaa !5
  %384 = load i64, ptr %79, align 8, !tbaa !9
  %385 = load i64, ptr %49, align 8, !tbaa !9
  %386 = load i64, ptr %28, align 8, !tbaa !9
  %387 = mul nsw i64 %385, %386
  %388 = add nsw i64 %384, %387
  %389 = getelementptr inbounds %struct.doublecomplex, ptr %383, i64 %388
  %390 = call i32 @f2c_zscal(ptr noundef %33, ptr noundef %42, ptr noundef %389, ptr noundef @c__1)
  %391 = load ptr, ptr %16, align 8, !tbaa !5
  %392 = load i64, ptr %391, align 8, !tbaa !9
  %393 = icmp ne i64 %392, 0
  br i1 %393, label %394, label %410

394:                                              ; preds = %378
  %395 = load ptr, ptr %24, align 8, !tbaa !5
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = load ptr, ptr %23, align 8, !tbaa !5
  %398 = load i64, ptr %397, align 8, !tbaa !9
  %399 = sub nsw i64 %396, %398
  %400 = add nsw i64 %399, 1
  store i64 %400, ptr %33, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %42, ptr noundef %73)
  %401 = load ptr, ptr %25, align 8, !tbaa !5
  %402 = load ptr, ptr %23, align 8, !tbaa !5
  %403 = load i64, ptr %402, align 8, !tbaa !9
  %404 = load i64, ptr %49, align 8, !tbaa !9
  %405 = load i64, ptr %30, align 8, !tbaa !9
  %406 = mul nsw i64 %404, %405
  %407 = add nsw i64 %403, %406
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %401, i64 %407
  %409 = call i32 @f2c_zscal(ptr noundef %33, ptr noundef %42, ptr noundef %408, ptr noundef @c__1)
  br label %410

410:                                              ; preds = %394, %378
  br label %411

411:                                              ; preds = %410, %235
  br label %412

412:                                              ; preds = %411
  %413 = load i64, ptr %49, align 8, !tbaa !9
  %414 = add nsw i64 %413, 1
  store i64 %414, ptr %49, align 8, !tbaa !9
  br label %231, !llvm.loop !18

415:                                              ; preds = %231
  %416 = load ptr, ptr %19, align 8, !tbaa !5
  %417 = load i64, ptr %416, align 8, !tbaa !9
  %418 = load ptr, ptr %18, align 8, !tbaa !5
  %419 = load i64, ptr %418, align 8, !tbaa !9
  %420 = sub nsw i64 %417, %419
  %421 = add nsw i64 %420, 1
  store i64 %421, ptr %74, align 8, !tbaa !9
  %422 = load ptr, ptr %24, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = load ptr, ptr %23, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = sub nsw i64 %423, %425
  %427 = add nsw i64 %426, 1
  store i64 %427, ptr %75, align 8, !tbaa !9
  %428 = call double @dlamch_(ptr noundef @.str)
  store double %428, ptr %86, align 8, !tbaa !17
  %429 = load double, ptr %86, align 8, !tbaa !17
  %430 = fdiv double 1.000000e+00, %429
  store double %430, ptr %87, align 8, !tbaa !17
  %431 = call i32 @dlabad_(ptr noundef %86, ptr noundef %87)
  %432 = call double @dlamch_(ptr noundef @.str.1)
  store double %432, ptr %81, align 8, !tbaa !17
  %433 = load double, ptr %86, align 8, !tbaa !17
  %434 = load i64, ptr %74, align 8, !tbaa !9
  %435 = sitofp i64 %434 to double
  %436 = load double, ptr %81, align 8, !tbaa !17
  %437 = fdiv double %435, %436
  %438 = fmul double %433, %437
  store double %438, ptr %88, align 8, !tbaa !17
  %439 = load ptr, ptr %15, align 8, !tbaa !5
  %440 = load i64, ptr %439, align 8, !tbaa !9
  %441 = icmp ne i64 %440, 0
  br i1 %441, label %442, label %445

442:                                              ; preds = %415
  store i64 1, ptr %60, align 8, !tbaa !9
  %443 = load ptr, ptr %17, align 8, !tbaa !5
  %444 = load i64, ptr %443, align 8, !tbaa !9
  store i64 %444, ptr %61, align 8, !tbaa !9
  br label %445

445:                                              ; preds = %442, %415
  %446 = load ptr, ptr %19, align 8, !tbaa !5
  %447 = load i64, ptr %446, align 8, !tbaa !9
  store i64 %447, ptr %49, align 8, !tbaa !9
  br label %448

448:                                              ; preds = %2985, %445
  %449 = load i64, ptr %49, align 8, !tbaa !9
  %450 = load ptr, ptr %18, align 8, !tbaa !5
  %451 = load i64, ptr %450, align 8, !tbaa !9
  %452 = icmp slt i64 %449, %451
  br i1 %452, label %453, label %454

453:                                              ; preds = %448
  br label %3012

454:                                              ; preds = %448
  %455 = load ptr, ptr %18, align 8, !tbaa !5
  %456 = load i64, ptr %455, align 8, !tbaa !9
  store i64 %456, ptr %52, align 8, !tbaa !9
  store i64 0, ptr %80, align 8, !tbaa !9
  br label %457

457:                                              ; preds = %2979, %454
  %458 = load i64, ptr %80, align 8, !tbaa !9
  %459 = icmp sle i64 %458, 30
  br i1 %459, label %460, label %2982

460:                                              ; preds = %457
  %461 = load i64, ptr %52, align 8, !tbaa !9
  %462 = add nsw i64 %461, 1
  store i64 %462, ptr %32, align 8, !tbaa !9
  %463 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %463, ptr %51, align 8, !tbaa !9
  br label %464

464:                                              ; preds = %1102, %460
  %465 = load i64, ptr %51, align 8, !tbaa !9
  %466 = load i64, ptr %32, align 8, !tbaa !9
  %467 = icmp sge i64 %465, %466
  br i1 %467, label %468, label %1105

468:                                              ; preds = %464
  %469 = load i64, ptr %51, align 8, !tbaa !9
  %470 = load i64, ptr %51, align 8, !tbaa !9
  %471 = sub nsw i64 %470, 1
  %472 = load i64, ptr %28, align 8, !tbaa !9
  %473 = mul nsw i64 %471, %472
  %474 = add nsw i64 %469, %473
  store i64 %474, ptr %33, align 8, !tbaa !9
  %475 = load ptr, ptr %20, align 8, !tbaa !5
  %476 = load i64, ptr %33, align 8, !tbaa !9
  %477 = getelementptr inbounds %struct.doublecomplex, ptr %475, i64 %476
  %478 = getelementptr inbounds %struct.doublecomplex, ptr %477, i32 0, i32 0
  %479 = load double, ptr %478, align 8, !tbaa !11
  store double %479, ptr %36, align 8, !tbaa !17
  %480 = load double, ptr %36, align 8, !tbaa !17
  %481 = fcmp oge double %480, 0.000000e+00
  br i1 %481, label %482, label %484

482:                                              ; preds = %468
  %483 = load double, ptr %36, align 8, !tbaa !17
  br label %487

484:                                              ; preds = %468
  %485 = load double, ptr %36, align 8, !tbaa !17
  %486 = fneg double %485
  br label %487

487:                                              ; preds = %484, %482
  %488 = phi double [ %483, %482 ], [ %486, %484 ]
  %489 = load ptr, ptr %20, align 8, !tbaa !5
  %490 = load i64, ptr %51, align 8, !tbaa !9
  %491 = load i64, ptr %51, align 8, !tbaa !9
  %492 = sub nsw i64 %491, 1
  %493 = load i64, ptr %28, align 8, !tbaa !9
  %494 = mul nsw i64 %492, %493
  %495 = add nsw i64 %490, %494
  %496 = getelementptr inbounds %struct.doublecomplex, ptr %489, i64 %495
  %497 = call double @d_imag(ptr noundef %496)
  store double %497, ptr %37, align 8, !tbaa !17
  %498 = load double, ptr %37, align 8, !tbaa !17
  %499 = fcmp oge double %498, 0.000000e+00
  br i1 %499, label %500, label %502

500:                                              ; preds = %487
  %501 = load double, ptr %37, align 8, !tbaa !17
  br label %505

502:                                              ; preds = %487
  %503 = load double, ptr %37, align 8, !tbaa !17
  %504 = fneg double %503
  br label %505

505:                                              ; preds = %502, %500
  %506 = phi double [ %501, %500 ], [ %504, %502 ]
  %507 = fadd double %488, %506
  %508 = load double, ptr %88, align 8, !tbaa !17
  %509 = fcmp ole double %507, %508
  br i1 %509, label %510, label %511

510:                                              ; preds = %505
  br label %1106

511:                                              ; preds = %505
  %512 = load i64, ptr %51, align 8, !tbaa !9
  %513 = sub nsw i64 %512, 1
  %514 = load i64, ptr %51, align 8, !tbaa !9
  %515 = sub nsw i64 %514, 1
  %516 = load i64, ptr %28, align 8, !tbaa !9
  %517 = mul nsw i64 %515, %516
  %518 = add nsw i64 %513, %517
  store i64 %518, ptr %33, align 8, !tbaa !9
  %519 = load i64, ptr %51, align 8, !tbaa !9
  %520 = load i64, ptr %51, align 8, !tbaa !9
  %521 = load i64, ptr %28, align 8, !tbaa !9
  %522 = mul nsw i64 %520, %521
  %523 = add nsw i64 %519, %522
  store i64 %523, ptr %34, align 8, !tbaa !9
  %524 = load ptr, ptr %20, align 8, !tbaa !5
  %525 = load i64, ptr %33, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 %525
  %527 = getelementptr inbounds %struct.doublecomplex, ptr %526, i32 0, i32 0
  %528 = load double, ptr %527, align 8, !tbaa !11
  store double %528, ptr %36, align 8, !tbaa !17
  %529 = load double, ptr %36, align 8, !tbaa !17
  %530 = fcmp oge double %529, 0.000000e+00
  br i1 %530, label %531, label %533

531:                                              ; preds = %511
  %532 = load double, ptr %36, align 8, !tbaa !17
  br label %536

533:                                              ; preds = %511
  %534 = load double, ptr %36, align 8, !tbaa !17
  %535 = fneg double %534
  br label %536

536:                                              ; preds = %533, %531
  %537 = phi double [ %532, %531 ], [ %535, %533 ]
  %538 = load ptr, ptr %20, align 8, !tbaa !5
  %539 = load i64, ptr %51, align 8, !tbaa !9
  %540 = sub nsw i64 %539, 1
  %541 = load i64, ptr %51, align 8, !tbaa !9
  %542 = sub nsw i64 %541, 1
  %543 = load i64, ptr %28, align 8, !tbaa !9
  %544 = mul nsw i64 %542, %543
  %545 = add nsw i64 %540, %544
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %538, i64 %545
  %547 = call double @d_imag(ptr noundef %546)
  store double %547, ptr %37, align 8, !tbaa !17
  %548 = load double, ptr %37, align 8, !tbaa !17
  %549 = fcmp oge double %548, 0.000000e+00
  br i1 %549, label %550, label %552

550:                                              ; preds = %536
  %551 = load double, ptr %37, align 8, !tbaa !17
  br label %555

552:                                              ; preds = %536
  %553 = load double, ptr %37, align 8, !tbaa !17
  %554 = fneg double %553
  br label %555

555:                                              ; preds = %552, %550
  %556 = phi double [ %551, %550 ], [ %554, %552 ]
  %557 = fadd double %537, %556
  %558 = load ptr, ptr %20, align 8, !tbaa !5
  %559 = load i64, ptr %34, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.doublecomplex, ptr %558, i64 %559
  %561 = getelementptr inbounds %struct.doublecomplex, ptr %560, i32 0, i32 0
  %562 = load double, ptr %561, align 8, !tbaa !11
  store double %562, ptr %38, align 8, !tbaa !17
  %563 = load double, ptr %38, align 8, !tbaa !17
  %564 = fcmp oge double %563, 0.000000e+00
  br i1 %564, label %565, label %567

565:                                              ; preds = %555
  %566 = load double, ptr %38, align 8, !tbaa !17
  br label %570

567:                                              ; preds = %555
  %568 = load double, ptr %38, align 8, !tbaa !17
  %569 = fneg double %568
  br label %570

570:                                              ; preds = %567, %565
  %571 = phi double [ %566, %565 ], [ %569, %567 ]
  %572 = load ptr, ptr %20, align 8, !tbaa !5
  %573 = load i64, ptr %51, align 8, !tbaa !9
  %574 = load i64, ptr %51, align 8, !tbaa !9
  %575 = load i64, ptr %28, align 8, !tbaa !9
  %576 = mul nsw i64 %574, %575
  %577 = add nsw i64 %573, %576
  %578 = getelementptr inbounds %struct.doublecomplex, ptr %572, i64 %577
  %579 = call double @d_imag(ptr noundef %578)
  store double %579, ptr %39, align 8, !tbaa !17
  %580 = load double, ptr %39, align 8, !tbaa !17
  %581 = fcmp oge double %580, 0.000000e+00
  br i1 %581, label %582, label %584

582:                                              ; preds = %570
  %583 = load double, ptr %39, align 8, !tbaa !17
  br label %587

584:                                              ; preds = %570
  %585 = load double, ptr %39, align 8, !tbaa !17
  %586 = fneg double %585
  br label %587

587:                                              ; preds = %584, %582
  %588 = phi double [ %583, %582 ], [ %586, %584 ]
  %589 = fadd double %571, %588
  %590 = fadd double %557, %589
  store double %590, ptr %83, align 8, !tbaa !17
  %591 = load double, ptr %83, align 8, !tbaa !17
  %592 = fcmp oeq double %591, 0.000000e+00
  br i1 %592, label %593, label %653

593:                                              ; preds = %587
  %594 = load i64, ptr %51, align 8, !tbaa !9
  %595 = sub nsw i64 %594, 2
  %596 = load ptr, ptr %18, align 8, !tbaa !5
  %597 = load i64, ptr %596, align 8, !tbaa !9
  %598 = icmp sge i64 %595, %597
  br i1 %598, label %599, label %623

599:                                              ; preds = %593
  %600 = load i64, ptr %51, align 8, !tbaa !9
  %601 = sub nsw i64 %600, 1
  %602 = load i64, ptr %51, align 8, !tbaa !9
  %603 = sub nsw i64 %602, 2
  %604 = load i64, ptr %28, align 8, !tbaa !9
  %605 = mul nsw i64 %603, %604
  %606 = add nsw i64 %601, %605
  store i64 %606, ptr %33, align 8, !tbaa !9
  %607 = load ptr, ptr %20, align 8, !tbaa !5
  %608 = load i64, ptr %33, align 8, !tbaa !9
  %609 = getelementptr inbounds %struct.doublecomplex, ptr %607, i64 %608
  %610 = getelementptr inbounds %struct.doublecomplex, ptr %609, i32 0, i32 0
  %611 = load double, ptr %610, align 8, !tbaa !11
  store double %611, ptr %36, align 8, !tbaa !17
  %612 = load double, ptr %36, align 8, !tbaa !17
  %613 = fcmp oge double %612, 0.000000e+00
  br i1 %613, label %614, label %616

614:                                              ; preds = %599
  %615 = load double, ptr %36, align 8, !tbaa !17
  br label %619

616:                                              ; preds = %599
  %617 = load double, ptr %36, align 8, !tbaa !17
  %618 = fneg double %617
  br label %619

619:                                              ; preds = %616, %614
  %620 = phi double [ %615, %614 ], [ %618, %616 ]
  %621 = load double, ptr %83, align 8, !tbaa !17
  %622 = fadd double %621, %620
  store double %622, ptr %83, align 8, !tbaa !17
  br label %623

623:                                              ; preds = %619, %593
  %624 = load i64, ptr %51, align 8, !tbaa !9
  %625 = add nsw i64 %624, 1
  %626 = load ptr, ptr %19, align 8, !tbaa !5
  %627 = load i64, ptr %626, align 8, !tbaa !9
  %628 = icmp sle i64 %625, %627
  br i1 %628, label %629, label %652

629:                                              ; preds = %623
  %630 = load i64, ptr %51, align 8, !tbaa !9
  %631 = add nsw i64 %630, 1
  %632 = load i64, ptr %51, align 8, !tbaa !9
  %633 = load i64, ptr %28, align 8, !tbaa !9
  %634 = mul nsw i64 %632, %633
  %635 = add nsw i64 %631, %634
  store i64 %635, ptr %33, align 8, !tbaa !9
  %636 = load ptr, ptr %20, align 8, !tbaa !5
  %637 = load i64, ptr %33, align 8, !tbaa !9
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %636, i64 %637
  %639 = getelementptr inbounds %struct.doublecomplex, ptr %638, i32 0, i32 0
  %640 = load double, ptr %639, align 8, !tbaa !11
  store double %640, ptr %36, align 8, !tbaa !17
  %641 = load double, ptr %36, align 8, !tbaa !17
  %642 = fcmp oge double %641, 0.000000e+00
  br i1 %642, label %643, label %645

643:                                              ; preds = %629
  %644 = load double, ptr %36, align 8, !tbaa !17
  br label %648

645:                                              ; preds = %629
  %646 = load double, ptr %36, align 8, !tbaa !17
  %647 = fneg double %646
  br label %648

648:                                              ; preds = %645, %643
  %649 = phi double [ %644, %643 ], [ %647, %645 ]
  %650 = load double, ptr %83, align 8, !tbaa !17
  %651 = fadd double %650, %649
  store double %651, ptr %83, align 8, !tbaa !17
  br label %652

652:                                              ; preds = %648, %623
  br label %653

653:                                              ; preds = %652, %587
  %654 = load i64, ptr %51, align 8, !tbaa !9
  %655 = load i64, ptr %51, align 8, !tbaa !9
  %656 = sub nsw i64 %655, 1
  %657 = load i64, ptr %28, align 8, !tbaa !9
  %658 = mul nsw i64 %656, %657
  %659 = add nsw i64 %654, %658
  store i64 %659, ptr %33, align 8, !tbaa !9
  %660 = load ptr, ptr %20, align 8, !tbaa !5
  %661 = load i64, ptr %33, align 8, !tbaa !9
  %662 = getelementptr inbounds %struct.doublecomplex, ptr %660, i64 %661
  %663 = getelementptr inbounds %struct.doublecomplex, ptr %662, i32 0, i32 0
  %664 = load double, ptr %663, align 8, !tbaa !11
  store double %664, ptr %36, align 8, !tbaa !17
  %665 = load double, ptr %36, align 8, !tbaa !17
  %666 = fcmp oge double %665, 0.000000e+00
  br i1 %666, label %667, label %669

667:                                              ; preds = %653
  %668 = load double, ptr %36, align 8, !tbaa !17
  br label %672

669:                                              ; preds = %653
  %670 = load double, ptr %36, align 8, !tbaa !17
  %671 = fneg double %670
  br label %672

672:                                              ; preds = %669, %667
  %673 = phi double [ %668, %667 ], [ %671, %669 ]
  %674 = load double, ptr %81, align 8, !tbaa !17
  %675 = load double, ptr %83, align 8, !tbaa !17
  %676 = fmul double %674, %675
  %677 = fcmp ole double %673, %676
  br i1 %677, label %678, label %1101

678:                                              ; preds = %672
  %679 = load i64, ptr %51, align 8, !tbaa !9
  %680 = load i64, ptr %51, align 8, !tbaa !9
  %681 = sub nsw i64 %680, 1
  %682 = load i64, ptr %28, align 8, !tbaa !9
  %683 = mul nsw i64 %681, %682
  %684 = add nsw i64 %679, %683
  store i64 %684, ptr %33, align 8, !tbaa !9
  %685 = load i64, ptr %51, align 8, !tbaa !9
  %686 = sub nsw i64 %685, 1
  %687 = load i64, ptr %51, align 8, !tbaa !9
  %688 = load i64, ptr %28, align 8, !tbaa !9
  %689 = mul nsw i64 %687, %688
  %690 = add nsw i64 %686, %689
  store i64 %690, ptr %34, align 8, !tbaa !9
  %691 = load ptr, ptr %20, align 8, !tbaa !5
  %692 = load i64, ptr %33, align 8, !tbaa !9
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %691, i64 %692
  %694 = getelementptr inbounds %struct.doublecomplex, ptr %693, i32 0, i32 0
  %695 = load double, ptr %694, align 8, !tbaa !11
  store double %695, ptr %36, align 8, !tbaa !17
  %696 = load double, ptr %36, align 8, !tbaa !17
  %697 = fcmp oge double %696, 0.000000e+00
  br i1 %697, label %698, label %700

698:                                              ; preds = %678
  %699 = load double, ptr %36, align 8, !tbaa !17
  br label %703

700:                                              ; preds = %678
  %701 = load double, ptr %36, align 8, !tbaa !17
  %702 = fneg double %701
  br label %703

703:                                              ; preds = %700, %698
  %704 = phi double [ %699, %698 ], [ %702, %700 ]
  %705 = load ptr, ptr %20, align 8, !tbaa !5
  %706 = load i64, ptr %51, align 8, !tbaa !9
  %707 = load i64, ptr %51, align 8, !tbaa !9
  %708 = sub nsw i64 %707, 1
  %709 = load i64, ptr %28, align 8, !tbaa !9
  %710 = mul nsw i64 %708, %709
  %711 = add nsw i64 %706, %710
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %705, i64 %711
  %713 = call double @d_imag(ptr noundef %712)
  store double %713, ptr %37, align 8, !tbaa !17
  %714 = load double, ptr %37, align 8, !tbaa !17
  %715 = fcmp oge double %714, 0.000000e+00
  br i1 %715, label %716, label %718

716:                                              ; preds = %703
  %717 = load double, ptr %37, align 8, !tbaa !17
  br label %721

718:                                              ; preds = %703
  %719 = load double, ptr %37, align 8, !tbaa !17
  %720 = fneg double %719
  br label %721

721:                                              ; preds = %718, %716
  %722 = phi double [ %717, %716 ], [ %720, %718 ]
  %723 = fadd double %704, %722
  store double %723, ptr %40, align 8, !tbaa !17
  %724 = load ptr, ptr %20, align 8, !tbaa !5
  %725 = load i64, ptr %34, align 8, !tbaa !9
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %724, i64 %725
  %727 = getelementptr inbounds %struct.doublecomplex, ptr %726, i32 0, i32 0
  %728 = load double, ptr %727, align 8, !tbaa !11
  store double %728, ptr %38, align 8, !tbaa !17
  %729 = load double, ptr %38, align 8, !tbaa !17
  %730 = fcmp oge double %729, 0.000000e+00
  br i1 %730, label %731, label %733

731:                                              ; preds = %721
  %732 = load double, ptr %38, align 8, !tbaa !17
  br label %736

733:                                              ; preds = %721
  %734 = load double, ptr %38, align 8, !tbaa !17
  %735 = fneg double %734
  br label %736

736:                                              ; preds = %733, %731
  %737 = phi double [ %732, %731 ], [ %735, %733 ]
  %738 = load ptr, ptr %20, align 8, !tbaa !5
  %739 = load i64, ptr %51, align 8, !tbaa !9
  %740 = sub nsw i64 %739, 1
  %741 = load i64, ptr %51, align 8, !tbaa !9
  %742 = load i64, ptr %28, align 8, !tbaa !9
  %743 = mul nsw i64 %741, %742
  %744 = add nsw i64 %740, %743
  %745 = getelementptr inbounds %struct.doublecomplex, ptr %738, i64 %744
  %746 = call double @d_imag(ptr noundef %745)
  store double %746, ptr %39, align 8, !tbaa !17
  %747 = load double, ptr %39, align 8, !tbaa !17
  %748 = fcmp oge double %747, 0.000000e+00
  br i1 %748, label %749, label %751

749:                                              ; preds = %736
  %750 = load double, ptr %39, align 8, !tbaa !17
  br label %754

751:                                              ; preds = %736
  %752 = load double, ptr %39, align 8, !tbaa !17
  %753 = fneg double %752
  br label %754

754:                                              ; preds = %751, %749
  %755 = phi double [ %750, %749 ], [ %753, %751 ]
  %756 = fadd double %737, %755
  store double %756, ptr %41, align 8, !tbaa !17
  %757 = load double, ptr %40, align 8, !tbaa !17
  %758 = load double, ptr %41, align 8, !tbaa !17
  %759 = fcmp oge double %757, %758
  br i1 %759, label %760, label %762

760:                                              ; preds = %754
  %761 = load double, ptr %40, align 8, !tbaa !17
  br label %764

762:                                              ; preds = %754
  %763 = load double, ptr %41, align 8, !tbaa !17
  br label %764

764:                                              ; preds = %762, %760
  %765 = phi double [ %761, %760 ], [ %763, %762 ]
  store double %765, ptr %66, align 8, !tbaa !17
  %766 = load i64, ptr %51, align 8, !tbaa !9
  %767 = load i64, ptr %51, align 8, !tbaa !9
  %768 = sub nsw i64 %767, 1
  %769 = load i64, ptr %28, align 8, !tbaa !9
  %770 = mul nsw i64 %768, %769
  %771 = add nsw i64 %766, %770
  store i64 %771, ptr %33, align 8, !tbaa !9
  %772 = load i64, ptr %51, align 8, !tbaa !9
  %773 = sub nsw i64 %772, 1
  %774 = load i64, ptr %51, align 8, !tbaa !9
  %775 = load i64, ptr %28, align 8, !tbaa !9
  %776 = mul nsw i64 %774, %775
  %777 = add nsw i64 %773, %776
  store i64 %777, ptr %34, align 8, !tbaa !9
  %778 = load ptr, ptr %20, align 8, !tbaa !5
  %779 = load i64, ptr %33, align 8, !tbaa !9
  %780 = getelementptr inbounds %struct.doublecomplex, ptr %778, i64 %779
  %781 = getelementptr inbounds %struct.doublecomplex, ptr %780, i32 0, i32 0
  %782 = load double, ptr %781, align 8, !tbaa !11
  store double %782, ptr %36, align 8, !tbaa !17
  %783 = load double, ptr %36, align 8, !tbaa !17
  %784 = fcmp oge double %783, 0.000000e+00
  br i1 %784, label %785, label %787

785:                                              ; preds = %764
  %786 = load double, ptr %36, align 8, !tbaa !17
  br label %790

787:                                              ; preds = %764
  %788 = load double, ptr %36, align 8, !tbaa !17
  %789 = fneg double %788
  br label %790

790:                                              ; preds = %787, %785
  %791 = phi double [ %786, %785 ], [ %789, %787 ]
  %792 = load ptr, ptr %20, align 8, !tbaa !5
  %793 = load i64, ptr %51, align 8, !tbaa !9
  %794 = load i64, ptr %51, align 8, !tbaa !9
  %795 = sub nsw i64 %794, 1
  %796 = load i64, ptr %28, align 8, !tbaa !9
  %797 = mul nsw i64 %795, %796
  %798 = add nsw i64 %793, %797
  %799 = getelementptr inbounds %struct.doublecomplex, ptr %792, i64 %798
  %800 = call double @d_imag(ptr noundef %799)
  store double %800, ptr %37, align 8, !tbaa !17
  %801 = load double, ptr %37, align 8, !tbaa !17
  %802 = fcmp oge double %801, 0.000000e+00
  br i1 %802, label %803, label %805

803:                                              ; preds = %790
  %804 = load double, ptr %37, align 8, !tbaa !17
  br label %808

805:                                              ; preds = %790
  %806 = load double, ptr %37, align 8, !tbaa !17
  %807 = fneg double %806
  br label %808

808:                                              ; preds = %805, %803
  %809 = phi double [ %804, %803 ], [ %807, %805 ]
  %810 = fadd double %791, %809
  store double %810, ptr %40, align 8, !tbaa !17
  %811 = load ptr, ptr %20, align 8, !tbaa !5
  %812 = load i64, ptr %34, align 8, !tbaa !9
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %811, i64 %812
  %814 = getelementptr inbounds %struct.doublecomplex, ptr %813, i32 0, i32 0
  %815 = load double, ptr %814, align 8, !tbaa !11
  store double %815, ptr %38, align 8, !tbaa !17
  %816 = load double, ptr %38, align 8, !tbaa !17
  %817 = fcmp oge double %816, 0.000000e+00
  br i1 %817, label %818, label %820

818:                                              ; preds = %808
  %819 = load double, ptr %38, align 8, !tbaa !17
  br label %823

820:                                              ; preds = %808
  %821 = load double, ptr %38, align 8, !tbaa !17
  %822 = fneg double %821
  br label %823

823:                                              ; preds = %820, %818
  %824 = phi double [ %819, %818 ], [ %822, %820 ]
  %825 = load ptr, ptr %20, align 8, !tbaa !5
  %826 = load i64, ptr %51, align 8, !tbaa !9
  %827 = sub nsw i64 %826, 1
  %828 = load i64, ptr %51, align 8, !tbaa !9
  %829 = load i64, ptr %28, align 8, !tbaa !9
  %830 = mul nsw i64 %828, %829
  %831 = add nsw i64 %827, %830
  %832 = getelementptr inbounds %struct.doublecomplex, ptr %825, i64 %831
  %833 = call double @d_imag(ptr noundef %832)
  store double %833, ptr %39, align 8, !tbaa !17
  %834 = load double, ptr %39, align 8, !tbaa !17
  %835 = fcmp oge double %834, 0.000000e+00
  br i1 %835, label %836, label %838

836:                                              ; preds = %823
  %837 = load double, ptr %39, align 8, !tbaa !17
  br label %841

838:                                              ; preds = %823
  %839 = load double, ptr %39, align 8, !tbaa !17
  %840 = fneg double %839
  br label %841

841:                                              ; preds = %838, %836
  %842 = phi double [ %837, %836 ], [ %840, %838 ]
  %843 = fadd double %824, %842
  store double %843, ptr %41, align 8, !tbaa !17
  %844 = load double, ptr %40, align 8, !tbaa !17
  %845 = load double, ptr %41, align 8, !tbaa !17
  %846 = fcmp ole double %844, %845
  br i1 %846, label %847, label %849

847:                                              ; preds = %841
  %848 = load double, ptr %40, align 8, !tbaa !17
  br label %851

849:                                              ; preds = %841
  %850 = load double, ptr %41, align 8, !tbaa !17
  br label %851

851:                                              ; preds = %849, %847
  %852 = phi double [ %848, %847 ], [ %850, %849 ]
  store double %852, ptr %67, align 8, !tbaa !17
  %853 = load i64, ptr %51, align 8, !tbaa !9
  %854 = sub nsw i64 %853, 1
  %855 = load i64, ptr %51, align 8, !tbaa !9
  %856 = sub nsw i64 %855, 1
  %857 = load i64, ptr %28, align 8, !tbaa !9
  %858 = mul nsw i64 %856, %857
  %859 = add nsw i64 %854, %858
  store i64 %859, ptr %33, align 8, !tbaa !9
  %860 = load i64, ptr %51, align 8, !tbaa !9
  %861 = load i64, ptr %51, align 8, !tbaa !9
  %862 = load i64, ptr %28, align 8, !tbaa !9
  %863 = mul nsw i64 %861, %862
  %864 = add nsw i64 %860, %863
  store i64 %864, ptr %34, align 8, !tbaa !9
  %865 = load ptr, ptr %20, align 8, !tbaa !5
  %866 = load i64, ptr %33, 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 !11
  %870 = load ptr, ptr %20, align 8, !tbaa !5
  %871 = load i64, ptr %34, align 8, !tbaa !9
  %872 = getelementptr inbounds %struct.doublecomplex, ptr %870, i64 %871
  %873 = getelementptr inbounds %struct.doublecomplex, ptr %872, i32 0, i32 0
  %874 = load double, ptr %873, align 8, !tbaa !11
  %875 = fsub double %869, %874
  %876 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %875, ptr %876, align 8, !tbaa !11
  %877 = load ptr, ptr %20, align 8, !tbaa !5
  %878 = load i64, ptr %33, align 8, !tbaa !9
  %879 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 %878
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %879, i32 0, i32 1
  %881 = load double, ptr %880, align 8, !tbaa !14
  %882 = load ptr, ptr %20, align 8, !tbaa !5
  %883 = load i64, ptr %34, align 8, !tbaa !9
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %882, i64 %883
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %884, i32 0, i32 1
  %886 = load double, ptr %885, align 8, !tbaa !14
  %887 = fsub double %881, %886
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %887, ptr %888, align 8, !tbaa !14
  %889 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %890 = load double, ptr %889, align 8, !tbaa !11
  %891 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %890, ptr %891, align 8, !tbaa !11
  %892 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %893 = load double, ptr %892, align 8, !tbaa !14
  %894 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %893, ptr %894, align 8, !tbaa !14
  %895 = load i64, ptr %51, align 8, !tbaa !9
  %896 = load i64, ptr %51, align 8, !tbaa !9
  %897 = load i64, ptr %28, align 8, !tbaa !9
  %898 = mul nsw i64 %896, %897
  %899 = add nsw i64 %895, %898
  store i64 %899, ptr %35, align 8, !tbaa !9
  %900 = load ptr, ptr %20, align 8, !tbaa !5
  %901 = load i64, ptr %35, align 8, !tbaa !9
  %902 = getelementptr inbounds %struct.doublecomplex, ptr %900, i64 %901
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %902, i32 0, i32 0
  %904 = load double, ptr %903, align 8, !tbaa !11
  store double %904, ptr %36, align 8, !tbaa !17
  %905 = load double, ptr %36, align 8, !tbaa !17
  %906 = fcmp oge double %905, 0.000000e+00
  br i1 %906, label %907, label %909

907:                                              ; preds = %851
  %908 = load double, ptr %36, align 8, !tbaa !17
  br label %912

909:                                              ; preds = %851
  %910 = load double, ptr %36, align 8, !tbaa !17
  %911 = fneg double %910
  br label %912

912:                                              ; preds = %909, %907
  %913 = phi double [ %908, %907 ], [ %911, %909 ]
  %914 = load ptr, ptr %20, align 8, !tbaa !5
  %915 = load i64, ptr %51, align 8, !tbaa !9
  %916 = load i64, ptr %51, align 8, !tbaa !9
  %917 = load i64, ptr %28, align 8, !tbaa !9
  %918 = mul nsw i64 %916, %917
  %919 = add nsw i64 %915, %918
  %920 = getelementptr inbounds %struct.doublecomplex, ptr %914, i64 %919
  %921 = call double @d_imag(ptr noundef %920)
  store double %921, ptr %37, align 8, !tbaa !17
  %922 = load double, ptr %37, align 8, !tbaa !17
  %923 = fcmp oge double %922, 0.000000e+00
  br i1 %923, label %924, label %926

924:                                              ; preds = %912
  %925 = load double, ptr %37, align 8, !tbaa !17
  br label %929

926:                                              ; preds = %912
  %927 = load double, ptr %37, align 8, !tbaa !17
  %928 = fneg double %927
  br label %929

929:                                              ; preds = %926, %924
  %930 = phi double [ %925, %924 ], [ %928, %926 ]
  %931 = fadd double %913, %930
  store double %931, ptr %40, align 8, !tbaa !17
  %932 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %933 = load double, ptr %932, align 8, !tbaa !11
  store double %933, ptr %38, align 8, !tbaa !17
  %934 = load double, ptr %38, align 8, !tbaa !17
  %935 = fcmp oge double %934, 0.000000e+00
  br i1 %935, label %936, label %938

936:                                              ; preds = %929
  %937 = load double, ptr %38, align 8, !tbaa !17
  br label %941

938:                                              ; preds = %929
  %939 = load double, ptr %38, align 8, !tbaa !17
  %940 = fneg double %939
  br label %941

941:                                              ; preds = %938, %936
  %942 = phi double [ %937, %936 ], [ %940, %938 ]
  %943 = call double @d_imag(ptr noundef %42)
  store double %943, ptr %39, align 8, !tbaa !17
  %944 = load double, ptr %39, align 8, !tbaa !17
  %945 = fcmp oge double %944, 0.000000e+00
  br i1 %945, label %946, label %948

946:                                              ; preds = %941
  %947 = load double, ptr %39, align 8, !tbaa !17
  br label %951

948:                                              ; preds = %941
  %949 = load double, ptr %39, align 8, !tbaa !17
  %950 = fneg double %949
  br label %951

951:                                              ; preds = %948, %946
  %952 = phi double [ %947, %946 ], [ %950, %948 ]
  %953 = fadd double %942, %952
  store double %953, ptr %41, align 8, !tbaa !17
  %954 = load double, ptr %40, align 8, !tbaa !17
  %955 = load double, ptr %41, align 8, !tbaa !17
  %956 = fcmp oge double %954, %955
  br i1 %956, label %957, label %959

957:                                              ; preds = %951
  %958 = load double, ptr %40, align 8, !tbaa !17
  br label %961

959:                                              ; preds = %951
  %960 = load double, ptr %41, align 8, !tbaa !17
  br label %961

961:                                              ; preds = %959, %957
  %962 = phi double [ %958, %957 ], [ %960, %959 ]
  store double %962, ptr %65, align 8, !tbaa !17
  %963 = load i64, ptr %51, align 8, !tbaa !9
  %964 = sub nsw i64 %963, 1
  %965 = load i64, ptr %51, align 8, !tbaa !9
  %966 = sub nsw i64 %965, 1
  %967 = load i64, ptr %28, align 8, !tbaa !9
  %968 = mul nsw i64 %966, %967
  %969 = add nsw i64 %964, %968
  store i64 %969, ptr %33, align 8, !tbaa !9
  %970 = load i64, ptr %51, align 8, !tbaa !9
  %971 = load i64, ptr %51, align 8, !tbaa !9
  %972 = load i64, ptr %28, align 8, !tbaa !9
  %973 = mul nsw i64 %971, %972
  %974 = add nsw i64 %970, %973
  store i64 %974, ptr %34, align 8, !tbaa !9
  %975 = load ptr, ptr %20, align 8, !tbaa !5
  %976 = load i64, ptr %33, align 8, !tbaa !9
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %975, i64 %976
  %978 = getelementptr inbounds %struct.doublecomplex, ptr %977, i32 0, i32 0
  %979 = load double, ptr %978, align 8, !tbaa !11
  %980 = load ptr, ptr %20, align 8, !tbaa !5
  %981 = load i64, ptr %34, align 8, !tbaa !9
  %982 = getelementptr inbounds %struct.doublecomplex, ptr %980, i64 %981
  %983 = getelementptr inbounds %struct.doublecomplex, ptr %982, i32 0, i32 0
  %984 = load double, ptr %983, align 8, !tbaa !11
  %985 = fsub double %979, %984
  %986 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %985, ptr %986, align 8, !tbaa !11
  %987 = load ptr, ptr %20, align 8, !tbaa !5
  %988 = load i64, ptr %33, align 8, !tbaa !9
  %989 = getelementptr inbounds %struct.doublecomplex, ptr %987, i64 %988
  %990 = getelementptr inbounds %struct.doublecomplex, ptr %989, i32 0, i32 1
  %991 = load double, ptr %990, align 8, !tbaa !14
  %992 = load ptr, ptr %20, align 8, !tbaa !5
  %993 = load i64, ptr %34, align 8, !tbaa !9
  %994 = getelementptr inbounds %struct.doublecomplex, ptr %992, i64 %993
  %995 = getelementptr inbounds %struct.doublecomplex, ptr %994, i32 0, i32 1
  %996 = load double, ptr %995, align 8, !tbaa !14
  %997 = fsub double %991, %996
  %998 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %997, ptr %998, align 8, !tbaa !14
  %999 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1000 = load double, ptr %999, align 8, !tbaa !11
  %1001 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1000, ptr %1001, align 8, !tbaa !11
  %1002 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1003 = load double, ptr %1002, align 8, !tbaa !14
  %1004 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1003, ptr %1004, align 8, !tbaa !14
  %1005 = load i64, ptr %51, align 8, !tbaa !9
  %1006 = load i64, ptr %51, align 8, !tbaa !9
  %1007 = load i64, ptr %28, align 8, !tbaa !9
  %1008 = mul nsw i64 %1006, %1007
  %1009 = add nsw i64 %1005, %1008
  store i64 %1009, ptr %35, align 8, !tbaa !9
  %1010 = load ptr, ptr %20, align 8, !tbaa !5
  %1011 = load i64, ptr %35, align 8, !tbaa !9
  %1012 = getelementptr inbounds %struct.doublecomplex, ptr %1010, i64 %1011
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %1012, i32 0, i32 0
  %1014 = load double, ptr %1013, align 8, !tbaa !11
  store double %1014, ptr %36, align 8, !tbaa !17
  %1015 = load double, ptr %36, align 8, !tbaa !17
  %1016 = fcmp oge double %1015, 0.000000e+00
  br i1 %1016, label %1017, label %1019

1017:                                             ; preds = %961
  %1018 = load double, ptr %36, align 8, !tbaa !17
  br label %1022

1019:                                             ; preds = %961
  %1020 = load double, ptr %36, align 8, !tbaa !17
  %1021 = fneg double %1020
  br label %1022

1022:                                             ; preds = %1019, %1017
  %1023 = phi double [ %1018, %1017 ], [ %1021, %1019 ]
  %1024 = load ptr, ptr %20, align 8, !tbaa !5
  %1025 = load i64, ptr %51, align 8, !tbaa !9
  %1026 = load i64, ptr %51, align 8, !tbaa !9
  %1027 = load i64, ptr %28, align 8, !tbaa !9
  %1028 = mul nsw i64 %1026, %1027
  %1029 = add nsw i64 %1025, %1028
  %1030 = getelementptr inbounds %struct.doublecomplex, ptr %1024, i64 %1029
  %1031 = call double @d_imag(ptr noundef %1030)
  store double %1031, ptr %37, align 8, !tbaa !17
  %1032 = load double, ptr %37, align 8, !tbaa !17
  %1033 = fcmp oge double %1032, 0.000000e+00
  br i1 %1033, label %1034, label %1036

1034:                                             ; preds = %1022
  %1035 = load double, ptr %37, align 8, !tbaa !17
  br label %1039

1036:                                             ; preds = %1022
  %1037 = load double, ptr %37, align 8, !tbaa !17
  %1038 = fneg double %1037
  br label %1039

1039:                                             ; preds = %1036, %1034
  %1040 = phi double [ %1035, %1034 ], [ %1038, %1036 ]
  %1041 = fadd double %1023, %1040
  store double %1041, ptr %40, align 8, !tbaa !17
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1043 = load double, ptr %1042, align 8, !tbaa !11
  store double %1043, ptr %38, align 8, !tbaa !17
  %1044 = load double, ptr %38, align 8, !tbaa !17
  %1045 = fcmp oge double %1044, 0.000000e+00
  br i1 %1045, label %1046, label %1048

1046:                                             ; preds = %1039
  %1047 = load double, ptr %38, align 8, !tbaa !17
  br label %1051

1048:                                             ; preds = %1039
  %1049 = load double, ptr %38, align 8, !tbaa !17
  %1050 = fneg double %1049
  br label %1051

1051:                                             ; preds = %1048, %1046
  %1052 = phi double [ %1047, %1046 ], [ %1050, %1048 ]
  %1053 = call double @d_imag(ptr noundef %42)
  store double %1053, ptr %39, align 8, !tbaa !17
  %1054 = load double, ptr %39, align 8, !tbaa !17
  %1055 = fcmp oge double %1054, 0.000000e+00
  br i1 %1055, label %1056, label %1058

1056:                                             ; preds = %1051
  %1057 = load double, ptr %39, align 8, !tbaa !17
  br label %1061

1058:                                             ; preds = %1051
  %1059 = load double, ptr %39, align 8, !tbaa !17
  %1060 = fneg double %1059
  br label %1061

1061:                                             ; preds = %1058, %1056
  %1062 = phi double [ %1057, %1056 ], [ %1060, %1058 ]
  %1063 = fadd double %1052, %1062
  store double %1063, ptr %41, align 8, !tbaa !17
  %1064 = load double, ptr %40, align 8, !tbaa !17
  %1065 = load double, ptr %41, align 8, !tbaa !17
  %1066 = fcmp ole double %1064, %1065
  br i1 %1066, label %1067, label %1069

1067:                                             ; preds = %1061
  %1068 = load double, ptr %40, align 8, !tbaa !17
  br label %1071

1069:                                             ; preds = %1061
  %1070 = load double, ptr %41, align 8, !tbaa !17
  br label %1071

1071:                                             ; preds = %1069, %1067
  %1072 = phi double [ %1068, %1067 ], [ %1070, %1069 ]
  store double %1072, ptr %68, align 8, !tbaa !17
  %1073 = load double, ptr %65, align 8, !tbaa !17
  %1074 = load double, ptr %66, align 8, !tbaa !17
  %1075 = fadd double %1073, %1074
  store double %1075, ptr %54, align 8, !tbaa !17
  %1076 = load double, ptr %88, align 8, !tbaa !17
  store double %1076, ptr %36, align 8, !tbaa !17
  %1077 = load double, ptr %81, align 8, !tbaa !17
  %1078 = load double, ptr %68, align 8, !tbaa !17
  %1079 = load double, ptr %65, align 8, !tbaa !17
  %1080 = load double, ptr %54, align 8, !tbaa !17
  %1081 = fdiv double %1079, %1080
  %1082 = fmul double %1078, %1081
  %1083 = fmul double %1077, %1082
  store double %1083, ptr %37, align 8, !tbaa !17
  %1084 = load double, ptr %67, align 8, !tbaa !17
  %1085 = load double, ptr %66, align 8, !tbaa !17
  %1086 = load double, ptr %54, align 8, !tbaa !17
  %1087 = fdiv double %1085, %1086
  %1088 = fmul double %1084, %1087
  %1089 = load double, ptr %36, align 8, !tbaa !17
  %1090 = load double, ptr %37, align 8, !tbaa !17
  %1091 = fcmp oge double %1089, %1090
  br i1 %1091, label %1092, label %1094

1092:                                             ; preds = %1071
  %1093 = load double, ptr %36, align 8, !tbaa !17
  br label %1096

1094:                                             ; preds = %1071
  %1095 = load double, ptr %37, align 8, !tbaa !17
  br label %1096

1096:                                             ; preds = %1094, %1092
  %1097 = phi double [ %1093, %1092 ], [ %1095, %1094 ]
  %1098 = fcmp ole double %1088, %1097
  br i1 %1098, label %1099, label %1100

1099:                                             ; preds = %1096
  br label %1106

1100:                                             ; preds = %1096
  br label %1101

1101:                                             ; preds = %1100, %672
  br label %1102

1102:                                             ; preds = %1101
  %1103 = load i64, ptr %51, align 8, !tbaa !9
  %1104 = add nsw i64 %1103, -1
  store i64 %1104, ptr %51, align 8, !tbaa !9
  br label %464, !llvm.loop !19

1105:                                             ; preds = %464
  br label %1106

1106:                                             ; preds = %1105, %1099, %510
  %1107 = load i64, ptr %51, align 8, !tbaa !9
  store i64 %1107, ptr %52, align 8, !tbaa !9
  %1108 = load i64, ptr %52, align 8, !tbaa !9
  %1109 = load ptr, ptr %18, align 8, !tbaa !5
  %1110 = load i64, ptr %1109, align 8, !tbaa !9
  %1111 = icmp sgt i64 %1108, %1110
  br i1 %1111, label %1112, label %1127

1112:                                             ; preds = %1106
  %1113 = load i64, ptr %52, align 8, !tbaa !9
  %1114 = load i64, ptr %52, align 8, !tbaa !9
  %1115 = sub nsw i64 %1114, 1
  %1116 = load i64, ptr %28, align 8, !tbaa !9
  %1117 = mul nsw i64 %1115, %1116
  %1118 = add nsw i64 %1113, %1117
  store i64 %1118, ptr %32, align 8, !tbaa !9
  %1119 = load ptr, ptr %20, align 8, !tbaa !5
  %1120 = load i64, ptr %32, align 8, !tbaa !9
  %1121 = getelementptr inbounds %struct.doublecomplex, ptr %1119, i64 %1120
  %1122 = getelementptr inbounds %struct.doublecomplex, ptr %1121, i32 0, i32 0
  store double 0.000000e+00, ptr %1122, align 8, !tbaa !11
  %1123 = load ptr, ptr %20, align 8, !tbaa !5
  %1124 = load i64, ptr %32, align 8, !tbaa !9
  %1125 = getelementptr inbounds %struct.doublecomplex, ptr %1123, i64 %1124
  %1126 = getelementptr inbounds %struct.doublecomplex, ptr %1125, i32 0, i32 1
  store double 0.000000e+00, ptr %1126, align 8, !tbaa !14
  br label %1127

1127:                                             ; preds = %1112, %1106
  %1128 = load i64, ptr %52, align 8, !tbaa !9
  %1129 = load i64, ptr %49, align 8, !tbaa !9
  %1130 = icmp sge i64 %1128, %1129
  br i1 %1130, label %1131, label %1132

1131:                                             ; preds = %1127
  br label %2985

1132:                                             ; preds = %1127
  %1133 = load ptr, ptr %15, align 8, !tbaa !5
  %1134 = load i64, ptr %1133, align 8, !tbaa !9
  %1135 = icmp ne i64 %1134, 0
  br i1 %1135, label %1139, label %1136

1136:                                             ; preds = %1132
  %1137 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %1137, ptr %60, align 8, !tbaa !9
  %1138 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %1138, ptr %61, align 8, !tbaa !9
  br label %1139

1139:                                             ; preds = %1136, %1132
  %1140 = load i64, ptr %80, align 8, !tbaa !9
  %1141 = icmp eq i64 %1140, 10
  br i1 %1141, label %1142, label %1189

1142:                                             ; preds = %1139
  %1143 = load i64, ptr %52, align 8, !tbaa !9
  %1144 = add nsw i64 %1143, 1
  %1145 = load i64, ptr %52, align 8, !tbaa !9
  %1146 = load i64, ptr %28, align 8, !tbaa !9
  %1147 = mul nsw i64 %1145, %1146
  %1148 = add nsw i64 %1144, %1147
  store i64 %1148, ptr %32, align 8, !tbaa !9
  %1149 = load ptr, ptr %20, align 8, !tbaa !5
  %1150 = load i64, ptr %32, align 8, !tbaa !9
  %1151 = getelementptr inbounds %struct.doublecomplex, ptr %1149, i64 %1150
  %1152 = getelementptr inbounds %struct.doublecomplex, ptr %1151, i32 0, i32 0
  %1153 = load double, ptr %1152, align 8, !tbaa !11
  store double %1153, ptr %36, align 8, !tbaa !17
  %1154 = load double, ptr %36, align 8, !tbaa !17
  %1155 = fcmp oge double %1154, 0.000000e+00
  br i1 %1155, label %1156, label %1158

1156:                                             ; preds = %1142
  %1157 = load double, ptr %36, align 8, !tbaa !17
  br label %1161

1158:                                             ; preds = %1142
  %1159 = load double, ptr %36, align 8, !tbaa !17
  %1160 = fneg double %1159
  br label %1161

1161:                                             ; preds = %1158, %1156
  %1162 = phi double [ %1157, %1156 ], [ %1160, %1158 ]
  %1163 = fmul double %1162, 7.500000e-01
  store double %1163, ptr %54, align 8, !tbaa !17
  %1164 = load i64, ptr %52, align 8, !tbaa !9
  %1165 = load i64, ptr %52, align 8, !tbaa !9
  %1166 = load i64, ptr %28, align 8, !tbaa !9
  %1167 = mul nsw i64 %1165, %1166
  %1168 = add nsw i64 %1164, %1167
  store i64 %1168, ptr %32, align 8, !tbaa !9
  %1169 = load double, ptr %54, align 8, !tbaa !17
  %1170 = load ptr, ptr %20, align 8, !tbaa !5
  %1171 = load i64, ptr %32, align 8, !tbaa !9
  %1172 = getelementptr inbounds %struct.doublecomplex, ptr %1170, i64 %1171
  %1173 = getelementptr inbounds %struct.doublecomplex, ptr %1172, i32 0, i32 0
  %1174 = load double, ptr %1173, align 8, !tbaa !11
  %1175 = fadd double %1169, %1174
  %1176 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1175, ptr %1176, align 8, !tbaa !11
  %1177 = load ptr, ptr %20, align 8, !tbaa !5
  %1178 = load i64, ptr %32, align 8, !tbaa !9
  %1179 = getelementptr inbounds %struct.doublecomplex, ptr %1177, i64 %1178
  %1180 = getelementptr inbounds %struct.doublecomplex, ptr %1179, i32 0, i32 1
  %1181 = load double, ptr %1180, align 8, !tbaa !14
  %1182 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1181, ptr %1182, align 8, !tbaa !14
  %1183 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1184 = load double, ptr %1183, align 8, !tbaa !11
  %1185 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  store double %1184, ptr %1185, align 8, !tbaa !11
  %1186 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1187 = load double, ptr %1186, align 8, !tbaa !14
  %1188 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  store double %1187, ptr %1188, align 8, !tbaa !14
  br label %1572

1189:                                             ; preds = %1139
  %1190 = load i64, ptr %80, align 8, !tbaa !9
  %1191 = icmp eq i64 %1190, 20
  br i1 %1191, label %1192, label %1239

1192:                                             ; preds = %1189
  %1193 = load i64, ptr %49, align 8, !tbaa !9
  %1194 = load i64, ptr %49, align 8, !tbaa !9
  %1195 = sub nsw i64 %1194, 1
  %1196 = load i64, ptr %28, align 8, !tbaa !9
  %1197 = mul nsw i64 %1195, %1196
  %1198 = add nsw i64 %1193, %1197
  store i64 %1198, ptr %32, align 8, !tbaa !9
  %1199 = load ptr, ptr %20, align 8, !tbaa !5
  %1200 = load i64, ptr %32, align 8, !tbaa !9
  %1201 = getelementptr inbounds %struct.doublecomplex, ptr %1199, i64 %1200
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %1201, i32 0, i32 0
  %1203 = load double, ptr %1202, align 8, !tbaa !11
  store double %1203, ptr %36, align 8, !tbaa !17
  %1204 = load double, ptr %36, align 8, !tbaa !17
  %1205 = fcmp oge double %1204, 0.000000e+00
  br i1 %1205, label %1206, label %1208

1206:                                             ; preds = %1192
  %1207 = load double, ptr %36, align 8, !tbaa !17
  br label %1211

1208:                                             ; preds = %1192
  %1209 = load double, ptr %36, align 8, !tbaa !17
  %1210 = fneg double %1209
  br label %1211

1211:                                             ; preds = %1208, %1206
  %1212 = phi double [ %1207, %1206 ], [ %1210, %1208 ]
  %1213 = fmul double %1212, 7.500000e-01
  store double %1213, ptr %54, align 8, !tbaa !17
  %1214 = load i64, ptr %49, align 8, !tbaa !9
  %1215 = load i64, ptr %49, align 8, !tbaa !9
  %1216 = load i64, ptr %28, align 8, !tbaa !9
  %1217 = mul nsw i64 %1215, %1216
  %1218 = add nsw i64 %1214, %1217
  store i64 %1218, ptr %32, align 8, !tbaa !9
  %1219 = load double, ptr %54, align 8, !tbaa !17
  %1220 = load ptr, ptr %20, align 8, !tbaa !5
  %1221 = load i64, ptr %32, align 8, !tbaa !9
  %1222 = getelementptr inbounds %struct.doublecomplex, ptr %1220, i64 %1221
  %1223 = getelementptr inbounds %struct.doublecomplex, ptr %1222, i32 0, i32 0
  %1224 = load double, ptr %1223, align 8, !tbaa !11
  %1225 = fadd double %1219, %1224
  %1226 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1225, ptr %1226, align 8, !tbaa !11
  %1227 = load ptr, ptr %20, align 8, !tbaa !5
  %1228 = load i64, ptr %32, align 8, !tbaa !9
  %1229 = getelementptr inbounds %struct.doublecomplex, ptr %1227, i64 %1228
  %1230 = getelementptr inbounds %struct.doublecomplex, ptr %1229, i32 0, i32 1
  %1231 = load double, ptr %1230, align 8, !tbaa !14
  %1232 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1231, ptr %1232, align 8, !tbaa !14
  %1233 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1234 = load double, ptr %1233, align 8, !tbaa !11
  %1235 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  store double %1234, ptr %1235, align 8, !tbaa !11
  %1236 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1237 = load double, ptr %1236, align 8, !tbaa !14
  %1238 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  store double %1237, ptr %1238, align 8, !tbaa !14
  br label %1571

1239:                                             ; preds = %1189
  %1240 = load i64, ptr %49, align 8, !tbaa !9
  %1241 = load i64, ptr %49, align 8, !tbaa !9
  %1242 = load i64, ptr %28, align 8, !tbaa !9
  %1243 = mul nsw i64 %1241, %1242
  %1244 = add nsw i64 %1240, %1243
  store i64 %1244, ptr %32, align 8, !tbaa !9
  %1245 = load ptr, ptr %20, align 8, !tbaa !5
  %1246 = load i64, ptr %32, align 8, !tbaa !9
  %1247 = getelementptr inbounds %struct.doublecomplex, ptr %1245, i64 %1246
  %1248 = getelementptr inbounds %struct.doublecomplex, ptr %1247, i32 0, i32 0
  %1249 = load double, ptr %1248, align 8, !tbaa !11
  %1250 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  store double %1249, ptr %1250, align 8, !tbaa !11
  %1251 = load ptr, ptr %20, align 8, !tbaa !5
  %1252 = load i64, ptr %32, align 8, !tbaa !9
  %1253 = getelementptr inbounds %struct.doublecomplex, ptr %1251, i64 %1252
  %1254 = getelementptr inbounds %struct.doublecomplex, ptr %1253, i32 0, i32 1
  %1255 = load double, ptr %1254, align 8, !tbaa !14
  %1256 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  store double %1255, ptr %1256, align 8, !tbaa !14
  %1257 = load ptr, ptr %20, align 8, !tbaa !5
  %1258 = load i64, ptr %49, align 8, !tbaa !9
  %1259 = sub nsw i64 %1258, 1
  %1260 = load i64, ptr %49, align 8, !tbaa !9
  %1261 = load i64, ptr %28, align 8, !tbaa !9
  %1262 = mul nsw i64 %1260, %1261
  %1263 = add nsw i64 %1259, %1262
  %1264 = getelementptr inbounds %struct.doublecomplex, ptr %1257, i64 %1263
  call void @z_sqrt(ptr noundef %43, ptr noundef %1264)
  %1265 = load ptr, ptr %20, align 8, !tbaa !5
  %1266 = load i64, ptr %49, align 8, !tbaa !9
  %1267 = load i64, ptr %49, align 8, !tbaa !9
  %1268 = sub nsw i64 %1267, 1
  %1269 = load i64, ptr %28, align 8, !tbaa !9
  %1270 = mul nsw i64 %1268, %1269
  %1271 = add nsw i64 %1266, %1270
  %1272 = getelementptr inbounds %struct.doublecomplex, ptr %1265, i64 %1271
  call void @z_sqrt(ptr noundef %44, ptr noundef %1272)
  %1273 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1274 = load double, ptr %1273, align 8, !tbaa !11
  %1275 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1276 = load double, ptr %1275, align 8, !tbaa !11
  %1277 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1278 = load double, ptr %1277, align 8, !tbaa !14
  %1279 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1280 = load double, ptr %1279, align 8, !tbaa !14
  %1281 = fmul double %1278, %1280
  %1282 = fneg double %1281
  %1283 = call double @llvm.fmuladd.f64(double %1274, double %1276, double %1282)
  %1284 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1283, ptr %1284, align 8, !tbaa !11
  %1285 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1286 = load double, ptr %1285, align 8, !tbaa !11
  %1287 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1288 = load double, ptr %1287, align 8, !tbaa !14
  %1289 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1290 = load double, ptr %1289, align 8, !tbaa !14
  %1291 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1292 = load double, ptr %1291, align 8, !tbaa !11
  %1293 = fmul double %1290, %1292
  %1294 = call double @llvm.fmuladd.f64(double %1286, double %1288, double %1293)
  %1295 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1294, ptr %1295, align 8, !tbaa !14
  %1296 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1297 = load double, ptr %1296, align 8, !tbaa !11
  %1298 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1297, ptr %1298, align 8, !tbaa !11
  %1299 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1300 = load double, ptr %1299, align 8, !tbaa !14
  %1301 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1300, ptr %1301, align 8, !tbaa !14
  %1302 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1303 = load double, ptr %1302, align 8, !tbaa !11
  store double %1303, ptr %36, align 8, !tbaa !17
  %1304 = load double, ptr %36, align 8, !tbaa !17
  %1305 = fcmp oge double %1304, 0.000000e+00
  br i1 %1305, label %1306, label %1308

1306:                                             ; preds = %1239
  %1307 = load double, ptr %36, align 8, !tbaa !17
  br label %1311

1308:                                             ; preds = %1239
  %1309 = load double, ptr %36, align 8, !tbaa !17
  %1310 = fneg double %1309
  br label %1311

1311:                                             ; preds = %1308, %1306
  %1312 = phi double [ %1307, %1306 ], [ %1310, %1308 ]
  %1313 = call double @d_imag(ptr noundef %56)
  store double %1313, ptr %37, align 8, !tbaa !17
  %1314 = load double, ptr %37, align 8, !tbaa !17
  %1315 = fcmp oge double %1314, 0.000000e+00
  br i1 %1315, label %1316, label %1318

1316:                                             ; preds = %1311
  %1317 = load double, ptr %37, align 8, !tbaa !17
  br label %1321

1318:                                             ; preds = %1311
  %1319 = load double, ptr %37, align 8, !tbaa !17
  %1320 = fneg double %1319
  br label %1321

1321:                                             ; preds = %1318, %1316
  %1322 = phi double [ %1317, %1316 ], [ %1320, %1318 ]
  %1323 = fadd double %1312, %1322
  store double %1323, ptr %54, align 8, !tbaa !17
  %1324 = load double, ptr %54, align 8, !tbaa !17
  %1325 = fcmp une double %1324, 0.000000e+00
  br i1 %1325, label %1326, label %1570

1326:                                             ; preds = %1321
  %1327 = load i64, ptr %49, align 8, !tbaa !9
  %1328 = sub nsw i64 %1327, 1
  %1329 = load i64, ptr %49, align 8, !tbaa !9
  %1330 = sub nsw i64 %1329, 1
  %1331 = load i64, ptr %28, align 8, !tbaa !9
  %1332 = mul nsw i64 %1330, %1331
  %1333 = add nsw i64 %1328, %1332
  store i64 %1333, ptr %32, align 8, !tbaa !9
  %1334 = load ptr, ptr %20, align 8, !tbaa !5
  %1335 = load i64, ptr %32, align 8, !tbaa !9
  %1336 = getelementptr inbounds %struct.doublecomplex, ptr %1334, i64 %1335
  %1337 = getelementptr inbounds %struct.doublecomplex, ptr %1336, i32 0, i32 0
  %1338 = load double, ptr %1337, align 8, !tbaa !11
  %1339 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  %1340 = load double, ptr %1339, align 8, !tbaa !11
  %1341 = fsub double %1338, %1340
  %1342 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %1341, ptr %1342, align 8, !tbaa !11
  %1343 = load ptr, ptr %20, align 8, !tbaa !5
  %1344 = load i64, ptr %32, align 8, !tbaa !9
  %1345 = getelementptr inbounds %struct.doublecomplex, ptr %1343, i64 %1344
  %1346 = getelementptr inbounds %struct.doublecomplex, ptr %1345, i32 0, i32 1
  %1347 = load double, ptr %1346, align 8, !tbaa !14
  %1348 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  %1349 = load double, ptr %1348, align 8, !tbaa !14
  %1350 = fsub double %1347, %1349
  %1351 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %1350, ptr %1351, align 8, !tbaa !14
  %1352 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1353 = load double, ptr %1352, align 8, !tbaa !11
  %1354 = fmul double %1353, 5.000000e-01
  %1355 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1354, ptr %1355, align 8, !tbaa !11
  %1356 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1357 = load double, ptr %1356, align 8, !tbaa !14
  %1358 = fmul double %1357, 5.000000e-01
  %1359 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1358, ptr %1359, align 8, !tbaa !14
  %1360 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1361 = load double, ptr %1360, align 8, !tbaa !11
  %1362 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  store double %1361, ptr %1362, align 8, !tbaa !11
  %1363 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1364 = load double, ptr %1363, align 8, !tbaa !14
  %1365 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  store double %1364, ptr %1365, align 8, !tbaa !14
  %1366 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1367 = load double, ptr %1366, align 8, !tbaa !11
  store double %1367, ptr %36, align 8, !tbaa !17
  %1368 = load double, ptr %36, align 8, !tbaa !17
  %1369 = fcmp oge double %1368, 0.000000e+00
  br i1 %1369, label %1370, label %1372

1370:                                             ; preds = %1326
  %1371 = load double, ptr %36, align 8, !tbaa !17
  br label %1375

1372:                                             ; preds = %1326
  %1373 = load double, ptr %36, align 8, !tbaa !17
  %1374 = fneg double %1373
  br label %1375

1375:                                             ; preds = %1372, %1370
  %1376 = phi double [ %1371, %1370 ], [ %1374, %1372 ]
  %1377 = call double @d_imag(ptr noundef %58)
  store double %1377, ptr %37, align 8, !tbaa !17
  %1378 = load double, ptr %37, align 8, !tbaa !17
  %1379 = fcmp oge double %1378, 0.000000e+00
  br i1 %1379, label %1380, label %1382

1380:                                             ; preds = %1375
  %1381 = load double, ptr %37, align 8, !tbaa !17
  br label %1385

1382:                                             ; preds = %1375
  %1383 = load double, ptr %37, align 8, !tbaa !17
  %1384 = fneg double %1383
  br label %1385

1385:                                             ; preds = %1382, %1380
  %1386 = phi double [ %1381, %1380 ], [ %1384, %1382 ]
  %1387 = fadd double %1376, %1386
  store double %1387, ptr %76, align 8, !tbaa !17
  %1388 = load double, ptr %54, align 8, !tbaa !17
  store double %1388, ptr %38, align 8, !tbaa !17
  %1389 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1390 = load double, ptr %1389, align 8, !tbaa !11
  store double %1390, ptr %36, align 8, !tbaa !17
  %1391 = load double, ptr %36, align 8, !tbaa !17
  %1392 = fcmp oge double %1391, 0.000000e+00
  br i1 %1392, label %1393, label %1395

1393:                                             ; preds = %1385
  %1394 = load double, ptr %36, align 8, !tbaa !17
  br label %1398

1395:                                             ; preds = %1385
  %1396 = load double, ptr %36, align 8, !tbaa !17
  %1397 = fneg double %1396
  br label %1398

1398:                                             ; preds = %1395, %1393
  %1399 = phi double [ %1394, %1393 ], [ %1397, %1395 ]
  %1400 = call double @d_imag(ptr noundef %58)
  store double %1400, ptr %37, align 8, !tbaa !17
  %1401 = load double, ptr %37, align 8, !tbaa !17
  %1402 = fcmp oge double %1401, 0.000000e+00
  br i1 %1402, label %1403, label %1405

1403:                                             ; preds = %1398
  %1404 = load double, ptr %37, align 8, !tbaa !17
  br label %1408

1405:                                             ; preds = %1398
  %1406 = load double, ptr %37, align 8, !tbaa !17
  %1407 = fneg double %1406
  br label %1408

1408:                                             ; preds = %1405, %1403
  %1409 = phi double [ %1404, %1403 ], [ %1407, %1405 ]
  %1410 = fadd double %1399, %1409
  store double %1410, ptr %39, align 8, !tbaa !17
  %1411 = load double, ptr %38, align 8, !tbaa !17
  %1412 = load double, ptr %39, align 8, !tbaa !17
  %1413 = fcmp oge double %1411, %1412
  br i1 %1413, label %1414, label %1416

1414:                                             ; preds = %1408
  %1415 = load double, ptr %38, align 8, !tbaa !17
  br label %1418

1416:                                             ; preds = %1408
  %1417 = load double, ptr %39, align 8, !tbaa !17
  br label %1418

1418:                                             ; preds = %1416, %1414
  %1419 = phi double [ %1415, %1414 ], [ %1417, %1416 ]
  store double %1419, ptr %54, align 8, !tbaa !17
  %1420 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1421 = load double, ptr %1420, align 8, !tbaa !11
  %1422 = load double, ptr %54, align 8, !tbaa !17
  %1423 = fdiv double %1421, %1422
  %1424 = getelementptr inbounds %struct.doublecomplex, ptr %46, i32 0, i32 0
  store double %1423, ptr %1424, align 8, !tbaa !11
  %1425 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1426 = load double, ptr %1425, align 8, !tbaa !14
  %1427 = load double, ptr %54, align 8, !tbaa !17
  %1428 = fdiv double %1426, %1427
  %1429 = getelementptr inbounds %struct.doublecomplex, ptr %46, i32 0, i32 1
  store double %1428, ptr %1429, align 8, !tbaa !14
  call void @pow_zi(ptr noundef %45, ptr noundef %46, ptr noundef @c__2)
  %1430 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1431 = load double, ptr %1430, align 8, !tbaa !11
  %1432 = load double, ptr %54, align 8, !tbaa !17
  %1433 = fdiv double %1431, %1432
  %1434 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  store double %1433, ptr %1434, align 8, !tbaa !11
  %1435 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1436 = load double, ptr %1435, align 8, !tbaa !14
  %1437 = load double, ptr %54, align 8, !tbaa !17
  %1438 = fdiv double %1436, %1437
  %1439 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  store double %1438, ptr %1439, align 8, !tbaa !14
  call void @pow_zi(ptr noundef %47, ptr noundef %48, ptr noundef @c__2)
  %1440 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 0
  %1441 = load double, ptr %1440, align 8, !tbaa !11
  %1442 = getelementptr inbounds %struct.doublecomplex, ptr %47, i32 0, i32 0
  %1443 = load double, ptr %1442, align 8, !tbaa !11
  %1444 = fadd double %1441, %1443
  %1445 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %1444, ptr %1445, align 8, !tbaa !11
  %1446 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 1
  %1447 = load double, ptr %1446, align 8, !tbaa !14
  %1448 = getelementptr inbounds %struct.doublecomplex, ptr %47, i32 0, i32 1
  %1449 = load double, ptr %1448, align 8, !tbaa !14
  %1450 = fadd double %1447, %1449
  %1451 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %1450, ptr %1451, align 8, !tbaa !14
  call void @z_sqrt(ptr noundef %43, ptr noundef %44)
  %1452 = load double, ptr %54, align 8, !tbaa !17
  %1453 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1454 = load double, ptr %1453, align 8, !tbaa !11
  %1455 = fmul double %1452, %1454
  %1456 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1455, ptr %1456, align 8, !tbaa !11
  %1457 = load double, ptr %54, align 8, !tbaa !17
  %1458 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1459 = load double, ptr %1458, align 8, !tbaa !14
  %1460 = fmul double %1457, %1459
  %1461 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1460, ptr %1461, align 8, !tbaa !14
  %1462 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1463 = load double, ptr %1462, align 8, !tbaa !11
  %1464 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  store double %1463, ptr %1464, align 8, !tbaa !11
  %1465 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1466 = load double, ptr %1465, align 8, !tbaa !14
  %1467 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  store double %1466, ptr %1467, align 8, !tbaa !14
  %1468 = load double, ptr %76, align 8, !tbaa !17
  %1469 = fcmp ogt double %1468, 0.000000e+00
  br i1 %1469, label %1470, label %1516

1470:                                             ; preds = %1418
  %1471 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1472 = load double, ptr %1471, align 8, !tbaa !11
  %1473 = load double, ptr %76, align 8, !tbaa !17
  %1474 = fdiv double %1472, %1473
  %1475 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1474, ptr %1475, align 8, !tbaa !11
  %1476 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1477 = load double, ptr %1476, align 8, !tbaa !14
  %1478 = load double, ptr %76, align 8, !tbaa !17
  %1479 = fdiv double %1477, %1478
  %1480 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1479, ptr %1480, align 8, !tbaa !14
  %1481 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1482 = load double, ptr %1481, align 8, !tbaa !11
  %1483 = load double, ptr %76, align 8, !tbaa !17
  %1484 = fdiv double %1482, %1483
  %1485 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %1484, ptr %1485, align 8, !tbaa !11
  %1486 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1487 = load double, ptr %1486, align 8, !tbaa !14
  %1488 = load double, ptr %76, align 8, !tbaa !17
  %1489 = fdiv double %1487, %1488
  %1490 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %1489, ptr %1490, align 8, !tbaa !14
  %1491 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1492 = load double, ptr %1491, align 8, !tbaa !11
  %1493 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  %1494 = load double, ptr %1493, align 8, !tbaa !11
  %1495 = call double @d_imag(ptr noundef %43)
  %1496 = call double @d_imag(ptr noundef %59)
  %1497 = fmul double %1495, %1496
  %1498 = call double @llvm.fmuladd.f64(double %1492, double %1494, double %1497)
  %1499 = fcmp olt double %1498, 0.000000e+00
  br i1 %1499, label %1500, label %1515

1500:                                             ; preds = %1470
  %1501 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  %1502 = load double, ptr %1501, align 8, !tbaa !11
  %1503 = fneg double %1502
  %1504 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %1503, ptr %1504, align 8, !tbaa !11
  %1505 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  %1506 = load double, ptr %1505, align 8, !tbaa !14
  %1507 = fneg double %1506
  %1508 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %1507, ptr %1508, align 8, !tbaa !14
  %1509 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1510 = load double, ptr %1509, align 8, !tbaa !11
  %1511 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  store double %1510, ptr %1511, align 8, !tbaa !11
  %1512 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1513 = load double, ptr %1512, align 8, !tbaa !14
  %1514 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  store double %1513, ptr %1514, align 8, !tbaa !14
  br label %1515

1515:                                             ; preds = %1500, %1470
  br label %1516

1516:                                             ; preds = %1515, %1418
  %1517 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1518 = load double, ptr %1517, align 8, !tbaa !11
  %1519 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 0
  %1520 = load double, ptr %1519, align 8, !tbaa !11
  %1521 = fadd double %1518, %1520
  %1522 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 0
  store double %1521, ptr %1522, align 8, !tbaa !11
  %1523 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1524 = load double, ptr %1523, align 8, !tbaa !14
  %1525 = getelementptr inbounds %struct.doublecomplex, ptr %59, i32 0, i32 1
  %1526 = load double, ptr %1525, align 8, !tbaa !14
  %1527 = fadd double %1524, %1526
  %1528 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 1
  store double %1527, ptr %1528, align 8, !tbaa !14
  call void @zladiv_(ptr noundef %44, ptr noundef %56, ptr noundef %45)
  %1529 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1530 = load double, ptr %1529, align 8, !tbaa !11
  %1531 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1532 = load double, ptr %1531, align 8, !tbaa !11
  %1533 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1534 = load double, ptr %1533, align 8, !tbaa !14
  %1535 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1536 = load double, ptr %1535, align 8, !tbaa !14
  %1537 = fmul double %1534, %1536
  %1538 = fneg double %1537
  %1539 = call double @llvm.fmuladd.f64(double %1530, double %1532, double %1538)
  %1540 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %1539, ptr %1540, align 8, !tbaa !11
  %1541 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1542 = load double, ptr %1541, align 8, !tbaa !11
  %1543 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1544 = load double, ptr %1543, align 8, !tbaa !14
  %1545 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1546 = load double, ptr %1545, align 8, !tbaa !14
  %1547 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1548 = load double, ptr %1547, align 8, !tbaa !11
  %1549 = fmul double %1546, %1548
  %1550 = call double @llvm.fmuladd.f64(double %1542, double %1544, double %1549)
  %1551 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %1550, ptr %1551, align 8, !tbaa !14
  %1552 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  %1553 = load double, ptr %1552, align 8, !tbaa !11
  %1554 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %1555 = load double, ptr %1554, align 8, !tbaa !11
  %1556 = fsub double %1553, %1555
  %1557 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1556, ptr %1557, align 8, !tbaa !11
  %1558 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  %1559 = load double, ptr %1558, align 8, !tbaa !14
  %1560 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %1561 = load double, ptr %1560, align 8, !tbaa !14
  %1562 = fsub double %1559, %1561
  %1563 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1562, ptr %1563, align 8, !tbaa !14
  %1564 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1565 = load double, ptr %1564, align 8, !tbaa !11
  %1566 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  store double %1565, ptr %1566, align 8, !tbaa !11
  %1567 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1568 = load double, ptr %1567, align 8, !tbaa !14
  %1569 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  store double %1568, ptr %1569, align 8, !tbaa !14
  br label %1570

1570:                                             ; preds = %1516, %1321
  br label %1571

1571:                                             ; preds = %1570, %1211
  br label %1572

1572:                                             ; preds = %1571, %1161
  %1573 = load i64, ptr %52, align 8, !tbaa !9
  %1574 = add nsw i64 %1573, 1
  store i64 %1574, ptr %32, align 8, !tbaa !9
  %1575 = load i64, ptr %49, align 8, !tbaa !9
  %1576 = sub nsw i64 %1575, 1
  store i64 %1576, ptr %53, align 8, !tbaa !9
  br label %1577

1577:                                             ; preds = %1814, %1572
  %1578 = load i64, ptr %53, align 8, !tbaa !9
  %1579 = load i64, ptr %32, align 8, !tbaa !9
  %1580 = icmp sge i64 %1578, %1579
  br i1 %1580, label %1581, label %1817

1581:                                             ; preds = %1577
  %1582 = load i64, ptr %53, align 8, !tbaa !9
  %1583 = load i64, ptr %53, align 8, !tbaa !9
  %1584 = load i64, ptr %28, align 8, !tbaa !9
  %1585 = mul nsw i64 %1583, %1584
  %1586 = add nsw i64 %1582, %1585
  store i64 %1586, ptr %33, align 8, !tbaa !9
  %1587 = load ptr, ptr %20, align 8, !tbaa !5
  %1588 = load i64, ptr %33, align 8, !tbaa !9
  %1589 = getelementptr inbounds %struct.doublecomplex, ptr %1587, i64 %1588
  %1590 = getelementptr inbounds %struct.doublecomplex, ptr %1589, i32 0, i32 0
  %1591 = load double, ptr %1590, align 8, !tbaa !11
  %1592 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 0
  store double %1591, ptr %1592, align 8, !tbaa !11
  %1593 = load ptr, ptr %20, align 8, !tbaa !5
  %1594 = load i64, ptr %33, align 8, !tbaa !9
  %1595 = getelementptr inbounds %struct.doublecomplex, ptr %1593, i64 %1594
  %1596 = getelementptr inbounds %struct.doublecomplex, ptr %1595, i32 0, i32 1
  %1597 = load double, ptr %1596, align 8, !tbaa !14
  %1598 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 1
  store double %1597, ptr %1598, align 8, !tbaa !14
  %1599 = load i64, ptr %53, align 8, !tbaa !9
  %1600 = add nsw i64 %1599, 1
  %1601 = load i64, ptr %53, align 8, !tbaa !9
  %1602 = add nsw i64 %1601, 1
  %1603 = load i64, ptr %28, align 8, !tbaa !9
  %1604 = mul nsw i64 %1602, %1603
  %1605 = add nsw i64 %1600, %1604
  store i64 %1605, ptr %33, align 8, !tbaa !9
  %1606 = load ptr, ptr %20, align 8, !tbaa !5
  %1607 = load i64, ptr %33, align 8, !tbaa !9
  %1608 = getelementptr inbounds %struct.doublecomplex, ptr %1606, i64 %1607
  %1609 = getelementptr inbounds %struct.doublecomplex, ptr %1608, i32 0, i32 0
  %1610 = load double, ptr %1609, align 8, !tbaa !11
  %1611 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %1610, ptr %1611, align 8, !tbaa !11
  %1612 = load ptr, ptr %20, align 8, !tbaa !5
  %1613 = load i64, ptr %33, align 8, !tbaa !9
  %1614 = getelementptr inbounds %struct.doublecomplex, ptr %1612, i64 %1613
  %1615 = getelementptr inbounds %struct.doublecomplex, ptr %1614, i32 0, i32 1
  %1616 = load double, ptr %1615, align 8, !tbaa !14
  %1617 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double %1616, ptr %1617, align 8, !tbaa !14
  %1618 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 0
  %1619 = load double, ptr %1618, align 8, !tbaa !11
  %1620 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  %1621 = load double, ptr %1620, align 8, !tbaa !11
  %1622 = fsub double %1619, %1621
  %1623 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1622, ptr %1623, align 8, !tbaa !11
  %1624 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 1
  %1625 = load double, ptr %1624, align 8, !tbaa !14
  %1626 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  %1627 = load double, ptr %1626, align 8, !tbaa !14
  %1628 = fsub double %1625, %1627
  %1629 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1628, ptr %1629, align 8, !tbaa !14
  %1630 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1631 = load double, ptr %1630, align 8, !tbaa !11
  %1632 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  store double %1631, ptr %1632, align 8, !tbaa !11
  %1633 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1634 = load double, ptr %1633, align 8, !tbaa !14
  %1635 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  store double %1634, ptr %1635, align 8, !tbaa !14
  %1636 = load i64, ptr %53, align 8, !tbaa !9
  %1637 = add nsw i64 %1636, 1
  %1638 = load i64, ptr %53, align 8, !tbaa !9
  %1639 = load i64, ptr %28, align 8, !tbaa !9
  %1640 = mul nsw i64 %1638, %1639
  %1641 = add nsw i64 %1637, %1640
  store i64 %1641, ptr %33, align 8, !tbaa !9
  %1642 = load ptr, ptr %20, align 8, !tbaa !5
  %1643 = load i64, ptr %33, align 8, !tbaa !9
  %1644 = getelementptr inbounds %struct.doublecomplex, ptr %1642, i64 %1643
  %1645 = getelementptr inbounds %struct.doublecomplex, ptr %1644, i32 0, i32 0
  %1646 = load double, ptr %1645, align 8, !tbaa !11
  store double %1646, ptr %71, align 8, !tbaa !17
  %1647 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1648 = load double, ptr %1647, align 8, !tbaa !11
  store double %1648, ptr %36, align 8, !tbaa !17
  %1649 = load double, ptr %36, align 8, !tbaa !17
  %1650 = fcmp oge double %1649, 0.000000e+00
  br i1 %1650, label %1651, label %1653

1651:                                             ; preds = %1581
  %1652 = load double, ptr %36, align 8, !tbaa !17
  br label %1656

1653:                                             ; preds = %1581
  %1654 = load double, ptr %36, align 8, !tbaa !17
  %1655 = fneg double %1654
  br label %1656

1656:                                             ; preds = %1653, %1651
  %1657 = phi double [ %1652, %1651 ], [ %1655, %1653 ]
  %1658 = call double @d_imag(ptr noundef %78)
  store double %1658, ptr %37, align 8, !tbaa !17
  %1659 = load double, ptr %37, align 8, !tbaa !17
  %1660 = fcmp oge double %1659, 0.000000e+00
  br i1 %1660, label %1661, label %1663

1661:                                             ; preds = %1656
  %1662 = load double, ptr %37, align 8, !tbaa !17
  br label %1666

1663:                                             ; preds = %1656
  %1664 = load double, ptr %37, align 8, !tbaa !17
  %1665 = fneg double %1664
  br label %1666

1666:                                             ; preds = %1663, %1661
  %1667 = phi double [ %1662, %1661 ], [ %1665, %1663 ]
  %1668 = fadd double %1657, %1667
  %1669 = load double, ptr %71, align 8, !tbaa !17
  %1670 = fcmp oge double %1669, 0.000000e+00
  br i1 %1670, label %1671, label %1673

1671:                                             ; preds = %1666
  %1672 = load double, ptr %71, align 8, !tbaa !17
  br label %1676

1673:                                             ; preds = %1666
  %1674 = load double, ptr %71, align 8, !tbaa !17
  %1675 = fneg double %1674
  br label %1676

1676:                                             ; preds = %1673, %1671
  %1677 = phi double [ %1672, %1671 ], [ %1675, %1673 ]
  %1678 = fadd double %1668, %1677
  store double %1678, ptr %54, align 8, !tbaa !17
  %1679 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1680 = load double, ptr %1679, align 8, !tbaa !11
  %1681 = load double, ptr %54, align 8, !tbaa !17
  %1682 = fdiv double %1680, %1681
  %1683 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1682, ptr %1683, align 8, !tbaa !11
  %1684 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  %1685 = load double, ptr %1684, align 8, !tbaa !14
  %1686 = load double, ptr %54, align 8, !tbaa !17
  %1687 = fdiv double %1685, %1686
  %1688 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1687, ptr %1688, align 8, !tbaa !14
  %1689 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1690 = load double, ptr %1689, align 8, !tbaa !11
  %1691 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  store double %1690, ptr %1691, align 8, !tbaa !11
  %1692 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1693 = load double, ptr %1692, align 8, !tbaa !14
  %1694 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  store double %1693, ptr %1694, align 8, !tbaa !14
  %1695 = load double, ptr %54, align 8, !tbaa !17
  %1696 = load double, ptr %71, align 8, !tbaa !17
  %1697 = fdiv double %1696, %1695
  store double %1697, ptr %71, align 8, !tbaa !17
  %1698 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1699 = load double, ptr %1698, align 8, !tbaa !11
  %1700 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1701 = getelementptr inbounds %struct.doublecomplex, ptr %1700, i32 0, i32 0
  store double %1699, ptr %1701, align 16, !tbaa !11
  %1702 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  %1703 = load double, ptr %1702, align 8, !tbaa !14
  %1704 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1705 = getelementptr inbounds %struct.doublecomplex, ptr %1704, i32 0, i32 1
  store double %1703, ptr %1705, align 8, !tbaa !14
  %1706 = load double, ptr %71, align 8, !tbaa !17
  %1707 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %1708 = getelementptr inbounds %struct.doublecomplex, ptr %1707, i32 0, i32 0
  store double %1706, ptr %1708, align 16, !tbaa !11
  %1709 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %1710 = getelementptr inbounds %struct.doublecomplex, ptr %1709, i32 0, i32 1
  store double 0.000000e+00, ptr %1710, align 8, !tbaa !14
  %1711 = load i64, ptr %53, align 8, !tbaa !9
  %1712 = load i64, ptr %53, align 8, !tbaa !9
  %1713 = sub nsw i64 %1712, 1
  %1714 = load i64, ptr %28, align 8, !tbaa !9
  %1715 = mul nsw i64 %1713, %1714
  %1716 = add nsw i64 %1711, %1715
  store i64 %1716, ptr %33, align 8, !tbaa !9
  %1717 = load ptr, ptr %20, align 8, !tbaa !5
  %1718 = load i64, ptr %33, align 8, !tbaa !9
  %1719 = getelementptr inbounds %struct.doublecomplex, ptr %1717, i64 %1718
  %1720 = getelementptr inbounds %struct.doublecomplex, ptr %1719, i32 0, i32 0
  %1721 = load double, ptr %1720, align 8, !tbaa !11
  store double %1721, ptr %69, align 8, !tbaa !17
  %1722 = load double, ptr %69, align 8, !tbaa !17
  %1723 = fcmp oge double %1722, 0.000000e+00
  br i1 %1723, label %1724, label %1726

1724:                                             ; preds = %1676
  %1725 = load double, ptr %69, align 8, !tbaa !17
  br label %1729

1726:                                             ; preds = %1676
  %1727 = load double, ptr %69, align 8, !tbaa !17
  %1728 = fneg double %1727
  br label %1729

1729:                                             ; preds = %1726, %1724
  %1730 = phi double [ %1725, %1724 ], [ %1728, %1726 ]
  %1731 = load double, ptr %71, align 8, !tbaa !17
  %1732 = fcmp oge double %1731, 0.000000e+00
  br i1 %1732, label %1733, label %1735

1733:                                             ; preds = %1729
  %1734 = load double, ptr %71, align 8, !tbaa !17
  br label %1738

1735:                                             ; preds = %1729
  %1736 = load double, ptr %71, align 8, !tbaa !17
  %1737 = fneg double %1736
  br label %1738

1738:                                             ; preds = %1735, %1733
  %1739 = phi double [ %1734, %1733 ], [ %1737, %1735 ]
  %1740 = fmul double %1730, %1739
  %1741 = load double, ptr %81, align 8, !tbaa !17
  %1742 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1743 = load double, ptr %1742, align 8, !tbaa !11
  store double %1743, ptr %36, align 8, !tbaa !17
  %1744 = load double, ptr %36, align 8, !tbaa !17
  %1745 = fcmp oge double %1744, 0.000000e+00
  br i1 %1745, label %1746, label %1748

1746:                                             ; preds = %1738
  %1747 = load double, ptr %36, align 8, !tbaa !17
  br label %1751

1748:                                             ; preds = %1738
  %1749 = load double, ptr %36, align 8, !tbaa !17
  %1750 = fneg double %1749
  br label %1751

1751:                                             ; preds = %1748, %1746
  %1752 = phi double [ %1747, %1746 ], [ %1750, %1748 ]
  %1753 = call double @d_imag(ptr noundef %78)
  store double %1753, ptr %37, align 8, !tbaa !17
  %1754 = load double, ptr %37, align 8, !tbaa !17
  %1755 = fcmp oge double %1754, 0.000000e+00
  br i1 %1755, label %1756, label %1758

1756:                                             ; preds = %1751
  %1757 = load double, ptr %37, align 8, !tbaa !17
  br label %1761

1758:                                             ; preds = %1751
  %1759 = load double, ptr %37, align 8, !tbaa !17
  %1760 = fneg double %1759
  br label %1761

1761:                                             ; preds = %1758, %1756
  %1762 = phi double [ %1757, %1756 ], [ %1760, %1758 ]
  %1763 = fadd double %1752, %1762
  %1764 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 0
  %1765 = load double, ptr %1764, align 8, !tbaa !11
  store double %1765, ptr %38, align 8, !tbaa !17
  %1766 = load double, ptr %38, align 8, !tbaa !17
  %1767 = fcmp oge double %1766, 0.000000e+00
  br i1 %1767, label %1768, label %1770

1768:                                             ; preds = %1761
  %1769 = load double, ptr %38, align 8, !tbaa !17
  br label %1773

1770:                                             ; preds = %1761
  %1771 = load double, ptr %38, align 8, !tbaa !17
  %1772 = fneg double %1771
  br label %1773

1773:                                             ; preds = %1770, %1768
  %1774 = phi double [ %1769, %1768 ], [ %1772, %1770 ]
  %1775 = call double @d_imag(ptr noundef %70)
  store double %1775, ptr %39, align 8, !tbaa !17
  %1776 = load double, ptr %39, align 8, !tbaa !17
  %1777 = fcmp oge double %1776, 0.000000e+00
  br i1 %1777, label %1778, label %1780

1778:                                             ; preds = %1773
  %1779 = load double, ptr %39, align 8, !tbaa !17
  br label %1783

1780:                                             ; preds = %1773
  %1781 = load double, ptr %39, align 8, !tbaa !17
  %1782 = fneg double %1781
  br label %1783

1783:                                             ; preds = %1780, %1778
  %1784 = phi double [ %1779, %1778 ], [ %1782, %1780 ]
  %1785 = fadd double %1774, %1784
  %1786 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %1787 = load double, ptr %1786, align 8, !tbaa !11
  store double %1787, ptr %40, align 8, !tbaa !17
  %1788 = load double, ptr %40, align 8, !tbaa !17
  %1789 = fcmp oge double %1788, 0.000000e+00
  br i1 %1789, label %1790, label %1792

1790:                                             ; preds = %1783
  %1791 = load double, ptr %40, align 8, !tbaa !17
  br label %1795

1792:                                             ; preds = %1783
  %1793 = load double, ptr %40, align 8, !tbaa !17
  %1794 = fneg double %1793
  br label %1795

1795:                                             ; preds = %1792, %1790
  %1796 = phi double [ %1791, %1790 ], [ %1794, %1792 ]
  %1797 = call double @d_imag(ptr noundef %72)
  store double %1797, ptr %41, align 8, !tbaa !17
  %1798 = load double, ptr %41, align 8, !tbaa !17
  %1799 = fcmp oge double %1798, 0.000000e+00
  br i1 %1799, label %1800, label %1802

1800:                                             ; preds = %1795
  %1801 = load double, ptr %41, align 8, !tbaa !17
  br label %1805

1802:                                             ; preds = %1795
  %1803 = load double, ptr %41, align 8, !tbaa !17
  %1804 = fneg double %1803
  br label %1805

1805:                                             ; preds = %1802, %1800
  %1806 = phi double [ %1801, %1800 ], [ %1804, %1802 ]
  %1807 = fadd double %1796, %1806
  %1808 = fadd double %1785, %1807
  %1809 = fmul double %1763, %1808
  %1810 = fmul double %1741, %1809
  %1811 = fcmp ole double %1740, %1810
  br i1 %1811, label %1812, label %1813

1812:                                             ; preds = %1805
  br label %1947

1813:                                             ; preds = %1805
  br label %1814

1814:                                             ; preds = %1813
  %1815 = load i64, ptr %53, align 8, !tbaa !9
  %1816 = add nsw i64 %1815, -1
  store i64 %1816, ptr %53, align 8, !tbaa !9
  br label %1577, !llvm.loop !20

1817:                                             ; preds = %1577
  %1818 = load i64, ptr %52, align 8, !tbaa !9
  %1819 = load i64, ptr %52, align 8, !tbaa !9
  %1820 = load i64, ptr %28, align 8, !tbaa !9
  %1821 = mul nsw i64 %1819, %1820
  %1822 = add nsw i64 %1818, %1821
  store i64 %1822, ptr %32, align 8, !tbaa !9
  %1823 = load ptr, ptr %20, align 8, !tbaa !5
  %1824 = load i64, ptr %32, align 8, !tbaa !9
  %1825 = getelementptr inbounds %struct.doublecomplex, ptr %1823, i64 %1824
  %1826 = getelementptr inbounds %struct.doublecomplex, ptr %1825, i32 0, i32 0
  %1827 = load double, ptr %1826, align 8, !tbaa !11
  %1828 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 0
  store double %1827, ptr %1828, align 8, !tbaa !11
  %1829 = load ptr, ptr %20, align 8, !tbaa !5
  %1830 = load i64, ptr %32, align 8, !tbaa !9
  %1831 = getelementptr inbounds %struct.doublecomplex, ptr %1829, i64 %1830
  %1832 = getelementptr inbounds %struct.doublecomplex, ptr %1831, i32 0, i32 1
  %1833 = load double, ptr %1832, align 8, !tbaa !14
  %1834 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 1
  store double %1833, ptr %1834, align 8, !tbaa !14
  %1835 = load i64, ptr %52, align 8, !tbaa !9
  %1836 = add nsw i64 %1835, 1
  %1837 = load i64, ptr %52, align 8, !tbaa !9
  %1838 = add nsw i64 %1837, 1
  %1839 = load i64, ptr %28, align 8, !tbaa !9
  %1840 = mul nsw i64 %1838, %1839
  %1841 = add nsw i64 %1836, %1840
  store i64 %1841, ptr %32, align 8, !tbaa !9
  %1842 = load ptr, ptr %20, align 8, !tbaa !5
  %1843 = load i64, ptr %32, align 8, !tbaa !9
  %1844 = getelementptr inbounds %struct.doublecomplex, ptr %1842, i64 %1843
  %1845 = getelementptr inbounds %struct.doublecomplex, ptr %1844, i32 0, i32 0
  %1846 = load double, ptr %1845, align 8, !tbaa !11
  %1847 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %1846, ptr %1847, align 8, !tbaa !11
  %1848 = load ptr, ptr %20, align 8, !tbaa !5
  %1849 = load i64, ptr %32, align 8, !tbaa !9
  %1850 = getelementptr inbounds %struct.doublecomplex, ptr %1848, i64 %1849
  %1851 = getelementptr inbounds %struct.doublecomplex, ptr %1850, i32 0, i32 1
  %1852 = load double, ptr %1851, align 8, !tbaa !14
  %1853 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double %1852, ptr %1853, align 8, !tbaa !14
  %1854 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 0
  %1855 = load double, ptr %1854, align 8, !tbaa !11
  %1856 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 0
  %1857 = load double, ptr %1856, align 8, !tbaa !11
  %1858 = fsub double %1855, %1857
  %1859 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1858, ptr %1859, align 8, !tbaa !11
  %1860 = getelementptr inbounds %struct.doublecomplex, ptr %70, i32 0, i32 1
  %1861 = load double, ptr %1860, align 8, !tbaa !14
  %1862 = getelementptr inbounds %struct.doublecomplex, ptr %55, i32 0, i32 1
  %1863 = load double, ptr %1862, align 8, !tbaa !14
  %1864 = fsub double %1861, %1863
  %1865 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1864, ptr %1865, align 8, !tbaa !14
  %1866 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1867 = load double, ptr %1866, align 8, !tbaa !11
  %1868 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  store double %1867, ptr %1868, align 8, !tbaa !11
  %1869 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1870 = load double, ptr %1869, align 8, !tbaa !14
  %1871 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  store double %1870, ptr %1871, align 8, !tbaa !14
  %1872 = load i64, ptr %52, align 8, !tbaa !9
  %1873 = add nsw i64 %1872, 1
  %1874 = load i64, ptr %52, align 8, !tbaa !9
  %1875 = load i64, ptr %28, align 8, !tbaa !9
  %1876 = mul nsw i64 %1874, %1875
  %1877 = add nsw i64 %1873, %1876
  store i64 %1877, ptr %32, align 8, !tbaa !9
  %1878 = load ptr, ptr %20, align 8, !tbaa !5
  %1879 = load i64, ptr %32, align 8, !tbaa !9
  %1880 = getelementptr inbounds %struct.doublecomplex, ptr %1878, i64 %1879
  %1881 = getelementptr inbounds %struct.doublecomplex, ptr %1880, i32 0, i32 0
  %1882 = load double, ptr %1881, align 8, !tbaa !11
  store double %1882, ptr %71, align 8, !tbaa !17
  %1883 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1884 = load double, ptr %1883, align 8, !tbaa !11
  store double %1884, ptr %36, align 8, !tbaa !17
  %1885 = load double, ptr %36, align 8, !tbaa !17
  %1886 = fcmp oge double %1885, 0.000000e+00
  br i1 %1886, label %1887, label %1889

1887:                                             ; preds = %1817
  %1888 = load double, ptr %36, align 8, !tbaa !17
  br label %1892

1889:                                             ; preds = %1817
  %1890 = load double, ptr %36, align 8, !tbaa !17
  %1891 = fneg double %1890
  br label %1892

1892:                                             ; preds = %1889, %1887
  %1893 = phi double [ %1888, %1887 ], [ %1891, %1889 ]
  %1894 = call double @d_imag(ptr noundef %78)
  store double %1894, ptr %37, align 8, !tbaa !17
  %1895 = load double, ptr %37, align 8, !tbaa !17
  %1896 = fcmp oge double %1895, 0.000000e+00
  br i1 %1896, label %1897, label %1899

1897:                                             ; preds = %1892
  %1898 = load double, ptr %37, align 8, !tbaa !17
  br label %1902

1899:                                             ; preds = %1892
  %1900 = load double, ptr %37, align 8, !tbaa !17
  %1901 = fneg double %1900
  br label %1902

1902:                                             ; preds = %1899, %1897
  %1903 = phi double [ %1898, %1897 ], [ %1901, %1899 ]
  %1904 = fadd double %1893, %1903
  %1905 = load double, ptr %71, align 8, !tbaa !17
  %1906 = fcmp oge double %1905, 0.000000e+00
  br i1 %1906, label %1907, label %1909

1907:                                             ; preds = %1902
  %1908 = load double, ptr %71, align 8, !tbaa !17
  br label %1912

1909:                                             ; preds = %1902
  %1910 = load double, ptr %71, align 8, !tbaa !17
  %1911 = fneg double %1910
  br label %1912

1912:                                             ; preds = %1909, %1907
  %1913 = phi double [ %1908, %1907 ], [ %1911, %1909 ]
  %1914 = fadd double %1904, %1913
  store double %1914, ptr %54, align 8, !tbaa !17
  %1915 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1916 = load double, ptr %1915, align 8, !tbaa !11
  %1917 = load double, ptr %54, align 8, !tbaa !17
  %1918 = fdiv double %1916, %1917
  %1919 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1918, ptr %1919, align 8, !tbaa !11
  %1920 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  %1921 = load double, ptr %1920, align 8, !tbaa !14
  %1922 = load double, ptr %54, align 8, !tbaa !17
  %1923 = fdiv double %1921, %1922
  %1924 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1923, ptr %1924, align 8, !tbaa !14
  %1925 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1926 = load double, ptr %1925, align 8, !tbaa !11
  %1927 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  store double %1926, ptr %1927, align 8, !tbaa !11
  %1928 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1929 = load double, ptr %1928, align 8, !tbaa !14
  %1930 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  store double %1929, ptr %1930, align 8, !tbaa !14
  %1931 = load double, ptr %54, align 8, !tbaa !17
  %1932 = load double, ptr %71, align 8, !tbaa !17
  %1933 = fdiv double %1932, %1931
  store double %1933, ptr %71, align 8, !tbaa !17
  %1934 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 0
  %1935 = load double, ptr %1934, align 8, !tbaa !11
  %1936 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1937 = getelementptr inbounds %struct.doublecomplex, ptr %1936, i32 0, i32 0
  store double %1935, ptr %1937, align 16, !tbaa !11
  %1938 = getelementptr inbounds %struct.doublecomplex, ptr %78, i32 0, i32 1
  %1939 = load double, ptr %1938, align 8, !tbaa !14
  %1940 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1941 = getelementptr inbounds %struct.doublecomplex, ptr %1940, i32 0, i32 1
  store double %1939, ptr %1941, align 8, !tbaa !14
  %1942 = load double, ptr %71, align 8, !tbaa !17
  %1943 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %1944 = getelementptr inbounds %struct.doublecomplex, ptr %1943, i32 0, i32 0
  store double %1942, ptr %1944, align 16, !tbaa !11
  %1945 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %1946 = getelementptr inbounds %struct.doublecomplex, ptr %1945, i32 0, i32 1
  store double 0.000000e+00, ptr %1946, align 8, !tbaa !14
  br label %1947

1947:                                             ; preds = %1912, %1812
  %1948 = load i64, ptr %49, align 8, !tbaa !9
  %1949 = sub nsw i64 %1948, 1
  store i64 %1949, ptr %32, align 8, !tbaa !9
  %1950 = load i64, ptr %53, align 8, !tbaa !9
  store i64 %1950, ptr %51, align 8, !tbaa !9
  br label %1951

1951:                                             ; preds = %2878, %1947
  %1952 = load i64, ptr %51, align 8, !tbaa !9
  %1953 = load i64, ptr %32, align 8, !tbaa !9
  %1954 = icmp sle i64 %1952, %1953
  br i1 %1954, label %1955, label %2881

1955:                                             ; preds = %1951
  %1956 = load i64, ptr %51, align 8, !tbaa !9
  %1957 = load i64, ptr %53, align 8, !tbaa !9
  %1958 = icmp sgt i64 %1956, %1957
  br i1 %1958, label %1959, label %1970

1959:                                             ; preds = %1955
  %1960 = load ptr, ptr %20, align 8, !tbaa !5
  %1961 = load i64, ptr %51, align 8, !tbaa !9
  %1962 = load i64, ptr %51, align 8, !tbaa !9
  %1963 = sub nsw i64 %1962, 1
  %1964 = load i64, ptr %28, align 8, !tbaa !9
  %1965 = mul nsw i64 %1963, %1964
  %1966 = add nsw i64 %1961, %1965
  %1967 = getelementptr inbounds %struct.doublecomplex, ptr %1960, i64 %1966
  %1968 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1969 = call i32 @f2c_zcopy(ptr noundef @c__2, ptr noundef %1967, ptr noundef @c__1, ptr noundef %1968, ptr noundef @c__1)
  br label %1970

1970:                                             ; preds = %1959, %1955
  %1971 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1972 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %1973 = call i32 @zlarfg_(ptr noundef @c__2, ptr noundef %1971, ptr noundef %1972, ptr noundef @c__1, ptr noundef %62)
  %1974 = load i64, ptr %51, align 8, !tbaa !9
  %1975 = load i64, ptr %53, align 8, !tbaa !9
  %1976 = icmp sgt i64 %1974, %1975
  br i1 %1976, label %1977, label %2013

1977:                                             ; preds = %1970
  %1978 = load i64, ptr %51, align 8, !tbaa !9
  %1979 = load i64, ptr %51, align 8, !tbaa !9
  %1980 = sub nsw i64 %1979, 1
  %1981 = load i64, ptr %28, align 8, !tbaa !9
  %1982 = mul nsw i64 %1980, %1981
  %1983 = add nsw i64 %1978, %1982
  store i64 %1983, ptr %33, align 8, !tbaa !9
  %1984 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1985 = getelementptr inbounds %struct.doublecomplex, ptr %1984, i32 0, i32 0
  %1986 = load double, ptr %1985, align 16, !tbaa !11
  %1987 = load ptr, ptr %20, align 8, !tbaa !5
  %1988 = load i64, ptr %33, align 8, !tbaa !9
  %1989 = getelementptr inbounds %struct.doublecomplex, ptr %1987, i64 %1988
  %1990 = getelementptr inbounds %struct.doublecomplex, ptr %1989, i32 0, i32 0
  store double %1986, ptr %1990, align 8, !tbaa !11
  %1991 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 0
  %1992 = getelementptr inbounds %struct.doublecomplex, ptr %1991, i32 0, i32 1
  %1993 = load double, ptr %1992, align 8, !tbaa !14
  %1994 = load ptr, ptr %20, align 8, !tbaa !5
  %1995 = load i64, ptr %33, align 8, !tbaa !9
  %1996 = getelementptr inbounds %struct.doublecomplex, ptr %1994, i64 %1995
  %1997 = getelementptr inbounds %struct.doublecomplex, ptr %1996, i32 0, i32 1
  store double %1993, ptr %1997, align 8, !tbaa !14
  %1998 = load i64, ptr %51, align 8, !tbaa !9
  %1999 = add nsw i64 %1998, 1
  %2000 = load i64, ptr %51, align 8, !tbaa !9
  %2001 = sub nsw i64 %2000, 1
  %2002 = load i64, ptr %28, align 8, !tbaa !9
  %2003 = mul nsw i64 %2001, %2002
  %2004 = add nsw i64 %1999, %2003
  store i64 %2004, ptr %33, align 8, !tbaa !9
  %2005 = load ptr, ptr %20, align 8, !tbaa !5
  %2006 = load i64, ptr %33, align 8, !tbaa !9
  %2007 = getelementptr inbounds %struct.doublecomplex, ptr %2005, i64 %2006
  %2008 = getelementptr inbounds %struct.doublecomplex, ptr %2007, i32 0, i32 0
  store double 0.000000e+00, ptr %2008, align 8, !tbaa !11
  %2009 = load ptr, ptr %20, align 8, !tbaa !5
  %2010 = load i64, ptr %33, align 8, !tbaa !9
  %2011 = getelementptr inbounds %struct.doublecomplex, ptr %2009, i64 %2010
  %2012 = getelementptr inbounds %struct.doublecomplex, ptr %2011, i32 0, i32 1
  store double 0.000000e+00, ptr %2012, align 8, !tbaa !14
  br label %2013

2013:                                             ; preds = %1977, %1970
  %2014 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %2015 = getelementptr inbounds %struct.doublecomplex, ptr %2014, i32 0, i32 0
  %2016 = load double, ptr %2015, align 16, !tbaa !11
  %2017 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %2016, ptr %2017, align 8, !tbaa !11
  %2018 = getelementptr inbounds [2 x %struct.doublecomplex], ptr %57, i64 0, i64 1
  %2019 = getelementptr inbounds %struct.doublecomplex, ptr %2018, i32 0, i32 1
  %2020 = load double, ptr %2019, align 8, !tbaa !14
  %2021 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %2020, ptr %2021, align 8, !tbaa !14
  %2022 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2023 = load double, ptr %2022, align 8, !tbaa !11
  %2024 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %2025 = load double, ptr %2024, align 8, !tbaa !11
  %2026 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2027 = load double, ptr %2026, align 8, !tbaa !14
  %2028 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %2029 = load double, ptr %2028, align 8, !tbaa !14
  %2030 = fmul double %2027, %2029
  %2031 = fneg double %2030
  %2032 = call double @llvm.fmuladd.f64(double %2023, double %2025, double %2031)
  %2033 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2032, ptr %2033, align 8, !tbaa !11
  %2034 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2035 = load double, ptr %2034, align 8, !tbaa !11
  %2036 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %2037 = load double, ptr %2036, align 8, !tbaa !14
  %2038 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2039 = load double, ptr %2038, align 8, !tbaa !14
  %2040 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %2041 = load double, ptr %2040, align 8, !tbaa !11
  %2042 = fmul double %2039, %2041
  %2043 = call double @llvm.fmuladd.f64(double %2035, double %2037, double %2042)
  %2044 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2043, ptr %2044, align 8, !tbaa !14
  %2045 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2046 = load double, ptr %2045, align 8, !tbaa !11
  store double %2046, ptr %63, align 8, !tbaa !17
  %2047 = load i64, ptr %61, align 8, !tbaa !9
  store i64 %2047, ptr %33, align 8, !tbaa !9
  %2048 = load i64, ptr %51, align 8, !tbaa !9
  store i64 %2048, ptr %50, align 8, !tbaa !9
  br label %2049

2049:                                             ; preds = %2239, %2013
  %2050 = load i64, ptr %50, align 8, !tbaa !9
  %2051 = load i64, ptr %33, align 8, !tbaa !9
  %2052 = icmp sle i64 %2050, %2051
  br i1 %2052, label %2053, label %2242

2053:                                             ; preds = %2049
  call void @d_cnjg(ptr noundef %44, ptr noundef %62)
  %2054 = load i64, ptr %51, align 8, !tbaa !9
  %2055 = load i64, ptr %50, align 8, !tbaa !9
  %2056 = load i64, ptr %28, align 8, !tbaa !9
  %2057 = mul nsw i64 %2055, %2056
  %2058 = add nsw i64 %2054, %2057
  store i64 %2058, ptr %34, align 8, !tbaa !9
  %2059 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2060 = load double, ptr %2059, align 8, !tbaa !11
  %2061 = load ptr, ptr %20, align 8, !tbaa !5
  %2062 = load i64, ptr %34, align 8, !tbaa !9
  %2063 = getelementptr inbounds %struct.doublecomplex, ptr %2061, i64 %2062
  %2064 = getelementptr inbounds %struct.doublecomplex, ptr %2063, i32 0, i32 0
  %2065 = load double, ptr %2064, align 8, !tbaa !11
  %2066 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2067 = load double, ptr %2066, align 8, !tbaa !14
  %2068 = load ptr, ptr %20, align 8, !tbaa !5
  %2069 = load i64, ptr %34, align 8, !tbaa !9
  %2070 = getelementptr inbounds %struct.doublecomplex, ptr %2068, i64 %2069
  %2071 = getelementptr inbounds %struct.doublecomplex, ptr %2070, i32 0, i32 1
  %2072 = load double, ptr %2071, align 8, !tbaa !14
  %2073 = fmul double %2067, %2072
  %2074 = fneg double %2073
  %2075 = call double @llvm.fmuladd.f64(double %2060, double %2065, double %2074)
  %2076 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %2075, ptr %2076, align 8, !tbaa !11
  %2077 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2078 = load double, ptr %2077, align 8, !tbaa !11
  %2079 = load ptr, ptr %20, align 8, !tbaa !5
  %2080 = load i64, ptr %34, align 8, !tbaa !9
  %2081 = getelementptr inbounds %struct.doublecomplex, ptr %2079, i64 %2080
  %2082 = getelementptr inbounds %struct.doublecomplex, ptr %2081, i32 0, i32 1
  %2083 = load double, ptr %2082, align 8, !tbaa !14
  %2084 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2085 = load double, ptr %2084, align 8, !tbaa !14
  %2086 = load ptr, ptr %20, align 8, !tbaa !5
  %2087 = load i64, ptr %34, align 8, !tbaa !9
  %2088 = getelementptr inbounds %struct.doublecomplex, ptr %2086, i64 %2087
  %2089 = getelementptr inbounds %struct.doublecomplex, ptr %2088, i32 0, i32 0
  %2090 = load double, ptr %2089, align 8, !tbaa !11
  %2091 = fmul double %2085, %2090
  %2092 = call double @llvm.fmuladd.f64(double %2078, double %2083, double %2091)
  %2093 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %2092, ptr %2093, align 8, !tbaa !14
  %2094 = load i64, ptr %51, align 8, !tbaa !9
  %2095 = add nsw i64 %2094, 1
  %2096 = load i64, ptr %50, align 8, !tbaa !9
  %2097 = load i64, ptr %28, align 8, !tbaa !9
  %2098 = mul nsw i64 %2096, %2097
  %2099 = add nsw i64 %2095, %2098
  store i64 %2099, ptr %35, align 8, !tbaa !9
  %2100 = load double, ptr %63, align 8, !tbaa !17
  %2101 = load ptr, ptr %20, align 8, !tbaa !5
  %2102 = load i64, ptr %35, align 8, !tbaa !9
  %2103 = getelementptr inbounds %struct.doublecomplex, ptr %2101, i64 %2102
  %2104 = getelementptr inbounds %struct.doublecomplex, ptr %2103, i32 0, i32 0
  %2105 = load double, ptr %2104, align 8, !tbaa !11
  %2106 = fmul double %2100, %2105
  %2107 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 0
  store double %2106, ptr %2107, align 8, !tbaa !11
  %2108 = load double, ptr %63, align 8, !tbaa !17
  %2109 = load ptr, ptr %20, align 8, !tbaa !5
  %2110 = load i64, ptr %35, align 8, !tbaa !9
  %2111 = getelementptr inbounds %struct.doublecomplex, ptr %2109, i64 %2110
  %2112 = getelementptr inbounds %struct.doublecomplex, ptr %2111, i32 0, i32 1
  %2113 = load double, ptr %2112, align 8, !tbaa !14
  %2114 = fmul double %2108, %2113
  %2115 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 1
  store double %2114, ptr %2115, align 8, !tbaa !14
  %2116 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2117 = load double, ptr %2116, align 8, !tbaa !11
  %2118 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 0
  %2119 = load double, ptr %2118, align 8, !tbaa !11
  %2120 = fadd double %2117, %2119
  %2121 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2120, ptr %2121, align 8, !tbaa !11
  %2122 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2123 = load double, ptr %2122, align 8, !tbaa !14
  %2124 = getelementptr inbounds %struct.doublecomplex, ptr %45, i32 0, i32 1
  %2125 = load double, ptr %2124, align 8, !tbaa !14
  %2126 = fadd double %2123, %2125
  %2127 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2126, ptr %2127, align 8, !tbaa !14
  %2128 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2129 = load double, ptr %2128, align 8, !tbaa !11
  %2130 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  store double %2129, ptr %2130, align 8, !tbaa !11
  %2131 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2132 = load double, ptr %2131, align 8, !tbaa !14
  %2133 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  store double %2132, ptr %2133, align 8, !tbaa !14
  %2134 = load i64, ptr %51, align 8, !tbaa !9
  %2135 = load i64, ptr %50, align 8, !tbaa !9
  %2136 = load i64, ptr %28, align 8, !tbaa !9
  %2137 = mul nsw i64 %2135, %2136
  %2138 = add nsw i64 %2134, %2137
  store i64 %2138, ptr %34, align 8, !tbaa !9
  %2139 = load i64, ptr %51, align 8, !tbaa !9
  %2140 = load i64, ptr %50, align 8, !tbaa !9
  %2141 = load i64, ptr %28, align 8, !tbaa !9
  %2142 = mul nsw i64 %2140, %2141
  %2143 = add nsw i64 %2139, %2142
  store i64 %2143, ptr %35, align 8, !tbaa !9
  %2144 = load ptr, ptr %20, align 8, !tbaa !5
  %2145 = load i64, ptr %35, align 8, !tbaa !9
  %2146 = getelementptr inbounds %struct.doublecomplex, ptr %2144, i64 %2145
  %2147 = getelementptr inbounds %struct.doublecomplex, ptr %2146, i32 0, i32 0
  %2148 = load double, ptr %2147, align 8, !tbaa !11
  %2149 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2150 = load double, ptr %2149, align 8, !tbaa !11
  %2151 = fsub double %2148, %2150
  %2152 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2151, ptr %2152, align 8, !tbaa !11
  %2153 = load ptr, ptr %20, align 8, !tbaa !5
  %2154 = load i64, ptr %35, align 8, !tbaa !9
  %2155 = getelementptr inbounds %struct.doublecomplex, ptr %2153, i64 %2154
  %2156 = getelementptr inbounds %struct.doublecomplex, ptr %2155, i32 0, i32 1
  %2157 = load double, ptr %2156, align 8, !tbaa !14
  %2158 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2159 = load double, ptr %2158, align 8, !tbaa !14
  %2160 = fsub double %2157, %2159
  %2161 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2160, ptr %2161, align 8, !tbaa !14
  %2162 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2163 = load double, ptr %2162, align 8, !tbaa !11
  %2164 = load ptr, ptr %20, align 8, !tbaa !5
  %2165 = load i64, ptr %34, align 8, !tbaa !9
  %2166 = getelementptr inbounds %struct.doublecomplex, ptr %2164, i64 %2165
  %2167 = getelementptr inbounds %struct.doublecomplex, ptr %2166, i32 0, i32 0
  store double %2163, ptr %2167, align 8, !tbaa !11
  %2168 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2169 = load double, ptr %2168, align 8, !tbaa !14
  %2170 = load ptr, ptr %20, align 8, !tbaa !5
  %2171 = load i64, ptr %34, align 8, !tbaa !9
  %2172 = getelementptr inbounds %struct.doublecomplex, ptr %2170, i64 %2171
  %2173 = getelementptr inbounds %struct.doublecomplex, ptr %2172, i32 0, i32 1
  store double %2169, ptr %2173, align 8, !tbaa !14
  %2174 = load i64, ptr %51, align 8, !tbaa !9
  %2175 = add nsw i64 %2174, 1
  %2176 = load i64, ptr %50, align 8, !tbaa !9
  %2177 = load i64, ptr %28, align 8, !tbaa !9
  %2178 = mul nsw i64 %2176, %2177
  %2179 = add nsw i64 %2175, %2178
  store i64 %2179, ptr %34, align 8, !tbaa !9
  %2180 = load i64, ptr %51, align 8, !tbaa !9
  %2181 = add nsw i64 %2180, 1
  %2182 = load i64, ptr %50, align 8, !tbaa !9
  %2183 = load i64, ptr %28, align 8, !tbaa !9
  %2184 = mul nsw i64 %2182, %2183
  %2185 = add nsw i64 %2181, %2184
  store i64 %2185, ptr %35, align 8, !tbaa !9
  %2186 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2187 = load double, ptr %2186, align 8, !tbaa !11
  %2188 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %2189 = load double, ptr %2188, align 8, !tbaa !11
  %2190 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2191 = load double, ptr %2190, align 8, !tbaa !14
  %2192 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %2193 = load double, ptr %2192, align 8, !tbaa !14
  %2194 = fmul double %2191, %2193
  %2195 = fneg double %2194
  %2196 = call double @llvm.fmuladd.f64(double %2187, double %2189, double %2195)
  %2197 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %2196, ptr %2197, align 8, !tbaa !11
  %2198 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2199 = load double, ptr %2198, align 8, !tbaa !11
  %2200 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %2201 = load double, ptr %2200, align 8, !tbaa !14
  %2202 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2203 = load double, ptr %2202, align 8, !tbaa !14
  %2204 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %2205 = load double, ptr %2204, align 8, !tbaa !11
  %2206 = fmul double %2203, %2205
  %2207 = call double @llvm.fmuladd.f64(double %2199, double %2201, double %2206)
  %2208 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %2207, ptr %2208, align 8, !tbaa !14
  %2209 = load ptr, ptr %20, align 8, !tbaa !5
  %2210 = load i64, ptr %35, align 8, !tbaa !9
  %2211 = getelementptr inbounds %struct.doublecomplex, ptr %2209, i64 %2210
  %2212 = getelementptr inbounds %struct.doublecomplex, ptr %2211, i32 0, i32 0
  %2213 = load double, ptr %2212, align 8, !tbaa !11
  %2214 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2215 = load double, ptr %2214, align 8, !tbaa !11
  %2216 = fsub double %2213, %2215
  %2217 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2216, ptr %2217, align 8, !tbaa !11
  %2218 = load ptr, ptr %20, align 8, !tbaa !5
  %2219 = load i64, ptr %35, align 8, !tbaa !9
  %2220 = getelementptr inbounds %struct.doublecomplex, ptr %2218, i64 %2219
  %2221 = getelementptr inbounds %struct.doublecomplex, ptr %2220, i32 0, i32 1
  %2222 = load double, ptr %2221, align 8, !tbaa !14
  %2223 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2224 = load double, ptr %2223, align 8, !tbaa !14
  %2225 = fsub double %2222, %2224
  %2226 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2225, ptr %2226, align 8, !tbaa !14
  %2227 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2228 = load double, ptr %2227, align 8, !tbaa !11
  %2229 = load ptr, ptr %20, align 8, !tbaa !5
  %2230 = load i64, ptr %34, align 8, !tbaa !9
  %2231 = getelementptr inbounds %struct.doublecomplex, ptr %2229, i64 %2230
  %2232 = getelementptr inbounds %struct.doublecomplex, ptr %2231, i32 0, i32 0
  store double %2228, ptr %2232, align 8, !tbaa !11
  %2233 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2234 = load double, ptr %2233, align 8, !tbaa !14
  %2235 = load ptr, ptr %20, align 8, !tbaa !5
  %2236 = load i64, ptr %34, align 8, !tbaa !9
  %2237 = getelementptr inbounds %struct.doublecomplex, ptr %2235, i64 %2236
  %2238 = getelementptr inbounds %struct.doublecomplex, ptr %2237, i32 0, i32 1
  store double %2234, ptr %2238, align 8, !tbaa !14
  br label %2239

2239:                                             ; preds = %2053
  %2240 = load i64, ptr %50, align 8, !tbaa !9
  %2241 = add nsw i64 %2240, 1
  store i64 %2241, ptr %50, align 8, !tbaa !9
  br label %2049, !llvm.loop !21

2242:                                             ; preds = %2049
  %2243 = load i64, ptr %51, align 8, !tbaa !9
  %2244 = add nsw i64 %2243, 2
  store i64 %2244, ptr %34, align 8, !tbaa !9
  %2245 = load i64, ptr %34, align 8, !tbaa !9
  %2246 = load i64, ptr %49, align 8, !tbaa !9
  %2247 = icmp sle i64 %2245, %2246
  br i1 %2247, label %2248, label %2250

2248:                                             ; preds = %2242
  %2249 = load i64, ptr %34, align 8, !tbaa !9
  br label %2252

2250:                                             ; preds = %2242
  %2251 = load i64, ptr %49, align 8, !tbaa !9
  br label %2252

2252:                                             ; preds = %2250, %2248
  %2253 = phi i64 [ %2249, %2248 ], [ %2251, %2250 ]
  store i64 %2253, ptr %33, align 8, !tbaa !9
  %2254 = load i64, ptr %60, align 8, !tbaa !9
  store i64 %2254, ptr %50, align 8, !tbaa !9
  br label %2255

2255:                                             ; preds = %2445, %2252
  %2256 = load i64, ptr %50, align 8, !tbaa !9
  %2257 = load i64, ptr %33, align 8, !tbaa !9
  %2258 = icmp sle i64 %2256, %2257
  br i1 %2258, label %2259, label %2448

2259:                                             ; preds = %2255
  %2260 = load i64, ptr %50, align 8, !tbaa !9
  %2261 = load i64, ptr %51, align 8, !tbaa !9
  %2262 = load i64, ptr %28, align 8, !tbaa !9
  %2263 = mul nsw i64 %2261, %2262
  %2264 = add nsw i64 %2260, %2263
  store i64 %2264, ptr %34, align 8, !tbaa !9
  %2265 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2266 = load double, ptr %2265, align 8, !tbaa !11
  %2267 = load ptr, ptr %20, align 8, !tbaa !5
  %2268 = load i64, ptr %34, align 8, !tbaa !9
  %2269 = getelementptr inbounds %struct.doublecomplex, ptr %2267, i64 %2268
  %2270 = getelementptr inbounds %struct.doublecomplex, ptr %2269, i32 0, i32 0
  %2271 = load double, ptr %2270, align 8, !tbaa !11
  %2272 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2273 = load double, ptr %2272, align 8, !tbaa !14
  %2274 = load ptr, ptr %20, align 8, !tbaa !5
  %2275 = load i64, ptr %34, align 8, !tbaa !9
  %2276 = getelementptr inbounds %struct.doublecomplex, ptr %2274, i64 %2275
  %2277 = getelementptr inbounds %struct.doublecomplex, ptr %2276, i32 0, i32 1
  %2278 = load double, ptr %2277, align 8, !tbaa !14
  %2279 = fmul double %2273, %2278
  %2280 = fneg double %2279
  %2281 = call double @llvm.fmuladd.f64(double %2266, double %2271, double %2280)
  %2282 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %2281, ptr %2282, align 8, !tbaa !11
  %2283 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2284 = load double, ptr %2283, align 8, !tbaa !11
  %2285 = load ptr, ptr %20, align 8, !tbaa !5
  %2286 = load i64, ptr %34, align 8, !tbaa !9
  %2287 = getelementptr inbounds %struct.doublecomplex, ptr %2285, i64 %2286
  %2288 = getelementptr inbounds %struct.doublecomplex, ptr %2287, i32 0, i32 1
  %2289 = load double, ptr %2288, align 8, !tbaa !14
  %2290 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2291 = load double, ptr %2290, align 8, !tbaa !14
  %2292 = load ptr, ptr %20, align 8, !tbaa !5
  %2293 = load i64, ptr %34, align 8, !tbaa !9
  %2294 = getelementptr inbounds %struct.doublecomplex, ptr %2292, i64 %2293
  %2295 = getelementptr inbounds %struct.doublecomplex, ptr %2294, i32 0, i32 0
  %2296 = load double, ptr %2295, align 8, !tbaa !11
  %2297 = fmul double %2291, %2296
  %2298 = call double @llvm.fmuladd.f64(double %2284, double %2289, double %2297)
  %2299 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %2298, ptr %2299, align 8, !tbaa !14
  %2300 = load i64, ptr %50, align 8, !tbaa !9
  %2301 = load i64, ptr %51, align 8, !tbaa !9
  %2302 = add nsw i64 %2301, 1
  %2303 = load i64, ptr %28, align 8, !tbaa !9
  %2304 = mul nsw i64 %2302, %2303
  %2305 = add nsw i64 %2300, %2304
  store i64 %2305, ptr %35, align 8, !tbaa !9
  %2306 = load double, ptr %63, align 8, !tbaa !17
  %2307 = load ptr, ptr %20, align 8, !tbaa !5
  %2308 = load i64, ptr %35, align 8, !tbaa !9
  %2309 = getelementptr inbounds %struct.doublecomplex, ptr %2307, i64 %2308
  %2310 = getelementptr inbounds %struct.doublecomplex, ptr %2309, i32 0, i32 0
  %2311 = load double, ptr %2310, align 8, !tbaa !11
  %2312 = fmul double %2306, %2311
  %2313 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %2312, ptr %2313, align 8, !tbaa !11
  %2314 = load double, ptr %63, align 8, !tbaa !17
  %2315 = load ptr, ptr %20, align 8, !tbaa !5
  %2316 = load i64, ptr %35, 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 !14
  %2320 = fmul double %2314, %2319
  %2321 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %2320, ptr %2321, align 8, !tbaa !14
  %2322 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2323 = load double, ptr %2322, align 8, !tbaa !11
  %2324 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2325 = load double, ptr %2324, align 8, !tbaa !11
  %2326 = fadd double %2323, %2325
  %2327 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2326, ptr %2327, align 8, !tbaa !11
  %2328 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2329 = load double, ptr %2328, align 8, !tbaa !14
  %2330 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2331 = load double, ptr %2330, align 8, !tbaa !14
  %2332 = fadd double %2329, %2331
  %2333 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2332, ptr %2333, align 8, !tbaa !14
  %2334 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2335 = load double, ptr %2334, align 8, !tbaa !11
  %2336 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  store double %2335, ptr %2336, align 8, !tbaa !11
  %2337 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2338 = load double, ptr %2337, align 8, !tbaa !14
  %2339 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  store double %2338, ptr %2339, align 8, !tbaa !14
  %2340 = load i64, ptr %50, align 8, !tbaa !9
  %2341 = load i64, ptr %51, align 8, !tbaa !9
  %2342 = load i64, ptr %28, align 8, !tbaa !9
  %2343 = mul nsw i64 %2341, %2342
  %2344 = add nsw i64 %2340, %2343
  store i64 %2344, ptr %34, align 8, !tbaa !9
  %2345 = load i64, ptr %50, align 8, !tbaa !9
  %2346 = load i64, ptr %51, align 8, !tbaa !9
  %2347 = load i64, ptr %28, align 8, !tbaa !9
  %2348 = mul nsw i64 %2346, %2347
  %2349 = add nsw i64 %2345, %2348
  store i64 %2349, ptr %35, align 8, !tbaa !9
  %2350 = load ptr, ptr %20, align 8, !tbaa !5
  %2351 = load i64, ptr %35, align 8, !tbaa !9
  %2352 = getelementptr inbounds %struct.doublecomplex, ptr %2350, i64 %2351
  %2353 = getelementptr inbounds %struct.doublecomplex, ptr %2352, i32 0, i32 0
  %2354 = load double, ptr %2353, align 8, !tbaa !11
  %2355 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2356 = load double, ptr %2355, align 8, !tbaa !11
  %2357 = fsub double %2354, %2356
  %2358 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2357, ptr %2358, align 8, !tbaa !11
  %2359 = load ptr, ptr %20, align 8, !tbaa !5
  %2360 = load i64, ptr %35, align 8, !tbaa !9
  %2361 = getelementptr inbounds %struct.doublecomplex, ptr %2359, i64 %2360
  %2362 = getelementptr inbounds %struct.doublecomplex, ptr %2361, i32 0, i32 1
  %2363 = load double, ptr %2362, align 8, !tbaa !14
  %2364 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2365 = load double, ptr %2364, align 8, !tbaa !14
  %2366 = fsub double %2363, %2365
  %2367 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2366, ptr %2367, align 8, !tbaa !14
  %2368 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2369 = load double, ptr %2368, align 8, !tbaa !11
  %2370 = load ptr, ptr %20, align 8, !tbaa !5
  %2371 = load i64, ptr %34, align 8, !tbaa !9
  %2372 = getelementptr inbounds %struct.doublecomplex, ptr %2370, i64 %2371
  %2373 = getelementptr inbounds %struct.doublecomplex, ptr %2372, i32 0, i32 0
  store double %2369, ptr %2373, align 8, !tbaa !11
  %2374 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2375 = load double, ptr %2374, align 8, !tbaa !14
  %2376 = load ptr, ptr %20, align 8, !tbaa !5
  %2377 = load i64, ptr %34, align 8, !tbaa !9
  %2378 = getelementptr inbounds %struct.doublecomplex, ptr %2376, i64 %2377
  %2379 = getelementptr inbounds %struct.doublecomplex, ptr %2378, i32 0, i32 1
  store double %2375, ptr %2379, align 8, !tbaa !14
  %2380 = load i64, ptr %50, align 8, !tbaa !9
  %2381 = load i64, ptr %51, align 8, !tbaa !9
  %2382 = add nsw i64 %2381, 1
  %2383 = load i64, ptr %28, align 8, !tbaa !9
  %2384 = mul nsw i64 %2382, %2383
  %2385 = add nsw i64 %2380, %2384
  store i64 %2385, ptr %34, align 8, !tbaa !9
  %2386 = load i64, ptr %50, align 8, !tbaa !9
  %2387 = load i64, ptr %51, align 8, !tbaa !9
  %2388 = add nsw i64 %2387, 1
  %2389 = load i64, ptr %28, align 8, !tbaa !9
  %2390 = mul nsw i64 %2388, %2389
  %2391 = add nsw i64 %2386, %2390
  store i64 %2391, ptr %35, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %44, ptr noundef %64)
  %2392 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2393 = load double, ptr %2392, align 8, !tbaa !11
  %2394 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2395 = load double, ptr %2394, align 8, !tbaa !11
  %2396 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2397 = load double, ptr %2396, align 8, !tbaa !14
  %2398 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2399 = load double, ptr %2398, align 8, !tbaa !14
  %2400 = fmul double %2397, %2399
  %2401 = fneg double %2400
  %2402 = call double @llvm.fmuladd.f64(double %2393, double %2395, double %2401)
  %2403 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %2402, ptr %2403, align 8, !tbaa !11
  %2404 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2405 = load double, ptr %2404, align 8, !tbaa !11
  %2406 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2407 = load double, ptr %2406, align 8, !tbaa !14
  %2408 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2409 = load double, ptr %2408, align 8, !tbaa !14
  %2410 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2411 = load double, ptr %2410, align 8, !tbaa !11
  %2412 = fmul double %2409, %2411
  %2413 = call double @llvm.fmuladd.f64(double %2405, double %2407, double %2412)
  %2414 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %2413, ptr %2414, align 8, !tbaa !14
  %2415 = load ptr, ptr %20, align 8, !tbaa !5
  %2416 = load i64, ptr %35, align 8, !tbaa !9
  %2417 = getelementptr inbounds %struct.doublecomplex, ptr %2415, i64 %2416
  %2418 = getelementptr inbounds %struct.doublecomplex, ptr %2417, i32 0, i32 0
  %2419 = load double, ptr %2418, align 8, !tbaa !11
  %2420 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2421 = load double, ptr %2420, align 8, !tbaa !11
  %2422 = fsub double %2419, %2421
  %2423 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2422, ptr %2423, align 8, !tbaa !11
  %2424 = load ptr, ptr %20, align 8, !tbaa !5
  %2425 = load i64, ptr %35, align 8, !tbaa !9
  %2426 = getelementptr inbounds %struct.doublecomplex, ptr %2424, i64 %2425
  %2427 = getelementptr inbounds %struct.doublecomplex, ptr %2426, i32 0, i32 1
  %2428 = load double, ptr %2427, align 8, !tbaa !14
  %2429 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2430 = load double, ptr %2429, align 8, !tbaa !14
  %2431 = fsub double %2428, %2430
  %2432 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2431, ptr %2432, align 8, !tbaa !14
  %2433 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2434 = load double, ptr %2433, align 8, !tbaa !11
  %2435 = load ptr, ptr %20, align 8, !tbaa !5
  %2436 = load i64, ptr %34, align 8, !tbaa !9
  %2437 = getelementptr inbounds %struct.doublecomplex, ptr %2435, i64 %2436
  %2438 = getelementptr inbounds %struct.doublecomplex, ptr %2437, i32 0, i32 0
  store double %2434, ptr %2438, align 8, !tbaa !11
  %2439 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2440 = load double, ptr %2439, align 8, !tbaa !14
  %2441 = load ptr, ptr %20, align 8, !tbaa !5
  %2442 = load i64, ptr %34, align 8, !tbaa !9
  %2443 = getelementptr inbounds %struct.doublecomplex, ptr %2441, i64 %2442
  %2444 = getelementptr inbounds %struct.doublecomplex, ptr %2443, i32 0, i32 1
  store double %2440, ptr %2444, align 8, !tbaa !14
  br label %2445

2445:                                             ; preds = %2259
  %2446 = load i64, ptr %50, align 8, !tbaa !9
  %2447 = add nsw i64 %2446, 1
  store i64 %2447, ptr %50, align 8, !tbaa !9
  br label %2255, !llvm.loop !22

2448:                                             ; preds = %2255
  %2449 = load ptr, ptr %16, align 8, !tbaa !5
  %2450 = load i64, ptr %2449, align 8, !tbaa !9
  %2451 = icmp ne i64 %2450, 0
  br i1 %2451, label %2452, label %2651

2452:                                             ; preds = %2448
  %2453 = load ptr, ptr %24, align 8, !tbaa !5
  %2454 = load i64, ptr %2453, align 8, !tbaa !9
  store i64 %2454, ptr %33, align 8, !tbaa !9
  %2455 = load ptr, ptr %23, align 8, !tbaa !5
  %2456 = load i64, ptr %2455, align 8, !tbaa !9
  store i64 %2456, ptr %50, align 8, !tbaa !9
  br label %2457

2457:                                             ; preds = %2647, %2452
  %2458 = load i64, ptr %50, align 8, !tbaa !9
  %2459 = load i64, ptr %33, align 8, !tbaa !9
  %2460 = icmp sle i64 %2458, %2459
  br i1 %2460, label %2461, label %2650

2461:                                             ; preds = %2457
  %2462 = load i64, ptr %50, align 8, !tbaa !9
  %2463 = load i64, ptr %51, align 8, !tbaa !9
  %2464 = load i64, ptr %30, align 8, !tbaa !9
  %2465 = mul nsw i64 %2463, %2464
  %2466 = add nsw i64 %2462, %2465
  store i64 %2466, ptr %34, align 8, !tbaa !9
  %2467 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2468 = load double, ptr %2467, align 8, !tbaa !11
  %2469 = load ptr, ptr %25, align 8, !tbaa !5
  %2470 = load i64, ptr %34, align 8, !tbaa !9
  %2471 = getelementptr inbounds %struct.doublecomplex, ptr %2469, i64 %2470
  %2472 = getelementptr inbounds %struct.doublecomplex, ptr %2471, i32 0, i32 0
  %2473 = load double, ptr %2472, align 8, !tbaa !11
  %2474 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2475 = load double, ptr %2474, align 8, !tbaa !14
  %2476 = load ptr, ptr %25, align 8, !tbaa !5
  %2477 = load i64, ptr %34, align 8, !tbaa !9
  %2478 = getelementptr inbounds %struct.doublecomplex, ptr %2476, i64 %2477
  %2479 = getelementptr inbounds %struct.doublecomplex, ptr %2478, i32 0, i32 1
  %2480 = load double, ptr %2479, align 8, !tbaa !14
  %2481 = fmul double %2475, %2480
  %2482 = fneg double %2481
  %2483 = call double @llvm.fmuladd.f64(double %2468, double %2473, double %2482)
  %2484 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %2483, ptr %2484, align 8, !tbaa !11
  %2485 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2486 = load double, ptr %2485, align 8, !tbaa !11
  %2487 = load ptr, ptr %25, align 8, !tbaa !5
  %2488 = load i64, ptr %34, align 8, !tbaa !9
  %2489 = getelementptr inbounds %struct.doublecomplex, ptr %2487, i64 %2488
  %2490 = getelementptr inbounds %struct.doublecomplex, ptr %2489, i32 0, i32 1
  %2491 = load double, ptr %2490, align 8, !tbaa !14
  %2492 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2493 = load double, ptr %2492, align 8, !tbaa !14
  %2494 = load ptr, ptr %25, align 8, !tbaa !5
  %2495 = load i64, ptr %34, align 8, !tbaa !9
  %2496 = getelementptr inbounds %struct.doublecomplex, ptr %2494, i64 %2495
  %2497 = getelementptr inbounds %struct.doublecomplex, ptr %2496, i32 0, i32 0
  %2498 = load double, ptr %2497, align 8, !tbaa !11
  %2499 = fmul double %2493, %2498
  %2500 = call double @llvm.fmuladd.f64(double %2486, double %2491, double %2499)
  %2501 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %2500, ptr %2501, align 8, !tbaa !14
  %2502 = load i64, ptr %50, align 8, !tbaa !9
  %2503 = load i64, ptr %51, align 8, !tbaa !9
  %2504 = add nsw i64 %2503, 1
  %2505 = load i64, ptr %30, align 8, !tbaa !9
  %2506 = mul nsw i64 %2504, %2505
  %2507 = add nsw i64 %2502, %2506
  store i64 %2507, ptr %35, align 8, !tbaa !9
  %2508 = load double, ptr %63, align 8, !tbaa !17
  %2509 = load ptr, ptr %25, align 8, !tbaa !5
  %2510 = load i64, ptr %35, align 8, !tbaa !9
  %2511 = getelementptr inbounds %struct.doublecomplex, ptr %2509, i64 %2510
  %2512 = getelementptr inbounds %struct.doublecomplex, ptr %2511, i32 0, i32 0
  %2513 = load double, ptr %2512, align 8, !tbaa !11
  %2514 = fmul double %2508, %2513
  %2515 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %2514, ptr %2515, align 8, !tbaa !11
  %2516 = load double, ptr %63, align 8, !tbaa !17
  %2517 = load ptr, ptr %25, align 8, !tbaa !5
  %2518 = load i64, ptr %35, align 8, !tbaa !9
  %2519 = getelementptr inbounds %struct.doublecomplex, ptr %2517, i64 %2518
  %2520 = getelementptr inbounds %struct.doublecomplex, ptr %2519, i32 0, i32 1
  %2521 = load double, ptr %2520, align 8, !tbaa !14
  %2522 = fmul double %2516, %2521
  %2523 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %2522, ptr %2523, align 8, !tbaa !14
  %2524 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2525 = load double, ptr %2524, align 8, !tbaa !11
  %2526 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2527 = load double, ptr %2526, align 8, !tbaa !11
  %2528 = fadd double %2525, %2527
  %2529 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2528, ptr %2529, align 8, !tbaa !11
  %2530 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2531 = load double, ptr %2530, align 8, !tbaa !14
  %2532 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2533 = load double, ptr %2532, align 8, !tbaa !14
  %2534 = fadd double %2531, %2533
  %2535 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2534, ptr %2535, align 8, !tbaa !14
  %2536 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2537 = load double, ptr %2536, align 8, !tbaa !11
  %2538 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  store double %2537, ptr %2538, align 8, !tbaa !11
  %2539 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2540 = load double, ptr %2539, align 8, !tbaa !14
  %2541 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  store double %2540, ptr %2541, align 8, !tbaa !14
  %2542 = load i64, ptr %50, align 8, !tbaa !9
  %2543 = load i64, ptr %51, align 8, !tbaa !9
  %2544 = load i64, ptr %30, align 8, !tbaa !9
  %2545 = mul nsw i64 %2543, %2544
  %2546 = add nsw i64 %2542, %2545
  store i64 %2546, ptr %34, align 8, !tbaa !9
  %2547 = load i64, ptr %50, align 8, !tbaa !9
  %2548 = load i64, ptr %51, align 8, !tbaa !9
  %2549 = load i64, ptr %30, align 8, !tbaa !9
  %2550 = mul nsw i64 %2548, %2549
  %2551 = add nsw i64 %2547, %2550
  store i64 %2551, ptr %35, align 8, !tbaa !9
  %2552 = load ptr, ptr %25, align 8, !tbaa !5
  %2553 = load i64, ptr %35, align 8, !tbaa !9
  %2554 = getelementptr inbounds %struct.doublecomplex, ptr %2552, i64 %2553
  %2555 = getelementptr inbounds %struct.doublecomplex, ptr %2554, i32 0, i32 0
  %2556 = load double, ptr %2555, align 8, !tbaa !11
  %2557 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2558 = load double, ptr %2557, align 8, !tbaa !11
  %2559 = fsub double %2556, %2558
  %2560 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2559, ptr %2560, align 8, !tbaa !11
  %2561 = load ptr, ptr %25, align 8, !tbaa !5
  %2562 = load i64, ptr %35, align 8, !tbaa !9
  %2563 = getelementptr inbounds %struct.doublecomplex, ptr %2561, i64 %2562
  %2564 = getelementptr inbounds %struct.doublecomplex, ptr %2563, i32 0, i32 1
  %2565 = load double, ptr %2564, align 8, !tbaa !14
  %2566 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2567 = load double, ptr %2566, align 8, !tbaa !14
  %2568 = fsub double %2565, %2567
  %2569 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2568, ptr %2569, align 8, !tbaa !14
  %2570 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2571 = load double, ptr %2570, align 8, !tbaa !11
  %2572 = load ptr, ptr %25, align 8, !tbaa !5
  %2573 = load i64, ptr %34, align 8, !tbaa !9
  %2574 = getelementptr inbounds %struct.doublecomplex, ptr %2572, i64 %2573
  %2575 = getelementptr inbounds %struct.doublecomplex, ptr %2574, i32 0, i32 0
  store double %2571, ptr %2575, align 8, !tbaa !11
  %2576 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2577 = load double, ptr %2576, align 8, !tbaa !14
  %2578 = load ptr, ptr %25, align 8, !tbaa !5
  %2579 = load i64, ptr %34, align 8, !tbaa !9
  %2580 = getelementptr inbounds %struct.doublecomplex, ptr %2578, i64 %2579
  %2581 = getelementptr inbounds %struct.doublecomplex, ptr %2580, i32 0, i32 1
  store double %2577, ptr %2581, align 8, !tbaa !14
  %2582 = load i64, ptr %50, align 8, !tbaa !9
  %2583 = load i64, ptr %51, align 8, !tbaa !9
  %2584 = add nsw i64 %2583, 1
  %2585 = load i64, ptr %30, align 8, !tbaa !9
  %2586 = mul nsw i64 %2584, %2585
  %2587 = add nsw i64 %2582, %2586
  store i64 %2587, ptr %34, align 8, !tbaa !9
  %2588 = load i64, ptr %50, align 8, !tbaa !9
  %2589 = load i64, ptr %51, align 8, !tbaa !9
  %2590 = add nsw i64 %2589, 1
  %2591 = load i64, ptr %30, align 8, !tbaa !9
  %2592 = mul nsw i64 %2590, %2591
  %2593 = add nsw i64 %2588, %2592
  store i64 %2593, ptr %35, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %44, ptr noundef %64)
  %2594 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2595 = load double, ptr %2594, align 8, !tbaa !11
  %2596 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2597 = load double, ptr %2596, align 8, !tbaa !11
  %2598 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2599 = load double, ptr %2598, align 8, !tbaa !14
  %2600 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2601 = load double, ptr %2600, align 8, !tbaa !14
  %2602 = fmul double %2599, %2601
  %2603 = fneg double %2602
  %2604 = call double @llvm.fmuladd.f64(double %2595, double %2597, double %2603)
  %2605 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  store double %2604, ptr %2605, align 8, !tbaa !11
  %2606 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 0
  %2607 = load double, ptr %2606, align 8, !tbaa !11
  %2608 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %2609 = load double, ptr %2608, align 8, !tbaa !14
  %2610 = getelementptr inbounds %struct.doublecomplex, ptr %82, i32 0, i32 1
  %2611 = load double, ptr %2610, align 8, !tbaa !14
  %2612 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %2613 = load double, ptr %2612, align 8, !tbaa !11
  %2614 = fmul double %2611, %2613
  %2615 = call double @llvm.fmuladd.f64(double %2607, double %2609, double %2614)
  %2616 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  store double %2615, ptr %2616, align 8, !tbaa !14
  %2617 = load ptr, ptr %25, align 8, !tbaa !5
  %2618 = load i64, ptr %35, align 8, !tbaa !9
  %2619 = getelementptr inbounds %struct.doublecomplex, ptr %2617, i64 %2618
  %2620 = getelementptr inbounds %struct.doublecomplex, ptr %2619, i32 0, i32 0
  %2621 = load double, ptr %2620, align 8, !tbaa !11
  %2622 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2623 = load double, ptr %2622, align 8, !tbaa !11
  %2624 = fsub double %2621, %2623
  %2625 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2624, ptr %2625, align 8, !tbaa !11
  %2626 = load ptr, ptr %25, align 8, !tbaa !5
  %2627 = load i64, ptr %35, align 8, !tbaa !9
  %2628 = getelementptr inbounds %struct.doublecomplex, ptr %2626, i64 %2627
  %2629 = getelementptr inbounds %struct.doublecomplex, ptr %2628, i32 0, i32 1
  %2630 = load double, ptr %2629, align 8, !tbaa !14
  %2631 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2632 = load double, ptr %2631, align 8, !tbaa !14
  %2633 = fsub double %2630, %2632
  %2634 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2633, ptr %2634, align 8, !tbaa !14
  %2635 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2636 = load double, ptr %2635, align 8, !tbaa !11
  %2637 = load ptr, ptr %25, align 8, !tbaa !5
  %2638 = load i64, ptr %34, align 8, !tbaa !9
  %2639 = getelementptr inbounds %struct.doublecomplex, ptr %2637, i64 %2638
  %2640 = getelementptr inbounds %struct.doublecomplex, ptr %2639, i32 0, i32 0
  store double %2636, ptr %2640, align 8, !tbaa !11
  %2641 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2642 = load double, ptr %2641, align 8, !tbaa !14
  %2643 = load ptr, ptr %25, align 8, !tbaa !5
  %2644 = load i64, ptr %34, align 8, !tbaa !9
  %2645 = getelementptr inbounds %struct.doublecomplex, ptr %2643, i64 %2644
  %2646 = getelementptr inbounds %struct.doublecomplex, ptr %2645, i32 0, i32 1
  store double %2642, ptr %2646, align 8, !tbaa !14
  br label %2647

2647:                                             ; preds = %2461
  %2648 = load i64, ptr %50, align 8, !tbaa !9
  %2649 = add nsw i64 %2648, 1
  store i64 %2649, ptr %50, align 8, !tbaa !9
  br label %2457, !llvm.loop !23

2650:                                             ; preds = %2457
  br label %2651

2651:                                             ; preds = %2650, %2448
  %2652 = load i64, ptr %51, align 8, !tbaa !9
  %2653 = load i64, ptr %53, align 8, !tbaa !9
  %2654 = icmp eq i64 %2652, %2653
  br i1 %2654, label %2655, label %2877

2655:                                             ; preds = %2651
  %2656 = load i64, ptr %53, align 8, !tbaa !9
  %2657 = load i64, ptr %52, align 8, !tbaa !9
  %2658 = icmp sgt i64 %2656, %2657
  br i1 %2658, label %2659, label %2877

2659:                                             ; preds = %2655
  %2660 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2661 = load double, ptr %2660, align 8, !tbaa !11
  %2662 = fsub double 1.000000e+00, %2661
  %2663 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2662, ptr %2663, align 8, !tbaa !11
  %2664 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2665 = load double, ptr %2664, align 8, !tbaa !14
  %2666 = fsub double 0.000000e+00, %2665
  %2667 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2666, ptr %2667, align 8, !tbaa !14
  %2668 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2669 = load double, ptr %2668, align 8, !tbaa !11
  %2670 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  store double %2669, ptr %2670, align 8, !tbaa !11
  %2671 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2672 = load double, ptr %2671, align 8, !tbaa !14
  %2673 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  store double %2672, ptr %2673, align 8, !tbaa !14
  %2674 = call double @z_abs(ptr noundef %84)
  store double %2674, ptr %36, align 8, !tbaa !17
  %2675 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  %2676 = load double, ptr %2675, align 8, !tbaa !11
  %2677 = load double, ptr %36, align 8, !tbaa !17
  %2678 = fdiv double %2676, %2677
  %2679 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2678, ptr %2679, align 8, !tbaa !11
  %2680 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  %2681 = load double, ptr %2680, align 8, !tbaa !14
  %2682 = load double, ptr %36, align 8, !tbaa !17
  %2683 = fdiv double %2681, %2682
  %2684 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2683, ptr %2684, align 8, !tbaa !14
  %2685 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2686 = load double, ptr %2685, align 8, !tbaa !11
  %2687 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  store double %2686, ptr %2687, align 8, !tbaa !11
  %2688 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2689 = load double, ptr %2688, align 8, !tbaa !14
  %2690 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  store double %2689, ptr %2690, align 8, !tbaa !14
  %2691 = load i64, ptr %53, align 8, !tbaa !9
  %2692 = add nsw i64 %2691, 1
  %2693 = load i64, ptr %53, align 8, !tbaa !9
  %2694 = load i64, ptr %28, align 8, !tbaa !9
  %2695 = mul nsw i64 %2693, %2694
  %2696 = add nsw i64 %2692, %2695
  store i64 %2696, ptr %33, align 8, !tbaa !9
  %2697 = load i64, ptr %53, align 8, !tbaa !9
  %2698 = add nsw i64 %2697, 1
  %2699 = load i64, ptr %53, align 8, !tbaa !9
  %2700 = load i64, ptr %28, align 8, !tbaa !9
  %2701 = mul nsw i64 %2699, %2700
  %2702 = add nsw i64 %2698, %2701
  store i64 %2702, ptr %34, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %43, ptr noundef %84)
  %2703 = load ptr, ptr %20, align 8, !tbaa !5
  %2704 = load i64, ptr %34, align 8, !tbaa !9
  %2705 = getelementptr inbounds %struct.doublecomplex, ptr %2703, i64 %2704
  %2706 = getelementptr inbounds %struct.doublecomplex, ptr %2705, i32 0, i32 0
  %2707 = load double, ptr %2706, align 8, !tbaa !11
  %2708 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2709 = load double, ptr %2708, align 8, !tbaa !11
  %2710 = load ptr, ptr %20, align 8, !tbaa !5
  %2711 = load i64, ptr %34, align 8, !tbaa !9
  %2712 = getelementptr inbounds %struct.doublecomplex, ptr %2710, i64 %2711
  %2713 = getelementptr inbounds %struct.doublecomplex, ptr %2712, i32 0, i32 1
  %2714 = load double, ptr %2713, align 8, !tbaa !14
  %2715 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2716 = load double, ptr %2715, align 8, !tbaa !14
  %2717 = fmul double %2714, %2716
  %2718 = fneg double %2717
  %2719 = call double @llvm.fmuladd.f64(double %2707, double %2709, double %2718)
  %2720 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2719, ptr %2720, align 8, !tbaa !11
  %2721 = load ptr, ptr %20, align 8, !tbaa !5
  %2722 = load i64, ptr %34, align 8, !tbaa !9
  %2723 = getelementptr inbounds %struct.doublecomplex, ptr %2721, i64 %2722
  %2724 = getelementptr inbounds %struct.doublecomplex, ptr %2723, i32 0, i32 0
  %2725 = load double, ptr %2724, align 8, !tbaa !11
  %2726 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 1
  %2727 = load double, ptr %2726, align 8, !tbaa !14
  %2728 = load ptr, ptr %20, align 8, !tbaa !5
  %2729 = load i64, ptr %34, align 8, !tbaa !9
  %2730 = getelementptr inbounds %struct.doublecomplex, ptr %2728, i64 %2729
  %2731 = getelementptr inbounds %struct.doublecomplex, ptr %2730, i32 0, i32 1
  %2732 = load double, ptr %2731, align 8, !tbaa !14
  %2733 = getelementptr inbounds %struct.doublecomplex, ptr %43, i32 0, i32 0
  %2734 = load double, ptr %2733, align 8, !tbaa !11
  %2735 = fmul double %2732, %2734
  %2736 = call double @llvm.fmuladd.f64(double %2725, double %2727, double %2735)
  %2737 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2736, ptr %2737, align 8, !tbaa !14
  %2738 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2739 = load double, ptr %2738, align 8, !tbaa !11
  %2740 = load ptr, ptr %20, align 8, !tbaa !5
  %2741 = load i64, ptr %33, align 8, !tbaa !9
  %2742 = getelementptr inbounds %struct.doublecomplex, ptr %2740, i64 %2741
  %2743 = getelementptr inbounds %struct.doublecomplex, ptr %2742, i32 0, i32 0
  store double %2739, ptr %2743, align 8, !tbaa !11
  %2744 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2745 = load double, ptr %2744, align 8, !tbaa !14
  %2746 = load ptr, ptr %20, align 8, !tbaa !5
  %2747 = load i64, ptr %33, align 8, !tbaa !9
  %2748 = getelementptr inbounds %struct.doublecomplex, ptr %2746, i64 %2747
  %2749 = getelementptr inbounds %struct.doublecomplex, ptr %2748, i32 0, i32 1
  store double %2745, ptr %2749, align 8, !tbaa !14
  %2750 = load i64, ptr %53, align 8, !tbaa !9
  %2751 = add nsw i64 %2750, 2
  %2752 = load i64, ptr %49, align 8, !tbaa !9
  %2753 = icmp sle i64 %2751, %2752
  br i1 %2753, label %2754, label %2816

2754:                                             ; preds = %2659
  %2755 = load i64, ptr %53, align 8, !tbaa !9
  %2756 = add nsw i64 %2755, 2
  %2757 = load i64, ptr %53, align 8, !tbaa !9
  %2758 = add nsw i64 %2757, 1
  %2759 = load i64, ptr %28, align 8, !tbaa !9
  %2760 = mul nsw i64 %2758, %2759
  %2761 = add nsw i64 %2756, %2760
  store i64 %2761, ptr %33, align 8, !tbaa !9
  %2762 = load i64, ptr %53, align 8, !tbaa !9
  %2763 = add nsw i64 %2762, 2
  %2764 = load i64, ptr %53, align 8, !tbaa !9
  %2765 = add nsw i64 %2764, 1
  %2766 = load i64, ptr %28, align 8, !tbaa !9
  %2767 = mul nsw i64 %2765, %2766
  %2768 = add nsw i64 %2763, %2767
  store i64 %2768, ptr %34, align 8, !tbaa !9
  %2769 = load ptr, ptr %20, align 8, !tbaa !5
  %2770 = load i64, ptr %34, align 8, !tbaa !9
  %2771 = getelementptr inbounds %struct.doublecomplex, ptr %2769, i64 %2770
  %2772 = getelementptr inbounds %struct.doublecomplex, ptr %2771, i32 0, i32 0
  %2773 = load double, ptr %2772, align 8, !tbaa !11
  %2774 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  %2775 = load double, ptr %2774, align 8, !tbaa !11
  %2776 = load ptr, ptr %20, align 8, !tbaa !5
  %2777 = load i64, ptr %34, align 8, !tbaa !9
  %2778 = getelementptr inbounds %struct.doublecomplex, ptr %2776, i64 %2777
  %2779 = getelementptr inbounds %struct.doublecomplex, ptr %2778, i32 0, i32 1
  %2780 = load double, ptr %2779, align 8, !tbaa !14
  %2781 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  %2782 = load double, ptr %2781, align 8, !tbaa !14
  %2783 = fmul double %2780, %2782
  %2784 = fneg double %2783
  %2785 = call double @llvm.fmuladd.f64(double %2773, double %2775, double %2784)
  %2786 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2785, ptr %2786, align 8, !tbaa !11
  %2787 = load ptr, ptr %20, align 8, !tbaa !5
  %2788 = load i64, ptr %34, align 8, !tbaa !9
  %2789 = getelementptr inbounds %struct.doublecomplex, ptr %2787, i64 %2788
  %2790 = getelementptr inbounds %struct.doublecomplex, ptr %2789, i32 0, i32 0
  %2791 = load double, ptr %2790, align 8, !tbaa !11
  %2792 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  %2793 = load double, ptr %2792, align 8, !tbaa !14
  %2794 = load ptr, ptr %20, align 8, !tbaa !5
  %2795 = load i64, ptr %34, align 8, !tbaa !9
  %2796 = getelementptr inbounds %struct.doublecomplex, ptr %2794, i64 %2795
  %2797 = getelementptr inbounds %struct.doublecomplex, ptr %2796, i32 0, i32 1
  %2798 = load double, ptr %2797, align 8, !tbaa !14
  %2799 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  %2800 = load double, ptr %2799, align 8, !tbaa !11
  %2801 = fmul double %2798, %2800
  %2802 = call double @llvm.fmuladd.f64(double %2791, double %2793, double %2801)
  %2803 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2802, ptr %2803, align 8, !tbaa !14
  %2804 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2805 = load double, ptr %2804, align 8, !tbaa !11
  %2806 = load ptr, ptr %20, align 8, !tbaa !5
  %2807 = load i64, ptr %33, align 8, !tbaa !9
  %2808 = getelementptr inbounds %struct.doublecomplex, ptr %2806, i64 %2807
  %2809 = getelementptr inbounds %struct.doublecomplex, ptr %2808, i32 0, i32 0
  store double %2805, ptr %2809, align 8, !tbaa !11
  %2810 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2811 = load double, ptr %2810, align 8, !tbaa !14
  %2812 = load ptr, ptr %20, align 8, !tbaa !5
  %2813 = load i64, ptr %33, align 8, !tbaa !9
  %2814 = getelementptr inbounds %struct.doublecomplex, ptr %2812, i64 %2813
  %2815 = getelementptr inbounds %struct.doublecomplex, ptr %2814, i32 0, i32 1
  store double %2811, ptr %2815, align 8, !tbaa !14
  br label %2816

2816:                                             ; preds = %2754, %2659
  %2817 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %2817, ptr %33, align 8, !tbaa !9
  %2818 = load i64, ptr %53, align 8, !tbaa !9
  store i64 %2818, ptr %50, align 8, !tbaa !9
  br label %2819

2819:                                             ; preds = %2873, %2816
  %2820 = load i64, ptr %50, align 8, !tbaa !9
  %2821 = load i64, ptr %33, align 8, !tbaa !9
  %2822 = icmp sle i64 %2820, %2821
  br i1 %2822, label %2823, label %2876

2823:                                             ; preds = %2819
  %2824 = load i64, ptr %50, align 8, !tbaa !9
  %2825 = load i64, ptr %53, align 8, !tbaa !9
  %2826 = add nsw i64 %2825, 1
  %2827 = icmp ne i64 %2824, %2826
  br i1 %2827, label %2828, label %2872

2828:                                             ; preds = %2823
  %2829 = load i64, ptr %61, align 8, !tbaa !9
  %2830 = load i64, ptr %50, align 8, !tbaa !9
  %2831 = icmp sgt i64 %2829, %2830
  br i1 %2831, label %2832, label %2846

2832:                                             ; preds = %2828
  %2833 = load i64, ptr %61, align 8, !tbaa !9
  %2834 = load i64, ptr %50, align 8, !tbaa !9
  %2835 = sub nsw i64 %2833, %2834
  store i64 %2835, ptr %34, align 8, !tbaa !9
  %2836 = load ptr, ptr %20, align 8, !tbaa !5
  %2837 = load i64, ptr %50, align 8, !tbaa !9
  %2838 = load i64, ptr %50, align 8, !tbaa !9
  %2839 = add nsw i64 %2838, 1
  %2840 = load i64, ptr %28, align 8, !tbaa !9
  %2841 = mul nsw i64 %2839, %2840
  %2842 = add nsw i64 %2837, %2841
  %2843 = getelementptr inbounds %struct.doublecomplex, ptr %2836, i64 %2842
  %2844 = load ptr, ptr %21, align 8, !tbaa !5
  %2845 = call i32 @f2c_zscal(ptr noundef %34, ptr noundef %84, ptr noundef %2843, ptr noundef %2844)
  br label %2846

2846:                                             ; preds = %2832, %2828
  %2847 = load i64, ptr %50, align 8, !tbaa !9
  %2848 = load i64, ptr %60, align 8, !tbaa !9
  %2849 = sub nsw i64 %2847, %2848
  store i64 %2849, ptr %34, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %42, ptr noundef %84)
  %2850 = load ptr, ptr %20, align 8, !tbaa !5
  %2851 = load i64, ptr %60, align 8, !tbaa !9
  %2852 = load i64, ptr %50, align 8, !tbaa !9
  %2853 = load i64, ptr %28, align 8, !tbaa !9
  %2854 = mul nsw i64 %2852, %2853
  %2855 = add nsw i64 %2851, %2854
  %2856 = getelementptr inbounds %struct.doublecomplex, ptr %2850, i64 %2855
  %2857 = call i32 @f2c_zscal(ptr noundef %34, ptr noundef %42, ptr noundef %2856, ptr noundef @c__1)
  %2858 = load ptr, ptr %16, align 8, !tbaa !5
  %2859 = load i64, ptr %2858, align 8, !tbaa !9
  %2860 = icmp ne i64 %2859, 0
  br i1 %2860, label %2861, label %2871

2861:                                             ; preds = %2846
  call void @d_cnjg(ptr noundef %42, ptr noundef %84)
  %2862 = load ptr, ptr %25, align 8, !tbaa !5
  %2863 = load ptr, ptr %23, align 8, !tbaa !5
  %2864 = load i64, ptr %2863, align 8, !tbaa !9
  %2865 = load i64, ptr %50, align 8, !tbaa !9
  %2866 = load i64, ptr %30, align 8, !tbaa !9
  %2867 = mul nsw i64 %2865, %2866
  %2868 = add nsw i64 %2864, %2867
  %2869 = getelementptr inbounds %struct.doublecomplex, ptr %2862, i64 %2868
  %2870 = call i32 @f2c_zscal(ptr noundef %75, ptr noundef %42, ptr noundef %2869, ptr noundef @c__1)
  br label %2871

2871:                                             ; preds = %2861, %2846
  br label %2872

2872:                                             ; preds = %2871, %2823
  br label %2873

2873:                                             ; preds = %2872
  %2874 = load i64, ptr %50, align 8, !tbaa !9
  %2875 = add nsw i64 %2874, 1
  store i64 %2875, ptr %50, align 8, !tbaa !9
  br label %2819, !llvm.loop !24

2876:                                             ; preds = %2819
  br label %2877

2877:                                             ; preds = %2876, %2655, %2651
  br label %2878

2878:                                             ; preds = %2877
  %2879 = load i64, ptr %51, align 8, !tbaa !9
  %2880 = add nsw i64 %2879, 1
  store i64 %2880, ptr %51, align 8, !tbaa !9
  br label %1951, !llvm.loop !25

2881:                                             ; preds = %1951
  %2882 = load i64, ptr %49, align 8, !tbaa !9
  %2883 = load i64, ptr %49, align 8, !tbaa !9
  %2884 = sub nsw i64 %2883, 1
  %2885 = load i64, ptr %28, align 8, !tbaa !9
  %2886 = mul nsw i64 %2884, %2885
  %2887 = add nsw i64 %2882, %2886
  store i64 %2887, ptr %32, align 8, !tbaa !9
  %2888 = load ptr, ptr %20, align 8, !tbaa !5
  %2889 = load i64, ptr %32, align 8, !tbaa !9
  %2890 = getelementptr inbounds %struct.doublecomplex, ptr %2888, i64 %2889
  %2891 = getelementptr inbounds %struct.doublecomplex, ptr %2890, i32 0, i32 0
  %2892 = load double, ptr %2891, align 8, !tbaa !11
  %2893 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  store double %2892, ptr %2893, align 8, !tbaa !11
  %2894 = load ptr, ptr %20, align 8, !tbaa !5
  %2895 = load i64, ptr %32, align 8, !tbaa !9
  %2896 = getelementptr inbounds %struct.doublecomplex, ptr %2894, i64 %2895
  %2897 = getelementptr inbounds %struct.doublecomplex, ptr %2896, i32 0, i32 1
  %2898 = load double, ptr %2897, align 8, !tbaa !14
  %2899 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  store double %2898, ptr %2899, align 8, !tbaa !14
  %2900 = call double @d_imag(ptr noundef %84)
  %2901 = fcmp une double %2900, 0.000000e+00
  br i1 %2901, label %2902, label %2978

2902:                                             ; preds = %2881
  %2903 = call double @z_abs(ptr noundef %84)
  store double %2903, ptr %85, align 8, !tbaa !17
  %2904 = load i64, ptr %49, align 8, !tbaa !9
  %2905 = load i64, ptr %49, align 8, !tbaa !9
  %2906 = sub nsw i64 %2905, 1
  %2907 = load i64, ptr %28, align 8, !tbaa !9
  %2908 = mul nsw i64 %2906, %2907
  %2909 = add nsw i64 %2904, %2908
  store i64 %2909, ptr %32, align 8, !tbaa !9
  %2910 = load double, ptr %85, align 8, !tbaa !17
  %2911 = load ptr, ptr %20, align 8, !tbaa !5
  %2912 = load i64, ptr %32, align 8, !tbaa !9
  %2913 = getelementptr inbounds %struct.doublecomplex, ptr %2911, i64 %2912
  %2914 = getelementptr inbounds %struct.doublecomplex, ptr %2913, i32 0, i32 0
  store double %2910, ptr %2914, align 8, !tbaa !11
  %2915 = load ptr, ptr %20, align 8, !tbaa !5
  %2916 = load i64, ptr %32, align 8, !tbaa !9
  %2917 = getelementptr inbounds %struct.doublecomplex, ptr %2915, i64 %2916
  %2918 = getelementptr inbounds %struct.doublecomplex, ptr %2917, i32 0, i32 1
  store double 0.000000e+00, ptr %2918, align 8, !tbaa !14
  %2919 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  %2920 = load double, ptr %2919, align 8, !tbaa !11
  %2921 = load double, ptr %85, align 8, !tbaa !17
  %2922 = fdiv double %2920, %2921
  %2923 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2922, ptr %2923, align 8, !tbaa !11
  %2924 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  %2925 = load double, ptr %2924, align 8, !tbaa !14
  %2926 = load double, ptr %85, align 8, !tbaa !17
  %2927 = fdiv double %2925, %2926
  %2928 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2927, ptr %2928, align 8, !tbaa !14
  %2929 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2930 = load double, ptr %2929, align 8, !tbaa !11
  %2931 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 0
  store double %2930, ptr %2931, align 8, !tbaa !11
  %2932 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2933 = load double, ptr %2932, align 8, !tbaa !14
  %2934 = getelementptr inbounds %struct.doublecomplex, ptr %84, i32 0, i32 1
  store double %2933, ptr %2934, align 8, !tbaa !14
  %2935 = load i64, ptr %61, align 8, !tbaa !9
  %2936 = load i64, ptr %49, align 8, !tbaa !9
  %2937 = icmp sgt i64 %2935, %2936
  br i1 %2937, label %2938, label %2952

2938:                                             ; preds = %2902
  %2939 = load i64, ptr %61, align 8, !tbaa !9
  %2940 = load i64, ptr %49, align 8, !tbaa !9
  %2941 = sub nsw i64 %2939, %2940
  store i64 %2941, ptr %32, align 8, !tbaa !9
  call void @d_cnjg(ptr noundef %42, ptr noundef %84)
  %2942 = load ptr, ptr %20, align 8, !tbaa !5
  %2943 = load i64, ptr %49, align 8, !tbaa !9
  %2944 = load i64, ptr %49, align 8, !tbaa !9
  %2945 = add nsw i64 %2944, 1
  %2946 = load i64, ptr %28, align 8, !tbaa !9
  %2947 = mul nsw i64 %2945, %2946
  %2948 = add nsw i64 %2943, %2947
  %2949 = getelementptr inbounds %struct.doublecomplex, ptr %2942, i64 %2948
  %2950 = load ptr, ptr %21, align 8, !tbaa !5
  %2951 = call i32 @f2c_zscal(ptr noundef %32, ptr noundef %42, ptr noundef %2949, ptr noundef %2950)
  br label %2952

2952:                                             ; preds = %2938, %2902
  %2953 = load i64, ptr %49, align 8, !tbaa !9
  %2954 = load i64, ptr %60, align 8, !tbaa !9
  %2955 = sub nsw i64 %2953, %2954
  store i64 %2955, ptr %32, align 8, !tbaa !9
  %2956 = load ptr, ptr %20, align 8, !tbaa !5
  %2957 = load i64, ptr %60, align 8, !tbaa !9
  %2958 = load i64, ptr %49, align 8, !tbaa !9
  %2959 = load i64, ptr %28, align 8, !tbaa !9
  %2960 = mul nsw i64 %2958, %2959
  %2961 = add nsw i64 %2957, %2960
  %2962 = getelementptr inbounds %struct.doublecomplex, ptr %2956, i64 %2961
  %2963 = call i32 @f2c_zscal(ptr noundef %32, ptr noundef %84, ptr noundef %2962, ptr noundef @c__1)
  %2964 = load ptr, ptr %16, align 8, !tbaa !5
  %2965 = load i64, ptr %2964, align 8, !tbaa !9
  %2966 = icmp ne i64 %2965, 0
  br i1 %2966, label %2967, label %2977

2967:                                             ; preds = %2952
  %2968 = load ptr, ptr %25, align 8, !tbaa !5
  %2969 = load ptr, ptr %23, align 8, !tbaa !5
  %2970 = load i64, ptr %2969, align 8, !tbaa !9
  %2971 = load i64, ptr %49, align 8, !tbaa !9
  %2972 = load i64, ptr %30, align 8, !tbaa !9
  %2973 = mul nsw i64 %2971, %2972
  %2974 = add nsw i64 %2970, %2973
  %2975 = getelementptr inbounds %struct.doublecomplex, ptr %2968, i64 %2974
  %2976 = call i32 @f2c_zscal(ptr noundef %75, ptr noundef %84, ptr noundef %2975, ptr noundef @c__1)
  br label %2977

2977:                                             ; preds = %2967, %2952
  br label %2978

2978:                                             ; preds = %2977, %2881
  br label %2979

2979:                                             ; preds = %2978
  %2980 = load i64, ptr %80, align 8, !tbaa !9
  %2981 = add nsw i64 %2980, 1
  store i64 %2981, ptr %80, align 8, !tbaa !9
  br label %457, !llvm.loop !26

2982:                                             ; preds = %457
  %2983 = load i64, ptr %49, align 8, !tbaa !9
  %2984 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 %2983, ptr %2984, align 8, !tbaa !9
  store i32 0, ptr %14, align 4
  store i32 1, ptr %89, align 4
  br label %3013

2985:                                             ; preds = %1131
  %2986 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %2986, ptr %32, align 8, !tbaa !9
  %2987 = load i64, ptr %49, align 8, !tbaa !9
  %2988 = load i64, ptr %49, align 8, !tbaa !9
  %2989 = load i64, ptr %28, align 8, !tbaa !9
  %2990 = mul nsw i64 %2988, %2989
  %2991 = add nsw i64 %2987, %2990
  store i64 %2991, ptr %33, align 8, !tbaa !9
  %2992 = load ptr, ptr %20, align 8, !tbaa !5
  %2993 = load i64, ptr %33, align 8, !tbaa !9
  %2994 = getelementptr inbounds %struct.doublecomplex, ptr %2992, i64 %2993
  %2995 = getelementptr inbounds %struct.doublecomplex, ptr %2994, i32 0, i32 0
  %2996 = load double, ptr %2995, align 8, !tbaa !11
  %2997 = load ptr, ptr %22, align 8, !tbaa !5
  %2998 = load i64, ptr %32, align 8, !tbaa !9
  %2999 = getelementptr inbounds %struct.doublecomplex, ptr %2997, i64 %2998
  %3000 = getelementptr inbounds %struct.doublecomplex, ptr %2999, i32 0, i32 0
  store double %2996, ptr %3000, align 8, !tbaa !11
  %3001 = load ptr, ptr %20, align 8, !tbaa !5
  %3002 = load i64, ptr %33, align 8, !tbaa !9
  %3003 = getelementptr inbounds %struct.doublecomplex, ptr %3001, i64 %3002
  %3004 = getelementptr inbounds %struct.doublecomplex, ptr %3003, i32 0, i32 1
  %3005 = load double, ptr %3004, align 8, !tbaa !14
  %3006 = load ptr, ptr %22, align 8, !tbaa !5
  %3007 = load i64, ptr %32, align 8, !tbaa !9
  %3008 = getelementptr inbounds %struct.doublecomplex, ptr %3006, i64 %3007
  %3009 = getelementptr inbounds %struct.doublecomplex, ptr %3008, i32 0, i32 1
  store double %3005, ptr %3009, align 8, !tbaa !14
  %3010 = load i64, ptr %52, align 8, !tbaa !9
  %3011 = sub nsw i64 %3010, 1
  store i64 %3011, ptr %49, align 8, !tbaa !9
  br label %448

3012:                                             ; preds = %453
  store i32 0, ptr %14, align 4
  store i32 1, ptr %89, align 4
  br label %3013

3013:                                             ; preds = %3012, %2982, %119, %112
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  %3014 = load i32, ptr %14, align 4
  ret i32 %3014
}

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

declare double @d_imag(ptr noundef) #2

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

declare double @z_abs(ptr noundef) #2

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!13, !13, i64 0}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}


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

%struct.doublecomplex = type { double, double }

@c__1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@c__2 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef writeonly %7, ptr nocapture noundef readonly %8, ptr nocapture noundef readonly %9, ptr noundef %10, ptr nocapture noundef readonly %11, ptr nocapture noundef writeonly %12) local_unnamed_addr #0 {
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca %struct.doublecomplex, align 16
  %18 = alloca %struct.doublecomplex, align 16
  %19 = alloca %struct.doublecomplex, align 16
  %20 = alloca %struct.doublecomplex, align 16
  %21 = alloca %struct.doublecomplex, align 16
  %22 = alloca %struct.doublecomplex, align 16
  %23 = alloca %struct.doublecomplex, align 16
  %24 = alloca %struct.doublecomplex, align 16
  %25 = alloca [2 x %struct.doublecomplex], align 16
  %26 = alloca %struct.doublecomplex, align 16
  %27 = alloca %struct.doublecomplex, align 16
  %28 = alloca %struct.doublecomplex, align 16
  %29 = alloca %struct.doublecomplex, align 16
  %30 = alloca %struct.doublecomplex, align 16
  %31 = alloca %struct.doublecomplex, align 16
  %32 = alloca %struct.doublecomplex, align 16
  %33 = alloca i64, align 8
  %34 = alloca %struct.doublecomplex, align 16
  %35 = alloca %struct.doublecomplex, align 16
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  %38 = load i64, ptr %6, align 8, !tbaa !5
  %39 = xor i64 %38, -1
  %40 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %39
  %41 = getelementptr inbounds i8, ptr %7, i64 -16
  %42 = load i64, ptr %11, align 8, !tbaa !5
  %43 = xor i64 %42, -1
  %44 = getelementptr inbounds %struct.doublecomplex, ptr %10, i64 %43
  store i64 0, ptr %12, align 8, !tbaa !5
  %45 = load i64, ptr %2, align 8, !tbaa !5
  %46 = icmp eq i64 %45, 0
  br i1 %46, label %.loopexit875, label %47

47:                                               ; preds = %13
  %48 = load i64, ptr %3, align 8, !tbaa !5
  %49 = load i64, ptr %4, align 8, !tbaa !5
  %50 = icmp eq i64 %48, %49
  br i1 %50, label %51, label %57

51:                                               ; preds = %47
  %52 = add i64 %38, 1
  %53 = mul i64 %48, %52
  %54 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %53
  %55 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %48
  %56 = load <2 x double>, ptr %54, align 8, !tbaa !9
  store <2 x double> %56, ptr %55, align 8, !tbaa !9
  br label %.loopexit875

57:                                               ; preds = %47
  %58 = add nsw i64 %49, -3
  %.not881 = icmp sgt i64 %48, %58
  %.pre950 = add i64 %49, -2
  br i1 %.not881, label %._crit_edge949, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %57
  %59 = sub i64 %49, %48
  %60 = add i64 %49, -3
  %xtraiter = and i64 %59, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader
  %61 = mul nsw i64 %48, %38
  %62 = getelementptr %struct.doublecomplex, ptr %40, i64 %48
  %63 = getelementptr i8, ptr %62, i64 32
  %64 = getelementptr %struct.doublecomplex, ptr %63, i64 %61
  %65 = add nsw i64 %48, 3
  %66 = add nsw i64 %65, %61
  %67 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %66
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %64, i8 0, i64 16, i1 false)
  %68 = add i64 %48, 1
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %67, i8 0, i64 16, i1 false)
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader
  %.lcssa993.unr = phi i64 [ poison, %.lr.ph.preheader ], [ %66, %.lr.ph.prol ]
  %.0828882.unr = phi i64 [ %48, %.lr.ph.preheader ], [ %68, %.lr.ph.prol ]
  %69 = icmp eq i64 %60, %48
  br i1 %69, label %._crit_edge, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.prol.loopexit
  %invariant.gep1004 = getelementptr i8, ptr %40, i64 32
  %invariant.gep1006 = getelementptr i8, ptr %40, i64 48
  %invariant.gep1008 = getelementptr i8, ptr %40, i64 32
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0828882 = phi i64 [ %.0828882.unr, %.lr.ph.preheader.new ], [ %79, %.lr.ph ]
  %70 = mul nsw i64 %.0828882, %38
  %gep1005 = getelementptr %struct.doublecomplex, ptr %invariant.gep1004, i64 %.0828882
  %71 = getelementptr %struct.doublecomplex, ptr %gep1005, i64 %70
  %gep1007 = getelementptr %struct.doublecomplex, ptr %invariant.gep1006, i64 %.0828882
  %72 = getelementptr %struct.doublecomplex, ptr %gep1007, i64 %70
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %71, i8 0, i64 16, i1 false)
  %73 = add i64 %.0828882, 1
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %72, i8 0, i64 16, i1 false)
  %74 = mul nsw i64 %73, %38
  %gep1009 = getelementptr %struct.doublecomplex, ptr %invariant.gep1008, i64 %73
  %75 = getelementptr %struct.doublecomplex, ptr %gep1009, i64 %74
  %76 = add i64 %.0828882, 4
  %77 = add nsw i64 %76, %74
  %78 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %77
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %75, i8 0, i64 16, i1 false)
  %79 = add i64 %.0828882, 2
  %exitcond.not.1 = icmp eq i64 %79, %.pre950
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %78, i8 0, i64 16, i1 false)
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !11

._crit_edge:                                      ; preds = %.lr.ph, %.lr.ph.prol.loopexit
  %.lcssa993 = phi i64 [ %.lcssa993.unr, %.lr.ph.prol.loopexit ], [ %77, %.lr.ph ]
  store i64 %.lcssa993, ptr %15, align 8, !tbaa !5
  br label %._crit_edge949

._crit_edge949:                                   ; preds = %57, %._crit_edge
  %.not845 = icmp sgt i64 %48, %.pre950
  br i1 %.not845, label %84, label %80

80:                                               ; preds = %._crit_edge949
  %81 = mul nsw i64 %.pre950, %38
  %82 = getelementptr %struct.doublecomplex, ptr %40, i64 %81
  %83 = getelementptr %struct.doublecomplex, ptr %82, i64 %49
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %83, i8 0, i64 16, i1 false)
  br label %84

84:                                               ; preds = %80, %._crit_edge949
  %85 = load i64, ptr %0, align 8, !tbaa !5
  %.not846 = icmp eq i64 %85, 0
  %spec.select869 = select i1 %.not846, ptr %4, ptr %2
  %.0817 = load i64, ptr %spec.select869, align 8, !tbaa !5
  store i64 %49, ptr %14, align 8, !tbaa !5
  %.not847.not884 = icmp slt i64 %48, %49
  br i1 %.not847.not884, label %.lr.ph888, label %._crit_edge889

.lr.ph888:                                        ; preds = %84
  %spec.select870 = select i1 %.not846, i64 %48, i64 1
  %86 = getelementptr %struct.doublecomplex, ptr %40, i64 %spec.select870
  br label %87

87:                                               ; preds = %.lr.ph888, %137
  %.0832.in885 = phi i64 [ %48, %.lr.ph888 ], [ %.0832886, %137 ]
  %.0832886 = add nsw i64 %.0832.in885, 1
  %88 = mul nsw i64 %.0832.in885, %38
  %89 = add nsw i64 %.0832886, %88
  %90 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %89
  %91 = call double @d_imag(ptr noundef %90) #6
  %92 = fcmp une double %91, 0.000000e+00
  br i1 %92, label %93, label %137

93:                                               ; preds = %87
  store i64 %89, ptr %15, align 8, !tbaa !5
  %94 = load double, ptr %90, align 8, !tbaa !13
  %95 = call double @d_imag(ptr noundef nonnull %90) #6
  %96 = insertelement <2 x double> poison, double %94, i64 0
  %97 = insertelement <2 x double> %96, double %95, i64 1
  %98 = fcmp oge <2 x double> %97, zeroinitializer
  %99 = fneg <2 x double> %97
  %100 = select <2 x i1> %98, <2 x double> %97, <2 x double> %99
  %shift = shufflevector <2 x double> %100, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %101 = fadd <2 x double> %100, %shift
  %102 = load i64, ptr %15, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %102
  %104 = load <2 x double>, ptr %103, align 8, !tbaa !9
  %105 = shufflevector <2 x double> %101, <2 x double> poison, <2 x i32> zeroinitializer
  %106 = fdiv <2 x double> %104, %105
  store <2 x double> %106, ptr %17, align 16, !tbaa !9
  store <2 x double> %106, ptr %32, align 16, !tbaa !9
  call void @d_cnjg(ptr noundef nonnull %18, ptr noundef nonnull %32) #6
  %107 = call double @z_abs(ptr noundef nonnull %32) #6
  %108 = load <2 x double>, ptr %18, align 16, !tbaa !9
  %109 = insertelement <2 x double> poison, double %107, i64 0
  %110 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> zeroinitializer
  %111 = fdiv <2 x double> %108, %110
  store <2 x double> %111, ptr %17, align 16, !tbaa !9
  store <2 x double> %111, ptr %32, align 16, !tbaa !9
  store i64 %89, ptr %15, align 8, !tbaa !5
  %112 = call double @z_abs(ptr noundef nonnull %90) #6
  %113 = load i64, ptr %15, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %113
  store double %112, ptr %114, align 8, !tbaa !13
  %115 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %113, i32 1
  store double 0.000000e+00, ptr %115, align 8, !tbaa !15
  %116 = sub i64 %.0817, %.0832.in885
  store i64 %116, ptr %15, align 8, !tbaa !5
  %117 = mul nsw i64 %.0832886, %38
  %118 = getelementptr %struct.doublecomplex, ptr %40, i64 %.0832886
  %119 = getelementptr %struct.doublecomplex, ptr %118, i64 %117
  %120 = call i32 @f2c_zscal(ptr noundef nonnull %15, ptr noundef nonnull %32, ptr noundef %119, ptr noundef nonnull %6) #6
  store i64 %.0817, ptr %16, align 8, !tbaa !5
  %121 = add nsw i64 %.0832.in885, 2
  %122 = call i64 @llvm.smin.i64(i64 %.0817, i64 %121)
  %reass.sub = sub i64 %122, %spec.select870
  %123 = add i64 %reass.sub, 1
  store i64 %123, ptr %15, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %32) #6
  %124 = getelementptr %struct.doublecomplex, ptr %86, i64 %117
  %125 = call i32 @f2c_zscal(ptr noundef nonnull %15, ptr noundef nonnull %17, ptr noundef %124, ptr noundef nonnull @c__1) #6
  %126 = load i64, ptr %1, align 8, !tbaa !5
  %.not867 = icmp eq i64 %126, 0
  br i1 %.not867, label %137, label %127

127:                                              ; preds = %93
  %128 = load i64, ptr %9, align 8, !tbaa !5
  %129 = load i64, ptr %8, align 8, !tbaa !5
  %130 = add i64 %128, 1
  %131 = sub i64 %130, %129
  store i64 %131, ptr %15, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %32) #6
  %132 = load i64, ptr %8, align 8, !tbaa !5
  %133 = mul nsw i64 %.0832886, %42
  %134 = getelementptr %struct.doublecomplex, ptr %44, i64 %132
  %135 = getelementptr %struct.doublecomplex, ptr %134, i64 %133
  %136 = call i32 @f2c_zscal(ptr noundef nonnull %15, ptr noundef nonnull %17, ptr noundef %135, ptr noundef nonnull @c__1) #6
  br label %137

137:                                              ; preds = %87, %127, %93
  %138 = load i64, ptr %14, align 8, !tbaa !5
  %.not847.not = icmp slt i64 %.0832886, %138
  br i1 %.not847.not, label %87, label %._crit_edge889.loopexit, !llvm.loop !16

._crit_edge889.loopexit:                          ; preds = %137
  %.pre = load i64, ptr %4, align 8, !tbaa !5
  %.pre945 = load i64, ptr %3, align 8, !tbaa !5
  br label %._crit_edge889

._crit_edge889:                                   ; preds = %._crit_edge889.loopexit, %84
  %139 = phi i64 [ %.pre945, %._crit_edge889.loopexit ], [ %48, %84 ]
  %140 = phi i64 [ %.pre, %._crit_edge889.loopexit ], [ %49, %84 ]
  %141 = add i64 %140, 1
  %142 = sub i64 %141, %139
  %143 = load i64, ptr %9, align 8, !tbaa !5
  %144 = load i64, ptr %8, align 8, !tbaa !5
  %145 = add i64 %143, 1
  %146 = sub i64 %145, %144
  store i64 %146, ptr %33, align 8, !tbaa !5
  %147 = call double @dlamch_(ptr noundef nonnull @.str) #6
  store double %147, ptr %36, align 8, !tbaa !9
  %148 = fdiv double 1.000000e+00, %147
  store double %148, ptr %37, align 8, !tbaa !9
  %149 = call i32 @dlabad_(ptr noundef nonnull %36, ptr noundef nonnull %37) #6
  %150 = call double @dlamch_(ptr noundef nonnull @.str.1) #6
  %151 = load double, ptr %36, align 8, !tbaa !9
  %152 = sitofp i64 %142 to double
  %153 = fdiv double %152, %150
  %154 = fmul double %151, %153
  %155 = load i64, ptr %0, align 8, !tbaa !5
  %.not848 = icmp eq i64 %155, 0
  br i1 %.not848, label %158, label %156

156:                                              ; preds = %._crit_edge889
  %157 = load i64, ptr %2, align 8, !tbaa !5
  br label %158

158:                                              ; preds = %156, %._crit_edge889
  %.0818 = phi i64 [ %157, %156 ], [ undef, %._crit_edge889 ]
  %159 = load i64, ptr %4, align 8, !tbaa !5
  %160 = load i64, ptr %3, align 8, !tbaa !5
  %161 = icmp slt i64 %159, %160
  br i1 %161, label %.loopexit875, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %158
  %162 = getelementptr inbounds i8, ptr %18, i64 8
  %163 = add i64 %38, 1
  %164 = getelementptr inbounds i8, ptr %19, i64 8
  %165 = getelementptr inbounds i8, ptr %24, i64 8
  %166 = getelementptr inbounds i8, ptr %25, i64 16
  %167 = getelementptr inbounds i8, ptr %25, i64 24
  %168 = getelementptr inbounds i8, ptr %28, i64 8
  %invariant.gep1010 = getelementptr i8, ptr %40, i64 16
  %invariant.gep1020 = getelementptr i8, ptr %40, i64 16
  %invariant.gep1018 = getelementptr i8, ptr %40, i64 16
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %832
  %169 = phi i64 [ %160, %.preheader.lr.ph ], [ %358, %832 ]
  %.1819931 = phi i64 [ %.0818, %.preheader.lr.ph ], [ %.2925, %832 ]
  %.1821930 = phi i64 [ 1, %.preheader.lr.ph ], [ %.2822924, %832 ]
  %.1833929 = phi i64 [ %159, %.preheader.lr.ph ], [ %835, %832 ]
  %170 = add nsw i64 %.1833929, -1
  %171 = mul nsw i64 %170, %38
  %172 = add nsw i64 %171, %.1833929
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %172
  %174 = mul i64 %.1833929, %163
  %175 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %174
  %176 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %174, i32 1
  %177 = mul nsw i64 %.1833929, %38
  %178 = add nsw i64 %177, %.1833929
  %179 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %178
  %180 = getelementptr %struct.doublecomplex, ptr %40, i64 %170
  %181 = getelementptr %struct.doublecomplex, ptr %180, i64 %177
  %182 = getelementptr %struct.doublecomplex, ptr %40, i64 %.1833929
  %183 = getelementptr %struct.doublecomplex, ptr %182, i64 %171
  %184 = add nsw i64 %171, %170
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %184
  %186 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %172, i32 1
  %187 = add nsw i64 %.1833929, 1
  %188 = mul nsw i64 %187, %38
  %189 = getelementptr %struct.doublecomplex, ptr %182, i64 %188
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %40, i64 %177
  %190 = mul nsw i64 %.1833929, %42
  %invariant.gep927 = getelementptr %struct.doublecomplex, ptr %44, i64 %190
  br label %191

191:                                              ; preds = %.preheader, %829
  %.0815926 = phi i64 [ 0, %.preheader ], [ %830, %829 ]
  %.2925 = phi i64 [ %.1819931, %.preheader ], [ %spec.select868, %829 ]
  %.2822924 = phi i64 [ %.1821930, %.preheader ], [ %spec.select, %829 ]
  %.0825923 = phi i64 [ %169, %.preheader ], [ %.0826.lcssa, %829 ]
  %192 = add nsw i64 %.0825923, 1
  store i64 %192, ptr %14, align 8, !tbaa !5
  %.not849890.not = icmp sgt i64 %.1833929, %.0825923
  br i1 %.not849890.not, label %.lr.ph893, label %._crit_edge894

.lr.ph893:                                        ; preds = %191, %356
  %.0826891 = phi i64 [ %193, %356 ], [ %.1833929, %191 ]
  %193 = add nsw i64 %.0826891, -1
  %194 = mul nsw i64 %193, %38
  %195 = add nsw i64 %194, %.0826891
  store i64 %195, ptr %15, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %195
  %197 = load double, ptr %196, align 8, !tbaa !13
  %198 = call double @d_imag(ptr noundef nonnull %196) #6
  %199 = insertelement <2 x double> poison, double %197, i64 0
  %200 = insertelement <2 x double> %199, double %198, i64 1
  %201 = fcmp oge <2 x double> %200, zeroinitializer
  %202 = fneg <2 x double> %200
  %203 = select <2 x i1> %201, <2 x double> %200, <2 x double> %202
  %shift976 = shufflevector <2 x double> %203, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %204 = fadd <2 x double> %203, %shift976
  %205 = extractelement <2 x double> %204, i64 0
  %206 = fcmp ugt double %205, %154
  br i1 %206, label %207, label %._crit_edge894

207:                                              ; preds = %.lr.ph893
  %208 = add nsw i64 %194, %193
  store i64 %208, ptr %15, align 8, !tbaa !5
  %209 = mul nsw i64 %.0826891, %38
  %210 = add nsw i64 %209, %.0826891
  store i64 %210, ptr %16, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %208
  %212 = load double, ptr %211, align 8, !tbaa !13
  %213 = call double @d_imag(ptr noundef nonnull %211) #6
  %214 = load i64, ptr %16, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %214
  %216 = load double, ptr %215, align 8, !tbaa !13
  %217 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %210
  %218 = call double @d_imag(ptr noundef %217) #6
  %219 = insertelement <2 x double> poison, double %212, i64 0
  %220 = insertelement <2 x double> %219, double %216, i64 1
  %221 = fcmp oge <2 x double> %220, zeroinitializer
  %222 = fneg <2 x double> %220
  %223 = select <2 x i1> %221, <2 x double> %220, <2 x double> %222
  %224 = insertelement <2 x double> poison, double %213, i64 0
  %225 = insertelement <2 x double> %224, double %218, i64 1
  %226 = fcmp oge <2 x double> %225, zeroinitializer
  %227 = fneg <2 x double> %225
  %228 = select <2 x i1> %226, <2 x double> %225, <2 x double> %227
  %229 = fadd <2 x double> %223, %228
  %shift977 = shufflevector <2 x double> %229, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %230 = fadd <2 x double> %229, %shift977
  %231 = extractelement <2 x double> %230, i64 0
  %232 = fcmp oeq double %231, 0.000000e+00
  br i1 %232, label %233, label %254

233:                                              ; preds = %207
  %234 = add nsw i64 %.0826891, -2
  %235 = load i64, ptr %3, align 8, !tbaa !5
  %.not850 = icmp slt i64 %234, %235
  br i1 %.not850, label %245, label %236

236:                                              ; preds = %233
  %237 = mul nsw i64 %234, %38
  %238 = getelementptr %struct.doublecomplex, ptr %40, i64 %237
  %239 = getelementptr %struct.doublecomplex, ptr %238, i64 %193
  %240 = load double, ptr %239, align 8, !tbaa !13
  %241 = fcmp oge double %240, 0.000000e+00
  %242 = fneg double %240
  %243 = select i1 %241, double %240, double %242
  %244 = fadd double %231, %243
  br label %245

245:                                              ; preds = %236, %233
  %.0814 = phi double [ %244, %236 ], [ %231, %233 ]
  %246 = load i64, ptr %4, align 8, !tbaa !5
  %.not851.not = icmp slt i64 %.0826891, %246
  br i1 %.not851.not, label %247, label %254

247:                                              ; preds = %245
  %gep1011 = getelementptr %struct.doublecomplex, ptr %invariant.gep1010, i64 %.0826891
  %248 = getelementptr %struct.doublecomplex, ptr %gep1011, i64 %209
  %249 = load double, ptr %248, align 8, !tbaa !13
  %250 = fcmp oge double %249, 0.000000e+00
  %251 = fneg double %249
  %252 = select i1 %250, double %249, double %251
  %253 = fadd double %.0814, %252
  br label %254

254:                                              ; preds = %245, %247, %207
  %.1 = phi double [ %253, %247 ], [ %.0814, %245 ], [ %231, %207 ]
  store i64 %195, ptr %15, align 8, !tbaa !5
  %255 = load double, ptr %196, align 8, !tbaa !13
  %256 = fcmp oge double %255, 0.000000e+00
  %257 = fneg double %255
  %258 = select i1 %256, double %255, double %257
  %259 = fmul double %150, %.1
  %260 = fcmp ugt double %258, %259
  br i1 %260, label %356, label %261

261:                                              ; preds = %254
  %262 = add nsw i64 %193, %209
  store i64 %262, ptr %16, align 8, !tbaa !5
  %263 = call double @d_imag(ptr noundef nonnull %196) #6
  %264 = load i64, ptr %16, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !13
  %267 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %262
  %268 = call double @d_imag(ptr noundef %267) #6
  store i64 %195, ptr %15, align 8, !tbaa !5
  store i64 %262, ptr %16, align 8, !tbaa !5
  %269 = load double, ptr %196, align 8, !tbaa !13
  %270 = call double @d_imag(ptr noundef nonnull %196) #6
  %271 = insertelement <2 x double> poison, double %269, i64 0
  %272 = insertelement <2 x double> %271, double %270, i64 1
  %273 = fcmp oge <2 x double> %272, zeroinitializer
  %274 = fneg <2 x double> %272
  %275 = select <2 x i1> %273, <2 x double> %272, <2 x double> %274
  %276 = load i64, ptr %16, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %276
  %278 = load double, ptr %277, align 8, !tbaa !13
  %279 = call double @d_imag(ptr noundef %267) #6
  %280 = insertelement <2 x double> poison, double %278, i64 0
  %281 = insertelement <2 x double> %280, double %279, i64 1
  %282 = fcmp oge <2 x double> %281, zeroinitializer
  %283 = fneg <2 x double> %281
  %284 = select <2 x i1> %282, <2 x double> %281, <2 x double> %283
  %285 = shufflevector <2 x double> %275, <2 x double> %284, <2 x i32> <i32 0, i32 2>
  %286 = shufflevector <2 x double> %275, <2 x double> %284, <2 x i32> <i32 1, i32 3>
  %287 = fadd <2 x double> %285, %286
  %288 = extractelement <2 x double> %287, i64 0
  %289 = extractelement <2 x double> %287, i64 1
  %290 = fcmp ole double %288, %289
  %291 = select i1 %290, double %288, double %289
  store i64 %208, ptr %15, align 8, !tbaa !5
  store i64 %210, ptr %16, align 8, !tbaa !5
  %292 = load <2 x double>, ptr %211, align 8, !tbaa !9
  %293 = load <2 x double>, ptr %217, align 8, !tbaa !9
  %294 = fsub <2 x double> %292, %293
  store <2 x double> %294, ptr %18, align 16, !tbaa !9
  store <2 x double> %294, ptr %17, align 16, !tbaa !9
  %295 = extractelement <2 x double> %293, i64 0
  %296 = fcmp oge double %295, 0.000000e+00
  %297 = fneg double %295
  %298 = select i1 %296, double %295, double %297
  %299 = call double @d_imag(ptr noundef nonnull %217) #6
  %300 = load double, ptr %17, align 16, !tbaa !13
  %301 = call double @d_imag(ptr noundef nonnull %17) #6
  %302 = insertelement <2 x double> poison, double %263, i64 0
  %303 = insertelement <2 x double> %302, double %299, i64 1
  %304 = fcmp oge <2 x double> %303, zeroinitializer
  %305 = fneg <2 x double> %303
  %306 = select <2 x i1> %304, <2 x double> %303, <2 x double> %305
  %307 = insertelement <2 x double> poison, double %258, i64 0
  %308 = insertelement <2 x double> %307, double %298, i64 1
  %309 = fadd <2 x double> %308, %306
  %310 = insertelement <2 x double> poison, double %266, i64 0
  %311 = insertelement <2 x double> %310, double %300, i64 1
  %312 = fcmp oge <2 x double> %311, zeroinitializer
  %313 = fneg <2 x double> %311
  %314 = select <2 x i1> %312, <2 x double> %311, <2 x double> %313
  %315 = insertelement <2 x double> poison, double %268, i64 0
  %316 = insertelement <2 x double> %315, double %301, i64 1
  %317 = fcmp oge <2 x double> %316, zeroinitializer
  %318 = fneg <2 x double> %316
  %319 = select <2 x i1> %317, <2 x double> %316, <2 x double> %318
  %320 = fadd <2 x double> %314, %319
  %321 = fcmp oge <2 x double> %309, %320
  %322 = select <2 x i1> %321, <2 x double> %309, <2 x double> %320
  store i64 %208, ptr %15, align 8, !tbaa !5
  store i64 %210, ptr %16, align 8, !tbaa !5
  %323 = load <2 x double>, ptr %211, align 8, !tbaa !9
  %324 = load <2 x double>, ptr %217, align 8, !tbaa !9
  %325 = fsub <2 x double> %323, %324
  store <2 x double> %325, ptr %18, align 16, !tbaa !9
  store <2 x double> %325, ptr %17, align 16, !tbaa !9
  %326 = extractelement <2 x double> %324, i64 0
  %327 = fcmp oge double %326, 0.000000e+00
  %328 = fneg double %326
  %329 = select i1 %327, double %326, double %328
  %330 = call double @d_imag(ptr noundef nonnull %217) #6
  %331 = fcmp oge double %330, 0.000000e+00
  %332 = fneg double %330
  %333 = select i1 %331, double %330, double %332
  %334 = fadd double %329, %333
  %335 = load <2 x double>, ptr %17, align 16
  %336 = call double @d_imag(ptr noundef nonnull %17) #6
  %337 = insertelement <2 x double> %335, double %336, i64 1
  %338 = fcmp oge <2 x double> %337, zeroinitializer
  %339 = fneg <2 x double> %337
  %340 = select <2 x i1> %338, <2 x double> %337, <2 x double> %339
  %shift978 = shufflevector <2 x double> %340, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %341 = fadd <2 x double> %340, %shift978
  %342 = extractelement <2 x double> %341, i64 0
  %343 = fcmp ole double %334, %342
  %344 = select i1 %343, double %334, double %342
  %345 = extractelement <2 x double> %322, i64 0
  %346 = extractelement <2 x double> %322, i64 1
  %347 = fadd double %345, %346
  %348 = fdiv double %346, %347
  %349 = fmul double %348, %344
  %350 = fmul double %150, %349
  %351 = fdiv double %345, %347
  %352 = fmul double %291, %351
  %353 = fcmp oge double %154, %350
  %354 = select i1 %353, double %154, double %350
  %355 = fcmp ugt double %352, %354
  br i1 %355, label %356, label %._crit_edge894

356:                                              ; preds = %254, %261
  %357 = load i64, ptr %14, align 8, !tbaa !5
  %.not849.not = icmp sgt i64 %.0826891, %357
  br i1 %.not849.not, label %.lr.ph893, label %._crit_edge894, !llvm.loop !17

._crit_edge894:                                   ; preds = %.lr.ph893, %261, %356, %191
  %.0826.lcssa = phi i64 [ %.1833929, %191 ], [ %193, %356 ], [ %.0826891, %261 ], [ %.0826891, %.lr.ph893 ]
  %358 = load i64, ptr %3, align 8, !tbaa !5
  %359 = icmp sgt i64 %.0826.lcssa, %358
  br i1 %359, label %360, label %365

360:                                              ; preds = %._crit_edge894
  %361 = add nsw i64 %.0826.lcssa, -1
  %362 = mul nsw i64 %361, %38
  %363 = getelementptr %struct.doublecomplex, ptr %40, i64 %362
  %364 = getelementptr %struct.doublecomplex, ptr %363, i64 %.0826.lcssa
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %364, i8 0, i64 16, i1 false)
  br label %365

365:                                              ; preds = %360, %._crit_edge894
  %.not852 = icmp slt i64 %.0826.lcssa, %.1833929
  br i1 %.not852, label %366, label %832

366:                                              ; preds = %365
  %367 = load i64, ptr %0, align 8, !tbaa !5
  %.not853 = icmp eq i64 %367, 0
  %spec.select = select i1 %.not853, i64 %.0826.lcssa, i64 %.2822924
  %spec.select868 = select i1 %.not853, i64 %.1833929, i64 %.2925
  switch i64 %.0815926, label %395 [
    i64 10, label %368
    i64 20, label %384
  ]

368:                                              ; preds = %366
  %369 = mul nsw i64 %.0826.lcssa, %38
  %gep1021 = getelementptr %struct.doublecomplex, ptr %invariant.gep1020, i64 %.0826.lcssa
  %370 = getelementptr %struct.doublecomplex, ptr %gep1021, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !13
  %372 = fcmp oge double %371, 0.000000e+00
  %373 = fneg double %371
  %374 = select i1 %372, double %371, double %373
  %375 = fmul double %374, 7.500000e-01
  %376 = add nsw i64 %369, %.0826.lcssa
  %377 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %376
  %378 = load double, ptr %377, align 8, !tbaa !13
  %379 = fadd double %378, %375
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %376, i32 1
  %381 = load double, ptr %380, align 8, !tbaa !15
  %382 = insertelement <2 x double> poison, double %379, i64 0
  %383 = insertelement <2 x double> %382, double %381, i64 1
  br label %482

384:                                              ; preds = %366
  %385 = load double, ptr %173, align 8, !tbaa !13
  %386 = fcmp oge double %385, 0.000000e+00
  %387 = fneg double %385
  %388 = select i1 %386, double %385, double %387
  %389 = fmul double %388, 7.500000e-01
  %390 = load double, ptr %175, align 8, !tbaa !13
  %391 = fadd double %390, %389
  %392 = load double, ptr %176, align 8, !tbaa !15
  %393 = insertelement <2 x double> poison, double %391, i64 0
  %394 = insertelement <2 x double> %393, double %392, i64 1
  br label %482

395:                                              ; preds = %366
  store i64 %178, ptr %14, align 8, !tbaa !5
  %396 = load <2 x double>, ptr %179, align 8, !tbaa !9
  call void @z_sqrt(ptr noundef nonnull %18, ptr noundef %181) #6
  call void @z_sqrt(ptr noundef nonnull %19, ptr noundef %183) #6
  %397 = load <2 x double>, ptr %18, align 16
  %398 = load double, ptr %162, align 8, !tbaa !15
  %399 = fneg double %398
  %400 = load <2 x double>, ptr %19, align 16, !tbaa !9
  %401 = insertelement <2 x double> poison, double %398, i64 0
  %402 = insertelement <2 x double> %401, double %399, i64 1
  %403 = fmul <2 x double> %400, %402
  %404 = shufflevector <2 x double> %403, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %405 = shufflevector <2 x double> %397, <2 x double> poison, <2 x i32> zeroinitializer
  %406 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %405, <2 x double> %400, <2 x double> %404)
  store <2 x double> %406, ptr %17, align 16, !tbaa !9
  store <2 x double> %406, ptr %24, align 16, !tbaa !9
  %407 = extractelement <2 x double> %406, i64 0
  %408 = fcmp oge double %407, 0.000000e+00
  %409 = fneg double %407
  %410 = select i1 %408, double %407, double %409
  %411 = call double @d_imag(ptr noundef nonnull %24) #6
  %412 = fcmp oge double %411, 0.000000e+00
  %413 = fneg double %411
  %414 = select i1 %412, double %411, double %413
  %415 = fadd double %410, %414
  %416 = fcmp une double %415, 0.000000e+00
  br i1 %416, label %417, label %482

417:                                              ; preds = %395
  store i64 %184, ptr %14, align 8, !tbaa !5
  %418 = load <2 x double>, ptr %185, align 8, !tbaa !9
  %419 = fsub <2 x double> %418, %396
  store <2 x double> %419, ptr %18, align 16, !tbaa !9
  %420 = fmul <2 x double> %419, <double 5.000000e-01, double 5.000000e-01>
  store <2 x double> %420, ptr %17, align 16, !tbaa !9
  store <2 x double> %420, ptr %26, align 16, !tbaa !9
  %421 = extractelement <2 x double> %420, i64 0
  %422 = fcmp oge double %421, 0.000000e+00
  %423 = fneg double %421
  %424 = select i1 %422, double %421, double %423
  %425 = call double @d_imag(ptr noundef nonnull %26) #6
  %426 = fcmp oge double %425, 0.000000e+00
  %427 = fneg double %425
  %428 = select i1 %426, double %425, double %427
  %429 = fadd double %424, %428
  %430 = load <2 x double>, ptr %26, align 16
  %431 = call double @d_imag(ptr noundef nonnull %26) #6
  %432 = insertelement <2 x double> %430, double %431, i64 1
  %433 = fcmp oge <2 x double> %432, zeroinitializer
  %434 = fneg <2 x double> %432
  %435 = select <2 x i1> %433, <2 x double> %432, <2 x double> %434
  %shift979 = shufflevector <2 x double> %435, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %436 = fadd <2 x double> %435, %shift979
  %437 = extractelement <2 x double> %436, i64 0
  %438 = fcmp oge double %415, %437
  %439 = select i1 %438, double %415, double %437
  %440 = load <2 x double>, ptr %26, align 16, !tbaa !9
  %441 = insertelement <2 x double> poison, double %439, i64 0
  %442 = shufflevector <2 x double> %441, <2 x double> poison, <2 x i32> zeroinitializer
  %443 = fdiv <2 x double> %440, %442
  store <2 x double> %443, ptr %21, align 16, !tbaa !9
  call void @pow_zi(ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull @c__2) #6
  %444 = load <2 x double>, ptr %24, align 16, !tbaa !9
  %445 = fdiv <2 x double> %444, %442
  store <2 x double> %445, ptr %23, align 16, !tbaa !9
  call void @pow_zi(ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull @c__2) #6
  %446 = load <2 x double>, ptr %20, align 16, !tbaa !9
  %447 = load <2 x double>, ptr %22, align 16, !tbaa !9
  %448 = fadd <2 x double> %446, %447
  store <2 x double> %448, ptr %19, align 16, !tbaa !9
  call void @z_sqrt(ptr noundef nonnull %18, ptr noundef nonnull %19) #6
  %449 = load <2 x double>, ptr %18, align 16, !tbaa !9
  %450 = fmul <2 x double> %442, %449
  store <2 x double> %450, ptr %17, align 16, !tbaa !9
  store <2 x double> %450, ptr %27, align 16, !tbaa !9
  %451 = fcmp ogt double %429, 0.000000e+00
  br i1 %451, label %452, label %467

452:                                              ; preds = %417
  %453 = load <2 x double>, ptr %26, align 16, !tbaa !9
  %454 = insertelement <2 x double> poison, double %429, i64 0
  %455 = shufflevector <2 x double> %454, <2 x double> poison, <2 x i32> zeroinitializer
  %456 = fdiv <2 x double> %453, %455
  store <2 x double> %456, ptr %17, align 16, !tbaa !9
  store <2 x double> %456, ptr %18, align 16, !tbaa !9
  %457 = call double @d_imag(ptr noundef nonnull %18) #6
  %458 = call double @d_imag(ptr noundef nonnull %27) #6
  %459 = fmul double %457, %458
  %460 = extractelement <2 x double> %450, i64 0
  %461 = extractelement <2 x double> %456, i64 0
  %462 = call double @llvm.fmuladd.f64(double %461, double %460, double %459)
  %463 = fcmp olt double %462, 0.000000e+00
  %464 = load <2 x double>, ptr %27, align 16, !tbaa !9
  br i1 %463, label %465, label %467

465:                                              ; preds = %452
  %466 = fneg <2 x double> %464
  store <2 x double> %466, ptr %19, align 16, !tbaa !9
  store <2 x double> %466, ptr %27, align 16, !tbaa !9
  br label %467

467:                                              ; preds = %452, %465, %417
  %468 = phi <2 x double> [ %464, %452 ], [ %466, %465 ], [ %450, %417 ]
  %469 = load <2 x double>, ptr %26, align 16, !tbaa !9
  %470 = fadd <2 x double> %469, %468
  store <2 x double> %470, ptr %20, align 16, !tbaa !9
  call void @zladiv_(ptr noundef nonnull %19, ptr noundef nonnull %24, ptr noundef nonnull %20) #6
  %471 = load <2 x double>, ptr %24, align 16
  %472 = load double, ptr %165, align 8, !tbaa !15
  %473 = fneg double %472
  %474 = load <2 x double>, ptr %19, align 16, !tbaa !9
  %475 = insertelement <2 x double> poison, double %472, i64 0
  %476 = insertelement <2 x double> %475, double %473, i64 1
  %477 = fmul <2 x double> %474, %476
  %478 = shufflevector <2 x double> %477, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %479 = shufflevector <2 x double> %471, <2 x double> poison, <2 x i32> zeroinitializer
  %480 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %479, <2 x double> %474, <2 x double> %478)
  store <2 x double> %480, ptr %18, align 16, !tbaa !9
  %481 = fsub <2 x double> %396, %480
  br label %482

482:                                              ; preds = %384, %467, %395, %368
  %483 = phi <2 x double> [ %383, %368 ], [ %394, %384 ], [ %481, %467 ], [ %396, %395 ]
  %484 = add nsw i64 %.0826.lcssa, 1
  store i64 %484, ptr %14, align 8, !tbaa !5
  br label %485

485:                                              ; preds = %487, %482
  %.0824 = phi i64 [ %170, %482 ], [ %518, %487 ]
  %486 = load i64, ptr %14, align 8, !tbaa !5
  %.not854 = icmp slt i64 %.0824, %486
  br i1 %.not854, label %555, label %487

487:                                              ; preds = %485
  %488 = mul nsw i64 %.0824, %38
  %489 = getelementptr %struct.doublecomplex, ptr %40, i64 %488
  %490 = getelementptr %struct.doublecomplex, ptr %489, i64 %.0824
  %491 = load <2 x double>, ptr %490, align 8, !tbaa !9
  store <2 x double> %491, ptr %30, align 16, !tbaa !9
  %492 = add nsw i64 %.0824, 1
  %493 = mul i64 %492, %163
  %494 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %493
  %495 = load <2 x double>, ptr %494, align 8, !tbaa !9
  store <2 x double> %495, ptr %31, align 16, !tbaa !9
  %496 = fsub <2 x double> %491, %483
  store <2 x double> %496, ptr %17, align 16, !tbaa !9
  store <2 x double> %496, ptr %34, align 16, !tbaa !9
  %497 = add nsw i64 %492, %488
  store i64 %497, ptr %15, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %497
  %499 = load double, ptr %498, align 8, !tbaa !13
  %500 = extractelement <2 x double> %496, i64 0
  %501 = fcmp oge double %500, 0.000000e+00
  %502 = fneg double %500
  %503 = select i1 %501, double %500, double %502
  %504 = call double @d_imag(ptr noundef nonnull %34) #6
  %505 = fcmp oge double %504, 0.000000e+00
  %506 = fneg double %504
  %507 = select i1 %505, double %504, double %506
  %508 = fadd double %503, %507
  %509 = fcmp oge double %499, 0.000000e+00
  %510 = fneg double %499
  %511 = select i1 %509, double %499, double %510
  %512 = fadd double %511, %508
  %513 = load <2 x double>, ptr %34, align 16, !tbaa !9
  %514 = insertelement <2 x double> poison, double %512, i64 0
  %515 = shufflevector <2 x double> %514, <2 x double> poison, <2 x i32> zeroinitializer
  %516 = fdiv <2 x double> %513, %515
  store <2 x double> %516, ptr %17, align 16, !tbaa !9
  store <2 x double> %516, ptr %34, align 16, !tbaa !9
  %517 = fdiv double %499, %512
  store <2 x double> %516, ptr %25, align 16, !tbaa !9
  store double %517, ptr %166, align 16, !tbaa !13
  store double 0.000000e+00, ptr %167, align 8, !tbaa !15
  %518 = add nsw i64 %.0824, -1
  %519 = mul nsw i64 %518, %38
  %520 = add nsw i64 %519, %.0824
  store i64 %520, ptr %15, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %520
  %522 = load double, ptr %521, align 8, !tbaa !13
  %523 = insertelement <2 x double> poison, double %517, i64 0
  %524 = insertelement <2 x double> %523, double %522, i64 1
  %525 = fcmp oge <2 x double> %524, zeroinitializer
  %526 = fneg <2 x double> %524
  %527 = select <2 x i1> %525, <2 x double> %524, <2 x double> %526
  %shift980 = shufflevector <2 x double> %527, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %528 = fmul <2 x double> %527, %shift980
  %529 = extractelement <2 x double> %528, i64 0
  %530 = call double @d_imag(ptr noundef nonnull %34) #6
  %531 = load double, ptr %30, align 16, !tbaa !13
  %532 = call double @d_imag(ptr noundef nonnull %30) #6
  %533 = insertelement <2 x double> %516, double %531, i64 1
  %534 = fcmp oge <2 x double> %533, zeroinitializer
  %535 = fneg <2 x double> %533
  %536 = select <2 x i1> %534, <2 x double> %533, <2 x double> %535
  %537 = insertelement <2 x double> poison, double %530, i64 0
  %538 = insertelement <2 x double> %537, double %532, i64 1
  %539 = fcmp oge <2 x double> %538, zeroinitializer
  %540 = fneg <2 x double> %538
  %541 = select <2 x i1> %539, <2 x double> %538, <2 x double> %540
  %542 = fadd <2 x double> %536, %541
  %543 = load <2 x double>, ptr %31, align 16
  %544 = call double @d_imag(ptr noundef nonnull %31) #6
  %545 = insertelement <2 x double> %543, double %544, i64 1
  %546 = fcmp oge <2 x double> %545, zeroinitializer
  %547 = fneg <2 x double> %545
  %548 = select <2 x i1> %546, <2 x double> %545, <2 x double> %547
  %shift981 = shufflevector <2 x double> %548, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %549 = fadd <2 x double> %548, %shift981
  %shift982 = shufflevector <2 x double> %542, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %550 = fadd <2 x double> %shift982, %549
  %551 = fmul <2 x double> %542, %550
  %552 = extractelement <2 x double> %551, i64 0
  %553 = fmul double %150, %552
  %554 = fcmp ugt double %529, %553
  br i1 %554, label %485, label %.loopexit874, !llvm.loop !18

555:                                              ; preds = %485
  %556 = mul nsw i64 %.0826.lcssa, %38
  %557 = getelementptr %struct.doublecomplex, ptr %40, i64 %556
  %558 = getelementptr %struct.doublecomplex, ptr %557, i64 %.0826.lcssa
  %559 = load <2 x double>, ptr %558, align 8, !tbaa !9
  store <2 x double> %559, ptr %30, align 16, !tbaa !9
  %560 = mul i64 %484, %163
  %561 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %560
  %562 = load <2 x double>, ptr %561, align 8, !tbaa !9
  store <2 x double> %562, ptr %31, align 16, !tbaa !9
  %563 = fsub <2 x double> %559, %483
  store <2 x double> %563, ptr %17, align 16, !tbaa !9
  store <2 x double> %563, ptr %34, align 16, !tbaa !9
  %564 = add nsw i64 %484, %556
  store i64 %564, ptr %14, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !13
  %567 = extractelement <2 x double> %563, i64 0
  %568 = fcmp oge double %567, 0.000000e+00
  %569 = fneg double %567
  %570 = select i1 %568, double %567, double %569
  %571 = call double @d_imag(ptr noundef nonnull %34) #6
  %572 = fcmp oge double %571, 0.000000e+00
  %573 = fneg double %571
  %574 = select i1 %572, double %571, double %573
  %575 = fadd double %570, %574
  %576 = fcmp oge double %566, 0.000000e+00
  %577 = fneg double %566
  %578 = select i1 %576, double %566, double %577
  %579 = fadd double %578, %575
  %580 = load <2 x double>, ptr %34, align 16, !tbaa !9
  %581 = insertelement <2 x double> poison, double %579, i64 0
  %582 = shufflevector <2 x double> %581, <2 x double> poison, <2 x i32> zeroinitializer
  %583 = fdiv <2 x double> %580, %582
  store <2 x double> %583, ptr %17, align 16, !tbaa !9
  store <2 x double> %583, ptr %34, align 16, !tbaa !9
  %584 = fdiv double %566, %579
  store <2 x double> %583, ptr %25, align 16, !tbaa !9
  store double %584, ptr %166, align 16, !tbaa !13
  store double 0.000000e+00, ptr %167, align 8, !tbaa !15
  br label %.loopexit874

.loopexit874:                                     ; preds = %487, %555
  store i64 %170, ptr %14, align 8, !tbaa !5
  %.not855917.not = icmp slt i64 %.0824, %.1833929
  br i1 %.not855917.not, label %.lr.ph921, label %._crit_edge922

.lr.ph921:                                        ; preds = %.loopexit874
  %585 = icmp sgt i64 %.0824, %.0826.lcssa
  %586 = add nsw i64 %.0824, 1
  %587 = mul nsw i64 %.0824, %38
  %588 = add nsw i64 %586, %587
  %589 = add nsw i64 %.0824, 2
  %.not862 = icmp sgt i64 %589, %.1833929
  %590 = mul nsw i64 %586, %38
  %591 = add nsw i64 %590, %589
  %592 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %591
  %593 = getelementptr inbounds i8, ptr %592, i64 8
  %594 = getelementptr %struct.doublecomplex, ptr %40, i64 %spec.select
  %595 = icmp sgt i64 %spec.select868, %.0824
  %596 = sub nsw i64 %spec.select868, %.0824
  %597 = getelementptr %struct.doublecomplex, ptr %40, i64 %.0824
  %598 = getelementptr %struct.doublecomplex, ptr %597, i64 %590
  %599 = sub nsw i64 %.0824, %spec.select
  %600 = getelementptr %struct.doublecomplex, ptr %594, i64 %587
  %601 = mul nsw i64 %.0824, %42
  %invariant.gep962 = getelementptr %struct.doublecomplex, ptr %44, i64 %601
  %602 = add nsw i64 %.0824, 2
  %.fr = freeze i64 %586
  %invariant.smax = call i64 @llvm.smax.i64(i64 %.0824, i64 %.fr)
  br label %603

603:                                              ; preds = %.lr.ph921, %.loopexit
  %.1827918 = phi i64 [ %.0824, %.lr.ph921 ], [ %807, %.loopexit ]
  %604 = icmp sgt i64 %.1827918, %.0824
  br i1 %604, label %607, label %605

605:                                              ; preds = %603
  %606 = call i32 @zlarfg_(ptr noundef nonnull @c__2, ptr noundef nonnull %25, ptr noundef nonnull %166, ptr noundef nonnull @c__1, ptr noundef nonnull %28) #6
  br label %618

607:                                              ; preds = %603
  %608 = add nsw i64 %.1827918, -1
  %609 = mul nsw i64 %608, %38
  %610 = getelementptr %struct.doublecomplex, ptr %40, i64 %.1827918
  %611 = getelementptr %struct.doublecomplex, ptr %610, i64 %609
  %612 = call i32 @f2c_zcopy(ptr noundef nonnull @c__2, ptr noundef %611, ptr noundef nonnull @c__1, ptr noundef nonnull %25, ptr noundef nonnull @c__1) #6
  %613 = call i32 @zlarfg_(ptr noundef nonnull @c__2, ptr noundef nonnull %25, ptr noundef nonnull %166, ptr noundef nonnull @c__1, ptr noundef nonnull %28) #6
  %614 = getelementptr %struct.doublecomplex, ptr %40, i64 %609
  %615 = getelementptr %struct.doublecomplex, ptr %614, i64 %.1827918
  %616 = load <2 x double>, ptr %25, align 16, !tbaa !9
  store <2 x double> %616, ptr %615, align 8, !tbaa !9
  %gep1019 = getelementptr %struct.doublecomplex, ptr %invariant.gep1018, i64 %.1827918
  %617 = getelementptr %struct.doublecomplex, ptr %gep1019, i64 %609
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %617, i8 0, i64 16, i1 false)
  br label %618

618:                                              ; preds = %605, %607
  %619 = load <2 x double>, ptr %166, align 16, !tbaa !9
  store <2 x double> %619, ptr %29, align 16, !tbaa !9
  %620 = load <2 x double>, ptr %28, align 16
  %621 = load double, ptr %168, align 8, !tbaa !15
  %622 = fneg double %621
  %623 = insertelement <2 x double> poison, double %621, i64 0
  %624 = insertelement <2 x double> %623, double %622, i64 1
  %625 = fmul <2 x double> %619, %624
  %626 = shufflevector <2 x double> %625, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %627 = shufflevector <2 x double> %620, <2 x double> poison, <2 x i32> zeroinitializer
  %628 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %627, <2 x double> %619, <2 x double> %626)
  store <2 x double> %628, ptr %17, align 16, !tbaa !9
  store i64 %spec.select868, ptr %15, align 8, !tbaa !5
  %.not857899 = icmp sgt i64 %.1827918, %spec.select868
  br i1 %.not857899, label %._crit_edge903, label %.lr.ph902

.lr.ph902:                                        ; preds = %618
  %629 = add nsw i64 %.1827918, 1
  %630 = shufflevector <2 x double> %628, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1012 = getelementptr %struct.doublecomplex, ptr %40, i64 %.1827918
  br label %631

631:                                              ; preds = %.lr.ph902, %631
  %.1829900 = phi i64 [ %.1827918, %.lr.ph902 ], [ %658, %631 ]
  call void @d_cnjg(ptr noundef nonnull %19, ptr noundef nonnull %28) #6
  %632 = mul nsw i64 %.1829900, %38
  %633 = load <2 x double>, ptr %19, align 16
  %gep1013 = getelementptr %struct.doublecomplex, ptr %invariant.gep1012, i64 %632
  %634 = load double, ptr %164, align 8, !tbaa !15
  %635 = fneg double %634
  %636 = add nsw i64 %629, %632
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %636
  %638 = load <2 x double>, ptr %637, align 8, !tbaa !9
  %639 = fmul <2 x double> %630, %638
  store <2 x double> %639, ptr %20, align 16, !tbaa !9
  %640 = load <2 x double>, ptr %gep1013, align 8, !tbaa !9
  %641 = insertelement <2 x double> poison, double %634, i64 0
  %642 = insertelement <2 x double> %641, double %635, i64 1
  %643 = fmul <2 x double> %640, %642
  %644 = shufflevector <2 x double> %643, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %645 = shufflevector <2 x double> %633, <2 x double> poison, <2 x i32> zeroinitializer
  %646 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %645, <2 x double> %640, <2 x double> %644)
  %647 = fadd <2 x double> %646, %639
  %648 = fsub <2 x double> %640, %647
  store <2 x double> %648, ptr %gep1013, align 8, !tbaa !9
  store i64 %636, ptr %16, align 8, !tbaa !5
  %649 = load <2 x double>, ptr %29, align 16, !tbaa !9
  %650 = shufflevector <2 x double> %647, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %651 = fneg <2 x double> %647
  %652 = shufflevector <2 x double> %650, <2 x double> %651, <2 x i32> <i32 0, i32 3>
  %653 = fmul <2 x double> %649, %652
  %654 = shufflevector <2 x double> %653, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %655 = shufflevector <2 x double> %647, <2 x double> poison, <2 x i32> zeroinitializer
  %656 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %655, <2 x double> %649, <2 x double> %654)
  store <2 x double> %656, ptr %18, align 16, !tbaa !9
  %657 = fsub <2 x double> %638, %656
  store <2 x double> %657, ptr %17, align 16, !tbaa !9
  store <2 x double> %657, ptr %637, align 8, !tbaa !9
  %658 = add nsw i64 %.1829900, 1
  %659 = load i64, ptr %15, align 8, !tbaa !5
  %.not857.not = icmp slt i64 %.1829900, %659
  br i1 %.not857.not, label %631, label %._crit_edge903, !llvm.loop !19

._crit_edge903:                                   ; preds = %631, %618
  %660 = add nsw i64 %.1827918, 2
  store i64 %660, ptr %16, align 8, !tbaa !5
  %661 = call i64 @llvm.smin.i64(i64 %660, i64 %.1833929)
  store i64 %661, ptr %15, align 8, !tbaa !5
  %.not859904 = icmp sgt i64 %spec.select, %661
  br i1 %.not859904, label %._crit_edge908, label %.lr.ph907

.lr.ph907:                                        ; preds = %._crit_edge903
  %662 = mul nsw i64 %.1827918, %38
  %663 = add nsw i64 %.1827918, 1
  %664 = mul nsw i64 %663, %38
  %665 = shufflevector <2 x double> %628, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1014 = getelementptr %struct.doublecomplex, ptr %40, i64 %662
  br label %666

666:                                              ; preds = %.lr.ph907, %666
  %.2830905 = phi i64 [ %spec.select, %.lr.ph907 ], [ %695, %666 ]
  %667 = load <2 x double>, ptr %28, align 16
  %gep1015 = getelementptr %struct.doublecomplex, ptr %invariant.gep1014, i64 %.2830905
  %668 = load double, ptr %168, align 8, !tbaa !15
  %669 = fneg double %668
  %670 = load <2 x double>, ptr %gep1015, align 8, !tbaa !9
  %671 = insertelement <2 x double> poison, double %668, i64 0
  %672 = insertelement <2 x double> %671, double %669, i64 1
  %673 = fmul <2 x double> %670, %672
  %674 = shufflevector <2 x double> %673, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %675 = shufflevector <2 x double> %667, <2 x double> poison, <2 x i32> zeroinitializer
  %676 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %675, <2 x double> %670, <2 x double> %674)
  store <2 x double> %676, ptr %18, align 16, !tbaa !9
  %677 = add nsw i64 %.2830905, %664
  %678 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %677
  %679 = load <2 x double>, ptr %678, align 8, !tbaa !9
  %680 = fmul <2 x double> %665, %679
  store <2 x double> %680, ptr %19, align 16, !tbaa !9
  %681 = fadd <2 x double> %676, %680
  %682 = fsub <2 x double> %670, %681
  store <2 x double> %682, ptr %17, align 16, !tbaa !9
  store <2 x double> %682, ptr %gep1015, align 8, !tbaa !9
  store i64 %677, ptr %16, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %19, ptr noundef nonnull %29) #6
  %683 = load <2 x double>, ptr %19, align 16, !tbaa !9
  %684 = shufflevector <2 x double> %681, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %685 = fneg <2 x double> %681
  %686 = shufflevector <2 x double> %684, <2 x double> %685, <2 x i32> <i32 0, i32 3>
  %687 = fmul <2 x double> %683, %686
  %688 = shufflevector <2 x double> %687, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %689 = shufflevector <2 x double> %681, <2 x double> poison, <2 x i32> zeroinitializer
  %690 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %689, <2 x double> %683, <2 x double> %688)
  store <2 x double> %690, ptr %18, align 16, !tbaa !9
  %691 = load <2 x double>, ptr %678, align 8, !tbaa !9
  %692 = fsub <2 x double> %691, %690
  store <2 x double> %692, ptr %17, align 16, !tbaa !9
  %693 = load i64, ptr %16, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %693
  store <2 x double> %692, ptr %694, align 8, !tbaa !9
  %695 = add nsw i64 %.2830905, 1
  %696 = load i64, ptr %15, align 8, !tbaa !5
  %.not859.not = icmp slt i64 %.2830905, %696
  br i1 %.not859.not, label %666, label %._crit_edge908, !llvm.loop !20

._crit_edge908:                                   ; preds = %666, %._crit_edge903
  %697 = load i64, ptr %1, align 8, !tbaa !5
  %.not860 = icmp eq i64 %697, 0
  br i1 %.not860, label %.loopexit873, label %698

698:                                              ; preds = %._crit_edge908
  %699 = load i64, ptr %9, align 8, !tbaa !5
  store i64 %699, ptr %15, align 8, !tbaa !5
  %700 = load i64, ptr %8, align 8, !tbaa !5
  %.not861909 = icmp sgt i64 %700, %699
  br i1 %.not861909, label %.loopexit873, label %.lr.ph912

.lr.ph912:                                        ; preds = %698
  %701 = mul nsw i64 %.1827918, %42
  %702 = add nsw i64 %.1827918, 1
  %703 = mul nsw i64 %702, %42
  %704 = shufflevector <2 x double> %628, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1016 = getelementptr %struct.doublecomplex, ptr %44, i64 %701
  br label %705

705:                                              ; preds = %.lr.ph912, %705
  %.3831910 = phi i64 [ %700, %.lr.ph912 ], [ %734, %705 ]
  %706 = load <2 x double>, ptr %28, align 16
  %gep1017 = getelementptr %struct.doublecomplex, ptr %invariant.gep1016, i64 %.3831910
  %707 = load double, ptr %168, align 8, !tbaa !15
  %708 = fneg double %707
  %709 = load <2 x double>, ptr %gep1017, align 8, !tbaa !9
  %710 = insertelement <2 x double> poison, double %707, i64 0
  %711 = insertelement <2 x double> %710, double %708, i64 1
  %712 = fmul <2 x double> %709, %711
  %713 = shufflevector <2 x double> %712, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %714 = shufflevector <2 x double> %706, <2 x double> poison, <2 x i32> zeroinitializer
  %715 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %714, <2 x double> %709, <2 x double> %713)
  store <2 x double> %715, ptr %18, align 16, !tbaa !9
  %716 = add nsw i64 %.3831910, %703
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %716
  %718 = load <2 x double>, ptr %717, align 8, !tbaa !9
  %719 = fmul <2 x double> %704, %718
  store <2 x double> %719, ptr %19, align 16, !tbaa !9
  %720 = fadd <2 x double> %715, %719
  %721 = fsub <2 x double> %709, %720
  store <2 x double> %721, ptr %17, align 16, !tbaa !9
  store <2 x double> %721, ptr %gep1017, align 8, !tbaa !9
  store i64 %716, ptr %16, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %19, ptr noundef nonnull %29) #6
  %722 = load <2 x double>, ptr %19, align 16, !tbaa !9
  %723 = shufflevector <2 x double> %720, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %724 = fneg <2 x double> %720
  %725 = shufflevector <2 x double> %723, <2 x double> %724, <2 x i32> <i32 0, i32 3>
  %726 = fmul <2 x double> %722, %725
  %727 = shufflevector <2 x double> %726, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %728 = shufflevector <2 x double> %720, <2 x double> poison, <2 x i32> zeroinitializer
  %729 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %728, <2 x double> %722, <2 x double> %727)
  store <2 x double> %729, ptr %18, align 16, !tbaa !9
  %730 = load <2 x double>, ptr %717, align 8, !tbaa !9
  %731 = fsub <2 x double> %730, %729
  store <2 x double> %731, ptr %17, align 16, !tbaa !9
  %732 = load i64, ptr %16, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %732
  store <2 x double> %731, ptr %733, align 8, !tbaa !9
  %734 = add nsw i64 %.3831910, 1
  %735 = load i64, ptr %15, align 8, !tbaa !5
  %.not861.not = icmp slt i64 %.3831910, %735
  br i1 %.not861.not, label %705, label %.loopexit873, !llvm.loop !21

.loopexit873:                                     ; preds = %705, %698, %._crit_edge908
  %736 = icmp eq i64 %.1827918, %.0824
  %or.cond = and i1 %585, %736
  br i1 %or.cond, label %737, label %.loopexit

737:                                              ; preds = %.loopexit873
  %738 = load <2 x double>, ptr %28, align 16, !tbaa !9
  %739 = fsub <2 x double> <double 1.000000e+00, double 0.000000e+00>, %738
  store <2 x double> %739, ptr %17, align 16, !tbaa !9
  store <2 x double> %739, ptr %35, align 16, !tbaa !9
  %740 = call double @z_abs(ptr noundef nonnull %35) #6
  %741 = load <2 x double>, ptr %35, align 16, !tbaa !9
  %742 = insertelement <2 x double> poison, double %740, i64 0
  %743 = shufflevector <2 x double> %742, <2 x double> poison, <2 x i32> zeroinitializer
  %744 = fdiv <2 x double> %741, %743
  store <2 x double> %744, ptr %17, align 16, !tbaa !9
  store <2 x double> %744, ptr %35, align 16, !tbaa !9
  store i64 %588, ptr %15, align 8, !tbaa !5
  store i64 %588, ptr %16, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %18, ptr noundef nonnull %35) #6
  %745 = load i64, ptr %16, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %745
  %747 = load double, ptr %746, align 8, !tbaa !13
  %748 = getelementptr inbounds i8, ptr %746, i64 8
  %749 = load double, ptr %748, align 8, !tbaa !15
  %750 = fneg double %749
  %751 = load <2 x double>, ptr %18, align 16, !tbaa !9
  %752 = insertelement <2 x double> poison, double %749, i64 0
  %753 = insertelement <2 x double> %752, double %750, i64 1
  %754 = fmul <2 x double> %751, %753
  %755 = shufflevector <2 x double> %754, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %756 = insertelement <2 x double> poison, double %747, i64 0
  %757 = shufflevector <2 x double> %756, <2 x double> poison, <2 x i32> zeroinitializer
  %758 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %757, <2 x double> %751, <2 x double> %755)
  store <2 x double> %758, ptr %17, align 16, !tbaa !9
  %759 = load i64, ptr %15, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %40, i64 %759
  store <2 x double> %758, ptr %760, align 8, !tbaa !9
  br i1 %.not862, label %.lr.ph916.preheader, label %761

761:                                              ; preds = %737
  store i64 %591, ptr %16, align 8, !tbaa !5
  %762 = load double, ptr %592, align 8, !tbaa !13
  %763 = load double, ptr %593, align 8, !tbaa !15
  %764 = fneg double %763
  %765 = load <2 x double>, ptr %35, align 16, !tbaa !9
  %766 = insertelement <2 x double> poison, double %763, i64 0
  %767 = insertelement <2 x double> %766, double %764, i64 1
  %768 = fmul <2 x double> %765, %767
  %769 = shufflevector <2 x double> %768, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %770 = insertelement <2 x double> poison, double %762, i64 0
  %771 = shufflevector <2 x double> %770, <2 x double> poison, <2 x i32> zeroinitializer
  %772 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %771, <2 x double> %765, <2 x double> %769)
  store <2 x double> %772, ptr %17, align 16, !tbaa !9
  store <2 x double> %772, ptr %592, align 8, !tbaa !9
  br label %.lr.ph916.preheader

.lr.ph916.preheader:                              ; preds = %761, %737
  store i64 %.1833929, ptr %15, align 8, !tbaa !5
  br i1 %595, label %773, label %775

773:                                              ; preds = %.lr.ph916.preheader
  store i64 %596, ptr %16, align 8, !tbaa !5
  %774 = call i32 @f2c_zscal(ptr noundef nonnull %16, ptr noundef nonnull %35, ptr noundef %598, ptr noundef nonnull %6) #6
  br label %775

775:                                              ; preds = %773, %.lr.ph916.preheader
  store i64 %599, ptr %16, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %35) #6
  %776 = call i32 @f2c_zscal(ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef %600, ptr noundef nonnull @c__1) #6
  %777 = load i64, ptr %1, align 8, !tbaa !5
  %.not865.peel = icmp eq i64 %777, 0
  br i1 %.not865.peel, label %781, label %778

778:                                              ; preds = %775
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %35) #6
  %779 = load i64, ptr %8, align 8, !tbaa !5
  %gep963 = getelementptr %struct.doublecomplex, ptr %invariant.gep962, i64 %779
  %780 = call i32 @f2c_zscal(ptr noundef nonnull %33, ptr noundef nonnull %17, ptr noundef %gep963, ptr noundef nonnull @c__1) #6
  br label %781

781:                                              ; preds = %778, %775
  %782 = load i64, ptr %15, align 8, !tbaa !5
  %or.cond964 = icmp sgt i64 %782, %invariant.smax
  br i1 %or.cond964, label %.lr.ph916, label %.loopexit

.lr.ph916:                                        ; preds = %781, %804
  %.4914 = phi i64 [ %805, %804 ], [ %602, %781 ]
  %.not864 = icmp eq i64 %.4914, %586
  br i1 %.not864, label %804, label %783

783:                                              ; preds = %.lr.ph916
  %784 = icmp sgt i64 %spec.select868, %.4914
  br i1 %784, label %785, label %792

785:                                              ; preds = %783
  %786 = sub nsw i64 %spec.select868, %.4914
  store i64 %786, ptr %16, align 8, !tbaa !5
  %787 = add nsw i64 %.4914, 1
  %788 = mul nsw i64 %787, %38
  %789 = getelementptr %struct.doublecomplex, ptr %40, i64 %.4914
  %790 = getelementptr %struct.doublecomplex, ptr %789, i64 %788
  %791 = call i32 @f2c_zscal(ptr noundef nonnull %16, ptr noundef nonnull %35, ptr noundef %790, ptr noundef nonnull %6) #6
  br label %792

792:                                              ; preds = %785, %783
  %793 = sub nsw i64 %.4914, %spec.select
  store i64 %793, ptr %16, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %35) #6
  %794 = mul nsw i64 %.4914, %38
  %795 = getelementptr %struct.doublecomplex, ptr %594, i64 %794
  %796 = call i32 @f2c_zscal(ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef %795, ptr noundef nonnull @c__1) #6
  %797 = load i64, ptr %1, align 8, !tbaa !5
  %.not865 = icmp eq i64 %797, 0
  br i1 %.not865, label %804, label %798

798:                                              ; preds = %792
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %35) #6
  %799 = load i64, ptr %8, align 8, !tbaa !5
  %800 = mul nsw i64 %.4914, %42
  %801 = getelementptr %struct.doublecomplex, ptr %44, i64 %799
  %802 = getelementptr %struct.doublecomplex, ptr %801, i64 %800
  %803 = call i32 @f2c_zscal(ptr noundef nonnull %33, ptr noundef nonnull %17, ptr noundef %802, ptr noundef nonnull @c__1) #6
  br label %804

804:                                              ; preds = %.lr.ph916, %798, %792
  %805 = add nsw i64 %.4914, 1
  %806 = load i64, ptr %15, align 8, !tbaa !5
  %.not863.not = icmp slt i64 %.4914, %806
  br i1 %.not863.not, label %.lr.ph916, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %804, %781, %.loopexit873
  %807 = add nsw i64 %.1827918, 1
  %808 = load i64, ptr %14, align 8, !tbaa !5
  %.not855.not = icmp slt i64 %.1827918, %808
  br i1 %.not855.not, label %603, label %._crit_edge922, !llvm.loop !24

._crit_edge922:                                   ; preds = %.loopexit, %.loopexit874
  store i64 %172, ptr %14, align 8, !tbaa !5
  %809 = load <2 x double>, ptr %173, align 8, !tbaa !9
  store <2 x double> %809, ptr %35, align 16, !tbaa !9
  %810 = call double @d_imag(ptr noundef nonnull %35) #6
  %811 = fcmp une double %810, 0.000000e+00
  br i1 %811, label %812, label %829

812:                                              ; preds = %._crit_edge922
  %813 = call double @z_abs(ptr noundef nonnull %35) #6
  store double %813, ptr %173, align 8, !tbaa !13
  store double 0.000000e+00, ptr %186, align 8, !tbaa !15
  %814 = load <2 x double>, ptr %35, align 16, !tbaa !9
  %815 = insertelement <2 x double> poison, double %813, i64 0
  %816 = shufflevector <2 x double> %815, <2 x double> poison, <2 x i32> zeroinitializer
  %817 = fdiv <2 x double> %814, %816
  store <2 x double> %817, ptr %17, align 16, !tbaa !9
  store <2 x double> %817, ptr %35, align 16, !tbaa !9
  %818 = icmp sgt i64 %spec.select868, %.1833929
  br i1 %818, label %819, label %822

819:                                              ; preds = %812
  %820 = sub nsw i64 %spec.select868, %.1833929
  store i64 %820, ptr %14, align 8, !tbaa !5
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %35) #6
  %821 = call i32 @f2c_zscal(ptr noundef nonnull %14, ptr noundef nonnull %17, ptr noundef %189, ptr noundef nonnull %6) #6
  br label %822

822:                                              ; preds = %819, %812
  %823 = sub nsw i64 %.1833929, %spec.select
  store i64 %823, ptr %14, align 8, !tbaa !5
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %spec.select
  %824 = call i32 @f2c_zscal(ptr noundef nonnull %14, ptr noundef nonnull %35, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  %825 = load i64, ptr %1, align 8, !tbaa !5
  %.not856 = icmp eq i64 %825, 0
  br i1 %.not856, label %829, label %826

826:                                              ; preds = %822
  %827 = load i64, ptr %8, align 8, !tbaa !5
  %gep928 = getelementptr %struct.doublecomplex, ptr %invariant.gep927, i64 %827
  %828 = call i32 @f2c_zscal(ptr noundef nonnull %33, ptr noundef nonnull %35, ptr noundef %gep928, ptr noundef nonnull @c__1) #6
  br label %829

829:                                              ; preds = %._crit_edge922, %826, %822
  %830 = add nuw nsw i64 %.0815926, 1
  %exitcond944.not = icmp eq i64 %830, 31
  br i1 %exitcond944.not, label %831, label %191, !llvm.loop !25

831:                                              ; preds = %829
  store i64 %.1833929, ptr %12, align 8, !tbaa !5
  br label %.loopexit875

832:                                              ; preds = %365
  store i64 %.1833929, ptr %14, align 8, !tbaa !5
  store i64 %174, ptr %15, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %.1833929
  %834 = load <2 x double>, ptr %175, align 8, !tbaa !9
  store <2 x double> %834, ptr %833, align 8, !tbaa !9
  %835 = add nsw i64 %.0826.lcssa, -1
  br i1 %359, label %.preheader, label %.loopexit875

.loopexit875:                                     ; preds = %832, %158, %13, %831, %51
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  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 double @d_imag(ptr noundef) local_unnamed_addr #2

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

declare double @z_abs(ptr noundef) local_unnamed_addr #2

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

declare void @z_sqrt(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

declare void @pow_zi(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @zladiv_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #4

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 0}
!14 = !{!"", !10, i64 0, !10, i64 8}
!15 = !{!14, !10, i64 8}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12, !23}
!23 = !{!"llvm.loop.peeled.count", i32 2}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}


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