; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (zpprfs)

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

%struct.doublecomplex = type { double, double }

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

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

98:                                               ; preds = %14
  %99 = load ptr, ptr %15, align 8, !tbaa !5
  %100 = call i32 @lsame_(ptr noundef %99, ptr noundef @.str.1)
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %104, label %102

102:                                              ; preds = %98
  %103 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -1, ptr %103, align 4, !tbaa !9
  br label %150

104:                                              ; preds = %98, %14
  %105 = load ptr, ptr %16, align 8, !tbaa !5
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %108, label %110

108:                                              ; preds = %104
  %109 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -2, ptr %109, align 4, !tbaa !9
  br label %149

110:                                              ; preds = %104
  %111 = load ptr, ptr %17, align 8, !tbaa !5
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = icmp slt i32 %112, 0
  br i1 %113, label %114, label %116

114:                                              ; preds = %110
  %115 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -3, ptr %115, align 4, !tbaa !9
  br label %148

116:                                              ; preds = %110
  %117 = load ptr, ptr %21, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = load ptr, ptr %16, align 8, !tbaa !5
  %120 = load i32, ptr %119, align 4, !tbaa !9
  %121 = icmp sge i32 1, %120
  br i1 %121, label %122, label %123

122:                                              ; preds = %116
  br label %126

123:                                              ; preds = %116
  %124 = load ptr, ptr %16, align 8, !tbaa !5
  %125 = load i32, ptr %124, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %123, %122
  %127 = phi i32 [ 1, %122 ], [ %125, %123 ]
  %128 = icmp slt i32 %118, %127
  br i1 %128, label %129, label %131

129:                                              ; preds = %126
  %130 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -7, ptr %130, align 4, !tbaa !9
  br label %147

131:                                              ; preds = %126
  %132 = load ptr, ptr %23, align 8, !tbaa !5
  %133 = load i32, ptr %132, align 4, !tbaa !9
  %134 = load ptr, ptr %16, align 8, !tbaa !5
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = icmp sge i32 1, %135
  br i1 %136, label %137, label %138

137:                                              ; preds = %131
  br label %141

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

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

144:                                              ; preds = %141
  %145 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -9, ptr %145, align 4, !tbaa !9
  br label %146

146:                                              ; preds = %144, %141
  br label %147

147:                                              ; preds = %146, %129
  br label %148

148:                                              ; preds = %147, %114
  br label %149

149:                                              ; preds = %148, %108
  br label %150

150:                                              ; preds = %149, %102
  %151 = load ptr, ptr %28, align 8, !tbaa !5
  %152 = load i32, ptr %151, align 4, !tbaa !9
  %153 = icmp ne i32 %152, 0
  br i1 %153, label %154, label %159

154:                                              ; preds = %150
  %155 = load ptr, ptr %28, align 8, !tbaa !5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = sub nsw i32 0, %156
  store i32 %157, ptr %33, align 4, !tbaa !9
  %158 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %33, i32 noundef 6)
  store i32 1, ptr %60, align 4
  br label %1253

159:                                              ; preds = %150
  %160 = load ptr, ptr %16, align 8, !tbaa !5
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %167, label %163

163:                                              ; preds = %159
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = icmp eq i32 %165, 0
  br i1 %166, label %167, label %187

167:                                              ; preds = %163, %159
  %168 = load ptr, ptr %17, align 8, !tbaa !5
  %169 = load i32, ptr %168, align 4, !tbaa !9
  store i32 %169, ptr %33, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %170

170:                                              ; preds = %183, %167
  %171 = load i32, ptr %47, align 4, !tbaa !9
  %172 = load i32, ptr %33, align 4, !tbaa !9
  %173 = icmp sle i32 %171, %172
  br i1 %173, label %174, label %186

174:                                              ; preds = %170
  %175 = load ptr, ptr %24, align 8, !tbaa !5
  %176 = load i32, ptr %47, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %175, i64 %177
  store double 0.000000e+00, ptr %178, align 8, !tbaa !11
  %179 = load ptr, ptr %25, align 8, !tbaa !5
  %180 = load i32, ptr %47, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds double, ptr %179, i64 %181
  store double 0.000000e+00, ptr %182, align 8, !tbaa !11
  br label %183

183:                                              ; preds = %174
  %184 = load i32, ptr %47, align 4, !tbaa !9
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %47, align 4, !tbaa !9
  br label %170, !llvm.loop !13

186:                                              ; preds = %170
  store i32 1, ptr %60, align 4
  br label %1253

187:                                              ; preds = %163
  %188 = load ptr, ptr %16, align 8, !tbaa !5
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %56, align 4, !tbaa !9
  %191 = call double @dlamch_(ptr noundef @.str.3)
  store double %191, ptr %59, align 8, !tbaa !11
  %192 = call double @dlamch_(ptr noundef @.str.4)
  store double %192, ptr %57, align 8, !tbaa !11
  %193 = load i32, ptr %56, align 4, !tbaa !9
  %194 = sitofp i32 %193 to double
  %195 = load double, ptr %57, align 8, !tbaa !11
  %196 = fmul double %194, %195
  store double %196, ptr %44, align 8, !tbaa !11
  %197 = load double, ptr %44, align 8, !tbaa !11
  %198 = load double, ptr %59, align 8, !tbaa !11
  %199 = fdiv double %197, %198
  store double %199, ptr %45, align 8, !tbaa !11
  %200 = load ptr, ptr %17, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !9
  store i32 %201, ptr %33, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %202

202:                                              ; preds = %1249, %187
  %203 = load i32, ptr %47, align 4, !tbaa !9
  %204 = load i32, ptr %33, align 4, !tbaa !9
  %205 = icmp sle i32 %203, %204
  br i1 %205, label %206, label %1252

206:                                              ; preds = %202
  store i32 1, ptr %51, align 4, !tbaa !9
  store double 3.000000e+00, ptr %58, align 8, !tbaa !11
  br label %207

207:                                              ; preds = %880, %206
  %208 = load ptr, ptr %16, align 8, !tbaa !5
  %209 = load ptr, ptr %20, align 8, !tbaa !5
  %210 = load i32, ptr %47, align 4, !tbaa !9
  %211 = load i32, ptr %29, align 4, !tbaa !9
  %212 = mul nsw i32 %210, %211
  %213 = add nsw i32 %212, 1
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds %struct.doublecomplex, ptr %209, i64 %214
  %216 = load ptr, ptr %26, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.doublecomplex, ptr %216, i64 1
  call void @zcopy_(ptr noundef %208, ptr noundef %215, ptr noundef @c__1, ptr noundef %217, ptr noundef @c__1)
  %218 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double -1.000000e+00, ptr %218, align 8, !tbaa !15
  %219 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double 0.000000e+00, ptr %219, align 8, !tbaa !17
  %220 = load ptr, ptr %15, align 8, !tbaa !5
  %221 = load ptr, ptr %16, align 8, !tbaa !5
  %222 = load ptr, ptr %18, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.doublecomplex, ptr %222, i64 1
  %224 = load ptr, ptr %22, align 8, !tbaa !5
  %225 = load i32, ptr %47, align 4, !tbaa !9
  %226 = load i32, ptr %31, align 4, !tbaa !9
  %227 = mul nsw i32 %225, %226
  %228 = add nsw i32 %227, 1
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds %struct.doublecomplex, ptr %224, i64 %229
  %231 = load ptr, ptr %26, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.doublecomplex, ptr %231, i64 1
  call void @zhpmv_(ptr noundef %220, ptr noundef %221, ptr noundef %42, ptr noundef %223, ptr noundef %230, ptr noundef @c__1, ptr noundef @c_b1, ptr noundef %232, ptr noundef @c__1)
  %233 = load ptr, ptr %16, align 8, !tbaa !5
  %234 = load i32, ptr %233, align 4, !tbaa !9
  store i32 %234, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %285, %207
  %236 = load i32, ptr %46, align 4, !tbaa !9
  %237 = load i32, ptr %34, align 4, !tbaa !9
  %238 = icmp sle i32 %236, %237
  br i1 %238, label %239, label %288

239:                                              ; preds = %235
  %240 = load i32, ptr %46, align 4, !tbaa !9
  %241 = load i32, ptr %47, align 4, !tbaa !9
  %242 = load i32, ptr %29, align 4, !tbaa !9
  %243 = mul nsw i32 %241, %242
  %244 = add nsw i32 %240, %243
  store i32 %244, ptr %35, align 4, !tbaa !9
  %245 = load ptr, ptr %20, align 8, !tbaa !5
  %246 = load i32, ptr %35, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %245, i64 %247
  %249 = getelementptr inbounds %struct.doublecomplex, ptr %248, i32 0, i32 0
  %250 = load double, ptr %249, align 8, !tbaa !15
  store double %250, ptr %38, align 8, !tbaa !11
  %251 = load double, ptr %38, align 8, !tbaa !11
  %252 = fcmp oge double %251, 0.000000e+00
  br i1 %252, label %253, label %255

253:                                              ; preds = %239
  %254 = load double, ptr %38, align 8, !tbaa !11
  br label %258

255:                                              ; preds = %239
  %256 = load double, ptr %38, align 8, !tbaa !11
  %257 = fneg double %256
  br label %258

258:                                              ; preds = %255, %253
  %259 = phi double [ %254, %253 ], [ %257, %255 ]
  %260 = load ptr, ptr %20, align 8, !tbaa !5
  %261 = load i32, ptr %46, align 4, !tbaa !9
  %262 = load i32, ptr %47, align 4, !tbaa !9
  %263 = load i32, ptr %29, align 4, !tbaa !9
  %264 = mul nsw i32 %262, %263
  %265 = add nsw i32 %261, %264
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds %struct.doublecomplex, ptr %260, i64 %266
  %268 = call { double, double } @Cd(ptr noundef %267)
  %269 = extractvalue { double, double } %268, 0
  %270 = extractvalue { double, double } %268, 1
  store double %270, ptr %39, align 8, !tbaa !11
  %271 = load double, ptr %39, align 8, !tbaa !11
  %272 = fcmp oge double %271, 0.000000e+00
  br i1 %272, label %273, label %275

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

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

278:                                              ; preds = %275, %273
  %279 = phi double [ %274, %273 ], [ %277, %275 ]
  %280 = fadd double %259, %279
  %281 = load ptr, ptr %27, align 8, !tbaa !5
  %282 = load i32, ptr %46, align 4, !tbaa !9
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %281, i64 %283
  store double %280, ptr %284, align 8, !tbaa !11
  br label %285

285:                                              ; preds = %278
  %286 = load i32, ptr %46, align 4, !tbaa !9
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr %46, align 4, !tbaa !9
  br label %235, !llvm.loop !18

288:                                              ; preds = %235
  store i32 1, ptr %54, align 4, !tbaa !9
  %289 = load i32, ptr %52, align 4, !tbaa !9
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %509

291:                                              ; preds = %288
  %292 = load ptr, ptr %16, align 8, !tbaa !5
  %293 = load i32, ptr %292, align 4, !tbaa !9
  store i32 %293, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %294

294:                                              ; preds = %505, %291
  %295 = load i32, ptr %48, align 4, !tbaa !9
  %296 = load i32, ptr %34, align 4, !tbaa !9
  %297 = icmp sle i32 %295, %296
  br i1 %297, label %298, label %508

298:                                              ; preds = %294
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %299 = load i32, ptr %48, align 4, !tbaa !9
  %300 = load i32, ptr %47, align 4, !tbaa !9
  %301 = load i32, ptr %31, align 4, !tbaa !9
  %302 = mul nsw i32 %300, %301
  %303 = add nsw i32 %299, %302
  store i32 %303, ptr %35, align 4, !tbaa !9
  %304 = load ptr, ptr %22, align 8, !tbaa !5
  %305 = load i32, ptr %35, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds %struct.doublecomplex, ptr %304, i64 %306
  %308 = getelementptr inbounds %struct.doublecomplex, ptr %307, i32 0, i32 0
  %309 = load double, ptr %308, align 8, !tbaa !15
  store double %309, ptr %38, align 8, !tbaa !11
  %310 = load double, ptr %38, align 8, !tbaa !11
  %311 = fcmp oge double %310, 0.000000e+00
  br i1 %311, label %312, label %314

312:                                              ; preds = %298
  %313 = load double, ptr %38, align 8, !tbaa !11
  br label %317

314:                                              ; preds = %298
  %315 = load double, ptr %38, align 8, !tbaa !11
  %316 = fneg double %315
  br label %317

317:                                              ; preds = %314, %312
  %318 = phi double [ %313, %312 ], [ %316, %314 ]
  %319 = load ptr, ptr %22, align 8, !tbaa !5
  %320 = load i32, ptr %48, align 4, !tbaa !9
  %321 = load i32, ptr %47, align 4, !tbaa !9
  %322 = load i32, ptr %31, align 4, !tbaa !9
  %323 = mul nsw i32 %321, %322
  %324 = add nsw i32 %320, %323
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %319, i64 %325
  %327 = call { double, double } @Cd(ptr noundef %326)
  %328 = extractvalue { double, double } %327, 0
  %329 = extractvalue { double, double } %327, 1
  store double %329, ptr %39, align 8, !tbaa !11
  %330 = load double, ptr %39, align 8, !tbaa !11
  %331 = fcmp oge double %330, 0.000000e+00
  br i1 %331, label %332, label %334

332:                                              ; preds = %317
  %333 = load double, ptr %39, align 8, !tbaa !11
  br label %337

334:                                              ; preds = %317
  %335 = load double, ptr %39, align 8, !tbaa !11
  %336 = fneg double %335
  br label %337

337:                                              ; preds = %334, %332
  %338 = phi double [ %333, %332 ], [ %336, %334 ]
  %339 = fadd double %318, %338
  store double %339, ptr %55, align 8, !tbaa !11
  %340 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %340, ptr %53, align 4, !tbaa !9
  %341 = load i32, ptr %48, align 4, !tbaa !9
  %342 = sub nsw i32 %341, 1
  store i32 %342, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %343

343:                                              ; preds = %466, %337
  %344 = load i32, ptr %46, align 4, !tbaa !9
  %345 = load i32, ptr %35, align 4, !tbaa !9
  %346 = icmp sle i32 %344, %345
  br i1 %346, label %347, label %469

347:                                              ; preds = %343
  %348 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %348, ptr %36, align 4, !tbaa !9
  %349 = load ptr, ptr %18, align 8, !tbaa !5
  %350 = load i32, ptr %36, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds %struct.doublecomplex, ptr %349, i64 %351
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %352, i32 0, i32 0
  %354 = load double, ptr %353, align 8, !tbaa !15
  store double %354, ptr %38, align 8, !tbaa !11
  %355 = load double, ptr %38, align 8, !tbaa !11
  %356 = fcmp oge double %355, 0.000000e+00
  br i1 %356, label %357, label %359

357:                                              ; preds = %347
  %358 = load double, ptr %38, align 8, !tbaa !11
  br label %362

