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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b16 = external hidden global %struct.doublecomplex, align 8

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

113:                                              ; preds = %16
  %114 = load ptr, ptr %18, align 8, !tbaa !5
  %115 = call i64 @lsame_(ptr noundef %114, ptr noundef @.str.1)
  %116 = icmp ne i64 %115, 0
  br i1 %116, label %119, label %117

117:                                              ; preds = %113
  %118 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -1, ptr %118, align 8, !tbaa !9
  br label %165

119:                                              ; preds = %113, %16
  %120 = load ptr, ptr %19, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = icmp slt i64 %121, 0
  br i1 %122, label %123, label %125

123:                                              ; preds = %119
  %124 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -2, ptr %124, align 8, !tbaa !9
  br label %164

125:                                              ; preds = %119
  %126 = load ptr, ptr %20, align 8, !tbaa !5
  %127 = load i64, ptr %126, align 8, !tbaa !9
  %128 = icmp slt i64 %127, 0
  br i1 %128, label %129, label %131

129:                                              ; preds = %125
  %130 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -3, ptr %130, align 8, !tbaa !9
  br label %163

131:                                              ; preds = %125
  %132 = load ptr, ptr %26, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !9
  %134 = load ptr, ptr %19, align 8, !tbaa !5
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = icmp sge i64 1, %135
  br i1 %136, label %137, label %138

137:                                              ; preds = %131
  br label %141

138:                                              ; preds = %131
  %139 = load ptr, ptr %19, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  br label %141

141:                                              ; preds = %138, %137
  %142 = phi i64 [ 1, %137 ], [ %140, %138 ]
  %143 = icmp slt i64 %133, %142
  br i1 %143, label %144, label %146

144:                                              ; preds = %141
  %145 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -9, ptr %145, align 8, !tbaa !9
  br label %162

146:                                              ; preds = %141
  %147 = load ptr, ptr %28, align 8, !tbaa !5
  %148 = load i64, ptr %147, align 8, !tbaa !9
  %149 = load ptr, ptr %19, align 8, !tbaa !5
  %150 = load i64, ptr %149, align 8, !tbaa !9
  %151 = icmp sge i64 1, %150
  br i1 %151, label %152, label %153

152:                                              ; preds = %146
  br label %156

153:                                              ; preds = %146
  %154 = load ptr, ptr %19, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  br label %156

156:                                              ; preds = %153, %152
  %157 = phi i64 [ 1, %152 ], [ %155, %153 ]
  %158 = icmp slt i64 %148, %157
  br i1 %158, label %159, label %161

159:                                              ; preds = %156
  %160 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -11, ptr %160, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %159, %156
  br label %162

162:                                              ; preds = %161, %144
  br label %163

163:                                              ; preds = %162, %129
  br label %164

164:                                              ; preds = %163, %123
  br label %165

165:                                              ; preds = %164, %117
  %166 = load ptr, ptr %33, align 8, !tbaa !5
  %167 = load i64, ptr %166, align 8, !tbaa !9
  %168 = icmp ne i64 %167, 0
  br i1 %168, label %169, label %174

169:                                              ; preds = %165
  %170 = load ptr, ptr %33, align 8, !tbaa !5
  %171 = load i64, ptr %170, align 8, !tbaa !9
  %172 = sub nsw i64 0, %171
  store i64 %172, ptr %38, align 8, !tbaa !9
  %173 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %38)
  store i32 0, ptr %17, align 4
  store i32 1, ptr %75, align 4
  br label %2726

174:                                              ; preds = %165
  %175 = load ptr, ptr %19, align 8, !tbaa !5
  %176 = load i64, ptr %175, align 8, !tbaa !9
  %177 = icmp eq i64 %176, 0
  br i1 %177, label %182, label %178

178:                                              ; preds = %174
  %179 = load ptr, ptr %20, align 8, !tbaa !5
  %180 = load i64, ptr %179, align 8, !tbaa !9
  %181 = icmp eq i64 %180, 0
  br i1 %181, label %182, label %200

182:                                              ; preds = %178, %174
  %183 = load ptr, ptr %20, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !9
  store i64 %184, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %60, align 8, !tbaa !9
  br label %185

185:                                              ; preds = %196, %182
  %186 = load i64, ptr %60, align 8, !tbaa !9
  %187 = load i64, ptr %38, align 8, !tbaa !9
  %188 = icmp sle i64 %186, %187
  br i1 %188, label %189, label %199

189:                                              ; preds = %185
  %190 = load ptr, ptr %29, align 8, !tbaa !5
  %191 = load i64, ptr %60, align 8, !tbaa !9
  %192 = getelementptr inbounds double, ptr %190, i64 %191
  store double 0.000000e+00, ptr %192, align 8, !tbaa !11
  %193 = load ptr, ptr %30, align 8, !tbaa !5
  %194 = load i64, ptr %60, align 8, !tbaa !9
  %195 = getelementptr inbounds double, ptr %193, i64 %194
  store double 0.000000e+00, ptr %195, align 8, !tbaa !11
  br label %196

196:                                              ; preds = %189
  %197 = load i64, ptr %60, align 8, !tbaa !9
  %198 = add nsw i64 %197, 1
  store i64 %198, ptr %60, align 8, !tbaa !9
  br label %185, !llvm.loop !13

199:                                              ; preds = %185
  store i32 0, ptr %17, align 4
  store i32 1, ptr %75, align 4
  br label %2726

200:                                              ; preds = %178
  store i64 4, ptr %67, align 8, !tbaa !9
  %201 = call double @dlamch_(ptr noundef @.str.3)
  store double %201, ptr %68, align 8, !tbaa !11
  %202 = call double @dlamch_(ptr noundef @.str.4)
  store double %202, ptr %73, align 8, !tbaa !11
  %203 = load i64, ptr %67, align 8, !tbaa !9
  %204 = sitofp i64 %203 to double
  %205 = load double, ptr %73, align 8, !tbaa !11
  %206 = fmul double %204, %205
  store double %206, ptr %69, align 8, !tbaa !11
  %207 = load double, ptr %69, align 8, !tbaa !11
  %208 = load double, ptr %68, align 8, !tbaa !11
  %209 = fdiv double %207, %208
  store double %209, ptr %70, align 8, !tbaa !11
  %210 = load ptr, ptr %20, align 8, !tbaa !5
  %211 = load i64, ptr %210, align 8, !tbaa !9
  store i64 %211, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %60, align 8, !tbaa !9
  br label %212

212:                                              ; preds = %2722, %200
  %213 = load i64, ptr %60, align 8, !tbaa !9
  %214 = load i64, ptr %38, align 8, !tbaa !9
  %215 = icmp sle i64 %213, %214
  br i1 %215, label %216, label %2725

216:                                              ; preds = %212
  store i64 1, ptr %71, align 8, !tbaa !9
  store double 3.000000e+00, ptr %74, align 8, !tbaa !11
  br label %217

217:                                              ; preds = %2446, %216
  %218 = load i64, ptr %72, align 8, !tbaa !9
  %219 = icmp ne i64 %218, 0
  br i1 %219, label %220, label %1264

220:                                              ; preds = %217
  %221 = load ptr, ptr %19, align 8, !tbaa !5
  %222 = load i64, ptr %221, align 8, !tbaa !9
  %223 = icmp eq i64 %222, 1
  br i1 %223, label %224, label %340

224:                                              ; preds = %220
  %225 = load i64, ptr %60, align 8, !tbaa !9
  %226 = load i64, ptr %34, align 8, !tbaa !9
  %227 = mul nsw i64 %225, %226
  %228 = add nsw i64 %227, 1
  store i64 %228, ptr %39, align 8, !tbaa !9
  %229 = load ptr, ptr %25, align 8, !tbaa !5
  %230 = load i64, ptr %39, align 8, !tbaa !9
  %231 = getelementptr inbounds %struct.doublecomplex, ptr %229, i64 %230
  %232 = getelementptr inbounds %struct.doublecomplex, ptr %231, i32 0, i32 0
  %233 = load double, ptr %232, align 8, !tbaa !15
  %234 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %233, ptr %234, align 8, !tbaa !15
  %235 = load ptr, ptr %25, align 8, !tbaa !5
  %236 = load i64, ptr %39, align 8, !tbaa !9
  %237 = getelementptr inbounds %struct.doublecomplex, ptr %235, i64 %236
  %238 = getelementptr inbounds %struct.doublecomplex, ptr %237, i32 0, i32 1
  %239 = load double, ptr %238, align 8, !tbaa !17
  %240 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %239, ptr %240, align 8, !tbaa !17
  %241 = load i64, ptr %60, align 8, !tbaa !9
  %242 = load i64, ptr %36, align 8, !tbaa !9
  %243 = mul nsw i64 %241, %242
  %244 = add nsw i64 %243, 1
  store i64 %244, ptr %39, align 8, !tbaa !9
  %245 = load ptr, ptr %21, align 8, !tbaa !5
  %246 = getelementptr inbounds double, ptr %245, i64 1
  %247 = load double, ptr %246, align 8, !tbaa !11
  %248 = load ptr, ptr %27, align 8, !tbaa !5
  %249 = load i64, ptr %39, align 8, !tbaa !9
  %250 = getelementptr inbounds %struct.doublecomplex, ptr %248, i64 %249
  %251 = getelementptr inbounds %struct.doublecomplex, ptr %250, i32 0, i32 0
  %252 = load double, ptr %251, align 8, !tbaa !15
  %253 = fmul double %247, %252
  %254 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %253, ptr %254, align 8, !tbaa !15
  %255 = load ptr, ptr %21, align 8, !tbaa !5
  %256 = getelementptr inbounds double, ptr %255, i64 1
  %257 = load double, ptr %256, align 8, !tbaa !11
  %258 = load ptr, ptr %27, align 8, !tbaa !5
  %259 = load i64, ptr %39, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct.doublecomplex, ptr %258, i64 %259
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %260, i32 0, i32 1
  %262 = load double, ptr %261, align 8, !tbaa !17
  %263 = fmul double %257, %262
  %264 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %263, ptr %264, align 8, !tbaa !17
  %265 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %266 = load double, ptr %265, align 8, !tbaa !15
  %267 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %266, ptr %267, align 8, !tbaa !15
  %268 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %269 = load double, ptr %268, align 8, !tbaa !17
  %270 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %269, ptr %270, align 8, !tbaa !17
  %271 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %272 = load double, ptr %271, align 8, !tbaa !15
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %274 = load double, ptr %273, align 8, !tbaa !15
  %275 = fsub double %272, %274
  %276 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %275, ptr %276, align 8, !tbaa !15
  %277 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %278 = load double, ptr %277, align 8, !tbaa !17
  %279 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %280 = load double, ptr %279, align 8, !tbaa !17
  %281 = fsub double %278, %280
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %281, ptr %282, align 8, !tbaa !17
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %284 = load double, ptr %283, align 8, !tbaa !15
  %285 = load ptr, ptr %31, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.doublecomplex, ptr %285, i64 1
  %287 = getelementptr inbounds %struct.doublecomplex, ptr %286, i32 0, i32 0
  store double %284, ptr %287, align 8, !tbaa !15
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %289 = load double, ptr %288, align 8, !tbaa !17
  %290 = load ptr, ptr %31, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.doublecomplex, ptr %290, i64 1
  %292 = getelementptr inbounds %struct.doublecomplex, ptr %291, i32 0, i32 1
  store double %289, ptr %292, align 8, !tbaa !17
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %294 = load double, ptr %293, align 8, !tbaa !15
  store double %294, ptr %44, align 8, !tbaa !11
  %295 = load double, ptr %44, align 8, !tbaa !11
  %296 = fcmp oge double %295, 0.000000e+00
  br i1 %296, label %297, label %299

297:                                              ; preds = %224
  %298 = load double, ptr %44, align 8, !tbaa !11
  br label %302

299:                                              ; preds = %224
  %300 = load double, ptr %44, align 8, !tbaa !11
  %301 = fneg double %300
  br label %302

302:                                              ; preds = %299, %297
  %303 = phi double [ %298, %297 ], [ %301, %299 ]
  %304 = call double @d_imag(ptr noundef %62)
  store double %304, ptr %45, align 8, !tbaa !11
  %305 = load double, ptr %45, align 8, !tbaa !11
  %306 = fcmp oge double %305, 0.000000e+00
  br i1 %306, label %307, label %309

307:                                              ; preds = %302
  %308 = load double, ptr %45, align 8, !tbaa !11
  br label %312

309:                                              ; preds = %302
  %310 = load double, ptr %45, align 8, !tbaa !11
  %311 = fneg double %310
  br label %312

312:                                              ; preds = %309, %307
  %313 = phi double [ %308, %307 ], [ %311, %309 ]
  %314 = fadd double %303, %313
  %315 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %316 = load double, ptr %315, align 8, !tbaa !15
  store double %316, ptr %46, align 8, !tbaa !11
  %317 = load double, ptr %46, align 8, !tbaa !11
  %318 = fcmp oge double %317, 0.000000e+00
  br i1 %318, label %319, label %321

319:                                              ; preds = %312
  %320 = load double, ptr %46, align 8, !tbaa !11
  br label %324

321:                                              ; preds = %312
  %322 = load double, ptr %46, align 8, !tbaa !11
  %323 = fneg double %322
  br label %324

324:                                              ; preds = %321, %319
  %325 = phi double [ %320, %319 ], [ %323, %321 ]
  %326 = call double @d_imag(ptr noundef %64)
  store double %326, ptr %47, align 8, !tbaa !11
  %327 = load double, ptr %47, align 8, !tbaa !11
  %328 = fcmp oge double %327, 0.000000e+00
  br i1 %328, label %329, label %331

329:                                              ; preds = %324
  %330 = load double, ptr %47, align 8, !tbaa !11
  br label %334

331:                                              ; preds = %324
  %332 = load double, ptr %47, align 8, !tbaa !11
  %333 = fneg double %332
  br label %334

334:                                              ; preds = %331, %329
  %335 = phi double [ %330, %329 ], [ %333, %331 ]
  %336 = fadd double %325, %335
  %337 = fadd double %314, %336
  %338 = load ptr, ptr %32, align 8, !tbaa !5
  %339 = getelementptr inbounds double, ptr %338, i64 1
  store double %337, ptr %339, align 8, !tbaa !11
  br label %1263

340:                                              ; preds = %220
  %341 = load i64, ptr %60, align 8, !tbaa !9
  %342 = load i64, ptr %34, align 8, !tbaa !9
  %343 = mul nsw i64 %341, %342
  %344 = add nsw i64 %343, 1
  store i64 %344, ptr %39, align 8, !tbaa !9
  %345 = load ptr, ptr %25, align 8, !tbaa !5
  %346 = load i64, ptr %39, align 8, !tbaa !9
  %347 = getelementptr inbounds %struct.doublecomplex, ptr %345, i64 %346
  %348 = getelementptr inbounds %struct.doublecomplex, ptr %347, i32 0, i32 0
  %349 = load double, ptr %348, align 8, !tbaa !15
  %350 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %349, ptr %350, align 8, !tbaa !15
  %351 = load ptr, ptr %25, align 8, !tbaa !5
  %352 = load i64, ptr %39, align 8, !tbaa !9
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %351, i64 %352
  %354 = getelementptr inbounds %struct.doublecomplex, ptr %353, i32 0, i32 1
  %355 = load double, ptr %354, align 8, !tbaa !17
  %356 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %355, ptr %356, align 8, !tbaa !17
  %357 = load i64, ptr %60, align 8, !tbaa !9
  %358 = load i64, ptr %36, align 8, !tbaa !9
  %359 = mul nsw i64 %357, %358
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %39, align 8, !tbaa !9
  %361 = load ptr, ptr %21, align 8, !tbaa !5
  %362 = getelementptr inbounds double, ptr %361, i64 1
  %363 = load double, ptr %362, align 8, !tbaa !11
  %364 = load ptr, ptr %27, align 8, !tbaa !5
  %365 = load i64, ptr %39, align 8, !tbaa !9
  %366 = getelementptr inbounds %struct.doublecomplex, ptr %364, i64 %365
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %366, i32 0, i32 0
  %368 = load double, ptr %367, align 8, !tbaa !15
  %369 = fmul double %363, %368
  %370 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %369, ptr %370, align 8, !tbaa !15
  %371 = load ptr, ptr %21, align 8, !tbaa !5
  %372 = getelementptr inbounds double, ptr %371, i64 1
  %373 = load double, ptr %372, align 8, !tbaa !11
  %374 = load ptr, ptr %27, align 8, !tbaa !5
  %375 = load i64, ptr %39, align 8, !tbaa !9
  %376 = getelementptr inbounds %struct.doublecomplex, ptr %374, i64 %375
  %377 = getelementptr inbounds %struct.doublecomplex, ptr %376, i32 0, i32 1
  %378 = load double, ptr %377, align 8, !tbaa !17
  %379 = fmul double %373, %378
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %379, ptr %380, align 8, !tbaa !17
  %381 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %382 = load double, ptr %381, align 8, !tbaa !15
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %382, ptr %383, align 8, !tbaa !15
  %384 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %385 = load double, ptr %384, align 8, !tbaa !17
  %386 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %385, ptr %386, align 8, !tbaa !17
  %387 = load i64, ptr %60, align 8, !tbaa !9
  %388 = load i64, ptr %36, align 8, !tbaa !9
  %389 = mul nsw i64 %387, %388
  %390 = add nsw i64 %389, 2
  store i64 %390, ptr %39, align 8, !tbaa !9
  %391 = load ptr, ptr %22, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.doublecomplex, ptr %391, i64 1
  %393 = getelementptr inbounds %struct.doublecomplex, ptr %392, i32 0, i32 0
  %394 = load double, ptr %393, align 8, !tbaa !15
  %395 = load ptr, ptr %27, align 8, !tbaa !5
  %396 = load i64, ptr %39, align 8, !tbaa !9
  %397 = getelementptr inbounds %struct.doublecomplex, ptr %395, i64 %396
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %397, i32 0, i32 0
  %399 = load double, ptr %398, align 8, !tbaa !15
  %400 = load ptr, ptr %22, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.doublecomplex, ptr %400, i64 1
  %402 = getelementptr inbounds %struct.doublecomplex, ptr %401, i32 0, i32 1
  %403 = load double, ptr %402, align 8, !tbaa !17
  %404 = load ptr, ptr %27, align 8, !tbaa !5
  %405 = load i64, ptr %39, align 8, !tbaa !9
  %406 = getelementptr inbounds %struct.doublecomplex, ptr %404, i64 %405
  %407 = getelementptr inbounds %struct.doublecomplex, ptr %406, i32 0, i32 1
  %408 = load double, ptr %407, align 8, !tbaa !17
  %409 = fmul double %403, %408
  %410 = fneg double %409
  %411 = call double @llvm.fmuladd.f64(double %394, double %399, double %410)
  %412 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %411, ptr %412, align 8, !tbaa !15
  %413 = load ptr, ptr %22, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.doublecomplex, ptr %413, i64 1
  %415 = getelementptr inbounds %struct.doublecomplex, ptr %414, i32 0, i32 0
  %416 = load double, ptr %415, align 8, !tbaa !15
  %417 = load ptr, ptr %27, align 8, !tbaa !5
  %418 = load i64, ptr %39, align 8, !tbaa !9
  %419 = getelementptr inbounds %struct.doublecomplex, ptr %417, i64 %418
  %420 = getelementptr inbounds %struct.doublecomplex, ptr %419, i32 0, i32 1
  %421 = load double, ptr %420, align 8, !tbaa !17
  %422 = load ptr, ptr %22, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.doublecomplex, ptr %422, i64 1
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %423, i32 0, i32 1
  %425 = load double, ptr %424, align 8, !tbaa !17
  %426 = load ptr, ptr %27, align 8, !tbaa !5
  %427 = load i64, ptr %39, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct.doublecomplex, ptr %426, i64 %427
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %428, i32 0, i32 0
  %430 = load double, ptr %429, align 8, !tbaa !15
  %431 = fmul double %425, %430
  %432 = call double @llvm.fmuladd.f64(double %416, double %421, double %431)
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %432, ptr %433, align 8, !tbaa !17
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %435 = load double, ptr %434, align 8, !tbaa !15
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %435, ptr %436, align 8, !tbaa !15
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %438 = load double, ptr %437, align 8, !tbaa !17
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %438, ptr %439, align 8, !tbaa !17
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %441 = load double, ptr %440, align 8, !tbaa !15
  %442 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %443 = load double, ptr %442, align 8, !tbaa !15
  %444 = fsub double %441, %443
  %445 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %444, ptr %445, align 8, !tbaa !15
  %446 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %447 = load double, ptr %446, align 8, !tbaa !17
  %448 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %449 = load double, ptr %448, align 8, !tbaa !17
  %450 = fsub double %447, %449
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %450, ptr %451, align 8, !tbaa !17
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %453 = load double, ptr %452, align 8, !tbaa !15
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %455 = load double, ptr %454, align 8, !tbaa !15
  %456 = fsub double %453, %455
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %456, ptr %457, align 8, !tbaa !15
  %458 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %459 = load double, ptr %458, align 8, !tbaa !17
  %460 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %461 = load double, ptr %460, align 8, !tbaa !17
  %462 = fsub double %459, %461
  %463 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %462, ptr %463, align 8, !tbaa !17
  %464 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %465 = load double, ptr %464, align 8, !tbaa !15
  %466 = load ptr, ptr %31, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.doublecomplex, ptr %466, i64 1
  %468 = getelementptr inbounds %struct.doublecomplex, ptr %467, i32 0, i32 0
  store double %465, ptr %468, align 8, !tbaa !15
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %470 = load double, ptr %469, align 8, !tbaa !17
  %471 = load ptr, ptr %31, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.doublecomplex, ptr %471, i64 1
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %472, i32 0, i32 1
  store double %470, ptr %473, align 8, !tbaa !17
  %474 = load i64, ptr %60, align 8, !tbaa !9
  %475 = load i64, ptr %36, align 8, !tbaa !9
  %476 = mul nsw i64 %474, %475
  %477 = add nsw i64 %476, 2
  store i64 %477, ptr %39, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %479 = load double, ptr %478, align 8, !tbaa !15
  store double %479, ptr %44, align 8, !tbaa !11
  %480 = load double, ptr %44, align 8, !tbaa !11
  %481 = fcmp oge double %480, 0.000000e+00
  br i1 %481, label %482, label %484

482:                                              ; preds = %340
  %483 = load double, ptr %44, align 8, !tbaa !11
  br label %487

484:                                              ; preds = %340
  %485 = load double, ptr %44, align 8, !tbaa !11
  %486 = fneg double %485
  br label %487

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

492:                                              ; preds = %487
  %493 = load double, ptr %45, align 8, !tbaa !11
  br label %497

494:                                              ; preds = %487
  %495 = load double, ptr %45, align 8, !tbaa !11
  %496 = fneg double %495
  br label %497

497:                                              ; preds = %494, %492
  %498 = phi double [ %493, %492 ], [ %496, %494 ]
  %499 = fadd double %488, %498
  %500 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %501 = load double, ptr %500, align 8, !tbaa !15
  store double %501, ptr %46, align 8, !tbaa !11
  %502 = load double, ptr %46, align 8, !tbaa !11
  %503 = fcmp oge double %502, 0.000000e+00
  br i1 %503, label %504, label %506

504:                                              ; preds = %497
  %505 = load double, ptr %46, align 8, !tbaa !11
  br label %509

506:                                              ; preds = %497
  %507 = load double, ptr %46, align 8, !tbaa !11
  %508 = fneg double %507
  br label %509

509:                                              ; preds = %506, %504
  %510 = phi double [ %505, %504 ], [ %508, %506 ]
  %511 = call double @d_imag(ptr noundef %64)
  store double %511, ptr %47, align 8, !tbaa !11
  %512 = load double, ptr %47, align 8, !tbaa !11
  %513 = fcmp oge double %512, 0.000000e+00
  br i1 %513, label %514, label %516

514:                                              ; preds = %509
  %515 = load double, ptr %47, align 8, !tbaa !11
  br label %519

516:                                              ; preds = %509
  %517 = load double, ptr %47, align 8, !tbaa !11
  %518 = fneg double %517
  br label %519

519:                                              ; preds = %516, %514
  %520 = phi double [ %515, %514 ], [ %518, %516 ]
  %521 = fadd double %510, %520
  %522 = fadd double %499, %521
  %523 = load ptr, ptr %22, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.doublecomplex, ptr %523, i64 1
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %524, i32 0, i32 0
  %526 = load double, ptr %525, align 8, !tbaa !15
  store double %526, ptr %48, align 8, !tbaa !11
  %527 = load double, ptr %48, align 8, !tbaa !11
  %528 = fcmp oge double %527, 0.000000e+00
  br i1 %528, label %529, label %531

529:                                              ; preds = %519
  %530 = load double, ptr %48, align 8, !tbaa !11
  br label %534

531:                                              ; preds = %519
  %532 = load double, ptr %48, align 8, !tbaa !11
  %533 = fneg double %532
  br label %534

534:                                              ; preds = %531, %529
  %535 = phi double [ %530, %529 ], [ %533, %531 ]
  %536 = load ptr, ptr %22, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.doublecomplex, ptr %536, i64 1
  %538 = call double @d_imag(ptr noundef %537)
  store double %538, ptr %49, align 8, !tbaa !11
  %539 = load double, ptr %49, align 8, !tbaa !11
  %540 = fcmp oge double %539, 0.000000e+00
  br i1 %540, label %541, label %543

541:                                              ; preds = %534
  %542 = load double, ptr %49, align 8, !tbaa !11
  br label %546

543:                                              ; preds = %534
  %544 = load double, ptr %49, align 8, !tbaa !11
  %545 = fneg double %544
  br label %546

546:                                              ; preds = %543, %541
  %547 = phi double [ %542, %541 ], [ %545, %543 ]
  %548 = fadd double %535, %547
  %549 = load ptr, ptr %27, align 8, !tbaa !5
  %550 = load i64, ptr %39, align 8, !tbaa !9
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %549, i64 %550
  %552 = getelementptr inbounds %struct.doublecomplex, ptr %551, i32 0, i32 0
  %553 = load double, ptr %552, align 8, !tbaa !15
  store double %553, ptr %50, align 8, !tbaa !11
  %554 = load double, ptr %50, align 8, !tbaa !11
  %555 = fcmp oge double %554, 0.000000e+00
  br i1 %555, label %556, label %558

556:                                              ; preds = %546
  %557 = load double, ptr %50, align 8, !tbaa !11
  br label %561

558:                                              ; preds = %546
  %559 = load double, ptr %50, align 8, !tbaa !11
  %560 = fneg double %559
  br label %561

561:                                              ; preds = %558, %556
  %562 = phi double [ %557, %556 ], [ %560, %558 ]
  %563 = load ptr, ptr %27, align 8, !tbaa !5
  %564 = load i64, ptr %60, align 8, !tbaa !9
  %565 = load i64, ptr %36, align 8, !tbaa !9
  %566 = mul nsw i64 %564, %565
  %567 = add nsw i64 %566, 2
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %563, i64 %567
  %569 = call double @d_imag(ptr noundef %568)
  store double %569, ptr %51, align 8, !tbaa !11
  %570 = load double, ptr %51, align 8, !tbaa !11
  %571 = fcmp oge double %570, 0.000000e+00
  br i1 %571, label %572, label %574

572:                                              ; preds = %561
  %573 = load double, ptr %51, align 8, !tbaa !11
  br label %577

574:                                              ; preds = %561
  %575 = load double, ptr %51, align 8, !tbaa !11
  %576 = fneg double %575
  br label %577

577:                                              ; preds = %574, %572
  %578 = phi double [ %573, %572 ], [ %576, %574 ]
  %579 = fadd double %562, %578
  %580 = call double @llvm.fmuladd.f64(double %548, double %579, double %522)
  %581 = load ptr, ptr %32, align 8, !tbaa !5
  %582 = getelementptr inbounds double, ptr %581, i64 1
  store double %580, ptr %582, align 8, !tbaa !11
  %583 = load ptr, ptr %19, align 8, !tbaa !5
  %584 = load i64, ptr %583, align 8, !tbaa !9
  %585 = sub nsw i64 %584, 1
  store i64 %585, ptr %39, align 8, !tbaa !9
  store i64 2, ptr %59, align 8, !tbaa !9
  br label %586

586:                                              ; preds = %990, %577
  %587 = load i64, ptr %59, align 8, !tbaa !9
  %588 = load i64, ptr %39, align 8, !tbaa !9
  %589 = icmp sle i64 %587, %588
  br i1 %589, label %590, label %993

