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

; 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 [6 x i8], align 1

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

68:                                               ; preds = %10
  %69 = load i64, ptr %41, align 8, !tbaa !9
  %70 = icmp ne i64 %69, 0
  br i1 %70, label %71, label %72

71:                                               ; preds = %68
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %75

72:                                               ; preds = %68
  %73 = load ptr, ptr %12, align 8, !tbaa !5
  %74 = load i64, ptr %73, align 8, !tbaa !9
  store i64 %74, ptr %40, align 8, !tbaa !9
  br label %75

75:                                               ; preds = %72, %71
  br label %79

76:                                               ; preds = %10
  %77 = load ptr, ptr %13, align 8, !tbaa !5
  %78 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %78, ptr %40, align 8, !tbaa !9
  br label %79

79:                                               ; preds = %76, %75
  store double 1.000000e+00, ptr %42, align 8, !tbaa !11
  %80 = load ptr, ptr %12, align 8, !tbaa !5
  %81 = load i64, ptr %80, align 8, !tbaa !9
  %82 = shl i64 %81, 1
  store i64 %82, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %83

83:                                               ; preds = %91, %79
  %84 = load i64, ptr %33, align 8, !tbaa !9
  %85 = load i64, ptr %25, align 8, !tbaa !9
  %86 = icmp sle i64 %84, %85
  br i1 %86, label %87, label %94

87:                                               ; preds = %83
  %88 = load ptr, ptr %19, align 8, !tbaa !5
  %89 = load i64, ptr %33, align 8, !tbaa !9
  %90 = getelementptr inbounds double, ptr %88, i64 %89
  store double 0.000000e+00, ptr %90, align 8, !tbaa !11
  br label %91

91:                                               ; preds = %87
  %92 = load i64, ptr %33, align 8, !tbaa !9
  %93 = add nsw i64 %92, 1
  store i64 %93, ptr %33, align 8, !tbaa !9
  br label %83, !llvm.loop !13

94:                                               ; preds = %83
  %95 = load i64, ptr %41, align 8, !tbaa !9
  %96 = icmp ne i64 %95, 0
  br i1 %96, label %97, label %237

97:                                               ; preds = %94
  %98 = load ptr, ptr %12, align 8, !tbaa !5
  %99 = load i64, ptr %98, align 8, !tbaa !9
  store i64 %99, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %100

100:                                              ; preds = %233, %97
  %101 = load i64, ptr %34, align 8, !tbaa !9
  %102 = load i64, ptr %25, align 8, !tbaa !9
  %103 = icmp sle i64 %101, %102
  br i1 %103, label %104, label %236

104:                                              ; preds = %100
  %105 = load i64, ptr %34, align 8, !tbaa !9
  store i64 %105, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %229, %104
  %107 = load i64, ptr %33, align 8, !tbaa !9
  %108 = load i64, ptr %26, align 8, !tbaa !9
  %109 = icmp sle i64 %107, %108
  br i1 %109, label %110, label %232

110:                                              ; preds = %106
  %111 = load i64, ptr %33, align 8, !tbaa !9
  %112 = load i64, ptr %34, align 8, !tbaa !9
  %113 = load i64, ptr %21, align 8, !tbaa !9
  %114 = mul nsw i64 %112, %113
  %115 = add nsw i64 %111, %114
  store i64 %115, ptr %27, align 8, !tbaa !9
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = load i64, ptr %27, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.doublecomplex, ptr %116, i64 %117
  %119 = getelementptr inbounds %struct.doublecomplex, ptr %118, i32 0, i32 0
  %120 = load double, ptr %119, align 8, !tbaa !15
  store double %120, ptr %29, align 8, !tbaa !11
  %121 = load double, ptr %29, align 8, !tbaa !11
  %122 = fcmp oge double %121, 0.000000e+00
  br i1 %122, label %123, label %125

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

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

128:                                              ; preds = %125, %123
  %129 = phi double [ %124, %123 ], [ %127, %125 ]
  %130 = load ptr, ptr %14, align 8, !tbaa !5
  %131 = load i64, ptr %33, align 8, !tbaa !9
  %132 = load i64, ptr %34, align 8, !tbaa !9
  %133 = load i64, ptr %21, align 8, !tbaa !9
  %134 = mul nsw i64 %132, %133
  %135 = add nsw i64 %131, %134
  %136 = getelementptr inbounds %struct.doublecomplex, ptr %130, i64 %135
  %137 = call double @d_imag(ptr noundef %136)
  store double %137, ptr %30, align 8, !tbaa !11
  %138 = load double, ptr %30, align 8, !tbaa !11
  %139 = fcmp oge double %138, 0.000000e+00
  br i1 %139, label %140, label %142

140:                                              ; preds = %128
  %141 = load double, ptr %30, align 8, !tbaa !11
  br label %145

142:                                              ; preds = %128
  %143 = load double, ptr %30, align 8, !tbaa !11
  %144 = fneg double %143
  br label %145

145:                                              ; preds = %142, %140
  %146 = phi double [ %141, %140 ], [ %144, %142 ]
  %147 = fadd double %129, %146
  store double %147, ptr %31, align 8, !tbaa !11
  %148 = load ptr, ptr %19, align 8, !tbaa !5
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = load i64, ptr %149, align 8, !tbaa !9
  %151 = load i64, ptr %33, align 8, !tbaa !9
  %152 = add nsw i64 %150, %151
  %153 = getelementptr inbounds double, ptr %148, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !11
  store double %154, ptr %32, align 8, !tbaa !11
  %155 = load double, ptr %31, align 8, !tbaa !11
  %156 = load double, ptr %32, align 8, !tbaa !11
  %157 = fcmp oge double %155, %156
  br i1 %157, label %158, label %160

158:                                              ; preds = %145
  %159 = load double, ptr %31, align 8, !tbaa !11
  br label %162

160:                                              ; preds = %145
  %161 = load double, ptr %32, align 8, !tbaa !11
  br label %162

162:                                              ; preds = %160, %158
  %163 = phi double [ %159, %158 ], [ %161, %160 ]
  %164 = load ptr, ptr %19, align 8, !tbaa !5
  %165 = load ptr, ptr %12, align 8, !tbaa !5
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = load i64, ptr %33, align 8, !tbaa !9
  %168 = add nsw i64 %166, %167
  %169 = getelementptr inbounds double, ptr %164, i64 %168
  store double %163, ptr %169, align 8, !tbaa !11
  %170 = load i64, ptr %33, align 8, !tbaa !9
  %171 = load i64, ptr %34, align 8, !tbaa !9
  %172 = load i64, ptr %21, align 8, !tbaa !9
  %173 = mul nsw i64 %171, %172
  %174 = add nsw i64 %170, %173
  store i64 %174, ptr %27, align 8, !tbaa !9
  %175 = load ptr, ptr %14, align 8, !tbaa !5
  %176 = load i64, ptr %27, align 8, !tbaa !9
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %175, i64 %176
  %178 = getelementptr inbounds %struct.doublecomplex, ptr %177, i32 0, i32 0
  %179 = load double, ptr %178, align 8, !tbaa !15
  store double %179, ptr %29, align 8, !tbaa !11
  %180 = load double, ptr %29, align 8, !tbaa !11
  %181 = fcmp oge double %180, 0.000000e+00
  br i1 %181, label %182, label %184

182:                                              ; preds = %162
  %183 = load double, ptr %29, align 8, !tbaa !11
  br label %187

184:                                              ; preds = %162
  %185 = load double, ptr %29, align 8, !tbaa !11
  %186 = fneg double %185
  br label %187

187:                                              ; preds = %184, %182
  %188 = phi double [ %183, %182 ], [ %186, %184 ]
  %189 = load ptr, ptr %14, align 8, !tbaa !5
  %190 = load i64, ptr %33, align 8, !tbaa !9
  %191 = load i64, ptr %34, align 8, !tbaa !9
  %192 = load i64, ptr %21, align 8, !tbaa !9
  %193 = mul nsw i64 %191, %192
  %194 = add nsw i64 %190, %193
  %195 = getelementptr inbounds %struct.doublecomplex, ptr %189, i64 %194
  %196 = call double @d_imag(ptr noundef %195)
  store double %196, ptr %30, align 8, !tbaa !11
  %197 = load double, ptr %30, align 8, !tbaa !11
  %198 = fcmp oge double %197, 0.000000e+00
  br i1 %198, label %199, label %201

199:                                              ; preds = %187
  %200 = load double, ptr %30, align 8, !tbaa !11
  br label %204

201:                                              ; preds = %187
  %202 = load double, ptr %30, align 8, !tbaa !11
  %203 = fneg double %202
  br label %204

204:                                              ; preds = %201, %199
  %205 = phi double [ %200, %199 ], [ %203, %201 ]
  %206 = fadd double %188, %205
  store double %206, ptr %31, align 8, !tbaa !11
  %207 = load ptr, ptr %19, align 8, !tbaa !5
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = load i64, ptr %208, align 8, !tbaa !9
  %210 = load i64, ptr %34, align 8, !tbaa !9
  %211 = add nsw i64 %209, %210
  %212 = getelementptr inbounds double, ptr %207, i64 %211
  %213 = load double, ptr %212, align 8, !tbaa !11
  store double %213, ptr %32, align 8, !tbaa !11
  %214 = load double, ptr %31, align 8, !tbaa !11
  %215 = load double, ptr %32, align 8, !tbaa !11
  %216 = fcmp oge double %214, %215
  br i1 %216, label %217, label %219

217:                                              ; preds = %204
  %218 = load double, ptr %31, align 8, !tbaa !11
  br label %221

219:                                              ; preds = %204
  %220 = load double, ptr %32, align 8, !tbaa !11
  br label %221

221:                                              ; preds = %219, %217
  %222 = phi double [ %218, %217 ], [ %220, %219 ]
  %223 = load ptr, ptr %19, align 8, !tbaa !5
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = load i64, ptr %224, align 8, !tbaa !9
  %226 = load i64, ptr %34, align 8, !tbaa !9
  %227 = add nsw i64 %225, %226
  %228 = getelementptr inbounds double, ptr %223, i64 %227
  store double %222, ptr %228, align 8, !tbaa !11
  br label %229

229:                                              ; preds = %221
  %230 = load i64, ptr %33, align 8, !tbaa !9
  %231 = add nsw i64 %230, 1
  store i64 %231, ptr %33, align 8, !tbaa !9
  br label %106, !llvm.loop !17

232:                                              ; preds = %106
  br label %233

233:                                              ; preds = %232
  %234 = load i64, ptr %34, align 8, !tbaa !9
  %235 = add nsw i64 %234, 1
  store i64 %235, ptr %34, align 8, !tbaa !9
  br label %100, !llvm.loop !18

236:                                              ; preds = %100
  br label %379

237:                                              ; preds = %94
  %238 = load ptr, ptr %12, align 8, !tbaa !5
  %239 = load i64, ptr %238, align 8, !tbaa !9
  store i64 %239, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %240

240:                                              ; preds = %375, %237
  %241 = load i64, ptr %34, align 8, !tbaa !9
  %242 = load i64, ptr %25, align 8, !tbaa !9
  %243 = icmp sle i64 %241, %242
  br i1 %243, label %244, label %378

244:                                              ; preds = %240
  %245 = load ptr, ptr %12, align 8, !tbaa !5
  %246 = load i64, ptr %245, align 8, !tbaa !9
  store i64 %246, ptr %26, align 8, !tbaa !9
  %247 = load i64, ptr %34, align 8, !tbaa !9
  store i64 %247, ptr %33, align 8, !tbaa !9
  br label %248

248:                                              ; preds = %371, %244
  %249 = load i64, ptr %33, align 8, !tbaa !9
  %250 = load i64, ptr %26, align 8, !tbaa !9
  %251 = icmp sle i64 %249, %250
  br i1 %251, label %252, label %374

252:                                              ; preds = %248
  %253 = load i64, ptr %33, align 8, !tbaa !9
  %254 = load i64, ptr %34, align 8, !tbaa !9
  %255 = load i64, ptr %21, align 8, !tbaa !9
  %256 = mul nsw i64 %254, %255
  %257 = add nsw i64 %253, %256
  store i64 %257, ptr %27, align 8, !tbaa !9
  %258 = load ptr, ptr %14, align 8, !tbaa !5
  %259 = load i64, ptr %27, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct.doublecomplex, ptr %258, i64 %259
  %261 = getelementptr inbounds %struct.doublecomplex, ptr %260, i32 0, i32 0
  %262 = load double, ptr %261, align 8, !tbaa !15
  store double %262, ptr %29, align 8, !tbaa !11
  %263 = load double, ptr %29, align 8, !tbaa !11
  %264 = fcmp oge double %263, 0.000000e+00
  br i1 %264, label %265, label %267

265:                                              ; preds = %252
  %266 = load double, ptr %29, align 8, !tbaa !11
  br label %270

267:                                              ; preds = %252
  %268 = load double, ptr %29, align 8, !tbaa !11
  %269 = fneg double %268
  br label %270

270:                                              ; preds = %267, %265
  %271 = phi double [ %266, %265 ], [ %269, %267 ]
  %272 = load ptr, ptr %14, align 8, !tbaa !5
  %273 = load i64, ptr %33, align 8, !tbaa !9
  %274 = load i64, ptr %34, align 8, !tbaa !9
  %275 = load i64, ptr %21, align 8, !tbaa !9
  %276 = mul nsw i64 %274, %275
  %277 = add nsw i64 %273, %276
  %278 = getelementptr inbounds %struct.doublecomplex, ptr %272, i64 %277
  %279 = call double @d_imag(ptr noundef %278)
  store double %279, ptr %30, align 8, !tbaa !11
  %280 = load double, ptr %30, align 8, !tbaa !11
  %281 = fcmp oge double %280, 0.000000e+00
  br i1 %281, label %282, label %284

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

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

287:                                              ; preds = %284, %282
  %288 = phi double [ %283, %282 ], [ %286, %284 ]
  %289 = fadd double %271, %288
  store double %289, ptr %31, align 8, !tbaa !11
  %290 = load ptr, ptr %19, align 8, !tbaa !5
  %291 = load ptr, ptr %12, align 8, !tbaa !5
  %292 = load i64, ptr %291, align 8, !tbaa !9
  %293 = load i64, ptr %33, align 8, !tbaa !9
  %294 = add nsw i64 %292, %293
  %295 = getelementptr inbounds double, ptr %290, i64 %294
  %296 = load double, ptr %295, align 8, !tbaa !11
  store double %296, ptr %32, align 8, !tbaa !11
  %297 = load double, ptr %31, align 8, !tbaa !11
  %298 = load double, ptr %32, align 8, !tbaa !11
  %299 = fcmp oge double %297, %298
  br i1 %299, label %300, label %302

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

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