359:                                              ; preds = %347
  %360 = load double, ptr %38, align 8, !tbaa !11
  %361 = fneg double %360
  br label %362

362:                                              ; preds = %359, %357
  %363 = phi double [ %358, %357 ], [ %361, %359 ]
  %364 = load ptr, ptr %18, align 8, !tbaa !5
  %365 = load i32, ptr %53, align 4, !tbaa !9
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %364, i64 %366
  %368 = call { double, double } @Cd(ptr noundef %367)
  %369 = extractvalue { double, double } %368, 0
  %370 = extractvalue { double, double } %368, 1
  store double %370, ptr %39, align 8, !tbaa !11
  %371 = load double, ptr %39, align 8, !tbaa !11
  %372 = fcmp oge double %371, 0.000000e+00
  br i1 %372, label %373, label %375

373:                                              ; preds = %362
  %374 = load double, ptr %39, align 8, !tbaa !11
  br label %378

375:                                              ; preds = %362
  %376 = load double, ptr %39, align 8, !tbaa !11
  %377 = fneg double %376
  br label %378

378:                                              ; preds = %375, %373
  %379 = phi double [ %374, %373 ], [ %377, %375 ]
  %380 = fadd double %363, %379
  %381 = load double, ptr %55, align 8, !tbaa !11
  %382 = load ptr, ptr %27, align 8, !tbaa !5
  %383 = load i32, ptr %46, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds double, ptr %382, i64 %384
  %386 = load double, ptr %385, align 8, !tbaa !11
  %387 = call double @llvm.fmuladd.f64(double %380, double %381, double %386)
  store double %387, ptr %385, align 8, !tbaa !11
  %388 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %388, ptr %36, align 4, !tbaa !9
  %389 = load i32, ptr %46, align 4, !tbaa !9
  %390 = load i32, ptr %47, align 4, !tbaa !9
  %391 = load i32, ptr %31, align 4, !tbaa !9
  %392 = mul nsw i32 %390, %391
  %393 = add nsw i32 %389, %392
  store i32 %393, ptr %37, align 4, !tbaa !9
  %394 = load ptr, ptr %18, align 8, !tbaa !5
  %395 = load i32, ptr %36, align 4, !tbaa !9
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds %struct.doublecomplex, ptr %394, i64 %396
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %397, i32 0, i32 0
  %399 = load double, ptr %398, align 8, !tbaa !15
  store double %399, ptr %38, align 8, !tbaa !11
  %400 = load double, ptr %38, align 8, !tbaa !11
  %401 = fcmp oge double %400, 0.000000e+00
  br i1 %401, label %402, label %404

402:                                              ; preds = %378
  %403 = load double, ptr %38, align 8, !tbaa !11
  br label %407

404:                                              ; preds = %378
  %405 = load double, ptr %38, align 8, !tbaa !11
  %406 = fneg double %405
  br label %407

407:                                              ; preds = %404, %402
  %408 = phi double [ %403, %402 ], [ %406, %404 ]
  %409 = load ptr, ptr %18, align 8, !tbaa !5
  %410 = load i32, ptr %53, align 4, !tbaa !9
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds %struct.doublecomplex, ptr %409, i64 %411
  %413 = call { double, double } @Cd(ptr noundef %412)
  %414 = extractvalue { double, double } %413, 0
  %415 = extractvalue { double, double } %413, 1
  store double %415, ptr %39, align 8, !tbaa !11
  %416 = load double, ptr %39, align 8, !tbaa !11
  %417 = fcmp oge double %416, 0.000000e+00
  br i1 %417, label %418, label %420

418:                                              ; preds = %407
  %419 = load double, ptr %39, align 8, !tbaa !11
  br label %423

420:                                              ; preds = %407
  %421 = load double, ptr %39, align 8, !tbaa !11
  %422 = fneg double %421
  br label %423

423:                                              ; preds = %420, %418
  %424 = phi double [ %419, %418 ], [ %422, %420 ]
  %425 = fadd double %408, %424
  %426 = load ptr, ptr %22, align 8, !tbaa !5
  %427 = load i32, ptr %37, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %426, i64 %428
  %430 = getelementptr inbounds %struct.doublecomplex, ptr %429, i32 0, i32 0
  %431 = load double, ptr %430, align 8, !tbaa !15
  store double %431, ptr %40, align 8, !tbaa !11
  %432 = load double, ptr %40, align 8, !tbaa !11
  %433 = fcmp oge double %432, 0.000000e+00
  br i1 %433, label %434, label %436

434:                                              ; preds = %423
  %435 = load double, ptr %40, align 8, !tbaa !11
  br label %439

436:                                              ; preds = %423
  %437 = load double, ptr %40, align 8, !tbaa !11
  %438 = fneg double %437
  br label %439

439:                                              ; preds = %436, %434
  %440 = phi double [ %435, %434 ], [ %438, %436 ]
  %441 = load ptr, ptr %22, align 8, !tbaa !5
  %442 = load i32, ptr %46, align 4, !tbaa !9
  %443 = load i32, ptr %47, align 4, !tbaa !9
  %444 = load i32, ptr %31, align 4, !tbaa !9
  %445 = mul nsw i32 %443, %444
  %446 = add nsw i32 %442, %445
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds %struct.doublecomplex, ptr %441, i64 %447
  %449 = call { double, double } @Cd(ptr noundef %448)
  %450 = extractvalue { double, double } %449, 0
  %451 = extractvalue { double, double } %449, 1
  store double %451, ptr %41, align 8, !tbaa !11
  %452 = load double, ptr %41, align 8, !tbaa !11
  %453 = fcmp oge double %452, 0.000000e+00
  br i1 %453, label %454, label %456

454:                                              ; preds = %439
  %455 = load double, ptr %41, align 8, !tbaa !11
  br label %459

456:                                              ; preds = %439
  %457 = load double, ptr %41, align 8, !tbaa !11
  %458 = fneg double %457
  br label %459

459:                                              ; preds = %456, %454
  %460 = phi double [ %455, %454 ], [ %458, %456 ]
  %461 = fadd double %440, %460
  %462 = load double, ptr %49, align 8, !tbaa !11
  %463 = call double @llvm.fmuladd.f64(double %425, double %461, double %462)
  store double %463, ptr %49, align 8, !tbaa !11
  %464 = load i32, ptr %53, align 4, !tbaa !9
  %465 = add nsw i32 %464, 1
  store i32 %465, ptr %53, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %459
  %467 = load i32, ptr %46, align 4, !tbaa !9
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %46, align 4, !tbaa !9
  br label %343, !llvm.loop !19

469:                                              ; preds = %343
  %470 = load i32, ptr %54, align 4, !tbaa !9
  %471 = load i32, ptr %48, align 4, !tbaa !9
  %472 = add nsw i32 %470, %471
  %473 = sub nsw i32 %472, 1
  store i32 %473, ptr %35, align 4, !tbaa !9
  %474 = load ptr, ptr %27, align 8, !tbaa !5
  %475 = load i32, ptr %48, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds double, ptr %474, i64 %476
  %478 = load double, ptr %477, align 8, !tbaa !11
  %479 = load ptr, ptr %18, align 8, !tbaa !5
  %480 = load i32, ptr %35, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds %struct.doublecomplex, ptr %479, i64 %481
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %482, i32 0, i32 0
  %484 = load double, ptr %483, align 8, !tbaa !15
  store double %484, ptr %38, align 8, !tbaa !11
  %485 = load double, ptr %38, align 8, !tbaa !11
  %486 = fcmp oge double %485, 0.000000e+00
  br i1 %486, label %487, label %489

487:                                              ; preds = %469
  %488 = load double, ptr %38, align 8, !tbaa !11
  br label %492

489:                                              ; preds = %469
  %490 = load double, ptr %38, align 8, !tbaa !11
  %491 = fneg double %490
  br label %492

492:                                              ; preds = %489, %487
  %493 = phi double [ %488, %487 ], [ %491, %489 ]
  %494 = load double, ptr %55, align 8, !tbaa !11
  %495 = call double @llvm.fmuladd.f64(double %493, double %494, double %478)
  %496 = load double, ptr %49, align 8, !tbaa !11
  %497 = fadd double %495, %496
  %498 = load ptr, ptr %27, align 8, !tbaa !5
  %499 = load i32, ptr %48, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %498, i64 %500
  store double %497, ptr %501, align 8, !tbaa !11
  %502 = load i32, ptr %48, align 4, !tbaa !9
  %503 = load i32, ptr %54, align 4, !tbaa !9
  %504 = add nsw i32 %503, %502
  store i32 %504, ptr %54, align 4, !tbaa !9
  br label %505

505:                                              ; preds = %492
  %506 = load i32, ptr %48, align 4, !tbaa !9
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %48, align 4, !tbaa !9
  br label %294, !llvm.loop !20

508:                                              ; preds = %294
  br label %732

509:                                              ; preds = %288
  %510 = load ptr, ptr %16, align 8, !tbaa !5
  %511 = load i32, ptr %510, align 4, !tbaa !9
  store i32 %511, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %728, %509
  %513 = load i32, ptr %48, align 4, !tbaa !9
  %514 = load i32, ptr %34, align 4, !tbaa !9
  %515 = icmp sle i32 %513, %514
  br i1 %515, label %516, label %731

516:                                              ; preds = %512
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %517 = load i32, ptr %48, align 4, !tbaa !9
  %518 = load i32, ptr %47, align 4, !tbaa !9
  %519 = load i32, ptr %31, align 4, !tbaa !9
  %520 = mul nsw i32 %518, %519
  %521 = add nsw i32 %517, %520
  store i32 %521, ptr %35, align 4, !tbaa !9
  %522 = load ptr, ptr %22, align 8, !tbaa !5
  %523 = load i32, ptr %35, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %522, i64 %524
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %525, i32 0, i32 0
  %527 = load double, ptr %526, align 8, !tbaa !15
  store double %527, ptr %38, align 8, !tbaa !11
  %528 = load double, ptr %38, align 8, !tbaa !11
  %529 = fcmp oge double %528, 0.000000e+00
  br i1 %529, label %530, label %532

530:                                              ; preds = %516
  %531 = load double, ptr %38, align 8, !tbaa !11
  br label %535

532:                                              ; preds = %516
  %533 = load double, ptr %38, align 8, !tbaa !11
  %534 = fneg double %533
  br label %535

535:                                              ; preds = %532, %530
  %536 = phi double [ %531, %530 ], [ %534, %532 ]
  %537 = load ptr, ptr %22, align 8, !tbaa !5
  %538 = load i32, ptr %48, align 4, !tbaa !9
  %539 = load i32, ptr %47, align 4, !tbaa !9
  %540 = load i32, ptr %31, align 4, !tbaa !9
  %541 = mul nsw i32 %539, %540
  %542 = add nsw i32 %538, %541
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds %struct.doublecomplex, ptr %537, i64 %543
  %545 = call { double, double } @Cd(ptr noundef %544)
  %546 = extractvalue { double, double } %545, 0
  %547 = extractvalue { double, double } %545, 1
  store double %547, ptr %39, align 8, !tbaa !11
  %548 = load double, ptr %39, align 8, !tbaa !11
  %549 = fcmp oge double %548, 0.000000e+00
  br i1 %549, label %550, label %552

550:                                              ; preds = %535
  %551 = load double, ptr %39, align 8, !tbaa !11
  br label %555

552:                                              ; preds = %535
  %553 = load double, ptr %39, align 8, !tbaa !11
  %554 = fneg double %553
  br label %555

555:                                              ; preds = %552, %550
  %556 = phi double [ %551, %550 ], [ %554, %552 ]
  %557 = fadd double %536, %556
  store double %557, ptr %55, align 8, !tbaa !11
  %558 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %558, ptr %35, align 4, !tbaa !9
  %559 = load ptr, ptr %18, align 8, !tbaa !5
  %560 = load i32, ptr %35, align 4, !tbaa !9
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds %struct.doublecomplex, ptr %559, i64 %561
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %562, i32 0, i32 0
  %564 = load double, ptr %563, align 8, !tbaa !15
  store double %564, ptr %38, align 8, !tbaa !11
  %565 = load double, ptr %38, align 8, !tbaa !11
  %566 = fcmp oge double %565, 0.000000e+00
  br i1 %566, label %567, label %569

567:                                              ; preds = %555
  %568 = load double, ptr %38, align 8, !tbaa !11
  br label %572

569:                                              ; preds = %555
  %570 = load double, ptr %38, align 8, !tbaa !11
  %571 = fneg double %570
  br label %572

572:                                              ; preds = %569, %567
  %573 = phi double [ %568, %567 ], [ %571, %569 ]
  %574 = load double, ptr %55, align 8, !tbaa !11
  %575 = load ptr, ptr %27, align 8, !tbaa !5
  %576 = load i32, ptr %48, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds double, ptr %575, i64 %577
  %579 = load double, ptr %578, align 8, !tbaa !11
  %580 = call double @llvm.fmuladd.f64(double %573, double %574, double %579)
  store double %580, ptr %578, align 8, !tbaa !11
  %581 = load i32, ptr %54, align 4, !tbaa !9
  %582 = add nsw i32 %581, 1
  store i32 %582, ptr %53, align 4, !tbaa !9
  %583 = load ptr, ptr %16, align 8, !tbaa !5
  %584 = load i32, ptr %583, align 4, !tbaa !9
  store i32 %584, ptr %35, align 4, !tbaa !9
  %585 = load i32, ptr %48, align 4, !tbaa !9
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %46, align 4, !tbaa !9
  br label %587

587:                                              ; preds = %710, %572
  %588 = load i32, ptr %46, align 4, !tbaa !9
  %589 = load i32, ptr %35, align 4, !tbaa !9
  %590 = icmp sle i32 %588, %589
  br i1 %590, label %591, label %713

591:                                              ; preds = %587
  %592 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %592, ptr %36, align 4, !tbaa !9
  %593 = load ptr, ptr %18, align 8, !tbaa !5
  %594 = load i32, ptr %36, align 4, !tbaa !9
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds %struct.doublecomplex, ptr %593, i64 %595
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %596, i32 0, i32 0
  %598 = load double, ptr %597, align 8, !tbaa !15
  store double %598, ptr %38, align 8, !tbaa !11
  %599 = load double, ptr %38, align 8, !tbaa !11
  %600 = fcmp oge double %599, 0.000000e+00
  br i1 %600, label %601, label %603

601:                                              ; preds = %591
  %602 = load double, ptr %38, align 8, !tbaa !11
  br label %606

603:                                              ; preds = %591
  %604 = load double, ptr %38, align 8, !tbaa !11
  %605 = fneg double %604
  br label %606