590:                                              ; preds = %586
  %591 = load i64, ptr %59, align 8, !tbaa !9
  %592 = load i64, ptr %60, align 8, !tbaa !9
  %593 = load i64, ptr %34, align 8, !tbaa !9
  %594 = mul nsw i64 %592, %593
  %595 = add nsw i64 %591, %594
  store i64 %595, ptr %40, align 8, !tbaa !9
  %596 = load ptr, ptr %25, align 8, !tbaa !5
  %597 = load i64, ptr %40, align 8, !tbaa !9
  %598 = getelementptr inbounds %struct.doublecomplex, ptr %596, i64 %597
  %599 = getelementptr inbounds %struct.doublecomplex, ptr %598, i32 0, i32 0
  %600 = load double, ptr %599, align 8, !tbaa !15
  %601 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %600, ptr %601, align 8, !tbaa !15
  %602 = load ptr, ptr %25, align 8, !tbaa !5
  %603 = load i64, ptr %40, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %602, i64 %603
  %605 = getelementptr inbounds %struct.doublecomplex, ptr %604, i32 0, i32 1
  %606 = load double, ptr %605, align 8, !tbaa !17
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %606, ptr %607, align 8, !tbaa !17
  %608 = load ptr, ptr %22, align 8, !tbaa !5
  %609 = load i64, ptr %59, align 8, !tbaa !9
  %610 = sub nsw i64 %609, 1
  %611 = getelementptr inbounds %struct.doublecomplex, ptr %608, i64 %610
  call void @d_cnjg(ptr noundef %57, ptr noundef %611)
  %612 = load i64, ptr %59, align 8, !tbaa !9
  %613 = sub nsw i64 %612, 1
  %614 = load i64, ptr %60, align 8, !tbaa !9
  %615 = load i64, ptr %36, align 8, !tbaa !9
  %616 = mul nsw i64 %614, %615
  %617 = add nsw i64 %613, %616
  store i64 %617, ptr %40, align 8, !tbaa !9
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %619 = load double, ptr %618, align 8, !tbaa !15
  %620 = load ptr, ptr %27, align 8, !tbaa !5
  %621 = load i64, ptr %40, align 8, !tbaa !9
  %622 = getelementptr inbounds %struct.doublecomplex, ptr %620, i64 %621
  %623 = getelementptr inbounds %struct.doublecomplex, ptr %622, i32 0, i32 0
  %624 = load double, ptr %623, align 8, !tbaa !15
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %626 = load double, ptr %625, align 8, !tbaa !17
  %627 = load ptr, ptr %27, align 8, !tbaa !5
  %628 = load i64, ptr %40, align 8, !tbaa !9
  %629 = getelementptr inbounds %struct.doublecomplex, ptr %627, i64 %628
  %630 = getelementptr inbounds %struct.doublecomplex, ptr %629, i32 0, i32 1
  %631 = load double, ptr %630, align 8, !tbaa !17
  %632 = fmul double %626, %631
  %633 = fneg double %632
  %634 = call double @llvm.fmuladd.f64(double %619, double %624, double %633)
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %634, ptr %635, align 8, !tbaa !15
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %637 = load double, ptr %636, align 8, !tbaa !15
  %638 = load ptr, ptr %27, align 8, !tbaa !5
  %639 = load i64, ptr %40, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %638, i64 %639
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %640, i32 0, i32 1
  %642 = load double, ptr %641, align 8, !tbaa !17
  %643 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %644 = load double, ptr %643, align 8, !tbaa !17
  %645 = load ptr, ptr %27, align 8, !tbaa !5
  %646 = load i64, ptr %40, align 8, !tbaa !9
  %647 = getelementptr inbounds %struct.doublecomplex, ptr %645, i64 %646
  %648 = getelementptr inbounds %struct.doublecomplex, ptr %647, i32 0, i32 0
  %649 = load double, ptr %648, align 8, !tbaa !15
  %650 = fmul double %644, %649
  %651 = call double @llvm.fmuladd.f64(double %637, double %642, double %650)
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %651, ptr %652, align 8, !tbaa !17
  %653 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %654 = load double, ptr %653, align 8, !tbaa !15
  %655 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  store double %654, ptr %655, align 8, !tbaa !15
  %656 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %657 = load double, ptr %656, align 8, !tbaa !17
  %658 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  store double %657, ptr %658, align 8, !tbaa !17
  %659 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %659, ptr %40, align 8, !tbaa !9
  %660 = load i64, ptr %59, align 8, !tbaa !9
  %661 = load i64, ptr %60, align 8, !tbaa !9
  %662 = load i64, ptr %36, align 8, !tbaa !9
  %663 = mul nsw i64 %661, %662
  %664 = add nsw i64 %660, %663
  store i64 %664, ptr %41, align 8, !tbaa !9
  %665 = load ptr, ptr %21, align 8, !tbaa !5
  %666 = load i64, ptr %40, align 8, !tbaa !9
  %667 = getelementptr inbounds double, ptr %665, i64 %666
  %668 = load double, ptr %667, align 8, !tbaa !11
  %669 = load ptr, ptr %27, align 8, !tbaa !5
  %670 = load i64, ptr %41, align 8, !tbaa !9
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %669, i64 %670
  %672 = getelementptr inbounds %struct.doublecomplex, ptr %671, i32 0, i32 0
  %673 = load double, ptr %672, align 8, !tbaa !15
  %674 = fmul double %668, %673
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %674, ptr %675, align 8, !tbaa !15
  %676 = load ptr, ptr %21, align 8, !tbaa !5
  %677 = load i64, ptr %40, align 8, !tbaa !9
  %678 = getelementptr inbounds double, ptr %676, i64 %677
  %679 = load double, ptr %678, align 8, !tbaa !11
  %680 = load ptr, ptr %27, align 8, !tbaa !5
  %681 = load i64, ptr %41, align 8, !tbaa !9
  %682 = getelementptr inbounds %struct.doublecomplex, ptr %680, i64 %681
  %683 = getelementptr inbounds %struct.doublecomplex, ptr %682, i32 0, i32 1
  %684 = load double, ptr %683, align 8, !tbaa !17
  %685 = fmul double %679, %684
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %685, ptr %686, align 8, !tbaa !17
  %687 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %688 = load double, ptr %687, align 8, !tbaa !15
  %689 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %688, ptr %689, align 8, !tbaa !15
  %690 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %691 = load double, ptr %690, align 8, !tbaa !17
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %691, ptr %692, align 8, !tbaa !17
  %693 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %693, ptr %40, align 8, !tbaa !9
  %694 = load i64, ptr %59, align 8, !tbaa !9
  %695 = add nsw i64 %694, 1
  %696 = load i64, ptr %60, align 8, !tbaa !9
  %697 = load i64, ptr %36, align 8, !tbaa !9
  %698 = mul nsw i64 %696, %697
  %699 = add nsw i64 %695, %698
  store i64 %699, ptr %41, align 8, !tbaa !9
  %700 = load ptr, ptr %22, align 8, !tbaa !5
  %701 = load i64, ptr %40, align 8, !tbaa !9
  %702 = getelementptr inbounds %struct.doublecomplex, ptr %700, i64 %701
  %703 = getelementptr inbounds %struct.doublecomplex, ptr %702, i32 0, i32 0
  %704 = load double, ptr %703, align 8, !tbaa !15
  %705 = load ptr, ptr %27, align 8, !tbaa !5
  %706 = load i64, ptr %41, align 8, !tbaa !9
  %707 = getelementptr inbounds %struct.doublecomplex, ptr %705, i64 %706
  %708 = getelementptr inbounds %struct.doublecomplex, ptr %707, i32 0, i32 0
  %709 = load double, ptr %708, align 8, !tbaa !15
  %710 = load ptr, ptr %22, align 8, !tbaa !5
  %711 = load i64, ptr %40, align 8, !tbaa !9
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %710, i64 %711
  %713 = getelementptr inbounds %struct.doublecomplex, ptr %712, i32 0, i32 1
  %714 = load double, ptr %713, align 8, !tbaa !17
  %715 = load ptr, ptr %27, align 8, !tbaa !5
  %716 = load i64, ptr %41, align 8, !tbaa !9
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %715, i64 %716
  %718 = getelementptr inbounds %struct.doublecomplex, ptr %717, i32 0, i32 1
  %719 = load double, ptr %718, align 8, !tbaa !17
  %720 = fmul double %714, %719
  %721 = fneg double %720
  %722 = call double @llvm.fmuladd.f64(double %704, double %709, double %721)
  %723 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %722, ptr %723, align 8, !tbaa !15
  %724 = load ptr, ptr %22, align 8, !tbaa !5
  %725 = load i64, ptr %40, 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 !15
  %729 = load ptr, ptr %27, align 8, !tbaa !5
  %730 = load i64, ptr %41, align 8, !tbaa !9
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %729, i64 %730
  %732 = getelementptr inbounds %struct.doublecomplex, ptr %731, i32 0, i32 1
  %733 = load double, ptr %732, align 8, !tbaa !17
  %734 = load ptr, ptr %22, align 8, !tbaa !5
  %735 = load i64, ptr %40, align 8, !tbaa !9
  %736 = getelementptr inbounds %struct.doublecomplex, ptr %734, i64 %735
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %736, i32 0, i32 1
  %738 = load double, ptr %737, align 8, !tbaa !17
  %739 = load ptr, ptr %27, align 8, !tbaa !5
  %740 = load i64, ptr %41, align 8, !tbaa !9
  %741 = getelementptr inbounds %struct.doublecomplex, ptr %739, i64 %740
  %742 = getelementptr inbounds %struct.doublecomplex, ptr %741, i32 0, i32 0
  %743 = load double, ptr %742, align 8, !tbaa !15
  %744 = fmul double %738, %743
  %745 = call double @llvm.fmuladd.f64(double %728, double %733, double %744)
  %746 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %745, ptr %746, align 8, !tbaa !17
  %747 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %748 = load double, ptr %747, align 8, !tbaa !15
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %748, ptr %749, align 8, !tbaa !15
  %750 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %751 = load double, ptr %750, align 8, !tbaa !17
  %752 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %751, ptr %752, align 8, !tbaa !17
  %753 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %753, ptr %40, align 8, !tbaa !9
  %754 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %755 = load double, ptr %754, align 8, !tbaa !15
  %756 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  %757 = load double, ptr %756, align 8, !tbaa !15
  %758 = fsub double %755, %757
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  store double %758, ptr %759, align 8, !tbaa !15
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %761 = load double, ptr %760, align 8, !tbaa !17
  %762 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  %763 = load double, ptr %762, align 8, !tbaa !17
  %764 = fsub double %761, %763
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  store double %764, ptr %765, align 8, !tbaa !17
  %766 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %767 = load double, ptr %766, align 8, !tbaa !15
  %768 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %769 = load double, ptr %768, align 8, !tbaa !15
  %770 = fsub double %767, %769
  %771 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %770, ptr %771, align 8, !tbaa !15
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %773 = load double, ptr %772, align 8, !tbaa !17
  %774 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %775 = load double, ptr %774, align 8, !tbaa !17
  %776 = fsub double %773, %775
  %777 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %776, ptr %777, align 8, !tbaa !17
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %779 = load double, ptr %778, align 8, !tbaa !15
  %780 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %781 = load double, ptr %780, align 8, !tbaa !15
  %782 = fsub double %779, %781
  %783 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %782, ptr %783, align 8, !tbaa !15
  %784 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %785 = load double, ptr %784, align 8, !tbaa !17
  %786 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %787 = load double, ptr %786, align 8, !tbaa !17
  %788 = fsub double %785, %787
  %789 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %788, ptr %789, align 8, !tbaa !17
  %790 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %791 = load double, ptr %790, align 8, !tbaa !15
  %792 = load ptr, ptr %31, align 8, !tbaa !5
  %793 = load i64, ptr %40, align 8, !tbaa !9
  %794 = getelementptr inbounds %struct.doublecomplex, ptr %792, i64 %793
  %795 = getelementptr inbounds %struct.doublecomplex, ptr %794, i32 0, i32 0
  store double %791, ptr %795, align 8, !tbaa !15
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %797 = load double, ptr %796, align 8, !tbaa !17
  %798 = load ptr, ptr %31, align 8, !tbaa !5
  %799 = load i64, ptr %40, align 8, !tbaa !9
  %800 = getelementptr inbounds %struct.doublecomplex, ptr %798, i64 %799
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %800, i32 0, i32 1
  store double %797, ptr %801, align 8, !tbaa !17
  %802 = load i64, ptr %59, align 8, !tbaa !9
  %803 = sub nsw i64 %802, 1
  store i64 %803, ptr %40, align 8, !tbaa !9
  %804 = load i64, ptr %59, align 8, !tbaa !9
  %805 = sub nsw i64 %804, 1
  %806 = load i64, ptr %60, align 8, !tbaa !9
  %807 = load i64, ptr %36, align 8, !tbaa !9
  %808 = mul nsw i64 %806, %807
  %809 = add nsw i64 %805, %808
  store i64 %809, ptr %41, align 8, !tbaa !9
  %810 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %810, ptr %42, align 8, !tbaa !9
  %811 = load i64, ptr %59, align 8, !tbaa !9
  %812 = add nsw i64 %811, 1
  %813 = load i64, ptr %60, align 8, !tbaa !9
  %814 = load i64, ptr %36, align 8, !tbaa !9
  %815 = mul nsw i64 %813, %814
  %816 = add nsw i64 %812, %815
  store i64 %816, ptr %43, align 8, !tbaa !9
  %817 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %818 = load double, ptr %817, align 8, !tbaa !15
  store double %818, ptr %44, align 8, !tbaa !11
  %819 = load double, ptr %44, align 8, !tbaa !11
  %820 = fcmp oge double %819, 0.000000e+00
  br i1 %820, label %821, label %823

821:                                              ; preds = %590
  %822 = load double, ptr %44, align 8, !tbaa !11
  br label %826

823:                                              ; preds = %590
  %824 = load double, ptr %44, align 8, !tbaa !11
  %825 = fneg double %824
  br label %826

826:                                              ; preds = %823, %821
  %827 = phi double [ %822, %821 ], [ %825, %823 ]
  %828 = call double @d_imag(ptr noundef %62)
  store double %828, ptr %45, align 8, !tbaa !11
  %829 = load double, ptr %45, align 8, !tbaa !11
  %830 = fcmp oge double %829, 0.000000e+00
  br i1 %830, label %831, label %833

831:                                              ; preds = %826
  %832 = load double, ptr %45, align 8, !tbaa !11
  br label %836

833:                                              ; preds = %826
  %834 = load double, ptr %45, align 8, !tbaa !11
  %835 = fneg double %834
  br label %836

836:                                              ; preds = %833, %831
  %837 = phi double [ %832, %831 ], [ %835, %833 ]
  %838 = fadd double %827, %837
  %839 = load ptr, ptr %22, align 8, !tbaa !5
  %840 = load i64, ptr %40, align 8, !tbaa !9
  %841 = getelementptr inbounds %struct.doublecomplex, ptr %839, i64 %840
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %841, i32 0, i32 0
  %843 = load double, ptr %842, align 8, !tbaa !15
  store double %843, ptr %46, align 8, !tbaa !11
  %844 = load double, ptr %46, align 8, !tbaa !11
  %845 = fcmp oge double %844, 0.000000e+00
  br i1 %845, label %846, label %848

846:                                              ; preds = %836
  %847 = load double, ptr %46, align 8, !tbaa !11
  br label %851

848:                                              ; preds = %836
  %849 = load double, ptr %46, align 8, !tbaa !11
  %850 = fneg double %849
  br label %851

851:                                              ; preds = %848, %846
  %852 = phi double [ %847, %846 ], [ %850, %848 ]
  %853 = load ptr, ptr %22, align 8, !tbaa !5
  %854 = load i64, ptr %59, align 8, !tbaa !9
  %855 = sub nsw i64 %854, 1
  %856 = getelementptr inbounds %struct.doublecomplex, ptr %853, i64 %855
  %857 = call double @d_imag(ptr noundef %856)
  store double %857, ptr %47, align 8, !tbaa !11
  %858 = load double, ptr %47, align 8, !tbaa !11
  %859 = fcmp oge double %858, 0.000000e+00
  br i1 %859, label %860, label %862

860:                                              ; preds = %851
  %861 = load double, ptr %47, align 8, !tbaa !11
  br label %865

862:                                              ; preds = %851
  %863 = load double, ptr %47, align 8, !tbaa !11
  %864 = fneg double %863
  br label %865

865:                                              ; preds = %862, %860
  %866 = phi double [ %861, %860 ], [ %864, %862 ]
  %867 = fadd double %852, %866
  %868 = load ptr, ptr %27, align 8, !tbaa !5
  %869 = load i64, ptr %41, align 8, !tbaa !9
  %870 = getelementptr inbounds %struct.doublecomplex, ptr %868, i64 %869
  %871 = getelementptr inbounds %struct.doublecomplex, ptr %870, i32 0, i32 0
  %872 = load double, ptr %871, align 8, !tbaa !15
  store double %872, ptr %48, align 8, !tbaa !11
  %873 = load double, ptr %48, align 8, !tbaa !11
  %874 = fcmp oge double %873, 0.000000e+00
  br i1 %874, label %875, label %877

875:                                              ; preds = %865
  %876 = load double, ptr %48, align 8, !tbaa !11
  br label %880

877:                                              ; preds = %865
  %878 = load double, ptr %48, align 8, !tbaa !11
  %879 = fneg double %878
  br label %880

880:                                              ; preds = %877, %875
  %881 = phi double [ %876, %875 ], [ %879, %877 ]
  %882 = load ptr, ptr %27, align 8, !tbaa !5
  %883 = load i64, ptr %59, align 8, !tbaa !9
  %884 = sub nsw i64 %883, 1
  %885 = load i64, ptr %60, align 8, !tbaa !9
  %886 = load i64, ptr %36, align 8, !tbaa !9
  %887 = mul nsw i64 %885, %886
  %888 = add nsw i64 %884, %887
  %889 = getelementptr inbounds %struct.doublecomplex, ptr %882, i64 %888
  %890 = call double @d_imag(ptr noundef %889)
  store double %890, ptr %49, align 8, !tbaa !11
  %891 = load double, ptr %49, align 8, !tbaa !11
  %892 = fcmp oge double %891, 0.000000e+00
  br i1 %892, label %893, label %895

893:                                              ; preds = %880
  %894 = load double, ptr %49, align 8, !tbaa !11
  br label %898

895:                                              ; preds = %880
  %896 = load double, ptr %49, align 8, !tbaa !11
  %897 = fneg double %896
  br label %898

898:                                              ; preds = %895, %893
  %899 = phi double [ %894, %893 ], [ %897, %895 ]
  %900 = fadd double %881, %899
  %901 = call double @llvm.fmuladd.f64(double %867, double %900, double %838)
  %902 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %903 = load double, ptr %902, align 8, !tbaa !15
  store double %903, ptr %50, align 8, !tbaa !11
  %904 = load double, ptr %50, align 8, !tbaa !11
  %905 = fcmp oge double %904, 0.000000e+00
  br i1 %905, label %906, label %908

906:                                              ; preds = %898
  %907 = load double, ptr %50, align 8, !tbaa !11
  br label %911

908:                                              ; preds = %898
  %909 = load double, ptr %50, align 8, !tbaa !11
  %910 = fneg double %909
  br label %911

911:                                              ; preds = %908, %906
  %912 = phi double [ %907, %906 ], [ %910, %908 ]
  %913 = call double @d_imag(ptr noundef %64)
  store double %913, ptr %51, align 8, !tbaa !11
  %914 = load double, ptr %51, align 8, !tbaa !11
  %915 = fcmp oge double %914, 0.000000e+00
  br i1 %915, label %916, label %918

916:                                              ; preds = %911
  %917 = load double, ptr %51, align 8, !tbaa !11
  br label %921

918:                                              ; preds = %911
  %919 = load double, ptr %51, align 8, !tbaa !11
  %920 = fneg double %919
  br label %921

921:                                              ; preds = %918, %916
  %922 = phi double [ %917, %916 ], [ %920, %918 ]
  %923 = fadd double %912, %922
  %924 = fadd double %901, %923
  %925 = load ptr, ptr %22, align 8, !tbaa !5
  %926 = load i64, ptr %42, align 8, !tbaa !9
  %927 = getelementptr inbounds %struct.doublecomplex, ptr %925, i64 %926
  %928 = getelementptr inbounds %struct.doublecomplex, ptr %927, i32 0, i32 0
  %929 = load double, ptr %928, align 8, !tbaa !15
  store double %929, ptr %52, align 8, !tbaa !11
  %930 = load double, ptr %52, align 8, !tbaa !11
  %931 = fcmp oge double %930, 0.000000e+00
  br i1 %931, label %932, label %934

932:                                              ; preds = %921
  %933 = load double, ptr %52, align 8, !tbaa !11
  br label %937

934:                                              ; preds = %921
  %935 = load double, ptr %52, align 8, !tbaa !11
  %936 = fneg double %935
  br label %937

937:                                              ; preds = %934, %932
  %938 = phi double [ %933, %932 ], [ %936, %934 ]
  %939 = load ptr, ptr %22, align 8, !tbaa !5
  %940 = load i64, ptr %59, align 8, !tbaa !9
  %941 = getelementptr inbounds %struct.doublecomplex, ptr %939, i64 %940
  %942 = call double @d_imag(ptr noundef %941)
  store double %942, ptr %53, align 8, !tbaa !11
  %943 = load double, ptr %53, align 8, !tbaa !11
  %944 = fcmp oge double %943, 0.000000e+00
  br i1 %944, label %945, label %947

945:                                              ; preds = %937
  %946 = load double, ptr %53, align 8, !tbaa !11
  br label %950

947:                                              ; preds = %937
  %948 = load double, ptr %53, align 8, !tbaa !11
  %949 = fneg double %948
  br label %950

950:                                              ; preds = %947, %945
  %951 = phi double [ %946, %945 ], [ %949, %947 ]
  %952 = fadd double %938, %951
  %953 = load ptr, ptr %27, align 8, !tbaa !5
  %954 = load i64, ptr %43, align 8, !tbaa !9
  %955 = getelementptr inbounds %struct.doublecomplex, ptr %953, i64 %954
  %956 = getelementptr inbounds %struct.doublecomplex, ptr %955, i32 0, i32 0
  %957 = load double, ptr %956, align 8, !tbaa !15
  store double %957, ptr %54, align 8, !tbaa !11
  %958 = load double, ptr %54, align 8, !tbaa !11
  %959 = fcmp oge double %958, 0.000000e+00
  br i1 %959, label %960, label %962

960:                                              ; preds = %950
  %961 = load double, ptr %54, align 8, !tbaa !11
  br label %965

962:                                              ; preds = %950
  %963 = load double, ptr %54, align 8, !tbaa !11
  %964 = fneg double %963
  br label %965

965:                                              ; preds = %962, %960
  %966 = phi double [ %961, %960 ], [ %964, %962 ]
  %967 = load ptr, ptr %27, align 8, !tbaa !5
  %968 = load i64, ptr %59, align 8, !tbaa !9
  %969 = add nsw i64 %968, 1
  %970 = load i64, ptr %60, align 8, !tbaa !9
  %971 = load i64, ptr %36, align 8, !tbaa !9
  %972 = mul nsw i64 %970, %971
  %973 = add nsw i64 %969, %972
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %967, i64 %973
  %975 = call double @d_imag(ptr noundef %974)
  store double %975, ptr %55, align 8, !tbaa !11
  %976 = load double, ptr %55, align 8, !tbaa !11
  %977 = fcmp oge double %976, 0.000000e+00
  br i1 %977, label %978, label %980

978:                                              ; preds = %965
  %979 = load double, ptr %55, align 8, !tbaa !11
  br label %983

980:                                              ; preds = %965
  %981 = load double, ptr %55, align 8, !tbaa !11
  %982 = fneg double %981
  br label %983

983:                                              ; preds = %980, %978
  %984 = phi double [ %979, %978 ], [ %982, %980 ]
  %985 = fadd double %966, %984
  %986 = call double @llvm.fmuladd.f64(double %952, double %985, double %924)
  %987 = load ptr, ptr %32, align 8, !tbaa !5
  %988 = load i64, ptr %59, align 8, !tbaa !9
  %989 = getelementptr inbounds double, ptr %987, i64 %988
  store double %986, ptr %989, align 8, !tbaa !11
  br label %990

990:                                              ; preds = %983
  %991 = load i64, ptr %59, align 8, !tbaa !9
  %992 = add nsw i64 %991, 1
  store i64 %992, ptr %59, align 8, !tbaa !9
  br label %586, !llvm.loop !18