304:                                              ; preds = %302, %300
  %305 = phi double [ %301, %300 ], [ %303, %302 ]
  %306 = load ptr, ptr %19, align 8, !tbaa !5
  %307 = load ptr, ptr %12, align 8, !tbaa !5
  %308 = load i64, ptr %307, align 8, !tbaa !9
  %309 = load i64, ptr %33, align 8, !tbaa !9
  %310 = add nsw i64 %308, %309
  %311 = getelementptr inbounds double, ptr %306, i64 %310
  store double %305, ptr %311, align 8, !tbaa !11
  %312 = load i64, ptr %33, align 8, !tbaa !9
  %313 = load i64, ptr %34, align 8, !tbaa !9
  %314 = load i64, ptr %21, align 8, !tbaa !9
  %315 = mul nsw i64 %313, %314
  %316 = add nsw i64 %312, %315
  store i64 %316, ptr %27, align 8, !tbaa !9
  %317 = load ptr, ptr %14, align 8, !tbaa !5
  %318 = load i64, ptr %27, align 8, !tbaa !9
  %319 = getelementptr inbounds %struct.doublecomplex, ptr %317, i64 %318
  %320 = getelementptr inbounds %struct.doublecomplex, ptr %319, i32 0, i32 0
  %321 = load double, ptr %320, align 8, !tbaa !15
  store double %321, ptr %29, align 8, !tbaa !11
  %322 = load double, ptr %29, align 8, !tbaa !11
  %323 = fcmp oge double %322, 0.000000e+00
  br i1 %323, label %324, label %326

324:                                              ; preds = %304
  %325 = load double, ptr %29, align 8, !tbaa !11
  br label %329

326:                                              ; preds = %304
  %327 = load double, ptr %29, align 8, !tbaa !11
  %328 = fneg double %327
  br label %329

329:                                              ; preds = %326, %324
  %330 = phi double [ %325, %324 ], [ %328, %326 ]
  %331 = load ptr, ptr %14, align 8, !tbaa !5
  %332 = load i64, ptr %33, align 8, !tbaa !9
  %333 = load i64, ptr %34, align 8, !tbaa !9
  %334 = load i64, ptr %21, align 8, !tbaa !9
  %335 = mul nsw i64 %333, %334
  %336 = add nsw i64 %332, %335
  %337 = getelementptr inbounds %struct.doublecomplex, ptr %331, i64 %336
  %338 = call double @d_imag(ptr noundef %337)
  store double %338, ptr %30, align 8, !tbaa !11
  %339 = load double, ptr %30, align 8, !tbaa !11
  %340 = fcmp oge double %339, 0.000000e+00
  br i1 %340, label %341, label %343

341:                                              ; preds = %329
  %342 = load double, ptr %30, align 8, !tbaa !11
  br label %346

343:                                              ; preds = %329
  %344 = load double, ptr %30, align 8, !tbaa !11
  %345 = fneg double %344
  br label %346

346:                                              ; preds = %343, %341
  %347 = phi double [ %342, %341 ], [ %345, %343 ]
  %348 = fadd double %330, %347
  store double %348, ptr %31, align 8, !tbaa !11
  %349 = load ptr, ptr %19, align 8, !tbaa !5
  %350 = load ptr, ptr %12, align 8, !tbaa !5
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = load i64, ptr %34, align 8, !tbaa !9
  %353 = add nsw i64 %351, %352
  %354 = getelementptr inbounds double, ptr %349, i64 %353
  %355 = load double, ptr %354, align 8, !tbaa !11
  store double %355, ptr %32, align 8, !tbaa !11
  %356 = load double, ptr %31, align 8, !tbaa !11
  %357 = load double, ptr %32, align 8, !tbaa !11
  %358 = fcmp oge double %356, %357
  br i1 %358, label %359, label %361

359:                                              ; preds = %346
  %360 = load double, ptr %31, align 8, !tbaa !11
  br label %363

361:                                              ; preds = %346
  %362 = load double, ptr %32, align 8, !tbaa !11
  br label %363

363:                                              ; preds = %361, %359
  %364 = phi double [ %360, %359 ], [ %362, %361 ]
  %365 = load ptr, ptr %19, align 8, !tbaa !5
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = load i64, ptr %366, align 8, !tbaa !9
  %368 = load i64, ptr %34, align 8, !tbaa !9
  %369 = add nsw i64 %367, %368
  %370 = getelementptr inbounds double, ptr %365, i64 %369
  store double %364, ptr %370, align 8, !tbaa !11
  br label %371

371:                                              ; preds = %363
  %372 = load i64, ptr %33, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %33, align 8, !tbaa !9
  br label %248, !llvm.loop !19

374:                                              ; preds = %248
  br label %375

375:                                              ; preds = %374
  %376 = load i64, ptr %34, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %34, align 8, !tbaa !9
  br label %240, !llvm.loop !20

378:                                              ; preds = %240
  br label %379

379:                                              ; preds = %378, %236
  %380 = load i64, ptr %41, align 8, !tbaa !9
  %381 = icmp ne i64 %380, 0
  br i1 %381, label %382, label %803

382:                                              ; preds = %379
  %383 = load ptr, ptr %12, align 8, !tbaa !5
  %384 = load i64, ptr %383, align 8, !tbaa !9
  store i64 %384, ptr %35, align 8, !tbaa !9
  br label %385

385:                                              ; preds = %713, %382
  %386 = load i64, ptr %35, align 8, !tbaa !9
  %387 = load i64, ptr %40, align 8, !tbaa !9
  %388 = icmp slt i64 %386, %387
  br i1 %388, label %389, label %392

389:                                              ; preds = %385
  %390 = load i64, ptr %35, align 8, !tbaa !9
  %391 = icmp sgt i64 %390, 0
  br label %392

392:                                              ; preds = %389, %385
  %393 = phi i1 [ false, %385 ], [ %391, %389 ]
  br i1 %393, label %394, label %714

394:                                              ; preds = %392
  %395 = load ptr, ptr %18, align 8, !tbaa !5
  %396 = load i64, ptr %35, align 8, !tbaa !9
  %397 = getelementptr inbounds i64, ptr %395, i64 %396
  %398 = load i64, ptr %397, align 8, !tbaa !9
  %399 = icmp sgt i64 %398, 0
  br i1 %399, label %400, label %502

400:                                              ; preds = %394
  %401 = load ptr, ptr %18, align 8, !tbaa !5
  %402 = load i64, ptr %35, align 8, !tbaa !9
  %403 = getelementptr inbounds i64, ptr %401, i64 %402
  %404 = load i64, ptr %403, align 8, !tbaa !9
  store i64 %404, ptr %36, align 8, !tbaa !9
  %405 = load i64, ptr %36, align 8, !tbaa !9
  %406 = load i64, ptr %35, align 8, !tbaa !9
  %407 = icmp ne i64 %405, %406
  br i1 %407, label %408, label %436

408:                                              ; preds = %400
  %409 = load ptr, ptr %19, align 8, !tbaa !5
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  %411 = load i64, ptr %410, align 8, !tbaa !9
  %412 = load i64, ptr %35, align 8, !tbaa !9
  %413 = add nsw i64 %411, %412
  %414 = getelementptr inbounds double, ptr %409, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !11
  store double %415, ptr %37, align 8, !tbaa !11
  %416 = load ptr, ptr %19, align 8, !tbaa !5
  %417 = load ptr, ptr %12, align 8, !tbaa !5
  %418 = load i64, ptr %417, align 8, !tbaa !9
  %419 = load i64, ptr %36, align 8, !tbaa !9
  %420 = add nsw i64 %418, %419
  %421 = getelementptr inbounds double, ptr %416, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !11
  %423 = load ptr, ptr %19, align 8, !tbaa !5
  %424 = load ptr, ptr %12, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = load i64, ptr %35, align 8, !tbaa !9
  %427 = add nsw i64 %425, %426
  %428 = getelementptr inbounds double, ptr %423, i64 %427
  store double %422, ptr %428, align 8, !tbaa !11
  %429 = load double, ptr %37, align 8, !tbaa !11
  %430 = load ptr, ptr %19, align 8, !tbaa !5
  %431 = load ptr, ptr %12, align 8, !tbaa !5
  %432 = load i64, ptr %431, align 8, !tbaa !9
  %433 = load i64, ptr %36, align 8, !tbaa !9
  %434 = add nsw i64 %432, %433
  %435 = getelementptr inbounds double, ptr %430, i64 %434
  store double %429, ptr %435, align 8, !tbaa !11
  br label %436

436:                                              ; preds = %408, %400
  %437 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %437, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %438

438:                                              ; preds = %496, %436
  %439 = load i64, ptr %33, align 8, !tbaa !9
  %440 = load i64, ptr %25, align 8, !tbaa !9
  %441 = icmp sle i64 %439, %440
  br i1 %441, label %442, label %499

442:                                              ; preds = %438
  %443 = load i64, ptr %33, align 8, !tbaa !9
  %444 = load i64, ptr %35, align 8, !tbaa !9
  %445 = load i64, ptr %23, align 8, !tbaa !9
  %446 = mul nsw i64 %444, %445
  %447 = add nsw i64 %443, %446
  store i64 %447, ptr %26, align 8, !tbaa !9
  %448 = load ptr, ptr %16, align 8, !tbaa !5
  %449 = load i64, ptr %26, align 8, !tbaa !9
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %448, i64 %449
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %450, i32 0, i32 0
  %452 = load double, ptr %451, align 8, !tbaa !15
  store double %452, ptr %29, align 8, !tbaa !11
  %453 = load double, ptr %29, align 8, !tbaa !11
  %454 = fcmp oge double %453, 0.000000e+00
  br i1 %454, label %455, label %457

455:                                              ; preds = %442
  %456 = load double, ptr %29, align 8, !tbaa !11
  br label %460

457:                                              ; preds = %442
  %458 = load double, ptr %29, align 8, !tbaa !11
  %459 = fneg double %458
  br label %460

460:                                              ; preds = %457, %455
  %461 = phi double [ %456, %455 ], [ %459, %457 ]
  %462 = load ptr, ptr %16, align 8, !tbaa !5
  %463 = load i64, ptr %33, align 8, !tbaa !9
  %464 = load i64, ptr %35, align 8, !tbaa !9
  %465 = load i64, ptr %23, align 8, !tbaa !9
  %466 = mul nsw i64 %464, %465
  %467 = add nsw i64 %463, %466
  %468 = getelementptr inbounds %struct.doublecomplex, ptr %462, i64 %467
  %469 = call double @d_imag(ptr noundef %468)
  store double %469, ptr %30, align 8, !tbaa !11
  %470 = load double, ptr %30, align 8, !tbaa !11
  %471 = fcmp oge double %470, 0.000000e+00
  br i1 %471, label %472, label %474

472:                                              ; preds = %460
  %473 = load double, ptr %30, align 8, !tbaa !11
  br label %477

474:                                              ; preds = %460
  %475 = load double, ptr %30, align 8, !tbaa !11
  %476 = fneg double %475
  br label %477

477:                                              ; preds = %474, %472
  %478 = phi double [ %473, %472 ], [ %476, %474 ]
  %479 = fadd double %461, %478
  store double %479, ptr %31, align 8, !tbaa !11
  %480 = load ptr, ptr %19, align 8, !tbaa !5
  %481 = load i64, ptr %35, align 8, !tbaa !9
  %482 = getelementptr inbounds double, ptr %480, i64 %481
  %483 = load double, ptr %482, align 8, !tbaa !11
  store double %483, ptr %32, align 8, !tbaa !11
  %484 = load double, ptr %31, align 8, !tbaa !11
  %485 = load double, ptr %32, align 8, !tbaa !11
  %486 = fcmp oge double %484, %485
  br i1 %486, label %487, label %489

487:                                              ; preds = %477
  %488 = load double, ptr %31, align 8, !tbaa !11
  br label %491

489:                                              ; preds = %477
  %490 = load double, ptr %32, align 8, !tbaa !11
  br label %491

491:                                              ; preds = %489, %487
  %492 = phi double [ %488, %487 ], [ %490, %489 ]
  %493 = load ptr, ptr %19, align 8, !tbaa !5
  %494 = load i64, ptr %35, align 8, !tbaa !9
  %495 = getelementptr inbounds double, ptr %493, i64 %494
  store double %492, ptr %495, align 8, !tbaa !11
  br label %496

496:                                              ; preds = %491
  %497 = load i64, ptr %33, align 8, !tbaa !9
  %498 = add nsw i64 %497, 1
  store i64 %498, ptr %33, align 8, !tbaa !9
  br label %438, !llvm.loop !21

499:                                              ; preds = %438
  %500 = load i64, ptr %35, align 8, !tbaa !9
  %501 = add nsw i64 %500, -1
  store i64 %501, ptr %35, align 8, !tbaa !9
  br label %713

502:                                              ; preds = %394
  %503 = load ptr, ptr %18, align 8, !tbaa !5
  %504 = load i64, ptr %35, align 8, !tbaa !9
  %505 = getelementptr inbounds i64, ptr %503, i64 %504
  %506 = load i64, ptr %505, align 8, !tbaa !9
  %507 = sub nsw i64 0, %506
  store i64 %507, ptr %36, align 8, !tbaa !9
  %508 = load ptr, ptr %19, align 8, !tbaa !5
  %509 = load ptr, ptr %12, align 8, !tbaa !5
  %510 = load i64, ptr %509, align 8, !tbaa !9
  %511 = load i64, ptr %35, align 8, !tbaa !9
  %512 = add nsw i64 %510, %511
  %513 = sub nsw i64 %512, 1
  %514 = getelementptr inbounds double, ptr %508, i64 %513
  %515 = load double, ptr %514, align 8, !tbaa !11
  store double %515, ptr %37, align 8, !tbaa !11
  %516 = load ptr, ptr %19, align 8, !tbaa !5
  %517 = load ptr, ptr %12, align 8, !tbaa !5
  %518 = load i64, ptr %517, align 8, !tbaa !9
  %519 = load i64, ptr %36, align 8, !tbaa !9
  %520 = add nsw i64 %518, %519
  %521 = getelementptr inbounds double, ptr %516, i64 %520
  %522 = load double, ptr %521, align 8, !tbaa !11
  %523 = load ptr, ptr %19, align 8, !tbaa !5
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  %525 = load i64, ptr %524, align 8, !tbaa !9
  %526 = load i64, ptr %35, align 8, !tbaa !9
  %527 = add nsw i64 %525, %526
  %528 = sub nsw i64 %527, 1
  %529 = getelementptr inbounds double, ptr %523, i64 %528
  store double %522, ptr %529, align 8, !tbaa !11
  %530 = load double, ptr %37, align 8, !tbaa !11
  %531 = load ptr, ptr %19, align 8, !tbaa !5
  %532 = load ptr, ptr %12, align 8, !tbaa !5
  %533 = load i64, ptr %532, align 8, !tbaa !9
  %534 = load i64, ptr %36, align 8, !tbaa !9
  %535 = add nsw i64 %533, %534
  %536 = getelementptr inbounds double, ptr %531, i64 %535
  store double %530, ptr %536, align 8, !tbaa !11
  %537 = load i64, ptr %35, align 8, !tbaa !9
  %538 = sub nsw i64 %537, 1
  store i64 %538, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %539

539:                                              ; preds = %654, %502
  %540 = load i64, ptr %33, align 8, !tbaa !9
  %541 = load i64, ptr %25, align 8, !tbaa !9
  %542 = icmp sle i64 %540, %541
  br i1 %542, label %543, label %657