606:                                              ; preds = %603, %601
  %607 = phi double [ %602, %601 ], [ %605, %603 ]
  %608 = load ptr, ptr %18, align 8, !tbaa !5
  %609 = load i32, ptr %53, align 4, !tbaa !9
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds %struct.doublecomplex, ptr %608, i64 %610
  %612 = call { double, double } @Cd(ptr noundef %611)
  %613 = extractvalue { double, double } %612, 0
  %614 = extractvalue { double, double } %612, 1
  store double %614, ptr %39, align 8, !tbaa !11
  %615 = load double, ptr %39, align 8, !tbaa !11
  %616 = fcmp oge double %615, 0.000000e+00
  br i1 %616, label %617, label %619

617:                                              ; preds = %606
  %618 = load double, ptr %39, align 8, !tbaa !11
  br label %622

619:                                              ; preds = %606
  %620 = load double, ptr %39, align 8, !tbaa !11
  %621 = fneg double %620
  br label %622

622:                                              ; preds = %619, %617
  %623 = phi double [ %618, %617 ], [ %621, %619 ]
  %624 = fadd double %607, %623
  %625 = load double, ptr %55, align 8, !tbaa !11
  %626 = load ptr, ptr %27, align 8, !tbaa !5
  %627 = load i32, ptr %46, align 4, !tbaa !9
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds double, ptr %626, i64 %628
  %630 = load double, ptr %629, align 8, !tbaa !11
  %631 = call double @llvm.fmuladd.f64(double %624, double %625, double %630)
  store double %631, ptr %629, align 8, !tbaa !11
  %632 = load i32, ptr %53, align 4, !tbaa !9
  store i32 %632, ptr %36, align 4, !tbaa !9
  %633 = load i32, ptr %46, align 4, !tbaa !9
  %634 = load i32, ptr %47, align 4, !tbaa !9
  %635 = load i32, ptr %31, align 4, !tbaa !9
  %636 = mul nsw i32 %634, %635
  %637 = add nsw i32 %633, %636
  store i32 %637, ptr %37, align 4, !tbaa !9
  %638 = load ptr, ptr %18, align 8, !tbaa !5
  %639 = load i32, ptr %36, align 4, !tbaa !9
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %638, i64 %640
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %641, i32 0, i32 0
  %643 = load double, ptr %642, align 8, !tbaa !15
  store double %643, ptr %38, align 8, !tbaa !11
  %644 = load double, ptr %38, align 8, !tbaa !11
  %645 = fcmp oge double %644, 0.000000e+00
  br i1 %645, label %646, label %648

646:                                              ; preds = %622
  %647 = load double, ptr %38, align 8, !tbaa !11
  br label %651

648:                                              ; preds = %622
  %649 = load double, ptr %38, align 8, !tbaa !11
  %650 = fneg double %649
  br label %651

651:                                              ; preds = %648, %646
  %652 = phi double [ %647, %646 ], [ %650, %648 ]
  %653 = load ptr, ptr %18, align 8, !tbaa !5
  %654 = load i32, ptr %53, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds %struct.doublecomplex, ptr %653, i64 %655
  %657 = call { double, double } @Cd(ptr noundef %656)
  %658 = extractvalue { double, double } %657, 0
  %659 = extractvalue { double, double } %657, 1
  store double %659, ptr %39, align 8, !tbaa !11
  %660 = load double, ptr %39, align 8, !tbaa !11
  %661 = fcmp oge double %660, 0.000000e+00
  br i1 %661, label %662, label %664

662:                                              ; preds = %651
  %663 = load double, ptr %39, align 8, !tbaa !11
  br label %667

664:                                              ; preds = %651
  %665 = load double, ptr %39, align 8, !tbaa !11
  %666 = fneg double %665
  br label %667

667:                                              ; preds = %664, %662
  %668 = phi double [ %663, %662 ], [ %666, %664 ]
  %669 = fadd double %652, %668
  %670 = load ptr, ptr %22, align 8, !tbaa !5
  %671 = load i32, ptr %37, align 4, !tbaa !9
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds %struct.doublecomplex, ptr %670, i64 %672
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %673, i32 0, i32 0
  %675 = load double, ptr %674, align 8, !tbaa !15
  store double %675, ptr %40, align 8, !tbaa !11
  %676 = load double, ptr %40, align 8, !tbaa !11
  %677 = fcmp oge double %676, 0.000000e+00
  br i1 %677, label %678, label %680

678:                                              ; preds = %667
  %679 = load double, ptr %40, align 8, !tbaa !11
  br label %683

680:                                              ; preds = %667
  %681 = load double, ptr %40, align 8, !tbaa !11
  %682 = fneg double %681
  br label %683

683:                                              ; preds = %680, %678
  %684 = phi double [ %679, %678 ], [ %682, %680 ]
  %685 = load ptr, ptr %22, align 8, !tbaa !5
  %686 = load i32, ptr %46, align 4, !tbaa !9
  %687 = load i32, ptr %47, align 4, !tbaa !9
  %688 = load i32, ptr %31, align 4, !tbaa !9
  %689 = mul nsw i32 %687, %688
  %690 = add nsw i32 %686, %689
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %685, i64 %691
  %693 = call { double, double } @Cd(ptr noundef %692)
  %694 = extractvalue { double, double } %693, 0
  %695 = extractvalue { double, double } %693, 1
  store double %695, ptr %41, align 8, !tbaa !11
  %696 = load double, ptr %41, align 8, !tbaa !11
  %697 = fcmp oge double %696, 0.000000e+00
  br i1 %697, label %698, label %700

698:                                              ; preds = %683
  %699 = load double, ptr %41, align 8, !tbaa !11
  br label %703

700:                                              ; preds = %683
  %701 = load double, ptr %41, align 8, !tbaa !11
  %702 = fneg double %701
  br label %703

703:                                              ; preds = %700, %698
  %704 = phi double [ %699, %698 ], [ %702, %700 ]
  %705 = fadd double %684, %704
  %706 = load double, ptr %49, align 8, !tbaa !11
  %707 = call double @llvm.fmuladd.f64(double %669, double %705, double %706)
  store double %707, ptr %49, align 8, !tbaa !11
  %708 = load i32, ptr %53, align 4, !tbaa !9
  %709 = add nsw i32 %708, 1
  store i32 %709, ptr %53, align 4, !tbaa !9
  br label %710

710:                                              ; preds = %703
  %711 = load i32, ptr %46, align 4, !tbaa !9
  %712 = add nsw i32 %711, 1
  store i32 %712, ptr %46, align 4, !tbaa !9
  br label %587, !llvm.loop !21

713:                                              ; preds = %587
  %714 = load double, ptr %49, align 8, !tbaa !11
  %715 = load ptr, ptr %27, align 8, !tbaa !5
  %716 = load i32, ptr %48, align 4, !tbaa !9
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds double, ptr %715, i64 %717
  %719 = load double, ptr %718, align 8, !tbaa !11
  %720 = fadd double %719, %714
  store double %720, ptr %718, align 8, !tbaa !11
  %721 = load ptr, ptr %16, align 8, !tbaa !5
  %722 = load i32, ptr %721, align 4, !tbaa !9
  %723 = load i32, ptr %48, align 4, !tbaa !9
  %724 = sub nsw i32 %722, %723
  %725 = add nsw i32 %724, 1
  %726 = load i32, ptr %54, align 4, !tbaa !9
  %727 = add nsw i32 %726, %725
  store i32 %727, ptr %54, align 4, !tbaa !9
  br label %728

728:                                              ; preds = %713
  %729 = load i32, ptr %48, align 4, !tbaa !9
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %48, align 4, !tbaa !9
  br label %512, !llvm.loop !22

731:                                              ; preds = %512
  br label %732

732:                                              ; preds = %731, %508
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %733 = load ptr, ptr %16, align 8, !tbaa !5
  %734 = load i32, ptr %733, align 4, !tbaa !9
  store i32 %734, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %735

735:                                              ; preds = %852, %732
  %736 = load i32, ptr %46, align 4, !tbaa !9
  %737 = load i32, ptr %34, align 4, !tbaa !9
  %738 = icmp sle i32 %736, %737
  br i1 %738, label %739, label %855

739:                                              ; preds = %735
  %740 = load ptr, ptr %27, align 8, !tbaa !5
  %741 = load i32, ptr %46, align 4, !tbaa !9
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds double, ptr %740, i64 %742
  %744 = load double, ptr %743, align 8, !tbaa !11
  %745 = load double, ptr %45, align 8, !tbaa !11
  %746 = fcmp ogt double %744, %745
  br i1 %746, label %747, label %797

747:                                              ; preds = %739
  %748 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %748, ptr %35, align 4, !tbaa !9
  %749 = load double, ptr %49, align 8, !tbaa !11
  store double %749, ptr %40, align 8, !tbaa !11
  %750 = load ptr, ptr %26, align 8, !tbaa !5
  %751 = load i32, ptr %35, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %750, i64 %752
  %754 = getelementptr inbounds %struct.doublecomplex, ptr %753, i32 0, i32 0
  %755 = load double, ptr %754, align 8, !tbaa !15
  store double %755, ptr %38, align 8, !tbaa !11
  %756 = load double, ptr %38, align 8, !tbaa !11
  %757 = fcmp oge double %756, 0.000000e+00
  br i1 %757, label %758, label %760

758:                                              ; preds = %747
  %759 = load double, ptr %38, align 8, !tbaa !11
  br label %763

760:                                              ; preds = %747
  %761 = load double, ptr %38, align 8, !tbaa !11
  %762 = fneg double %761
  br label %763

763:                                              ; preds = %760, %758
  %764 = phi double [ %759, %758 ], [ %762, %760 ]
  %765 = load ptr, ptr %26, align 8, !tbaa !5
  %766 = load i32, ptr %46, align 4, !tbaa !9
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds %struct.doublecomplex, ptr %765, i64 %767
  %769 = call { double, double } @Cd(ptr noundef %768)
  %770 = extractvalue { double, double } %769, 0
  %771 = extractvalue { double, double } %769, 1
  store double %771, ptr %39, align 8, !tbaa !11
  %772 = load double, ptr %39, align 8, !tbaa !11
  %773 = fcmp oge double %772, 0.000000e+00
  br i1 %773, label %774, label %776

774:                                              ; preds = %763
  %775 = load double, ptr %39, align 8, !tbaa !11
  br label %779

776:                                              ; preds = %763
  %777 = load double, ptr %39, align 8, !tbaa !11
  %778 = fneg double %777
  br label %779

779:                                              ; preds = %776, %774
  %780 = phi double [ %775, %774 ], [ %778, %776 ]
  %781 = fadd double %764, %780
  %782 = load ptr, ptr %27, align 8, !tbaa !5
  %783 = load i32, ptr %46, align 4, !tbaa !9
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds double, ptr %782, i64 %784
  %786 = load double, ptr %785, align 8, !tbaa !11
  %787 = fdiv double %781, %786
  store double %787, ptr %41, align 8, !tbaa !11
  %788 = load double, ptr %40, align 8, !tbaa !11
  %789 = load double, ptr %41, align 8, !tbaa !11
  %790 = fcmp oge double %788, %789
  br i1 %790, label %791, label %793

791:                                              ; preds = %779
  %792 = load double, ptr %40, align 8, !tbaa !11
  br label %795

793:                                              ; preds = %779
  %794 = load double, ptr %41, align 8, !tbaa !11
  br label %795

795:                                              ; preds = %793, %791
  %796 = phi double [ %792, %791 ], [ %794, %793 ]
  store double %796, ptr %49, align 8, !tbaa !11
  br label %851

797:                                              ; preds = %739
  %798 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %798, ptr %35, align 4, !tbaa !9
  %799 = load double, ptr %49, align 8, !tbaa !11
  store double %799, ptr %40, align 8, !tbaa !11
  %800 = load ptr, ptr %26, align 8, !tbaa !5
  %801 = load i32, ptr %35, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds %struct.doublecomplex, ptr %800, i64 %802
  %804 = getelementptr inbounds %struct.doublecomplex, ptr %803, i32 0, i32 0
  %805 = load double, ptr %804, align 8, !tbaa !15
  store double %805, ptr %38, align 8, !tbaa !11
  %806 = load double, ptr %38, align 8, !tbaa !11
  %807 = fcmp oge double %806, 0.000000e+00
  br i1 %807, label %808, label %810

808:                                              ; preds = %797
  %809 = load double, ptr %38, align 8, !tbaa !11
  br label %813

810:                                              ; preds = %797
  %811 = load double, ptr %38, align 8, !tbaa !11
  %812 = fneg double %811
  br label %813

813:                                              ; preds = %810, %808
  %814 = phi double [ %809, %808 ], [ %812, %810 ]
  %815 = load ptr, ptr %26, align 8, !tbaa !5
  %816 = load i32, ptr %46, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds %struct.doublecomplex, ptr %815, i64 %817
  %819 = call { double, double } @Cd(ptr noundef %818)
  %820 = extractvalue { double, double } %819, 0
  %821 = extractvalue { double, double } %819, 1
  store double %821, ptr %39, align 8, !tbaa !11
  %822 = load double, ptr %39, align 8, !tbaa !11
  %823 = fcmp oge double %822, 0.000000e+00
  br i1 %823, label %824, label %826

824:                                              ; preds = %813
  %825 = load double, ptr %39, align 8, !tbaa !11
  br label %829

826:                                              ; preds = %813
  %827 = load double, ptr %39, align 8, !tbaa !11
  %828 = fneg double %827
  br label %829

829:                                              ; preds = %826, %824
  %830 = phi double [ %825, %824 ], [ %828, %826 ]
  %831 = fadd double %814, %830
  %832 = load double, ptr %44, align 8, !tbaa !11
  %833 = fadd double %831, %832
  %834 = load ptr, ptr %27, align 8, !tbaa !5
  %835 = load i32, ptr %46, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds double, ptr %834, i64 %836
  %838 = load double, ptr %837, align 8, !tbaa !11
  %839 = load double, ptr %44, align 8, !tbaa !11
  %840 = fadd double %838, %839
  %841 = fdiv double %833, %840
  store double %841, ptr %41, align 8, !tbaa !11
  %842 = load double, ptr %40, align 8, !tbaa !11
  %843 = load double, ptr %41, align 8, !tbaa !11
  %844 = fcmp oge double %842, %843
  br i1 %844, label %845, label %847

845:                                              ; preds = %829
  %846 = load double, ptr %40, align 8, !tbaa !11
  br label %849

847:                                              ; preds = %829
  %848 = load double, ptr %41, align 8, !tbaa !11
  br label %849

849:                                              ; preds = %847, %845
  %850 = phi double [ %846, %845 ], [ %848, %847 ]
  store double %850, ptr %49, align 8, !tbaa !11
  br label %851

851:                                              ; preds = %849, %795
  br label %852

852:                                              ; preds = %851
  %853 = load i32, ptr %46, align 4, !tbaa !9
  %854 = add nsw i32 %853, 1
  store i32 %854, ptr %46, align 4, !tbaa !9
  br label %735, !llvm.loop !23