993:                                              ; preds = %586
  %994 = load ptr, ptr %19, align 8, !tbaa !5
  %995 = load i64, ptr %994, align 8, !tbaa !9
  %996 = load i64, ptr %60, align 8, !tbaa !9
  %997 = load i64, ptr %34, align 8, !tbaa !9
  %998 = mul nsw i64 %996, %997
  %999 = add nsw i64 %995, %998
  store i64 %999, ptr %39, align 8, !tbaa !9
  %1000 = load ptr, ptr %25, align 8, !tbaa !5
  %1001 = load i64, ptr %39, align 8, !tbaa !9
  %1002 = getelementptr inbounds %struct.doublecomplex, ptr %1000, i64 %1001
  %1003 = getelementptr inbounds %struct.doublecomplex, ptr %1002, i32 0, i32 0
  %1004 = load double, ptr %1003, align 8, !tbaa !15
  %1005 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %1004, ptr %1005, align 8, !tbaa !15
  %1006 = load ptr, ptr %25, align 8, !tbaa !5
  %1007 = load i64, ptr %39, align 8, !tbaa !9
  %1008 = getelementptr inbounds %struct.doublecomplex, ptr %1006, i64 %1007
  %1009 = getelementptr inbounds %struct.doublecomplex, ptr %1008, i32 0, i32 1
  %1010 = load double, ptr %1009, align 8, !tbaa !17
  %1011 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %1010, ptr %1011, align 8, !tbaa !17
  %1012 = load ptr, ptr %22, align 8, !tbaa !5
  %1013 = load ptr, ptr %19, align 8, !tbaa !5
  %1014 = load i64, ptr %1013, align 8, !tbaa !9
  %1015 = sub nsw i64 %1014, 1
  %1016 = getelementptr inbounds %struct.doublecomplex, ptr %1012, i64 %1015
  call void @d_cnjg(ptr noundef %57, ptr noundef %1016)
  %1017 = load ptr, ptr %19, align 8, !tbaa !5
  %1018 = load i64, ptr %1017, align 8, !tbaa !9
  %1019 = sub nsw i64 %1018, 1
  %1020 = load i64, ptr %60, align 8, !tbaa !9
  %1021 = load i64, ptr %36, align 8, !tbaa !9
  %1022 = mul nsw i64 %1020, %1021
  %1023 = add nsw i64 %1019, %1022
  store i64 %1023, ptr %39, align 8, !tbaa !9
  %1024 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1025 = load double, ptr %1024, align 8, !tbaa !15
  %1026 = load ptr, ptr %27, align 8, !tbaa !5
  %1027 = load i64, ptr %39, align 8, !tbaa !9
  %1028 = getelementptr inbounds %struct.doublecomplex, ptr %1026, i64 %1027
  %1029 = getelementptr inbounds %struct.doublecomplex, ptr %1028, i32 0, i32 0
  %1030 = load double, ptr %1029, align 8, !tbaa !15
  %1031 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1032 = load double, ptr %1031, align 8, !tbaa !17
  %1033 = load ptr, ptr %27, align 8, !tbaa !5
  %1034 = load i64, ptr %39, align 8, !tbaa !9
  %1035 = getelementptr inbounds %struct.doublecomplex, ptr %1033, i64 %1034
  %1036 = getelementptr inbounds %struct.doublecomplex, ptr %1035, i32 0, i32 1
  %1037 = load double, ptr %1036, align 8, !tbaa !17
  %1038 = fmul double %1032, %1037
  %1039 = fneg double %1038
  %1040 = call double @llvm.fmuladd.f64(double %1025, double %1030, double %1039)
  %1041 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1040, ptr %1041, align 8, !tbaa !15
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1043 = load double, ptr %1042, align 8, !tbaa !15
  %1044 = load ptr, ptr %27, align 8, !tbaa !5
  %1045 = load i64, ptr %39, align 8, !tbaa !9
  %1046 = getelementptr inbounds %struct.doublecomplex, ptr %1044, i64 %1045
  %1047 = getelementptr inbounds %struct.doublecomplex, ptr %1046, i32 0, i32 1
  %1048 = load double, ptr %1047, align 8, !tbaa !17
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1050 = load double, ptr %1049, align 8, !tbaa !17
  %1051 = load ptr, ptr %27, align 8, !tbaa !5
  %1052 = load i64, ptr %39, align 8, !tbaa !9
  %1053 = getelementptr inbounds %struct.doublecomplex, ptr %1051, i64 %1052
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %1053, i32 0, i32 0
  %1055 = load double, ptr %1054, align 8, !tbaa !15
  %1056 = fmul double %1050, %1055
  %1057 = call double @llvm.fmuladd.f64(double %1043, double %1048, double %1056)
  %1058 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1057, ptr %1058, align 8, !tbaa !17
  %1059 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1060 = load double, ptr %1059, align 8, !tbaa !15
  %1061 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  store double %1060, ptr %1061, align 8, !tbaa !15
  %1062 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1063 = load double, ptr %1062, align 8, !tbaa !17
  %1064 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  store double %1063, ptr %1064, align 8, !tbaa !17
  %1065 = load ptr, ptr %19, align 8, !tbaa !5
  %1066 = load i64, ptr %1065, align 8, !tbaa !9
  store i64 %1066, ptr %39, align 8, !tbaa !9
  %1067 = load ptr, ptr %19, align 8, !tbaa !5
  %1068 = load i64, ptr %1067, align 8, !tbaa !9
  %1069 = load i64, ptr %60, align 8, !tbaa !9
  %1070 = load i64, ptr %36, align 8, !tbaa !9
  %1071 = mul nsw i64 %1069, %1070
  %1072 = add nsw i64 %1068, %1071
  store i64 %1072, ptr %40, align 8, !tbaa !9
  %1073 = load ptr, ptr %21, align 8, !tbaa !5
  %1074 = load i64, ptr %39, align 8, !tbaa !9
  %1075 = getelementptr inbounds double, ptr %1073, i64 %1074
  %1076 = load double, ptr %1075, align 8, !tbaa !11
  %1077 = load ptr, ptr %27, align 8, !tbaa !5
  %1078 = load i64, ptr %40, align 8, !tbaa !9
  %1079 = getelementptr inbounds %struct.doublecomplex, ptr %1077, i64 %1078
  %1080 = getelementptr inbounds %struct.doublecomplex, ptr %1079, i32 0, i32 0
  %1081 = load double, ptr %1080, align 8, !tbaa !15
  %1082 = fmul double %1076, %1081
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1082, ptr %1083, align 8, !tbaa !15
  %1084 = load ptr, ptr %21, align 8, !tbaa !5
  %1085 = load i64, ptr %39, align 8, !tbaa !9
  %1086 = getelementptr inbounds double, ptr %1084, i64 %1085
  %1087 = load double, ptr %1086, align 8, !tbaa !11
  %1088 = load ptr, ptr %27, align 8, !tbaa !5
  %1089 = load i64, ptr %40, align 8, !tbaa !9
  %1090 = getelementptr inbounds %struct.doublecomplex, ptr %1088, i64 %1089
  %1091 = getelementptr inbounds %struct.doublecomplex, ptr %1090, i32 0, i32 1
  %1092 = load double, ptr %1091, align 8, !tbaa !17
  %1093 = fmul double %1087, %1092
  %1094 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1093, ptr %1094, align 8, !tbaa !17
  %1095 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1096 = load double, ptr %1095, align 8, !tbaa !15
  %1097 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %1096, ptr %1097, align 8, !tbaa !15
  %1098 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1099 = load double, ptr %1098, align 8, !tbaa !17
  %1100 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %1099, ptr %1100, align 8, !tbaa !17
  %1101 = load ptr, ptr %19, align 8, !tbaa !5
  %1102 = load i64, ptr %1101, align 8, !tbaa !9
  store i64 %1102, ptr %39, align 8, !tbaa !9
  %1103 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1104 = load double, ptr %1103, align 8, !tbaa !15
  %1105 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  %1106 = load double, ptr %1105, align 8, !tbaa !15
  %1107 = fsub double %1104, %1106
  %1108 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1107, ptr %1108, align 8, !tbaa !15
  %1109 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %1110 = load double, ptr %1109, align 8, !tbaa !17
  %1111 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  %1112 = load double, ptr %1111, align 8, !tbaa !17
  %1113 = fsub double %1110, %1112
  %1114 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %1113, ptr %1114, align 8, !tbaa !17
  %1115 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1116 = load double, ptr %1115, align 8, !tbaa !15
  %1117 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1118 = load double, ptr %1117, align 8, !tbaa !15
  %1119 = fsub double %1116, %1118
  %1120 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1119, ptr %1120, align 8, !tbaa !15
  %1121 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1122 = load double, ptr %1121, align 8, !tbaa !17
  %1123 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %1124 = load double, ptr %1123, align 8, !tbaa !17
  %1125 = fsub double %1122, %1124
  %1126 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1125, ptr %1126, align 8, !tbaa !17
  %1127 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1128 = load double, ptr %1127, align 8, !tbaa !15
  %1129 = load ptr, ptr %31, align 8, !tbaa !5
  %1130 = load i64, ptr %39, align 8, !tbaa !9
  %1131 = getelementptr inbounds %struct.doublecomplex, ptr %1129, i64 %1130
  %1132 = getelementptr inbounds %struct.doublecomplex, ptr %1131, i32 0, i32 0
  store double %1128, ptr %1132, align 8, !tbaa !15
  %1133 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1134 = load double, ptr %1133, align 8, !tbaa !17
  %1135 = load ptr, ptr %31, align 8, !tbaa !5
  %1136 = load i64, ptr %39, align 8, !tbaa !9
  %1137 = getelementptr inbounds %struct.doublecomplex, ptr %1135, i64 %1136
  %1138 = getelementptr inbounds %struct.doublecomplex, ptr %1137, i32 0, i32 1
  store double %1134, ptr %1138, align 8, !tbaa !17
  %1139 = load ptr, ptr %19, align 8, !tbaa !5
  %1140 = load i64, ptr %1139, align 8, !tbaa !9
  %1141 = sub nsw i64 %1140, 1
  store i64 %1141, ptr %39, align 8, !tbaa !9
  %1142 = load ptr, ptr %19, align 8, !tbaa !5
  %1143 = load i64, ptr %1142, align 8, !tbaa !9
  %1144 = sub nsw i64 %1143, 1
  %1145 = load i64, ptr %60, align 8, !tbaa !9
  %1146 = load i64, ptr %36, align 8, !tbaa !9
  %1147 = mul nsw i64 %1145, %1146
  %1148 = add nsw i64 %1144, %1147
  store i64 %1148, ptr %40, align 8, !tbaa !9
  %1149 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1150 = load double, ptr %1149, align 8, !tbaa !15
  store double %1150, ptr %44, align 8, !tbaa !11
  %1151 = load double, ptr %44, align 8, !tbaa !11
  %1152 = fcmp oge double %1151, 0.000000e+00
  br i1 %1152, label %1153, label %1155

1153:                                             ; preds = %993
  %1154 = load double, ptr %44, align 8, !tbaa !11
  br label %1158

1155:                                             ; preds = %993
  %1156 = load double, ptr %44, align 8, !tbaa !11
  %1157 = fneg double %1156
  br label %1158

1158:                                             ; preds = %1155, %1153
  %1159 = phi double [ %1154, %1153 ], [ %1157, %1155 ]
  %1160 = call double @d_imag(ptr noundef %62)
  store double %1160, ptr %45, align 8, !tbaa !11
  %1161 = load double, ptr %45, align 8, !tbaa !11
  %1162 = fcmp oge double %1161, 0.000000e+00
  br i1 %1162, label %1163, label %1165

1163:                                             ; preds = %1158
  %1164 = load double, ptr %45, align 8, !tbaa !11
  br label %1168

1165:                                             ; preds = %1158
  %1166 = load double, ptr %45, align 8, !tbaa !11
  %1167 = fneg double %1166
  br label %1168

1168:                                             ; preds = %1165, %1163
  %1169 = phi double [ %1164, %1163 ], [ %1167, %1165 ]
  %1170 = fadd double %1159, %1169
  %1171 = load ptr, ptr %22, align 8, !tbaa !5
  %1172 = load i64, ptr %39, align 8, !tbaa !9
  %1173 = getelementptr inbounds %struct.doublecomplex, ptr %1171, i64 %1172
  %1174 = getelementptr inbounds %struct.doublecomplex, ptr %1173, i32 0, i32 0
  %1175 = load double, ptr %1174, align 8, !tbaa !15
  store double %1175, ptr %46, align 8, !tbaa !11
  %1176 = load double, ptr %46, align 8, !tbaa !11
  %1177 = fcmp oge double %1176, 0.000000e+00
  br i1 %1177, label %1178, label %1180

1178:                                             ; preds = %1168
  %1179 = load double, ptr %46, align 8, !tbaa !11
  br label %1183

1180:                                             ; preds = %1168
  %1181 = load double, ptr %46, align 8, !tbaa !11
  %1182 = fneg double %1181
  br label %1183

1183:                                             ; preds = %1180, %1178
  %1184 = phi double [ %1179, %1178 ], [ %1182, %1180 ]
  %1185 = load ptr, ptr %22, align 8, !tbaa !5
  %1186 = load ptr, ptr %19, align 8, !tbaa !5
  %1187 = load i64, ptr %1186, align 8, !tbaa !9
  %1188 = sub nsw i64 %1187, 1
  %1189 = getelementptr inbounds %struct.doublecomplex, ptr %1185, i64 %1188
  %1190 = call double @d_imag(ptr noundef %1189)
  store double %1190, ptr %47, align 8, !tbaa !11
  %1191 = load double, ptr %47, align 8, !tbaa !11
  %1192 = fcmp oge double %1191, 0.000000e+00
  br i1 %1192, label %1193, label %1195

1193:                                             ; preds = %1183
  %1194 = load double, ptr %47, align 8, !tbaa !11
  br label %1198

1195:                                             ; preds = %1183
  %1196 = load double, ptr %47, align 8, !tbaa !11
  %1197 = fneg double %1196
  br label %1198

1198:                                             ; preds = %1195, %1193
  %1199 = phi double [ %1194, %1193 ], [ %1197, %1195 ]
  %1200 = fadd double %1184, %1199
  %1201 = load ptr, ptr %27, align 8, !tbaa !5
  %1202 = load i64, ptr %40, align 8, !tbaa !9
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %1201, i64 %1202
  %1204 = getelementptr inbounds %struct.doublecomplex, ptr %1203, i32 0, i32 0
  %1205 = load double, ptr %1204, align 8, !tbaa !15
  store double %1205, ptr %48, align 8, !tbaa !11
  %1206 = load double, ptr %48, align 8, !tbaa !11
  %1207 = fcmp oge double %1206, 0.000000e+00
  br i1 %1207, label %1208, label %1210

1208:                                             ; preds = %1198
  %1209 = load double, ptr %48, align 8, !tbaa !11
  br label %1213

1210:                                             ; preds = %1198
  %1211 = load double, ptr %48, align 8, !tbaa !11
  %1212 = fneg double %1211
  br label %1213

1213:                                             ; preds = %1210, %1208
  %1214 = phi double [ %1209, %1208 ], [ %1212, %1210 ]
  %1215 = load ptr, ptr %27, align 8, !tbaa !5
  %1216 = load ptr, ptr %19, align 8, !tbaa !5
  %1217 = load i64, ptr %1216, align 8, !tbaa !9
  %1218 = sub nsw i64 %1217, 1
  %1219 = load i64, ptr %60, align 8, !tbaa !9
  %1220 = load i64, ptr %36, align 8, !tbaa !9
  %1221 = mul nsw i64 %1219, %1220
  %1222 = add nsw i64 %1218, %1221
  %1223 = getelementptr inbounds %struct.doublecomplex, ptr %1215, i64 %1222
  %1224 = call double @d_imag(ptr noundef %1223)
  store double %1224, ptr %49, align 8, !tbaa !11
  %1225 = load double, ptr %49, align 8, !tbaa !11
  %1226 = fcmp oge double %1225, 0.000000e+00
  br i1 %1226, label %1227, label %1229

1227:                                             ; preds = %1213
  %1228 = load double, ptr %49, align 8, !tbaa !11
  br label %1232

1229:                                             ; preds = %1213
  %1230 = load double, ptr %49, align 8, !tbaa !11
  %1231 = fneg double %1230
  br label %1232

1232:                                             ; preds = %1229, %1227
  %1233 = phi double [ %1228, %1227 ], [ %1231, %1229 ]
  %1234 = fadd double %1214, %1233
  %1235 = call double @llvm.fmuladd.f64(double %1200, double %1234, double %1170)
  %1236 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1237 = load double, ptr %1236, align 8, !tbaa !15
  store double %1237, ptr %50, align 8, !tbaa !11
  %1238 = load double, ptr %50, align 8, !tbaa !11
  %1239 = fcmp oge double %1238, 0.000000e+00
  br i1 %1239, label %1240, label %1242

1240:                                             ; preds = %1232
  %1241 = load double, ptr %50, align 8, !tbaa !11
  br label %1245

1242:                                             ; preds = %1232
  %1243 = load double, ptr %50, align 8, !tbaa !11
  %1244 = fneg double %1243
  br label %1245

1245:                                             ; preds = %1242, %1240
  %1246 = phi double [ %1241, %1240 ], [ %1244, %1242 ]
  %1247 = call double @d_imag(ptr noundef %64)
  store double %1247, ptr %51, align 8, !tbaa !11
  %1248 = load double, ptr %51, align 8, !tbaa !11
  %1249 = fcmp oge double %1248, 0.000000e+00
  br i1 %1249, label %1250, label %1252

1250:                                             ; preds = %1245
  %1251 = load double, ptr %51, align 8, !tbaa !11
  br label %1255

1252:                                             ; preds = %1245
  %1253 = load double, ptr %51, align 8, !tbaa !11
  %1254 = fneg double %1253
  br label %1255

1255:                                             ; preds = %1252, %1250
  %1256 = phi double [ %1251, %1250 ], [ %1254, %1252 ]
  %1257 = fadd double %1246, %1256
  %1258 = fadd double %1235, %1257
  %1259 = load ptr, ptr %32, align 8, !tbaa !5
  %1260 = load ptr, ptr %19, align 8, !tbaa !5
  %1261 = load i64, ptr %1260, align 8, !tbaa !9
  %1262 = getelementptr inbounds double, ptr %1259, i64 %1261
  store double %1258, ptr %1262, align 8, !tbaa !11
  br label %1263

1263:                                             ; preds = %1255, %334
  br label %2312

1264:                                             ; preds = %217
  %1265 = load ptr, ptr %19, align 8, !tbaa !5
  %1266 = load i64, ptr %1265, align 8, !tbaa !9
  %1267 = icmp eq i64 %1266, 1
  br i1 %1267, label %1268, label %1384

1268:                                             ; preds = %1264
  %1269 = load i64, ptr %60, align 8, !tbaa !9
  %1270 = load i64, ptr %34, align 8, !tbaa !9
  %1271 = mul nsw i64 %1269, %1270
  %1272 = add nsw i64 %1271, 1
  store i64 %1272, ptr %39, align 8, !tbaa !9
  %1273 = load ptr, ptr %25, align 8, !tbaa !5
  %1274 = load i64, ptr %39, align 8, !tbaa !9
  %1275 = getelementptr inbounds %struct.doublecomplex, ptr %1273, i64 %1274
  %1276 = getelementptr inbounds %struct.doublecomplex, ptr %1275, i32 0, i32 0
  %1277 = load double, ptr %1276, align 8, !tbaa !15
  %1278 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %1277, ptr %1278, align 8, !tbaa !15
  %1279 = load ptr, ptr %25, align 8, !tbaa !5
  %1280 = load i64, ptr %39, align 8, !tbaa !9
  %1281 = getelementptr inbounds %struct.doublecomplex, ptr %1279, i64 %1280
  %1282 = getelementptr inbounds %struct.doublecomplex, ptr %1281, i32 0, i32 1
  %1283 = load double, ptr %1282, align 8, !tbaa !17
  %1284 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %1283, ptr %1284, align 8, !tbaa !17
  %1285 = load i64, ptr %60, align 8, !tbaa !9
  %1286 = load i64, ptr %36, align 8, !tbaa !9
  %1287 = mul nsw i64 %1285, %1286
  %1288 = add nsw i64 %1287, 1
  store i64 %1288, ptr %39, align 8, !tbaa !9
  %1289 = load ptr, ptr %21, align 8, !tbaa !5
  %1290 = getelementptr inbounds double, ptr %1289, i64 1
  %1291 = load double, ptr %1290, align 8, !tbaa !11
  %1292 = load ptr, ptr %27, align 8, !tbaa !5
  %1293 = load i64, ptr %39, align 8, !tbaa !9
  %1294 = getelementptr inbounds %struct.doublecomplex, ptr %1292, i64 %1293
  %1295 = getelementptr inbounds %struct.doublecomplex, ptr %1294, i32 0, i32 0
  %1296 = load double, ptr %1295, align 8, !tbaa !15
  %1297 = fmul double %1291, %1296
  %1298 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1297, ptr %1298, align 8, !tbaa !15
  %1299 = load ptr, ptr %21, align 8, !tbaa !5
  %1300 = getelementptr inbounds double, ptr %1299, i64 1
  %1301 = load double, ptr %1300, align 8, !tbaa !11
  %1302 = load ptr, ptr %27, align 8, !tbaa !5
  %1303 = load i64, ptr %39, align 8, !tbaa !9
  %1304 = getelementptr inbounds %struct.doublecomplex, ptr %1302, i64 %1303
  %1305 = getelementptr inbounds %struct.doublecomplex, ptr %1304, i32 0, i32 1
  %1306 = load double, ptr %1305, align 8, !tbaa !17
  %1307 = fmul double %1301, %1306
  %1308 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1307, ptr %1308, align 8, !tbaa !17
  %1309 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1310 = load double, ptr %1309, align 8, !tbaa !15
  %1311 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %1310, ptr %1311, align 8, !tbaa !15
  %1312 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1313 = load double, ptr %1312, align 8, !tbaa !17
  %1314 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %1313, ptr %1314, align 8, !tbaa !17
  %1315 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1316 = load double, ptr %1315, align 8, !tbaa !15
  %1317 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1318 = load double, ptr %1317, align 8, !tbaa !15
  %1319 = fsub double %1316, %1318
  %1320 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1319, ptr %1320, align 8, !tbaa !15
  %1321 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %1322 = load double, ptr %1321, align 8, !tbaa !17
  %1323 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %1324 = load double, ptr %1323, align 8, !tbaa !17
  %1325 = fsub double %1322, %1324
  %1326 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1325, ptr %1326, align 8, !tbaa !17
  %1327 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1328 = load double, ptr %1327, align 8, !tbaa !15
  %1329 = load ptr, ptr %31, align 8, !tbaa !5
  %1330 = getelementptr inbounds %struct.doublecomplex, ptr %1329, i64 1
  %1331 = getelementptr inbounds %struct.doublecomplex, ptr %1330, i32 0, i32 0
  store double %1328, ptr %1331, align 8, !tbaa !15
  %1332 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1333 = load double, ptr %1332, align 8, !tbaa !17
  %1334 = load ptr, ptr %31, align 8, !tbaa !5
  %1335 = getelementptr inbounds %struct.doublecomplex, ptr %1334, i64 1
  %1336 = getelementptr inbounds %struct.doublecomplex, ptr %1335, i32 0, i32 1
  store double %1333, ptr %1336, align 8, !tbaa !17
  %1337 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1338 = load double, ptr %1337, align 8, !tbaa !15
  store double %1338, ptr %44, align 8, !tbaa !11
  %1339 = load double, ptr %44, align 8, !tbaa !11
  %1340 = fcmp oge double %1339, 0.000000e+00
  br i1 %1340, label %1341, label %1343

1341:                                             ; preds = %1268
  %1342 = load double, ptr %44, align 8, !tbaa !11
  br label %1346

1343:                                             ; preds = %1268
  %1344 = load double, ptr %44, align 8, !tbaa !11
  %1345 = fneg double %1344
  br label %1346

1346:                                             ; preds = %1343, %1341
  %1347 = phi double [ %1342, %1341 ], [ %1345, %1343 ]
  %1348 = call double @d_imag(ptr noundef %62)
  store double %1348, ptr %45, align 8, !tbaa !11
  %1349 = load double, ptr %45, align 8, !tbaa !11
  %1350 = fcmp oge double %1349, 0.000000e+00
  br i1 %1350, label %1351, label %1353

1351:                                             ; preds = %1346
  %1352 = load double, ptr %45, align 8, !tbaa !11
  br label %1356

1353:                                             ; preds = %1346
  %1354 = load double, ptr %45, align 8, !tbaa !11
  %1355 = fneg double %1354
  br label %1356

1356:                                             ; preds = %1353, %1351
  %1357 = phi double [ %1352, %1351 ], [ %1355, %1353 ]
  %1358 = fadd double %1347, %1357
  %1359 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1360 = load double, ptr %1359, align 8, !tbaa !15
  store double %1360, ptr %46, align 8, !tbaa !11
  %1361 = load double, ptr %46, align 8, !tbaa !11
  %1362 = fcmp oge double %1361, 0.000000e+00
  br i1 %1362, label %1363, label %1365

1363:                                             ; preds = %1356
  %1364 = load double, ptr %46, align 8, !tbaa !11
  br label %1368

1365:                                             ; preds = %1356
  %1366 = load double, ptr %46, align 8, !tbaa !11
  %1367 = fneg double %1366
  br label %1368

1368:                                             ; preds = %1365, %1363
  %1369 = phi double [ %1364, %1363 ], [ %1367, %1365 ]
  %1370 = call double @d_imag(ptr noundef %64)
  store double %1370, ptr %47, align 8, !tbaa !11
  %1371 = load double, ptr %47, align 8, !tbaa !11
  %1372 = fcmp oge double %1371, 0.000000e+00
  br i1 %1372, label %1373, label %1375

1373:                                             ; preds = %1368
  %1374 = load double, ptr %47, align 8, !tbaa !11
  br label %1378

1375:                                             ; preds = %1368
  %1376 = load double, ptr %47, align 8, !tbaa !11
  %1377 = fneg double %1376
  br label %1378

1378:                                             ; preds = %1375, %1373
  %1379 = phi double [ %1374, %1373 ], [ %1377, %1375 ]
  %1380 = fadd double %1369, %1379
  %1381 = fadd double %1358, %1380
  %1382 = load ptr, ptr %32, align 8, !tbaa !5
  %1383 = getelementptr inbounds double, ptr %1382, i64 1
  store double %1381, ptr %1383, align 8, !tbaa !11
  br label %2311

1384:                                             ; preds = %1264
  %1385 = load i64, ptr %60, align 8, !tbaa !9
  %1386 = load i64, ptr %34, align 8, !tbaa !9
  %1387 = mul nsw i64 %1385, %1386
  %1388 = add nsw i64 %1387, 1
  store i64 %1388, ptr %39, align 8, !tbaa !9
  %1389 = load ptr, ptr %25, align 8, !tbaa !5
  %1390 = load i64, ptr %39, align 8, !tbaa !9
  %1391 = getelementptr inbounds %struct.doublecomplex, ptr %1389, i64 %1390
  %1392 = getelementptr inbounds %struct.doublecomplex, ptr %1391, i32 0, i32 0
  %1393 = load double, ptr %1392, align 8, !tbaa !15
  %1394 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %1393, ptr %1394, align 8, !tbaa !15
  %1395 = load ptr, ptr %25, align 8, !tbaa !5
  %1396 = load i64, ptr %39, align 8, !tbaa !9
  %1397 = getelementptr inbounds %struct.doublecomplex, ptr %1395, i64 %1396
  %1398 = getelementptr inbounds %struct.doublecomplex, ptr %1397, i32 0, i32 1
  %1399 = load double, ptr %1398, align 8, !tbaa !17
  %1400 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %1399, ptr %1400, align 8, !tbaa !17
  %1401 = load i64, ptr %60, align 8, !tbaa !9
  %1402 = load i64, ptr %36, align 8, !tbaa !9
  %1403 = mul nsw i64 %1401, %1402
  %1404 = add nsw i64 %1403, 1
  store i64 %1404, ptr %39, align 8, !tbaa !9
  %1405 = load ptr, ptr %21, align 8, !tbaa !5
  %1406 = getelementptr inbounds double, ptr %1405, i64 1
  %1407 = load double, ptr %1406, align 8, !tbaa !11
  %1408 = load ptr, ptr %27, align 8, !tbaa !5
  %1409 = load i64, ptr %39, align 8, !tbaa !9
  %1410 = getelementptr inbounds %struct.doublecomplex, ptr %1408, i64 %1409
  %1411 = getelementptr inbounds %struct.doublecomplex, ptr %1410, i32 0, i32 0
  %1412 = load double, ptr %1411, align 8, !tbaa !15
  %1413 = fmul double %1407, %1412
  %1414 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1413, ptr %1414, align 8, !tbaa !15
  %1415 = load ptr, ptr %21, align 8, !tbaa !5
  %1416 = getelementptr inbounds double, ptr %1415, i64 1
  %1417 = load double, ptr %1416, align 8, !tbaa !11
  %1418 = load ptr, ptr %27, align 8, !tbaa !5
  %1419 = load i64, ptr %39, align 8, !tbaa !9
  %1420 = getelementptr inbounds %struct.doublecomplex, ptr %1418, i64 %1419
  %1421 = getelementptr inbounds %struct.doublecomplex, ptr %1420, i32 0, i32 1
  %1422 = load double, ptr %1421, align 8, !tbaa !17
  %1423 = fmul double %1417, %1422
  %1424 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1423, ptr %1424, align 8, !tbaa !17
  %1425 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1426 = load double, ptr %1425, align 8, !tbaa !15
  %1427 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %1426, ptr %1427, align 8, !tbaa !15
  %1428 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1429 = load double, ptr %1428, align 8, !tbaa !17
  %1430 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %1429, ptr %1430, align 8, !tbaa !17
  %1431 = load ptr, ptr %22, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.doublecomplex, ptr %1431, i64 1
  call void @d_cnjg(ptr noundef %57, ptr noundef %1432)
  %1433 = load i64, ptr %60, align 8, !tbaa !9
  %1434 = load i64, ptr %36, align 8, !tbaa !9
  %1435 = mul nsw i64 %1433, %1434
  %1436 = add nsw i64 %1435, 2
  store i64 %1436, ptr %39, align 8, !tbaa !9
  %1437 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1438 = load double, ptr %1437, align 8, !tbaa !15
  %1439 = load ptr, ptr %27, align 8, !tbaa !5
  %1440 = load i64, ptr %39, align 8, !tbaa !9
  %1441 = getelementptr inbounds %struct.doublecomplex, ptr %1439, i64 %1440
  %1442 = getelementptr inbounds %struct.doublecomplex, ptr %1441, i32 0, i32 0
  %1443 = load double, ptr %1442, align 8, !tbaa !15
  %1444 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1445 = load double, ptr %1444, align 8, !tbaa !17
  %1446 = load ptr, ptr %27, align 8, !tbaa !5
  %1447 = load i64, ptr %39, align 8, !tbaa !9
  %1448 = getelementptr inbounds %struct.doublecomplex, ptr %1446, i64 %1447
  %1449 = getelementptr inbounds %struct.doublecomplex, ptr %1448, i32 0, i32 1
  %1450 = load double, ptr %1449, align 8, !tbaa !17
  %1451 = fmul double %1445, %1450
  %1452 = fneg double %1451
  %1453 = call double @llvm.fmuladd.f64(double %1438, double %1443, double %1452)
  %1454 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1453, ptr %1454, align 8, !tbaa !15
  %1455 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1456 = load double, ptr %1455, align 8, !tbaa !15
  %1457 = load ptr, ptr %27, align 8, !tbaa !5
  %1458 = load i64, ptr %39, align 8, !tbaa !9
  %1459 = getelementptr inbounds %struct.doublecomplex, ptr %1457, i64 %1458
  %1460 = getelementptr inbounds %struct.doublecomplex, ptr %1459, i32 0, i32 1
  %1461 = load double, ptr %1460, align 8, !tbaa !17
  %1462 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1463 = load double, ptr %1462, align 8, !tbaa !17
  %1464 = load ptr, ptr %27, align 8, !tbaa !5
  %1465 = load i64, ptr %39, align 8, !tbaa !9
  %1466 = getelementptr inbounds %struct.doublecomplex, ptr %1464, i64 %1465
  %1467 = getelementptr inbounds %struct.doublecomplex, ptr %1466, i32 0, i32 0
  %1468 = load double, ptr %1467, align 8, !tbaa !15
  %1469 = fmul double %1463, %1468
  %1470 = call double @llvm.fmuladd.f64(double %1456, double %1461, double %1469)
  %1471 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1470, ptr %1471, align 8, !tbaa !17
  %1472 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1473 = load double, ptr %1472, align 8, !tbaa !15
  %1474 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %1473, ptr %1474, align 8, !tbaa !15
  %1475 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1476 = load double, ptr %1475, align 8, !tbaa !17
  %1477 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %1476, ptr %1477, align 8, !tbaa !17
  %1478 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1479 = load double, ptr %1478, align 8, !tbaa !15
  %1480 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1481 = load double, ptr %1480, align 8, !tbaa !15
  %1482 = fsub double %1479, %1481
  %1483 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1482, ptr %1483, align 8, !tbaa !15
  %1484 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %1485 = load double, ptr %1484, align 8, !tbaa !17
  %1486 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %1487 = load double, ptr %1486, align 8, !tbaa !17
  %1488 = fsub double %1485, %1487
  %1489 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %1488, ptr %1489, align 8, !tbaa !17
  %1490 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1491 = load double, ptr %1490, align 8, !tbaa !15
  %1492 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %1493 = load double, ptr %1492, align 8, !tbaa !15
  %1494 = fsub double %1491, %1493
  %1495 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1494, ptr %1495, align 8, !tbaa !15
  %1496 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1497 = load double, ptr %1496, align 8, !tbaa !17
  %1498 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %1499 = load double, ptr %1498, align 8, !tbaa !17
  %1500 = fsub double %1497, %1499
  %1501 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1500, ptr %1501, align 8, !tbaa !17
  %1502 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1503 = load double, ptr %1502, align 8, !tbaa !15
  %1504 = load ptr, ptr %31, align 8, !tbaa !5
  %1505 = getelementptr inbounds %struct.doublecomplex, ptr %1504, i64 1
  %1506 = getelementptr inbounds %struct.doublecomplex, ptr %1505, i32 0, i32 0
  store double %1503, ptr %1506, align 8, !tbaa !15
  %1507 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1508 = load double, ptr %1507, align 8, !tbaa !17
  %1509 = load ptr, ptr %31, align 8, !tbaa !5
  %1510 = getelementptr inbounds %struct.doublecomplex, ptr %1509, i64 1
  %1511 = getelementptr inbounds %struct.doublecomplex, ptr %1510, i32 0, i32 1
  store double %1508, ptr %1511, align 8, !tbaa !17
  %1512 = load i64, ptr %60, align 8, !tbaa !9
  %1513 = load i64, ptr %36, align 8, !tbaa !9
  %1514 = mul nsw i64 %1512, %1513
  %1515 = add nsw i64 %1514, 2
  store i64 %1515, ptr %39, align 8, !tbaa !9
  %1516 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1517 = load double, ptr %1516, align 8, !tbaa !15
  store double %1517, ptr %44, align 8, !tbaa !11
  %1518 = load double, ptr %44, align 8, !tbaa !11
  %1519 = fcmp oge double %1518, 0.000000e+00
  br i1 %1519, label %1520, label %1522