543:                                              ; preds = %539
  %544 = load i64, ptr %33, align 8, !tbaa !9
  %545 = load i64, ptr %35, align 8, !tbaa !9
  %546 = load i64, ptr %23, align 8, !tbaa !9
  %547 = mul nsw i64 %545, %546
  %548 = add nsw i64 %544, %547
  store i64 %548, ptr %26, align 8, !tbaa !9
  %549 = load ptr, ptr %16, align 8, !tbaa !5
  %550 = load i64, ptr %26, 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 %29, align 8, !tbaa !11
  %554 = load double, ptr %29, align 8, !tbaa !11
  %555 = fcmp oge double %554, 0.000000e+00
  br i1 %555, label %556, label %558

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

558:                                              ; preds = %543
  %559 = load double, ptr %29, 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 %16, align 8, !tbaa !5
  %564 = load i64, ptr %33, align 8, !tbaa !9
  %565 = load i64, ptr %35, align 8, !tbaa !9
  %566 = load i64, ptr %23, align 8, !tbaa !9
  %567 = mul nsw i64 %565, %566
  %568 = add nsw i64 %564, %567
  %569 = getelementptr inbounds %struct.doublecomplex, ptr %563, i64 %568
  %570 = call double @d_imag(ptr noundef %569)
  store double %570, ptr %30, align 8, !tbaa !11
  %571 = load double, ptr %30, align 8, !tbaa !11
  %572 = fcmp oge double %571, 0.000000e+00
  br i1 %572, label %573, label %575

573:                                              ; preds = %561
  %574 = load double, ptr %30, align 8, !tbaa !11
  br label %578

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

578:                                              ; preds = %575, %573
  %579 = phi double [ %574, %573 ], [ %577, %575 ]
  %580 = fadd double %562, %579
  store double %580, ptr %31, align 8, !tbaa !11
  %581 = load ptr, ptr %19, align 8, !tbaa !5
  %582 = load i64, ptr %35, align 8, !tbaa !9
  %583 = getelementptr inbounds double, ptr %581, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !11
  store double %584, ptr %32, align 8, !tbaa !11
  %585 = load double, ptr %31, align 8, !tbaa !11
  %586 = load double, ptr %32, align 8, !tbaa !11
  %587 = fcmp oge double %585, %586
  br i1 %587, label %588, label %590

588:                                              ; preds = %578
  %589 = load double, ptr %31, align 8, !tbaa !11
  br label %592

590:                                              ; preds = %578
  %591 = load double, ptr %32, align 8, !tbaa !11
  br label %592

592:                                              ; preds = %590, %588
  %593 = phi double [ %589, %588 ], [ %591, %590 ]
  %594 = load ptr, ptr %19, align 8, !tbaa !5
  %595 = load i64, ptr %35, align 8, !tbaa !9
  %596 = getelementptr inbounds double, ptr %594, i64 %595
  store double %593, ptr %596, align 8, !tbaa !11
  %597 = load i64, ptr %33, align 8, !tbaa !9
  %598 = load i64, ptr %35, align 8, !tbaa !9
  %599 = sub nsw i64 %598, 1
  %600 = load i64, ptr %23, align 8, !tbaa !9
  %601 = mul nsw i64 %599, %600
  %602 = add nsw i64 %597, %601
  store i64 %602, ptr %26, align 8, !tbaa !9
  %603 = load ptr, ptr %16, align 8, !tbaa !5
  %604 = load i64, ptr %26, align 8, !tbaa !9
  %605 = getelementptr inbounds %struct.doublecomplex, ptr %603, i64 %604
  %606 = getelementptr inbounds %struct.doublecomplex, ptr %605, i32 0, i32 0
  %607 = load double, ptr %606, align 8, !tbaa !15
  store double %607, ptr %29, align 8, !tbaa !11
  %608 = load double, ptr %29, align 8, !tbaa !11
  %609 = fcmp oge double %608, 0.000000e+00
  br i1 %609, label %610, label %612

610:                                              ; preds = %592
  %611 = load double, ptr %29, align 8, !tbaa !11
  br label %615

612:                                              ; preds = %592
  %613 = load double, ptr %29, align 8, !tbaa !11
  %614 = fneg double %613
  br label %615

615:                                              ; preds = %612, %610
  %616 = phi double [ %611, %610 ], [ %614, %612 ]
  %617 = load ptr, ptr %16, align 8, !tbaa !5
  %618 = load i64, ptr %33, align 8, !tbaa !9
  %619 = load i64, ptr %35, align 8, !tbaa !9
  %620 = sub nsw i64 %619, 1
  %621 = load i64, ptr %23, align 8, !tbaa !9
  %622 = mul nsw i64 %620, %621
  %623 = add nsw i64 %618, %622
  %624 = getelementptr inbounds %struct.doublecomplex, ptr %617, i64 %623
  %625 = call double @d_imag(ptr noundef %624)
  store double %625, ptr %30, align 8, !tbaa !11
  %626 = load double, ptr %30, align 8, !tbaa !11
  %627 = fcmp oge double %626, 0.000000e+00
  br i1 %627, label %628, label %630

628:                                              ; preds = %615
  %629 = load double, ptr %30, align 8, !tbaa !11
  br label %633

630:                                              ; preds = %615
  %631 = load double, ptr %30, align 8, !tbaa !11
  %632 = fneg double %631
  br label %633

633:                                              ; preds = %630, %628
  %634 = phi double [ %629, %628 ], [ %632, %630 ]
  %635 = fadd double %616, %634
  store double %635, ptr %31, align 8, !tbaa !11
  %636 = load ptr, ptr %19, align 8, !tbaa !5
  %637 = load i64, ptr %35, align 8, !tbaa !9
  %638 = sub nsw i64 %637, 1
  %639 = getelementptr inbounds double, ptr %636, i64 %638
  %640 = load double, ptr %639, align 8, !tbaa !11
  store double %640, ptr %32, align 8, !tbaa !11
  %641 = load double, ptr %31, align 8, !tbaa !11
  %642 = load double, ptr %32, align 8, !tbaa !11
  %643 = fcmp oge double %641, %642
  br i1 %643, label %644, label %646

644:                                              ; preds = %633
  %645 = load double, ptr %31, align 8, !tbaa !11
  br label %648

646:                                              ; preds = %633
  %647 = load double, ptr %32, align 8, !tbaa !11
  br label %648

648:                                              ; preds = %646, %644
  %649 = phi double [ %645, %644 ], [ %647, %646 ]
  %650 = load ptr, ptr %19, align 8, !tbaa !5
  %651 = load i64, ptr %35, align 8, !tbaa !9
  %652 = sub nsw i64 %651, 1
  %653 = getelementptr inbounds double, ptr %650, i64 %652
  store double %649, ptr %653, align 8, !tbaa !11
  br label %654

654:                                              ; preds = %648
  %655 = load i64, ptr %33, align 8, !tbaa !9
  %656 = add nsw i64 %655, 1
  store i64 %656, ptr %33, align 8, !tbaa !9
  br label %539, !llvm.loop !22

657:                                              ; preds = %539
  %658 = load i64, ptr %35, align 8, !tbaa !9
  %659 = load i64, ptr %35, align 8, !tbaa !9
  %660 = load i64, ptr %23, align 8, !tbaa !9
  %661 = mul nsw i64 %659, %660
  %662 = add nsw i64 %658, %661
  store i64 %662, ptr %25, align 8, !tbaa !9
  %663 = load ptr, ptr %16, align 8, !tbaa !5
  %664 = load i64, ptr %25, align 8, !tbaa !9
  %665 = getelementptr inbounds %struct.doublecomplex, ptr %663, i64 %664
  %666 = getelementptr inbounds %struct.doublecomplex, ptr %665, i32 0, i32 0
  %667 = load double, ptr %666, align 8, !tbaa !15
  store double %667, ptr %29, align 8, !tbaa !11
  %668 = load double, ptr %29, align 8, !tbaa !11
  %669 = fcmp oge double %668, 0.000000e+00
  br i1 %669, label %670, label %672

670:                                              ; preds = %657
  %671 = load double, ptr %29, align 8, !tbaa !11
  br label %675

672:                                              ; preds = %657
  %673 = load double, ptr %29, align 8, !tbaa !11
  %674 = fneg double %673
  br label %675

675:                                              ; preds = %672, %670
  %676 = phi double [ %671, %670 ], [ %674, %672 ]
  %677 = load ptr, ptr %16, align 8, !tbaa !5
  %678 = load i64, ptr %35, align 8, !tbaa !9
  %679 = load i64, ptr %35, align 8, !tbaa !9
  %680 = load i64, ptr %23, align 8, !tbaa !9
  %681 = mul nsw i64 %679, %680
  %682 = add nsw i64 %678, %681
  %683 = getelementptr inbounds %struct.doublecomplex, ptr %677, i64 %682
  %684 = call double @d_imag(ptr noundef %683)
  store double %684, ptr %30, align 8, !tbaa !11
  %685 = load double, ptr %30, align 8, !tbaa !11
  %686 = fcmp oge double %685, 0.000000e+00
  br i1 %686, label %687, label %689

687:                                              ; preds = %675
  %688 = load double, ptr %30, align 8, !tbaa !11
  br label %692

689:                                              ; preds = %675
  %690 = load double, ptr %30, align 8, !tbaa !11
  %691 = fneg double %690
  br label %692

692:                                              ; preds = %689, %687
  %693 = phi double [ %688, %687 ], [ %691, %689 ]
  %694 = fadd double %676, %693
  store double %694, ptr %31, align 8, !tbaa !11
  %695 = load ptr, ptr %19, align 8, !tbaa !5
  %696 = load i64, ptr %35, align 8, !tbaa !9
  %697 = getelementptr inbounds double, ptr %695, i64 %696
  %698 = load double, ptr %697, align 8, !tbaa !11
  store double %698, ptr %32, align 8, !tbaa !11
  %699 = load double, ptr %31, align 8, !tbaa !11
  %700 = load double, ptr %32, align 8, !tbaa !11
  %701 = fcmp oge double %699, %700
  br i1 %701, label %702, label %704

702:                                              ; preds = %692
  %703 = load double, ptr %31, align 8, !tbaa !11
  br label %706

704:                                              ; preds = %692
  %705 = load double, ptr %32, align 8, !tbaa !11
  br label %706

706:                                              ; preds = %704, %702
  %707 = phi double [ %703, %702 ], [ %705, %704 ]
  %708 = load ptr, ptr %19, align 8, !tbaa !5
  %709 = load i64, ptr %35, align 8, !tbaa !9
  %710 = getelementptr inbounds double, ptr %708, i64 %709
  store double %707, ptr %710, align 8, !tbaa !11
  %711 = load i64, ptr %35, align 8, !tbaa !9
  %712 = add nsw i64 %711, -2
  store i64 %712, ptr %35, align 8, !tbaa !9
  br label %713

713:                                              ; preds = %706, %499
  br label %385, !llvm.loop !23

714:                                              ; preds = %392
  %715 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %715, ptr %35, align 8, !tbaa !9
  br label %716

716:                                              ; preds = %801, %714
  %717 = load i64, ptr %35, align 8, !tbaa !9
  %718 = load ptr, ptr %12, align 8, !tbaa !5
  %719 = load i64, ptr %718, align 8, !tbaa !9
  %720 = icmp sle i64 %717, %719
  br i1 %720, label %721, label %802

721:                                              ; preds = %716
  %722 = load ptr, ptr %18, align 8, !tbaa !5
  %723 = load i64, ptr %35, align 8, !tbaa !9
  %724 = getelementptr inbounds i64, ptr %722, i64 %723
  %725 = load i64, ptr %724, align 8, !tbaa !9
  %726 = icmp sgt i64 %725, 0
  br i1 %726, label %727, label %766

727:                                              ; preds = %721
  %728 = load ptr, ptr %18, align 8, !tbaa !5
  %729 = load i64, ptr %35, align 8, !tbaa !9
  %730 = getelementptr inbounds i64, ptr %728, i64 %729
  %731 = load i64, ptr %730, align 8, !tbaa !9
  store i64 %731, ptr %36, align 8, !tbaa !9
  %732 = load i64, ptr %36, align 8, !tbaa !9
  %733 = load i64, ptr %35, align 8, !tbaa !9
  %734 = icmp ne i64 %732, %733
  br i1 %734, label %735, label %763

735:                                              ; preds = %727
  %736 = load ptr, ptr %19, align 8, !tbaa !5
  %737 = load ptr, ptr %12, align 8, !tbaa !5
  %738 = load i64, ptr %737, align 8, !tbaa !9
  %739 = load i64, ptr %35, align 8, !tbaa !9
  %740 = add nsw i64 %738, %739
  %741 = getelementptr inbounds double, ptr %736, i64 %740
  %742 = load double, ptr %741, align 8, !tbaa !11
  store double %742, ptr %37, align 8, !tbaa !11
  %743 = load ptr, ptr %19, align 8, !tbaa !5
  %744 = load ptr, ptr %12, align 8, !tbaa !5
  %745 = load i64, ptr %744, align 8, !tbaa !9
  %746 = load i64, ptr %36, align 8, !tbaa !9
  %747 = add nsw i64 %745, %746
  %748 = getelementptr inbounds double, ptr %743, i64 %747
  %749 = load double, ptr %748, align 8, !tbaa !11
  %750 = load ptr, ptr %19, align 8, !tbaa !5
  %751 = load ptr, ptr %12, align 8, !tbaa !5
  %752 = load i64, ptr %751, align 8, !tbaa !9
  %753 = load i64, ptr %35, align 8, !tbaa !9
  %754 = add nsw i64 %752, %753
  %755 = getelementptr inbounds double, ptr %750, i64 %754
  store double %749, ptr %755, align 8, !tbaa !11
  %756 = load double, ptr %37, align 8, !tbaa !11
  %757 = load ptr, ptr %19, align 8, !tbaa !5
  %758 = load ptr, ptr %12, align 8, !tbaa !5
  %759 = load i64, ptr %758, align 8, !tbaa !9
  %760 = load i64, ptr %36, align 8, !tbaa !9
  %761 = add nsw i64 %759, %760
  %762 = getelementptr inbounds double, ptr %757, i64 %761
  store double %756, ptr %762, align 8, !tbaa !11
  br label %763

763:                                              ; preds = %735, %727
  %764 = load i64, ptr %35, align 8, !tbaa !9
  %765 = add nsw i64 %764, 1
  store i64 %765, ptr %35, align 8, !tbaa !9
  br label %801