855:                                              ; preds = %735
  %856 = load double, ptr %49, align 8, !tbaa !11
  %857 = load ptr, ptr %25, align 8, !tbaa !5
  %858 = load i32, ptr %47, align 4, !tbaa !9
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %857, i64 %859
  store double %856, ptr %860, align 8, !tbaa !11
  %861 = load ptr, ptr %25, align 8, !tbaa !5
  %862 = load i32, ptr %47, align 4, !tbaa !9
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds double, ptr %861, i64 %863
  %865 = load double, ptr %864, align 8, !tbaa !11
  %866 = load double, ptr %59, align 8, !tbaa !11
  %867 = fcmp ogt double %865, %866
  br i1 %867, label %868, label %906

868:                                              ; preds = %855
  %869 = load ptr, ptr %25, align 8, !tbaa !5
  %870 = load i32, ptr %47, align 4, !tbaa !9
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds double, ptr %869, i64 %871
  %873 = load double, ptr %872, align 8, !tbaa !11
  %874 = fmul double %873, 2.000000e+00
  %875 = load double, ptr %58, align 8, !tbaa !11
  %876 = fcmp ole double %874, %875
  br i1 %876, label %877, label %906

877:                                              ; preds = %868
  %878 = load i32, ptr %51, align 4, !tbaa !9
  %879 = icmp sle i32 %878, 5
  br i1 %879, label %880, label %906

880:                                              ; preds = %877
  %881 = load ptr, ptr %15, align 8, !tbaa !5
  %882 = load ptr, ptr %16, align 8, !tbaa !5
  %883 = load ptr, ptr %19, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %883, i64 1
  %885 = load ptr, ptr %26, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %885, i64 1
  %887 = load ptr, ptr %16, align 8, !tbaa !5
  %888 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zpptrs_(ptr noundef %881, ptr noundef %882, ptr noundef @c__1, ptr noundef %884, ptr noundef %886, ptr noundef %887, ptr noundef %888)
  %889 = load ptr, ptr %16, align 8, !tbaa !5
  %890 = load ptr, ptr %26, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.doublecomplex, ptr %890, i64 1
  %892 = load ptr, ptr %22, align 8, !tbaa !5
  %893 = load i32, ptr %47, align 4, !tbaa !9
  %894 = load i32, ptr %31, align 4, !tbaa !9
  %895 = mul nsw i32 %893, %894
  %896 = add nsw i32 %895, 1
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %892, i64 %897
  call void @zaxpy_(ptr noundef %889, ptr noundef @c_b1, ptr noundef %891, ptr noundef @c__1, ptr noundef %898, ptr noundef @c__1)
  %899 = load ptr, ptr %25, align 8, !tbaa !5
  %900 = load i32, ptr %47, align 4, !tbaa !9
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds double, ptr %899, i64 %901
  %903 = load double, ptr %902, align 8, !tbaa !11
  store double %903, ptr %58, align 8, !tbaa !11
  %904 = load i32, ptr %51, align 4, !tbaa !9
  %905 = add nsw i32 %904, 1
  store i32 %905, ptr %51, align 4, !tbaa !9
  br label %207

906:                                              ; preds = %877, %868, %855
  %907 = load ptr, ptr %16, align 8, !tbaa !5
  %908 = load i32, ptr %907, align 4, !tbaa !9
  store i32 %908, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %909

909:                                              ; preds = %1020, %906
  %910 = load i32, ptr %46, align 4, !tbaa !9
  %911 = load i32, ptr %34, align 4, !tbaa !9
  %912 = icmp sle i32 %910, %911
  br i1 %912, label %913, label %1023

913:                                              ; preds = %909
  %914 = load ptr, ptr %27, align 8, !tbaa !5
  %915 = load i32, ptr %46, align 4, !tbaa !9
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds double, ptr %914, i64 %916
  %918 = load double, ptr %917, align 8, !tbaa !11
  %919 = load double, ptr %45, align 8, !tbaa !11
  %920 = fcmp ogt double %918, %919
  br i1 %920, label %921, label %969

921:                                              ; preds = %913
  %922 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %922, ptr %35, align 4, !tbaa !9
  %923 = load ptr, ptr %26, align 8, !tbaa !5
  %924 = load i32, ptr %35, align 4, !tbaa !9
  %925 = sext i32 %924 to i64
  %926 = getelementptr inbounds %struct.doublecomplex, ptr %923, i64 %925
  %927 = getelementptr inbounds %struct.doublecomplex, ptr %926, i32 0, i32 0
  %928 = load double, ptr %927, align 8, !tbaa !15
  store double %928, ptr %38, align 8, !tbaa !11
  %929 = load double, ptr %38, align 8, !tbaa !11
  %930 = fcmp oge double %929, 0.000000e+00
  br i1 %930, label %931, label %933

931:                                              ; preds = %921
  %932 = load double, ptr %38, align 8, !tbaa !11
  br label %936

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

936:                                              ; preds = %933, %931
  %937 = phi double [ %932, %931 ], [ %935, %933 ]
  %938 = load ptr, ptr %26, align 8, !tbaa !5
  %939 = load i32, ptr %46, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds %struct.doublecomplex, ptr %938, i64 %940
  %942 = call { double, double } @Cd(ptr noundef %941)
  %943 = extractvalue { double, double } %942, 0
  %944 = extractvalue { double, double } %942, 1
  store double %944, ptr %39, align 8, !tbaa !11
  %945 = load double, ptr %39, align 8, !tbaa !11
  %946 = fcmp oge double %945, 0.000000e+00
  br i1 %946, label %947, label %949

947:                                              ; preds = %936
  %948 = load double, ptr %39, align 8, !tbaa !11
  br label %952

949:                                              ; preds = %936
  %950 = load double, ptr %39, align 8, !tbaa !11
  %951 = fneg double %950
  br label %952

952:                                              ; preds = %949, %947
  %953 = phi double [ %948, %947 ], [ %951, %949 ]
  %954 = fadd double %937, %953
  %955 = load i32, ptr %56, align 4, !tbaa !9
  %956 = sitofp i32 %955 to double
  %957 = load double, ptr %59, align 8, !tbaa !11
  %958 = fmul double %956, %957
  %959 = load ptr, ptr %27, align 8, !tbaa !5
  %960 = load i32, ptr %46, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds double, ptr %959, i64 %961
  %963 = load double, ptr %962, align 8, !tbaa !11
  %964 = call double @llvm.fmuladd.f64(double %958, double %963, double %954)
  %965 = load ptr, ptr %27, align 8, !tbaa !5
  %966 = load i32, ptr %46, align 4, !tbaa !9
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds double, ptr %965, i64 %967
  store double %964, ptr %968, align 8, !tbaa !11
  br label %1019

969:                                              ; preds = %913
  %970 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %970, ptr %35, align 4, !tbaa !9
  %971 = load ptr, ptr %26, align 8, !tbaa !5
  %972 = load i32, ptr %35, align 4, !tbaa !9
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds %struct.doublecomplex, ptr %971, i64 %973
  %975 = getelementptr inbounds %struct.doublecomplex, ptr %974, i32 0, i32 0
  %976 = load double, ptr %975, align 8, !tbaa !15
  store double %976, ptr %38, align 8, !tbaa !11
  %977 = load double, ptr %38, align 8, !tbaa !11
  %978 = fcmp oge double %977, 0.000000e+00
  br i1 %978, label %979, label %981

979:                                              ; preds = %969
  %980 = load double, ptr %38, align 8, !tbaa !11
  br label %984

981:                                              ; preds = %969
  %982 = load double, ptr %38, align 8, !tbaa !11
  %983 = fneg double %982
  br label %984

984:                                              ; preds = %981, %979
  %985 = phi double [ %980, %979 ], [ %983, %981 ]
  %986 = load ptr, ptr %26, align 8, !tbaa !5
  %987 = load i32, ptr %46, align 4, !tbaa !9
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds %struct.doublecomplex, ptr %986, i64 %988
  %990 = call { double, double } @Cd(ptr noundef %989)
  %991 = extractvalue { double, double } %990, 0
  %992 = extractvalue { double, double } %990, 1
  store double %992, ptr %39, align 8, !tbaa !11
  %993 = load double, ptr %39, align 8, !tbaa !11
  %994 = fcmp oge double %993, 0.000000e+00
  br i1 %994, label %995, label %997

995:                                              ; preds = %984
  %996 = load double, ptr %39, align 8, !tbaa !11
  br label %1000

997:                                              ; preds = %984
  %998 = load double, ptr %39, align 8, !tbaa !11
  %999 = fneg double %998
  br label %1000

1000:                                             ; preds = %997, %995
  %1001 = phi double [ %996, %995 ], [ %999, %997 ]
  %1002 = fadd double %985, %1001
  %1003 = load i32, ptr %56, align 4, !tbaa !9
  %1004 = sitofp i32 %1003 to double
  %1005 = load double, ptr %59, align 8, !tbaa !11
  %1006 = fmul double %1004, %1005
  %1007 = load ptr, ptr %27, align 8, !tbaa !5
  %1008 = load i32, ptr %46, align 4, !tbaa !9
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds double, ptr %1007, i64 %1009
  %1011 = load double, ptr %1010, align 8, !tbaa !11
  %1012 = call double @llvm.fmuladd.f64(double %1006, double %1011, double %1002)
  %1013 = load double, ptr %44, align 8, !tbaa !11
  %1014 = fadd double %1012, %1013
  %1015 = load ptr, ptr %27, align 8, !tbaa !5
  %1016 = load i32, ptr %46, align 4, !tbaa !9
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds double, ptr %1015, i64 %1017
  store double %1014, ptr %1018, align 8, !tbaa !11
  br label %1019

1019:                                             ; preds = %1000, %952
  br label %1020

1020:                                             ; preds = %1019
  %1021 = load i32, ptr %46, align 4, !tbaa !9
  %1022 = add nsw i32 %1021, 1
  store i32 %1022, ptr %46, align 4, !tbaa !9
  br label %909, !llvm.loop !24

1023:                                             ; preds = %909
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %1024

1024:                                             ; preds = %1174, %1023
  %1025 = load ptr, ptr %16, align 8, !tbaa !5
  %1026 = load ptr, ptr %26, align 8, !tbaa !5
  %1027 = load ptr, ptr %16, align 8, !tbaa !5
  %1028 = load i32, ptr %1027, align 4, !tbaa !9
  %1029 = add nsw i32 %1028, 1
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds %struct.doublecomplex, ptr %1026, i64 %1030
  %1032 = load ptr, ptr %26, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.doublecomplex, ptr %1032, i64 1
  %1034 = load ptr, ptr %24, align 8, !tbaa !5
  %1035 = load i32, ptr %47, align 4, !tbaa !9
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds double, ptr %1034, i64 %1036
  %1038 = getelementptr inbounds [3 x i32], ptr %50, i64 0, i64 0
  call void @zlacn2_(ptr noundef %1025, ptr noundef %1031, ptr noundef %1033, ptr noundef %1037, ptr noundef %43, ptr noundef %1038)
  %1039 = load i32, ptr %43, align 4, !tbaa !9
  %1040 = icmp ne i32 %1039, 0
  br i1 %1040, label %1041, label %1175

1041:                                             ; preds = %1024
  %1042 = load i32, ptr %43, align 4, !tbaa !9
  %1043 = icmp eq i32 %1042, 1
  br i1 %1043, label %1044, label %1107

1044:                                             ; preds = %1041
  %1045 = load ptr, ptr %15, align 8, !tbaa !5
  %1046 = load ptr, ptr %16, align 8, !tbaa !5
  %1047 = load ptr, ptr %19, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.doublecomplex, ptr %1047, i64 1
  %1049 = load ptr, ptr %26, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %1049, i64 1
  %1051 = load ptr, ptr %16, align 8, !tbaa !5
  %1052 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zpptrs_(ptr noundef %1045, ptr noundef %1046, ptr noundef @c__1, ptr noundef %1048, ptr noundef %1050, ptr noundef %1051, ptr noundef %1052)
  %1053 = load ptr, ptr %16, align 8, !tbaa !5
  %1054 = load i32, ptr %1053, align 4, !tbaa !9
  store i32 %1054, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %1055

1055:                                             ; preds = %1103, %1044
  %1056 = load i32, ptr %46, align 4, !tbaa !9
  %1057 = load i32, ptr %34, align 4, !tbaa !9
  %1058 = icmp sle i32 %1056, %1057
  br i1 %1058, label %1059, label %1106

1059:                                             ; preds = %1055
  %1060 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1060, ptr %35, align 4, !tbaa !9
  %1061 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1061, ptr %36, align 4, !tbaa !9
  %1062 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1062, ptr %37, align 4, !tbaa !9
  %1063 = load ptr, ptr %27, align 8, !tbaa !5
  %1064 = load i32, ptr %36, align 4, !tbaa !9
  %1065 = sext i32 %1064 to i64
  %1066 = getelementptr inbounds double, ptr %1063, i64 %1065
  %1067 = load double, ptr %1066, align 8, !tbaa !11
  %1068 = load ptr, ptr %26, align 8, !tbaa !5
  %1069 = load i32, ptr %37, align 4, !tbaa !9
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds %struct.doublecomplex, ptr %1068, i64 %1070
  %1072 = getelementptr inbounds %struct.doublecomplex, ptr %1071, i32 0, i32 0
  %1073 = load double, ptr %1072, align 8, !tbaa !15
  %1074 = fmul double %1067, %1073
  %1075 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1074, ptr %1075, align 8, !tbaa !15
  %1076 = load ptr, ptr %27, align 8, !tbaa !5
  %1077 = load i32, ptr %36, align 4, !tbaa !9
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds double, ptr %1076, i64 %1078
  %1080 = load double, ptr %1079, align 8, !tbaa !11
  %1081 = load ptr, ptr %26, align 8, !tbaa !5
  %1082 = load i32, ptr %37, align 4, !tbaa !9
  %1083 = sext i32 %1082 to i64
  %1084 = getelementptr inbounds %struct.doublecomplex, ptr %1081, i64 %1083
  %1085 = getelementptr inbounds %struct.doublecomplex, ptr %1084, i32 0, i32 1
  %1086 = load double, ptr %1085, align 8, !tbaa !17
  %1087 = fmul double %1080, %1086
  %1088 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1087, ptr %1088, align 8, !tbaa !17
  %1089 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1090 = load double, ptr %1089, align 8, !tbaa !15
  %1091 = load ptr, ptr %26, align 8, !tbaa !5
  %1092 = load i32, ptr %35, align 4, !tbaa !9
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds %struct.doublecomplex, ptr %1091, i64 %1093
  %1095 = getelementptr inbounds %struct.doublecomplex, ptr %1094, i32 0, i32 0
  store double %1090, ptr %1095, align 8, !tbaa !15
  %1096 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1097 = load double, ptr %1096, align 8, !tbaa !17
  %1098 = load ptr, ptr %26, align 8, !tbaa !5
  %1099 = load i32, ptr %35, align 4, !tbaa !9
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds %struct.doublecomplex, ptr %1098, i64 %1100
  %1102 = getelementptr inbounds %struct.doublecomplex, ptr %1101, i32 0, i32 1
  store double %1097, ptr %1102, align 8, !tbaa !17
  br label %1103