1520:                                             ; preds = %1384
  %1521 = load double, ptr %44, align 8, !tbaa !11
  br label %1525

1522:                                             ; preds = %1384
  %1523 = load double, ptr %44, align 8, !tbaa !11
  %1524 = fneg double %1523
  br label %1525

1525:                                             ; preds = %1522, %1520
  %1526 = phi double [ %1521, %1520 ], [ %1524, %1522 ]
  %1527 = call double @d_imag(ptr noundef %62)
  store double %1527, ptr %45, align 8, !tbaa !11
  %1528 = load double, ptr %45, align 8, !tbaa !11
  %1529 = fcmp oge double %1528, 0.000000e+00
  br i1 %1529, label %1530, label %1532

1530:                                             ; preds = %1525
  %1531 = load double, ptr %45, align 8, !tbaa !11
  br label %1535

1532:                                             ; preds = %1525
  %1533 = load double, ptr %45, align 8, !tbaa !11
  %1534 = fneg double %1533
  br label %1535

1535:                                             ; preds = %1532, %1530
  %1536 = phi double [ %1531, %1530 ], [ %1534, %1532 ]
  %1537 = fadd double %1526, %1536
  %1538 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1539 = load double, ptr %1538, align 8, !tbaa !15
  store double %1539, ptr %46, align 8, !tbaa !11
  %1540 = load double, ptr %46, align 8, !tbaa !11
  %1541 = fcmp oge double %1540, 0.000000e+00
  br i1 %1541, label %1542, label %1544

1542:                                             ; preds = %1535
  %1543 = load double, ptr %46, align 8, !tbaa !11
  br label %1547

1544:                                             ; preds = %1535
  %1545 = load double, ptr %46, align 8, !tbaa !11
  %1546 = fneg double %1545
  br label %1547

1547:                                             ; preds = %1544, %1542
  %1548 = phi double [ %1543, %1542 ], [ %1546, %1544 ]
  %1549 = call double @d_imag(ptr noundef %64)
  store double %1549, ptr %47, align 8, !tbaa !11
  %1550 = load double, ptr %47, align 8, !tbaa !11
  %1551 = fcmp oge double %1550, 0.000000e+00
  br i1 %1551, label %1552, label %1554

1552:                                             ; preds = %1547
  %1553 = load double, ptr %47, align 8, !tbaa !11
  br label %1557

1554:                                             ; preds = %1547
  %1555 = load double, ptr %47, align 8, !tbaa !11
  %1556 = fneg double %1555
  br label %1557

1557:                                             ; preds = %1554, %1552
  %1558 = phi double [ %1553, %1552 ], [ %1556, %1554 ]
  %1559 = fadd double %1548, %1558
  %1560 = fadd double %1537, %1559
  %1561 = load ptr, ptr %22, align 8, !tbaa !5
  %1562 = getelementptr inbounds %struct.doublecomplex, ptr %1561, i64 1
  %1563 = getelementptr inbounds %struct.doublecomplex, ptr %1562, i32 0, i32 0
  %1564 = load double, ptr %1563, align 8, !tbaa !15
  store double %1564, ptr %48, align 8, !tbaa !11
  %1565 = load double, ptr %48, align 8, !tbaa !11
  %1566 = fcmp oge double %1565, 0.000000e+00
  br i1 %1566, label %1567, label %1569

1567:                                             ; preds = %1557
  %1568 = load double, ptr %48, align 8, !tbaa !11
  br label %1572

1569:                                             ; preds = %1557
  %1570 = load double, ptr %48, align 8, !tbaa !11
  %1571 = fneg double %1570
  br label %1572

1572:                                             ; preds = %1569, %1567
  %1573 = phi double [ %1568, %1567 ], [ %1571, %1569 ]
  %1574 = load ptr, ptr %22, align 8, !tbaa !5
  %1575 = getelementptr inbounds %struct.doublecomplex, ptr %1574, i64 1
  %1576 = call double @d_imag(ptr noundef %1575)
  store double %1576, ptr %49, align 8, !tbaa !11
  %1577 = load double, ptr %49, align 8, !tbaa !11
  %1578 = fcmp oge double %1577, 0.000000e+00
  br i1 %1578, label %1579, label %1581

1579:                                             ; preds = %1572
  %1580 = load double, ptr %49, align 8, !tbaa !11
  br label %1584

1581:                                             ; preds = %1572
  %1582 = load double, ptr %49, align 8, !tbaa !11
  %1583 = fneg double %1582
  br label %1584

1584:                                             ; preds = %1581, %1579
  %1585 = phi double [ %1580, %1579 ], [ %1583, %1581 ]
  %1586 = fadd double %1573, %1585
  %1587 = load ptr, ptr %27, align 8, !tbaa !5
  %1588 = load i64, ptr %39, 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 !15
  store double %1591, ptr %50, align 8, !tbaa !11
  %1592 = load double, ptr %50, align 8, !tbaa !11
  %1593 = fcmp oge double %1592, 0.000000e+00
  br i1 %1593, label %1594, label %1596

1594:                                             ; preds = %1584
  %1595 = load double, ptr %50, align 8, !tbaa !11
  br label %1599

1596:                                             ; preds = %1584
  %1597 = load double, ptr %50, align 8, !tbaa !11
  %1598 = fneg double %1597
  br label %1599

1599:                                             ; preds = %1596, %1594
  %1600 = phi double [ %1595, %1594 ], [ %1598, %1596 ]
  %1601 = load ptr, ptr %27, align 8, !tbaa !5
  %1602 = load i64, ptr %60, align 8, !tbaa !9
  %1603 = load i64, ptr %36, align 8, !tbaa !9
  %1604 = mul nsw i64 %1602, %1603
  %1605 = add nsw i64 %1604, 2
  %1606 = getelementptr inbounds %struct.doublecomplex, ptr %1601, i64 %1605
  %1607 = call double @d_imag(ptr noundef %1606)
  store double %1607, ptr %51, align 8, !tbaa !11
  %1608 = load double, ptr %51, align 8, !tbaa !11
  %1609 = fcmp oge double %1608, 0.000000e+00
  br i1 %1609, label %1610, label %1612

1610:                                             ; preds = %1599
  %1611 = load double, ptr %51, align 8, !tbaa !11
  br label %1615

1612:                                             ; preds = %1599
  %1613 = load double, ptr %51, align 8, !tbaa !11
  %1614 = fneg double %1613
  br label %1615

1615:                                             ; preds = %1612, %1610
  %1616 = phi double [ %1611, %1610 ], [ %1614, %1612 ]
  %1617 = fadd double %1600, %1616
  %1618 = call double @llvm.fmuladd.f64(double %1586, double %1617, double %1560)
  %1619 = load ptr, ptr %32, align 8, !tbaa !5
  %1620 = getelementptr inbounds double, ptr %1619, i64 1
  store double %1618, ptr %1620, align 8, !tbaa !11
  %1621 = load ptr, ptr %19, align 8, !tbaa !5
  %1622 = load i64, ptr %1621, align 8, !tbaa !9
  %1623 = sub nsw i64 %1622, 1
  store i64 %1623, ptr %39, align 8, !tbaa !9
  store i64 2, ptr %59, align 8, !tbaa !9
  br label %1624

1624:                                             ; preds = %2028, %1615
  %1625 = load i64, ptr %59, align 8, !tbaa !9
  %1626 = load i64, ptr %39, align 8, !tbaa !9
  %1627 = icmp sle i64 %1625, %1626
  br i1 %1627, label %1628, label %2031

1628:                                             ; preds = %1624
  %1629 = load i64, ptr %59, align 8, !tbaa !9
  %1630 = load i64, ptr %60, align 8, !tbaa !9
  %1631 = load i64, ptr %34, align 8, !tbaa !9
  %1632 = mul nsw i64 %1630, %1631
  %1633 = add nsw i64 %1629, %1632
  store i64 %1633, ptr %40, align 8, !tbaa !9
  %1634 = load ptr, ptr %25, align 8, !tbaa !5
  %1635 = load i64, ptr %40, align 8, !tbaa !9
  %1636 = getelementptr inbounds %struct.doublecomplex, ptr %1634, i64 %1635
  %1637 = getelementptr inbounds %struct.doublecomplex, ptr %1636, i32 0, i32 0
  %1638 = load double, ptr %1637, align 8, !tbaa !15
  %1639 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %1638, ptr %1639, align 8, !tbaa !15
  %1640 = load ptr, ptr %25, align 8, !tbaa !5
  %1641 = load i64, ptr %40, align 8, !tbaa !9
  %1642 = getelementptr inbounds %struct.doublecomplex, ptr %1640, i64 %1641
  %1643 = getelementptr inbounds %struct.doublecomplex, ptr %1642, i32 0, i32 1
  %1644 = load double, ptr %1643, align 8, !tbaa !17
  %1645 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %1644, ptr %1645, align 8, !tbaa !17
  %1646 = load i64, ptr %59, align 8, !tbaa !9
  %1647 = sub nsw i64 %1646, 1
  store i64 %1647, ptr %40, align 8, !tbaa !9
  %1648 = load i64, ptr %59, align 8, !tbaa !9
  %1649 = sub nsw i64 %1648, 1
  %1650 = load i64, ptr %60, align 8, !tbaa !9
  %1651 = load i64, ptr %36, align 8, !tbaa !9
  %1652 = mul nsw i64 %1650, %1651
  %1653 = add nsw i64 %1649, %1652
  store i64 %1653, ptr %41, align 8, !tbaa !9
  %1654 = load ptr, ptr %22, align 8, !tbaa !5
  %1655 = load i64, ptr %40, align 8, !tbaa !9
  %1656 = getelementptr inbounds %struct.doublecomplex, ptr %1654, i64 %1655
  %1657 = getelementptr inbounds %struct.doublecomplex, ptr %1656, i32 0, i32 0
  %1658 = load double, ptr %1657, align 8, !tbaa !15
  %1659 = load ptr, ptr %27, align 8, !tbaa !5
  %1660 = load i64, ptr %41, align 8, !tbaa !9
  %1661 = getelementptr inbounds %struct.doublecomplex, ptr %1659, i64 %1660
  %1662 = getelementptr inbounds %struct.doublecomplex, ptr %1661, i32 0, i32 0
  %1663 = load double, ptr %1662, align 8, !tbaa !15
  %1664 = load ptr, ptr %22, align 8, !tbaa !5
  %1665 = load i64, ptr %40, align 8, !tbaa !9
  %1666 = getelementptr inbounds %struct.doublecomplex, ptr %1664, i64 %1665
  %1667 = getelementptr inbounds %struct.doublecomplex, ptr %1666, i32 0, i32 1
  %1668 = load double, ptr %1667, align 8, !tbaa !17
  %1669 = load ptr, ptr %27, align 8, !tbaa !5
  %1670 = load i64, ptr %41, align 8, !tbaa !9
  %1671 = getelementptr inbounds %struct.doublecomplex, ptr %1669, i64 %1670
  %1672 = getelementptr inbounds %struct.doublecomplex, ptr %1671, i32 0, i32 1
  %1673 = load double, ptr %1672, align 8, !tbaa !17
  %1674 = fmul double %1668, %1673
  %1675 = fneg double %1674
  %1676 = call double @llvm.fmuladd.f64(double %1658, double %1663, double %1675)
  %1677 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1676, ptr %1677, align 8, !tbaa !15
  %1678 = load ptr, ptr %22, align 8, !tbaa !5
  %1679 = load i64, ptr %40, align 8, !tbaa !9
  %1680 = getelementptr inbounds %struct.doublecomplex, ptr %1678, i64 %1679
  %1681 = getelementptr inbounds %struct.doublecomplex, ptr %1680, i32 0, i32 0
  %1682 = load double, ptr %1681, align 8, !tbaa !15
  %1683 = load ptr, ptr %27, align 8, !tbaa !5
  %1684 = load i64, ptr %41, align 8, !tbaa !9
  %1685 = getelementptr inbounds %struct.doublecomplex, ptr %1683, i64 %1684
  %1686 = getelementptr inbounds %struct.doublecomplex, ptr %1685, i32 0, i32 1
  %1687 = load double, ptr %1686, align 8, !tbaa !17
  %1688 = load ptr, ptr %22, align 8, !tbaa !5
  %1689 = load i64, ptr %40, align 8, !tbaa !9
  %1690 = getelementptr inbounds %struct.doublecomplex, ptr %1688, i64 %1689
  %1691 = getelementptr inbounds %struct.doublecomplex, ptr %1690, i32 0, i32 1
  %1692 = load double, ptr %1691, align 8, !tbaa !17
  %1693 = load ptr, ptr %27, align 8, !tbaa !5
  %1694 = load i64, ptr %41, align 8, !tbaa !9
  %1695 = getelementptr inbounds %struct.doublecomplex, ptr %1693, i64 %1694
  %1696 = getelementptr inbounds %struct.doublecomplex, ptr %1695, i32 0, i32 0
  %1697 = load double, ptr %1696, align 8, !tbaa !15
  %1698 = fmul double %1692, %1697
  %1699 = call double @llvm.fmuladd.f64(double %1682, double %1687, double %1698)
  %1700 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1699, ptr %1700, align 8, !tbaa !17
  %1701 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1702 = load double, ptr %1701, align 8, !tbaa !15
  %1703 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  store double %1702, ptr %1703, align 8, !tbaa !15
  %1704 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1705 = load double, ptr %1704, align 8, !tbaa !17
  %1706 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  store double %1705, ptr %1706, align 8, !tbaa !17
  %1707 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %1707, ptr %40, align 8, !tbaa !9
  %1708 = load i64, ptr %59, align 8, !tbaa !9
  %1709 = load i64, ptr %60, align 8, !tbaa !9
  %1710 = load i64, ptr %36, align 8, !tbaa !9
  %1711 = mul nsw i64 %1709, %1710
  %1712 = add nsw i64 %1708, %1711
  store i64 %1712, ptr %41, align 8, !tbaa !9
  %1713 = load ptr, ptr %21, align 8, !tbaa !5
  %1714 = load i64, ptr %40, align 8, !tbaa !9
  %1715 = getelementptr inbounds double, ptr %1713, i64 %1714
  %1716 = load double, ptr %1715, align 8, !tbaa !11
  %1717 = load ptr, ptr %27, align 8, !tbaa !5
  %1718 = load i64, ptr %41, 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 !15
  %1722 = fmul double %1716, %1721
  %1723 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1722, ptr %1723, align 8, !tbaa !15
  %1724 = load ptr, ptr %21, align 8, !tbaa !5
  %1725 = load i64, ptr %40, align 8, !tbaa !9
  %1726 = getelementptr inbounds double, ptr %1724, i64 %1725
  %1727 = load double, ptr %1726, align 8, !tbaa !11
  %1728 = load ptr, ptr %27, align 8, !tbaa !5
  %1729 = load i64, ptr %41, align 8, !tbaa !9
  %1730 = getelementptr inbounds %struct.doublecomplex, ptr %1728, i64 %1729
  %1731 = getelementptr inbounds %struct.doublecomplex, ptr %1730, i32 0, i32 1
  %1732 = load double, ptr %1731, align 8, !tbaa !17
  %1733 = fmul double %1727, %1732
  %1734 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1733, ptr %1734, align 8, !tbaa !17
  %1735 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1736 = load double, ptr %1735, align 8, !tbaa !15
  %1737 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %1736, ptr %1737, align 8, !tbaa !15
  %1738 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1739 = load double, ptr %1738, align 8, !tbaa !17
  %1740 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %1739, ptr %1740, align 8, !tbaa !17
  %1741 = load ptr, ptr %22, align 8, !tbaa !5
  %1742 = load i64, ptr %59, align 8, !tbaa !9
  %1743 = getelementptr inbounds %struct.doublecomplex, ptr %1741, i64 %1742
  call void @d_cnjg(ptr noundef %57, ptr noundef %1743)
  %1744 = load i64, ptr %59, align 8, !tbaa !9
  %1745 = add nsw i64 %1744, 1
  %1746 = load i64, ptr %60, align 8, !tbaa !9
  %1747 = load i64, ptr %36, align 8, !tbaa !9
  %1748 = mul nsw i64 %1746, %1747
  %1749 = add nsw i64 %1745, %1748
  store i64 %1749, ptr %40, align 8, !tbaa !9
  %1750 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1751 = load double, ptr %1750, align 8, !tbaa !15
  %1752 = load ptr, ptr %27, align 8, !tbaa !5
  %1753 = load i64, ptr %40, align 8, !tbaa !9
  %1754 = getelementptr inbounds %struct.doublecomplex, ptr %1752, i64 %1753
  %1755 = getelementptr inbounds %struct.doublecomplex, ptr %1754, i32 0, i32 0
  %1756 = load double, ptr %1755, align 8, !tbaa !15
  %1757 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1758 = load double, ptr %1757, align 8, !tbaa !17
  %1759 = load ptr, ptr %27, align 8, !tbaa !5
  %1760 = load i64, ptr %40, align 8, !tbaa !9
  %1761 = getelementptr inbounds %struct.doublecomplex, ptr %1759, i64 %1760
  %1762 = getelementptr inbounds %struct.doublecomplex, ptr %1761, i32 0, i32 1
  %1763 = load double, ptr %1762, align 8, !tbaa !17
  %1764 = fmul double %1758, %1763
  %1765 = fneg double %1764
  %1766 = call double @llvm.fmuladd.f64(double %1751, double %1756, double %1765)
  %1767 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1766, ptr %1767, align 8, !tbaa !15
  %1768 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1769 = load double, ptr %1768, align 8, !tbaa !15
  %1770 = load ptr, ptr %27, align 8, !tbaa !5
  %1771 = load i64, ptr %40, align 8, !tbaa !9
  %1772 = getelementptr inbounds %struct.doublecomplex, ptr %1770, i64 %1771
  %1773 = getelementptr inbounds %struct.doublecomplex, ptr %1772, i32 0, i32 1
  %1774 = load double, ptr %1773, align 8, !tbaa !17
  %1775 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1776 = load double, ptr %1775, align 8, !tbaa !17
  %1777 = load ptr, ptr %27, align 8, !tbaa !5
  %1778 = load i64, ptr %40, align 8, !tbaa !9
  %1779 = getelementptr inbounds %struct.doublecomplex, ptr %1777, i64 %1778
  %1780 = getelementptr inbounds %struct.doublecomplex, ptr %1779, i32 0, i32 0
  %1781 = load double, ptr %1780, align 8, !tbaa !15
  %1782 = fmul double %1776, %1781
  %1783 = call double @llvm.fmuladd.f64(double %1769, double %1774, double %1782)
  %1784 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1783, ptr %1784, align 8, !tbaa !17
  %1785 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1786 = load double, ptr %1785, align 8, !tbaa !15
  %1787 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %1786, ptr %1787, align 8, !tbaa !15
  %1788 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1789 = load double, ptr %1788, align 8, !tbaa !17
  %1790 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %1789, ptr %1790, align 8, !tbaa !17
  %1791 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %1791, ptr %40, align 8, !tbaa !9
  %1792 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1793 = load double, ptr %1792, align 8, !tbaa !15
  %1794 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  %1795 = load double, ptr %1794, align 8, !tbaa !15
  %1796 = fsub double %1793, %1795
  %1797 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  store double %1796, ptr %1797, align 8, !tbaa !15
  %1798 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %1799 = load double, ptr %1798, align 8, !tbaa !17
  %1800 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  %1801 = load double, ptr %1800, align 8, !tbaa !17
  %1802 = fsub double %1799, %1801
  %1803 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  store double %1802, ptr %1803, align 8, !tbaa !17
  %1804 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1805 = load double, ptr %1804, align 8, !tbaa !15
  %1806 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1807 = load double, ptr %1806, align 8, !tbaa !15
  %1808 = fsub double %1805, %1807
  %1809 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1808, ptr %1809, align 8, !tbaa !15
  %1810 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1811 = load double, ptr %1810, align 8, !tbaa !17
  %1812 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %1813 = load double, ptr %1812, align 8, !tbaa !17
  %1814 = fsub double %1811, %1813
  %1815 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %1814, ptr %1815, align 8, !tbaa !17
  %1816 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1817 = load double, ptr %1816, align 8, !tbaa !15
  %1818 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  %1819 = load double, ptr %1818, align 8, !tbaa !15
  %1820 = fsub double %1817, %1819
  %1821 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %1820, ptr %1821, align 8, !tbaa !15
  %1822 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1823 = load double, ptr %1822, align 8, !tbaa !17
  %1824 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  %1825 = load double, ptr %1824, align 8, !tbaa !17
  %1826 = fsub double %1823, %1825
  %1827 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %1826, ptr %1827, align 8, !tbaa !17
  %1828 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %1829 = load double, ptr %1828, align 8, !tbaa !15
  %1830 = load ptr, ptr %31, align 8, !tbaa !5
  %1831 = load i64, ptr %40, align 8, !tbaa !9
  %1832 = getelementptr inbounds %struct.doublecomplex, ptr %1830, i64 %1831
  %1833 = getelementptr inbounds %struct.doublecomplex, ptr %1832, i32 0, i32 0
  store double %1829, ptr %1833, align 8, !tbaa !15
  %1834 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %1835 = load double, ptr %1834, align 8, !tbaa !17
  %1836 = load ptr, ptr %31, align 8, !tbaa !5
  %1837 = load i64, ptr %40, align 8, !tbaa !9
  %1838 = getelementptr inbounds %struct.doublecomplex, ptr %1836, i64 %1837
  %1839 = getelementptr inbounds %struct.doublecomplex, ptr %1838, i32 0, i32 1
  store double %1835, ptr %1839, align 8, !tbaa !17
  %1840 = load i64, ptr %59, align 8, !tbaa !9
  %1841 = sub nsw i64 %1840, 1
  store i64 %1841, ptr %40, align 8, !tbaa !9
  %1842 = load i64, ptr %59, align 8, !tbaa !9
  %1843 = sub nsw i64 %1842, 1
  %1844 = load i64, ptr %60, align 8, !tbaa !9
  %1845 = load i64, ptr %36, align 8, !tbaa !9
  %1846 = mul nsw i64 %1844, %1845
  %1847 = add nsw i64 %1843, %1846
  store i64 %1847, ptr %41, align 8, !tbaa !9
  %1848 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %1848, ptr %42, align 8, !tbaa !9
  %1849 = load i64, ptr %59, align 8, !tbaa !9
  %1850 = add nsw i64 %1849, 1
  %1851 = load i64, ptr %60, align 8, !tbaa !9
  %1852 = load i64, ptr %36, align 8, !tbaa !9
  %1853 = mul nsw i64 %1851, %1852
  %1854 = add nsw i64 %1850, %1853
  store i64 %1854, ptr %43, align 8, !tbaa !9
  %1855 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1856 = load double, ptr %1855, align 8, !tbaa !15
  store double %1856, ptr %44, align 8, !tbaa !11
  %1857 = load double, ptr %44, align 8, !tbaa !11
  %1858 = fcmp oge double %1857, 0.000000e+00
  br i1 %1858, label %1859, label %1861

1859:                                             ; preds = %1628
  %1860 = load double, ptr %44, align 8, !tbaa !11
  br label %1864

1861:                                             ; preds = %1628
  %1862 = load double, ptr %44, align 8, !tbaa !11
  %1863 = fneg double %1862
  br label %1864

1864:                                             ; preds = %1861, %1859
  %1865 = phi double [ %1860, %1859 ], [ %1863, %1861 ]
  %1866 = call double @d_imag(ptr noundef %62)
  store double %1866, ptr %45, align 8, !tbaa !11
  %1867 = load double, ptr %45, align 8, !tbaa !11
  %1868 = fcmp oge double %1867, 0.000000e+00
  br i1 %1868, label %1869, label %1871

1869:                                             ; preds = %1864
  %1870 = load double, ptr %45, align 8, !tbaa !11
  br label %1874

1871:                                             ; preds = %1864
  %1872 = load double, ptr %45, align 8, !tbaa !11
  %1873 = fneg double %1872
  br label %1874

1874:                                             ; preds = %1871, %1869
  %1875 = phi double [ %1870, %1869 ], [ %1873, %1871 ]
  %1876 = fadd double %1865, %1875
  %1877 = load ptr, ptr %22, align 8, !tbaa !5
  %1878 = load i64, ptr %40, align 8, !tbaa !9
  %1879 = getelementptr inbounds %struct.doublecomplex, ptr %1877, i64 %1878
  %1880 = getelementptr inbounds %struct.doublecomplex, ptr %1879, i32 0, i32 0
  %1881 = load double, ptr %1880, align 8, !tbaa !15
  store double %1881, ptr %46, align 8, !tbaa !11
  %1882 = load double, ptr %46, align 8, !tbaa !11
  %1883 = fcmp oge double %1882, 0.000000e+00
  br i1 %1883, label %1884, label %1886

1884:                                             ; preds = %1874
  %1885 = load double, ptr %46, align 8, !tbaa !11
  br label %1889

1886:                                             ; preds = %1874
  %1887 = load double, ptr %46, align 8, !tbaa !11
  %1888 = fneg double %1887
  br label %1889

1889:                                             ; preds = %1886, %1884
  %1890 = phi double [ %1885, %1884 ], [ %1888, %1886 ]
  %1891 = load ptr, ptr %22, align 8, !tbaa !5
  %1892 = load i64, ptr %59, align 8, !tbaa !9
  %1893 = sub nsw i64 %1892, 1
  %1894 = getelementptr inbounds %struct.doublecomplex, ptr %1891, i64 %1893
  %1895 = call double @d_imag(ptr noundef %1894)
  store double %1895, ptr %47, align 8, !tbaa !11
  %1896 = load double, ptr %47, align 8, !tbaa !11
  %1897 = fcmp oge double %1896, 0.000000e+00
  br i1 %1897, label %1898, label %1900

1898:                                             ; preds = %1889
  %1899 = load double, ptr %47, align 8, !tbaa !11
  br label %1903

1900:                                             ; preds = %1889
  %1901 = load double, ptr %47, align 8, !tbaa !11
  %1902 = fneg double %1901
  br label %1903

1903:                                             ; preds = %1900, %1898
  %1904 = phi double [ %1899, %1898 ], [ %1902, %1900 ]
  %1905 = fadd double %1890, %1904
  %1906 = load ptr, ptr %27, align 8, !tbaa !5
  %1907 = load i64, ptr %41, align 8, !tbaa !9
  %1908 = getelementptr inbounds %struct.doublecomplex, ptr %1906, i64 %1907
  %1909 = getelementptr inbounds %struct.doublecomplex, ptr %1908, i32 0, i32 0
  %1910 = load double, ptr %1909, align 8, !tbaa !15
  store double %1910, ptr %48, align 8, !tbaa !11
  %1911 = load double, ptr %48, align 8, !tbaa !11
  %1912 = fcmp oge double %1911, 0.000000e+00
  br i1 %1912, label %1913, label %1915