766:                                              ; preds = %721
  %767 = load ptr, ptr %18, align 8, !tbaa !5
  %768 = load i64, ptr %35, align 8, !tbaa !9
  %769 = getelementptr inbounds i64, ptr %767, i64 %768
  %770 = load i64, ptr %769, align 8, !tbaa !9
  %771 = sub nsw i64 0, %770
  store i64 %771, ptr %36, align 8, !tbaa !9
  %772 = load ptr, ptr %19, align 8, !tbaa !5
  %773 = load ptr, ptr %12, align 8, !tbaa !5
  %774 = load i64, ptr %773, align 8, !tbaa !9
  %775 = load i64, ptr %35, align 8, !tbaa !9
  %776 = add nsw i64 %774, %775
  %777 = getelementptr inbounds double, ptr %772, i64 %776
  %778 = load double, ptr %777, align 8, !tbaa !11
  store double %778, ptr %37, align 8, !tbaa !11
  %779 = load ptr, ptr %19, align 8, !tbaa !5
  %780 = load ptr, ptr %12, align 8, !tbaa !5
  %781 = load i64, ptr %780, align 8, !tbaa !9
  %782 = load i64, ptr %36, align 8, !tbaa !9
  %783 = add nsw i64 %781, %782
  %784 = getelementptr inbounds double, ptr %779, i64 %783
  %785 = load double, ptr %784, align 8, !tbaa !11
  %786 = load ptr, ptr %19, align 8, !tbaa !5
  %787 = load ptr, ptr %12, align 8, !tbaa !5
  %788 = load i64, ptr %787, align 8, !tbaa !9
  %789 = load i64, ptr %35, align 8, !tbaa !9
  %790 = add nsw i64 %788, %789
  %791 = getelementptr inbounds double, ptr %786, i64 %790
  store double %785, ptr %791, align 8, !tbaa !11
  %792 = load double, ptr %37, align 8, !tbaa !11
  %793 = load ptr, ptr %19, align 8, !tbaa !5
  %794 = load ptr, ptr %12, align 8, !tbaa !5
  %795 = load i64, ptr %794, align 8, !tbaa !9
  %796 = load i64, ptr %36, align 8, !tbaa !9
  %797 = add nsw i64 %795, %796
  %798 = getelementptr inbounds double, ptr %793, i64 %797
  store double %792, ptr %798, align 8, !tbaa !11
  %799 = load i64, ptr %35, align 8, !tbaa !9
  %800 = add nsw i64 %799, 2
  store i64 %800, ptr %35, align 8, !tbaa !9
  br label %801

801:                                              ; preds = %766, %763
  br label %716, !llvm.loop !24

802:                                              ; preds = %716
  br label %1219

803:                                              ; preds = %379
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %804

804:                                              ; preds = %1131, %803
  %805 = load i64, ptr %35, align 8, !tbaa !9
  %806 = load i64, ptr %40, align 8, !tbaa !9
  %807 = icmp sle i64 %805, %806
  br i1 %807, label %808, label %1132

808:                                              ; preds = %804
  %809 = load ptr, ptr %18, align 8, !tbaa !5
  %810 = load i64, ptr %35, align 8, !tbaa !9
  %811 = getelementptr inbounds i64, ptr %809, i64 %810
  %812 = load i64, ptr %811, align 8, !tbaa !9
  %813 = icmp sgt i64 %812, 0
  br i1 %813, label %814, label %918

814:                                              ; preds = %808
  %815 = load ptr, ptr %18, align 8, !tbaa !5
  %816 = load i64, ptr %35, align 8, !tbaa !9
  %817 = getelementptr inbounds i64, ptr %815, i64 %816
  %818 = load i64, ptr %817, align 8, !tbaa !9
  store i64 %818, ptr %36, align 8, !tbaa !9
  %819 = load i64, ptr %36, align 8, !tbaa !9
  %820 = load i64, ptr %35, align 8, !tbaa !9
  %821 = icmp ne i64 %819, %820
  br i1 %821, label %822, label %850

822:                                              ; preds = %814
  %823 = load ptr, ptr %19, align 8, !tbaa !5
  %824 = load ptr, ptr %12, align 8, !tbaa !5
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = load i64, ptr %35, align 8, !tbaa !9
  %827 = add nsw i64 %825, %826
  %828 = getelementptr inbounds double, ptr %823, i64 %827
  %829 = load double, ptr %828, align 8, !tbaa !11
  store double %829, ptr %37, align 8, !tbaa !11
  %830 = load ptr, ptr %19, align 8, !tbaa !5
  %831 = load ptr, ptr %12, align 8, !tbaa !5
  %832 = load i64, ptr %831, align 8, !tbaa !9
  %833 = load i64, ptr %36, align 8, !tbaa !9
  %834 = add nsw i64 %832, %833
  %835 = getelementptr inbounds double, ptr %830, i64 %834
  %836 = load double, ptr %835, align 8, !tbaa !11
  %837 = load ptr, ptr %19, align 8, !tbaa !5
  %838 = load ptr, ptr %12, align 8, !tbaa !5
  %839 = load i64, ptr %838, align 8, !tbaa !9
  %840 = load i64, ptr %35, align 8, !tbaa !9
  %841 = add nsw i64 %839, %840
  %842 = getelementptr inbounds double, ptr %837, i64 %841
  store double %836, ptr %842, align 8, !tbaa !11
  %843 = load double, ptr %37, align 8, !tbaa !11
  %844 = load ptr, ptr %19, align 8, !tbaa !5
  %845 = load ptr, ptr %12, align 8, !tbaa !5
  %846 = load i64, ptr %845, align 8, !tbaa !9
  %847 = load i64, ptr %36, align 8, !tbaa !9
  %848 = add nsw i64 %846, %847
  %849 = getelementptr inbounds double, ptr %844, i64 %848
  store double %843, ptr %849, align 8, !tbaa !11
  br label %850

850:                                              ; preds = %822, %814
  %851 = load ptr, ptr %12, align 8, !tbaa !5
  %852 = load i64, ptr %851, align 8, !tbaa !9
  store i64 %852, ptr %25, align 8, !tbaa !9
  %853 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %853, ptr %33, align 8, !tbaa !9
  br label %854

854:                                              ; preds = %912, %850
  %855 = load i64, ptr %33, align 8, !tbaa !9
  %856 = load i64, ptr %25, align 8, !tbaa !9
  %857 = icmp sle i64 %855, %856
  br i1 %857, label %858, label %915

858:                                              ; preds = %854
  %859 = load i64, ptr %33, align 8, !tbaa !9
  %860 = load i64, ptr %35, align 8, !tbaa !9
  %861 = load i64, ptr %23, align 8, !tbaa !9
  %862 = mul nsw i64 %860, %861
  %863 = add nsw i64 %859, %862
  store i64 %863, ptr %26, align 8, !tbaa !9
  %864 = load ptr, ptr %16, align 8, !tbaa !5
  %865 = load i64, ptr %26, align 8, !tbaa !9
  %866 = getelementptr inbounds %struct.doublecomplex, ptr %864, i64 %865
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %866, i32 0, i32 0
  %868 = load double, ptr %867, align 8, !tbaa !15
  store double %868, ptr %29, align 8, !tbaa !11
  %869 = load double, ptr %29, align 8, !tbaa !11
  %870 = fcmp oge double %869, 0.000000e+00
  br i1 %870, label %871, label %873

871:                                              ; preds = %858
  %872 = load double, ptr %29, align 8, !tbaa !11
  br label %876

873:                                              ; preds = %858
  %874 = load double, ptr %29, align 8, !tbaa !11
  %875 = fneg double %874
  br label %876

876:                                              ; preds = %873, %871
  %877 = phi double [ %872, %871 ], [ %875, %873 ]
  %878 = load ptr, ptr %16, align 8, !tbaa !5
  %879 = load i64, ptr %33, align 8, !tbaa !9
  %880 = load i64, ptr %35, align 8, !tbaa !9
  %881 = load i64, ptr %23, align 8, !tbaa !9
  %882 = mul nsw i64 %880, %881
  %883 = add nsw i64 %879, %882
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %878, i64 %883
  %885 = call double @d_imag(ptr noundef %884)
  store double %885, ptr %30, align 8, !tbaa !11
  %886 = load double, ptr %30, align 8, !tbaa !11
  %887 = fcmp oge double %886, 0.000000e+00
  br i1 %887, label %888, label %890

888:                                              ; preds = %876
  %889 = load double, ptr %30, align 8, !tbaa !11
  br label %893

890:                                              ; preds = %876
  %891 = load double, ptr %30, align 8, !tbaa !11
  %892 = fneg double %891
  br label %893

893:                                              ; preds = %890, %888
  %894 = phi double [ %889, %888 ], [ %892, %890 ]
  %895 = fadd double %877, %894
  store double %895, ptr %31, align 8, !tbaa !11
  %896 = load ptr, ptr %19, align 8, !tbaa !5
  %897 = load i64, ptr %35, align 8, !tbaa !9
  %898 = getelementptr inbounds double, ptr %896, i64 %897
  %899 = load double, ptr %898, align 8, !tbaa !11
  store double %899, ptr %32, align 8, !tbaa !11
  %900 = load double, ptr %31, align 8, !tbaa !11
  %901 = load double, ptr %32, align 8, !tbaa !11
  %902 = fcmp oge double %900, %901
  br i1 %902, label %903, label %905

903:                                              ; preds = %893
  %904 = load double, ptr %31, align 8, !tbaa !11
  br label %907

905:                                              ; preds = %893
  %906 = load double, ptr %32, align 8, !tbaa !11
  br label %907

907:                                              ; preds = %905, %903
  %908 = phi double [ %904, %903 ], [ %906, %905 ]
  %909 = load ptr, ptr %19, align 8, !tbaa !5
  %910 = load i64, ptr %35, align 8, !tbaa !9
  %911 = getelementptr inbounds double, ptr %909, i64 %910
  store double %908, ptr %911, align 8, !tbaa !11
  br label %912

912:                                              ; preds = %907
  %913 = load i64, ptr %33, align 8, !tbaa !9
  %914 = add nsw i64 %913, 1
  store i64 %914, ptr %33, align 8, !tbaa !9
  br label %854, !llvm.loop !25

915:                                              ; preds = %854
  %916 = load i64, ptr %35, align 8, !tbaa !9
  %917 = add nsw i64 %916, 1
  store i64 %917, ptr %35, align 8, !tbaa !9
  br label %1131

918:                                              ; preds = %808
  %919 = load ptr, ptr %18, align 8, !tbaa !5
  %920 = load i64, ptr %35, align 8, !tbaa !9
  %921 = getelementptr inbounds i64, ptr %919, i64 %920
  %922 = load i64, ptr %921, align 8, !tbaa !9
  %923 = sub nsw i64 0, %922
  store i64 %923, ptr %36, align 8, !tbaa !9
  %924 = load ptr, ptr %19, align 8, !tbaa !5
  %925 = load ptr, ptr %12, align 8, !tbaa !5
  %926 = load i64, ptr %925, align 8, !tbaa !9
  %927 = load i64, ptr %35, align 8, !tbaa !9
  %928 = add nsw i64 %926, %927
  %929 = add nsw i64 %928, 1
  %930 = getelementptr inbounds double, ptr %924, i64 %929
  %931 = load double, ptr %930, align 8, !tbaa !11
  store double %931, ptr %37, align 8, !tbaa !11
  %932 = load ptr, ptr %19, align 8, !tbaa !5
  %933 = load ptr, ptr %12, align 8, !tbaa !5
  %934 = load i64, ptr %933, align 8, !tbaa !9
  %935 = load i64, ptr %36, align 8, !tbaa !9
  %936 = add nsw i64 %934, %935
  %937 = getelementptr inbounds double, ptr %932, i64 %936
  %938 = load double, ptr %937, align 8, !tbaa !11
  %939 = load ptr, ptr %19, align 8, !tbaa !5
  %940 = load ptr, ptr %12, align 8, !tbaa !5
  %941 = load i64, ptr %940, align 8, !tbaa !9
  %942 = load i64, ptr %35, align 8, !tbaa !9
  %943 = add nsw i64 %941, %942
  %944 = add nsw i64 %943, 1
  %945 = getelementptr inbounds double, ptr %939, i64 %944
  store double %938, ptr %945, align 8, !tbaa !11
  %946 = load double, ptr %37, align 8, !tbaa !11
  %947 = load ptr, ptr %19, align 8, !tbaa !5
  %948 = load ptr, ptr %12, align 8, !tbaa !5
  %949 = load i64, ptr %948, align 8, !tbaa !9
  %950 = load i64, ptr %36, align 8, !tbaa !9
  %951 = add nsw i64 %949, %950
  %952 = getelementptr inbounds double, ptr %947, i64 %951
  store double %946, ptr %952, align 8, !tbaa !11
  %953 = load ptr, ptr %12, align 8, !tbaa !5
  %954 = load i64, ptr %953, align 8, !tbaa !9
  store i64 %954, ptr %25, align 8, !tbaa !9
  %955 = load i64, ptr %35, align 8, !tbaa !9
  %956 = add nsw i64 %955, 1
  store i64 %956, ptr %33, align 8, !tbaa !9
  br label %957

957:                                              ; preds = %1072, %918
  %958 = load i64, ptr %33, align 8, !tbaa !9
  %959 = load i64, ptr %25, align 8, !tbaa !9
  %960 = icmp sle i64 %958, %959
  br i1 %960, label %961, label %1075

961:                                              ; preds = %957
  %962 = load i64, ptr %33, align 8, !tbaa !9
  %963 = load i64, ptr %35, align 8, !tbaa !9
  %964 = load i64, ptr %23, align 8, !tbaa !9
  %965 = mul nsw i64 %963, %964
  %966 = add nsw i64 %962, %965
  store i64 %966, ptr %26, align 8, !tbaa !9
  %967 = load ptr, ptr %16, align 8, !tbaa !5
  %968 = load i64, ptr %26, align 8, !tbaa !9
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %967, i64 %968
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %969, i32 0, i32 0
  %971 = load double, ptr %970, align 8, !tbaa !15
  store double %971, ptr %29, align 8, !tbaa !11
  %972 = load double, ptr %29, align 8, !tbaa !11
  %973 = fcmp oge double %972, 0.000000e+00
  br i1 %973, label %974, label %976

974:                                              ; preds = %961
  %975 = load double, ptr %29, align 8, !tbaa !11
  br label %979

976:                                              ; preds = %961
  %977 = load double, ptr %29, align 8, !tbaa !11
  %978 = fneg double %977
  br label %979

979:                                              ; preds = %976, %974
  %980 = phi double [ %975, %974 ], [ %978, %976 ]
  %981 = load ptr, ptr %16, align 8, !tbaa !5
  %982 = load i64, ptr %33, align 8, !tbaa !9
  %983 = load i64, ptr %35, align 8, !tbaa !9
  %984 = load i64, ptr %23, align 8, !tbaa !9
  %985 = mul nsw i64 %983, %984
  %986 = add nsw i64 %982, %985
  %987 = getelementptr inbounds %struct.doublecomplex, ptr %981, i64 %986
  %988 = call double @d_imag(ptr noundef %987)
  store double %988, ptr %30, align 8, !tbaa !11
  %989 = load double, ptr %30, align 8, !tbaa !11
  %990 = fcmp oge double %989, 0.000000e+00
  br i1 %990, label %991, label %993

991:                                              ; preds = %979
  %992 = load double, ptr %30, align 8, !tbaa !11
  br label %996

993:                                              ; preds = %979
  %994 = load double, ptr %30, align 8, !tbaa !11
  %995 = fneg double %994
  br label %996

996:                                              ; preds = %993, %991
  %997 = phi double [ %992, %991 ], [ %995, %993 ]
  %998 = fadd double %980, %997
  store double %998, ptr %31, align 8, !tbaa !11
  %999 = load ptr, ptr %19, align 8, !tbaa !5
  %1000 = load i64, ptr %35, align 8, !tbaa !9
  %1001 = getelementptr inbounds double, ptr %999, i64 %1000
  %1002 = load double, ptr %1001, align 8, !tbaa !11
  store double %1002, ptr %32, align 8, !tbaa !11
  %1003 = load double, ptr %31, align 8, !tbaa !11
  %1004 = load double, ptr %32, align 8, !tbaa !11
  %1005 = fcmp oge double %1003, %1004
  br i1 %1005, label %1006, label %1008