1103:                                             ; preds = %1059
  %1104 = load i32, ptr %46, align 4, !tbaa !9
  %1105 = add nsw i32 %1104, 1
  store i32 %1105, ptr %46, align 4, !tbaa !9
  br label %1055, !llvm.loop !25

1106:                                             ; preds = %1055
  br label %1174

1107:                                             ; preds = %1041
  %1108 = load i32, ptr %43, align 4, !tbaa !9
  %1109 = icmp eq i32 %1108, 2
  br i1 %1109, label %1110, label %1173

1110:                                             ; preds = %1107
  %1111 = load ptr, ptr %16, align 8, !tbaa !5
  %1112 = load i32, ptr %1111, align 4, !tbaa !9
  store i32 %1112, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %1113

1113:                                             ; preds = %1161, %1110
  %1114 = load i32, ptr %46, align 4, !tbaa !9
  %1115 = load i32, ptr %34, align 4, !tbaa !9
  %1116 = icmp sle i32 %1114, %1115
  br i1 %1116, label %1117, label %1164

1117:                                             ; preds = %1113
  %1118 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1118, ptr %35, align 4, !tbaa !9
  %1119 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1119, ptr %36, align 4, !tbaa !9
  %1120 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1120, ptr %37, align 4, !tbaa !9
  %1121 = load ptr, ptr %27, align 8, !tbaa !5
  %1122 = load i32, ptr %36, align 4, !tbaa !9
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds double, ptr %1121, i64 %1123
  %1125 = load double, ptr %1124, align 8, !tbaa !11
  %1126 = load ptr, ptr %26, align 8, !tbaa !5
  %1127 = load i32, ptr %37, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds %struct.doublecomplex, ptr %1126, i64 %1128
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %1129, i32 0, i32 0
  %1131 = load double, ptr %1130, align 8, !tbaa !15
  %1132 = fmul double %1125, %1131
  %1133 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1132, ptr %1133, align 8, !tbaa !15
  %1134 = load ptr, ptr %27, align 8, !tbaa !5
  %1135 = load i32, ptr %36, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds double, ptr %1134, i64 %1136
  %1138 = load double, ptr %1137, align 8, !tbaa !11
  %1139 = load ptr, ptr %26, align 8, !tbaa !5
  %1140 = load i32, ptr %37, align 4, !tbaa !9
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds %struct.doublecomplex, ptr %1139, i64 %1141
  %1143 = getelementptr inbounds %struct.doublecomplex, ptr %1142, i32 0, i32 1
  %1144 = load double, ptr %1143, align 8, !tbaa !17
  %1145 = fmul double %1138, %1144
  %1146 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1145, ptr %1146, align 8, !tbaa !17
  %1147 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1148 = load double, ptr %1147, align 8, !tbaa !15
  %1149 = load ptr, ptr %26, align 8, !tbaa !5
  %1150 = load i32, ptr %35, align 4, !tbaa !9
  %1151 = sext i32 %1150 to i64
  %1152 = getelementptr inbounds %struct.doublecomplex, ptr %1149, i64 %1151
  %1153 = getelementptr inbounds %struct.doublecomplex, ptr %1152, i32 0, i32 0
  store double %1148, ptr %1153, align 8, !tbaa !15
  %1154 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1155 = load double, ptr %1154, align 8, !tbaa !17
  %1156 = load ptr, ptr %26, align 8, !tbaa !5
  %1157 = load i32, ptr %35, align 4, !tbaa !9
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds %struct.doublecomplex, ptr %1156, i64 %1158
  %1160 = getelementptr inbounds %struct.doublecomplex, ptr %1159, i32 0, i32 1
  store double %1155, ptr %1160, align 8, !tbaa !17
  br label %1161

1161:                                             ; preds = %1117
  %1162 = load i32, ptr %46, align 4, !tbaa !9
  %1163 = add nsw i32 %1162, 1
  store i32 %1163, ptr %46, align 4, !tbaa !9
  br label %1113, !llvm.loop !26

1164:                                             ; preds = %1113
  %1165 = load ptr, ptr %15, align 8, !tbaa !5
  %1166 = load ptr, ptr %16, align 8, !tbaa !5
  %1167 = load ptr, ptr %19, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.doublecomplex, ptr %1167, i64 1
  %1169 = load ptr, ptr %26, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.doublecomplex, ptr %1169, i64 1
  %1171 = load ptr, ptr %16, align 8, !tbaa !5
  %1172 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zpptrs_(ptr noundef %1165, ptr noundef %1166, ptr noundef @c__1, ptr noundef %1168, ptr noundef %1170, ptr noundef %1171, ptr noundef %1172)
  br label %1173

1173:                                             ; preds = %1164, %1107
  br label %1174

1174:                                             ; preds = %1173, %1106
  br label %1024

1175:                                             ; preds = %1024
  store double 0.000000e+00, ptr %58, align 8, !tbaa !11
  %1176 = load ptr, ptr %16, align 8, !tbaa !5
  %1177 = load i32, ptr %1176, align 4, !tbaa !9
  store i32 %1177, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %1178

1178:                                             ; preds = %1234, %1175
  %1179 = load i32, ptr %46, align 4, !tbaa !9
  %1180 = load i32, ptr %34, align 4, !tbaa !9
  %1181 = icmp sle i32 %1179, %1180
  br i1 %1181, label %1182, label %1237

1182:                                             ; preds = %1178
  %1183 = load i32, ptr %46, align 4, !tbaa !9
  %1184 = load i32, ptr %47, align 4, !tbaa !9
  %1185 = load i32, ptr %31, align 4, !tbaa !9
  %1186 = mul nsw i32 %1184, %1185
  %1187 = add nsw i32 %1183, %1186
  store i32 %1187, ptr %35, align 4, !tbaa !9
  %1188 = load double, ptr %58, align 8, !tbaa !11
  store double %1188, ptr %40, align 8, !tbaa !11
  %1189 = load ptr, ptr %22, align 8, !tbaa !5
  %1190 = load i32, ptr %35, align 4, !tbaa !9
  %1191 = sext i32 %1190 to i64
  %1192 = getelementptr inbounds %struct.doublecomplex, ptr %1189, i64 %1191
  %1193 = getelementptr inbounds %struct.doublecomplex, ptr %1192, i32 0, i32 0
  %1194 = load double, ptr %1193, align 8, !tbaa !15
  store double %1194, ptr %38, align 8, !tbaa !11
  %1195 = load double, ptr %38, align 8, !tbaa !11
  %1196 = fcmp oge double %1195, 0.000000e+00
  br i1 %1196, label %1197, label %1199

1197:                                             ; preds = %1182
  %1198 = load double, ptr %38, align 8, !tbaa !11
  br label %1202

1199:                                             ; preds = %1182
  %1200 = load double, ptr %38, align 8, !tbaa !11
  %1201 = fneg double %1200
  br label %1202

1202:                                             ; preds = %1199, %1197
  %1203 = phi double [ %1198, %1197 ], [ %1201, %1199 ]
  %1204 = load ptr, ptr %22, align 8, !tbaa !5
  %1205 = load i32, ptr %46, align 4, !tbaa !9
  %1206 = load i32, ptr %47, align 4, !tbaa !9
  %1207 = load i32, ptr %31, align 4, !tbaa !9
  %1208 = mul nsw i32 %1206, %1207
  %1209 = add nsw i32 %1205, %1208
  %1210 = sext i32 %1209 to i64
  %1211 = getelementptr inbounds %struct.doublecomplex, ptr %1204, i64 %1210
  %1212 = call { double, double } @Cd(ptr noundef %1211)
  %1213 = extractvalue { double, double } %1212, 0
  %1214 = extractvalue { double, double } %1212, 1
  store double %1214, ptr %39, align 8, !tbaa !11
  %1215 = load double, ptr %39, align 8, !tbaa !11
  %1216 = fcmp oge double %1215, 0.000000e+00
  br i1 %1216, label %1217, label %1219

1217:                                             ; preds = %1202
  %1218 = load double, ptr %39, align 8, !tbaa !11
  br label %1222

1219:                                             ; preds = %1202
  %1220 = load double, ptr %39, align 8, !tbaa !11
  %1221 = fneg double %1220
  br label %1222

1222:                                             ; preds = %1219, %1217
  %1223 = phi double [ %1218, %1217 ], [ %1221, %1219 ]
  %1224 = fadd double %1203, %1223
  store double %1224, ptr %41, align 8, !tbaa !11
  %1225 = load double, ptr %40, align 8, !tbaa !11
  %1226 = load double, ptr %41, align 8, !tbaa !11
  %1227 = fcmp oge double %1225, %1226
  br i1 %1227, label %1228, label %1230

1228:                                             ; preds = %1222
  %1229 = load double, ptr %40, align 8, !tbaa !11
  br label %1232

1230:                                             ; preds = %1222
  %1231 = load double, ptr %41, align 8, !tbaa !11
  br label %1232

1232:                                             ; preds = %1230, %1228
  %1233 = phi double [ %1229, %1228 ], [ %1231, %1230 ]
  store double %1233, ptr %58, align 8, !tbaa !11
  br label %1234

1234:                                             ; preds = %1232
  %1235 = load i32, ptr %46, align 4, !tbaa !9
  %1236 = add nsw i32 %1235, 1
  store i32 %1236, ptr %46, align 4, !tbaa !9
  br label %1178, !llvm.loop !27

1237:                                             ; preds = %1178
  %1238 = load double, ptr %58, align 8, !tbaa !11
  %1239 = fcmp une double %1238, 0.000000e+00
  br i1 %1239, label %1240, label %1248

1240:                                             ; preds = %1237
  %1241 = load double, ptr %58, align 8, !tbaa !11
  %1242 = load ptr, ptr %24, align 8, !tbaa !5
  %1243 = load i32, ptr %47, align 4, !tbaa !9
  %1244 = sext i32 %1243 to i64
  %1245 = getelementptr inbounds double, ptr %1242, i64 %1244
  %1246 = load double, ptr %1245, align 8, !tbaa !11
  %1247 = fdiv double %1246, %1241
  store double %1247, ptr %1245, align 8, !tbaa !11
  br label %1248

1248:                                             ; preds = %1240, %1237
  br label %1249

1249:                                             ; preds = %1248
  %1250 = load i32, ptr %47, align 4, !tbaa !9
  %1251 = add nsw i32 %1250, 1
  store i32 %1251, ptr %47, align 4, !tbaa !9
  br label %202, !llvm.loop !28

1252:                                             ; preds = %202
  store i32 1, ptr %60, align 4
  br label %1253

1253:                                             ; preds = %1252, %186, %154
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) #3

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

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

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

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

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

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

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

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


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

%struct.doublecomplex = type { double, double }

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

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

33:                                               ; preds = %14
  %34 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %.not463 = icmp eq i32 %34, 0
  br i1 %.not463, label %.thread.sink.split, label %35

35:                                               ; preds = %33, %14
  %36 = load i32, ptr %1, align 4, !tbaa !5
  %37 = icmp slt i32 %36, 0
  br i1 %37, label %.thread.sink.split, label %38

38:                                               ; preds = %35
  %39 = load i32, ptr %2, align 4, !tbaa !5
  %40 = icmp slt i32 %39, 0
  br i1 %40, label %.thread.sink.split, label %41

41:                                               ; preds = %38
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %36, i32 1)
  %43 = icmp slt i32 %42, %spec.select
  br i1 %43, label %.thread.sink.split, label %44

44:                                               ; preds = %41
  %45 = load i32, ptr %8, align 4, !tbaa !5
  %46 = icmp slt i32 %45, %spec.select
  br i1 %46, label %.thread.sink.split, label %47

47:                                               ; preds = %44
  %.pr = load i32, ptr %13, align 4, !tbaa !5
  %.not464 = icmp eq i32 %.pr, 0
  br i1 %.not464, label %51, label %.thread

.thread.sink.split:                               ; preds = %44, %41, %38, %35, %33
  %.sink = phi i32 [ -1, %33 ], [ -2, %35 ], [ -3, %38 ], [ -7, %41 ], [ -9, %44 ]
  store i32 %.sink, ptr %13, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %47
  %48 = phi i32 [ %.pr, %47 ], [ %.sink, %.thread.sink.split ]
  %49 = sub nsw i32 0, %48
  store i32 %49, ptr %17, align 4, !tbaa !5
  %50 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, i32 noundef 6) #6
  br label %.loopexit

51:                                               ; preds = %47
  %52 = icmp eq i32 %36, 0
  %.not477553 = icmp eq i32 %39, 0
  br i1 %52, label %54, label %53

53:                                               ; preds = %51
  br i1 %.not477553, label %.loopexit, label %77

54:                                               ; preds = %51
  br i1 %.not477553, label %.loopexit, label %.lr.ph556.preheader

.lr.ph556.preheader:                              ; preds = %54
  %55 = add nuw i32 %39, 1
  %wide.trip.count626 = zext i32 %55 to i64
  %56 = zext nneg i32 %39 to i64
  %min.iters.check699 = icmp ult i32 %39, 4
  %57 = sub i64 %16, %15
  %diff.check = icmp ult i64 %57, 32
  %or.cond710 = or i1 %min.iters.check699, %diff.check
  br i1 %or.cond710, label %.lr.ph556.preheader720, label %vector.ph700

vector.ph700:                                     ; preds = %.lr.ph556.preheader
  %n.vec702 = and i64 %56, 2147483644
  %ind.end703 = or disjoint i64 %n.vec702, 1
  br label %vector.body705

vector.body705:                                   ; preds = %vector.body705, %vector.ph700
  %index706 = phi i64 [ 0, %vector.ph700 ], [ %index.next708, %vector.body705 ]
  %58 = getelementptr double, ptr %9, i64 %index706
  %59 = getelementptr inbounds i8, ptr %58, i64 16
  store <2 x double> zeroinitializer, ptr %58, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %59, align 8, !tbaa !9
  %60 = getelementptr double, ptr %10, i64 %index706
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  store <2 x double> zeroinitializer, ptr %60, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %61, align 8, !tbaa !9
  %index.next708 = add nuw i64 %index706, 4
  %62 = icmp eq i64 %index.next708, %n.vec702
  br i1 %62, label %middle.block697, label %vector.body705, !llvm.loop !11

middle.block697:                                  ; preds = %vector.body705
  %cmp.n709 = icmp eq i64 %n.vec702, %56
  br i1 %cmp.n709, label %.loopexit, label %.lr.ph556.preheader720