1913:                                             ; preds = %1903
  %1914 = load double, ptr %48, align 8, !tbaa !11
  br label %1918

1915:                                             ; preds = %1903
  %1916 = load double, ptr %48, align 8, !tbaa !11
  %1917 = fneg double %1916
  br label %1918

1918:                                             ; preds = %1915, %1913
  %1919 = phi double [ %1914, %1913 ], [ %1917, %1915 ]
  %1920 = load ptr, ptr %27, align 8, !tbaa !5
  %1921 = load i64, ptr %59, align 8, !tbaa !9
  %1922 = sub nsw i64 %1921, 1
  %1923 = load i64, ptr %60, align 8, !tbaa !9
  %1924 = load i64, ptr %36, align 8, !tbaa !9
  %1925 = mul nsw i64 %1923, %1924
  %1926 = add nsw i64 %1922, %1925
  %1927 = getelementptr inbounds %struct.doublecomplex, ptr %1920, i64 %1926
  %1928 = call double @d_imag(ptr noundef %1927)
  store double %1928, ptr %49, align 8, !tbaa !11
  %1929 = load double, ptr %49, align 8, !tbaa !11
  %1930 = fcmp oge double %1929, 0.000000e+00
  br i1 %1930, label %1931, label %1933

1931:                                             ; preds = %1918
  %1932 = load double, ptr %49, align 8, !tbaa !11
  br label %1936

1933:                                             ; preds = %1918
  %1934 = load double, ptr %49, align 8, !tbaa !11
  %1935 = fneg double %1934
  br label %1936

1936:                                             ; preds = %1933, %1931
  %1937 = phi double [ %1932, %1931 ], [ %1935, %1933 ]
  %1938 = fadd double %1919, %1937
  %1939 = call double @llvm.fmuladd.f64(double %1905, double %1938, double %1876)
  %1940 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %1941 = load double, ptr %1940, align 8, !tbaa !15
  store double %1941, ptr %50, align 8, !tbaa !11
  %1942 = load double, ptr %50, align 8, !tbaa !11
  %1943 = fcmp oge double %1942, 0.000000e+00
  br i1 %1943, label %1944, label %1946

1944:                                             ; preds = %1936
  %1945 = load double, ptr %50, align 8, !tbaa !11
  br label %1949

1946:                                             ; preds = %1936
  %1947 = load double, ptr %50, align 8, !tbaa !11
  %1948 = fneg double %1947
  br label %1949

1949:                                             ; preds = %1946, %1944
  %1950 = phi double [ %1945, %1944 ], [ %1948, %1946 ]
  %1951 = call double @d_imag(ptr noundef %64)
  store double %1951, ptr %51, align 8, !tbaa !11
  %1952 = load double, ptr %51, align 8, !tbaa !11
  %1953 = fcmp oge double %1952, 0.000000e+00
  br i1 %1953, label %1954, label %1956

1954:                                             ; preds = %1949
  %1955 = load double, ptr %51, align 8, !tbaa !11
  br label %1959

1956:                                             ; preds = %1949
  %1957 = load double, ptr %51, align 8, !tbaa !11
  %1958 = fneg double %1957
  br label %1959

1959:                                             ; preds = %1956, %1954
  %1960 = phi double [ %1955, %1954 ], [ %1958, %1956 ]
  %1961 = fadd double %1950, %1960
  %1962 = fadd double %1939, %1961
  %1963 = load ptr, ptr %22, align 8, !tbaa !5
  %1964 = load i64, ptr %42, align 8, !tbaa !9
  %1965 = getelementptr inbounds %struct.doublecomplex, ptr %1963, i64 %1964
  %1966 = getelementptr inbounds %struct.doublecomplex, ptr %1965, i32 0, i32 0
  %1967 = load double, ptr %1966, align 8, !tbaa !15
  store double %1967, ptr %52, align 8, !tbaa !11
  %1968 = load double, ptr %52, align 8, !tbaa !11
  %1969 = fcmp oge double %1968, 0.000000e+00
  br i1 %1969, label %1970, label %1972

1970:                                             ; preds = %1959
  %1971 = load double, ptr %52, align 8, !tbaa !11
  br label %1975

1972:                                             ; preds = %1959
  %1973 = load double, ptr %52, align 8, !tbaa !11
  %1974 = fneg double %1973
  br label %1975

1975:                                             ; preds = %1972, %1970
  %1976 = phi double [ %1971, %1970 ], [ %1974, %1972 ]
  %1977 = load ptr, ptr %22, align 8, !tbaa !5
  %1978 = load i64, ptr %59, align 8, !tbaa !9
  %1979 = getelementptr inbounds %struct.doublecomplex, ptr %1977, i64 %1978
  %1980 = call double @d_imag(ptr noundef %1979)
  store double %1980, ptr %53, align 8, !tbaa !11
  %1981 = load double, ptr %53, align 8, !tbaa !11
  %1982 = fcmp oge double %1981, 0.000000e+00
  br i1 %1982, label %1983, label %1985

1983:                                             ; preds = %1975
  %1984 = load double, ptr %53, align 8, !tbaa !11
  br label %1988

1985:                                             ; preds = %1975
  %1986 = load double, ptr %53, align 8, !tbaa !11
  %1987 = fneg double %1986
  br label %1988

1988:                                             ; preds = %1985, %1983
  %1989 = phi double [ %1984, %1983 ], [ %1987, %1985 ]
  %1990 = fadd double %1976, %1989
  %1991 = load ptr, ptr %27, align 8, !tbaa !5
  %1992 = load i64, ptr %43, align 8, !tbaa !9
  %1993 = getelementptr inbounds %struct.doublecomplex, ptr %1991, i64 %1992
  %1994 = getelementptr inbounds %struct.doublecomplex, ptr %1993, i32 0, i32 0
  %1995 = load double, ptr %1994, align 8, !tbaa !15
  store double %1995, ptr %54, align 8, !tbaa !11
  %1996 = load double, ptr %54, align 8, !tbaa !11
  %1997 = fcmp oge double %1996, 0.000000e+00
  br i1 %1997, label %1998, label %2000

1998:                                             ; preds = %1988
  %1999 = load double, ptr %54, align 8, !tbaa !11
  br label %2003

2000:                                             ; preds = %1988
  %2001 = load double, ptr %54, align 8, !tbaa !11
  %2002 = fneg double %2001
  br label %2003

2003:                                             ; preds = %2000, %1998
  %2004 = phi double [ %1999, %1998 ], [ %2002, %2000 ]
  %2005 = load ptr, ptr %27, align 8, !tbaa !5
  %2006 = load i64, ptr %59, align 8, !tbaa !9
  %2007 = add nsw i64 %2006, 1
  %2008 = load i64, ptr %60, align 8, !tbaa !9
  %2009 = load i64, ptr %36, align 8, !tbaa !9
  %2010 = mul nsw i64 %2008, %2009
  %2011 = add nsw i64 %2007, %2010
  %2012 = getelementptr inbounds %struct.doublecomplex, ptr %2005, i64 %2011
  %2013 = call double @d_imag(ptr noundef %2012)
  store double %2013, ptr %55, align 8, !tbaa !11
  %2014 = load double, ptr %55, align 8, !tbaa !11
  %2015 = fcmp oge double %2014, 0.000000e+00
  br i1 %2015, label %2016, label %2018

2016:                                             ; preds = %2003
  %2017 = load double, ptr %55, align 8, !tbaa !11
  br label %2021

2018:                                             ; preds = %2003
  %2019 = load double, ptr %55, align 8, !tbaa !11
  %2020 = fneg double %2019
  br label %2021

2021:                                             ; preds = %2018, %2016
  %2022 = phi double [ %2017, %2016 ], [ %2020, %2018 ]
  %2023 = fadd double %2004, %2022
  %2024 = call double @llvm.fmuladd.f64(double %1990, double %2023, double %1962)
  %2025 = load ptr, ptr %32, align 8, !tbaa !5
  %2026 = load i64, ptr %59, align 8, !tbaa !9
  %2027 = getelementptr inbounds double, ptr %2025, i64 %2026
  store double %2024, ptr %2027, align 8, !tbaa !11
  br label %2028

2028:                                             ; preds = %2021
  %2029 = load i64, ptr %59, align 8, !tbaa !9
  %2030 = add nsw i64 %2029, 1
  store i64 %2030, ptr %59, align 8, !tbaa !9
  br label %1624, !llvm.loop !19

2031:                                             ; preds = %1624
  %2032 = load ptr, ptr %19, align 8, !tbaa !5
  %2033 = load i64, ptr %2032, align 8, !tbaa !9
  %2034 = load i64, ptr %60, align 8, !tbaa !9
  %2035 = load i64, ptr %34, align 8, !tbaa !9
  %2036 = mul nsw i64 %2034, %2035
  %2037 = add nsw i64 %2033, %2036
  store i64 %2037, ptr %39, align 8, !tbaa !9
  %2038 = load ptr, ptr %25, align 8, !tbaa !5
  %2039 = load i64, ptr %39, align 8, !tbaa !9
  %2040 = getelementptr inbounds %struct.doublecomplex, ptr %2038, i64 %2039
  %2041 = getelementptr inbounds %struct.doublecomplex, ptr %2040, i32 0, i32 0
  %2042 = load double, ptr %2041, align 8, !tbaa !15
  %2043 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  store double %2042, ptr %2043, align 8, !tbaa !15
  %2044 = load ptr, ptr %25, align 8, !tbaa !5
  %2045 = load i64, ptr %39, align 8, !tbaa !9
  %2046 = getelementptr inbounds %struct.doublecomplex, ptr %2044, i64 %2045
  %2047 = getelementptr inbounds %struct.doublecomplex, ptr %2046, i32 0, i32 1
  %2048 = load double, ptr %2047, align 8, !tbaa !17
  %2049 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  store double %2048, ptr %2049, align 8, !tbaa !17
  %2050 = load ptr, ptr %19, align 8, !tbaa !5
  %2051 = load i64, ptr %2050, align 8, !tbaa !9
  %2052 = sub nsw i64 %2051, 1
  store i64 %2052, ptr %39, align 8, !tbaa !9
  %2053 = load ptr, ptr %19, align 8, !tbaa !5
  %2054 = load i64, ptr %2053, align 8, !tbaa !9
  %2055 = sub nsw i64 %2054, 1
  %2056 = load i64, ptr %60, align 8, !tbaa !9
  %2057 = load i64, ptr %36, align 8, !tbaa !9
  %2058 = mul nsw i64 %2056, %2057
  %2059 = add nsw i64 %2055, %2058
  store i64 %2059, ptr %40, align 8, !tbaa !9
  %2060 = load ptr, ptr %22, align 8, !tbaa !5
  %2061 = load i64, ptr %39, align 8, !tbaa !9
  %2062 = getelementptr inbounds %struct.doublecomplex, ptr %2060, i64 %2061
  %2063 = getelementptr inbounds %struct.doublecomplex, ptr %2062, i32 0, i32 0
  %2064 = load double, ptr %2063, align 8, !tbaa !15
  %2065 = load ptr, ptr %27, align 8, !tbaa !5
  %2066 = load i64, ptr %40, align 8, !tbaa !9
  %2067 = getelementptr inbounds %struct.doublecomplex, ptr %2065, i64 %2066
  %2068 = getelementptr inbounds %struct.doublecomplex, ptr %2067, i32 0, i32 0
  %2069 = load double, ptr %2068, align 8, !tbaa !15
  %2070 = load ptr, ptr %22, align 8, !tbaa !5
  %2071 = load i64, ptr %39, align 8, !tbaa !9
  %2072 = getelementptr inbounds %struct.doublecomplex, ptr %2070, i64 %2071
  %2073 = getelementptr inbounds %struct.doublecomplex, ptr %2072, i32 0, i32 1
  %2074 = load double, ptr %2073, align 8, !tbaa !17
  %2075 = load ptr, ptr %27, align 8, !tbaa !5
  %2076 = load i64, ptr %40, align 8, !tbaa !9
  %2077 = getelementptr inbounds %struct.doublecomplex, ptr %2075, i64 %2076
  %2078 = getelementptr inbounds %struct.doublecomplex, ptr %2077, i32 0, i32 1
  %2079 = load double, ptr %2078, align 8, !tbaa !17
  %2080 = fmul double %2074, %2079
  %2081 = fneg double %2080
  %2082 = call double @llvm.fmuladd.f64(double %2064, double %2069, double %2081)
  %2083 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %2082, ptr %2083, align 8, !tbaa !15
  %2084 = load ptr, ptr %22, align 8, !tbaa !5
  %2085 = load i64, ptr %39, align 8, !tbaa !9
  %2086 = getelementptr inbounds %struct.doublecomplex, ptr %2084, i64 %2085
  %2087 = getelementptr inbounds %struct.doublecomplex, ptr %2086, i32 0, i32 0
  %2088 = load double, ptr %2087, align 8, !tbaa !15
  %2089 = load ptr, ptr %27, align 8, !tbaa !5
  %2090 = load i64, ptr %40, align 8, !tbaa !9
  %2091 = getelementptr inbounds %struct.doublecomplex, ptr %2089, i64 %2090
  %2092 = getelementptr inbounds %struct.doublecomplex, ptr %2091, i32 0, i32 1
  %2093 = load double, ptr %2092, align 8, !tbaa !17
  %2094 = load ptr, ptr %22, align 8, !tbaa !5
  %2095 = load i64, ptr %39, align 8, !tbaa !9
  %2096 = getelementptr inbounds %struct.doublecomplex, ptr %2094, i64 %2095
  %2097 = getelementptr inbounds %struct.doublecomplex, ptr %2096, i32 0, i32 1
  %2098 = load double, ptr %2097, align 8, !tbaa !17
  %2099 = load ptr, ptr %27, align 8, !tbaa !5
  %2100 = load i64, ptr %40, align 8, !tbaa !9
  %2101 = getelementptr inbounds %struct.doublecomplex, ptr %2099, i64 %2100
  %2102 = getelementptr inbounds %struct.doublecomplex, ptr %2101, i32 0, i32 0
  %2103 = load double, ptr %2102, align 8, !tbaa !15
  %2104 = fmul double %2098, %2103
  %2105 = call double @llvm.fmuladd.f64(double %2088, double %2093, double %2104)
  %2106 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %2105, ptr %2106, align 8, !tbaa !17
  %2107 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %2108 = load double, ptr %2107, align 8, !tbaa !15
  %2109 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  store double %2108, ptr %2109, align 8, !tbaa !15
  %2110 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %2111 = load double, ptr %2110, align 8, !tbaa !17
  %2112 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  store double %2111, ptr %2112, align 8, !tbaa !17
  %2113 = load ptr, ptr %19, align 8, !tbaa !5
  %2114 = load i64, ptr %2113, align 8, !tbaa !9
  store i64 %2114, ptr %39, align 8, !tbaa !9
  %2115 = load ptr, ptr %19, align 8, !tbaa !5
  %2116 = load i64, ptr %2115, align 8, !tbaa !9
  %2117 = load i64, ptr %60, align 8, !tbaa !9
  %2118 = load i64, ptr %36, align 8, !tbaa !9
  %2119 = mul nsw i64 %2117, %2118
  %2120 = add nsw i64 %2116, %2119
  store i64 %2120, ptr %40, align 8, !tbaa !9
  %2121 = load ptr, ptr %21, align 8, !tbaa !5
  %2122 = load i64, ptr %39, align 8, !tbaa !9
  %2123 = getelementptr inbounds double, ptr %2121, i64 %2122
  %2124 = load double, ptr %2123, align 8, !tbaa !11
  %2125 = load ptr, ptr %27, align 8, !tbaa !5
  %2126 = load i64, ptr %40, align 8, !tbaa !9
  %2127 = getelementptr inbounds %struct.doublecomplex, ptr %2125, i64 %2126
  %2128 = getelementptr inbounds %struct.doublecomplex, ptr %2127, i32 0, i32 0
  %2129 = load double, ptr %2128, align 8, !tbaa !15
  %2130 = fmul double %2124, %2129
  %2131 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %2130, ptr %2131, align 8, !tbaa !15
  %2132 = load ptr, ptr %21, align 8, !tbaa !5
  %2133 = load i64, ptr %39, align 8, !tbaa !9
  %2134 = getelementptr inbounds double, ptr %2132, i64 %2133
  %2135 = load double, ptr %2134, align 8, !tbaa !11
  %2136 = load ptr, ptr %27, align 8, !tbaa !5
  %2137 = load i64, ptr %40, align 8, !tbaa !9
  %2138 = getelementptr inbounds %struct.doublecomplex, ptr %2136, i64 %2137
  %2139 = getelementptr inbounds %struct.doublecomplex, ptr %2138, i32 0, i32 1
  %2140 = load double, ptr %2139, align 8, !tbaa !17
  %2141 = fmul double %2135, %2140
  %2142 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %2141, ptr %2142, align 8, !tbaa !17
  %2143 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %2144 = load double, ptr %2143, align 8, !tbaa !15
  %2145 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  store double %2144, ptr %2145, align 8, !tbaa !15
  %2146 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %2147 = load double, ptr %2146, align 8, !tbaa !17
  %2148 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  store double %2147, ptr %2148, align 8, !tbaa !17
  %2149 = load ptr, ptr %19, align 8, !tbaa !5
  %2150 = load i64, ptr %2149, align 8, !tbaa !9
  store i64 %2150, ptr %39, align 8, !tbaa !9
  %2151 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2152 = load double, ptr %2151, align 8, !tbaa !15
  %2153 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 0
  %2154 = load double, ptr %2153, align 8, !tbaa !15
  %2155 = fsub double %2152, %2154
  %2156 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %2155, ptr %2156, align 8, !tbaa !15
  %2157 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %2158 = load double, ptr %2157, align 8, !tbaa !17
  %2159 = getelementptr inbounds %struct.doublecomplex, ptr %63, i32 0, i32 1
  %2160 = load double, ptr %2159, align 8, !tbaa !17
  %2161 = fsub double %2158, %2160
  %2162 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %2161, ptr %2162, align 8, !tbaa !17
  %2163 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %2164 = load double, ptr %2163, align 8, !tbaa !15
  %2165 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %2166 = load double, ptr %2165, align 8, !tbaa !15
  %2167 = fsub double %2164, %2166
  %2168 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  store double %2167, ptr %2168, align 8, !tbaa !15
  %2169 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %2170 = load double, ptr %2169, align 8, !tbaa !17
  %2171 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 1
  %2172 = load double, ptr %2171, align 8, !tbaa !17
  %2173 = fsub double %2170, %2172
  %2174 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  store double %2173, ptr %2174, align 8, !tbaa !17
  %2175 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 0
  %2176 = load double, ptr %2175, align 8, !tbaa !15
  %2177 = load ptr, ptr %31, align 8, !tbaa !5
  %2178 = load i64, ptr %39, align 8, !tbaa !9
  %2179 = getelementptr inbounds %struct.doublecomplex, ptr %2177, i64 %2178
  %2180 = getelementptr inbounds %struct.doublecomplex, ptr %2179, i32 0, i32 0
  store double %2176, ptr %2180, align 8, !tbaa !15
  %2181 = getelementptr inbounds %struct.doublecomplex, ptr %56, i32 0, i32 1
  %2182 = load double, ptr %2181, align 8, !tbaa !17
  %2183 = load ptr, ptr %31, align 8, !tbaa !5
  %2184 = load i64, ptr %39, align 8, !tbaa !9
  %2185 = getelementptr inbounds %struct.doublecomplex, ptr %2183, i64 %2184
  %2186 = getelementptr inbounds %struct.doublecomplex, ptr %2185, i32 0, i32 1
  store double %2182, ptr %2186, align 8, !tbaa !17
  %2187 = load ptr, ptr %19, align 8, !tbaa !5
  %2188 = load i64, ptr %2187, align 8, !tbaa !9
  %2189 = sub nsw i64 %2188, 1
  store i64 %2189, ptr %39, align 8, !tbaa !9
  %2190 = load ptr, ptr %19, align 8, !tbaa !5
  %2191 = load i64, ptr %2190, align 8, !tbaa !9
  %2192 = sub nsw i64 %2191, 1
  %2193 = load i64, ptr %60, align 8, !tbaa !9
  %2194 = load i64, ptr %36, align 8, !tbaa !9
  %2195 = mul nsw i64 %2193, %2194
  %2196 = add nsw i64 %2192, %2195
  store i64 %2196, ptr %40, align 8, !tbaa !9
  %2197 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %2198 = load double, ptr %2197, align 8, !tbaa !15
  store double %2198, ptr %44, align 8, !tbaa !11
  %2199 = load double, ptr %44, align 8, !tbaa !11
  %2200 = fcmp oge double %2199, 0.000000e+00
  br i1 %2200, label %2201, label %2203

2201:                                             ; preds = %2031
  %2202 = load double, ptr %44, align 8, !tbaa !11
  br label %2206

2203:                                             ; preds = %2031
  %2204 = load double, ptr %44, align 8, !tbaa !11
  %2205 = fneg double %2204
  br label %2206

2206:                                             ; preds = %2203, %2201
  %2207 = phi double [ %2202, %2201 ], [ %2205, %2203 ]
  %2208 = call double @d_imag(ptr noundef %62)
  store double %2208, ptr %45, align 8, !tbaa !11
  %2209 = load double, ptr %45, align 8, !tbaa !11
  %2210 = fcmp oge double %2209, 0.000000e+00
  br i1 %2210, label %2211, label %2213

2211:                                             ; preds = %2206
  %2212 = load double, ptr %45, align 8, !tbaa !11
  br label %2216

2213:                                             ; preds = %2206
  %2214 = load double, ptr %45, align 8, !tbaa !11
  %2215 = fneg double %2214
  br label %2216

2216:                                             ; preds = %2213, %2211
  %2217 = phi double [ %2212, %2211 ], [ %2215, %2213 ]
  %2218 = fadd double %2207, %2217
  %2219 = load ptr, ptr %22, align 8, !tbaa !5
  %2220 = load i64, ptr %39, align 8, !tbaa !9
  %2221 = getelementptr inbounds %struct.doublecomplex, ptr %2219, i64 %2220
  %2222 = getelementptr inbounds %struct.doublecomplex, ptr %2221, i32 0, i32 0
  %2223 = load double, ptr %2222, align 8, !tbaa !15
  store double %2223, ptr %46, align 8, !tbaa !11
  %2224 = load double, ptr %46, align 8, !tbaa !11
  %2225 = fcmp oge double %2224, 0.000000e+00
  br i1 %2225, label %2226, label %2228

2226:                                             ; preds = %2216
  %2227 = load double, ptr %46, align 8, !tbaa !11
  br label %2231

2228:                                             ; preds = %2216
  %2229 = load double, ptr %46, align 8, !tbaa !11
  %2230 = fneg double %2229
  br label %2231

2231:                                             ; preds = %2228, %2226
  %2232 = phi double [ %2227, %2226 ], [ %2230, %2228 ]
  %2233 = load ptr, ptr %22, align 8, !tbaa !5
  %2234 = load ptr, ptr %19, align 8, !tbaa !5
  %2235 = load i64, ptr %2234, align 8, !tbaa !9
  %2236 = sub nsw i64 %2235, 1
  %2237 = getelementptr inbounds %struct.doublecomplex, ptr %2233, i64 %2236
  %2238 = call double @d_imag(ptr noundef %2237)
  store double %2238, ptr %47, align 8, !tbaa !11
  %2239 = load double, ptr %47, align 8, !tbaa !11
  %2240 = fcmp oge double %2239, 0.000000e+00
  br i1 %2240, label %2241, label %2243

2241:                                             ; preds = %2231
  %2242 = load double, ptr %47, align 8, !tbaa !11
  br label %2246

2243:                                             ; preds = %2231
  %2244 = load double, ptr %47, align 8, !tbaa !11
  %2245 = fneg double %2244
  br label %2246

2246:                                             ; preds = %2243, %2241
  %2247 = phi double [ %2242, %2241 ], [ %2245, %2243 ]
  %2248 = fadd double %2232, %2247
  %2249 = load ptr, ptr %27, align 8, !tbaa !5
  %2250 = load i64, ptr %40, align 8, !tbaa !9
  %2251 = getelementptr inbounds %struct.doublecomplex, ptr %2249, i64 %2250
  %2252 = getelementptr inbounds %struct.doublecomplex, ptr %2251, i32 0, i32 0
  %2253 = load double, ptr %2252, align 8, !tbaa !15
  store double %2253, ptr %48, align 8, !tbaa !11
  %2254 = load double, ptr %48, align 8, !tbaa !11
  %2255 = fcmp oge double %2254, 0.000000e+00
  br i1 %2255, label %2256, label %2258

2256:                                             ; preds = %2246
  %2257 = load double, ptr %48, align 8, !tbaa !11
  br label %2261

2258:                                             ; preds = %2246
  %2259 = load double, ptr %48, align 8, !tbaa !11
  %2260 = fneg double %2259
  br label %2261

2261:                                             ; preds = %2258, %2256
  %2262 = phi double [ %2257, %2256 ], [ %2260, %2258 ]
  %2263 = load ptr, ptr %27, align 8, !tbaa !5
  %2264 = load ptr, ptr %19, align 8, !tbaa !5
  %2265 = load i64, ptr %2264, align 8, !tbaa !9
  %2266 = sub nsw i64 %2265, 1
  %2267 = load i64, ptr %60, align 8, !tbaa !9
  %2268 = load i64, ptr %36, align 8, !tbaa !9
  %2269 = mul nsw i64 %2267, %2268
  %2270 = add nsw i64 %2266, %2269
  %2271 = getelementptr inbounds %struct.doublecomplex, ptr %2263, i64 %2270
  %2272 = call double @d_imag(ptr noundef %2271)
  store double %2272, ptr %49, align 8, !tbaa !11
  %2273 = load double, ptr %49, align 8, !tbaa !11
  %2274 = fcmp oge double %2273, 0.000000e+00
  br i1 %2274, label %2275, label %2277

2275:                                             ; preds = %2261
  %2276 = load double, ptr %49, align 8, !tbaa !11
  br label %2280

2277:                                             ; preds = %2261
  %2278 = load double, ptr %49, align 8, !tbaa !11
  %2279 = fneg double %2278
  br label %2280

2280:                                             ; preds = %2277, %2275
  %2281 = phi double [ %2276, %2275 ], [ %2279, %2277 ]
  %2282 = fadd double %2262, %2281
  %2283 = call double @llvm.fmuladd.f64(double %2248, double %2282, double %2218)
  %2284 = getelementptr inbounds %struct.doublecomplex, ptr %64, i32 0, i32 0
  %2285 = load double, ptr %2284, align 8, !tbaa !15
  store double %2285, ptr %50, align 8, !tbaa !11
  %2286 = load double, ptr %50, align 8, !tbaa !11
  %2287 = fcmp oge double %2286, 0.000000e+00
  br i1 %2287, label %2288, label %2290

2288:                                             ; preds = %2280
  %2289 = load double, ptr %50, align 8, !tbaa !11
  br label %2293

2290:                                             ; preds = %2280
  %2291 = load double, ptr %50, align 8, !tbaa !11
  %2292 = fneg double %2291
  br label %2293

2293:                                             ; preds = %2290, %2288
  %2294 = phi double [ %2289, %2288 ], [ %2292, %2290 ]
  %2295 = call double @d_imag(ptr noundef %64)
  store double %2295, ptr %51, align 8, !tbaa !11
  %2296 = load double, ptr %51, align 8, !tbaa !11
  %2297 = fcmp oge double %2296, 0.000000e+00
  br i1 %2297, label %2298, label %2300

2298:                                             ; preds = %2293
  %2299 = load double, ptr %51, align 8, !tbaa !11
  br label %2303

2300:                                             ; preds = %2293
  %2301 = load double, ptr %51, align 8, !tbaa !11
  %2302 = fneg double %2301
  br label %2303

2303:                                             ; preds = %2300, %2298
  %2304 = phi double [ %2299, %2298 ], [ %2302, %2300 ]
  %2305 = fadd double %2294, %2304
  %2306 = fadd double %2283, %2305
  %2307 = load ptr, ptr %32, align 8, !tbaa !5
  %2308 = load ptr, ptr %19, align 8, !tbaa !5
  %2309 = load i64, ptr %2308, align 8, !tbaa !9
  %2310 = getelementptr inbounds double, ptr %2307, i64 %2309
  store double %2306, ptr %2310, align 8, !tbaa !11
  br label %2311

2311:                                             ; preds = %2303, %1378
  br label %2312

2312:                                             ; preds = %2311, %1263
  store double 0.000000e+00, ptr %61, align 8, !tbaa !11
  %2313 = load ptr, ptr %19, align 8, !tbaa !5
  %2314 = load i64, ptr %2313, align 8, !tbaa !9
  store i64 %2314, ptr %39, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %2315

2315:                                             ; preds = %2421, %2312
  %2316 = load i64, ptr %59, align 8, !tbaa !9
  %2317 = load i64, ptr %39, align 8, !tbaa !9
  %2318 = icmp sle i64 %2316, %2317
  br i1 %2318, label %2319, label %2424