1006:                                             ; preds = %996
  %1007 = load double, ptr %31, align 8, !tbaa !11
  br label %1010

1008:                                             ; preds = %996
  %1009 = load double, ptr %32, align 8, !tbaa !11
  br label %1010

1010:                                             ; preds = %1008, %1006
  %1011 = phi double [ %1007, %1006 ], [ %1009, %1008 ]
  %1012 = load ptr, ptr %19, align 8, !tbaa !5
  %1013 = load i64, ptr %35, align 8, !tbaa !9
  %1014 = getelementptr inbounds double, ptr %1012, i64 %1013
  store double %1011, ptr %1014, align 8, !tbaa !11
  %1015 = load i64, ptr %33, align 8, !tbaa !9
  %1016 = load i64, ptr %35, align 8, !tbaa !9
  %1017 = add nsw i64 %1016, 1
  %1018 = load i64, ptr %23, align 8, !tbaa !9
  %1019 = mul nsw i64 %1017, %1018
  %1020 = add nsw i64 %1015, %1019
  store i64 %1020, ptr %26, align 8, !tbaa !9
  %1021 = load ptr, ptr %16, align 8, !tbaa !5
  %1022 = load i64, ptr %26, align 8, !tbaa !9
  %1023 = getelementptr inbounds %struct.doublecomplex, ptr %1021, i64 %1022
  %1024 = getelementptr inbounds %struct.doublecomplex, ptr %1023, i32 0, i32 0
  %1025 = load double, ptr %1024, align 8, !tbaa !15
  store double %1025, ptr %29, align 8, !tbaa !11
  %1026 = load double, ptr %29, align 8, !tbaa !11
  %1027 = fcmp oge double %1026, 0.000000e+00
  br i1 %1027, label %1028, label %1030

1028:                                             ; preds = %1010
  %1029 = load double, ptr %29, align 8, !tbaa !11
  br label %1033

1030:                                             ; preds = %1010
  %1031 = load double, ptr %29, align 8, !tbaa !11
  %1032 = fneg double %1031
  br label %1033

1033:                                             ; preds = %1030, %1028
  %1034 = phi double [ %1029, %1028 ], [ %1032, %1030 ]
  %1035 = load ptr, ptr %16, align 8, !tbaa !5
  %1036 = load i64, ptr %33, align 8, !tbaa !9
  %1037 = load i64, ptr %35, align 8, !tbaa !9
  %1038 = add nsw i64 %1037, 1
  %1039 = load i64, ptr %23, align 8, !tbaa !9
  %1040 = mul nsw i64 %1038, %1039
  %1041 = add nsw i64 %1036, %1040
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %1035, i64 %1041
  %1043 = call double @d_imag(ptr noundef %1042)
  store double %1043, ptr %30, align 8, !tbaa !11
  %1044 = load double, ptr %30, align 8, !tbaa !11
  %1045 = fcmp oge double %1044, 0.000000e+00
  br i1 %1045, label %1046, label %1048

1046:                                             ; preds = %1033
  %1047 = load double, ptr %30, align 8, !tbaa !11
  br label %1051

1048:                                             ; preds = %1033
  %1049 = load double, ptr %30, align 8, !tbaa !11
  %1050 = fneg double %1049
  br label %1051

1051:                                             ; preds = %1048, %1046
  %1052 = phi double [ %1047, %1046 ], [ %1050, %1048 ]
  %1053 = fadd double %1034, %1052
  store double %1053, ptr %31, align 8, !tbaa !11
  %1054 = load ptr, ptr %19, align 8, !tbaa !5
  %1055 = load i64, ptr %35, align 8, !tbaa !9
  %1056 = add nsw i64 %1055, 1
  %1057 = getelementptr inbounds double, ptr %1054, i64 %1056
  %1058 = load double, ptr %1057, align 8, !tbaa !11
  store double %1058, ptr %32, align 8, !tbaa !11
  %1059 = load double, ptr %31, align 8, !tbaa !11
  %1060 = load double, ptr %32, align 8, !tbaa !11
  %1061 = fcmp oge double %1059, %1060
  br i1 %1061, label %1062, label %1064

1062:                                             ; preds = %1051
  %1063 = load double, ptr %31, align 8, !tbaa !11
  br label %1066

1064:                                             ; preds = %1051
  %1065 = load double, ptr %32, align 8, !tbaa !11
  br label %1066

1066:                                             ; preds = %1064, %1062
  %1067 = phi double [ %1063, %1062 ], [ %1065, %1064 ]
  %1068 = load ptr, ptr %19, align 8, !tbaa !5
  %1069 = load i64, ptr %35, align 8, !tbaa !9
  %1070 = add nsw i64 %1069, 1
  %1071 = getelementptr inbounds double, ptr %1068, i64 %1070
  store double %1067, ptr %1071, align 8, !tbaa !11
  br label %1072

1072:                                             ; preds = %1066
  %1073 = load i64, ptr %33, align 8, !tbaa !9
  %1074 = add nsw i64 %1073, 1
  store i64 %1074, ptr %33, align 8, !tbaa !9
  br label %957, !llvm.loop !26

1075:                                             ; preds = %957
  %1076 = load i64, ptr %35, align 8, !tbaa !9
  %1077 = load i64, ptr %35, align 8, !tbaa !9
  %1078 = load i64, ptr %23, align 8, !tbaa !9
  %1079 = mul nsw i64 %1077, %1078
  %1080 = add nsw i64 %1076, %1079
  store i64 %1080, ptr %25, align 8, !tbaa !9
  %1081 = load ptr, ptr %16, align 8, !tbaa !5
  %1082 = load i64, ptr %25, align 8, !tbaa !9
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1081, i64 %1082
  %1084 = getelementptr inbounds %struct.doublecomplex, ptr %1083, i32 0, i32 0
  %1085 = load double, ptr %1084, align 8, !tbaa !15
  store double %1085, ptr %29, align 8, !tbaa !11
  %1086 = load double, ptr %29, align 8, !tbaa !11
  %1087 = fcmp oge double %1086, 0.000000e+00
  br i1 %1087, label %1088, label %1090

1088:                                             ; preds = %1075
  %1089 = load double, ptr %29, align 8, !tbaa !11
  br label %1093

1090:                                             ; preds = %1075
  %1091 = load double, ptr %29, align 8, !tbaa !11
  %1092 = fneg double %1091
  br label %1093

1093:                                             ; preds = %1090, %1088
  %1094 = phi double [ %1089, %1088 ], [ %1092, %1090 ]
  %1095 = load ptr, ptr %16, align 8, !tbaa !5
  %1096 = load i64, ptr %35, align 8, !tbaa !9
  %1097 = load i64, ptr %35, align 8, !tbaa !9
  %1098 = load i64, ptr %23, align 8, !tbaa !9
  %1099 = mul nsw i64 %1097, %1098
  %1100 = add nsw i64 %1096, %1099
  %1101 = getelementptr inbounds %struct.doublecomplex, ptr %1095, i64 %1100
  %1102 = call double @d_imag(ptr noundef %1101)
  store double %1102, ptr %30, align 8, !tbaa !11
  %1103 = load double, ptr %30, align 8, !tbaa !11
  %1104 = fcmp oge double %1103, 0.000000e+00
  br i1 %1104, label %1105, label %1107

1105:                                             ; preds = %1093
  %1106 = load double, ptr %30, align 8, !tbaa !11
  br label %1110

1107:                                             ; preds = %1093
  %1108 = load double, ptr %30, align 8, !tbaa !11
  %1109 = fneg double %1108
  br label %1110

1110:                                             ; preds = %1107, %1105
  %1111 = phi double [ %1106, %1105 ], [ %1109, %1107 ]
  %1112 = fadd double %1094, %1111
  store double %1112, ptr %31, align 8, !tbaa !11
  %1113 = load ptr, ptr %19, align 8, !tbaa !5
  %1114 = load i64, ptr %35, align 8, !tbaa !9
  %1115 = getelementptr inbounds double, ptr %1113, i64 %1114
  %1116 = load double, ptr %1115, align 8, !tbaa !11
  store double %1116, ptr %32, align 8, !tbaa !11
  %1117 = load double, ptr %31, align 8, !tbaa !11
  %1118 = load double, ptr %32, align 8, !tbaa !11
  %1119 = fcmp oge double %1117, %1118
  br i1 %1119, label %1120, label %1122

1120:                                             ; preds = %1110
  %1121 = load double, ptr %31, align 8, !tbaa !11
  br label %1124

1122:                                             ; preds = %1110
  %1123 = load double, ptr %32, align 8, !tbaa !11
  br label %1124

1124:                                             ; preds = %1122, %1120
  %1125 = phi double [ %1121, %1120 ], [ %1123, %1122 ]
  %1126 = load ptr, ptr %19, align 8, !tbaa !5
  %1127 = load i64, ptr %35, align 8, !tbaa !9
  %1128 = getelementptr inbounds double, ptr %1126, i64 %1127
  store double %1125, ptr %1128, align 8, !tbaa !11
  %1129 = load i64, ptr %35, align 8, !tbaa !9
  %1130 = add nsw i64 %1129, 2
  store i64 %1130, ptr %35, align 8, !tbaa !9
  br label %1131

1131:                                             ; preds = %1124, %915
  br label %804, !llvm.loop !27

1132:                                             ; preds = %804
  %1133 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %1133, ptr %35, align 8, !tbaa !9
  br label %1134

1134:                                             ; preds = %1217, %1132
  %1135 = load i64, ptr %35, align 8, !tbaa !9
  %1136 = icmp sge i64 %1135, 1
  br i1 %1136, label %1137, label %1218

1137:                                             ; preds = %1134
  %1138 = load ptr, ptr %18, align 8, !tbaa !5
  %1139 = load i64, ptr %35, align 8, !tbaa !9
  %1140 = getelementptr inbounds i64, ptr %1138, i64 %1139
  %1141 = load i64, ptr %1140, align 8, !tbaa !9
  %1142 = icmp sgt i64 %1141, 0
  br i1 %1142, label %1143, label %1182

1143:                                             ; preds = %1137
  %1144 = load ptr, ptr %18, align 8, !tbaa !5
  %1145 = load i64, ptr %35, align 8, !tbaa !9
  %1146 = getelementptr inbounds i64, ptr %1144, i64 %1145
  %1147 = load i64, ptr %1146, align 8, !tbaa !9
  store i64 %1147, ptr %36, align 8, !tbaa !9
  %1148 = load i64, ptr %36, align 8, !tbaa !9
  %1149 = load i64, ptr %35, align 8, !tbaa !9
  %1150 = icmp ne i64 %1148, %1149
  br i1 %1150, label %1151, label %1179

1151:                                             ; preds = %1143
  %1152 = load ptr, ptr %19, align 8, !tbaa !5
  %1153 = load ptr, ptr %12, align 8, !tbaa !5
  %1154 = load i64, ptr %1153, align 8, !tbaa !9
  %1155 = load i64, ptr %35, align 8, !tbaa !9
  %1156 = add nsw i64 %1154, %1155
  %1157 = getelementptr inbounds double, ptr %1152, i64 %1156
  %1158 = load double, ptr %1157, align 8, !tbaa !11
  store double %1158, ptr %37, align 8, !tbaa !11
  %1159 = load ptr, ptr %19, align 8, !tbaa !5
  %1160 = load ptr, ptr %12, align 8, !tbaa !5
  %1161 = load i64, ptr %1160, align 8, !tbaa !9
  %1162 = load i64, ptr %36, align 8, !tbaa !9
  %1163 = add nsw i64 %1161, %1162
  %1164 = getelementptr inbounds double, ptr %1159, i64 %1163
  %1165 = load double, ptr %1164, align 8, !tbaa !11
  %1166 = load ptr, ptr %19, align 8, !tbaa !5
  %1167 = load ptr, ptr %12, align 8, !tbaa !5
  %1168 = load i64, ptr %1167, align 8, !tbaa !9
  %1169 = load i64, ptr %35, align 8, !tbaa !9
  %1170 = add nsw i64 %1168, %1169
  %1171 = getelementptr inbounds double, ptr %1166, i64 %1170
  store double %1165, ptr %1171, align 8, !tbaa !11
  %1172 = load double, ptr %37, align 8, !tbaa !11
  %1173 = load ptr, ptr %19, align 8, !tbaa !5
  %1174 = load ptr, ptr %12, align 8, !tbaa !5
  %1175 = load i64, ptr %1174, align 8, !tbaa !9
  %1176 = load i64, ptr %36, align 8, !tbaa !9
  %1177 = add nsw i64 %1175, %1176
  %1178 = getelementptr inbounds double, ptr %1173, i64 %1177
  store double %1172, ptr %1178, align 8, !tbaa !11
  br label %1179

1179:                                             ; preds = %1151, %1143
  %1180 = load i64, ptr %35, align 8, !tbaa !9
  %1181 = add nsw i64 %1180, -1
  store i64 %1181, ptr %35, align 8, !tbaa !9
  br label %1217

1182:                                             ; preds = %1137
  %1183 = load ptr, ptr %18, align 8, !tbaa !5
  %1184 = load i64, ptr %35, align 8, !tbaa !9
  %1185 = getelementptr inbounds i64, ptr %1183, i64 %1184
  %1186 = load i64, ptr %1185, align 8, !tbaa !9
  %1187 = sub nsw i64 0, %1186
  store i64 %1187, ptr %36, align 8, !tbaa !9
  %1188 = load ptr, ptr %19, align 8, !tbaa !5
  %1189 = load ptr, ptr %12, align 8, !tbaa !5
  %1190 = load i64, ptr %1189, align 8, !tbaa !9
  %1191 = load i64, ptr %35, align 8, !tbaa !9
  %1192 = add nsw i64 %1190, %1191
  %1193 = getelementptr inbounds double, ptr %1188, i64 %1192
  %1194 = load double, ptr %1193, align 8, !tbaa !11
  store double %1194, ptr %37, align 8, !tbaa !11
  %1195 = load ptr, ptr %19, align 8, !tbaa !5
  %1196 = load ptr, ptr %12, align 8, !tbaa !5
  %1197 = load i64, ptr %1196, align 8, !tbaa !9
  %1198 = load i64, ptr %36, align 8, !tbaa !9
  %1199 = add nsw i64 %1197, %1198
  %1200 = getelementptr inbounds double, ptr %1195, i64 %1199
  %1201 = load double, ptr %1200, align 8, !tbaa !11
  %1202 = load ptr, ptr %19, align 8, !tbaa !5
  %1203 = load ptr, ptr %12, align 8, !tbaa !5
  %1204 = load i64, ptr %1203, align 8, !tbaa !9
  %1205 = load i64, ptr %35, align 8, !tbaa !9
  %1206 = add nsw i64 %1204, %1205
  %1207 = getelementptr inbounds double, ptr %1202, i64 %1206
  store double %1201, ptr %1207, align 8, !tbaa !11
  %1208 = load double, ptr %37, align 8, !tbaa !11
  %1209 = load ptr, ptr %19, align 8, !tbaa !5
  %1210 = load ptr, ptr %12, align 8, !tbaa !5
  %1211 = load i64, ptr %1210, align 8, !tbaa !9
  %1212 = load i64, ptr %36, align 8, !tbaa !9
  %1213 = add nsw i64 %1211, %1212
  %1214 = getelementptr inbounds double, ptr %1209, i64 %1213
  store double %1208, ptr %1214, align 8, !tbaa !11
  %1215 = load i64, ptr %35, align 8, !tbaa !9
  %1216 = add nsw i64 %1215, -2
  store i64 %1216, ptr %35, align 8, !tbaa !9
  br label %1217