.lr.ph556.preheader720:                           ; preds = %middle.block697, %.lr.ph556.preheader
  %indvars.iv623.ph = phi i64 [ 1, %.lr.ph556.preheader ], [ %ind.end703, %middle.block697 ]
  %63 = sub nsw i64 %wide.trip.count626, %indvars.iv623.ph
  %64 = zext nneg i32 %39 to i64
  %65 = sub nsw i64 %64, %indvars.iv623.ph
  %xtraiter736 = and i64 %63, 3
  %lcmp.mod737.not = icmp eq i64 %xtraiter736, 0
  br i1 %lcmp.mod737.not, label %.lr.ph556.prol.loopexit, label %.lr.ph556.prol

.lr.ph556.prol:                                   ; preds = %.lr.ph556.preheader720, %.lr.ph556.prol
  %indvars.iv623.prol = phi i64 [ %indvars.iv.next624.prol, %.lr.ph556.prol ], [ %indvars.iv623.ph, %.lr.ph556.preheader720 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph556.prol ], [ 0, %.lr.ph556.preheader720 ]
  %66 = getelementptr inbounds double, ptr %28, i64 %indvars.iv623.prol
  store double 0.000000e+00, ptr %66, align 8, !tbaa !9
  %67 = getelementptr inbounds double, ptr %29, i64 %indvars.iv623.prol
  store double 0.000000e+00, ptr %67, align 8, !tbaa !9
  %indvars.iv.next624.prol = add nuw nsw i64 %indvars.iv623.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter736
  br i1 %prol.iter.cmp.not, label %.lr.ph556.prol.loopexit, label %.lr.ph556.prol, !llvm.loop !15

.lr.ph556.prol.loopexit:                          ; preds = %.lr.ph556.prol, %.lr.ph556.preheader720
  %indvars.iv623.unr = phi i64 [ %indvars.iv623.ph, %.lr.ph556.preheader720 ], [ %indvars.iv.next624.prol, %.lr.ph556.prol ]
  %68 = icmp ult i64 %65, 3
  br i1 %68, label %.loopexit, label %.lr.ph556

.lr.ph556:                                        ; preds = %.lr.ph556.prol.loopexit, %.lr.ph556
  %indvars.iv623 = phi i64 [ %indvars.iv.next624.3, %.lr.ph556 ], [ %indvars.iv623.unr, %.lr.ph556.prol.loopexit ]
  %69 = getelementptr inbounds double, ptr %28, i64 %indvars.iv623
  store double 0.000000e+00, ptr %69, align 8, !tbaa !9
  %70 = getelementptr inbounds double, ptr %29, i64 %indvars.iv623
  store double 0.000000e+00, ptr %70, align 8, !tbaa !9
  %71 = getelementptr double, ptr %9, i64 %indvars.iv623
  store double 0.000000e+00, ptr %71, align 8, !tbaa !9
  %72 = getelementptr double, ptr %10, i64 %indvars.iv623
  store double 0.000000e+00, ptr %72, align 8, !tbaa !9
  %indvars.iv.next624.1 = add nuw nsw i64 %indvars.iv623, 2
  %73 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next624.1
  store double 0.000000e+00, ptr %73, align 8, !tbaa !9
  %74 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next624.1
  store double 0.000000e+00, ptr %74, align 8, !tbaa !9
  %indvars.iv.next624.2 = add nuw nsw i64 %indvars.iv623, 3
  %75 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next624.2
  store double 0.000000e+00, ptr %75, align 8, !tbaa !9
  %76 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next624.2
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %indvars.iv.next624.3 = add nuw nsw i64 %indvars.iv623, 4
  %exitcond627.not.3 = icmp eq i64 %indvars.iv.next624.3, %wide.trip.count626
  br i1 %exitcond627.not.3, label %.loopexit, label %.lr.ph556, !llvm.loop !17

77:                                               ; preds = %53
  %78 = add nuw nsw i32 %36, 1
  %79 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #6
  %80 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #6
  %81 = uitofp nneg i32 %78 to double
  %82 = fmul double %80, %81
  %83 = fdiv double %82, %79
  %84 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep549 = getelementptr i8, ptr %24, i64 16
  %.not465551 = icmp slt i32 %84, 1
  br i1 %.not465551, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %77
  %invariant.gep520 = getelementptr i8, ptr %27, i64 16
  %invariant.gep = getelementptr i8, ptr %3, i64 -32
  %85 = fmul double %79, %81
  %86 = sext i32 %22 to i64
  %87 = sext i32 %25 to i64
  %88 = zext nneg i32 %84 to i64
  %scevgep = getelementptr i8, ptr %11, i64 -16
  %scevgep667 = getelementptr i8, ptr %12, i64 -8
  %scevgep671 = getelementptr i8, ptr %11, i64 -16
  %scevgep673 = getelementptr i8, ptr %12, i64 -8
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge547.thread
  %indvars.iv620 = phi i64 [ 1, %.preheader.lr.ph ], [ %indvars.iv.next621, %._crit_edge547.thread ]
  %89 = getelementptr inbounds double, ptr %29, i64 %indvars.iv620
  %90 = mul nsw i64 %indvars.iv620, %86
  %gep550 = getelementptr %struct.doublecomplex, ptr %invariant.gep549, i64 %90
  %91 = mul nsw i64 %indvars.iv620, %87
  %gep521 = getelementptr %struct.doublecomplex, ptr %invariant.gep520, i64 %91
  %invariant.gep642 = getelementptr %struct.doublecomplex, ptr %24, i64 %90
  %invariant.gep646 = getelementptr %struct.doublecomplex, ptr %27, i64 %91
  %invariant.gep644 = getelementptr %struct.doublecomplex, ptr %27, i64 %91
  %invariant.gep650 = getelementptr %struct.doublecomplex, ptr %27, i64 %91
  %invariant.gep648 = getelementptr %struct.doublecomplex, ptr %27, i64 %91
  br label %92

92:                                               ; preds = %.preheader, %264
  %.0446 = phi i32 [ %266, %264 ], [ 1, %.preheader ]
  %.0 = phi double [ %265, %264 ], [ 3.000000e+00, %.preheader ]
  call void @zcopy_(ptr noundef nonnull %1, ptr noundef %gep550, ptr noundef nonnull @c__1, ptr noundef %11, ptr noundef nonnull @c__1) #6
  store <2 x double> <double -1.000000e+00, double 0.000000e+00>, ptr %18, align 16, !tbaa !9
  call void @zhpmv_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %18, ptr noundef %3, ptr noundef %gep521, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b1, ptr noundef %11, ptr noundef nonnull @c__1) #6
  %93 = load i32, ptr %1, align 4, !tbaa !5
  %.not466486 = icmp slt i32 %93, 1
  br i1 %.not466486, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %92
  %94 = add nuw i32 %93, 1
  %wide.trip.count = zext i32 %94 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %gep643 = getelementptr %struct.doublecomplex, ptr %invariant.gep642, i64 %indvars.iv
  %95 = load double, ptr %gep643, align 8, !tbaa !18
  %96 = call { double, double } @Cd(ptr noundef nonnull %gep643)
  %97 = extractvalue { double, double } %96, 1
  %98 = insertelement <2 x double> poison, double %95, i64 0
  %99 = insertelement <2 x double> %98, double %97, i64 1
  %100 = fcmp oge <2 x double> %99, zeroinitializer
  %101 = fneg <2 x double> %99
  %102 = select <2 x i1> %100, <2 x double> %99, <2 x double> %101
  %shift = shufflevector <2 x double> %102, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %103 = fadd <2 x double> %102, %shift
  %104 = extractelement <2 x double> %103, i64 0
  %105 = getelementptr inbounds double, ptr %31, i64 %indvars.iv
  store double %104, ptr %105, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph, %92
  %106 = load i32, ptr %1, align 4, !tbaa !5
  %.not467508 = icmp slt i32 %106, 1
  br i1 %.not, label %166, label %107

107:                                              ; preds = %._crit_edge
  br i1 %.not467508, label %._crit_edge518, label %.lr.ph499.preheader

.lr.ph499.preheader:                              ; preds = %107
  %108 = add nuw i32 %106, 1
  %wide.trip.count578 = zext i32 %108 to i64
  br label %.lr.ph499

.lr.ph499:                                        ; preds = %.lr.ph499.preheader, %._crit_edge494
  %indvars.iv575 = phi i64 [ 1, %.lr.ph499.preheader ], [ %indvars.iv.next576, %._crit_edge494 ]
  %.0442497 = phi i32 [ 1, %.lr.ph499.preheader ], [ %156, %._crit_edge494 ]
  %gep647 = getelementptr %struct.doublecomplex, ptr %invariant.gep646, i64 %indvars.iv575
  %109 = load double, ptr %gep647, align 8, !tbaa !18
  %110 = fcmp oge double %109, 0.000000e+00
  %111 = fneg double %109
  %112 = select i1 %110, double %109, double %111
  %113 = call { double, double } @Cd(ptr noundef nonnull %gep647)
  %114 = extractvalue { double, double } %113, 1
  %115 = fcmp oge double %114, 0.000000e+00
  %116 = fneg double %114
  %117 = select i1 %115, double %114, double %116
  %118 = fadd double %112, %117
  %.not476.not488 = icmp ugt i64 %indvars.iv575, 1
  br i1 %.not476.not488, label %.lr.ph493.preheader, label %._crit_edge494

.lr.ph493.preheader:                              ; preds = %.lr.ph499
  %119 = zext i32 %.0442497 to i64
  br label %.lr.ph493

.lr.ph493:                                        ; preds = %.lr.ph493.preheader, %.lr.ph493
  %indvars.iv568 = phi i64 [ 1, %.lr.ph493.preheader ], [ %indvars.iv.next569, %.lr.ph493 ]
  %indvars.iv566 = phi i64 [ %119, %.lr.ph493.preheader ], [ %indvars.iv.next567, %.lr.ph493 ]
  %.0447490 = phi double [ 0.000000e+00, %.lr.ph493.preheader ], [ %154, %.lr.ph493 ]
  %120 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv566
  %121 = load double, ptr %120, align 8, !tbaa !18
  %122 = call { double, double } @Cd(ptr noundef nonnull %120)
  %123 = extractvalue { double, double } %122, 1
  %124 = insertelement <2 x double> poison, double %121, i64 0
  %125 = insertelement <2 x double> %124, double %123, i64 1
  %126 = fcmp oge <2 x double> %125, zeroinitializer
  %127 = fneg <2 x double> %125
  %128 = select <2 x i1> %126, <2 x double> %125, <2 x double> %127
  %shift711 = shufflevector <2 x double> %128, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %129 = fadd <2 x double> %128, %shift711
  %130 = extractelement <2 x double> %129, i64 0
  %131 = getelementptr inbounds double, ptr %31, i64 %indvars.iv568
  %132 = load double, ptr %131, align 8, !tbaa !9
  %133 = call double @llvm.fmuladd.f64(double %130, double %118, double %132)
  store double %133, ptr %131, align 8, !tbaa !9
  %134 = load double, ptr %120, align 8, !tbaa !18
  %135 = call { double, double } @Cd(ptr noundef nonnull %120)
  %136 = extractvalue { double, double } %135, 1
  %137 = insertelement <2 x double> poison, double %134, i64 0
  %138 = insertelement <2 x double> %137, double %136, i64 1
  %139 = fcmp oge <2 x double> %138, zeroinitializer
  %140 = fneg <2 x double> %138
  %141 = select <2 x i1> %139, <2 x double> %138, <2 x double> %140
  %shift712 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %142 = fadd <2 x double> %141, %shift712
  %143 = extractelement <2 x double> %142, i64 0
  %gep645 = getelementptr %struct.doublecomplex, ptr %invariant.gep644, i64 %indvars.iv568
  %144 = load double, ptr %gep645, align 8, !tbaa !18
  %145 = call { double, double } @Cd(ptr noundef nonnull %gep645)
  %146 = extractvalue { double, double } %145, 1
  %147 = insertelement <2 x double> poison, double %144, i64 0
  %148 = insertelement <2 x double> %147, double %146, i64 1
  %149 = fcmp oge <2 x double> %148, zeroinitializer
  %150 = fneg <2 x double> %148
  %151 = select <2 x i1> %149, <2 x double> %148, <2 x double> %150
  %shift713 = shufflevector <2 x double> %151, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %152 = fadd <2 x double> %151, %shift713
  %153 = extractelement <2 x double> %152, i64 0
  %154 = call double @llvm.fmuladd.f64(double %143, double %153, double %.0447490)
  %indvars.iv.next567 = add nuw nsw i64 %indvars.iv566, 1
  %indvars.iv.next569 = add nuw nsw i64 %indvars.iv568, 1
  %exitcond574.not = icmp eq i64 %indvars.iv.next569, %indvars.iv575
  br i1 %exitcond574.not, label %._crit_edge494, label %.lr.ph493, !llvm.loop !21

._crit_edge494:                                   ; preds = %.lr.ph493, %.lr.ph499
  %.0447.lcssa = phi double [ 0.000000e+00, %.lr.ph499 ], [ %154, %.lr.ph493 ]
  %155 = trunc nuw nsw i64 %indvars.iv575 to i32
  %156 = add nuw nsw i32 %.0442497, %155
  %157 = getelementptr inbounds double, ptr %31, i64 %indvars.iv575
  %158 = load double, ptr %157, align 8, !tbaa !9
  %159 = zext nneg i32 %156 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %159
  %160 = load double, ptr %gep, align 8, !tbaa !18
  %161 = fcmp oge double %160, 0.000000e+00
  %162 = fneg double %160
  %163 = select i1 %161, double %160, double %162
  %164 = call double @llvm.fmuladd.f64(double %163, double %118, double %158)
  %165 = fadd double %.0447.lcssa, %164
  store double %165, ptr %157, align 8, !tbaa !9
  %indvars.iv.next576 = add nuw nsw i64 %indvars.iv575, 1
  %exitcond579.not = icmp eq i64 %indvars.iv.next576, %wide.trip.count578
  br i1 %exitcond579.not, label %.loopexit481.loopexit557, label %.lr.ph499, !llvm.loop !22

166:                                              ; preds = %._crit_edge
  br i1 %.not467508, label %._crit_edge518, label %.lr.ph512.preheader

.lr.ph512.preheader:                              ; preds = %166
  %167 = add nuw i32 %106, 1
  %wide.trip.count593 = zext i32 %167 to i64
  br label %.lr.ph512