2319:                                             ; preds = %2315
  %2320 = load ptr, ptr %32, align 8, !tbaa !5
  %2321 = load i64, ptr %59, align 8, !tbaa !9
  %2322 = getelementptr inbounds double, ptr %2320, i64 %2321
  %2323 = load double, ptr %2322, align 8, !tbaa !11
  %2324 = load double, ptr %70, align 8, !tbaa !11
  %2325 = fcmp ogt double %2323, %2324
  br i1 %2325, label %2326, label %2371

2326:                                             ; preds = %2319
  %2327 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %2327, ptr %40, align 8, !tbaa !9
  %2328 = load double, ptr %61, align 8, !tbaa !11
  store double %2328, ptr %46, align 8, !tbaa !11
  %2329 = load ptr, ptr %31, align 8, !tbaa !5
  %2330 = load i64, ptr %40, align 8, !tbaa !9
  %2331 = getelementptr inbounds %struct.doublecomplex, ptr %2329, i64 %2330
  %2332 = getelementptr inbounds %struct.doublecomplex, ptr %2331, i32 0, i32 0
  %2333 = load double, ptr %2332, align 8, !tbaa !15
  store double %2333, ptr %44, align 8, !tbaa !11
  %2334 = load double, ptr %44, align 8, !tbaa !11
  %2335 = fcmp oge double %2334, 0.000000e+00
  br i1 %2335, label %2336, label %2338

2336:                                             ; preds = %2326
  %2337 = load double, ptr %44, align 8, !tbaa !11
  br label %2341

2338:                                             ; preds = %2326
  %2339 = load double, ptr %44, align 8, !tbaa !11
  %2340 = fneg double %2339
  br label %2341

2341:                                             ; preds = %2338, %2336
  %2342 = phi double [ %2337, %2336 ], [ %2340, %2338 ]
  %2343 = load ptr, ptr %31, align 8, !tbaa !5
  %2344 = load i64, ptr %59, align 8, !tbaa !9
  %2345 = getelementptr inbounds %struct.doublecomplex, ptr %2343, i64 %2344
  %2346 = call double @d_imag(ptr noundef %2345)
  store double %2346, ptr %45, align 8, !tbaa !11
  %2347 = load double, ptr %45, align 8, !tbaa !11
  %2348 = fcmp oge double %2347, 0.000000e+00
  br i1 %2348, label %2349, label %2351

2349:                                             ; preds = %2341
  %2350 = load double, ptr %45, align 8, !tbaa !11
  br label %2354

2351:                                             ; preds = %2341
  %2352 = load double, ptr %45, align 8, !tbaa !11
  %2353 = fneg double %2352
  br label %2354

2354:                                             ; preds = %2351, %2349
  %2355 = phi double [ %2350, %2349 ], [ %2353, %2351 ]
  %2356 = fadd double %2342, %2355
  %2357 = load ptr, ptr %32, align 8, !tbaa !5
  %2358 = load i64, ptr %59, align 8, !tbaa !9
  %2359 = getelementptr inbounds double, ptr %2357, i64 %2358
  %2360 = load double, ptr %2359, align 8, !tbaa !11
  %2361 = fdiv double %2356, %2360
  store double %2361, ptr %47, align 8, !tbaa !11
  %2362 = load double, ptr %46, align 8, !tbaa !11
  %2363 = load double, ptr %47, align 8, !tbaa !11
  %2364 = fcmp oge double %2362, %2363
  br i1 %2364, label %2365, label %2367

2365:                                             ; preds = %2354
  %2366 = load double, ptr %46, align 8, !tbaa !11
  br label %2369

2367:                                             ; preds = %2354
  %2368 = load double, ptr %47, align 8, !tbaa !11
  br label %2369

2369:                                             ; preds = %2367, %2365
  %2370 = phi double [ %2366, %2365 ], [ %2368, %2367 ]
  store double %2370, ptr %61, align 8, !tbaa !11
  br label %2420

2371:                                             ; preds = %2319
  %2372 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %2372, ptr %40, align 8, !tbaa !9
  %2373 = load double, ptr %61, align 8, !tbaa !11
  store double %2373, ptr %46, align 8, !tbaa !11
  %2374 = load ptr, ptr %31, align 8, !tbaa !5
  %2375 = load i64, ptr %40, align 8, !tbaa !9
  %2376 = getelementptr inbounds %struct.doublecomplex, ptr %2374, i64 %2375
  %2377 = getelementptr inbounds %struct.doublecomplex, ptr %2376, i32 0, i32 0
  %2378 = load double, ptr %2377, align 8, !tbaa !15
  store double %2378, ptr %44, align 8, !tbaa !11
  %2379 = load double, ptr %44, align 8, !tbaa !11
  %2380 = fcmp oge double %2379, 0.000000e+00
  br i1 %2380, label %2381, label %2383

2381:                                             ; preds = %2371
  %2382 = load double, ptr %44, align 8, !tbaa !11
  br label %2386

2383:                                             ; preds = %2371
  %2384 = load double, ptr %44, align 8, !tbaa !11
  %2385 = fneg double %2384
  br label %2386

2386:                                             ; preds = %2383, %2381
  %2387 = phi double [ %2382, %2381 ], [ %2385, %2383 ]
  %2388 = load ptr, ptr %31, align 8, !tbaa !5
  %2389 = load i64, ptr %59, align 8, !tbaa !9
  %2390 = getelementptr inbounds %struct.doublecomplex, ptr %2388, i64 %2389
  %2391 = call double @d_imag(ptr noundef %2390)
  store double %2391, ptr %45, align 8, !tbaa !11
  %2392 = load double, ptr %45, align 8, !tbaa !11
  %2393 = fcmp oge double %2392, 0.000000e+00
  br i1 %2393, label %2394, label %2396

2394:                                             ; preds = %2386
  %2395 = load double, ptr %45, align 8, !tbaa !11
  br label %2399

2396:                                             ; preds = %2386
  %2397 = load double, ptr %45, align 8, !tbaa !11
  %2398 = fneg double %2397
  br label %2399

2399:                                             ; preds = %2396, %2394
  %2400 = phi double [ %2395, %2394 ], [ %2398, %2396 ]
  %2401 = fadd double %2387, %2400
  %2402 = load double, ptr %69, align 8, !tbaa !11
  %2403 = fadd double %2401, %2402
  %2404 = load ptr, ptr %32, align 8, !tbaa !5
  %2405 = load i64, ptr %59, align 8, !tbaa !9
  %2406 = getelementptr inbounds double, ptr %2404, i64 %2405
  %2407 = load double, ptr %2406, align 8, !tbaa !11
  %2408 = load double, ptr %69, align 8, !tbaa !11
  %2409 = fadd double %2407, %2408
  %2410 = fdiv double %2403, %2409
  store double %2410, ptr %47, align 8, !tbaa !11
  %2411 = load double, ptr %46, align 8, !tbaa !11
  %2412 = load double, ptr %47, align 8, !tbaa !11
  %2413 = fcmp oge double %2411, %2412
  br i1 %2413, label %2414, label %2416

2414:                                             ; preds = %2399
  %2415 = load double, ptr %46, align 8, !tbaa !11
  br label %2418

2416:                                             ; preds = %2399
  %2417 = load double, ptr %47, align 8, !tbaa !11
  br label %2418

2418:                                             ; preds = %2416, %2414
  %2419 = phi double [ %2415, %2414 ], [ %2417, %2416 ]
  store double %2419, ptr %61, align 8, !tbaa !11
  br label %2420

2420:                                             ; preds = %2418, %2369
  br label %2421

2421:                                             ; preds = %2420
  %2422 = load i64, ptr %59, align 8, !tbaa !9
  %2423 = add nsw i64 %2422, 1
  store i64 %2423, ptr %59, align 8, !tbaa !9
  br label %2315, !llvm.loop !20

2424:                                             ; preds = %2315
  %2425 = load double, ptr %61, align 8, !tbaa !11
  %2426 = load ptr, ptr %30, align 8, !tbaa !5
  %2427 = load i64, ptr %60, align 8, !tbaa !9
  %2428 = getelementptr inbounds double, ptr %2426, i64 %2427
  store double %2425, ptr %2428, align 8, !tbaa !11
  %2429 = load ptr, ptr %30, align 8, !tbaa !5
  %2430 = load i64, ptr %60, align 8, !tbaa !9
  %2431 = getelementptr inbounds double, ptr %2429, i64 %2430
  %2432 = load double, ptr %2431, align 8, !tbaa !11
  %2433 = load double, ptr %68, align 8, !tbaa !11
  %2434 = fcmp ogt double %2432, %2433
  br i1 %2434, label %2435, label %2474

2435:                                             ; preds = %2424
  %2436 = load ptr, ptr %30, align 8, !tbaa !5
  %2437 = load i64, ptr %60, align 8, !tbaa !9
  %2438 = getelementptr inbounds double, ptr %2436, i64 %2437
  %2439 = load double, ptr %2438, align 8, !tbaa !11
  %2440 = fmul double %2439, 2.000000e+00
  %2441 = load double, ptr %74, align 8, !tbaa !11
  %2442 = fcmp ole double %2440, %2441
  br i1 %2442, label %2443, label %2474

2443:                                             ; preds = %2435
  %2444 = load i64, ptr %71, align 8, !tbaa !9
  %2445 = icmp sle i64 %2444, 5
  br i1 %2445, label %2446, label %2474

2446:                                             ; preds = %2443
  %2447 = load ptr, ptr %18, align 8, !tbaa !5
  %2448 = load ptr, ptr %19, align 8, !tbaa !5
  %2449 = load ptr, ptr %23, align 8, !tbaa !5
  %2450 = getelementptr inbounds double, ptr %2449, i64 1
  %2451 = load ptr, ptr %24, align 8, !tbaa !5
  %2452 = getelementptr inbounds %struct.doublecomplex, ptr %2451, i64 1
  %2453 = load ptr, ptr %31, align 8, !tbaa !5
  %2454 = getelementptr inbounds %struct.doublecomplex, ptr %2453, i64 1
  %2455 = load ptr, ptr %19, align 8, !tbaa !5
  %2456 = load ptr, ptr %33, align 8, !tbaa !5
  %2457 = call i32 @zpttrs_(ptr noundef %2447, ptr noundef %2448, ptr noundef @c__1, ptr noundef %2450, ptr noundef %2452, ptr noundef %2454, ptr noundef %2455, ptr noundef %2456)
  %2458 = load ptr, ptr %19, align 8, !tbaa !5
  %2459 = load ptr, ptr %31, align 8, !tbaa !5
  %2460 = getelementptr inbounds %struct.doublecomplex, ptr %2459, i64 1
  %2461 = load ptr, ptr %27, align 8, !tbaa !5
  %2462 = load i64, ptr %60, align 8, !tbaa !9
  %2463 = load i64, ptr %36, align 8, !tbaa !9
  %2464 = mul nsw i64 %2462, %2463
  %2465 = add nsw i64 %2464, 1
  %2466 = getelementptr inbounds %struct.doublecomplex, ptr %2461, i64 %2465
  %2467 = call i32 @f2c_zaxpy(ptr noundef %2458, ptr noundef @c_b16, ptr noundef %2460, ptr noundef @c__1, ptr noundef %2466, ptr noundef @c__1)
  %2468 = load ptr, ptr %30, align 8, !tbaa !5
  %2469 = load i64, ptr %60, align 8, !tbaa !9
  %2470 = getelementptr inbounds double, ptr %2468, i64 %2469
  %2471 = load double, ptr %2470, align 8, !tbaa !11
  store double %2471, ptr %74, align 8, !tbaa !11
  %2472 = load i64, ptr %71, align 8, !tbaa !9
  %2473 = add nsw i64 %2472, 1
  store i64 %2473, ptr %71, align 8, !tbaa !9
  br label %217

2474:                                             ; preds = %2443, %2435, %2424
  %2475 = load ptr, ptr %19, align 8, !tbaa !5
  %2476 = load i64, ptr %2475, align 8, !tbaa !9
  store i64 %2476, ptr %39, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %2477

2477:                                             ; preds = %2575, %2474
  %2478 = load i64, ptr %59, align 8, !tbaa !9
  %2479 = load i64, ptr %39, align 8, !tbaa !9
  %2480 = icmp sle i64 %2478, %2479
  br i1 %2480, label %2481, label %2578

2481:                                             ; preds = %2477
  %2482 = load ptr, ptr %32, align 8, !tbaa !5
  %2483 = load i64, ptr %59, align 8, !tbaa !9
  %2484 = getelementptr inbounds double, ptr %2482, i64 %2483
  %2485 = load double, ptr %2484, align 8, !tbaa !11
  %2486 = load double, ptr %70, align 8, !tbaa !11
  %2487 = fcmp ogt double %2485, %2486
  br i1 %2487, label %2488, label %2530

2488:                                             ; preds = %2481
  %2489 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %2489, ptr %40, align 8, !tbaa !9
  %2490 = load ptr, ptr %31, align 8, !tbaa !5
  %2491 = load i64, ptr %40, align 8, !tbaa !9
  %2492 = getelementptr inbounds %struct.doublecomplex, ptr %2490, i64 %2491
  %2493 = getelementptr inbounds %struct.doublecomplex, ptr %2492, i32 0, i32 0
  %2494 = load double, ptr %2493, align 8, !tbaa !15
  store double %2494, ptr %44, align 8, !tbaa !11
  %2495 = load double, ptr %44, align 8, !tbaa !11
  %2496 = fcmp oge double %2495, 0.000000e+00
  br i1 %2496, label %2497, label %2499

2497:                                             ; preds = %2488
  %2498 = load double, ptr %44, align 8, !tbaa !11
  br label %2502

2499:                                             ; preds = %2488
  %2500 = load double, ptr %44, align 8, !tbaa !11
  %2501 = fneg double %2500
  br label %2502

2502:                                             ; preds = %2499, %2497
  %2503 = phi double [ %2498, %2497 ], [ %2501, %2499 ]
  %2504 = load ptr, ptr %31, align 8, !tbaa !5
  %2505 = load i64, ptr %59, align 8, !tbaa !9
  %2506 = getelementptr inbounds %struct.doublecomplex, ptr %2504, i64 %2505
  %2507 = call double @d_imag(ptr noundef %2506)
  store double %2507, ptr %45, align 8, !tbaa !11
  %2508 = load double, ptr %45, align 8, !tbaa !11
  %2509 = fcmp oge double %2508, 0.000000e+00
  br i1 %2509, label %2510, label %2512

2510:                                             ; preds = %2502
  %2511 = load double, ptr %45, align 8, !tbaa !11
  br label %2515

2512:                                             ; preds = %2502
  %2513 = load double, ptr %45, align 8, !tbaa !11
  %2514 = fneg double %2513
  br label %2515

2515:                                             ; preds = %2512, %2510
  %2516 = phi double [ %2511, %2510 ], [ %2514, %2512 ]
  %2517 = fadd double %2503, %2516
  %2518 = load i64, ptr %67, align 8, !tbaa !9
  %2519 = sitofp i64 %2518 to double
  %2520 = load double, ptr %68, align 8, !tbaa !11
  %2521 = fmul double %2519, %2520
  %2522 = load ptr, ptr %32, align 8, !tbaa !5
  %2523 = load i64, ptr %59, align 8, !tbaa !9
  %2524 = getelementptr inbounds double, ptr %2522, i64 %2523
  %2525 = load double, ptr %2524, align 8, !tbaa !11
  %2526 = call double @llvm.fmuladd.f64(double %2521, double %2525, double %2517)
  %2527 = load ptr, ptr %32, align 8, !tbaa !5
  %2528 = load i64, ptr %59, align 8, !tbaa !9
  %2529 = getelementptr inbounds double, ptr %2527, i64 %2528
  store double %2526, ptr %2529, align 8, !tbaa !11
  br label %2574

2530:                                             ; preds = %2481
  %2531 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %2531, ptr %40, align 8, !tbaa !9
  %2532 = load ptr, ptr %31, align 8, !tbaa !5
  %2533 = load i64, ptr %40, align 8, !tbaa !9
  %2534 = getelementptr inbounds %struct.doublecomplex, ptr %2532, i64 %2533
  %2535 = getelementptr inbounds %struct.doublecomplex, ptr %2534, i32 0, i32 0
  %2536 = load double, ptr %2535, align 8, !tbaa !15
  store double %2536, ptr %44, align 8, !tbaa !11
  %2537 = load double, ptr %44, align 8, !tbaa !11
  %2538 = fcmp oge double %2537, 0.000000e+00
  br i1 %2538, label %2539, label %2541

2539:                                             ; preds = %2530
  %2540 = load double, ptr %44, align 8, !tbaa !11
  br label %2544

2541:                                             ; preds = %2530
  %2542 = load double, ptr %44, align 8, !tbaa !11
  %2543 = fneg double %2542
  br label %2544

2544:                                             ; preds = %2541, %2539
  %2545 = phi double [ %2540, %2539 ], [ %2543, %2541 ]
  %2546 = load ptr, ptr %31, align 8, !tbaa !5
  %2547 = load i64, ptr %59, align 8, !tbaa !9
  %2548 = getelementptr inbounds %struct.doublecomplex, ptr %2546, i64 %2547
  %2549 = call double @d_imag(ptr noundef %2548)
  store double %2549, ptr %45, align 8, !tbaa !11
  %2550 = load double, ptr %45, align 8, !tbaa !11
  %2551 = fcmp oge double %2550, 0.000000e+00
  br i1 %2551, label %2552, label %2554

2552:                                             ; preds = %2544
  %2553 = load double, ptr %45, align 8, !tbaa !11
  br label %2557

2554:                                             ; preds = %2544
  %2555 = load double, ptr %45, align 8, !tbaa !11
  %2556 = fneg double %2555
  br label %2557

2557:                                             ; preds = %2554, %2552
  %2558 = phi double [ %2553, %2552 ], [ %2556, %2554 ]
  %2559 = fadd double %2545, %2558
  %2560 = load i64, ptr %67, align 8, !tbaa !9
  %2561 = sitofp i64 %2560 to double
  %2562 = load double, ptr %68, align 8, !tbaa !11
  %2563 = fmul double %2561, %2562
  %2564 = load ptr, ptr %32, align 8, !tbaa !5
  %2565 = load i64, ptr %59, align 8, !tbaa !9
  %2566 = getelementptr inbounds double, ptr %2564, i64 %2565
  %2567 = load double, ptr %2566, align 8, !tbaa !11
  %2568 = call double @llvm.fmuladd.f64(double %2563, double %2567, double %2559)
  %2569 = load double, ptr %69, align 8, !tbaa !11
  %2570 = fadd double %2568, %2569
  %2571 = load ptr, ptr %32, align 8, !tbaa !5
  %2572 = load i64, ptr %59, align 8, !tbaa !9
  %2573 = getelementptr inbounds double, ptr %2571, i64 %2572
  store double %2570, ptr %2573, align 8, !tbaa !11
  br label %2574

2574:                                             ; preds = %2557, %2515
  br label %2575

2575:                                             ; preds = %2574
  %2576 = load i64, ptr %59, align 8, !tbaa !9
  %2577 = add nsw i64 %2576, 1
  store i64 %2577, ptr %59, align 8, !tbaa !9
  br label %2477, !llvm.loop !21

2578:                                             ; preds = %2477
  %2579 = load ptr, ptr %19, align 8, !tbaa !5
  %2580 = load ptr, ptr %32, align 8, !tbaa !5
  %2581 = getelementptr inbounds double, ptr %2580, i64 1
  %2582 = call i64 @f2c_idamax(ptr noundef %2579, ptr noundef %2581, ptr noundef @c__1)
  store i64 %2582, ptr %66, align 8, !tbaa !9
  %2583 = load ptr, ptr %32, align 8, !tbaa !5
  %2584 = load i64, ptr %66, align 8, !tbaa !9
  %2585 = getelementptr inbounds double, ptr %2583, i64 %2584
  %2586 = load double, ptr %2585, align 8, !tbaa !11
  %2587 = load ptr, ptr %29, align 8, !tbaa !5
  %2588 = load i64, ptr %60, align 8, !tbaa !9
  %2589 = getelementptr inbounds double, ptr %2587, i64 %2588
  store double %2586, ptr %2589, align 8, !tbaa !11
  %2590 = load ptr, ptr %32, align 8, !tbaa !5
  %2591 = getelementptr inbounds double, ptr %2590, i64 1
  store double 1.000000e+00, ptr %2591, align 8, !tbaa !11
  %2592 = load ptr, ptr %19, align 8, !tbaa !5
  %2593 = load i64, ptr %2592, align 8, !tbaa !9
  store i64 %2593, ptr %39, align 8, !tbaa !9
  store i64 2, ptr %59, align 8, !tbaa !9
  br label %2594

2594:                                             ; preds = %2613, %2578
  %2595 = load i64, ptr %59, align 8, !tbaa !9
  %2596 = load i64, ptr %39, align 8, !tbaa !9
  %2597 = icmp sle i64 %2595, %2596
  br i1 %2597, label %2598, label %2616

2598:                                             ; preds = %2594
  %2599 = load ptr, ptr %32, align 8, !tbaa !5
  %2600 = load i64, ptr %59, align 8, !tbaa !9
  %2601 = sub nsw i64 %2600, 1
  %2602 = getelementptr inbounds double, ptr %2599, i64 %2601
  %2603 = load double, ptr %2602, align 8, !tbaa !11
  %2604 = load ptr, ptr %24, align 8, !tbaa !5
  %2605 = load i64, ptr %59, align 8, !tbaa !9
  %2606 = sub nsw i64 %2605, 1
  %2607 = getelementptr inbounds %struct.doublecomplex, ptr %2604, i64 %2606
  %2608 = call double @z_abs(ptr noundef %2607)
  %2609 = call double @llvm.fmuladd.f64(double %2603, double %2608, double 1.000000e+00)
  %2610 = load ptr, ptr %32, align 8, !tbaa !5
  %2611 = load i64, ptr %59, align 8, !tbaa !9
  %2612 = getelementptr inbounds double, ptr %2610, i64 %2611
  store double %2609, ptr %2612, align 8, !tbaa !11
  br label %2613

2613:                                             ; preds = %2598
  %2614 = load i64, ptr %59, align 8, !tbaa !9
  %2615 = add nsw i64 %2614, 1
  store i64 %2615, ptr %59, align 8, !tbaa !9
  br label %2594, !llvm.loop !22

2616:                                             ; preds = %2594
  %2617 = load ptr, ptr %23, align 8, !tbaa !5
  %2618 = load ptr, ptr %19, align 8, !tbaa !5
  %2619 = load i64, ptr %2618, align 8, !tbaa !9
  %2620 = getelementptr inbounds double, ptr %2617, i64 %2619
  %2621 = load double, ptr %2620, align 8, !tbaa !11
  %2622 = load ptr, ptr %32, align 8, !tbaa !5
  %2623 = load ptr, ptr %19, align 8, !tbaa !5
  %2624 = load i64, ptr %2623, align 8, !tbaa !9
  %2625 = getelementptr inbounds double, ptr %2622, i64 %2624
  %2626 = load double, ptr %2625, align 8, !tbaa !11
  %2627 = fdiv double %2626, %2621
  store double %2627, ptr %2625, align 8, !tbaa !11
  %2628 = load ptr, ptr %19, align 8, !tbaa !5
  %2629 = load i64, ptr %2628, align 8, !tbaa !9
  %2630 = sub nsw i64 %2629, 1
  store i64 %2630, ptr %59, align 8, !tbaa !9
  br label %2631

2631:                                             ; preds = %2657, %2616
  %2632 = load i64, ptr %59, align 8, !tbaa !9
  %2633 = icmp sge i64 %2632, 1
  br i1 %2633, label %2634, label %2660

2634:                                             ; preds = %2631
  %2635 = load ptr, ptr %32, align 8, !tbaa !5
  %2636 = load i64, ptr %59, align 8, !tbaa !9
  %2637 = getelementptr inbounds double, ptr %2635, i64 %2636
  %2638 = load double, ptr %2637, align 8, !tbaa !11
  %2639 = load ptr, ptr %23, align 8, !tbaa !5
  %2640 = load i64, ptr %59, align 8, !tbaa !9
  %2641 = getelementptr inbounds double, ptr %2639, i64 %2640
  %2642 = load double, ptr %2641, align 8, !tbaa !11
  %2643 = fdiv double %2638, %2642
  %2644 = load ptr, ptr %32, align 8, !tbaa !5
  %2645 = load i64, ptr %59, align 8, !tbaa !9
  %2646 = add nsw i64 %2645, 1
  %2647 = getelementptr inbounds double, ptr %2644, i64 %2646
  %2648 = load double, ptr %2647, align 8, !tbaa !11
  %2649 = load ptr, ptr %24, align 8, !tbaa !5
  %2650 = load i64, ptr %59, align 8, !tbaa !9
  %2651 = getelementptr inbounds %struct.doublecomplex, ptr %2649, i64 %2650
  %2652 = call double @z_abs(ptr noundef %2651)
  %2653 = call double @llvm.fmuladd.f64(double %2648, double %2652, double %2643)
  %2654 = load ptr, ptr %32, align 8, !tbaa !5
  %2655 = load i64, ptr %59, align 8, !tbaa !9
  %2656 = getelementptr inbounds double, ptr %2654, i64 %2655
  store double %2653, ptr %2656, align 8, !tbaa !11
  br label %2657

2657:                                             ; preds = %2634
  %2658 = load i64, ptr %59, align 8, !tbaa !9
  %2659 = add nsw i64 %2658, -1
  store i64 %2659, ptr %59, align 8, !tbaa !9
  br label %2631, !llvm.loop !23

2660:                                             ; preds = %2631
  %2661 = load ptr, ptr %19, align 8, !tbaa !5
  %2662 = load ptr, ptr %32, align 8, !tbaa !5
  %2663 = getelementptr inbounds double, ptr %2662, i64 1
  %2664 = call i64 @f2c_idamax(ptr noundef %2661, ptr noundef %2663, ptr noundef @c__1)
  store i64 %2664, ptr %66, align 8, !tbaa !9
  %2665 = load ptr, ptr %32, align 8, !tbaa !5
  %2666 = load i64, ptr %66, align 8, !tbaa !9
  %2667 = getelementptr inbounds double, ptr %2665, i64 %2666
  %2668 = load double, ptr %2667, align 8, !tbaa !11
  store double %2668, ptr %44, align 8, !tbaa !11
  %2669 = load double, ptr %44, align 8, !tbaa !11
  %2670 = fcmp oge double %2669, 0.000000e+00
  br i1 %2670, label %2671, label %2673

2671:                                             ; preds = %2660
  %2672 = load double, ptr %44, align 8, !tbaa !11
  br label %2676

2673:                                             ; preds = %2660
  %2674 = load double, ptr %44, align 8, !tbaa !11
  %2675 = fneg double %2674
  br label %2676

2676:                                             ; preds = %2673, %2671
  %2677 = phi double [ %2672, %2671 ], [ %2675, %2673 ]
  %2678 = load ptr, ptr %29, align 8, !tbaa !5
  %2679 = load i64, ptr %60, align 8, !tbaa !9
  %2680 = getelementptr inbounds double, ptr %2678, i64 %2679
  %2681 = load double, ptr %2680, align 8, !tbaa !11
  %2682 = fmul double %2681, %2677
  store double %2682, ptr %2680, align 8, !tbaa !11
  store double 0.000000e+00, ptr %74, align 8, !tbaa !11
  %2683 = load ptr, ptr %19, align 8, !tbaa !5
  %2684 = load i64, ptr %2683, align 8, !tbaa !9
  store i64 %2684, ptr %39, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %2685

2685:                                             ; preds = %2708, %2676
  %2686 = load i64, ptr %59, align 8, !tbaa !9
  %2687 = load i64, ptr %39, align 8, !tbaa !9
  %2688 = icmp sle i64 %2686, %2687
  br i1 %2688, label %2689, label %2711

2689:                                             ; preds = %2685
  %2690 = load double, ptr %74, align 8, !tbaa !11
  store double %2690, ptr %44, align 8, !tbaa !11
  %2691 = load ptr, ptr %27, align 8, !tbaa !5
  %2692 = load i64, ptr %59, align 8, !tbaa !9
  %2693 = load i64, ptr %60, align 8, !tbaa !9
  %2694 = load i64, ptr %36, align 8, !tbaa !9
  %2695 = mul nsw i64 %2693, %2694
  %2696 = add nsw i64 %2692, %2695
  %2697 = getelementptr inbounds %struct.doublecomplex, ptr %2691, i64 %2696
  %2698 = call double @z_abs(ptr noundef %2697)
  store double %2698, ptr %45, align 8, !tbaa !11
  %2699 = load double, ptr %44, align 8, !tbaa !11
  %2700 = load double, ptr %45, align 8, !tbaa !11
  %2701 = fcmp oge double %2699, %2700
  br i1 %2701, label %2702, label %2704