1217:                                             ; preds = %1182, %1179
  br label %1134, !llvm.loop !28

1218:                                             ; preds = %1134
  br label %1219

1219:                                             ; preds = %1218, %802
  %1220 = load i64, ptr %41, align 8, !tbaa !9
  %1221 = icmp ne i64 %1220, 0
  br i1 %1221, label %1222, label %1262

1222:                                             ; preds = %1219
  %1223 = load ptr, ptr %12, align 8, !tbaa !5
  %1224 = load i64, ptr %1223, align 8, !tbaa !9
  store i64 %1224, ptr %25, align 8, !tbaa !9
  %1225 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %1225, ptr %33, align 8, !tbaa !9
  br label %1226

1226:                                             ; preds = %1258, %1222
  %1227 = load i64, ptr %33, align 8, !tbaa !9
  %1228 = load i64, ptr %25, align 8, !tbaa !9
  %1229 = icmp sle i64 %1227, %1228
  br i1 %1229, label %1230, label %1261

1230:                                             ; preds = %1226
  %1231 = load ptr, ptr %19, align 8, !tbaa !5
  %1232 = load i64, ptr %33, align 8, !tbaa !9
  %1233 = getelementptr inbounds double, ptr %1231, i64 %1232
  %1234 = load double, ptr %1233, align 8, !tbaa !11
  store double %1234, ptr %39, align 8, !tbaa !11
  %1235 = load ptr, ptr %19, align 8, !tbaa !5
  %1236 = load ptr, ptr %12, align 8, !tbaa !5
  %1237 = load i64, ptr %1236, align 8, !tbaa !9
  %1238 = load i64, ptr %33, align 8, !tbaa !9
  %1239 = add nsw i64 %1237, %1238
  %1240 = getelementptr inbounds double, ptr %1235, i64 %1239
  %1241 = load double, ptr %1240, align 8, !tbaa !11
  store double %1241, ptr %38, align 8, !tbaa !11
  %1242 = load double, ptr %39, align 8, !tbaa !11
  %1243 = fcmp une double %1242, 0.000000e+00
  br i1 %1243, label %1244, label %1257

1244:                                             ; preds = %1230
  %1245 = load double, ptr %38, align 8, !tbaa !11
  %1246 = load double, ptr %39, align 8, !tbaa !11
  %1247 = fdiv double %1245, %1246
  store double %1247, ptr %29, align 8, !tbaa !11
  %1248 = load double, ptr %29, align 8, !tbaa !11
  %1249 = load double, ptr %42, align 8, !tbaa !11
  %1250 = fcmp ole double %1248, %1249
  br i1 %1250, label %1251, label %1253

1251:                                             ; preds = %1244
  %1252 = load double, ptr %29, align 8, !tbaa !11
  br label %1255

1253:                                             ; preds = %1244
  %1254 = load double, ptr %42, align 8, !tbaa !11
  br label %1255

1255:                                             ; preds = %1253, %1251
  %1256 = phi double [ %1252, %1251 ], [ %1254, %1253 ]
  store double %1256, ptr %42, align 8, !tbaa !11
  br label %1257

1257:                                             ; preds = %1255, %1230
  br label %1258

1258:                                             ; preds = %1257
  %1259 = load i64, ptr %33, align 8, !tbaa !9
  %1260 = add nsw i64 %1259, 1
  store i64 %1260, ptr %33, align 8, !tbaa !9
  br label %1226, !llvm.loop !29

1261:                                             ; preds = %1226
  br label %1300

1262:                                             ; preds = %1219
  %1263 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %1263, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %1264

1264:                                             ; preds = %1296, %1262
  %1265 = load i64, ptr %33, align 8, !tbaa !9
  %1266 = load i64, ptr %25, align 8, !tbaa !9
  %1267 = icmp sle i64 %1265, %1266
  br i1 %1267, label %1268, label %1299

1268:                                             ; preds = %1264
  %1269 = load ptr, ptr %19, align 8, !tbaa !5
  %1270 = load i64, ptr %33, align 8, !tbaa !9
  %1271 = getelementptr inbounds double, ptr %1269, i64 %1270
  %1272 = load double, ptr %1271, align 8, !tbaa !11
  store double %1272, ptr %39, align 8, !tbaa !11
  %1273 = load ptr, ptr %19, align 8, !tbaa !5
  %1274 = load ptr, ptr %12, align 8, !tbaa !5
  %1275 = load i64, ptr %1274, align 8, !tbaa !9
  %1276 = load i64, ptr %33, align 8, !tbaa !9
  %1277 = add nsw i64 %1275, %1276
  %1278 = getelementptr inbounds double, ptr %1273, i64 %1277
  %1279 = load double, ptr %1278, align 8, !tbaa !11
  store double %1279, ptr %38, align 8, !tbaa !11
  %1280 = load double, ptr %39, align 8, !tbaa !11
  %1281 = fcmp une double %1280, 0.000000e+00
  br i1 %1281, label %1282, label %1295

1282:                                             ; preds = %1268
  %1283 = load double, ptr %38, align 8, !tbaa !11
  %1284 = load double, ptr %39, align 8, !tbaa !11
  %1285 = fdiv double %1283, %1284
  store double %1285, ptr %29, align 8, !tbaa !11
  %1286 = load double, ptr %29, align 8, !tbaa !11
  %1287 = load double, ptr %42, align 8, !tbaa !11
  %1288 = fcmp ole double %1286, %1287
  br i1 %1288, label %1289, label %1291

1289:                                             ; preds = %1282
  %1290 = load double, ptr %29, align 8, !tbaa !11
  br label %1293

1291:                                             ; preds = %1282
  %1292 = load double, ptr %42, align 8, !tbaa !11
  br label %1293

1293:                                             ; preds = %1291, %1289
  %1294 = phi double [ %1290, %1289 ], [ %1292, %1291 ]
  store double %1294, ptr %42, align 8, !tbaa !11
  br label %1295

1295:                                             ; preds = %1293, %1268
  br label %1296

1296:                                             ; preds = %1295
  %1297 = load i64, ptr %33, align 8, !tbaa !9
  %1298 = add nsw i64 %1297, 1
  store i64 %1298, ptr %33, align 8, !tbaa !9
  br label %1264, !llvm.loop !30

1299:                                             ; preds = %1264
  br label %1300

1300:                                             ; preds = %1299, %1261
  %1301 = load double, ptr %42, align 8, !tbaa !11
  store double %1301, ptr %28, align 8, !tbaa !11
  %1302 = load double, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  ret double %1302
}