.lr.ph512:                                        ; preds = %.lr.ph512.preheader, %._crit_edge506
  %indvars.iv590 = phi i64 [ 1, %.lr.ph512.preheader ], [ %indvars.iv.next591, %._crit_edge506 ]
  %indvars.iv582 = phi i32 [ 2, %.lr.ph512.preheader ], [ %indvars.iv.next583, %._crit_edge506 ]
  %.1443510 = phi i32 [ 1, %.lr.ph512.preheader ], [ %231, %._crit_edge506 ]
  %gep651 = getelementptr %struct.doublecomplex, ptr %invariant.gep650, i64 %indvars.iv590
  %168 = load double, ptr %gep651, align 8, !tbaa !18
  %169 = call { double, double } @Cd(ptr noundef nonnull %gep651)
  %170 = extractvalue { double, double } %169, 1
  %171 = insertelement <2 x double> poison, double %168, i64 0
  %172 = insertelement <2 x double> %171, double %170, i64 1
  %173 = fcmp oge <2 x double> %172, zeroinitializer
  %174 = fneg <2 x double> %172
  %175 = select <2 x i1> %173, <2 x double> %172, <2 x double> %174
  %shift714 = shufflevector <2 x double> %175, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %176 = fadd <2 x double> %175, %shift714
  %177 = extractelement <2 x double> %176, i64 0
  %178 = sext i32 %.1443510 to i64
  %179 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !18
  %181 = fcmp oge double %180, 0.000000e+00
  %182 = fneg double %180
  %183 = select i1 %181, double %180, double %182
  %184 = getelementptr inbounds double, ptr %31, i64 %indvars.iv590
  %185 = load double, ptr %184, align 8, !tbaa !9
  %186 = call double @llvm.fmuladd.f64(double %183, double %177, double %185)
  store double %186, ptr %184, align 8, !tbaa !9
  %187 = load i32, ptr %1, align 4, !tbaa !5
  %indvars.iv.next591 = add nuw nsw i64 %indvars.iv590, 1
  %188 = sext i32 %187 to i64
  %.not468500.not = icmp slt i64 %indvars.iv590, %188
  br i1 %.not468500.not, label %.lr.ph505.preheader, label %._crit_edge506

.lr.ph505.preheader:                              ; preds = %.lr.ph512
  %189 = sext i32 %indvars.iv582 to i64
  %190 = add i32 %187, 1
  br label %.lr.ph505

.lr.ph505:                                        ; preds = %.lr.ph505.preheader, %.lr.ph505
  %indvars.iv584 = phi i64 [ %189, %.lr.ph505.preheader ], [ %indvars.iv.next585, %.lr.ph505 ]
  %indvars.iv580 = phi i64 [ %178, %.lr.ph505.preheader ], [ %indvars.iv.next581, %.lr.ph505 ]
  %.1448502 = phi double [ 0.000000e+00, %.lr.ph505.preheader ], [ %225, %.lr.ph505 ]
  %indvars.iv.next581 = add nsw i64 %indvars.iv580, 1
  %191 = getelementptr %struct.doublecomplex, ptr %3, i64 %indvars.iv580
  %192 = load double, ptr %191, align 8, !tbaa !18
  %193 = call { double, double } @Cd(ptr noundef nonnull %191)
  %194 = extractvalue { double, double } %193, 1
  %195 = insertelement <2 x double> poison, double %192, i64 0
  %196 = insertelement <2 x double> %195, double %194, i64 1
  %197 = fcmp oge <2 x double> %196, zeroinitializer
  %198 = fneg <2 x double> %196
  %199 = select <2 x i1> %197, <2 x double> %196, <2 x double> %198
  %shift715 = shufflevector <2 x double> %199, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %200 = fadd <2 x double> %199, %shift715
  %201 = extractelement <2 x double> %200, i64 0
  %202 = getelementptr inbounds double, ptr %31, i64 %indvars.iv584
  %203 = load double, ptr %202, align 8, !tbaa !9
  %204 = call double @llvm.fmuladd.f64(double %201, double %177, double %203)
  store double %204, ptr %202, align 8, !tbaa !9
  %205 = load double, ptr %191, align 8, !tbaa !18
  %206 = call { double, double } @Cd(ptr noundef nonnull %191)
  %207 = extractvalue { double, double } %206, 1
  %208 = insertelement <2 x double> poison, double %205, i64 0
  %209 = insertelement <2 x double> %208, double %207, i64 1
  %210 = fcmp oge <2 x double> %209, zeroinitializer
  %211 = fneg <2 x double> %209
  %212 = select <2 x i1> %210, <2 x double> %209, <2 x double> %211
  %shift716 = shufflevector <2 x double> %212, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %213 = fadd <2 x double> %212, %shift716
  %214 = extractelement <2 x double> %213, i64 0
  %gep649 = getelementptr %struct.doublecomplex, ptr %invariant.gep648, i64 %indvars.iv584
  %215 = load double, ptr %gep649, align 8, !tbaa !18
  %216 = call { double, double } @Cd(ptr noundef nonnull %gep649)
  %217 = extractvalue { double, double } %216, 1
  %218 = insertelement <2 x double> poison, double %215, i64 0
  %219 = insertelement <2 x double> %218, double %217, i64 1
  %220 = fcmp oge <2 x double> %219, zeroinitializer
  %221 = fneg <2 x double> %219
  %222 = select <2 x i1> %220, <2 x double> %219, <2 x double> %221
  %shift717 = shufflevector <2 x double> %222, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %223 = fadd <2 x double> %222, %shift717
  %224 = extractelement <2 x double> %223, i64 0
  %225 = call double @llvm.fmuladd.f64(double %214, double %224, double %.1448502)
  %indvars.iv.next585 = add nsw i64 %indvars.iv584, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next585 to i32
  %exitcond589.not = icmp eq i32 %190, %lftr.wideiv
  br i1 %exitcond589.not, label %._crit_edge506.loopexit, label %.lr.ph505, !llvm.loop !23

._crit_edge506.loopexit:                          ; preds = %.lr.ph505
  %.pre = load double, ptr %184, align 8, !tbaa !9
  %.pre628 = load i32, ptr %1, align 4, !tbaa !5
  br label %._crit_edge506

._crit_edge506:                                   ; preds = %._crit_edge506.loopexit, %.lr.ph512
  %226 = phi i32 [ %187, %.lr.ph512 ], [ %.pre628, %._crit_edge506.loopexit ]
  %227 = phi double [ %186, %.lr.ph512 ], [ %.pre, %._crit_edge506.loopexit ]
  %.1448.lcssa = phi double [ 0.000000e+00, %.lr.ph512 ], [ %225, %._crit_edge506.loopexit ]
  %228 = fadd double %.1448.lcssa, %227
  store double %228, ptr %184, align 8, !tbaa !9
  %229 = trunc nuw nsw i64 %indvars.iv590 to i32
  %reass.sub = sub i32 %.1443510, %229
  %230 = add i32 %reass.sub, 1
  %231 = add i32 %230, %226
  %indvars.iv.next583 = add nuw i32 %indvars.iv582, 1
  %exitcond594.not = icmp eq i64 %indvars.iv.next591, %wide.trip.count593
  br i1 %exitcond594.not, label %.loopexit481, label %.lr.ph512, !llvm.loop !24

.loopexit481.loopexit557:                         ; preds = %._crit_edge494
  %.pre629 = load i32, ptr %1, align 4, !tbaa !5
  br label %.loopexit481

.loopexit481:                                     ; preds = %._crit_edge506, %.loopexit481.loopexit557
  %232 = phi i32 [ %.pre629, %.loopexit481.loopexit557 ], [ %226, %._crit_edge506 ]
  %.not470513 = icmp slt i32 %232, 1
  br i1 %.not470513, label %._crit_edge518, label %.lr.ph517.preheader

.lr.ph517.preheader:                              ; preds = %.loopexit481
  %233 = add nuw i32 %232, 1
  %wide.trip.count598 = zext i32 %233 to i64
  br label %.lr.ph517

.lr.ph517:                                        ; preds = %.lr.ph517.preheader, %256
  %indvars.iv595 = phi i64 [ 1, %.lr.ph517.preheader ], [ %indvars.iv.next596, %256 ]
  %.2515 = phi double [ 0.000000e+00, %.lr.ph517.preheader ], [ %258, %256 ]
  %234 = getelementptr inbounds double, ptr %31, i64 %indvars.iv595
  %235 = load double, ptr %234, align 8, !tbaa !9
  %236 = fcmp ogt double %235, %83
  %237 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %indvars.iv595
  %238 = load double, ptr %237, align 8, !tbaa !18
  %239 = fcmp oge double %238, 0.000000e+00
  %240 = fneg double %238
  %241 = select i1 %239, double %238, double %240
  %242 = call { double, double } @Cd(ptr noundef nonnull %237)
  %243 = extractvalue { double, double } %242, 1
  %244 = fcmp oge double %243, 0.000000e+00
  %245 = fneg double %243
  %246 = select i1 %244, double %243, double %245
  %247 = fadd double %241, %246
  br i1 %236, label %248, label %251

248:                                              ; preds = %.lr.ph517
  %249 = load double, ptr %234, align 8, !tbaa !9
  %250 = fdiv double %247, %249
  br label %256

251:                                              ; preds = %.lr.ph517
  %252 = fadd double %82, %247
  %253 = load double, ptr %234, align 8, !tbaa !9
  %254 = fadd double %82, %253
  %255 = fdiv double %252, %254
  br label %256

256:                                              ; preds = %248, %251
  %.sink656 = phi double [ %250, %248 ], [ %255, %251 ]
  %257 = fcmp oge double %.2515, %.sink656
  %258 = select i1 %257, double %.2515, double %.sink656
  %indvars.iv.next596 = add nuw nsw i64 %indvars.iv595, 1
  %exitcond599.not = icmp eq i64 %indvars.iv.next596, %wide.trip.count598
  br i1 %exitcond599.not, label %._crit_edge518, label %.lr.ph517, !llvm.loop !25

._crit_edge518:                                   ; preds = %256, %166, %107, %.loopexit481
  %.2.lcssa = phi double [ 0.000000e+00, %.loopexit481 ], [ 0.000000e+00, %107 ], [ 0.000000e+00, %166 ], [ %258, %256 ]
  store double %.2.lcssa, ptr %89, align 8, !tbaa !9
  %259 = fcmp ogt double %.2.lcssa, %79
  br i1 %259, label %260, label %267

260:                                              ; preds = %._crit_edge518
  %261 = fmul double %.2.lcssa, 2.000000e+00
  %262 = fcmp ole double %261, %.0
  %263 = icmp ult i32 %.0446, 6
  %or.cond = select i1 %262, i1 %263, i1 false
  br i1 %or.cond, label %264, label %267

264:                                              ; preds = %260
  call void @zpptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %11, ptr noundef nonnull %1, ptr noundef nonnull %13) #6
  call void @zaxpy_(ptr noundef nonnull %1, ptr noundef nonnull @c_b1, ptr noundef %11, ptr noundef nonnull @c__1, ptr noundef %gep521, ptr noundef nonnull @c__1) #6
  %265 = load double, ptr %89, align 8, !tbaa !9
  %266 = add nuw nsw i32 %.0446, 1
  br label %92

267:                                              ; preds = %260, %._crit_edge518
  %268 = load i32, ptr %1, align 4, !tbaa !5
  %.not471522 = icmp slt i32 %268, 1
  br i1 %.not471522, label %._crit_edge526, label %.lr.ph525.preheader

.lr.ph525.preheader:                              ; preds = %267
  %269 = add nuw i32 %268, 1
  %wide.trip.count603 = zext i32 %269 to i64
  br label %.lr.ph525

.lr.ph525:                                        ; preds = %.lr.ph525.preheader, %.lr.ph525
  %indvars.iv600 = phi i64 [ 1, %.lr.ph525.preheader ], [ %indvars.iv.next601, %.lr.ph525 ]
  %270 = getelementptr inbounds double, ptr %31, i64 %indvars.iv600
  %271 = load double, ptr %270, align 8, !tbaa !9
  %272 = fcmp ogt double %271, %83
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %indvars.iv600
  %274 = load double, ptr %273, align 8, !tbaa !18
  %275 = call { double, double } @Cd(ptr noundef nonnull %273)
  %276 = extractvalue { double, double } %275, 1
  %277 = insertelement <2 x double> poison, double %274, i64 0
  %278 = insertelement <2 x double> %277, double %276, i64 1
  %279 = fcmp oge <2 x double> %278, zeroinitializer
  %280 = fneg <2 x double> %278
  %281 = select <2 x i1> %279, <2 x double> %278, <2 x double> %280
  %shift718 = shufflevector <2 x double> %281, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %282 = fadd <2 x double> %281, %shift718
  %283 = extractelement <2 x double> %282, i64 0
  %284 = load double, ptr %270, align 8, !tbaa !9
  %285 = call double @llvm.fmuladd.f64(double %85, double %284, double %283)
  %286 = fadd double %82, %285
  %storemerge = select i1 %272, double %285, double %286
  store double %storemerge, ptr %270, align 8, !tbaa !9
  %indvars.iv.next601 = add nuw nsw i64 %indvars.iv600, 1
  %exitcond604.not = icmp eq i64 %indvars.iv.next601, %wide.trip.count603
  br i1 %exitcond604.not, label %._crit_edge526, label %.lr.ph525, !llvm.loop !26

._crit_edge526:                                   ; preds = %.lr.ph525, %267
  store i32 0, ptr %19, align 4, !tbaa !5
  %287 = getelementptr inbounds double, ptr %28, i64 %indvars.iv620
  br label %.loopexit480

.loopexit480:                                     ; preds = %.loopexit480.backedge, %._crit_edge526
  %288 = load i32, ptr %1, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %gep541 = getelementptr %struct.doublecomplex, ptr %11, i64 %289
  call void @zlacn2_(ptr noundef nonnull %1, ptr noundef %gep541, ptr noundef %11, ptr noundef nonnull %287, ptr noundef nonnull %19, ptr noundef nonnull %20) #6
  %290 = load i32, ptr %19, align 4, !tbaa !5
  switch i32 %290, label %.loopexit480.backedge [
    i32 0, label %366
    i32 1, label %291
    i32 2, label %327
  ]

291:                                              ; preds = %.loopexit480
  call void @zpptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %11, ptr noundef nonnull %1, ptr noundef nonnull %13) #6
  %292 = load i32, ptr %1, align 4, !tbaa !5
  %.not475534 = icmp slt i32 %292, 1
  br i1 %.not475534, label %.loopexit480.backedge, label %.lr.ph537.preheader

.loopexit480.backedge:                            ; preds = %291, %..loopexit480_crit_edge, %.loopexit480, %364
  br label %.loopexit480

.lr.ph537.preheader:                              ; preds = %291
  %293 = add nuw i32 %292, 1
  %wide.trip.count613 = zext i32 %293 to i64
  %294 = zext nneg i32 %292 to i64
  %min.iters.check = icmp eq i32 %292, 1
  br i1 %min.iters.check, label %.lr.ph537.preheader721, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph537.preheader
  %295 = shl nuw nsw i64 %wide.trip.count613, 4
  %scevgep666 = getelementptr i8, ptr %scevgep, i64 %295
  %296 = shl nuw nsw i64 %wide.trip.count613, 3
  %scevgep668 = getelementptr i8, ptr %scevgep667, i64 %296
  %bound0 = icmp ugt ptr %scevgep668, %11
  %bound1 = icmp ugt ptr %scevgep666, %12
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph537.preheader721, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %294, 2147483646
  %ind.end = or i64 %294, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %297 = getelementptr double, ptr %12, i64 %index
  %wide.load = load <2 x double>, ptr %297, align 8, !tbaa !9, !alias.scope !27
  %298 = getelementptr %struct.doublecomplex, ptr %11, i64 %index
  %wide.vec = load <4 x double>, ptr %298, align 8, !tbaa !9
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec669 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %299 = fmul <2 x double> %wide.load, %strided.vec
  %300 = fmul <2 x double> %wide.load, %strided.vec669
  %interleaved.vec = shufflevector <2 x double> %299, <2 x double> %300, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %298, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 2
  %301 = icmp eq i64 %index.next, %n.vec
  br i1 %301, label %middle.block, label %vector.body, !llvm.loop !30

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %294
  %302 = shufflevector <2 x double> %299, <2 x double> %300, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %..loopexit480_crit_edge, label %.lr.ph537.preheader721