2702:                                             ; preds = %2689
  %2703 = load double, ptr %44, align 8, !tbaa !11
  br label %2706

2704:                                             ; preds = %2689
  %2705 = load double, ptr %45, align 8, !tbaa !11
  br label %2706

2706:                                             ; preds = %2704, %2702
  %2707 = phi double [ %2703, %2702 ], [ %2705, %2704 ]
  store double %2707, ptr %74, align 8, !tbaa !11
  br label %2708

2708:                                             ; preds = %2706
  %2709 = load i64, ptr %59, align 8, !tbaa !9
  %2710 = add nsw i64 %2709, 1
  store i64 %2710, ptr %59, align 8, !tbaa !9
  br label %2685, !llvm.loop !24

2711:                                             ; preds = %2685
  %2712 = load double, ptr %74, align 8, !tbaa !11
  %2713 = fcmp une double %2712, 0.000000e+00
  br i1 %2713, label %2714, label %2721

2714:                                             ; preds = %2711
  %2715 = load double, ptr %74, align 8, !tbaa !11
  %2716 = load ptr, ptr %29, align 8, !tbaa !5
  %2717 = load i64, ptr %60, align 8, !tbaa !9
  %2718 = getelementptr inbounds double, ptr %2716, i64 %2717
  %2719 = load double, ptr %2718, align 8, !tbaa !11
  %2720 = fdiv double %2719, %2715
  store double %2720, ptr %2718, align 8, !tbaa !11
  br label %2721

2721:                                             ; preds = %2714, %2711
  br label %2722

2722:                                             ; preds = %2721
  %2723 = load i64, ptr %60, align 8, !tbaa !9
  %2724 = add nsw i64 %2723, 1
  store i64 %2724, ptr %60, align 8, !tbaa !9
  br label %212, !llvm.loop !25

2725:                                             ; preds = %212
  store i32 0, ptr %17, align 4
  store i32 1, ptr %75, align 4
  br label %2726

2726:                                             ; preds = %2725, %199, %169
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 16, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 16, 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 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 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
  %2727 = load i32, ptr %17, align 4
  ret i32 %2727
}

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

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

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

declare double @dlamch_(ptr noundef) #2

declare double @d_imag(ptr noundef) #2

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

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

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

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

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

declare double @z_abs(ptr noundef) #2

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

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

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

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


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b16 = external hidden global %struct.doublecomplex, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zptrfs_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef readonly %7, ptr nocapture noundef readonly %8, ptr noundef %9, ptr nocapture noundef readonly %10, ptr nocapture noundef %11, ptr nocapture noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) local_unnamed_addr #0 {
  %17 = ptrtoint ptr %11 to i64
  %18 = ptrtoint ptr %12 to i64
  %19 = alloca i64, align 8
  %20 = alloca %struct.doublecomplex, align 16
  %21 = alloca %struct.doublecomplex, align 16
  %22 = alloca %struct.doublecomplex, align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #5
  %23 = getelementptr inbounds i8, ptr %3, i64 -8
  %24 = getelementptr inbounds i8, ptr %4, i64 -16
  %25 = getelementptr inbounds i8, ptr %5, i64 -8
  %26 = getelementptr inbounds i8, ptr %6, i64 -16
  %27 = load i64, ptr %8, align 8, !tbaa !5
  %28 = xor i64 %27, -1
  %29 = getelementptr inbounds %struct.doublecomplex, ptr %7, i64 %28
  %30 = load i64, ptr %10, align 8, !tbaa !5
  %31 = xor i64 %30, -1
  %32 = getelementptr inbounds %struct.doublecomplex, ptr %9, i64 %31
  %33 = getelementptr inbounds i8, ptr %11, i64 -8
  %34 = getelementptr inbounds i8, ptr %12, i64 -8
  %35 = getelementptr inbounds i8, ptr %13, i64 -16
  %36 = getelementptr inbounds i8, ptr %14, i64 -8
  store i64 0, ptr %15, align 8, !tbaa !5
  %37 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not = icmp eq i64 %37, 0
  br i1 %.not, label %38, label %40

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

40:                                               ; preds = %38, %16
  %41 = load i64, ptr %1, align 8, !tbaa !5
  %42 = icmp slt i64 %41, 0
  br i1 %42, label %.thread.sink.split, label %43

43:                                               ; preds = %40
  %44 = load i64, ptr %2, align 8, !tbaa !5
  %45 = icmp slt i64 %44, 0
  br i1 %45, label %.thread.sink.split, label %46

46:                                               ; preds = %43
  %47 = load i64, ptr %8, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %41, i64 1)
  %48 = icmp slt i64 %47, %spec.select
  br i1 %48, label %.thread.sink.split, label %49

49:                                               ; preds = %46
  %50 = load i64, ptr %10, align 8, !tbaa !5
  %51 = icmp slt i64 %50, %spec.select
  br i1 %51, label %.thread.sink.split, label %52

52:                                               ; preds = %49
  %.pr = load i64, ptr %15, align 8, !tbaa !5
  %.not901 = icmp eq i64 %.pr, 0
  br i1 %.not901, label %56, label %.thread

.thread.sink.split:                               ; preds = %49, %46, %43, %40, %38
  %.sink = phi i64 [ -1, %38 ], [ -2, %40 ], [ -3, %43 ], [ -9, %46 ], [ -11, %49 ]
  store i64 %.sink, ptr %15, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %52
  %53 = phi i64 [ %.pr, %52 ], [ %.sink, %.thread.sink.split ]
  %54 = sub nsw i64 0, %53
  store i64 %54, ptr %19, align 8, !tbaa !5
  %55 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %19) #5
  br label %.loopexit

56:                                               ; preds = %52
  %57 = icmp eq i64 %41, 0
  %.not909991 = icmp eq i64 %44, 0
  br i1 %57, label %59, label %58

58:                                               ; preds = %56
  br i1 %.not909991, label %.loopexit, label %84

59:                                               ; preds = %56
  br i1 %.not909991, label %.loopexit, label %.lr.ph994.preheader

.lr.ph994.preheader:                              ; preds = %59
  %min.iters.check = icmp ult i64 %44, 4
  %60 = sub i64 %18, %17
  %diff.check = icmp ult i64 %60, 32
  %or.cond1031 = or i1 %min.iters.check, %diff.check
  br i1 %or.cond1031, label %.lr.ph994.preheader1066, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph994.preheader
  %n.vec = and i64 %44, 9223372036854775804
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %61 = getelementptr double, ptr %11, i64 %index
  %62 = getelementptr inbounds i8, ptr %61, i64 16
  store <2 x double> zeroinitializer, ptr %61, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %62, align 8, !tbaa !9
  %63 = getelementptr double, ptr %12, i64 %index
  %64 = getelementptr inbounds i8, ptr %63, i64 16
  store <2 x double> zeroinitializer, ptr %63, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %64, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %65 = icmp eq i64 %index.next, %n.vec
  br i1 %65, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %44, %n.vec
  br i1 %cmp.n, label %.loopexit, label %.lr.ph994.preheader1066

.lr.ph994.preheader1066:                          ; preds = %middle.block, %.lr.ph994.preheader
  %.0893992.ph = phi i64 [ 1, %.lr.ph994.preheader ], [ %ind.end, %middle.block ]
  %66 = add nuw i64 %44, 1
  %67 = sub i64 %66, %.0893992.ph
  %68 = sub i64 %44, %.0893992.ph
  %xtraiter = and i64 %67, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph994.prol.loopexit, label %.lr.ph994.prol

.lr.ph994.prol:                                   ; preds = %.lr.ph994.preheader1066, %.lr.ph994.prol
  %.0893992.prol = phi i64 [ %71, %.lr.ph994.prol ], [ %.0893992.ph, %.lr.ph994.preheader1066 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph994.prol ], [ 0, %.lr.ph994.preheader1066 ]
  %69 = getelementptr inbounds double, ptr %33, i64 %.0893992.prol
  store double 0.000000e+00, ptr %69, align 8, !tbaa !9
  %70 = getelementptr inbounds double, ptr %34, i64 %.0893992.prol
  store double 0.000000e+00, ptr %70, align 8, !tbaa !9
  %71 = add nuw i64 %.0893992.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph994.prol.loopexit, label %.lr.ph994.prol, !llvm.loop !15

.lr.ph994.prol.loopexit:                          ; preds = %.lr.ph994.prol, %.lr.ph994.preheader1066
  %.0893992.unr = phi i64 [ %.0893992.ph, %.lr.ph994.preheader1066 ], [ %71, %.lr.ph994.prol ]
  %72 = icmp ult i64 %68, 3
  br i1 %72, label %.loopexit, label %.lr.ph994

.lr.ph994:                                        ; preds = %.lr.ph994.prol.loopexit, %.lr.ph994
  %.0893992 = phi i64 [ %83, %.lr.ph994 ], [ %.0893992.unr, %.lr.ph994.prol.loopexit ]
  %73 = getelementptr inbounds double, ptr %33, i64 %.0893992
  store double 0.000000e+00, ptr %73, align 8, !tbaa !9
  %74 = getelementptr inbounds double, ptr %34, i64 %.0893992
  store double 0.000000e+00, ptr %74, align 8, !tbaa !9
  %75 = getelementptr double, ptr %11, i64 %.0893992
  store double 0.000000e+00, ptr %75, align 8, !tbaa !9
  %76 = getelementptr double, ptr %12, i64 %.0893992
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %77 = add nuw i64 %.0893992, 2
  %78 = getelementptr inbounds double, ptr %33, i64 %77
  store double 0.000000e+00, ptr %78, align 8, !tbaa !9
  %79 = getelementptr inbounds double, ptr %34, i64 %77
  store double 0.000000e+00, ptr %79, align 8, !tbaa !9
  %80 = add nuw i64 %.0893992, 3
  %81 = getelementptr inbounds double, ptr %33, i64 %80
  store double 0.000000e+00, ptr %81, align 8, !tbaa !9
  %82 = getelementptr inbounds double, ptr %34, i64 %80
  store double 0.000000e+00, ptr %82, align 8, !tbaa !9
  %83 = add nuw i64 %.0893992, 4
  %exitcond1001.not.3 = icmp eq i64 %80, %44
  br i1 %exitcond1001.not.3, label %.loopexit, label %.lr.ph994, !llvm.loop !17

84:                                               ; preds = %58
  %85 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #5
  %86 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #5
  %87 = fmul double %86, 4.000000e+00
  %88 = fdiv double %87, %85
  %89 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %89, ptr %19, align 8, !tbaa !5
  %.not902989 = icmp slt i64 %89, 1
  br i1 %.not902989, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %84
  %invariant.gep940 = getelementptr i8, ptr %4, i64 -32
  %invariant.gep944 = getelementptr i8, ptr %32, i64 -16
  %invariant.gep950 = getelementptr i8, ptr %32, i64 16
  %90 = getelementptr inbounds i8, ptr %4, i64 8
  %91 = getelementptr inbounds i8, ptr %20, i64 8
  %92 = fmul double %85, 4.000000e+00
  %invariant.gep = getelementptr i8, ptr %6, i64 -32
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge985.thread
  %.1894990 = phi i64 [ 1, %.preheader.lr.ph ], [ %657, %._crit_edge985.thread ]
  %93 = getelementptr inbounds double, ptr %34, i64 %.1894990
  %94 = mul nsw i64 %.1894990, %27
  %95 = getelementptr %struct.doublecomplex, ptr %29, i64 %94
  %96 = getelementptr i8, ptr %95, i64 16
  %97 = mul nsw i64 %.1894990, %30
  %98 = getelementptr %struct.doublecomplex, ptr %32, i64 %97
  %99 = getelementptr i8, ptr %98, i64 16
  %100 = getelementptr i8, ptr %98, i64 32
  %invariant.gep956 = getelementptr %struct.doublecomplex, ptr %invariant.gep944, i64 %97
  %gep951 = getelementptr %struct.doublecomplex, ptr %invariant.gep950, i64 %97
  br label %101

101:                                              ; preds = %.preheader, %585
  %.0890 = phi i64 [ %589, %585 ], [ 1, %.preheader ]
  %.0 = phi double [ %588, %585 ], [ 3.000000e+00, %.preheader ]
  %102 = load i64, ptr %1, align 8, !tbaa !5
  %103 = icmp eq i64 %102, 1
  %104 = load double, ptr %3, align 8, !tbaa !9
  %105 = load <2 x double>, ptr %96, align 8, !tbaa !9
  store <2 x double> %105, ptr %21, align 16, !tbaa !9
  %106 = load <2 x double>, ptr %99, align 8, !tbaa !9
  %107 = insertelement <2 x double> poison, double %104, i64 0
  %108 = shufflevector <2 x double> %107, <2 x double> poison, <2 x i32> zeroinitializer
  %109 = fmul <2 x double> %108, %106
  store <2 x double> %109, ptr %22, align 16, !tbaa !9
  br i1 %.not, label %325, label %110

110:                                              ; preds = %101
  br i1 %103, label %thread-pre-split, label %111

111:                                              ; preds = %110
  %112 = load double, ptr %4, align 8, !tbaa !18
  %113 = load double, ptr %90, align 8, !tbaa !20
  %114 = fneg double %113
  %115 = fsub <2 x double> %105, %109
  store <2 x double> %115, ptr %20, align 16, !tbaa !9
  %116 = load <2 x double>, ptr %100, align 8, !tbaa !9
  %117 = insertelement <2 x double> poison, double %113, i64 0
  %118 = insertelement <2 x double> %117, double %114, i64 1
  %119 = fmul <2 x double> %116, %118
  %120 = shufflevector <2 x double> %119, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %121 = insertelement <2 x double> poison, double %112, i64 0
  %122 = shufflevector <2 x double> %121, <2 x double> poison, <2 x i32> zeroinitializer
  %123 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %122, <2 x double> %116, <2 x double> %120)
  %124 = fsub <2 x double> %115, %123
  store <2 x double> %124, ptr %13, align 8, !tbaa !9
  %125 = call double @d_imag(ptr noundef nonnull %21) #5
  %126 = load double, ptr %22, align 16, !tbaa !18
  %127 = call double @d_imag(ptr noundef nonnull %22) #5
  %128 = insertelement <2 x double> %105, double %126, i64 1
  %129 = fcmp oge <2 x double> %128, zeroinitializer
  %130 = fneg <2 x double> %128
  %131 = select <2 x i1> %129, <2 x double> %128, <2 x double> %130
  %132 = insertelement <2 x double> poison, double %125, i64 0
  %133 = insertelement <2 x double> %132, double %127, i64 1
  %134 = fcmp oge <2 x double> %133, zeroinitializer
  %135 = fneg <2 x double> %133
  %136 = select <2 x i1> %134, <2 x double> %133, <2 x double> %135
  %137 = fadd <2 x double> %131, %136
  %shift = shufflevector <2 x double> %137, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %138 = fadd <2 x double> %137, %shift
  %139 = extractelement <2 x double> %138, i64 0
  %140 = load double, ptr %4, align 8, !tbaa !18
  %141 = call double @d_imag(ptr noundef nonnull %4) #5
  %142 = insertelement <2 x double> poison, double %140, i64 0
  %143 = insertelement <2 x double> %142, double %141, i64 1
  %144 = fcmp oge <2 x double> %143, zeroinitializer
  %145 = fneg <2 x double> %143
  %146 = select <2 x i1> %144, <2 x double> %143, <2 x double> %145
  %shift1043 = shufflevector <2 x double> %146, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %147 = fadd <2 x double> %146, %shift1043
  %148 = extractelement <2 x double> %147, i64 0
  %149 = load double, ptr %100, align 8, !tbaa !18
  %150 = call double @d_imag(ptr noundef nonnull %100) #5
  %151 = insertelement <2 x double> poison, double %149, i64 0
  %152 = insertelement <2 x double> %151, double %150, i64 1
  %153 = fcmp oge <2 x double> %152, zeroinitializer
  %154 = fneg <2 x double> %152
  %155 = select <2 x i1> %153, <2 x double> %152, <2 x double> %154
  %shift1044 = shufflevector <2 x double> %155, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %156 = fadd <2 x double> %155, %shift1044
  %157 = extractelement <2 x double> %156, i64 0
  %158 = call double @llvm.fmuladd.f64(double %148, double %157, double %139)
  store double %158, ptr %14, align 8, !tbaa !9
  %159 = load i64, ptr %1, align 8, !tbaa !5
  %.not904.not919 = icmp sgt i64 %159, 2
  br i1 %.not904.not919, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %111, %.lr.ph
  %.0895920 = phi i64 [ %172, %.lr.ph ], [ 2, %111 ]
  %gep = getelementptr %struct.doublecomplex, ptr %95, i64 %.0895920
  %160 = load <2 x double>, ptr %gep, align 8, !tbaa !9
  store <2 x double> %160, ptr %21, align 16, !tbaa !9
  %161 = add nsw i64 %.0895920, -1
  %162 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %161
  call void @d_cnjg(ptr noundef nonnull %20, ptr noundef nonnull %162) #5
  %163 = load <2 x double>, ptr %20, align 16
  %gep914 = getelementptr %struct.doublecomplex, ptr %98, i64 %161
  %164 = load double, ptr %91, align 8, !tbaa !20
  %165 = fneg double %164
  %166 = getelementptr inbounds double, ptr %23, i64 %.0895920
  %167 = load double, ptr %166, align 8, !tbaa !9
  %gep916 = getelementptr %struct.doublecomplex, ptr %98, i64 %.0895920
  %168 = load <2 x double>, ptr %gep916, align 8, !tbaa !9
  %169 = insertelement <2 x double> poison, double %167, i64 0
  %170 = shufflevector <2 x double> %169, <2 x double> poison, <2 x i32> zeroinitializer
  %171 = fmul <2 x double> %170, %168
  store <2 x double> %171, ptr %22, align 16, !tbaa !9
  %172 = add nuw nsw i64 %.0895920, 1
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.0895920
  %174 = load double, ptr %173, align 8, !tbaa !18
  %gep918 = getelementptr %struct.doublecomplex, ptr %98, i64 %172
  %175 = getelementptr inbounds i8, ptr %173, i64 8
  %176 = load double, ptr %175, align 8, !tbaa !20
  %177 = fneg double %176
  %178 = load <2 x double>, ptr %gep914, align 8, !tbaa !9
  %179 = insertelement <2 x double> poison, double %164, i64 0
  %180 = insertelement <2 x double> %179, double %165, i64 1
  %181 = fmul <2 x double> %178, %180
  %182 = shufflevector <2 x double> %181, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %183 = shufflevector <2 x double> %163, <2 x double> poison, <2 x i32> zeroinitializer
  %184 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %183, <2 x double> %178, <2 x double> %182)
  %185 = load <2 x double>, ptr %21, align 16, !tbaa !9
  %186 = fsub <2 x double> %185, %184
  %187 = fsub <2 x double> %186, %171
  store <2 x double> %187, ptr %20, align 16, !tbaa !9
  %188 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %.0895920
  %189 = load <2 x double>, ptr %gep918, align 8, !tbaa !9
  %190 = insertelement <2 x double> poison, double %176, i64 0
  %191 = insertelement <2 x double> %190, double %177, i64 1
  %192 = fmul <2 x double> %189, %191
  %193 = shufflevector <2 x double> %192, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %194 = insertelement <2 x double> poison, double %174, i64 0
  %195 = shufflevector <2 x double> %194, <2 x double> poison, <2 x i32> zeroinitializer
  %196 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %195, <2 x double> %189, <2 x double> %193)
  %197 = fsub <2 x double> %187, %196
  store <2 x double> %197, ptr %188, align 8, !tbaa !9
  %198 = extractelement <2 x double> %185, i64 0
  %199 = fcmp oge double %198, 0.000000e+00
  %200 = fneg double %198
  %201 = select i1 %199, double %198, double %200
  %202 = call double @d_imag(ptr noundef nonnull %21) #5
  %203 = fcmp oge double %202, 0.000000e+00
  %204 = fneg double %202
  %205 = select i1 %203, double %202, double %204
  %206 = fadd double %201, %205
  %207 = load double, ptr %162, align 8, !tbaa !18
  %208 = call double @d_imag(ptr noundef nonnull %162) #5
  %209 = insertelement <2 x double> poison, double %207, i64 0
  %210 = insertelement <2 x double> %209, double %208, i64 1
  %211 = fcmp oge <2 x double> %210, zeroinitializer
  %212 = fneg <2 x double> %210
  %213 = select <2 x i1> %211, <2 x double> %210, <2 x double> %212
  %shift1045 = shufflevector <2 x double> %213, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %214 = fadd <2 x double> %213, %shift1045
  %215 = extractelement <2 x double> %214, i64 0
  %216 = load double, ptr %gep914, align 8, !tbaa !18
  %217 = call double @d_imag(ptr noundef nonnull %gep914) #5
  %218 = insertelement <2 x double> poison, double %216, i64 0
  %219 = insertelement <2 x double> %218, double %217, i64 1
  %220 = fcmp oge <2 x double> %219, zeroinitializer
  %221 = fneg <2 x double> %219
  %222 = select <2 x i1> %220, <2 x double> %219, <2 x double> %221
  %shift1046 = shufflevector <2 x double> %222, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %223 = fadd <2 x double> %222, %shift1046
  %224 = extractelement <2 x double> %223, i64 0
  %225 = call double @llvm.fmuladd.f64(double %215, double %224, double %206)
  %226 = load <2 x double>, ptr %22, align 16
  %227 = call double @d_imag(ptr noundef nonnull %22) #5
  %228 = insertelement <2 x double> %226, double %227, i64 1
  %229 = fcmp oge <2 x double> %228, zeroinitializer
  %230 = fneg <2 x double> %228
  %231 = select <2 x i1> %229, <2 x double> %228, <2 x double> %230
  %shift1047 = shufflevector <2 x double> %231, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %232 = fadd <2 x double> %231, %shift1047
  %233 = extractelement <2 x double> %232, i64 0
  %234 = fadd double %225, %233
  %235 = load double, ptr %173, align 8, !tbaa !18
  %236 = call double @d_imag(ptr noundef nonnull %173) #5
  %237 = insertelement <2 x double> poison, double %235, i64 0
  %238 = insertelement <2 x double> %237, double %236, i64 1
  %239 = fcmp oge <2 x double> %238, zeroinitializer
  %240 = fneg <2 x double> %238
  %241 = select <2 x i1> %239, <2 x double> %238, <2 x double> %240
  %shift1048 = shufflevector <2 x double> %241, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %242 = fadd <2 x double> %241, %shift1048
  %243 = extractelement <2 x double> %242, i64 0
  %244 = load double, ptr %gep918, align 8, !tbaa !18
  %245 = call double @d_imag(ptr noundef nonnull %gep918) #5
  %246 = insertelement <2 x double> poison, double %244, i64 0
  %247 = insertelement <2 x double> %246, double %245, i64 1
  %248 = fcmp oge <2 x double> %247, zeroinitializer
  %249 = fneg <2 x double> %247
  %250 = select <2 x i1> %248, <2 x double> %247, <2 x double> %249
  %shift1049 = shufflevector <2 x double> %250, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %251 = fadd <2 x double> %250, %shift1049
  %252 = extractelement <2 x double> %251, i64 0
  %253 = call double @llvm.fmuladd.f64(double %243, double %252, double %234)
  %254 = getelementptr inbounds double, ptr %36, i64 %.0895920
  store double %253, ptr %254, align 8, !tbaa !9
  %exitcond.not = icmp eq i64 %172, %159
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !21

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

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %111
  %255 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ %159, %111 ]
  %gep953 = getelementptr %struct.doublecomplex, ptr %95, i64 %255
  %256 = load <2 x double>, ptr %gep953, align 8, !tbaa !9
  store <2 x double> %256, ptr %21, align 16, !tbaa !9
  %gep941 = getelementptr %struct.doublecomplex, ptr %invariant.gep940, i64 %255
  call void @d_cnjg(ptr noundef nonnull %20, ptr noundef %gep941) #5
  %257 = load i64, ptr %1, align 8, !tbaa !5
  %258 = load <2 x double>, ptr %20, align 16
  %259 = getelementptr %struct.doublecomplex, ptr %32, i64 %257
  %260 = getelementptr i8, ptr %259, i64 -16
  %261 = getelementptr %struct.doublecomplex, ptr %260, i64 %97
  %262 = load double, ptr %91, align 8, !tbaa !20
  %263 = fneg double %262
  %264 = getelementptr inbounds double, ptr %23, i64 %257
  %265 = load double, ptr %264, align 8, !tbaa !9
  %266 = getelementptr %struct.doublecomplex, ptr %259, i64 %97
  %267 = load <2 x double>, ptr %266, align 8, !tbaa !9
  %268 = insertelement <2 x double> poison, double %265, i64 0
  %269 = shufflevector <2 x double> %268, <2 x double> poison, <2 x i32> zeroinitializer
  %270 = fmul <2 x double> %269, %267
  store <2 x double> %270, ptr %22, align 16, !tbaa !9
  %271 = load <2 x double>, ptr %261, align 8, !tbaa !9
  %272 = insertelement <2 x double> poison, double %262, i64 0
  %273 = insertelement <2 x double> %272, double %263, i64 1
  %274 = fmul <2 x double> %271, %273
  %275 = shufflevector <2 x double> %274, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %276 = shufflevector <2 x double> %258, <2 x double> poison, <2 x i32> zeroinitializer
  %277 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %276, <2 x double> %271, <2 x double> %275)
  %278 = load <2 x double>, ptr %21, align 16, !tbaa !9
  %279 = fsub <2 x double> %278, %277
  store <2 x double> %279, ptr %20, align 16, !tbaa !9
  %280 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %257
  %281 = fsub <2 x double> %279, %270
  store <2 x double> %281, ptr %280, align 8, !tbaa !9
  %282 = add nsw i64 %257, -1
  %283 = extractelement <2 x double> %278, i64 0
  %284 = fcmp oge double %283, 0.000000e+00
  %285 = fneg double %283
  %286 = select i1 %284, double %283, double %285
  %287 = call double @d_imag(ptr noundef nonnull %21) #5
  %288 = fcmp oge double %287, 0.000000e+00
  %289 = fneg double %287
  %290 = select i1 %288, double %287, double %289
  %291 = fadd double %286, %290
  %292 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %282
  %293 = load double, ptr %292, align 8, !tbaa !18
  %294 = load i64, ptr %1, align 8, !tbaa !5
  %gep943 = getelementptr %struct.doublecomplex, ptr %invariant.gep940, i64 %294
  %295 = call double @d_imag(ptr noundef %gep943) #5
  %296 = insertelement <2 x double> poison, double %293, i64 0
  %297 = insertelement <2 x double> %296, double %295, i64 1
  %298 = fcmp oge <2 x double> %297, zeroinitializer
  %299 = fneg <2 x double> %297
  %300 = select <2 x i1> %298, <2 x double> %297, <2 x double> %299
  %shift1050 = shufflevector <2 x double> %300, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %301 = fadd <2 x double> %300, %shift1050
  %302 = extractelement <2 x double> %301, i64 0
  %gep955 = getelementptr %struct.doublecomplex, ptr %98, i64 %282
  %303 = load double, ptr %gep955, align 8, !tbaa !18
  %304 = load i64, ptr %1, align 8, !tbaa !5
  %gep957 = getelementptr %struct.doublecomplex, ptr %invariant.gep956, i64 %304
  %305 = call double @d_imag(ptr noundef %gep957) #5
  %306 = insertelement <2 x double> poison, double %303, i64 0
  %307 = insertelement <2 x double> %306, double %305, i64 1
  %308 = fcmp oge <2 x double> %307, zeroinitializer
  %309 = fneg <2 x double> %307
  %310 = select <2 x i1> %308, <2 x double> %307, <2 x double> %309
  %shift1051 = shufflevector <2 x double> %310, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %311 = fadd <2 x double> %310, %shift1051
  %312 = extractelement <2 x double> %311, i64 0
  %313 = call double @llvm.fmuladd.f64(double %302, double %312, double %291)
  %314 = load <2 x double>, ptr %22, align 16
  %315 = call double @d_imag(ptr noundef nonnull %22) #5
  %316 = insertelement <2 x double> %314, double %315, 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
  %shift1052 = shufflevector <2 x double> %319, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %320 = fadd <2 x double> %319, %shift1052
  %321 = extractelement <2 x double> %320, i64 0
  %322 = fadd double %313, %321
  %323 = load i64, ptr %1, align 8, !tbaa !5
  %324 = getelementptr inbounds double, ptr %36, i64 %323
  store double %322, ptr %324, align 8, !tbaa !9
  br label %553

325:                                              ; preds = %101
  br i1 %103, label %thread-pre-split, label %326