; 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 double @d_imag(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 = { 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 = distinct !{!17, !14}
!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}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !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 [6 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local double @zla_herpvgrw__(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr nocapture noundef readonly %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readonly %7, ptr noundef %8, i64 noundef %9) local_unnamed_addr #0 {
  %11 = load i64, ptr %4, align 8, !tbaa !5
  %12 = xor i64 %11, -1
  %13 = getelementptr inbounds %struct.doublecomplex, ptr %3, i64 %12
  %14 = load i64, ptr %6, align 8, !tbaa !5
  %15 = xor i64 %14, -1
  %16 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %15
  %17 = getelementptr inbounds i8, ptr %7, i64 -8
  %18 = getelementptr inbounds i8, ptr %8, i64 -8
  %19 = tail call i64 @lsame_(ptr noundef nonnull @.str, ptr noundef %0) #3
  %20 = load i64, ptr %2, align 8, !tbaa !5
  %21 = icmp eq i64 %20, 0
  br i1 %21, label %22, label %._crit_edge665

._crit_edge665:                                   ; preds = %10
  %.pre = load i64, ptr %1, align 8, !tbaa !5
  br label %23

22:                                               ; preds = %10
  %.not = icmp eq i64 %19, 0
  %.pre666 = load i64, ptr %1, align 8, !tbaa !5
  %spec.select = select i1 %.not, i64 %.pre666, i64 1
  br label %23

23:                                               ; preds = %22, %._crit_edge665
  %24 = phi i64 [ %.pre, %._crit_edge665 ], [ %.pre666, %22 ]
  %.0532 = phi i64 [ %20, %._crit_edge665 ], [ %spec.select, %22 ]
  %25 = shl i64 %24, 1
  %.not561590 = icmp slt i64 %25, 1
  br i1 %.not561590, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %23
  %26 = shl i64 %24, 4
  tail call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 %26, i1 false), !tbaa !9
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %23
  %.not562 = icmp eq i64 %19, 0
  %.not563606 = icmp slt i64 %24, 1
  br i1 %.not562, label %.preheader585, label %.preheader588

.preheader588:                                    ; preds = %._crit_edge
  br i1 %.not563606, label %.preheader583, label %.preheader587.preheader

.preheader587.preheader:                          ; preds = %.preheader588
  %27 = add nuw i64 %24, 1
  br label %.preheader587

.preheader585:                                    ; preds = %._crit_edge
  br i1 %.not563606, label %.preheader582, label %.lr.ph608

.preheader587:                                    ; preds = %.preheader587.preheader, %59
  %indvars.iv = phi i64 [ 2, %.preheader587.preheader ], [ %indvars.iv.next, %59 ]
  %.0538596 = phi i64 [ 1, %.preheader587.preheader ], [ %60, %59 ]
  %28 = mul nsw i64 %.0538596, %11
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %13, i64 %28
  %invariant.gep592 = getelementptr double, ptr %18, i64 %.0538596
  br label %29

29:                                               ; preds = %.preheader587, %29
  %.1541594 = phi i64 [ 1, %.preheader587 ], [ %58, %29 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.1541594
  %30 = load double, ptr %gep, align 8, !tbaa !11
  %31 = tail call double @d_imag(ptr noundef nonnull %gep) #3
  %32 = insertelement <2 x double> poison, double %30, i64 0
  %33 = insertelement <2 x double> %32, double %31, i64 1
  %34 = fcmp oge <2 x double> %33, zeroinitializer
  %35 = fneg <2 x double> %33
  %36 = select <2 x i1> %34, <2 x double> %33, <2 x double> %35
  %shift = shufflevector <2 x double> %36, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %37 = fadd <2 x double> %36, %shift
  %38 = extractelement <2 x double> %37, i64 0
  %39 = load i64, ptr %1, align 8, !tbaa !5
  %40 = getelementptr double, ptr %18, i64 %39
  %41 = getelementptr double, ptr %40, i64 %.1541594
  %42 = load double, ptr %41, align 8, !tbaa !9
  %43 = fcmp oge double %38, %42
  %44 = select i1 %43, double %38, double %42
  store double %44, ptr %41, align 8, !tbaa !9
  %45 = load double, ptr %gep, align 8, !tbaa !11
  %46 = tail call double @d_imag(ptr noundef nonnull %gep) #3
  %47 = insertelement <2 x double> poison, double %45, i64 0
  %48 = insertelement <2 x double> %47, double %46, i64 1
  %49 = fcmp oge <2 x double> %48, zeroinitializer
  %50 = fneg <2 x double> %48
  %51 = select <2 x i1> %49, <2 x double> %48, <2 x double> %50
  %shift684 = shufflevector <2 x double> %51, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %52 = fadd <2 x double> %51, %shift684
  %53 = extractelement <2 x double> %52, i64 0
  %54 = load i64, ptr %1, align 8, !tbaa !5
  %gep593 = getelementptr double, ptr %invariant.gep592, i64 %54
  %55 = load double, ptr %gep593, align 8, !tbaa !9
  %56 = fcmp oge double %53, %55
  %57 = select i1 %56, double %53, double %55
  store double %57, ptr %gep593, align 8, !tbaa !9
  %58 = add nuw i64 %.1541594, 1
  %exitcond.not = icmp eq i64 %58, %indvars.iv
  br i1 %exitcond.not, label %59, label %29, !llvm.loop !13

59:                                               ; preds = %29
  %60 = add nuw nsw i64 %.0538596, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond657.not = icmp eq i64 %indvars.iv, %27
  br i1 %exitcond657.not, label %.loopexit586, label %.preheader587, !llvm.loop !15

.lr.ph608:                                        ; preds = %.preheader585, %._crit_edge603
  %61 = phi i64 [ %93, %._crit_edge603 ], [ %24, %.preheader585 ]
  %.1539607 = phi i64 [ %94, %._crit_edge603 ], [ 1, %.preheader585 ]
  %invariant.gep597 = getelementptr double, ptr %18, i64 %.1539607
  %.not564599 = icmp sgt i64 %.1539607, %61
  br i1 %.not564599, label %._crit_edge603, label %.lr.ph602

.lr.ph602:                                        ; preds = %.lr.ph608
  %62 = mul nsw i64 %.1539607, %11
  %invariant.gep604 = getelementptr %struct.doublecomplex, ptr %13, i64 %62
  br label %63

63:                                               ; preds = %.lr.ph602, %63
  %.2542600 = phi i64 [ %.1539607, %.lr.ph602 ], [ %92, %63 ]
  %gep605 = getelementptr %struct.doublecomplex, ptr %invariant.gep604, i64 %.2542600
  %64 = load double, ptr %gep605, align 8, !tbaa !11
  %65 = tail call double @d_imag(ptr noundef nonnull %gep605) #3
  %66 = insertelement <2 x double> poison, double %64, i64 0
  %67 = insertelement <2 x double> %66, double %65, i64 1
  %68 = fcmp oge <2 x double> %67, zeroinitializer
  %69 = fneg <2 x double> %67
  %70 = select <2 x i1> %68, <2 x double> %67, <2 x double> %69
  %shift685 = shufflevector <2 x double> %70, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %71 = fadd <2 x double> %70, %shift685
  %72 = extractelement <2 x double> %71, i64 0
  %73 = load i64, ptr %1, align 8, !tbaa !5
  %74 = getelementptr double, ptr %18, i64 %73
  %75 = getelementptr double, ptr %74, i64 %.2542600
  %76 = load double, ptr %75, align 8, !tbaa !9
  %77 = fcmp oge double %72, %76
  %78 = select i1 %77, double %72, double %76
  store double %78, ptr %75, align 8, !tbaa !9
  %79 = load double, ptr %gep605, align 8, !tbaa !11
  %80 = tail call double @d_imag(ptr noundef nonnull %gep605) #3
  %81 = insertelement <2 x double> poison, double %79, i64 0
  %82 = insertelement <2 x double> %81, double %80, i64 1
  %83 = fcmp oge <2 x double> %82, zeroinitializer
  %84 = fneg <2 x double> %82
  %85 = select <2 x i1> %83, <2 x double> %82, <2 x double> %84
  %shift686 = shufflevector <2 x double> %85, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %86 = fadd <2 x double> %85, %shift686
  %87 = extractelement <2 x double> %86, i64 0
  %88 = load i64, ptr %1, align 8, !tbaa !5
  %gep598 = getelementptr double, ptr %invariant.gep597, i64 %88
  %89 = load double, ptr %gep598, align 8, !tbaa !9
  %90 = fcmp oge double %87, %89
  %91 = select i1 %90, double %87, double %89
  store double %91, ptr %gep598, align 8, !tbaa !9
  %92 = add nuw nsw i64 %.2542600, 1
  %.not564.not = icmp slt i64 %.2542600, %61
  br i1 %.not564.not, label %63, label %._crit_edge603, !llvm.loop !16

._crit_edge603:                                   ; preds = %63, %.lr.ph608
  %93 = phi i64 [ %61, %.lr.ph608 ], [ %88, %63 ]
  %94 = add nuw i64 %.1539607, 1
  %exitcond658.not = icmp eq i64 %.1539607, %24
  br i1 %exitcond658.not, label %.loopexit586, label %.lr.ph608, !llvm.loop !17

.loopexit586:                                     ; preds = %59, %._crit_edge603
  %95 = phi i64 [ %93, %._crit_edge603 ], [ %54, %59 ]
  br i1 %.not562, label %.preheader582, label %97

.preheader582:                                    ; preds = %.preheader585, %.loopexit586
  %.not566639 = icmp slt i64 %.0532, 1
  br i1 %.not566639, label %.loopexit, label %.lr.ph641

.lr.ph641:                                        ; preds = %.preheader582
  %96 = add i64 %14, 1
  br label %212

97:                                               ; preds = %.loopexit586
  %98 = icmp slt i64 %95, %.0532
  %99 = icmp sgt i64 %95, 0
  %100 = and i1 %98, %99
  br i1 %100, label %.lr.ph623, label %.preheader583

.lr.ph623:                                        ; preds = %97
  %101 = add i64 %14, 1
  br label %104

.preheader583.loopexit:                           ; preds = %._crit_edge618
  %.pre667 = load i64, ptr %1, align 8, !tbaa !5
  br label %.preheader583

.preheader583:                                    ; preds = %.preheader588, %.preheader583.loopexit, %97
  %102 = phi i64 [ %.pre667, %.preheader583.loopexit ], [ %95, %97 ], [ %24, %.preheader588 ]
  %.not571624 = icmp sgt i64 %.0532, %102
  br i1 %.not571624, label %.loopexit581, label %.lr.ph626

.lr.ph626:                                        ; preds = %.preheader583
  %103 = getelementptr double, ptr %18, i64 %102
  br label %194

104:                                              ; preds = %.lr.ph623, %._crit_edge618
  %.0533621 = phi i64 [ %95, %.lr.ph623 ], [ %190, %._crit_edge618 ]
  %105 = getelementptr inbounds i64, ptr %17, i64 %.0533621
  %106 = load i64, ptr %105, align 8, !tbaa !5
  %107 = icmp sgt i64 %106, 0
  br i1 %107, label %108, label %132

108:                                              ; preds = %104
  %.not576 = icmp eq i64 %106, %.0533621
  br i1 %.not576, label %.lr.ph617, label %109

109:                                              ; preds = %108
  %110 = load i64, ptr %1, align 8, !tbaa !5
  %111 = getelementptr double, ptr %18, i64 %110
  %112 = getelementptr double, ptr %111, i64 %.0533621
  %113 = load double, ptr %112, align 8, !tbaa !9
  %114 = getelementptr double, ptr %111, i64 %106
  %115 = load double, ptr %114, align 8, !tbaa !9
  store double %115, ptr %112, align 8, !tbaa !9
  store double %113, ptr %114, align 8, !tbaa !9
  br label %.lr.ph617

.lr.ph617:                                        ; preds = %108, %109
  %116 = mul nsw i64 %.0533621, %14
  %invariant.gep619 = getelementptr %struct.doublecomplex, ptr %16, i64 %116
  %117 = getelementptr inbounds double, ptr %18, i64 %.0533621
  br label %118

118:                                              ; preds = %.lr.ph617, %118
  %.3543615 = phi i64 [ 1, %.lr.ph617 ], [ %131, %118 ]
  %gep620 = getelementptr %struct.doublecomplex, ptr %invariant.gep619, i64 %.3543615
  %119 = load double, ptr %gep620, align 8, !tbaa !11
  %120 = tail call double @d_imag(ptr noundef nonnull %gep620) #3
  %121 = insertelement <2 x double> poison, double %119, i64 0
  %122 = insertelement <2 x double> %121, double %120, i64 1
  %123 = fcmp oge <2 x double> %122, zeroinitializer
  %124 = fneg <2 x double> %122
  %125 = select <2 x i1> %123, <2 x double> %122, <2 x double> %124
  %shift687 = shufflevector <2 x double> %125, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %126 = fadd <2 x double> %125, %shift687
  %127 = extractelement <2 x double> %126, i64 0
  %128 = load double, ptr %117, align 8, !tbaa !9
  %129 = fcmp oge double %127, %128
  %130 = select i1 %129, double %127, double %128
  store double %130, ptr %117, align 8, !tbaa !9
  %131 = add nuw i64 %.3543615, 1
  %exitcond660.not = icmp eq i64 %.3543615, %.0533621
  br i1 %exitcond660.not, label %._crit_edge618, label %118, !llvm.loop !18

132:                                              ; preds = %104
  %133 = load i64, ptr %1, align 8, !tbaa !5
  %134 = getelementptr double, ptr %18, i64 %133
  %135 = getelementptr double, ptr %134, i64 %.0533621
  %136 = getelementptr i8, ptr %135, i64 -8
  %137 = load double, ptr %136, align 8, !tbaa !9
  %138 = sub i64 %133, %106
  %139 = getelementptr inbounds double, ptr %18, i64 %138
  %140 = load double, ptr %139, align 8, !tbaa !9
  store double %140, ptr %136, align 8, !tbaa !9
  store double %137, ptr %139, align 8, !tbaa !9
  %.not575.not609 = icmp sgt i64 %.0533621, 1
  br i1 %.not575.not609, label %.lr.ph612, label %._crit_edge613

.lr.ph612:                                        ; preds = %132
  %141 = add nsw i64 %.0533621, -1
  %142 = mul nsw i64 %.0533621, %14
  %143 = getelementptr inbounds double, ptr %18, i64 %.0533621
  %144 = mul nsw i64 %141, %14
  %145 = getelementptr inbounds double, ptr %18, i64 %141
  br label %146

146:                                              ; preds = %.lr.ph612, %146
  %.4544610 = phi i64 [ 1, %.lr.ph612 ], [ %174, %146 ]
  %147 = getelementptr %struct.doublecomplex, ptr %16, i64 %.4544610
  %148 = getelementptr %struct.doublecomplex, ptr %147, i64 %142
  %149 = load double, ptr %148, align 8, !tbaa !11
  %150 = tail call double @d_imag(ptr noundef nonnull %148) #3
  %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
  %shift688 = shufflevector <2 x double> %155, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %156 = fadd <2 x double> %155, %shift688
  %157 = extractelement <2 x double> %156, i64 0
  %158 = load double, ptr %143, align 8, !tbaa !9
  %159 = fcmp oge double %157, %158
  %160 = select i1 %159, double %157, double %158
  store double %160, ptr %143, align 8, !tbaa !9
  %161 = getelementptr %struct.doublecomplex, ptr %147, i64 %144
  %162 = load double, ptr %161, align 8, !tbaa !11
  %163 = tail call double @d_imag(ptr noundef nonnull %161) #3
  %164 = insertelement <2 x double> poison, double %162, i64 0
  %165 = insertelement <2 x double> %164, double %163, i64 1
  %166 = fcmp oge <2 x double> %165, zeroinitializer
  %167 = fneg <2 x double> %165
  %168 = select <2 x i1> %166, <2 x double> %165, <2 x double> %167
  %shift689 = shufflevector <2 x double> %168, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %169 = fadd <2 x double> %168, %shift689
  %170 = extractelement <2 x double> %169, i64 0
  %171 = load double, ptr %145, align 8, !tbaa !9
  %172 = fcmp oge double %170, %171
  %173 = select i1 %172, double %170, double %171
  store double %173, ptr %145, align 8, !tbaa !9
  %174 = add nuw nsw i64 %.4544610, 1
  %exitcond659.not = icmp eq i64 %174, %.0533621
  br i1 %exitcond659.not, label %._crit_edge613, label %146, !llvm.loop !19

._crit_edge613:                                   ; preds = %146, %132
  %175 = mul i64 %.0533621, %101
  %176 = getelementptr inbounds %struct.doublecomplex, ptr %16, i64 %175
  %177 = load double, ptr %176, align 8, !tbaa !11
  %178 = tail call double @d_imag(ptr noundef nonnull %176) #3
  %179 = insertelement <2 x double> poison, double %177, i64 0
  %180 = insertelement <2 x double> %179, double %178, i64 1
  %181 = fcmp oge <2 x double> %180, zeroinitializer
  %182 = fneg <2 x double> %180
  %183 = select <2 x i1> %181, <2 x double> %180, <2 x double> %182
  %shift690 = shufflevector <2 x double> %183, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %184 = fadd <2 x double> %183, %shift690
  %185 = extractelement <2 x double> %184, i64 0
  %186 = getelementptr inbounds double, ptr %18, i64 %.0533621
  %187 = load double, ptr %186, align 8, !tbaa !9
  %188 = fcmp oge double %185, %187
  %189 = select i1 %188, double %185, double %187
  store double %189, ptr %186, align 8, !tbaa !9
  br label %._crit_edge618

._crit_edge618:                                   ; preds = %118, %._crit_edge613
  %.sink = phi i64 [ -2, %._crit_edge613 ], [ -1, %118 ]
  %190 = add nsw i64 %.0533621, %.sink
  %191 = icmp slt i64 %190, %.0532
  %192 = icmp sgt i64 %190, 0
  %193 = and i1 %191, %192
  br i1 %193, label %104, label %.preheader583.loopexit, !llvm.loop !20

194:                                              ; preds = %.lr.ph626, %210
  %.2535625 = phi i64 [ %.0532, %.lr.ph626 ], [ %211, %210 ]
  %195 = getelementptr inbounds i64, ptr %17, i64 %.2535625
  %196 = load i64, ptr %195, align 8, !tbaa !5
  %197 = icmp sgt i64 %196, 0
  br i1 %197, label %198, label %204

198:                                              ; preds = %194
  %.not574 = icmp eq i64 %196, %.2535625
  br i1 %.not574, label %210, label %199

199:                                              ; preds = %198
  %200 = getelementptr double, ptr %103, i64 %.2535625
  %201 = load double, ptr %200, align 8, !tbaa !9
  %202 = getelementptr double, ptr %103, i64 %196
  %203 = load double, ptr %202, align 8, !tbaa !9
  store double %203, ptr %200, align 8, !tbaa !9
  store double %201, ptr %202, align 8, !tbaa !9
  br label %210

204:                                              ; preds = %194
  %205 = getelementptr double, ptr %103, i64 %.2535625
  %206 = load double, ptr %205, align 8, !tbaa !9
  %207 = sub i64 %102, %196
  %208 = getelementptr inbounds double, ptr %18, i64 %207
  %209 = load double, ptr %208, align 8, !tbaa !9
  store double %209, ptr %205, align 8, !tbaa !9
  store double %206, ptr %208, align 8, !tbaa !9
  br label %210

210:                                              ; preds = %198, %199, %204
  %.sink676 = phi i64 [ 2, %204 ], [ 1, %199 ], [ 1, %198 ]
  %211 = add nsw i64 %.2535625, %.sink676
  %.not571 = icmp sgt i64 %211, %102
  br i1 %.not571, label %.loopexit581, label %194, !llvm.loop !21

212:                                              ; preds = %.lr.ph641, %._crit_edge636
  %.4537640 = phi i64 [ 1, %.lr.ph641 ], [ %297, %._crit_edge636 ]
  %213 = getelementptr inbounds i64, ptr %17, i64 %.4537640
  %214 = load i64, ptr %213, align 8, !tbaa !5
  %215 = icmp sgt i64 %214, 0
  br i1 %215, label %216, label %240

216:                                              ; preds = %212
  %.not569 = icmp eq i64 %214, %.4537640
  %.pre668 = load i64, ptr %1, align 8, !tbaa !5
  br i1 %.not569, label %223, label %217

217:                                              ; preds = %216
  %218 = getelementptr double, ptr %18, i64 %.pre668
  %219 = getelementptr double, ptr %218, i64 %.4537640
  %220 = load double, ptr %219, align 8, !tbaa !9
  %221 = getelementptr double, ptr %218, i64 %214
  %222 = load double, ptr %221, align 8, !tbaa !9
  store double %222, ptr %219, align 8, !tbaa !9
  store double %220, ptr %221, align 8, !tbaa !9
  br label %223

223:                                              ; preds = %217, %216
  %.not570632 = icmp sgt i64 %.4537640, %.pre668
  br i1 %.not570632, label %._crit_edge636, label %.lr.ph635

.lr.ph635:                                        ; preds = %223
  %224 = mul nsw i64 %.4537640, %14
  %invariant.gep637 = getelementptr %struct.doublecomplex, ptr %16, i64 %224
  %225 = getelementptr inbounds double, ptr %18, i64 %.4537640
  br label %226

226:                                              ; preds = %.lr.ph635, %226
  %.5545633 = phi i64 [ %.4537640, %.lr.ph635 ], [ %239, %226 ]
  %gep638 = getelementptr %struct.doublecomplex, ptr %invariant.gep637, i64 %.5545633
  %227 = load double, ptr %gep638, align 8, !tbaa !11
  %228 = tail call double @d_imag(ptr noundef nonnull %gep638) #3
  %229 = insertelement <2 x double> poison, double %227, i64 0
  %230 = insertelement <2 x double> %229, double %228, i64 1
  %231 = fcmp oge <2 x double> %230, zeroinitializer
  %232 = fneg <2 x double> %230
  %233 = select <2 x i1> %231, <2 x double> %230, <2 x double> %232
  %shift691 = shufflevector <2 x double> %233, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %234 = fadd <2 x double> %233, %shift691
  %235 = extractelement <2 x double> %234, i64 0
  %236 = load double, ptr %225, align 8, !tbaa !9
  %237 = fcmp oge double %235, %236
  %238 = select i1 %237, double %235, double %236
  store double %238, ptr %225, align 8, !tbaa !9
  %239 = add i64 %.5545633, 1
  %exitcond662.not = icmp eq i64 %.5545633, %.pre668
  br i1 %exitcond662.not, label %._crit_edge636, label %226, !llvm.loop !22

240:                                              ; preds = %212
  %241 = load i64, ptr %1, align 8, !tbaa !5
  %242 = getelementptr double, ptr %8, i64 %241
  %243 = getelementptr double, ptr %242, i64 %.4537640
  %244 = load double, ptr %243, align 8, !tbaa !9
  %245 = sub i64 %241, %214
  %246 = getelementptr inbounds double, ptr %18, i64 %245
  %247 = load double, ptr %246, align 8, !tbaa !9
  store double %247, ptr %243, align 8, !tbaa !9
  store double %244, ptr %246, align 8, !tbaa !9
  %.not568627.not = icmp slt i64 %.4537640, %241
  br i1 %.not568627.not, label %.lr.ph630, label %._crit_edge631

.lr.ph630:                                        ; preds = %240
  %248 = add nuw nsw i64 %.4537640, 1
  %249 = mul nsw i64 %.4537640, %14
  %250 = getelementptr inbounds double, ptr %18, i64 %.4537640
  %251 = mul nsw i64 %248, %14
  %252 = getelementptr double, ptr %8, i64 %.4537640
  br label %253

253:                                              ; preds = %.lr.ph630, %253
  %.6546628 = phi i64 [ %248, %.lr.ph630 ], [ %281, %253 ]
  %254 = getelementptr %struct.doublecomplex, ptr %16, i64 %.6546628
  %255 = getelementptr %struct.doublecomplex, ptr %254, i64 %249
  %256 = load double, ptr %255, align 8, !tbaa !11
  %257 = tail call double @d_imag(ptr noundef nonnull %255) #3
  %258 = insertelement <2 x double> poison, double %256, i64 0
  %259 = insertelement <2 x double> %258, double %257, i64 1
  %260 = fcmp oge <2 x double> %259, zeroinitializer
  %261 = fneg <2 x double> %259
  %262 = select <2 x i1> %260, <2 x double> %259, <2 x double> %261
  %shift692 = shufflevector <2 x double> %262, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %263 = fadd <2 x double> %262, %shift692
  %264 = extractelement <2 x double> %263, i64 0
  %265 = load double, ptr %250, align 8, !tbaa !9
  %266 = fcmp oge double %264, %265
  %267 = select i1 %266, double %264, double %265
  store double %267, ptr %250, align 8, !tbaa !9
  %268 = getelementptr %struct.doublecomplex, ptr %254, i64 %251
  %269 = load double, ptr %268, align 8, !tbaa !11
  %270 = tail call double @d_imag(ptr noundef nonnull %268) #3
  %271 = insertelement <2 x double> poison, double %269, i64 0
  %272 = insertelement <2 x double> %271, double %270, i64 1
  %273 = fcmp oge <2 x double> %272, zeroinitializer
  %274 = fneg <2 x double> %272
  %275 = select <2 x i1> %273, <2 x double> %272, <2 x double> %274
  %shift693 = shufflevector <2 x double> %275, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %276 = fadd <2 x double> %275, %shift693
  %277 = extractelement <2 x double> %276, i64 0
  %278 = load double, ptr %252, align 8, !tbaa !9
  %279 = fcmp oge double %277, %278
  %280 = select i1 %279, double %277, double %278
  store double %280, ptr %252, align 8, !tbaa !9
  %281 = add i64 %.6546628, 1
  %exitcond661.not = icmp eq i64 %.6546628, %241
  br i1 %exitcond661.not, label %._crit_edge631, label %253, !llvm.loop !23

._crit_edge631:                                   ; preds = %253, %240
  %282 = mul i64 %.4537640, %96
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %16, i64 %282
  %284 = load double, ptr %283, align 8, !tbaa !11
  %285 = tail call double @d_imag(ptr noundef nonnull %283) #3
  %286 = insertelement <2 x double> poison, double %284, i64 0
  %287 = insertelement <2 x double> %286, double %285, i64 1
  %288 = fcmp oge <2 x double> %287, zeroinitializer
  %289 = fneg <2 x double> %287
  %290 = select <2 x i1> %288, <2 x double> %287, <2 x double> %289
  %shift694 = shufflevector <2 x double> %290, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %291 = fadd <2 x double> %290, %shift694
  %292 = extractelement <2 x double> %291, i64 0
  %293 = getelementptr inbounds double, ptr %18, i64 %.4537640
  %294 = load double, ptr %293, align 8, !tbaa !9
  %295 = fcmp oge double %292, %294
  %296 = select i1 %295, double %292, double %294
  store double %296, ptr %293, align 8, !tbaa !9
  br label %._crit_edge636

._crit_edge636:                                   ; preds = %226, %223, %._crit_edge631
  %.sink677 = phi i64 [ 2, %._crit_edge631 ], [ 1, %223 ], [ 1, %226 ]
  %297 = add nuw nsw i64 %.4537640, %.sink677
  %.not566 = icmp sgt i64 %297, %.0532
  br i1 %.not566, label %.lr.ph643, label %212, !llvm.loop !24

.lr.ph643:                                        ; preds = %._crit_edge636, %317
  %.6642 = phi i64 [ %318, %317 ], [ %.0532, %._crit_edge636 ]
  %298 = getelementptr inbounds i64, ptr %17, i64 %.6642
  %299 = load i64, ptr %298, align 8, !tbaa !5
  %300 = icmp sgt i64 %299, 0
  br i1 %300, label %301, label %309

301:                                              ; preds = %.lr.ph643
  %.not567 = icmp eq i64 %299, %.6642
  br i1 %.not567, label %317, label %302

302:                                              ; preds = %301
  %303 = load i64, ptr %1, align 8, !tbaa !5
  %304 = getelementptr double, ptr %18, i64 %303
  %305 = getelementptr double, ptr %304, i64 %.6642
  %306 = load double, ptr %305, align 8, !tbaa !9
  %307 = getelementptr double, ptr %304, i64 %299
  %308 = load double, ptr %307, align 8, !tbaa !9
  store double %308, ptr %305, align 8, !tbaa !9
  store double %306, ptr %307, align 8, !tbaa !9
  br label %317

309:                                              ; preds = %.lr.ph643
  %310 = load i64, ptr %1, align 8, !tbaa !5
  %311 = getelementptr double, ptr %18, i64 %310
  %312 = getelementptr double, ptr %311, i64 %.6642
  %313 = load double, ptr %312, align 8, !tbaa !9
  %314 = sub i64 %310, %299
  %315 = getelementptr inbounds double, ptr %18, i64 %314
  %316 = load double, ptr %315, align 8, !tbaa !9
  store double %316, ptr %312, align 8, !tbaa !9
  store double %313, ptr %315, align 8, !tbaa !9
  br label %317

317:                                              ; preds = %301, %302, %309
  %.sink678 = phi i64 [ -2, %309 ], [ -1, %302 ], [ -1, %301 ]
  %318 = add nsw i64 %.6642, %.sink678
  %319 = icmp sgt i64 %318, 0
  br i1 %319, label %.lr.ph643, label %.loopexit581, !llvm.loop !25

.loopexit581:                                     ; preds = %210, %317, %.preheader583
  br i1 %.not562, label %.preheader, label %321

.preheader:                                       ; preds = %.loopexit581
  %.not572649 = icmp slt i64 %.0532, 1
  br i1 %.not572649, label %.loopexit, label %.lr.ph652.preheader

.lr.ph652.preheader:                              ; preds = %.preheader
  %xtraiter700 = and i64 %.0532, 1
  %320 = icmp eq i64 %.0532, 1
  br i1 %320, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph652.preheader.new

.lr.ph652.preheader.new:                          ; preds = %.lr.ph652.preheader
  %unroll_iter = and i64 %.0532, 9223372036854775806
  br label %.lr.ph652

321:                                              ; preds = %.loopexit581
  %322 = load i64, ptr %1, align 8, !tbaa !5
  %.not573644 = icmp sgt i64 %.0532, %322
  br i1 %.not573644, label %.loopexit, label %.lr.ph648

.lr.ph648:                                        ; preds = %321
  %323 = getelementptr double, ptr %18, i64 %322
  %324 = add i64 %322, %.0532
  %325 = and i64 %324, 1
  %lcmp.mod.not.not = icmp eq i64 %325, 0
  br i1 %lcmp.mod.not.not, label %.prol.preheader, label %.prol.loopexit

.prol.preheader:                                  ; preds = %.lr.ph648
  %326 = getelementptr inbounds double, ptr %18, i64 %.0532
  %327 = load double, ptr %326, align 8, !tbaa !9
  %328 = fcmp une double %327, 0.000000e+00
  br i1 %328, label %329, label %.prol.loopexit.unr-lcssa

329:                                              ; preds = %.prol.preheader
  %330 = getelementptr double, ptr %323, i64 %.0532
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = fdiv double %331, %327
  %333 = fcmp ole double %332, 1.000000e+00
  %334 = select i1 %333, double %332, double 1.000000e+00
  br label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %329, %.prol.preheader
  %.1.prol = phi double [ %334, %329 ], [ 1.000000e+00, %.prol.preheader ]
  %335 = add i64 %.0532, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph648
  %.1.lcssa.unr = phi double [ poison, %.lr.ph648 ], [ %.1.prol, %.prol.loopexit.unr-lcssa ]
  %.0646.unr = phi double [ 1.000000e+00, %.lr.ph648 ], [ %.1.prol, %.prol.loopexit.unr-lcssa ]
  %.7547645.unr = phi i64 [ %.0532, %.lr.ph648 ], [ %335, %.prol.loopexit.unr-lcssa ]
  %336 = icmp eq i64 %322, %.0532
  br i1 %336, label %.loopexit, label %.lr.ph648.new

.lr.ph648.new:                                    ; preds = %.prol.loopexit, %357
  %.0646 = phi double [ %.1.1, %357 ], [ %.0646.unr, %.prol.loopexit ]
  %.7547645 = phi i64 [ %358, %357 ], [ %.7547645.unr, %.prol.loopexit ]
  %337 = getelementptr inbounds double, ptr %18, i64 %.7547645
  %338 = load double, ptr %337, align 8, !tbaa !9
  %339 = fcmp une double %338, 0.000000e+00
  br i1 %339, label %340, label %346

340:                                              ; preds = %.lr.ph648.new
  %341 = getelementptr double, ptr %323, i64 %.7547645
  %342 = load double, ptr %341, align 8, !tbaa !9
  %343 = fdiv double %342, %338
  %344 = fcmp ole double %343, %.0646
  %345 = select i1 %344, double %343, double %.0646
  br label %346

346:                                              ; preds = %.lr.ph648.new, %340
  %.1 = phi double [ %345, %340 ], [ %.0646, %.lr.ph648.new ]
  %347 = add i64 %.7547645, 1
  %348 = getelementptr double, ptr %8, i64 %.7547645
  %349 = load double, ptr %348, align 8, !tbaa !9
  %350 = fcmp une double %349, 0.000000e+00
  br i1 %350, label %351, label %357

351:                                              ; preds = %346
  %352 = getelementptr double, ptr %323, i64 %347
  %353 = load double, ptr %352, align 8, !tbaa !9
  %354 = fdiv double %353, %349
  %355 = fcmp ole double %354, %.1
  %356 = select i1 %355, double %354, double %.1
  br label %357

357:                                              ; preds = %351, %346
  %.1.1 = phi double [ %356, %351 ], [ %.1, %346 ]
  %358 = add i64 %.7547645, 2
  %exitcond663.not.1 = icmp eq i64 %347, %322
  br i1 %exitcond663.not.1, label %.loopexit, label %.lr.ph648.new, !llvm.loop !26

.lr.ph652:                                        ; preds = %382, %.lr.ph652.preheader.new
  %.2651 = phi double [ 1.000000e+00, %.lr.ph652.preheader.new ], [ %.3.1, %382 ]
  %.8650 = phi i64 [ 1, %.lr.ph652.preheader.new ], [ %383, %382 ]
  %niter = phi i64 [ 0, %.lr.ph652.preheader.new ], [ %niter.next.1, %382 ]
  %359 = getelementptr inbounds double, ptr %18, i64 %.8650
  %360 = load double, ptr %359, align 8, !tbaa !9
  %361 = fcmp une double %360, 0.000000e+00
  br i1 %361, label %362, label %.lr.ph652.1

362:                                              ; preds = %.lr.ph652
  %363 = load i64, ptr %1, align 8, !tbaa !5
  %364 = getelementptr double, ptr %18, i64 %363
  %365 = getelementptr double, ptr %364, i64 %.8650
  %366 = load double, ptr %365, align 8, !tbaa !9
  %367 = fdiv double %366, %360
  %368 = fcmp ole double %367, %.2651
  %369 = select i1 %368, double %367, double %.2651
  br label %.lr.ph652.1

.lr.ph652.1:                                      ; preds = %.lr.ph652, %362
  %.3 = phi double [ %369, %362 ], [ %.2651, %.lr.ph652 ]
  %370 = getelementptr double, ptr %8, i64 %.8650
  %371 = load double, ptr %370, align 8, !tbaa !9
  %372 = fcmp une double %371, 0.000000e+00
  br i1 %372, label %373, label %382

373:                                              ; preds = %.lr.ph652.1
  %374 = load i64, ptr %1, align 8, !tbaa !5
  %375 = getelementptr double, ptr %18, i64 %374
  %376 = getelementptr double, ptr %375, i64 %.8650
  %377 = getelementptr i8, ptr %376, i64 8
  %378 = load double, ptr %377, align 8, !tbaa !9
  %379 = fdiv double %378, %371
  %380 = fcmp ole double %379, %.3
  %381 = select i1 %380, double %379, double %.3
  br label %382

382:                                              ; preds = %373, %.lr.ph652.1
  %.3.1 = phi double [ %381, %373 ], [ %.3, %.lr.ph652.1 ]
  %383 = add nuw i64 %.8650, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph652, !llvm.loop !27

.loopexit.loopexit.unr-lcssa:                     ; preds = %382, %.lr.ph652.preheader
  %.3.lcssa.ph = phi double [ poison, %.lr.ph652.preheader ], [ %.3.1, %382 ]
  %.2651.unr = phi double [ 1.000000e+00, %.lr.ph652.preheader ], [ %.3.1, %382 ]
  %.8650.unr = phi i64 [ 1, %.lr.ph652.preheader ], [ %383, %382 ]
  %lcmp.mod701.not = icmp eq i64 %xtraiter700, 0
  br i1 %lcmp.mod701.not, label %.loopexit, label %.lr.ph652.epil

.lr.ph652.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa
  %384 = getelementptr inbounds double, ptr %18, i64 %.8650.unr
  %385 = load double, ptr %384, align 8, !tbaa !9
  %386 = fcmp une double %385, 0.000000e+00
  br i1 %386, label %387, label %.loopexit

387:                                              ; preds = %.lr.ph652.epil
  %388 = load i64, ptr %1, align 8, !tbaa !5
  %389 = getelementptr double, ptr %18, i64 %388
  %390 = getelementptr double, ptr %389, i64 %.8650.unr
  %391 = load double, ptr %390, align 8, !tbaa !9
  %392 = fdiv double %391, %385
  %393 = fcmp ole double %392, %.2651.unr
  %394 = select i1 %393, double %392, double %.2651.unr
  br label %.loopexit

.loopexit:                                        ; preds = %.prol.loopexit, %357, %.loopexit.loopexit.unr-lcssa, %387, %.lr.ph652.epil, %.preheader582, %321, %.preheader
  %.4 = phi double [ 1.000000e+00, %.preheader ], [ 1.000000e+00, %321 ], [ 1.000000e+00, %.preheader582 ], [ %.3.lcssa.ph, %.loopexit.loopexit.unr-lcssa ], [ %394, %387 ], [ %.2651.unr, %.lr.ph652.epil ], [ %.1.lcssa.unr, %.prol.loopexit ], [ %.1.1, %357 ]
  ret double %.4
}

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

declare double @d_imag(ptr noundef) local_unnamed_addr #1

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

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 = { "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 #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !10, i64 8}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!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}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}


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