.lr.ph537.preheader721:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph537.preheader
  %indvars.iv610.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph537.preheader ], [ %ind.end, %middle.block ]
  %303 = zext nneg i32 %292 to i64
  %304 = and i32 %292, 1
  %lcmp.mod735.not = icmp eq i32 %304, 0
  br i1 %lcmp.mod735.not, label %.lr.ph537.prol.loopexit, label %.lr.ph537.prol

.lr.ph537.prol:                                   ; preds = %.lr.ph537.preheader721
  %305 = getelementptr inbounds double, ptr %31, i64 %indvars.iv610.ph
  %306 = load double, ptr %305, align 8, !tbaa !9
  %307 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %indvars.iv610.ph
  %308 = load <2 x double>, ptr %307, align 8, !tbaa !9
  %309 = insertelement <2 x double> poison, double %306, i64 0
  %310 = shufflevector <2 x double> %309, <2 x double> poison, <2 x i32> zeroinitializer
  %311 = fmul <2 x double> %310, %308
  store <2 x double> %311, ptr %307, align 8, !tbaa !9
  %indvars.iv.next611.prol = add nuw nsw i64 %indvars.iv610.ph, 1
  br label %.lr.ph537.prol.loopexit

.lr.ph537.prol.loopexit:                          ; preds = %.lr.ph537.prol, %.lr.ph537.preheader721
  %.lcssa732.unr = phi <2 x double> [ poison, %.lr.ph537.preheader721 ], [ %311, %.lr.ph537.prol ]
  %indvars.iv610.unr = phi i64 [ %indvars.iv610.ph, %.lr.ph537.preheader721 ], [ %indvars.iv.next611.prol, %.lr.ph537.prol ]
  %312 = icmp eq i64 %indvars.iv610.ph, %303
  br i1 %312, label %..loopexit480_crit_edge, label %.lr.ph537

.lr.ph537:                                        ; preds = %.lr.ph537.prol.loopexit, %.lr.ph537
  %indvars.iv610 = phi i64 [ %indvars.iv.next611.1, %.lr.ph537 ], [ %indvars.iv610.unr, %.lr.ph537.prol.loopexit ]
  %313 = getelementptr inbounds double, ptr %31, i64 %indvars.iv610
  %314 = load double, ptr %313, align 8, !tbaa !9
  %315 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %indvars.iv610
  %316 = load <2 x double>, ptr %315, align 8, !tbaa !9
  %317 = insertelement <2 x double> poison, double %314, i64 0
  %318 = shufflevector <2 x double> %317, <2 x double> poison, <2 x i32> zeroinitializer
  %319 = fmul <2 x double> %318, %316
  store <2 x double> %319, ptr %315, align 8, !tbaa !9
  %320 = getelementptr double, ptr %12, i64 %indvars.iv610
  %321 = load double, ptr %320, align 8, !tbaa !9
  %322 = getelementptr %struct.doublecomplex, ptr %11, i64 %indvars.iv610
  %323 = load <2 x double>, ptr %322, align 8, !tbaa !9
  %324 = insertelement <2 x double> poison, double %321, i64 0
  %325 = shufflevector <2 x double> %324, <2 x double> poison, <2 x i32> zeroinitializer
  %326 = fmul <2 x double> %325, %323
  store <2 x double> %326, ptr %322, align 8, !tbaa !9
  %indvars.iv.next611.1 = add nuw nsw i64 %indvars.iv610, 2
  %exitcond614.not.1 = icmp eq i64 %indvars.iv.next611.1, %wide.trip.count613
  br i1 %exitcond614.not.1, label %..loopexit480_crit_edge, label %.lr.ph537, !llvm.loop !31

327:                                              ; preds = %.loopexit480
  %328 = load i32, ptr %1, align 4, !tbaa !5
  %.not474527 = icmp slt i32 %328, 1
  br i1 %.not474527, label %364, label %.lr.ph530.preheader

.lr.ph530.preheader:                              ; preds = %327
  %329 = add nuw i32 %328, 1
  %wide.trip.count608 = zext i32 %329 to i64
  %330 = zext nneg i32 %328 to i64
  %min.iters.check680 = icmp eq i32 %328, 1
  br i1 %min.iters.check680, label %.lr.ph530.preheader722, label %vector.memcheck670

vector.memcheck670:                               ; preds = %.lr.ph530.preheader
  %331 = shl nuw nsw i64 %wide.trip.count608, 4
  %scevgep672 = getelementptr i8, ptr %scevgep671, i64 %331
  %332 = shl nuw nsw i64 %wide.trip.count608, 3
  %scevgep674 = getelementptr i8, ptr %scevgep673, i64 %332
  %bound0675 = icmp ugt ptr %scevgep674, %11
  %bound1676 = icmp ugt ptr %scevgep672, %12
  %found.conflict677 = and i1 %bound0675, %bound1676
  br i1 %found.conflict677, label %.lr.ph530.preheader722, label %vector.ph681

vector.ph681:                                     ; preds = %vector.memcheck670
  %n.vec683 = and i64 %330, 2147483646
  %ind.end684 = or i64 %330, 1
  br label %vector.body686

vector.body686:                                   ; preds = %vector.body686, %vector.ph681
  %index687 = phi i64 [ 0, %vector.ph681 ], [ %index.next694, %vector.body686 ]
  %333 = getelementptr double, ptr %12, i64 %index687
  %wide.load689 = load <2 x double>, ptr %333, align 8, !tbaa !9, !alias.scope !32
  %334 = getelementptr %struct.doublecomplex, ptr %11, i64 %index687
  %wide.vec690 = load <4 x double>, ptr %334, align 8, !tbaa !9
  %strided.vec691 = shufflevector <4 x double> %wide.vec690, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec692 = shufflevector <4 x double> %wide.vec690, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %335 = fmul <2 x double> %wide.load689, %strided.vec691
  %336 = fmul <2 x double> %wide.load689, %strided.vec692
  %interleaved.vec693 = shufflevector <2 x double> %335, <2 x double> %336, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec693, ptr %334, align 8, !tbaa !9
  %index.next694 = add nuw i64 %index687, 2
  %337 = icmp eq i64 %index.next694, %n.vec683
  br i1 %337, label %middle.block678, label %vector.body686, !llvm.loop !35

middle.block678:                                  ; preds = %vector.body686
  %cmp.n695 = icmp eq i64 %n.vec683, %330
  %338 = shufflevector <2 x double> %335, <2 x double> %336, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n695, label %._crit_edge531, label %.lr.ph530.preheader722

.lr.ph530.preheader722:                           ; preds = %middle.block678, %vector.memcheck670, %.lr.ph530.preheader
  %indvars.iv605.ph = phi i64 [ 1, %vector.memcheck670 ], [ 1, %.lr.ph530.preheader ], [ %ind.end684, %middle.block678 ]
  %339 = zext nneg i32 %328 to i64
  %340 = and i32 %328, 1
  %lcmp.mod.not = icmp eq i32 %340, 0
  br i1 %lcmp.mod.not, label %.lr.ph530.prol.loopexit, label %.lr.ph530.prol

.lr.ph530.prol:                                   ; preds = %.lr.ph530.preheader722
  %341 = getelementptr inbounds double, ptr %31, i64 %indvars.iv605.ph
  %342 = load double, ptr %341, align 8, !tbaa !9
  %343 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %indvars.iv605.ph
  %344 = load <2 x double>, ptr %343, align 8, !tbaa !9
  %345 = insertelement <2 x double> poison, double %342, i64 0
  %346 = shufflevector <2 x double> %345, <2 x double> poison, <2 x i32> zeroinitializer
  %347 = fmul <2 x double> %346, %344
  store <2 x double> %347, ptr %343, align 8, !tbaa !9
  %indvars.iv.next606.prol = add nuw nsw i64 %indvars.iv605.ph, 1
  br label %.lr.ph530.prol.loopexit

.lr.ph530.prol.loopexit:                          ; preds = %.lr.ph530.prol, %.lr.ph530.preheader722
  %.lcssa729.unr = phi <2 x double> [ poison, %.lr.ph530.preheader722 ], [ %347, %.lr.ph530.prol ]
  %indvars.iv605.unr = phi i64 [ %indvars.iv605.ph, %.lr.ph530.preheader722 ], [ %indvars.iv.next606.prol, %.lr.ph530.prol ]
  %348 = icmp eq i64 %indvars.iv605.ph, %339
  br i1 %348, label %._crit_edge531, label %.lr.ph530

.lr.ph530:                                        ; preds = %.lr.ph530.prol.loopexit, %.lr.ph530
  %indvars.iv605 = phi i64 [ %indvars.iv.next606.1, %.lr.ph530 ], [ %indvars.iv605.unr, %.lr.ph530.prol.loopexit ]
  %349 = getelementptr inbounds double, ptr %31, i64 %indvars.iv605
  %350 = load double, ptr %349, align 8, !tbaa !9
  %351 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %indvars.iv605
  %352 = load <2 x double>, ptr %351, align 8, !tbaa !9
  %353 = insertelement <2 x double> poison, double %350, i64 0
  %354 = shufflevector <2 x double> %353, <2 x double> poison, <2 x i32> zeroinitializer
  %355 = fmul <2 x double> %354, %352
  store <2 x double> %355, ptr %351, align 8, !tbaa !9
  %356 = getelementptr double, ptr %12, i64 %indvars.iv605
  %357 = load double, ptr %356, align 8, !tbaa !9
  %358 = getelementptr %struct.doublecomplex, ptr %11, i64 %indvars.iv605
  %359 = load <2 x double>, ptr %358, align 8, !tbaa !9
  %360 = insertelement <2 x double> poison, double %357, i64 0
  %361 = shufflevector <2 x double> %360, <2 x double> poison, <2 x i32> zeroinitializer
  %362 = fmul <2 x double> %361, %359
  store <2 x double> %362, ptr %358, align 8, !tbaa !9
  %indvars.iv.next606.1 = add nuw nsw i64 %indvars.iv605, 2
  %exitcond609.not.1 = icmp eq i64 %indvars.iv.next606.1, %wide.trip.count608
  br i1 %exitcond609.not.1, label %._crit_edge531, label %.lr.ph530, !llvm.loop !36

._crit_edge531:                                   ; preds = %.lr.ph530.prol.loopexit, %.lr.ph530, %middle.block678
  %363 = phi <2 x double> [ %338, %middle.block678 ], [ %.lcssa729.unr, %.lr.ph530.prol.loopexit ], [ %362, %.lr.ph530 ]
  store <2 x double> %363, ptr %18, align 16, !tbaa !9
  br label %364

364:                                              ; preds = %._crit_edge531, %327
  call void @zpptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %11, ptr noundef nonnull %1, ptr noundef nonnull %13) #6
  br label %.loopexit480.backedge

..loopexit480_crit_edge:                          ; preds = %.lr.ph537.prol.loopexit, %.lr.ph537, %middle.block
  %365 = phi <2 x double> [ %302, %middle.block ], [ %.lcssa732.unr, %.lr.ph537.prol.loopexit ], [ %326, %.lr.ph537 ]
  store <2 x double> %365, ptr %18, align 16, !tbaa !9
  br label %.loopexit480.backedge

366:                                              ; preds = %.loopexit480
  %367 = load i32, ptr %1, align 4, !tbaa !5
  %.not473542 = icmp slt i32 %367, 1
  br i1 %.not473542, label %._crit_edge547.thread, label %.lr.ph546.preheader

.lr.ph546.preheader:                              ; preds = %366
  %368 = add nuw i32 %367, 1
  %wide.trip.count618 = zext i32 %368 to i64
  %invariant.gep652 = getelementptr %struct.doublecomplex, ptr %27, i64 %91
  br label %.lr.ph546

.lr.ph546:                                        ; preds = %.lr.ph546.preheader, %.lr.ph546
  %indvars.iv615 = phi i64 [ 1, %.lr.ph546.preheader ], [ %indvars.iv.next616, %.lr.ph546 ]
  %.1544 = phi double [ 0.000000e+00, %.lr.ph546.preheader ], [ %380, %.lr.ph546 ]
  %gep653 = getelementptr %struct.doublecomplex, ptr %invariant.gep652, i64 %indvars.iv615
  %369 = load double, ptr %gep653, align 8, !tbaa !18
  %370 = call { double, double } @Cd(ptr noundef nonnull %gep653)
  %371 = extractvalue { double, double } %370, 1
  %372 = insertelement <2 x double> poison, double %369, i64 0
  %373 = insertelement <2 x double> %372, double %371, i64 1
  %374 = fcmp oge <2 x double> %373, zeroinitializer
  %375 = fneg <2 x double> %373
  %376 = select <2 x i1> %374, <2 x double> %373, <2 x double> %375
  %shift719 = shufflevector <2 x double> %376, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %377 = fadd <2 x double> %376, %shift719
  %378 = extractelement <2 x double> %377, i64 0
  %379 = fcmp oge double %.1544, %378
  %380 = select i1 %379, double %.1544, double %378
  %indvars.iv.next616 = add nuw nsw i64 %indvars.iv615, 1
  %exitcond619.not = icmp eq i64 %indvars.iv.next616, %wide.trip.count618
  br i1 %exitcond619.not, label %._crit_edge547, label %.lr.ph546, !llvm.loop !37

._crit_edge547:                                   ; preds = %.lr.ph546
  %381 = fcmp une double %380, 0.000000e+00
  br i1 %381, label %382, label %._crit_edge547.thread

382:                                              ; preds = %._crit_edge547
  %383 = load double, ptr %287, align 8, !tbaa !9
  %384 = fdiv double %383, %380
  store double %384, ptr %287, align 8, !tbaa !9
  br label %._crit_edge547.thread

._crit_edge547.thread:                            ; preds = %366, %._crit_edge547, %382
  %indvars.iv.next621 = add nuw nsw i64 %indvars.iv620, 1
  %.not465.not = icmp ult i64 %indvars.iv620, %88
  br i1 %.not465.not, label %.preheader, label %.loopexit, !llvm.loop !38

.loopexit:                                        ; preds = %._crit_edge547.thread, %.lr.ph556.prol.loopexit, %.lr.ph556, %middle.block697, %53, %77, %54, %.thread
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) local_unnamed_addr #3

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #5

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

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

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


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