326:                                              ; preds = %325
  call void @d_cnjg(ptr noundef nonnull %20, ptr noundef %4) #5
  %327 = load <2 x double>, ptr %20, align 16
  %328 = load double, ptr %91, align 8, !tbaa !20
  %329 = fneg double %328
  %330 = load <2 x double>, ptr %21, align 16, !tbaa !9
  %331 = load <2 x double>, ptr %22, align 16, !tbaa !9
  %332 = fsub <2 x double> %330, %331
  store <2 x double> %332, ptr %20, align 16, !tbaa !9
  %333 = load <2 x double>, ptr %100, align 8, !tbaa !9
  %334 = insertelement <2 x double> poison, double %328, i64 0
  %335 = insertelement <2 x double> %334, double %329, i64 1
  %336 = fmul <2 x double> %333, %335
  %337 = shufflevector <2 x double> %336, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %338 = shufflevector <2 x double> %327, <2 x double> poison, <2 x i32> zeroinitializer
  %339 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %338, <2 x double> %333, <2 x double> %337)
  %340 = fsub <2 x double> %332, %339
  store <2 x double> %340, ptr %13, align 8, !tbaa !9
  %341 = call double @d_imag(ptr noundef nonnull %21) #5
  %342 = load double, ptr %22, align 16, !tbaa !18
  %343 = call double @d_imag(ptr noundef nonnull %22) #5
  %344 = insertelement <2 x double> %330, double %342, i64 1
  %345 = fcmp oge <2 x double> %344, zeroinitializer
  %346 = fneg <2 x double> %344
  %347 = select <2 x i1> %345, <2 x double> %344, <2 x double> %346
  %348 = insertelement <2 x double> poison, double %341, i64 0
  %349 = insertelement <2 x double> %348, double %343, i64 1
  %350 = fcmp oge <2 x double> %349, zeroinitializer
  %351 = fneg <2 x double> %349
  %352 = select <2 x i1> %350, <2 x double> %349, <2 x double> %351
  %353 = fadd <2 x double> %347, %352
  %shift1053 = shufflevector <2 x double> %353, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %354 = fadd <2 x double> %353, %shift1053
  %355 = extractelement <2 x double> %354, i64 0
  %356 = load double, ptr %4, align 8, !tbaa !18
  %357 = call double @d_imag(ptr noundef nonnull %4) #5
  %358 = insertelement <2 x double> poison, double %356, i64 0
  %359 = insertelement <2 x double> %358, double %357, i64 1
  %360 = fcmp oge <2 x double> %359, zeroinitializer
  %361 = fneg <2 x double> %359
  %362 = select <2 x i1> %360, <2 x double> %359, <2 x double> %361
  %shift1054 = shufflevector <2 x double> %362, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %363 = fadd <2 x double> %362, %shift1054
  %364 = extractelement <2 x double> %363, i64 0
  %365 = load double, ptr %100, align 8, !tbaa !18
  %366 = call double @d_imag(ptr noundef nonnull %100) #5
  %367 = insertelement <2 x double> poison, double %365, i64 0
  %368 = insertelement <2 x double> %367, double %366, i64 1
  %369 = fcmp oge <2 x double> %368, zeroinitializer
  %370 = fneg <2 x double> %368
  %371 = select <2 x i1> %369, <2 x double> %368, <2 x double> %370
  %shift1055 = shufflevector <2 x double> %371, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %372 = fadd <2 x double> %371, %shift1055
  %373 = extractelement <2 x double> %372, i64 0
  %374 = call double @llvm.fmuladd.f64(double %364, double %373, double %355)
  store double %374, ptr %14, align 8, !tbaa !9
  %375 = load i64, ptr %1, align 8, !tbaa !5
  %.not903.not929 = icmp sgt i64 %375, 2
  br i1 %.not903.not929, label %.lr.ph932, label %._crit_edge933

.lr.ph932:                                        ; preds = %326, %.lr.ph932
  %.1896930 = phi i64 [ %390, %.lr.ph932 ], [ 2, %326 ]
  %gep922 = getelementptr %struct.doublecomplex, ptr %95, i64 %.1896930
  %376 = load <2 x double>, ptr %gep922, align 8, !tbaa !9
  store <2 x double> %376, ptr %21, align 16, !tbaa !9
  %377 = add nsw i64 %.1896930, -1
  %378 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %377
  %379 = load double, ptr %378, align 8, !tbaa !18
  %gep924 = getelementptr %struct.doublecomplex, ptr %98, i64 %377
  %380 = getelementptr inbounds i8, ptr %378, i64 8
  %381 = load double, ptr %380, align 8, !tbaa !20
  %382 = fneg double %381
  %383 = getelementptr inbounds double, ptr %23, i64 %.1896930
  %384 = load double, ptr %383, align 8, !tbaa !9
  %gep926 = getelementptr %struct.doublecomplex, ptr %98, i64 %.1896930
  %385 = load <2 x double>, ptr %gep926, align 8, !tbaa !9
  %386 = insertelement <2 x double> poison, double %384, i64 0
  %387 = shufflevector <2 x double> %386, <2 x double> poison, <2 x i32> zeroinitializer
  %388 = fmul <2 x double> %387, %385
  store <2 x double> %388, ptr %22, align 16, !tbaa !9
  %389 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %.1896930
  %390 = add nuw nsw i64 %.1896930, 1
  %gep928 = getelementptr %struct.doublecomplex, ptr %98, i64 %390
  %391 = load <2 x double>, ptr %gep924, align 8, !tbaa !9
  %392 = insertelement <2 x double> poison, double %381, i64 0
  %393 = insertelement <2 x double> %392, double %382, i64 1
  %394 = fmul <2 x double> %391, %393
  %395 = shufflevector <2 x double> %394, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %396 = insertelement <2 x double> poison, double %379, i64 0
  %397 = shufflevector <2 x double> %396, <2 x double> poison, <2 x i32> zeroinitializer
  %398 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %397, <2 x double> %391, <2 x double> %395)
  call void @d_cnjg(ptr noundef nonnull %20, ptr noundef nonnull %389) #5
  %399 = load <2 x double>, ptr %20, align 16
  %400 = load double, ptr %91, align 8, !tbaa !20
  %401 = fneg double %400
  %402 = load <2 x double>, ptr %21, align 16, !tbaa !9
  %403 = fsub <2 x double> %402, %398
  %404 = load <2 x double>, ptr %22, align 16, !tbaa !9
  %405 = fsub <2 x double> %403, %404
  store <2 x double> %405, ptr %20, align 16, !tbaa !9
  %406 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %.1896930
  %407 = load <2 x double>, ptr %gep928, align 8, !tbaa !9
  %408 = insertelement <2 x double> poison, double %400, i64 0
  %409 = insertelement <2 x double> %408, double %401, i64 1
  %410 = fmul <2 x double> %407, %409
  %411 = shufflevector <2 x double> %410, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %412 = shufflevector <2 x double> %399, <2 x double> poison, <2 x i32> zeroinitializer
  %413 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %412, <2 x double> %407, <2 x double> %411)
  %414 = fsub <2 x double> %405, %413
  store <2 x double> %414, ptr %406, align 8, !tbaa !9
  %415 = extractelement <2 x double> %402, i64 0
  %416 = fcmp oge double %415, 0.000000e+00
  %417 = fneg double %415
  %418 = select i1 %416, double %415, double %417
  %419 = call double @d_imag(ptr noundef nonnull %21) #5
  %420 = fcmp oge double %419, 0.000000e+00
  %421 = fneg double %419
  %422 = select i1 %420, double %419, double %421
  %423 = fadd double %418, %422
  %424 = load double, ptr %378, align 8, !tbaa !18
  %425 = call double @d_imag(ptr noundef nonnull %378) #5
  %426 = insertelement <2 x double> poison, double %424, i64 0
  %427 = insertelement <2 x double> %426, double %425, i64 1
  %428 = fcmp oge <2 x double> %427, zeroinitializer
  %429 = fneg <2 x double> %427
  %430 = select <2 x i1> %428, <2 x double> %427, <2 x double> %429
  %shift1056 = shufflevector <2 x double> %430, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %431 = fadd <2 x double> %430, %shift1056
  %432 = extractelement <2 x double> %431, i64 0
  %433 = load double, ptr %gep924, align 8, !tbaa !18
  %434 = call double @d_imag(ptr noundef nonnull %gep924) #5
  %435 = insertelement <2 x double> poison, double %433, i64 0
  %436 = insertelement <2 x double> %435, double %434, i64 1
  %437 = fcmp oge <2 x double> %436, zeroinitializer
  %438 = fneg <2 x double> %436
  %439 = select <2 x i1> %437, <2 x double> %436, <2 x double> %438
  %shift1057 = shufflevector <2 x double> %439, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %440 = fadd <2 x double> %439, %shift1057
  %441 = extractelement <2 x double> %440, i64 0
  %442 = call double @llvm.fmuladd.f64(double %432, double %441, double %423)
  %443 = load <2 x double>, ptr %22, align 16
  %444 = call double @d_imag(ptr noundef nonnull %22) #5
  %445 = insertelement <2 x double> %443, double %444, i64 1
  %446 = fcmp oge <2 x double> %445, zeroinitializer
  %447 = fneg <2 x double> %445
  %448 = select <2 x i1> %446, <2 x double> %445, <2 x double> %447
  %shift1058 = shufflevector <2 x double> %448, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %449 = fadd <2 x double> %448, %shift1058
  %450 = extractelement <2 x double> %449, i64 0
  %451 = fadd double %442, %450
  %452 = load double, ptr %389, align 8, !tbaa !18
  %453 = call double @d_imag(ptr noundef nonnull %389) #5
  %454 = insertelement <2 x double> poison, double %452, i64 0
  %455 = insertelement <2 x double> %454, double %453, i64 1
  %456 = fcmp oge <2 x double> %455, zeroinitializer
  %457 = fneg <2 x double> %455
  %458 = select <2 x i1> %456, <2 x double> %455, <2 x double> %457
  %shift1059 = shufflevector <2 x double> %458, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %459 = fadd <2 x double> %458, %shift1059
  %460 = extractelement <2 x double> %459, i64 0
  %461 = load double, ptr %gep928, align 8, !tbaa !18
  %462 = call double @d_imag(ptr noundef nonnull %gep928) #5
  %463 = insertelement <2 x double> poison, double %461, i64 0
  %464 = insertelement <2 x double> %463, double %462, i64 1
  %465 = fcmp oge <2 x double> %464, zeroinitializer
  %466 = fneg <2 x double> %464
  %467 = select <2 x i1> %465, <2 x double> %464, <2 x double> %466
  %shift1060 = shufflevector <2 x double> %467, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %468 = fadd <2 x double> %467, %shift1060
  %469 = extractelement <2 x double> %468, i64 0
  %470 = call double @llvm.fmuladd.f64(double %460, double %469, double %451)
  %471 = getelementptr inbounds double, ptr %36, i64 %.1896930
  store double %470, ptr %471, align 8, !tbaa !9
  %exitcond996.not = icmp eq i64 %390, %375
  br i1 %exitcond996.not, label %._crit_edge933.loopexit, label %.lr.ph932, !llvm.loop !22

._crit_edge933.loopexit:                          ; preds = %.lr.ph932
  %.pre1002 = load i64, ptr %1, align 8, !tbaa !5
  br label %._crit_edge933

._crit_edge933:                                   ; preds = %._crit_edge933.loopexit, %326
  %472 = phi i64 [ %.pre1002, %._crit_edge933.loopexit ], [ %375, %326 ]
  %gep959 = getelementptr %struct.doublecomplex, ptr %95, i64 %472
  %473 = load <2 x double>, ptr %gep959, align 8, !tbaa !9
  store <2 x double> %473, ptr %21, align 16, !tbaa !9
  %474 = add nsw i64 %472, -1
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %24, i64 %474
  %476 = load double, ptr %475, align 8, !tbaa !18
  %gep961 = getelementptr %struct.doublecomplex, ptr %98, i64 %474
  %477 = getelementptr inbounds i8, ptr %475, i64 8
  %478 = load double, ptr %477, align 8, !tbaa !20
  %479 = fneg double %478
  %480 = getelementptr inbounds double, ptr %23, i64 %472
  %481 = load double, ptr %480, align 8, !tbaa !9
  %gep963 = getelementptr %struct.doublecomplex, ptr %98, i64 %472
  %482 = load <2 x double>, ptr %gep963, align 8, !tbaa !9
  %483 = insertelement <2 x double> poison, double %481, i64 0
  %484 = shufflevector <2 x double> %483, <2 x double> poison, <2 x i32> zeroinitializer
  %485 = fmul <2 x double> %484, %482
  store <2 x double> %485, ptr %22, align 16, !tbaa !9
  %486 = load <2 x double>, ptr %gep961, align 8, !tbaa !9
  %487 = insertelement <2 x double> poison, double %478, i64 0
  %488 = insertelement <2 x double> %487, double %479, i64 1
  %489 = fmul <2 x double> %486, %488
  %490 = shufflevector <2 x double> %489, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %491 = insertelement <2 x double> poison, double %476, i64 0
  %492 = shufflevector <2 x double> %491, <2 x double> poison, <2 x i32> zeroinitializer
  %493 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %492, <2 x double> %486, <2 x double> %490)
  %494 = fsub <2 x double> %473, %493
  store <2 x double> %494, ptr %20, align 16, !tbaa !9
  %495 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %472
  %496 = fsub <2 x double> %494, %485
  store <2 x double> %496, ptr %495, align 8, !tbaa !9
  %497 = extractelement <2 x double> %473, i64 0
  %498 = fcmp oge double %497, 0.000000e+00
  %499 = fneg double %497
  %500 = select i1 %498, double %497, double %499
  %501 = call double @d_imag(ptr noundef nonnull %21) #5
  %502 = fcmp oge double %501, 0.000000e+00
  %503 = fneg double %501
  %504 = select i1 %502, double %501, double %503
  %505 = fadd double %500, %504
  %506 = load double, ptr %475, align 8, !tbaa !18
  %507 = load i64, ptr %1, align 8, !tbaa !5
  %gep947 = getelementptr %struct.doublecomplex, ptr %invariant.gep940, i64 %507
  %508 = call double @d_imag(ptr noundef %gep947) #5
  %509 = insertelement <2 x double> poison, double %506, i64 0
  %510 = insertelement <2 x double> %509, double %508, i64 1
  %511 = fcmp oge <2 x double> %510, zeroinitializer
  %512 = fneg <2 x double> %510
  %513 = select <2 x i1> %511, <2 x double> %510, <2 x double> %512
  %shift1061 = shufflevector <2 x double> %513, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %514 = fadd <2 x double> %513, %shift1061
  %515 = extractelement <2 x double> %514, i64 0
  %516 = load double, ptr %gep961, align 8, !tbaa !18
  %517 = load i64, ptr %1, align 8, !tbaa !5
  %gep965 = getelementptr %struct.doublecomplex, ptr %invariant.gep956, i64 %517
  %518 = call double @d_imag(ptr noundef %gep965) #5
  %519 = insertelement <2 x double> poison, double %516, i64 0
  %520 = insertelement <2 x double> %519, double %518, i64 1
  %521 = fcmp oge <2 x double> %520, zeroinitializer
  %522 = fneg <2 x double> %520
  %523 = select <2 x i1> %521, <2 x double> %520, <2 x double> %522
  %shift1062 = shufflevector <2 x double> %523, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %524 = fadd <2 x double> %523, %shift1062
  %525 = extractelement <2 x double> %524, i64 0
  %526 = call double @llvm.fmuladd.f64(double %515, double %525, double %505)
  %527 = load <2 x double>, ptr %22, align 16
  %528 = call double @d_imag(ptr noundef nonnull %22) #5
  %529 = insertelement <2 x double> %527, double %528, i64 1
  %530 = fcmp oge <2 x double> %529, zeroinitializer
  %531 = fneg <2 x double> %529
  %532 = select <2 x i1> %530, <2 x double> %529, <2 x double> %531
  %shift1063 = shufflevector <2 x double> %532, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %533 = fadd <2 x double> %532, %shift1063
  %534 = extractelement <2 x double> %533, i64 0
  %535 = fadd double %526, %534
  %536 = load i64, ptr %1, align 8, !tbaa !5
  %537 = getelementptr inbounds double, ptr %36, i64 %536
  store double %535, ptr %537, align 8, !tbaa !9
  br label %553

thread-pre-split:                                 ; preds = %325, %110
  %538 = fsub <2 x double> %105, %109
  store <2 x double> %538, ptr %13, align 8, !tbaa !9
  %539 = call double @d_imag(ptr noundef nonnull %21) #5
  %.sink1025 = load double, ptr %22, align 16, !tbaa !18
  %540 = call double @d_imag(ptr noundef nonnull %22) #5
  %541 = insertelement <2 x double> %105, double %.sink1025, i64 1
  %542 = fcmp oge <2 x double> %541, zeroinitializer
  %543 = fneg <2 x double> %541
  %544 = select <2 x i1> %542, <2 x double> %541, <2 x double> %543
  %545 = insertelement <2 x double> poison, double %539, i64 0
  %546 = insertelement <2 x double> %545, double %540, i64 1
  %547 = fcmp oge <2 x double> %546, zeroinitializer
  %548 = fneg <2 x double> %546
  %549 = select <2 x i1> %547, <2 x double> %546, <2 x double> %548
  %550 = fadd <2 x double> %544, %549
  %shift1064 = shufflevector <2 x double> %550, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %551 = fadd <2 x double> %550, %shift1064
  %552 = extractelement <2 x double> %551, i64 0
  store double %552, ptr %14, align 8, !tbaa !9
  %.pr1007 = load i64, ptr %1, align 8, !tbaa !5
  br label %553

553:                                              ; preds = %thread-pre-split, %._crit_edge933, %._crit_edge
  %554 = phi i64 [ %.pr1007, %thread-pre-split ], [ %536, %._crit_edge933 ], [ %323, %._crit_edge ]
  %.not905934 = icmp slt i64 %554, 1
  br i1 %.not905934, label %._crit_edge939, label %.lr.ph938

.lr.ph938:                                        ; preds = %553, %576
  %.0891936 = phi double [ %578, %576 ], [ 0.000000e+00, %553 ]
  %.2935 = phi i64 [ %579, %576 ], [ 1, %553 ]
  %555 = getelementptr inbounds double, ptr %36, i64 %.2935
  %556 = load double, ptr %555, align 8, !tbaa !9
  %557 = fcmp ogt double %556, %88
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %.2935
  %559 = load double, ptr %558, align 8, !tbaa !18
  %560 = fcmp oge double %559, 0.000000e+00
  %561 = fneg double %559
  %562 = select i1 %560, double %559, double %561
  %563 = call double @d_imag(ptr noundef nonnull %558) #5
  %564 = fcmp oge double %563, 0.000000e+00
  %565 = fneg double %563
  %566 = select i1 %564, double %563, double %565
  %567 = fadd double %562, %566
  br i1 %557, label %568, label %571

568:                                              ; preds = %.lr.ph938
  %569 = load double, ptr %555, align 8, !tbaa !9
  %570 = fdiv double %567, %569
  br label %576

571:                                              ; preds = %.lr.ph938
  %572 = fadd double %87, %567
  %573 = load double, ptr %555, align 8, !tbaa !9
  %574 = fadd double %87, %573
  %575 = fdiv double %572, %574
  br label %576

576:                                              ; preds = %568, %571
  %.sink1028 = phi double [ %570, %568 ], [ %575, %571 ]
  %577 = fcmp oge double %.0891936, %.sink1028
  %578 = select i1 %577, double %.0891936, double %.sink1028
  %579 = add nuw i64 %.2935, 1
  %exitcond997.not = icmp eq i64 %.2935, %554
  br i1 %exitcond997.not, label %._crit_edge939, label %.lr.ph938, !llvm.loop !23

._crit_edge939:                                   ; preds = %576, %553
  %.0891.lcssa = phi double [ 0.000000e+00, %553 ], [ %578, %576 ]
  store double %.0891.lcssa, ptr %93, align 8, !tbaa !9
  %580 = fcmp ogt double %.0891.lcssa, %85
  br i1 %580, label %581, label %590

581:                                              ; preds = %._crit_edge939
  %582 = fmul double %.0891.lcssa, 2.000000e+00
  %583 = fcmp ole double %582, %.0
  %584 = icmp ult i64 %.0890, 6
  %or.cond = select i1 %583, i1 %584, i1 false
  br i1 %or.cond, label %585, label %590

585:                                              ; preds = %581
  %586 = call i32 @zpttrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %13, ptr noundef nonnull %1, ptr noundef nonnull %15) #5
  %587 = call i32 @f2c_zaxpy(ptr noundef nonnull %1, ptr noundef nonnull @c_b16, ptr noundef nonnull %13, ptr noundef nonnull @c__1, ptr noundef %gep951, ptr noundef nonnull @c__1) #5
  %588 = load double, ptr %93, align 8, !tbaa !9
  %589 = add nuw nsw i64 %.0890, 1
  br label %101

590:                                              ; preds = %581, %._crit_edge939
  %591 = load i64, ptr %1, align 8, !tbaa !5
  %.not906966 = icmp slt i64 %591, 1
  br i1 %.not906966, label %._crit_edge970, label %.lr.ph969

.lr.ph969:                                        ; preds = %590, %.lr.ph969
  %.3967 = phi i64 [ %608, %.lr.ph969 ], [ 1, %590 ]
  %592 = getelementptr inbounds double, ptr %36, i64 %.3967
  %593 = load double, ptr %592, align 8, !tbaa !9
  %594 = fcmp ogt double %593, %88
  %595 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %.3967
  %596 = load double, ptr %595, align 8, !tbaa !18
  %597 = call double @d_imag(ptr noundef nonnull %595) #5
  %598 = insertelement <2 x double> poison, double %596, i64 0
  %599 = insertelement <2 x double> %598, double %597, i64 1
  %600 = fcmp oge <2 x double> %599, zeroinitializer
  %601 = fneg <2 x double> %599
  %602 = select <2 x i1> %600, <2 x double> %599, <2 x double> %601
  %shift1065 = shufflevector <2 x double> %602, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %603 = fadd <2 x double> %602, %shift1065
  %604 = extractelement <2 x double> %603, i64 0
  %605 = load double, ptr %592, align 8, !tbaa !9
  %606 = call double @llvm.fmuladd.f64(double %92, double %605, double %604)
  %607 = fadd double %87, %606
  %storemerge = select i1 %594, double %606, double %607
  store double %storemerge, ptr %592, align 8, !tbaa !9
  %608 = add nuw i64 %.3967, 1
  %exitcond998.not = icmp eq i64 %.3967, %591
  br i1 %exitcond998.not, label %._crit_edge970, label %.lr.ph969, !llvm.loop !24

._crit_edge970:                                   ; preds = %.lr.ph969, %590
  %609 = call i64 @f2c_idamax(ptr noundef nonnull %1, ptr noundef nonnull %14, ptr noundef nonnull @c__1) #5
  %610 = getelementptr inbounds double, ptr %36, i64 %609
  %611 = load double, ptr %610, align 8, !tbaa !9
  %612 = getelementptr inbounds double, ptr %33, i64 %.1894990
  store double %611, ptr %612, align 8, !tbaa !9
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  %613 = load i64, ptr %1, align 8, !tbaa !5
  %.not907971 = icmp slt i64 %613, 2
  br i1 %.not907971, label %._crit_edge975.thread, label %.lr.ph974

._crit_edge975.thread:                            ; preds = %._crit_edge970
  %614 = getelementptr inbounds double, ptr %25, i64 %613
  %615 = load double, ptr %614, align 8, !tbaa !9
  %616 = getelementptr inbounds double, ptr %36, i64 %613
  %617 = load double, ptr %616, align 8, !tbaa !9
  %618 = fdiv double %617, %615
  store double %618, ptr %616, align 8, !tbaa !9
  br label %._crit_edge979

.lr.ph974:                                        ; preds = %._crit_edge970, %.lr.ph974
  %619 = phi double [ %621, %.lr.ph974 ], [ 1.000000e+00, %._crit_edge970 ]
  %.4972 = phi i64 [ %623, %.lr.ph974 ], [ 2, %._crit_edge970 ]
  %gep1010 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.4972
  %620 = call double @z_abs(ptr noundef nonnull %gep1010) #5
  %621 = call double @llvm.fmuladd.f64(double %619, double %620, double 1.000000e+00)
  %622 = getelementptr inbounds double, ptr %36, i64 %.4972
  store double %621, ptr %622, align 8, !tbaa !9
  %623 = add nuw i64 %.4972, 1
  %exitcond999.not = icmp eq i64 %.4972, %613
  br i1 %exitcond999.not, label %._crit_edge975, label %.lr.ph974, !llvm.loop !25

._crit_edge975:                                   ; preds = %.lr.ph974
  %.pre1004 = load i64, ptr %1, align 8, !tbaa !5
  %624 = getelementptr inbounds double, ptr %25, i64 %.pre1004
  %625 = load double, ptr %624, align 8, !tbaa !9
  %626 = getelementptr inbounds double, ptr %36, i64 %.pre1004
  %627 = load double, ptr %626, align 8, !tbaa !9
  %628 = fdiv double %627, %625
  store double %628, ptr %626, align 8, !tbaa !9
  %629 = icmp sgt i64 %.pre1004, 1
  br i1 %629, label %.lr.ph978, label %._crit_edge979

.lr.ph978:                                        ; preds = %._crit_edge975, %.lr.ph978
  %630 = phi double [ %638, %.lr.ph978 ], [ %628, %._crit_edge975 ]
  %.5.in976 = phi i64 [ %.5, %.lr.ph978 ], [ %.pre1004, %._crit_edge975 ]
  %.5 = add nsw i64 %.5.in976, -1
  %631 = getelementptr inbounds double, ptr %36, i64 %.5
  %632 = load double, ptr %631, align 8, !tbaa !9
  %633 = getelementptr inbounds double, ptr %25, i64 %.5
  %634 = load double, ptr %633, align 8, !tbaa !9
  %635 = fdiv double %632, %634
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %26, i64 %.5
  %637 = call double @z_abs(ptr noundef nonnull %636) #5
  %638 = call double @llvm.fmuladd.f64(double %630, double %637, double %635)
  store double %638, ptr %631, align 8, !tbaa !9
  %639 = icmp ugt i64 %.5.in976, 2
  br i1 %639, label %.lr.ph978, label %._crit_edge979, !llvm.loop !26

._crit_edge979:                                   ; preds = %.lr.ph978, %._crit_edge975.thread, %._crit_edge975
  %640 = call i64 @f2c_idamax(ptr noundef nonnull %1, ptr noundef nonnull %14, ptr noundef nonnull @c__1) #5
  %641 = getelementptr inbounds double, ptr %36, i64 %640
  %642 = load double, ptr %641, align 8, !tbaa !9
  %643 = fcmp oge double %642, 0.000000e+00
  %644 = fneg double %642
  %645 = select i1 %643, double %642, double %644
  %646 = load double, ptr %612, align 8, !tbaa !9
  %647 = fmul double %646, %645
  store double %647, ptr %612, align 8, !tbaa !9
  %648 = load i64, ptr %1, align 8, !tbaa !5
  %.not908980 = icmp slt i64 %648, 1
  br i1 %.not908980, label %._crit_edge985.thread, label %.lr.ph984

.lr.ph984:                                        ; preds = %._crit_edge979, %.lr.ph984
  %.1982 = phi double [ %651, %.lr.ph984 ], [ 0.000000e+00, %._crit_edge979 ]
  %.6981 = phi i64 [ %652, %.lr.ph984 ], [ 1, %._crit_edge979 ]
  %gep988 = getelementptr %struct.doublecomplex, ptr %98, i64 %.6981
  %649 = call double @z_abs(ptr noundef %gep988) #5
  %650 = fcmp oge double %.1982, %649
  %651 = select i1 %650, double %.1982, double %649
  %652 = add nuw i64 %.6981, 1
  %exitcond1000.not = icmp eq i64 %.6981, %648
  br i1 %exitcond1000.not, label %._crit_edge985, label %.lr.ph984, !llvm.loop !27

._crit_edge985:                                   ; preds = %.lr.ph984
  %653 = fcmp une double %651, 0.000000e+00
  br i1 %653, label %654, label %._crit_edge985.thread

654:                                              ; preds = %._crit_edge985
  %655 = load double, ptr %612, align 8, !tbaa !9
  %656 = fdiv double %655, %651
  store double %656, ptr %612, align 8, !tbaa !9
  br label %._crit_edge985.thread

._crit_edge985.thread:                            ; preds = %._crit_edge979, %._crit_edge985, %654
  %657 = add nuw nsw i64 %.1894990, 1
  %658 = load i64, ptr %19, align 8, !tbaa !5
  %.not902.not = icmp slt i64 %.1894990, %658
  br i1 %.not902.not, label %.preheader, label %.loopexit, !llvm.loop !28

.loopexit:                                        ; preds = %._crit_edge985.thread, %.lr.ph994.prol.loopexit, %.lr.ph994, %middle.block, %58, %84, %59, %.thread
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  ret i32 0
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

declare double @z_abs(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.umax.i64(i64, i64) #4

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

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

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

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


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