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

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

120:                                              ; preds = %16
  %121 = load ptr, ptr %17, align 8, !tbaa !5
  %122 = call i32 @lsame_(ptr noundef %121, ptr noundef @.str.1)
  %123 = icmp ne i32 %122, 0
  br i1 %123, label %126, label %124

124:                                              ; preds = %120
  %125 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -1, ptr %125, align 4, !tbaa !9
  br label %204

126:                                              ; preds = %120, %16
  %127 = load ptr, ptr %18, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = icmp slt i32 %128, 0
  br i1 %129, label %130, label %132

130:                                              ; preds = %126
  %131 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -2, ptr %131, align 4, !tbaa !9
  br label %203

132:                                              ; preds = %126
  %133 = load ptr, ptr %19, align 8, !tbaa !5
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = icmp slt i32 %134, 0
  br i1 %135, label %136, label %138

136:                                              ; preds = %132
  %137 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -3, ptr %137, align 4, !tbaa !9
  br label %202

138:                                              ; preds = %132
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = load i32, ptr %141, align 4, !tbaa !9
  %143 = icmp sge i32 1, %142
  br i1 %143, label %144, label %145

144:                                              ; preds = %138
  br label %148

145:                                              ; preds = %138
  %146 = load ptr, ptr %18, align 8, !tbaa !5
  %147 = load i32, ptr %146, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %145, %144
  %149 = phi i32 [ 1, %144 ], [ %147, %145 ]
  %150 = icmp slt i32 %140, %149
  br i1 %150, label %151, label %153

151:                                              ; preds = %148
  %152 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -5, ptr %152, align 4, !tbaa !9
  br label %201

153:                                              ; preds = %148
  %154 = load ptr, ptr %23, align 8, !tbaa !5
  %155 = load i32, ptr %154, align 4, !tbaa !9
  %156 = load ptr, ptr %18, align 8, !tbaa !5
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = icmp sge i32 1, %157
  br i1 %158, label %159, label %160

159:                                              ; preds = %153
  br label %163

160:                                              ; preds = %153
  %161 = load ptr, ptr %18, align 8, !tbaa !5
  %162 = load i32, ptr %161, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %160, %159
  %164 = phi i32 [ 1, %159 ], [ %162, %160 ]
  %165 = icmp slt i32 %155, %164
  br i1 %165, label %166, label %168

166:                                              ; preds = %163
  %167 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -7, ptr %167, align 4, !tbaa !9
  br label %200

168:                                              ; preds = %163
  %169 = load ptr, ptr %25, align 8, !tbaa !5
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = load ptr, ptr %18, align 8, !tbaa !5
  %172 = load i32, ptr %171, align 4, !tbaa !9
  %173 = icmp sge i32 1, %172
  br i1 %173, label %174, label %175

174:                                              ; preds = %168
  br label %178

175:                                              ; preds = %168
  %176 = load ptr, ptr %18, align 8, !tbaa !5
  %177 = load i32, ptr %176, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %175, %174
  %179 = phi i32 [ 1, %174 ], [ %177, %175 ]
  %180 = icmp slt i32 %170, %179
  br i1 %180, label %181, label %183

181:                                              ; preds = %178
  %182 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -9, ptr %182, align 4, !tbaa !9
  br label %199

183:                                              ; preds = %178
  %184 = load ptr, ptr %27, align 8, !tbaa !5
  %185 = load i32, ptr %184, align 4, !tbaa !9
  %186 = load ptr, ptr %18, align 8, !tbaa !5
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = icmp sge i32 1, %187
  br i1 %188, label %189, label %190

189:                                              ; preds = %183
  br label %193

190:                                              ; preds = %183
  %191 = load ptr, ptr %18, align 8, !tbaa !5
  %192 = load i32, ptr %191, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %190, %189
  %194 = phi i32 [ 1, %189 ], [ %192, %190 ]
  %195 = icmp slt i32 %185, %194
  br i1 %195, label %196, label %198

196:                                              ; preds = %193
  %197 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -11, ptr %197, align 4, !tbaa !9
  br label %198

198:                                              ; preds = %196, %193
  br label %199

199:                                              ; preds = %198, %181
  br label %200

200:                                              ; preds = %199, %166
  br label %201

201:                                              ; preds = %200, %151
  br label %202

202:                                              ; preds = %201, %136
  br label %203

203:                                              ; preds = %202, %130
  br label %204

204:                                              ; preds = %203, %124
  %205 = load ptr, ptr %32, align 8, !tbaa !5
  %206 = load i32, ptr %205, align 4, !tbaa !9
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %208, label %213

208:                                              ; preds = %204
  %209 = load ptr, ptr %32, align 8, !tbaa !5
  %210 = load i32, ptr %209, align 4, !tbaa !9
  %211 = sub nsw i32 0, %210
  store i32 %211, ptr %41, align 4, !tbaa !9
  %212 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %41, i32 noundef 6)
  store i32 1, ptr %66, align 4
  br label %1339

213:                                              ; preds = %204
  %214 = load ptr, ptr %18, align 8, !tbaa !5
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = icmp eq i32 %215, 0
  br i1 %216, label %221, label %217

217:                                              ; preds = %213
  %218 = load ptr, ptr %19, align 8, !tbaa !5
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = icmp eq i32 %219, 0
  br i1 %220, label %221, label %241

221:                                              ; preds = %217, %213
  %222 = load ptr, ptr %19, align 8, !tbaa !5
  %223 = load i32, ptr %222, align 4, !tbaa !9
  store i32 %223, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %55, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %237, %221
  %225 = load i32, ptr %55, align 4, !tbaa !9
  %226 = load i32, ptr %41, align 4, !tbaa !9
  %227 = icmp sle i32 %225, %226
  br i1 %227, label %228, label %240

228:                                              ; preds = %224
  %229 = load ptr, ptr %28, align 8, !tbaa !5
  %230 = load i32, ptr %55, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds double, ptr %229, i64 %231
  store double 0.000000e+00, ptr %232, align 8, !tbaa !11
  %233 = load ptr, ptr %29, align 8, !tbaa !5
  %234 = load i32, ptr %55, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds double, ptr %233, i64 %235
  store double 0.000000e+00, ptr %236, align 8, !tbaa !11
  br label %237

237:                                              ; preds = %228
  %238 = load i32, ptr %55, align 4, !tbaa !9
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %55, align 4, !tbaa !9
  br label %224, !llvm.loop !13

240:                                              ; preds = %224
  store i32 1, ptr %66, align 4
  br label %1339

241:                                              ; preds = %217
  %242 = load ptr, ptr %18, align 8, !tbaa !5
  %243 = load i32, ptr %242, align 4, !tbaa !9
  %244 = add nsw i32 %243, 1
  store i32 %244, ptr %62, align 4, !tbaa !9
  %245 = call double @dlamch_(ptr noundef @.str.3)
  store double %245, ptr %65, align 8, !tbaa !11
  %246 = call double @dlamch_(ptr noundef @.str.4)
  store double %246, ptr %63, align 8, !tbaa !11
  %247 = load i32, ptr %62, align 4, !tbaa !9
  %248 = sitofp i32 %247 to double
  %249 = load double, ptr %63, align 8, !tbaa !11
  %250 = fmul double %248, %249
  store double %250, ptr %52, align 8, !tbaa !11
  %251 = load double, ptr %52, align 8, !tbaa !11
  %252 = load double, ptr %65, align 8, !tbaa !11
  %253 = fdiv double %251, %252
  store double %253, ptr %53, align 8, !tbaa !11
  %254 = load ptr, ptr %19, align 8, !tbaa !5
  %255 = load i32, ptr %254, align 4, !tbaa !9
  store i32 %255, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %55, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %1335, %241
  %257 = load i32, ptr %55, align 4, !tbaa !9
  %258 = load i32, ptr %41, align 4, !tbaa !9
  %259 = icmp sle i32 %257, %258
  br i1 %259, label %260, label %1338

260:                                              ; preds = %256
  store i32 1, ptr %59, align 4, !tbaa !9
  store double 3.000000e+00, ptr %64, align 8, !tbaa !11
  br label %261

261:                                              ; preds = %957, %260
  %262 = load ptr, ptr %18, align 8, !tbaa !5
  %263 = load ptr, ptr %24, align 8, !tbaa !5
  %264 = load i32, ptr %55, align 4, !tbaa !9
  %265 = load i32, ptr %37, align 4, !tbaa !9
  %266 = mul nsw i32 %264, %265
  %267 = add nsw i32 %266, 1
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %263, i64 %268
  %270 = load ptr, ptr %30, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.doublecomplex, ptr %270, i64 1
  call void @zcopy_(ptr noundef %262, ptr noundef %269, ptr noundef @c__1, ptr noundef %271, ptr noundef @c__1)
  %272 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double -1.000000e+00, ptr %272, align 8, !tbaa !15
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double 0.000000e+00, ptr %273, align 8, !tbaa !17
  %274 = load ptr, ptr %17, align 8, !tbaa !5
  %275 = load ptr, ptr %18, align 8, !tbaa !5
  %276 = load ptr, ptr %20, align 8, !tbaa !5
  %277 = load i32, ptr %34, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds %struct.doublecomplex, ptr %276, i64 %278
  %280 = load ptr, ptr %21, align 8, !tbaa !5
  %281 = load ptr, ptr %26, align 8, !tbaa !5
  %282 = load i32, ptr %55, align 4, !tbaa !9
  %283 = load i32, ptr %39, align 4, !tbaa !9
  %284 = mul nsw i32 %282, %283
  %285 = add nsw i32 %284, 1
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds %struct.doublecomplex, ptr %281, i64 %286
  %288 = load ptr, ptr %30, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.doublecomplex, ptr %288, i64 1
  call void @zhemv_(ptr noundef %274, ptr noundef %275, ptr noundef %50, ptr noundef %279, ptr noundef %280, ptr noundef %287, ptr noundef @c__1, ptr noundef @c_b1, ptr noundef %289, ptr noundef @c__1)
  %290 = load ptr, ptr %18, align 8, !tbaa !5
  %291 = load i32, ptr %290, align 4, !tbaa !9
  store i32 %291, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %292

292:                                              ; preds = %342, %261
  %293 = load i32, ptr %54, align 4, !tbaa !9
  %294 = load i32, ptr %42, align 4, !tbaa !9
  %295 = icmp sle i32 %293, %294
  br i1 %295, label %296, label %345

296:                                              ; preds = %292
  %297 = load i32, ptr %54, align 4, !tbaa !9
  %298 = load i32, ptr %55, align 4, !tbaa !9
  %299 = load i32, ptr %37, align 4, !tbaa !9
  %300 = mul nsw i32 %298, %299
  %301 = add nsw i32 %297, %300
  store i32 %301, ptr %43, align 4, !tbaa !9
  %302 = load ptr, ptr %24, align 8, !tbaa !5
  %303 = load i32, ptr %43, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds %struct.doublecomplex, ptr %302, i64 %304
  %306 = getelementptr inbounds %struct.doublecomplex, ptr %305, i32 0, i32 0
  %307 = load double, ptr %306, align 8, !tbaa !15
  store double %307, ptr %46, align 8, !tbaa !11
  %308 = load double, ptr %46, align 8, !tbaa !11
  %309 = fcmp oge double %308, 0.000000e+00
  br i1 %309, label %310, label %312

310:                                              ; preds = %296
  %311 = load double, ptr %46, align 8, !tbaa !11
  br label %315

312:                                              ; preds = %296
  %313 = load double, ptr %46, align 8, !tbaa !11
  %314 = fneg double %313
  br label %315

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

330:                                              ; preds = %315
  %331 = load double, ptr %47, align 8, !tbaa !11
  br label %335

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

335:                                              ; preds = %332, %330
  %336 = phi double [ %331, %330 ], [ %334, %332 ]
  %337 = fadd double %316, %336
  %338 = load ptr, ptr %31, align 8, !tbaa !5
  %339 = load i32, ptr %54, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds double, ptr %338, i64 %340
  store double %337, ptr %341, align 8, !tbaa !11
  br label %342

342:                                              ; preds = %335
  %343 = load i32, ptr %54, align 4, !tbaa !9
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %54, align 4, !tbaa !9
  br label %292, !llvm.loop !18

345:                                              ; preds = %292
  %346 = load i32, ptr %60, align 4, !tbaa !9
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %348, label %577

348:                                              ; preds = %345
  %349 = load ptr, ptr %18, align 8, !tbaa !5
  %350 = load i32, ptr %349, align 4, !tbaa !9
  store i32 %350, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %351

351:                                              ; preds = %573, %348
  %352 = load i32, ptr %56, align 4, !tbaa !9
  %353 = load i32, ptr %42, align 4, !tbaa !9
  %354 = icmp sle i32 %352, %353
  br i1 %354, label %355, label %576

355:                                              ; preds = %351
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  %356 = load i32, ptr %56, align 4, !tbaa !9
  %357 = load i32, ptr %55, align 4, !tbaa !9
  %358 = load i32, ptr %39, align 4, !tbaa !9
  %359 = mul nsw i32 %357, %358
  %360 = add nsw i32 %356, %359
  store i32 %360, ptr %43, align 4, !tbaa !9
  %361 = load ptr, ptr %26, align 8, !tbaa !5
  %362 = load i32, ptr %43, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds %struct.doublecomplex, ptr %361, i64 %363
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %364, i32 0, i32 0
  %366 = load double, ptr %365, align 8, !tbaa !15
  store double %366, ptr %46, align 8, !tbaa !11
  %367 = load double, ptr %46, align 8, !tbaa !11
  %368 = fcmp oge double %367, 0.000000e+00
  br i1 %368, label %369, label %371

369:                                              ; preds = %355
  %370 = load double, ptr %46, align 8, !tbaa !11
  br label %374

371:                                              ; preds = %355
  %372 = load double, ptr %46, align 8, !tbaa !11
  %373 = fneg double %372
  br label %374

374:                                              ; preds = %371, %369
  %375 = phi double [ %370, %369 ], [ %373, %371 ]
  %376 = load ptr, ptr %26, align 8, !tbaa !5
  %377 = load i32, ptr %56, align 4, !tbaa !9
  %378 = load i32, ptr %55, align 4, !tbaa !9
  %379 = load i32, ptr %39, align 4, !tbaa !9
  %380 = mul nsw i32 %378, %379
  %381 = add nsw i32 %377, %380
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %376, i64 %382
  %384 = call { double, double } @Cd(ptr noundef %383)
  %385 = extractvalue { double, double } %384, 0
  %386 = extractvalue { double, double } %384, 1
  store double %386, ptr %47, align 8, !tbaa !11
  %387 = load double, ptr %47, align 8, !tbaa !11
  %388 = fcmp oge double %387, 0.000000e+00
  br i1 %388, label %389, label %391

389:                                              ; preds = %374
  %390 = load double, ptr %47, align 8, !tbaa !11
  br label %394

391:                                              ; preds = %374
  %392 = load double, ptr %47, align 8, !tbaa !11
  %393 = fneg double %392
  br label %394

394:                                              ; preds = %391, %389
  %395 = phi double [ %390, %389 ], [ %393, %391 ]
  %396 = fadd double %375, %395
  store double %396, ptr %61, align 8, !tbaa !11
  %397 = load i32, ptr %56, align 4, !tbaa !9
  %398 = sub nsw i32 %397, 1
  store i32 %398, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %399

399:                                              ; preds = %536, %394
  %400 = load i32, ptr %54, align 4, !tbaa !9
  %401 = load i32, ptr %43, align 4, !tbaa !9
  %402 = icmp sle i32 %400, %401
  br i1 %402, label %403, label %539

403:                                              ; preds = %399
  %404 = load i32, ptr %54, align 4, !tbaa !9
  %405 = load i32, ptr %56, align 4, !tbaa !9
  %406 = load i32, ptr %33, align 4, !tbaa !9
  %407 = mul nsw i32 %405, %406
  %408 = add nsw i32 %404, %407
  store i32 %408, ptr %44, align 4, !tbaa !9
  %409 = load ptr, ptr %20, align 8, !tbaa !5
  %410 = load i32, ptr %44, align 4, !tbaa !9
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds %struct.doublecomplex, ptr %409, i64 %411
  %413 = getelementptr inbounds %struct.doublecomplex, ptr %412, i32 0, i32 0
  %414 = load double, ptr %413, align 8, !tbaa !15
  store double %414, ptr %46, align 8, !tbaa !11
  %415 = load double, ptr %46, align 8, !tbaa !11
  %416 = fcmp oge double %415, 0.000000e+00
  br i1 %416, label %417, label %419

417:                                              ; preds = %403
  %418 = load double, ptr %46, align 8, !tbaa !11
  br label %422

419:                                              ; preds = %403
  %420 = load double, ptr %46, align 8, !tbaa !11
  %421 = fneg double %420
  br label %422

422:                                              ; preds = %419, %417
  %423 = phi double [ %418, %417 ], [ %421, %419 ]
  %424 = load ptr, ptr %20, align 8, !tbaa !5
  %425 = load i32, ptr %54, align 4, !tbaa !9
  %426 = load i32, ptr %56, align 4, !tbaa !9
  %427 = load i32, ptr %33, align 4, !tbaa !9
  %428 = mul nsw i32 %426, %427
  %429 = add nsw i32 %425, %428
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds %struct.doublecomplex, ptr %424, i64 %430
  %432 = call { double, double } @Cd(ptr noundef %431)
  %433 = extractvalue { double, double } %432, 0
  %434 = extractvalue { double, double } %432, 1
  store double %434, ptr %47, align 8, !tbaa !11
  %435 = load double, ptr %47, align 8, !tbaa !11
  %436 = fcmp oge double %435, 0.000000e+00
  br i1 %436, label %437, label %439

437:                                              ; preds = %422
  %438 = load double, ptr %47, align 8, !tbaa !11
  br label %442

439:                                              ; preds = %422
  %440 = load double, ptr %47, align 8, !tbaa !11
  %441 = fneg double %440
  br label %442

442:                                              ; preds = %439, %437
  %443 = phi double [ %438, %437 ], [ %441, %439 ]
  %444 = fadd double %423, %443
  %445 = load double, ptr %61, align 8, !tbaa !11
  %446 = load ptr, ptr %31, align 8, !tbaa !5
  %447 = load i32, ptr %54, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !11
  %451 = call double @llvm.fmuladd.f64(double %444, double %445, double %450)
  store double %451, ptr %449, align 8, !tbaa !11
  %452 = load i32, ptr %54, align 4, !tbaa !9
  %453 = load i32, ptr %56, align 4, !tbaa !9
  %454 = load i32, ptr %33, align 4, !tbaa !9
  %455 = mul nsw i32 %453, %454
  %456 = add nsw i32 %452, %455
  store i32 %456, ptr %44, align 4, !tbaa !9
  %457 = load i32, ptr %54, align 4, !tbaa !9
  %458 = load i32, ptr %55, align 4, !tbaa !9
  %459 = load i32, ptr %39, align 4, !tbaa !9
  %460 = mul nsw i32 %458, %459
  %461 = add nsw i32 %457, %460
  store i32 %461, ptr %45, align 4, !tbaa !9
  %462 = load ptr, ptr %20, align 8, !tbaa !5
  %463 = load i32, ptr %44, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds %struct.doublecomplex, ptr %462, i64 %464
  %466 = getelementptr inbounds %struct.doublecomplex, ptr %465, i32 0, i32 0
  %467 = load double, ptr %466, align 8, !tbaa !15
  store double %467, ptr %46, align 8, !tbaa !11
  %468 = load double, ptr %46, align 8, !tbaa !11
  %469 = fcmp oge double %468, 0.000000e+00
  br i1 %469, label %470, label %472

470:                                              ; preds = %442
  %471 = load double, ptr %46, align 8, !tbaa !11
  br label %475

472:                                              ; preds = %442
  %473 = load double, ptr %46, align 8, !tbaa !11
  %474 = fneg double %473
  br label %475

475:                                              ; preds = %472, %470
  %476 = phi double [ %471, %470 ], [ %474, %472 ]
  %477 = load ptr, ptr %20, align 8, !tbaa !5
  %478 = load i32, ptr %54, align 4, !tbaa !9
  %479 = load i32, ptr %56, align 4, !tbaa !9
  %480 = load i32, ptr %33, align 4, !tbaa !9
  %481 = mul nsw i32 %479, %480
  %482 = add nsw i32 %478, %481
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %477, i64 %483
  %485 = call { double, double } @Cd(ptr noundef %484)
  %486 = extractvalue { double, double } %485, 0
  %487 = extractvalue { double, double } %485, 1
  store double %487, ptr %47, align 8, !tbaa !11
  %488 = load double, ptr %47, align 8, !tbaa !11
  %489 = fcmp oge double %488, 0.000000e+00
  br i1 %489, label %490, label %492

490:                                              ; preds = %475
  %491 = load double, ptr %47, align 8, !tbaa !11
  br label %495

492:                                              ; preds = %475
  %493 = load double, ptr %47, align 8, !tbaa !11
  %494 = fneg double %493
  br label %495

495:                                              ; preds = %492, %490
  %496 = phi double [ %491, %490 ], [ %494, %492 ]
  %497 = fadd double %476, %496
  %498 = load ptr, ptr %26, align 8, !tbaa !5
  %499 = load i32, ptr %45, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds %struct.doublecomplex, ptr %498, i64 %500
  %502 = getelementptr inbounds %struct.doublecomplex, ptr %501, i32 0, i32 0
  %503 = load double, ptr %502, align 8, !tbaa !15
  store double %503, ptr %48, align 8, !tbaa !11
  %504 = load double, ptr %48, align 8, !tbaa !11
  %505 = fcmp oge double %504, 0.000000e+00
  br i1 %505, label %506, label %508

506:                                              ; preds = %495
  %507 = load double, ptr %48, align 8, !tbaa !11
  br label %511

508:                                              ; preds = %495
  %509 = load double, ptr %48, align 8, !tbaa !11
  %510 = fneg double %509
  br label %511

511:                                              ; preds = %508, %506
  %512 = phi double [ %507, %506 ], [ %510, %508 ]
  %513 = load ptr, ptr %26, align 8, !tbaa !5
  %514 = load i32, ptr %54, align 4, !tbaa !9
  %515 = load i32, ptr %55, align 4, !tbaa !9
  %516 = load i32, ptr %39, align 4, !tbaa !9
  %517 = mul nsw i32 %515, %516
  %518 = add nsw i32 %514, %517
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds %struct.doublecomplex, ptr %513, i64 %519
  %521 = call { double, double } @Cd(ptr noundef %520)
  %522 = extractvalue { double, double } %521, 0
  %523 = extractvalue { double, double } %521, 1
  store double %523, ptr %49, align 8, !tbaa !11
  %524 = load double, ptr %49, align 8, !tbaa !11
  %525 = fcmp oge double %524, 0.000000e+00
  br i1 %525, label %526, label %528

526:                                              ; preds = %511
  %527 = load double, ptr %49, align 8, !tbaa !11
  br label %531

528:                                              ; preds = %511
  %529 = load double, ptr %49, align 8, !tbaa !11
  %530 = fneg double %529
  br label %531

531:                                              ; preds = %528, %526
  %532 = phi double [ %527, %526 ], [ %530, %528 ]
  %533 = fadd double %512, %532
  %534 = load double, ptr %57, align 8, !tbaa !11
  %535 = call double @llvm.fmuladd.f64(double %497, double %533, double %534)
  store double %535, ptr %57, align 8, !tbaa !11
  br label %536

536:                                              ; preds = %531
  %537 = load i32, ptr %54, align 4, !tbaa !9
  %538 = add nsw i32 %537, 1
  store i32 %538, ptr %54, align 4, !tbaa !9
  br label %399, !llvm.loop !19

539:                                              ; preds = %399
  %540 = load i32, ptr %56, align 4, !tbaa !9
  %541 = load i32, ptr %56, align 4, !tbaa !9
  %542 = load i32, ptr %33, align 4, !tbaa !9
  %543 = mul nsw i32 %541, %542
  %544 = add nsw i32 %540, %543
  store i32 %544, ptr %43, align 4, !tbaa !9
  %545 = load ptr, ptr %31, align 8, !tbaa !5
  %546 = load i32, ptr %56, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds double, ptr %545, i64 %547
  %549 = load double, ptr %548, align 8, !tbaa !11
  %550 = load ptr, ptr %20, align 8, !tbaa !5
  %551 = load i32, ptr %43, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %550, i64 %552
  %554 = getelementptr inbounds %struct.doublecomplex, ptr %553, i32 0, i32 0
  %555 = load double, ptr %554, align 8, !tbaa !15
  store double %555, ptr %46, align 8, !tbaa !11
  %556 = load double, ptr %46, align 8, !tbaa !11
  %557 = fcmp oge double %556, 0.000000e+00
  br i1 %557, label %558, label %560

558:                                              ; preds = %539
  %559 = load double, ptr %46, align 8, !tbaa !11
  br label %563

560:                                              ; preds = %539
  %561 = load double, ptr %46, align 8, !tbaa !11
  %562 = fneg double %561
  br label %563

563:                                              ; preds = %560, %558
  %564 = phi double [ %559, %558 ], [ %562, %560 ]
  %565 = load double, ptr %61, align 8, !tbaa !11
  %566 = call double @llvm.fmuladd.f64(double %564, double %565, double %549)
  %567 = load double, ptr %57, align 8, !tbaa !11
  %568 = fadd double %566, %567
  %569 = load ptr, ptr %31, align 8, !tbaa !5
  %570 = load i32, ptr %56, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds double, ptr %569, i64 %571
  store double %568, ptr %572, align 8, !tbaa !11
  br label %573

573:                                              ; preds = %563
  %574 = load i32, ptr %56, align 4, !tbaa !9
  %575 = add nsw i32 %574, 1
  store i32 %575, ptr %56, align 4, !tbaa !9
  br label %351, !llvm.loop !20

576:                                              ; preds = %351
  br label %809

577:                                              ; preds = %345
  %578 = load ptr, ptr %18, align 8, !tbaa !5
  %579 = load i32, ptr %578, align 4, !tbaa !9
  store i32 %579, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %580

580:                                              ; preds = %805, %577
  %581 = load i32, ptr %56, align 4, !tbaa !9
  %582 = load i32, ptr %42, align 4, !tbaa !9
  %583 = icmp sle i32 %581, %582
  br i1 %583, label %584, label %808

584:                                              ; preds = %580
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  %585 = load i32, ptr %56, align 4, !tbaa !9
  %586 = load i32, ptr %55, align 4, !tbaa !9
  %587 = load i32, ptr %39, align 4, !tbaa !9
  %588 = mul nsw i32 %586, %587
  %589 = add nsw i32 %585, %588
  store i32 %589, ptr %43, align 4, !tbaa !9
  %590 = load ptr, ptr %26, align 8, !tbaa !5
  %591 = load i32, ptr %43, align 4, !tbaa !9
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds %struct.doublecomplex, ptr %590, i64 %592
  %594 = getelementptr inbounds %struct.doublecomplex, ptr %593, i32 0, i32 0
  %595 = load double, ptr %594, align 8, !tbaa !15
  store double %595, ptr %46, align 8, !tbaa !11
  %596 = load double, ptr %46, align 8, !tbaa !11
  %597 = fcmp oge double %596, 0.000000e+00
  br i1 %597, label %598, label %600

598:                                              ; preds = %584
  %599 = load double, ptr %46, align 8, !tbaa !11
  br label %603

600:                                              ; preds = %584
  %601 = load double, ptr %46, align 8, !tbaa !11
  %602 = fneg double %601
  br label %603

603:                                              ; preds = %600, %598
  %604 = phi double [ %599, %598 ], [ %602, %600 ]
  %605 = load ptr, ptr %26, align 8, !tbaa !5
  %606 = load i32, ptr %56, align 4, !tbaa !9
  %607 = load i32, ptr %55, align 4, !tbaa !9
  %608 = load i32, ptr %39, align 4, !tbaa !9
  %609 = mul nsw i32 %607, %608
  %610 = add nsw i32 %606, %609
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %605, i64 %611
  %613 = call { double, double } @Cd(ptr noundef %612)
  %614 = extractvalue { double, double } %613, 0
  %615 = extractvalue { double, double } %613, 1
  store double %615, ptr %47, align 8, !tbaa !11
  %616 = load double, ptr %47, align 8, !tbaa !11
  %617 = fcmp oge double %616, 0.000000e+00
  br i1 %617, label %618, label %620

618:                                              ; preds = %603
  %619 = load double, ptr %47, align 8, !tbaa !11
  br label %623

620:                                              ; preds = %603
  %621 = load double, ptr %47, align 8, !tbaa !11
  %622 = fneg double %621
  br label %623

623:                                              ; preds = %620, %618
  %624 = phi double [ %619, %618 ], [ %622, %620 ]
  %625 = fadd double %604, %624
  store double %625, ptr %61, align 8, !tbaa !11
  %626 = load i32, ptr %56, align 4, !tbaa !9
  %627 = load i32, ptr %56, align 4, !tbaa !9
  %628 = load i32, ptr %33, align 4, !tbaa !9
  %629 = mul nsw i32 %627, %628
  %630 = add nsw i32 %626, %629
  store i32 %630, ptr %43, align 4, !tbaa !9
  %631 = load ptr, ptr %20, align 8, !tbaa !5
  %632 = load i32, ptr %43, align 4, !tbaa !9
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds %struct.doublecomplex, ptr %631, i64 %633
  %635 = getelementptr inbounds %struct.doublecomplex, ptr %634, i32 0, i32 0
  %636 = load double, ptr %635, align 8, !tbaa !15
  store double %636, ptr %46, align 8, !tbaa !11
  %637 = load double, ptr %46, align 8, !tbaa !11
  %638 = fcmp oge double %637, 0.000000e+00
  br i1 %638, label %639, label %641

639:                                              ; preds = %623
  %640 = load double, ptr %46, align 8, !tbaa !11
  br label %644

641:                                              ; preds = %623
  %642 = load double, ptr %46, align 8, !tbaa !11
  %643 = fneg double %642
  br label %644

644:                                              ; preds = %641, %639
  %645 = phi double [ %640, %639 ], [ %643, %641 ]
  %646 = load double, ptr %61, align 8, !tbaa !11
  %647 = load ptr, ptr %31, align 8, !tbaa !5
  %648 = load i32, ptr %56, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds double, ptr %647, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !11
  %652 = call double @llvm.fmuladd.f64(double %645, double %646, double %651)
  store double %652, ptr %650, align 8, !tbaa !11
  %653 = load ptr, ptr %18, align 8, !tbaa !5
  %654 = load i32, ptr %653, align 4, !tbaa !9
  store i32 %654, ptr %43, align 4, !tbaa !9
  %655 = load i32, ptr %56, align 4, !tbaa !9
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %54, align 4, !tbaa !9
  br label %657

657:                                              ; preds = %794, %644
  %658 = load i32, ptr %54, align 4, !tbaa !9
  %659 = load i32, ptr %43, align 4, !tbaa !9
  %660 = icmp sle i32 %658, %659
  br i1 %660, label %661, label %797

661:                                              ; preds = %657
  %662 = load i32, ptr %54, align 4, !tbaa !9
  %663 = load i32, ptr %56, align 4, !tbaa !9
  %664 = load i32, ptr %33, align 4, !tbaa !9
  %665 = mul nsw i32 %663, %664
  %666 = add nsw i32 %662, %665
  store i32 %666, ptr %44, align 4, !tbaa !9
  %667 = load ptr, ptr %20, align 8, !tbaa !5
  %668 = load i32, ptr %44, align 4, !tbaa !9
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds %struct.doublecomplex, ptr %667, i64 %669
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %670, i32 0, i32 0
  %672 = load double, ptr %671, align 8, !tbaa !15
  store double %672, ptr %46, align 8, !tbaa !11
  %673 = load double, ptr %46, align 8, !tbaa !11
  %674 = fcmp oge double %673, 0.000000e+00
  br i1 %674, label %675, label %677

675:                                              ; preds = %661
  %676 = load double, ptr %46, align 8, !tbaa !11
  br label %680

677:                                              ; preds = %661
  %678 = load double, ptr %46, align 8, !tbaa !11
  %679 = fneg double %678
  br label %680

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

695:                                              ; preds = %680
  %696 = load double, ptr %47, align 8, !tbaa !11
  br label %700

697:                                              ; preds = %680
  %698 = load double, ptr %47, align 8, !tbaa !11
  %699 = fneg double %698
  br label %700

700:                                              ; preds = %697, %695
  %701 = phi double [ %696, %695 ], [ %699, %697 ]
  %702 = fadd double %681, %701
  %703 = load double, ptr %61, align 8, !tbaa !11
  %704 = load ptr, ptr %31, align 8, !tbaa !5
  %705 = load i32, ptr %54, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds double, ptr %704, i64 %706
  %708 = load double, ptr %707, align 8, !tbaa !11
  %709 = call double @llvm.fmuladd.f64(double %702, double %703, double %708)
  store double %709, ptr %707, align 8, !tbaa !11
  %710 = load i32, ptr %54, align 4, !tbaa !9
  %711 = load i32, ptr %56, align 4, !tbaa !9
  %712 = load i32, ptr %33, align 4, !tbaa !9
  %713 = mul nsw i32 %711, %712
  %714 = add nsw i32 %710, %713
  store i32 %714, ptr %44, align 4, !tbaa !9
  %715 = load i32, ptr %54, align 4, !tbaa !9
  %716 = load i32, ptr %55, align 4, !tbaa !9
  %717 = load i32, ptr %39, align 4, !tbaa !9
  %718 = mul nsw i32 %716, %717
  %719 = add nsw i32 %715, %718
  store i32 %719, ptr %45, align 4, !tbaa !9
  %720 = load ptr, ptr %20, align 8, !tbaa !5
  %721 = load i32, ptr %44, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds %struct.doublecomplex, ptr %720, i64 %722
  %724 = getelementptr inbounds %struct.doublecomplex, ptr %723, i32 0, i32 0
  %725 = load double, ptr %724, align 8, !tbaa !15
  store double %725, ptr %46, align 8, !tbaa !11
  %726 = load double, ptr %46, align 8, !tbaa !11
  %727 = fcmp oge double %726, 0.000000e+00
  br i1 %727, label %728, label %730

728:                                              ; preds = %700
  %729 = load double, ptr %46, align 8, !tbaa !11
  br label %733

730:                                              ; preds = %700
  %731 = load double, ptr %46, align 8, !tbaa !11
  %732 = fneg double %731
  br label %733

733:                                              ; preds = %730, %728
  %734 = phi double [ %729, %728 ], [ %732, %730 ]
  %735 = load ptr, ptr %20, align 8, !tbaa !5
  %736 = load i32, ptr %54, align 4, !tbaa !9
  %737 = load i32, ptr %56, align 4, !tbaa !9
  %738 = load i32, ptr %33, align 4, !tbaa !9
  %739 = mul nsw i32 %737, %738
  %740 = add nsw i32 %736, %739
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds %struct.doublecomplex, ptr %735, i64 %741
  %743 = call { double, double } @Cd(ptr noundef %742)
  %744 = extractvalue { double, double } %743, 0
  %745 = extractvalue { double, double } %743, 1
  store double %745, ptr %47, align 8, !tbaa !11
  %746 = load double, ptr %47, align 8, !tbaa !11
  %747 = fcmp oge double %746, 0.000000e+00
  br i1 %747, label %748, label %750

748:                                              ; preds = %733
  %749 = load double, ptr %47, align 8, !tbaa !11
  br label %753

750:                                              ; preds = %733
  %751 = load double, ptr %47, align 8, !tbaa !11
  %752 = fneg double %751
  br label %753

753:                                              ; preds = %750, %748
  %754 = phi double [ %749, %748 ], [ %752, %750 ]
  %755 = fadd double %734, %754
  %756 = load ptr, ptr %26, align 8, !tbaa !5
  %757 = load i32, ptr %45, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %756, i64 %758
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %759, i32 0, i32 0
  %761 = load double, ptr %760, align 8, !tbaa !15
  store double %761, ptr %48, align 8, !tbaa !11
  %762 = load double, ptr %48, align 8, !tbaa !11
  %763 = fcmp oge double %762, 0.000000e+00
  br i1 %763, label %764, label %766

764:                                              ; preds = %753
  %765 = load double, ptr %48, align 8, !tbaa !11
  br label %769

766:                                              ; preds = %753
  %767 = load double, ptr %48, align 8, !tbaa !11
  %768 = fneg double %767
  br label %769

769:                                              ; preds = %766, %764
  %770 = phi double [ %765, %764 ], [ %768, %766 ]
  %771 = load ptr, ptr %26, align 8, !tbaa !5
  %772 = load i32, ptr %54, align 4, !tbaa !9
  %773 = load i32, ptr %55, align 4, !tbaa !9
  %774 = load i32, ptr %39, align 4, !tbaa !9
  %775 = mul nsw i32 %773, %774
  %776 = add nsw i32 %772, %775
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %771, i64 %777
  %779 = call { double, double } @Cd(ptr noundef %778)
  %780 = extractvalue { double, double } %779, 0
  %781 = extractvalue { double, double } %779, 1
  store double %781, ptr %49, align 8, !tbaa !11
  %782 = load double, ptr %49, align 8, !tbaa !11
  %783 = fcmp oge double %782, 0.000000e+00
  br i1 %783, label %784, label %786

784:                                              ; preds = %769
  %785 = load double, ptr %49, align 8, !tbaa !11
  br label %789

786:                                              ; preds = %769
  %787 = load double, ptr %49, align 8, !tbaa !11
  %788 = fneg double %787
  br label %789

789:                                              ; preds = %786, %784
  %790 = phi double [ %785, %784 ], [ %788, %786 ]
  %791 = fadd double %770, %790
  %792 = load double, ptr %57, align 8, !tbaa !11
  %793 = call double @llvm.fmuladd.f64(double %755, double %791, double %792)
  store double %793, ptr %57, align 8, !tbaa !11
  br label %794

794:                                              ; preds = %789
  %795 = load i32, ptr %54, align 4, !tbaa !9
  %796 = add nsw i32 %795, 1
  store i32 %796, ptr %54, align 4, !tbaa !9
  br label %657, !llvm.loop !21

797:                                              ; preds = %657
  %798 = load double, ptr %57, align 8, !tbaa !11
  %799 = load ptr, ptr %31, align 8, !tbaa !5
  %800 = load i32, ptr %56, align 4, !tbaa !9
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds double, ptr %799, i64 %801
  %803 = load double, ptr %802, align 8, !tbaa !11
  %804 = fadd double %803, %798
  store double %804, ptr %802, align 8, !tbaa !11
  br label %805

805:                                              ; preds = %797
  %806 = load i32, ptr %56, align 4, !tbaa !9
  %807 = add nsw i32 %806, 1
  store i32 %807, ptr %56, align 4, !tbaa !9
  br label %580, !llvm.loop !22

808:                                              ; preds = %580
  br label %809

809:                                              ; preds = %808, %576
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  %810 = load ptr, ptr %18, align 8, !tbaa !5
  %811 = load i32, ptr %810, align 4, !tbaa !9
  store i32 %811, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %812

812:                                              ; preds = %929, %809
  %813 = load i32, ptr %54, align 4, !tbaa !9
  %814 = load i32, ptr %42, align 4, !tbaa !9
  %815 = icmp sle i32 %813, %814
  br i1 %815, label %816, label %932

816:                                              ; preds = %812
  %817 = load ptr, ptr %31, align 8, !tbaa !5
  %818 = load i32, ptr %54, align 4, !tbaa !9
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds double, ptr %817, i64 %819
  %821 = load double, ptr %820, align 8, !tbaa !11
  %822 = load double, ptr %53, align 8, !tbaa !11
  %823 = fcmp ogt double %821, %822
  br i1 %823, label %824, label %874

824:                                              ; preds = %816
  %825 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %825, ptr %43, align 4, !tbaa !9
  %826 = load double, ptr %57, align 8, !tbaa !11
  store double %826, ptr %48, align 8, !tbaa !11
  %827 = load ptr, ptr %30, align 8, !tbaa !5
  %828 = load i32, ptr %43, align 4, !tbaa !9
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds %struct.doublecomplex, ptr %827, i64 %829
  %831 = getelementptr inbounds %struct.doublecomplex, ptr %830, i32 0, i32 0
  %832 = load double, ptr %831, align 8, !tbaa !15
  store double %832, ptr %46, align 8, !tbaa !11
  %833 = load double, ptr %46, align 8, !tbaa !11
  %834 = fcmp oge double %833, 0.000000e+00
  br i1 %834, label %835, label %837

835:                                              ; preds = %824
  %836 = load double, ptr %46, align 8, !tbaa !11
  br label %840

837:                                              ; preds = %824
  %838 = load double, ptr %46, align 8, !tbaa !11
  %839 = fneg double %838
  br label %840

840:                                              ; preds = %837, %835
  %841 = phi double [ %836, %835 ], [ %839, %837 ]
  %842 = load ptr, ptr %30, align 8, !tbaa !5
  %843 = load i32, ptr %54, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds %struct.doublecomplex, ptr %842, i64 %844
  %846 = call { double, double } @Cd(ptr noundef %845)
  %847 = extractvalue { double, double } %846, 0
  %848 = extractvalue { double, double } %846, 1
  store double %848, ptr %47, align 8, !tbaa !11
  %849 = load double, ptr %47, align 8, !tbaa !11
  %850 = fcmp oge double %849, 0.000000e+00
  br i1 %850, label %851, label %853

851:                                              ; preds = %840
  %852 = load double, ptr %47, align 8, !tbaa !11
  br label %856

853:                                              ; preds = %840
  %854 = load double, ptr %47, align 8, !tbaa !11
  %855 = fneg double %854
  br label %856

856:                                              ; preds = %853, %851
  %857 = phi double [ %852, %851 ], [ %855, %853 ]
  %858 = fadd double %841, %857
  %859 = load ptr, ptr %31, align 8, !tbaa !5
  %860 = load i32, ptr %54, align 4, !tbaa !9
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds double, ptr %859, i64 %861
  %863 = load double, ptr %862, align 8, !tbaa !11
  %864 = fdiv double %858, %863
  store double %864, ptr %49, align 8, !tbaa !11
  %865 = load double, ptr %48, align 8, !tbaa !11
  %866 = load double, ptr %49, align 8, !tbaa !11
  %867 = fcmp oge double %865, %866
  br i1 %867, label %868, label %870

868:                                              ; preds = %856
  %869 = load double, ptr %48, align 8, !tbaa !11
  br label %872

870:                                              ; preds = %856
  %871 = load double, ptr %49, align 8, !tbaa !11
  br label %872

872:                                              ; preds = %870, %868
  %873 = phi double [ %869, %868 ], [ %871, %870 ]
  store double %873, ptr %57, align 8, !tbaa !11
  br label %928

874:                                              ; preds = %816
  %875 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %875, ptr %43, align 4, !tbaa !9
  %876 = load double, ptr %57, align 8, !tbaa !11
  store double %876, ptr %48, align 8, !tbaa !11
  %877 = load ptr, ptr %30, align 8, !tbaa !5
  %878 = load i32, ptr %43, align 4, !tbaa !9
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 %879
  %881 = getelementptr inbounds %struct.doublecomplex, ptr %880, i32 0, i32 0
  %882 = load double, ptr %881, align 8, !tbaa !15
  store double %882, ptr %46, align 8, !tbaa !11
  %883 = load double, ptr %46, align 8, !tbaa !11
  %884 = fcmp oge double %883, 0.000000e+00
  br i1 %884, label %885, label %887

885:                                              ; preds = %874
  %886 = load double, ptr %46, align 8, !tbaa !11
  br label %890

887:                                              ; preds = %874
  %888 = load double, ptr %46, align 8, !tbaa !11
  %889 = fneg double %888
  br label %890

890:                                              ; preds = %887, %885
  %891 = phi double [ %886, %885 ], [ %889, %887 ]
  %892 = load ptr, ptr %30, align 8, !tbaa !5
  %893 = load i32, ptr %54, align 4, !tbaa !9
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds %struct.doublecomplex, ptr %892, i64 %894
  %896 = call { double, double } @Cd(ptr noundef %895)
  %897 = extractvalue { double, double } %896, 0
  %898 = extractvalue { double, double } %896, 1
  store double %898, ptr %47, align 8, !tbaa !11
  %899 = load double, ptr %47, align 8, !tbaa !11
  %900 = fcmp oge double %899, 0.000000e+00
  br i1 %900, label %901, label %903

901:                                              ; preds = %890
  %902 = load double, ptr %47, align 8, !tbaa !11
  br label %906

903:                                              ; preds = %890
  %904 = load double, ptr %47, align 8, !tbaa !11
  %905 = fneg double %904
  br label %906

906:                                              ; preds = %903, %901
  %907 = phi double [ %902, %901 ], [ %905, %903 ]
  %908 = fadd double %891, %907
  %909 = load double, ptr %52, align 8, !tbaa !11
  %910 = fadd double %908, %909
  %911 = load ptr, ptr %31, align 8, !tbaa !5
  %912 = load i32, ptr %54, align 4, !tbaa !9
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds double, ptr %911, i64 %913
  %915 = load double, ptr %914, align 8, !tbaa !11
  %916 = load double, ptr %52, align 8, !tbaa !11
  %917 = fadd double %915, %916
  %918 = fdiv double %910, %917
  store double %918, ptr %49, align 8, !tbaa !11
  %919 = load double, ptr %48, align 8, !tbaa !11
  %920 = load double, ptr %49, align 8, !tbaa !11
  %921 = fcmp oge double %919, %920
  br i1 %921, label %922, label %924

922:                                              ; preds = %906
  %923 = load double, ptr %48, align 8, !tbaa !11
  br label %926

924:                                              ; preds = %906
  %925 = load double, ptr %49, align 8, !tbaa !11
  br label %926

926:                                              ; preds = %924, %922
  %927 = phi double [ %923, %922 ], [ %925, %924 ]
  store double %927, ptr %57, align 8, !tbaa !11
  br label %928

928:                                              ; preds = %926, %872
  br label %929

929:                                              ; preds = %928
  %930 = load i32, ptr %54, align 4, !tbaa !9
  %931 = add nsw i32 %930, 1
  store i32 %931, ptr %54, align 4, !tbaa !9
  br label %812, !llvm.loop !23

932:                                              ; preds = %812
  %933 = load double, ptr %57, align 8, !tbaa !11
  %934 = load ptr, ptr %29, align 8, !tbaa !5
  %935 = load i32, ptr %55, align 4, !tbaa !9
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds double, ptr %934, i64 %936
  store double %933, ptr %937, align 8, !tbaa !11
  %938 = load ptr, ptr %29, align 8, !tbaa !5
  %939 = load i32, ptr %55, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds double, ptr %938, i64 %940
  %942 = load double, ptr %941, align 8, !tbaa !11
  %943 = load double, ptr %65, align 8, !tbaa !11
  %944 = fcmp ogt double %942, %943
  br i1 %944, label %945, label %986

945:                                              ; preds = %932
  %946 = load ptr, ptr %29, align 8, !tbaa !5
  %947 = load i32, ptr %55, align 4, !tbaa !9
  %948 = sext i32 %947 to i64
  %949 = getelementptr inbounds double, ptr %946, i64 %948
  %950 = load double, ptr %949, align 8, !tbaa !11
  %951 = fmul double %950, 2.000000e+00
  %952 = load double, ptr %64, align 8, !tbaa !11
  %953 = fcmp ole double %951, %952
  br i1 %953, label %954, label %986

954:                                              ; preds = %945
  %955 = load i32, ptr %59, align 4, !tbaa !9
  %956 = icmp sle i32 %955, 5
  br i1 %956, label %957, label %986

957:                                              ; preds = %954
  %958 = load ptr, ptr %17, align 8, !tbaa !5
  %959 = load ptr, ptr %18, align 8, !tbaa !5
  %960 = load ptr, ptr %22, align 8, !tbaa !5
  %961 = load i32, ptr %36, align 4, !tbaa !9
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds %struct.doublecomplex, ptr %960, i64 %962
  %964 = load ptr, ptr %23, align 8, !tbaa !5
  %965 = load ptr, ptr %30, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.doublecomplex, ptr %965, i64 1
  %967 = load ptr, ptr %18, align 8, !tbaa !5
  %968 = load ptr, ptr %32, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef %958, ptr noundef %959, ptr noundef @c__1, ptr noundef %963, ptr noundef %964, ptr noundef %966, ptr noundef %967, ptr noundef %968)
  %969 = load ptr, ptr %18, align 8, !tbaa !5
  %970 = load ptr, ptr %30, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.doublecomplex, ptr %970, i64 1
  %972 = load ptr, ptr %26, align 8, !tbaa !5
  %973 = load i32, ptr %55, align 4, !tbaa !9
  %974 = load i32, ptr %39, align 4, !tbaa !9
  %975 = mul nsw i32 %973, %974
  %976 = add nsw i32 %975, 1
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds %struct.doublecomplex, ptr %972, i64 %977
  call void @zaxpy_(ptr noundef %969, ptr noundef @c_b1, ptr noundef %971, ptr noundef @c__1, ptr noundef %978, ptr noundef @c__1)
  %979 = load ptr, ptr %29, align 8, !tbaa !5
  %980 = load i32, ptr %55, align 4, !tbaa !9
  %981 = sext i32 %980 to i64
  %982 = getelementptr inbounds double, ptr %979, i64 %981
  %983 = load double, ptr %982, align 8, !tbaa !11
  store double %983, ptr %64, align 8, !tbaa !11
  %984 = load i32, ptr %59, align 4, !tbaa !9
  %985 = add nsw i32 %984, 1
  store i32 %985, ptr %59, align 4, !tbaa !9
  br label %261

986:                                              ; preds = %954, %945, %932
  %987 = load ptr, ptr %18, align 8, !tbaa !5
  %988 = load i32, ptr %987, align 4, !tbaa !9
  store i32 %988, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %989

989:                                              ; preds = %1100, %986
  %990 = load i32, ptr %54, align 4, !tbaa !9
  %991 = load i32, ptr %42, align 4, !tbaa !9
  %992 = icmp sle i32 %990, %991
  br i1 %992, label %993, label %1103

993:                                              ; preds = %989
  %994 = load ptr, ptr %31, align 8, !tbaa !5
  %995 = load i32, ptr %54, align 4, !tbaa !9
  %996 = sext i32 %995 to i64
  %997 = getelementptr inbounds double, ptr %994, i64 %996
  %998 = load double, ptr %997, align 8, !tbaa !11
  %999 = load double, ptr %53, align 8, !tbaa !11
  %1000 = fcmp ogt double %998, %999
  br i1 %1000, label %1001, label %1049

1001:                                             ; preds = %993
  %1002 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1002, ptr %43, align 4, !tbaa !9
  %1003 = load ptr, ptr %30, align 8, !tbaa !5
  %1004 = load i32, ptr %43, align 4, !tbaa !9
  %1005 = sext i32 %1004 to i64
  %1006 = getelementptr inbounds %struct.doublecomplex, ptr %1003, i64 %1005
  %1007 = getelementptr inbounds %struct.doublecomplex, ptr %1006, i32 0, i32 0
  %1008 = load double, ptr %1007, align 8, !tbaa !15
  store double %1008, ptr %46, align 8, !tbaa !11
  %1009 = load double, ptr %46, align 8, !tbaa !11
  %1010 = fcmp oge double %1009, 0.000000e+00
  br i1 %1010, label %1011, label %1013

1011:                                             ; preds = %1001
  %1012 = load double, ptr %46, align 8, !tbaa !11
  br label %1016

1013:                                             ; preds = %1001
  %1014 = load double, ptr %46, align 8, !tbaa !11
  %1015 = fneg double %1014
  br label %1016

1016:                                             ; preds = %1013, %1011
  %1017 = phi double [ %1012, %1011 ], [ %1015, %1013 ]
  %1018 = load ptr, ptr %30, align 8, !tbaa !5
  %1019 = load i32, ptr %54, align 4, !tbaa !9
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds %struct.doublecomplex, ptr %1018, i64 %1020
  %1022 = call { double, double } @Cd(ptr noundef %1021)
  %1023 = extractvalue { double, double } %1022, 0
  %1024 = extractvalue { double, double } %1022, 1
  store double %1024, ptr %47, align 8, !tbaa !11
  %1025 = load double, ptr %47, align 8, !tbaa !11
  %1026 = fcmp oge double %1025, 0.000000e+00
  br i1 %1026, label %1027, label %1029

1027:                                             ; preds = %1016
  %1028 = load double, ptr %47, align 8, !tbaa !11
  br label %1032

1029:                                             ; preds = %1016
  %1030 = load double, ptr %47, align 8, !tbaa !11
  %1031 = fneg double %1030
  br label %1032

1032:                                             ; preds = %1029, %1027
  %1033 = phi double [ %1028, %1027 ], [ %1031, %1029 ]
  %1034 = fadd double %1017, %1033
  %1035 = load i32, ptr %62, align 4, !tbaa !9
  %1036 = sitofp i32 %1035 to double
  %1037 = load double, ptr %65, align 8, !tbaa !11
  %1038 = fmul double %1036, %1037
  %1039 = load ptr, ptr %31, align 8, !tbaa !5
  %1040 = load i32, ptr %54, align 4, !tbaa !9
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds double, ptr %1039, i64 %1041
  %1043 = load double, ptr %1042, align 8, !tbaa !11
  %1044 = call double @llvm.fmuladd.f64(double %1038, double %1043, double %1034)
  %1045 = load ptr, ptr %31, align 8, !tbaa !5
  %1046 = load i32, ptr %54, align 4, !tbaa !9
  %1047 = sext i32 %1046 to i64
  %1048 = getelementptr inbounds double, ptr %1045, i64 %1047
  store double %1044, ptr %1048, align 8, !tbaa !11
  br label %1099

1049:                                             ; preds = %993
  %1050 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1050, ptr %43, align 4, !tbaa !9
  %1051 = load ptr, ptr %30, align 8, !tbaa !5
  %1052 = load i32, ptr %43, align 4, !tbaa !9
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %1051, i64 %1053
  %1055 = getelementptr inbounds %struct.doublecomplex, ptr %1054, i32 0, i32 0
  %1056 = load double, ptr %1055, align 8, !tbaa !15
  store double %1056, ptr %46, align 8, !tbaa !11
  %1057 = load double, ptr %46, align 8, !tbaa !11
  %1058 = fcmp oge double %1057, 0.000000e+00
  br i1 %1058, label %1059, label %1061

1059:                                             ; preds = %1049
  %1060 = load double, ptr %46, align 8, !tbaa !11
  br label %1064

1061:                                             ; preds = %1049
  %1062 = load double, ptr %46, align 8, !tbaa !11
  %1063 = fneg double %1062
  br label %1064

1064:                                             ; preds = %1061, %1059
  %1065 = phi double [ %1060, %1059 ], [ %1063, %1061 ]
  %1066 = load ptr, ptr %30, align 8, !tbaa !5
  %1067 = load i32, ptr %54, align 4, !tbaa !9
  %1068 = sext i32 %1067 to i64
  %1069 = getelementptr inbounds %struct.doublecomplex, ptr %1066, i64 %1068
  %1070 = call { double, double } @Cd(ptr noundef %1069)
  %1071 = extractvalue { double, double } %1070, 0
  %1072 = extractvalue { double, double } %1070, 1
  store double %1072, ptr %47, align 8, !tbaa !11
  %1073 = load double, ptr %47, align 8, !tbaa !11
  %1074 = fcmp oge double %1073, 0.000000e+00
  br i1 %1074, label %1075, label %1077

1075:                                             ; preds = %1064
  %1076 = load double, ptr %47, align 8, !tbaa !11
  br label %1080

1077:                                             ; preds = %1064
  %1078 = load double, ptr %47, align 8, !tbaa !11
  %1079 = fneg double %1078
  br label %1080

1080:                                             ; preds = %1077, %1075
  %1081 = phi double [ %1076, %1075 ], [ %1079, %1077 ]
  %1082 = fadd double %1065, %1081
  %1083 = load i32, ptr %62, align 4, !tbaa !9
  %1084 = sitofp i32 %1083 to double
  %1085 = load double, ptr %65, align 8, !tbaa !11
  %1086 = fmul double %1084, %1085
  %1087 = load ptr, ptr %31, align 8, !tbaa !5
  %1088 = load i32, ptr %54, align 4, !tbaa !9
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds double, ptr %1087, i64 %1089
  %1091 = load double, ptr %1090, align 8, !tbaa !11
  %1092 = call double @llvm.fmuladd.f64(double %1086, double %1091, double %1082)
  %1093 = load double, ptr %52, align 8, !tbaa !11
  %1094 = fadd double %1092, %1093
  %1095 = load ptr, ptr %31, align 8, !tbaa !5
  %1096 = load i32, ptr %54, align 4, !tbaa !9
  %1097 = sext i32 %1096 to i64
  %1098 = getelementptr inbounds double, ptr %1095, i64 %1097
  store double %1094, ptr %1098, align 8, !tbaa !11
  br label %1099

1099:                                             ; preds = %1080, %1032
  br label %1100

1100:                                             ; preds = %1099
  %1101 = load i32, ptr %54, align 4, !tbaa !9
  %1102 = add nsw i32 %1101, 1
  store i32 %1102, ptr %54, align 4, !tbaa !9
  br label %989, !llvm.loop !24

1103:                                             ; preds = %989
  store i32 0, ptr %51, align 4, !tbaa !9
  br label %1104

1104:                                             ; preds = %1260, %1103
  %1105 = load ptr, ptr %18, align 8, !tbaa !5
  %1106 = load ptr, ptr %30, align 8, !tbaa !5
  %1107 = load ptr, ptr %18, align 8, !tbaa !5
  %1108 = load i32, ptr %1107, align 4, !tbaa !9
  %1109 = add nsw i32 %1108, 1
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds %struct.doublecomplex, ptr %1106, i64 %1110
  %1112 = load ptr, ptr %30, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.doublecomplex, ptr %1112, i64 1
  %1114 = load ptr, ptr %28, align 8, !tbaa !5
  %1115 = load i32, ptr %55, align 4, !tbaa !9
  %1116 = sext i32 %1115 to i64
  %1117 = getelementptr inbounds double, ptr %1114, i64 %1116
  %1118 = getelementptr inbounds [3 x i32], ptr %58, i64 0, i64 0
  call void @zlacn2_(ptr noundef %1105, ptr noundef %1111, ptr noundef %1113, ptr noundef %1117, ptr noundef %51, ptr noundef %1118)
  %1119 = load i32, ptr %51, align 4, !tbaa !9
  %1120 = icmp ne i32 %1119, 0
  br i1 %1120, label %1121, label %1261

1121:                                             ; preds = %1104
  %1122 = load i32, ptr %51, align 4, !tbaa !9
  %1123 = icmp eq i32 %1122, 1
  br i1 %1123, label %1124, label %1190

1124:                                             ; preds = %1121
  %1125 = load ptr, ptr %17, align 8, !tbaa !5
  %1126 = load ptr, ptr %18, align 8, !tbaa !5
  %1127 = load ptr, ptr %22, align 8, !tbaa !5
  %1128 = load i32, ptr %36, align 4, !tbaa !9
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %1127, i64 %1129
  %1131 = load ptr, ptr %23, align 8, !tbaa !5
  %1132 = load ptr, ptr %30, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.doublecomplex, ptr %1132, i64 1
  %1134 = load ptr, ptr %18, align 8, !tbaa !5
  %1135 = load ptr, ptr %32, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef %1125, ptr noundef %1126, ptr noundef @c__1, ptr noundef %1130, ptr noundef %1131, ptr noundef %1133, ptr noundef %1134, ptr noundef %1135)
  %1136 = load ptr, ptr %18, align 8, !tbaa !5
  %1137 = load i32, ptr %1136, align 4, !tbaa !9
  store i32 %1137, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1138

1138:                                             ; preds = %1186, %1124
  %1139 = load i32, ptr %54, align 4, !tbaa !9
  %1140 = load i32, ptr %42, align 4, !tbaa !9
  %1141 = icmp sle i32 %1139, %1140
  br i1 %1141, label %1142, label %1189

1142:                                             ; preds = %1138
  %1143 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1143, ptr %43, align 4, !tbaa !9
  %1144 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1144, ptr %44, align 4, !tbaa !9
  %1145 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1145, ptr %45, align 4, !tbaa !9
  %1146 = load ptr, ptr %31, align 8, !tbaa !5
  %1147 = load i32, ptr %44, align 4, !tbaa !9
  %1148 = sext i32 %1147 to i64
  %1149 = getelementptr inbounds double, ptr %1146, i64 %1148
  %1150 = load double, ptr %1149, align 8, !tbaa !11
  %1151 = load ptr, ptr %30, align 8, !tbaa !5
  %1152 = load i32, ptr %45, align 4, !tbaa !9
  %1153 = sext i32 %1152 to i64
  %1154 = getelementptr inbounds %struct.doublecomplex, ptr %1151, i64 %1153
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %1154, i32 0, i32 0
  %1156 = load double, ptr %1155, align 8, !tbaa !15
  %1157 = fmul double %1150, %1156
  %1158 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %1157, ptr %1158, align 8, !tbaa !15
  %1159 = load ptr, ptr %31, align 8, !tbaa !5
  %1160 = load i32, ptr %44, align 4, !tbaa !9
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr inbounds double, ptr %1159, i64 %1161
  %1163 = load double, ptr %1162, align 8, !tbaa !11
  %1164 = load ptr, ptr %30, align 8, !tbaa !5
  %1165 = load i32, ptr %45, align 4, !tbaa !9
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds %struct.doublecomplex, ptr %1164, i64 %1166
  %1168 = getelementptr inbounds %struct.doublecomplex, ptr %1167, i32 0, i32 1
  %1169 = load double, ptr %1168, align 8, !tbaa !17
  %1170 = fmul double %1163, %1169
  %1171 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %1170, ptr %1171, align 8, !tbaa !17
  %1172 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1173 = load double, ptr %1172, align 8, !tbaa !15
  %1174 = load ptr, ptr %30, align 8, !tbaa !5
  %1175 = load i32, ptr %43, align 4, !tbaa !9
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds %struct.doublecomplex, ptr %1174, i64 %1176
  %1178 = getelementptr inbounds %struct.doublecomplex, ptr %1177, i32 0, i32 0
  store double %1173, ptr %1178, align 8, !tbaa !15
  %1179 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1180 = load double, ptr %1179, align 8, !tbaa !17
  %1181 = load ptr, ptr %30, align 8, !tbaa !5
  %1182 = load i32, ptr %43, align 4, !tbaa !9
  %1183 = sext i32 %1182 to i64
  %1184 = getelementptr inbounds %struct.doublecomplex, ptr %1181, i64 %1183
  %1185 = getelementptr inbounds %struct.doublecomplex, ptr %1184, i32 0, i32 1
  store double %1180, ptr %1185, align 8, !tbaa !17
  br label %1186

1186:                                             ; preds = %1142
  %1187 = load i32, ptr %54, align 4, !tbaa !9
  %1188 = add nsw i32 %1187, 1
  store i32 %1188, ptr %54, align 4, !tbaa !9
  br label %1138, !llvm.loop !25

1189:                                             ; preds = %1138
  br label %1260

1190:                                             ; preds = %1121
  %1191 = load i32, ptr %51, align 4, !tbaa !9
  %1192 = icmp eq i32 %1191, 2
  br i1 %1192, label %1193, label %1259

1193:                                             ; preds = %1190
  %1194 = load ptr, ptr %18, align 8, !tbaa !5
  %1195 = load i32, ptr %1194, align 4, !tbaa !9
  store i32 %1195, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1196

1196:                                             ; preds = %1244, %1193
  %1197 = load i32, ptr %54, align 4, !tbaa !9
  %1198 = load i32, ptr %42, align 4, !tbaa !9
  %1199 = icmp sle i32 %1197, %1198
  br i1 %1199, label %1200, label %1247

1200:                                             ; preds = %1196
  %1201 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1201, ptr %43, align 4, !tbaa !9
  %1202 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1202, ptr %44, align 4, !tbaa !9
  %1203 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1203, ptr %45, align 4, !tbaa !9
  %1204 = load ptr, ptr %31, align 8, !tbaa !5
  %1205 = load i32, ptr %44, align 4, !tbaa !9
  %1206 = sext i32 %1205 to i64
  %1207 = getelementptr inbounds double, ptr %1204, i64 %1206
  %1208 = load double, ptr %1207, align 8, !tbaa !11
  %1209 = load ptr, ptr %30, align 8, !tbaa !5
  %1210 = load i32, ptr %45, align 4, !tbaa !9
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds %struct.doublecomplex, ptr %1209, i64 %1211
  %1213 = getelementptr inbounds %struct.doublecomplex, ptr %1212, i32 0, i32 0
  %1214 = load double, ptr %1213, align 8, !tbaa !15
  %1215 = fmul double %1208, %1214
  %1216 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %1215, ptr %1216, align 8, !tbaa !15
  %1217 = load ptr, ptr %31, align 8, !tbaa !5
  %1218 = load i32, ptr %44, align 4, !tbaa !9
  %1219 = sext i32 %1218 to i64
  %1220 = getelementptr inbounds double, ptr %1217, i64 %1219
  %1221 = load double, ptr %1220, align 8, !tbaa !11
  %1222 = load ptr, ptr %30, align 8, !tbaa !5
  %1223 = load i32, ptr %45, align 4, !tbaa !9
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds %struct.doublecomplex, ptr %1222, i64 %1224
  %1226 = getelementptr inbounds %struct.doublecomplex, ptr %1225, i32 0, i32 1
  %1227 = load double, ptr %1226, align 8, !tbaa !17
  %1228 = fmul double %1221, %1227
  %1229 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %1228, ptr %1229, align 8, !tbaa !17
  %1230 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1231 = load double, ptr %1230, align 8, !tbaa !15
  %1232 = load ptr, ptr %30, align 8, !tbaa !5
  %1233 = load i32, ptr %43, align 4, !tbaa !9
  %1234 = sext i32 %1233 to i64
  %1235 = getelementptr inbounds %struct.doublecomplex, ptr %1232, i64 %1234
  %1236 = getelementptr inbounds %struct.doublecomplex, ptr %1235, i32 0, i32 0
  store double %1231, ptr %1236, align 8, !tbaa !15
  %1237 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1238 = load double, ptr %1237, align 8, !tbaa !17
  %1239 = load ptr, ptr %30, align 8, !tbaa !5
  %1240 = load i32, ptr %43, align 4, !tbaa !9
  %1241 = sext i32 %1240 to i64
  %1242 = getelementptr inbounds %struct.doublecomplex, ptr %1239, i64 %1241
  %1243 = getelementptr inbounds %struct.doublecomplex, ptr %1242, i32 0, i32 1
  store double %1238, ptr %1243, align 8, !tbaa !17
  br label %1244

1244:                                             ; preds = %1200
  %1245 = load i32, ptr %54, align 4, !tbaa !9
  %1246 = add nsw i32 %1245, 1
  store i32 %1246, ptr %54, align 4, !tbaa !9
  br label %1196, !llvm.loop !26

1247:                                             ; preds = %1196
  %1248 = load ptr, ptr %17, align 8, !tbaa !5
  %1249 = load ptr, ptr %18, align 8, !tbaa !5
  %1250 = load ptr, ptr %22, align 8, !tbaa !5
  %1251 = load i32, ptr %36, align 4, !tbaa !9
  %1252 = sext i32 %1251 to i64
  %1253 = getelementptr inbounds %struct.doublecomplex, ptr %1250, i64 %1252
  %1254 = load ptr, ptr %23, align 8, !tbaa !5
  %1255 = load ptr, ptr %30, align 8, !tbaa !5
  %1256 = getelementptr inbounds %struct.doublecomplex, ptr %1255, i64 1
  %1257 = load ptr, ptr %18, align 8, !tbaa !5
  %1258 = load ptr, ptr %32, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef %1248, ptr noundef %1249, ptr noundef @c__1, ptr noundef %1253, ptr noundef %1254, ptr noundef %1256, ptr noundef %1257, ptr noundef %1258)
  br label %1259

1259:                                             ; preds = %1247, %1190
  br label %1260

1260:                                             ; preds = %1259, %1189
  br label %1104

1261:                                             ; preds = %1104
  store double 0.000000e+00, ptr %64, align 8, !tbaa !11
  %1262 = load ptr, ptr %18, align 8, !tbaa !5
  %1263 = load i32, ptr %1262, align 4, !tbaa !9
  store i32 %1263, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1264

1264:                                             ; preds = %1320, %1261
  %1265 = load i32, ptr %54, align 4, !tbaa !9
  %1266 = load i32, ptr %42, align 4, !tbaa !9
  %1267 = icmp sle i32 %1265, %1266
  br i1 %1267, label %1268, label %1323

1268:                                             ; preds = %1264
  %1269 = load i32, ptr %54, align 4, !tbaa !9
  %1270 = load i32, ptr %55, align 4, !tbaa !9
  %1271 = load i32, ptr %39, align 4, !tbaa !9
  %1272 = mul nsw i32 %1270, %1271
  %1273 = add nsw i32 %1269, %1272
  store i32 %1273, ptr %43, align 4, !tbaa !9
  %1274 = load double, ptr %64, align 8, !tbaa !11
  store double %1274, ptr %48, align 8, !tbaa !11
  %1275 = load ptr, ptr %26, align 8, !tbaa !5
  %1276 = load i32, ptr %43, align 4, !tbaa !9
  %1277 = sext i32 %1276 to i64
  %1278 = getelementptr inbounds %struct.doublecomplex, ptr %1275, i64 %1277
  %1279 = getelementptr inbounds %struct.doublecomplex, ptr %1278, i32 0, i32 0
  %1280 = load double, ptr %1279, align 8, !tbaa !15
  store double %1280, ptr %46, align 8, !tbaa !11
  %1281 = load double, ptr %46, align 8, !tbaa !11
  %1282 = fcmp oge double %1281, 0.000000e+00
  br i1 %1282, label %1283, label %1285

1283:                                             ; preds = %1268
  %1284 = load double, ptr %46, align 8, !tbaa !11
  br label %1288

1285:                                             ; preds = %1268
  %1286 = load double, ptr %46, align 8, !tbaa !11
  %1287 = fneg double %1286
  br label %1288

1288:                                             ; preds = %1285, %1283
  %1289 = phi double [ %1284, %1283 ], [ %1287, %1285 ]
  %1290 = load ptr, ptr %26, align 8, !tbaa !5
  %1291 = load i32, ptr %54, align 4, !tbaa !9
  %1292 = load i32, ptr %55, align 4, !tbaa !9
  %1293 = load i32, ptr %39, align 4, !tbaa !9
  %1294 = mul nsw i32 %1292, %1293
  %1295 = add nsw i32 %1291, %1294
  %1296 = sext i32 %1295 to i64
  %1297 = getelementptr inbounds %struct.doublecomplex, ptr %1290, i64 %1296
  %1298 = call { double, double } @Cd(ptr noundef %1297)
  %1299 = extractvalue { double, double } %1298, 0
  %1300 = extractvalue { double, double } %1298, 1
  store double %1300, ptr %47, align 8, !tbaa !11
  %1301 = load double, ptr %47, align 8, !tbaa !11
  %1302 = fcmp oge double %1301, 0.000000e+00
  br i1 %1302, label %1303, label %1305

1303:                                             ; preds = %1288
  %1304 = load double, ptr %47, align 8, !tbaa !11
  br label %1308

1305:                                             ; preds = %1288
  %1306 = load double, ptr %47, align 8, !tbaa !11
  %1307 = fneg double %1306
  br label %1308

1308:                                             ; preds = %1305, %1303
  %1309 = phi double [ %1304, %1303 ], [ %1307, %1305 ]
  %1310 = fadd double %1289, %1309
  store double %1310, ptr %49, align 8, !tbaa !11
  %1311 = load double, ptr %48, align 8, !tbaa !11
  %1312 = load double, ptr %49, align 8, !tbaa !11
  %1313 = fcmp oge double %1311, %1312
  br i1 %1313, label %1314, label %1316

1314:                                             ; preds = %1308
  %1315 = load double, ptr %48, align 8, !tbaa !11
  br label %1318

1316:                                             ; preds = %1308
  %1317 = load double, ptr %49, align 8, !tbaa !11
  br label %1318

1318:                                             ; preds = %1316, %1314
  %1319 = phi double [ %1315, %1314 ], [ %1317, %1316 ]
  store double %1319, ptr %64, align 8, !tbaa !11
  br label %1320

1320:                                             ; preds = %1318
  %1321 = load i32, ptr %54, align 4, !tbaa !9
  %1322 = add nsw i32 %1321, 1
  store i32 %1322, ptr %54, align 4, !tbaa !9
  br label %1264, !llvm.loop !27

1323:                                             ; preds = %1264
  %1324 = load double, ptr %64, align 8, !tbaa !11
  %1325 = fcmp une double %1324, 0.000000e+00
  br i1 %1325, label %1326, label %1334

1326:                                             ; preds = %1323
  %1327 = load double, ptr %64, align 8, !tbaa !11
  %1328 = load ptr, ptr %28, align 8, !tbaa !5
  %1329 = load i32, ptr %55, align 4, !tbaa !9
  %1330 = sext i32 %1329 to i64
  %1331 = getelementptr inbounds double, ptr %1328, i64 %1330
  %1332 = load double, ptr %1331, align 8, !tbaa !11
  %1333 = fdiv double %1332, %1327
  store double %1333, ptr %1331, align 8, !tbaa !11
  br label %1334

1334:                                             ; preds = %1326, %1323
  br label %1335

1335:                                             ; preds = %1334
  %1336 = load i32, ptr %55, align 4, !tbaa !9
  %1337 = add nsw i32 %1336, 1
  store i32 %1337, ptr %55, align 4, !tbaa !9
  br label %256, !llvm.loop !28

1338:                                             ; preds = %256
  store i32 1, ptr %66, align 4
  br label %1339

1339:                                             ; preds = %1338, %240, %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 12, 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 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, 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
  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 @zhemv_(ptr noundef, 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 @zpotrs_(ptr noundef, 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 @zporfs_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr nocapture noundef readonly %8, ptr noundef %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr nocapture noundef %12, ptr noundef %13, ptr nocapture noundef %14, ptr noundef %15) local_unnamed_addr #0 {
  %17 = ptrtoint ptr %11 to i64
  %18 = ptrtoint ptr %12 to i64
  %19 = alloca i32, align 4
  %20 = alloca %struct.doublecomplex, align 16
  %21 = alloca i32, align 4
  %22 = alloca [3 x i32], align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %22) #6
  %23 = load i32, ptr %4, align 4, !tbaa !5
  %narrow496 = xor i32 %23, -1
  %24 = sext i32 %narrow496 to i64
  %25 = getelementptr inbounds %struct.doublecomplex, ptr %3, i64 %24
  %26 = load i32, ptr %8, align 4, !tbaa !5
  %narrow = xor i32 %26, -1
  %27 = sext i32 %narrow to i64
  %28 = getelementptr inbounds %struct.doublecomplex, ptr %7, i64 %27
  %29 = load i32, ptr %10, align 4, !tbaa !5
  %narrow492 = xor i32 %29, -1
  %30 = sext i32 %narrow492 to i64
  %31 = getelementptr inbounds %struct.doublecomplex, ptr %9, i64 %30
  %32 = getelementptr inbounds i8, ptr %11, i64 -8
  %33 = getelementptr inbounds i8, ptr %12, i64 -8
  %34 = getelementptr inbounds i8, ptr %13, i64 -16
  %35 = getelementptr inbounds i8, ptr %14, i64 -8
  store i32 0, ptr %15, align 4, !tbaa !5
  %36 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not = icmp eq i32 %36, 0
  br i1 %.not, label %37, label %39

37:                                               ; preds = %16
  %38 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %.not493 = icmp eq i32 %38, 0
  br i1 %.not493, label %.thread.sink.split, label %39

39:                                               ; preds = %37, %16
  %40 = load i32, ptr %1, align 4, !tbaa !5
  %41 = icmp slt i32 %40, 0
  br i1 %41, label %.thread.sink.split, label %42

42:                                               ; preds = %39
  %43 = load i32, ptr %2, align 4, !tbaa !5
  %44 = icmp slt i32 %43, 0
  br i1 %44, label %.thread.sink.split, label %45

45:                                               ; preds = %42
  %46 = load i32, ptr %4, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %40, i32 1)
  %47 = icmp slt i32 %46, %spec.select
  br i1 %47, label %.thread.sink.split, label %48

48:                                               ; preds = %45
  %49 = load i32, ptr %6, align 4, !tbaa !5
  %50 = icmp slt i32 %49, %spec.select
  br i1 %50, label %.thread.sink.split, label %51

51:                                               ; preds = %48
  %52 = load i32, ptr %8, align 4, !tbaa !5
  %53 = icmp slt i32 %52, %spec.select
  br i1 %53, label %.thread.sink.split, label %54

54:                                               ; preds = %51
  %55 = load i32, ptr %10, align 4, !tbaa !5
  %56 = icmp slt i32 %55, %spec.select
  br i1 %56, label %.thread.sink.split, label %57

57:                                               ; preds = %54
  %.pr = load i32, ptr %15, align 4, !tbaa !5
  %.not494 = icmp eq i32 %.pr, 0
  br i1 %.not494, label %61, label %.thread

.thread.sink.split:                               ; preds = %54, %51, %48, %45, %42, %39, %37
  %.sink = phi i32 [ -1, %37 ], [ -2, %39 ], [ -3, %42 ], [ -5, %45 ], [ -7, %48 ], [ -9, %51 ], [ -11, %54 ]
  store i32 %.sink, ptr %15, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %57
  %58 = phi i32 [ %.pr, %57 ], [ %.sink, %.thread.sink.split ]
  %59 = sub nsw i32 0, %58
  store i32 %59, ptr %19, align 4, !tbaa !5
  %60 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %19, i32 noundef 6) #6
  br label %.loopexit

61:                                               ; preds = %57
  %62 = icmp eq i32 %40, 0
  %.not508580 = icmp eq i32 %43, 0
  br i1 %62, label %64, label %63

63:                                               ; preds = %61
  br i1 %.not508580, label %.loopexit, label %87

64:                                               ; preds = %61
  br i1 %.not508580, label %.loopexit, label %.lr.ph583.preheader

.lr.ph583.preheader:                              ; preds = %64
  %65 = add nuw i32 %43, 1
  %wide.trip.count645 = zext i32 %65 to i64
  %66 = zext nneg i32 %43 to i64
  %min.iters.check721 = icmp ult i32 %43, 4
  %67 = sub i64 %18, %17
  %diff.check = icmp ult i64 %67, 32
  %or.cond732 = or i1 %min.iters.check721, %diff.check
  br i1 %or.cond732, label %.lr.ph583.preheader742, label %vector.ph722

vector.ph722:                                     ; preds = %.lr.ph583.preheader
  %n.vec724 = and i64 %66, 2147483644
  %ind.end725 = or disjoint i64 %n.vec724, 1
  br label %vector.body727

vector.body727:                                   ; preds = %vector.body727, %vector.ph722
  %index728 = phi i64 [ 0, %vector.ph722 ], [ %index.next730, %vector.body727 ]
  %68 = getelementptr double, ptr %11, i64 %index728
  %69 = getelementptr inbounds i8, ptr %68, i64 16
  store <2 x double> zeroinitializer, ptr %68, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %69, align 8, !tbaa !9
  %70 = getelementptr double, ptr %12, i64 %index728
  %71 = getelementptr inbounds i8, ptr %70, i64 16
  store <2 x double> zeroinitializer, ptr %70, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %71, align 8, !tbaa !9
  %index.next730 = add nuw i64 %index728, 4
  %72 = icmp eq i64 %index.next730, %n.vec724
  br i1 %72, label %middle.block719, label %vector.body727, !llvm.loop !11

middle.block719:                                  ; preds = %vector.body727
  %cmp.n731 = icmp eq i64 %n.vec724, %66
  br i1 %cmp.n731, label %.loopexit, label %.lr.ph583.preheader742

.lr.ph583.preheader742:                           ; preds = %middle.block719, %.lr.ph583.preheader
  %indvars.iv642.ph = phi i64 [ 1, %.lr.ph583.preheader ], [ %ind.end725, %middle.block719 ]
  %73 = sub nsw i64 %wide.trip.count645, %indvars.iv642.ph
  %74 = zext nneg i32 %43 to i64
  %75 = sub nsw i64 %74, %indvars.iv642.ph
  %xtraiter758 = and i64 %73, 3
  %lcmp.mod759.not = icmp eq i64 %xtraiter758, 0
  br i1 %lcmp.mod759.not, label %.lr.ph583.prol.loopexit, label %.lr.ph583.prol

.lr.ph583.prol:                                   ; preds = %.lr.ph583.preheader742, %.lr.ph583.prol
  %indvars.iv642.prol = phi i64 [ %indvars.iv.next643.prol, %.lr.ph583.prol ], [ %indvars.iv642.ph, %.lr.ph583.preheader742 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph583.prol ], [ 0, %.lr.ph583.preheader742 ]
  %76 = getelementptr inbounds double, ptr %32, i64 %indvars.iv642.prol
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %77 = getelementptr inbounds double, ptr %33, i64 %indvars.iv642.prol
  store double 0.000000e+00, ptr %77, align 8, !tbaa !9
  %indvars.iv.next643.prol = add nuw nsw i64 %indvars.iv642.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter758
  br i1 %prol.iter.cmp.not, label %.lr.ph583.prol.loopexit, label %.lr.ph583.prol, !llvm.loop !15

.lr.ph583.prol.loopexit:                          ; preds = %.lr.ph583.prol, %.lr.ph583.preheader742
  %indvars.iv642.unr = phi i64 [ %indvars.iv642.ph, %.lr.ph583.preheader742 ], [ %indvars.iv.next643.prol, %.lr.ph583.prol ]
  %78 = icmp ult i64 %75, 3
  br i1 %78, label %.loopexit, label %.lr.ph583

.lr.ph583:                                        ; preds = %.lr.ph583.prol.loopexit, %.lr.ph583
  %indvars.iv642 = phi i64 [ %indvars.iv.next643.3, %.lr.ph583 ], [ %indvars.iv642.unr, %.lr.ph583.prol.loopexit ]
  %79 = getelementptr inbounds double, ptr %32, i64 %indvars.iv642
  store double 0.000000e+00, ptr %79, align 8, !tbaa !9
  %80 = getelementptr inbounds double, ptr %33, i64 %indvars.iv642
  store double 0.000000e+00, ptr %80, align 8, !tbaa !9
  %81 = getelementptr double, ptr %11, i64 %indvars.iv642
  store double 0.000000e+00, ptr %81, align 8, !tbaa !9
  %82 = getelementptr double, ptr %12, i64 %indvars.iv642
  store double 0.000000e+00, ptr %82, align 8, !tbaa !9
  %indvars.iv.next643.1 = add nuw nsw i64 %indvars.iv642, 2
  %83 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next643.1
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  %84 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next643.1
  store double 0.000000e+00, ptr %84, align 8, !tbaa !9
  %indvars.iv.next643.2 = add nuw nsw i64 %indvars.iv642, 3
  %85 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next643.2
  store double 0.000000e+00, ptr %85, align 8, !tbaa !9
  %86 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next643.2
  store double 0.000000e+00, ptr %86, align 8, !tbaa !9
  %indvars.iv.next643.3 = add nuw nsw i64 %indvars.iv642, 4
  %exitcond646.not.3 = icmp eq i64 %indvars.iv.next643.3, %wide.trip.count645
  br i1 %exitcond646.not.3, label %.loopexit, label %.lr.ph583, !llvm.loop !17

87:                                               ; preds = %63
  %88 = add nuw nsw i32 %40, 1
  %89 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #6
  %90 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #6
  %91 = uitofp nneg i32 %88 to double
  %92 = fmul double %90, %91
  %93 = fdiv double %92, %89
  %94 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep576 = getelementptr i8, ptr %28, i64 16
  %.not495578 = icmp slt i32 %94, 1
  br i1 %.not495578, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %87
  %invariant.gep = getelementptr i8, ptr %31, i64 16
  %95 = add i32 %23, 1
  %96 = fmul double %89, %91
  %97 = sext i32 %23 to i64
  %98 = sext i32 %26 to i64
  %99 = sext i32 %29 to i64
  %100 = zext nneg i32 %94 to i64
  %scevgep = getelementptr i8, ptr %13, i64 -16
  %scevgep689 = getelementptr i8, ptr %14, i64 -8
  %scevgep693 = getelementptr i8, ptr %13, i64 -16
  %scevgep695 = getelementptr i8, ptr %14, i64 -8
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge574.thread
  %indvars.iv639 = phi i64 [ 1, %.preheader.lr.ph ], [ %indvars.iv.next640, %._crit_edge574.thread ]
  %101 = getelementptr inbounds double, ptr %33, i64 %indvars.iv639
  %102 = mul nsw i64 %indvars.iv639, %98
  %gep577 = getelementptr %struct.doublecomplex, ptr %invariant.gep576, i64 %102
  %103 = mul nsw i64 %indvars.iv639, %99
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %103
  %invariant.gep660 = getelementptr %struct.doublecomplex, ptr %28, i64 %102
  %invariant.gep666 = getelementptr %struct.doublecomplex, ptr %31, i64 %103
  %invariant.gep664 = getelementptr %struct.doublecomplex, ptr %31, i64 %103
  %invariant.gep672 = getelementptr %struct.doublecomplex, ptr %31, i64 %103
  %invariant.gep670 = getelementptr %struct.doublecomplex, ptr %31, i64 %103
  br label %104

104:                                              ; preds = %.preheader, %274
  %.0474 = phi i32 [ %276, %274 ], [ 1, %.preheader ]
  %.0 = phi double [ %275, %274 ], [ 3.000000e+00, %.preheader ]
  call void @zcopy_(ptr noundef nonnull %1, ptr noundef %gep577, ptr noundef nonnull @c__1, ptr noundef %13, ptr noundef nonnull @c__1) #6
  store <2 x double> <double -1.000000e+00, double 0.000000e+00>, ptr %20, align 16, !tbaa !9
  call void @zhemv_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %20, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b1, ptr noundef %13, ptr noundef nonnull @c__1) #6
  %105 = load i32, ptr %1, align 4, !tbaa !5
  %.not497519 = icmp slt i32 %105, 1
  br i1 %.not497519, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %104
  %106 = add nuw i32 %105, 1
  %wide.trip.count = zext i32 %106 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 ]
  %gep661 = getelementptr %struct.doublecomplex, ptr %invariant.gep660, i64 %indvars.iv
  %107 = load double, ptr %gep661, align 8, !tbaa !18
  %108 = call { double, double } @Cd(ptr noundef nonnull %gep661)
  %109 = extractvalue { double, double } %108, 1
  %110 = insertelement <2 x double> poison, double %107, i64 0
  %111 = insertelement <2 x double> %110, double %109, i64 1
  %112 = fcmp oge <2 x double> %111, zeroinitializer
  %113 = fneg <2 x double> %111
  %114 = select <2 x i1> %112, <2 x double> %111, <2 x double> %113
  %shift = shufflevector <2 x double> %114, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %115 = fadd <2 x double> %114, %shift
  %116 = extractelement <2 x double> %115, i64 0
  %117 = getelementptr inbounds double, ptr %35, i64 %indvars.iv
  store double %116, ptr %117, 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, %104
  %118 = load i32, ptr %1, align 4, !tbaa !5
  %.not498538 = icmp slt i32 %118, 1
  br i1 %.not, label %179, label %119

119:                                              ; preds = %._crit_edge
  br i1 %.not498538, label %._crit_edge547, label %.lr.ph530.preheader

.lr.ph530.preheader:                              ; preds = %119
  %120 = add nuw i32 %118, 1
  %wide.trip.count601 = zext i32 %120 to i64
  br label %.lr.ph530

.lr.ph530:                                        ; preds = %.lr.ph530.preheader, %._crit_edge526
  %indvars.iv598 = phi i64 [ 1, %.lr.ph530.preheader ], [ %indvars.iv.next599, %._crit_edge526 ]
  %gep667 = getelementptr %struct.doublecomplex, ptr %invariant.gep666, i64 %indvars.iv598
  %121 = load double, ptr %gep667, align 8, !tbaa !18
  %122 = fcmp oge double %121, 0.000000e+00
  %123 = fneg double %121
  %124 = select i1 %122, double %121, double %123
  %125 = call { double, double } @Cd(ptr noundef nonnull %gep667)
  %126 = extractvalue { double, double } %125, 1
  %127 = fcmp oge double %126, 0.000000e+00
  %128 = fneg double %126
  %129 = select i1 %127, double %126, double %128
  %130 = fadd double %124, %129
  %.not507.not521 = icmp ugt i64 %indvars.iv598, 1
  br i1 %.not507.not521, label %.lr.ph525, label %._crit_edge526

.lr.ph525:                                        ; preds = %.lr.ph530
  %131 = mul nsw i64 %indvars.iv598, %97
  %invariant.gep662 = getelementptr %struct.doublecomplex, ptr %25, i64 %131
  br label %132

132:                                              ; preds = %.lr.ph525, %132
  %indvars.iv593 = phi i64 [ 1, %.lr.ph525 ], [ %indvars.iv.next594, %132 ]
  %.0475523 = phi double [ 0.000000e+00, %.lr.ph525 ], [ %166, %132 ]
  %gep663 = getelementptr %struct.doublecomplex, ptr %invariant.gep662, i64 %indvars.iv593
  %133 = load double, ptr %gep663, align 8, !tbaa !18
  %134 = call { double, double } @Cd(ptr noundef nonnull %gep663)
  %135 = extractvalue { double, double } %134, 1
  %136 = insertelement <2 x double> poison, double %133, i64 0
  %137 = insertelement <2 x double> %136, double %135, i64 1
  %138 = fcmp oge <2 x double> %137, zeroinitializer
  %139 = fneg <2 x double> %137
  %140 = select <2 x i1> %138, <2 x double> %137, <2 x double> %139
  %shift733 = shufflevector <2 x double> %140, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %141 = fadd <2 x double> %140, %shift733
  %142 = extractelement <2 x double> %141, i64 0
  %143 = getelementptr inbounds double, ptr %35, i64 %indvars.iv593
  %144 = load double, ptr %143, align 8, !tbaa !9
  %145 = call double @llvm.fmuladd.f64(double %142, double %130, double %144)
  store double %145, ptr %143, align 8, !tbaa !9
  %146 = load double, ptr %gep663, align 8, !tbaa !18
  %147 = call { double, double } @Cd(ptr noundef nonnull %gep663)
  %148 = extractvalue { double, double } %147, 1
  %149 = insertelement <2 x double> poison, double %146, i64 0
  %150 = insertelement <2 x double> %149, double %148, i64 1
  %151 = fcmp oge <2 x double> %150, zeroinitializer
  %152 = fneg <2 x double> %150
  %153 = select <2 x i1> %151, <2 x double> %150, <2 x double> %152
  %shift734 = shufflevector <2 x double> %153, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %154 = fadd <2 x double> %153, %shift734
  %155 = extractelement <2 x double> %154, i64 0
  %gep665 = getelementptr %struct.doublecomplex, ptr %invariant.gep664, i64 %indvars.iv593
  %156 = load double, ptr %gep665, align 8, !tbaa !18
  %157 = call { double, double } @Cd(ptr noundef nonnull %gep665)
  %158 = extractvalue { double, double } %157, 1
  %159 = insertelement <2 x double> poison, double %156, i64 0
  %160 = insertelement <2 x double> %159, double %158, i64 1
  %161 = fcmp oge <2 x double> %160, zeroinitializer
  %162 = fneg <2 x double> %160
  %163 = select <2 x i1> %161, <2 x double> %160, <2 x double> %162
  %shift735 = shufflevector <2 x double> %163, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %164 = fadd <2 x double> %163, %shift735
  %165 = extractelement <2 x double> %164, i64 0
  %166 = call double @llvm.fmuladd.f64(double %155, double %165, double %.0475523)
  %indvars.iv.next594 = add nuw nsw i64 %indvars.iv593, 1
  %exitcond597.not = icmp eq i64 %indvars.iv.next594, %indvars.iv598
  br i1 %exitcond597.not, label %._crit_edge526, label %132, !llvm.loop !21

._crit_edge526:                                   ; preds = %132, %.lr.ph530
  %.0475.lcssa = phi double [ 0.000000e+00, %.lr.ph530 ], [ %166, %132 ]
  %167 = trunc nuw nsw i64 %indvars.iv598 to i32
  %168 = mul i32 %95, %167
  %169 = getelementptr inbounds double, ptr %35, i64 %indvars.iv598
  %170 = load double, ptr %169, align 8, !tbaa !9
  %171 = sext i32 %168 to i64
  %172 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %171
  %173 = load double, ptr %172, align 8, !tbaa !18
  %174 = fcmp oge double %173, 0.000000e+00
  %175 = fneg double %173
  %176 = select i1 %174, double %173, double %175
  %177 = call double @llvm.fmuladd.f64(double %176, double %130, double %170)
  %178 = fadd double %.0475.lcssa, %177
  store double %178, ptr %169, align 8, !tbaa !9
  %indvars.iv.next599 = add nuw nsw i64 %indvars.iv598, 1
  %exitcond602.not = icmp eq i64 %indvars.iv.next599, %wide.trip.count601
  br i1 %exitcond602.not, label %.loopexit514, label %.lr.ph530, !llvm.loop !22

179:                                              ; preds = %._crit_edge
  br i1 %.not498538, label %._crit_edge547, label %.lr.ph541.preheader

.lr.ph541.preheader:                              ; preds = %179
  %180 = add nuw i32 %118, 1
  %wide.trip.count612 = zext i32 %180 to i64
  br label %.lr.ph541

.lr.ph541:                                        ; preds = %.lr.ph541.preheader, %._crit_edge536
  %indvars.iv609 = phi i64 [ 1, %.lr.ph541.preheader ], [ %indvars.iv.next610, %._crit_edge536 ]
  %indvars.iv603 = phi i32 [ 2, %.lr.ph541.preheader ], [ %indvars.iv.next604, %._crit_edge536 ]
  %indvars611 = trunc i64 %indvars.iv609 to i32
  %gep673 = getelementptr %struct.doublecomplex, ptr %invariant.gep672, i64 %indvars.iv609
  %181 = load double, ptr %gep673, align 8, !tbaa !18
  %182 = call { double, double } @Cd(ptr noundef nonnull %gep673)
  %183 = extractvalue { double, double } %182, 1
  %184 = insertelement <2 x double> poison, double %181, i64 0
  %185 = insertelement <2 x double> %184, double %183, i64 1
  %186 = fcmp oge <2 x double> %185, zeroinitializer
  %187 = fneg <2 x double> %185
  %188 = select <2 x i1> %186, <2 x double> %185, <2 x double> %187
  %shift736 = shufflevector <2 x double> %188, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %189 = fadd <2 x double> %188, %shift736
  %190 = extractelement <2 x double> %189, i64 0
  %191 = mul nsw i32 %23, %indvars611
  %192 = sext i32 %191 to i64
  %193 = getelementptr %struct.doublecomplex, ptr %25, i64 %indvars.iv609
  %194 = getelementptr %struct.doublecomplex, ptr %193, i64 %192
  %195 = load double, ptr %194, align 8, !tbaa !18
  %196 = fcmp oge double %195, 0.000000e+00
  %197 = fneg double %195
  %198 = select i1 %196, double %195, double %197
  %199 = getelementptr inbounds double, ptr %35, i64 %indvars.iv609
  %200 = load double, ptr %199, align 8, !tbaa !9
  %201 = call double @llvm.fmuladd.f64(double %198, double %190, double %200)
  store double %201, ptr %199, align 8, !tbaa !9
  %202 = load i32, ptr %1, align 4, !tbaa !5
  %indvars.iv.next610 = add nuw nsw i64 %indvars.iv609, 1
  %203 = sext i32 %202 to i64
  %.not499531.not = icmp slt i64 %indvars.iv609, %203
  br i1 %.not499531.not, label %.lr.ph535.preheader, label %._crit_edge536

.lr.ph535.preheader:                              ; preds = %.lr.ph541
  %204 = mul nsw i64 %indvars.iv609, %97
  %205 = sext i32 %indvars.iv603 to i64
  %206 = add i32 %202, 1
  %invariant.gep668 = getelementptr %struct.doublecomplex, ptr %25, i64 %204
  br label %.lr.ph535

.lr.ph535:                                        ; preds = %.lr.ph535.preheader, %.lr.ph535
  %indvars.iv605 = phi i64 [ %205, %.lr.ph535.preheader ], [ %indvars.iv.next606, %.lr.ph535 ]
  %.1476533 = phi double [ 0.000000e+00, %.lr.ph535.preheader ], [ %240, %.lr.ph535 ]
  %gep669 = getelementptr %struct.doublecomplex, ptr %invariant.gep668, i64 %indvars.iv605
  %207 = load double, ptr %gep669, align 8, !tbaa !18
  %208 = call { double, double } @Cd(ptr noundef nonnull %gep669)
  %209 = extractvalue { double, double } %208, 1
  %210 = insertelement <2 x double> poison, double %207, i64 0
  %211 = insertelement <2 x double> %210, double %209, i64 1
  %212 = fcmp oge <2 x double> %211, zeroinitializer
  %213 = fneg <2 x double> %211
  %214 = select <2 x i1> %212, <2 x double> %211, <2 x double> %213
  %shift737 = shufflevector <2 x double> %214, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %215 = fadd <2 x double> %214, %shift737
  %216 = extractelement <2 x double> %215, i64 0
  %217 = getelementptr inbounds double, ptr %35, i64 %indvars.iv605
  %218 = load double, ptr %217, align 8, !tbaa !9
  %219 = call double @llvm.fmuladd.f64(double %216, double %190, double %218)
  store double %219, ptr %217, align 8, !tbaa !9
  %220 = load double, ptr %gep669, align 8, !tbaa !18
  %221 = call { double, double } @Cd(ptr noundef nonnull %gep669)
  %222 = extractvalue { double, double } %221, 1
  %223 = insertelement <2 x double> poison, double %220, i64 0
  %224 = insertelement <2 x double> %223, double %222, i64 1
  %225 = fcmp oge <2 x double> %224, zeroinitializer
  %226 = fneg <2 x double> %224
  %227 = select <2 x i1> %225, <2 x double> %224, <2 x double> %226
  %shift738 = shufflevector <2 x double> %227, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %228 = fadd <2 x double> %227, %shift738
  %229 = extractelement <2 x double> %228, i64 0
  %gep671 = getelementptr %struct.doublecomplex, ptr %invariant.gep670, i64 %indvars.iv605
  %230 = load double, ptr %gep671, align 8, !tbaa !18
  %231 = call { double, double } @Cd(ptr noundef nonnull %gep671)
  %232 = extractvalue { double, double } %231, 1
  %233 = insertelement <2 x double> poison, double %230, i64 0
  %234 = insertelement <2 x double> %233, double %232, i64 1
  %235 = fcmp oge <2 x double> %234, zeroinitializer
  %236 = fneg <2 x double> %234
  %237 = select <2 x i1> %235, <2 x double> %234, <2 x double> %236
  %shift739 = shufflevector <2 x double> %237, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %238 = fadd <2 x double> %237, %shift739
  %239 = extractelement <2 x double> %238, i64 0
  %240 = call double @llvm.fmuladd.f64(double %229, double %239, double %.1476533)
  %indvars.iv.next606 = add nsw i64 %indvars.iv605, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next606 to i32
  %exitcond608.not = icmp eq i32 %206, %lftr.wideiv
  br i1 %exitcond608.not, label %._crit_edge536.loopexit, label %.lr.ph535, !llvm.loop !23

._crit_edge536.loopexit:                          ; preds = %.lr.ph535
  %.pre = load double, ptr %199, align 8, !tbaa !9
  br label %._crit_edge536

._crit_edge536:                                   ; preds = %._crit_edge536.loopexit, %.lr.ph541
  %241 = phi double [ %201, %.lr.ph541 ], [ %.pre, %._crit_edge536.loopexit ]
  %.1476.lcssa = phi double [ 0.000000e+00, %.lr.ph541 ], [ %240, %._crit_edge536.loopexit ]
  %242 = fadd double %.1476.lcssa, %241
  store double %242, ptr %199, align 8, !tbaa !9
  %indvars.iv.next604 = add nuw i32 %indvars.iv603, 1
  %exitcond613.not = icmp eq i64 %indvars.iv.next610, %wide.trip.count612
  br i1 %exitcond613.not, label %.loopexit514, label %.lr.ph541, !llvm.loop !24

.loopexit514:                                     ; preds = %._crit_edge526, %._crit_edge536
  %.pr649 = load i32, ptr %1, align 4, !tbaa !5
  %.not501542 = icmp slt i32 %.pr649, 1
  br i1 %.not501542, label %._crit_edge547, label %.lr.ph546.preheader

.lr.ph546.preheader:                              ; preds = %.loopexit514
  %243 = add nuw i32 %.pr649, 1
  %wide.trip.count617 = zext i32 %243 to i64
  br label %.lr.ph546

.lr.ph546:                                        ; preds = %.lr.ph546.preheader, %266
  %indvars.iv614 = phi i64 [ 1, %.lr.ph546.preheader ], [ %indvars.iv.next615, %266 ]
  %.2544 = phi double [ 0.000000e+00, %.lr.ph546.preheader ], [ %268, %266 ]
  %244 = getelementptr inbounds double, ptr %35, i64 %indvars.iv614
  %245 = load double, ptr %244, align 8, !tbaa !9
  %246 = fcmp ogt double %245, %93
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %indvars.iv614
  %248 = load double, ptr %247, align 8, !tbaa !18
  %249 = fcmp oge double %248, 0.000000e+00
  %250 = fneg double %248
  %251 = select i1 %249, double %248, double %250
  %252 = call { double, double } @Cd(ptr noundef nonnull %247)
  %253 = extractvalue { double, double } %252, 1
  %254 = fcmp oge double %253, 0.000000e+00
  %255 = fneg double %253
  %256 = select i1 %254, double %253, double %255
  %257 = fadd double %251, %256
  br i1 %246, label %258, label %261

258:                                              ; preds = %.lr.ph546
  %259 = load double, ptr %244, align 8, !tbaa !9
  %260 = fdiv double %257, %259
  br label %266

261:                                              ; preds = %.lr.ph546
  %262 = fadd double %92, %257
  %263 = load double, ptr %244, align 8, !tbaa !9
  %264 = fadd double %92, %263
  %265 = fdiv double %262, %264
  br label %266

266:                                              ; preds = %258, %261
  %.sink678 = phi double [ %260, %258 ], [ %265, %261 ]
  %267 = fcmp oge double %.2544, %.sink678
  %268 = select i1 %267, double %.2544, double %.sink678
  %indvars.iv.next615 = add nuw nsw i64 %indvars.iv614, 1
  %exitcond618.not = icmp eq i64 %indvars.iv.next615, %wide.trip.count617
  br i1 %exitcond618.not, label %._crit_edge547, label %.lr.ph546, !llvm.loop !25

._crit_edge547:                                   ; preds = %266, %179, %119, %.loopexit514
  %.2.lcssa = phi double [ 0.000000e+00, %.loopexit514 ], [ 0.000000e+00, %119 ], [ 0.000000e+00, %179 ], [ %268, %266 ]
  store double %.2.lcssa, ptr %101, align 8, !tbaa !9
  %269 = fcmp ogt double %.2.lcssa, %89
  br i1 %269, label %270, label %277

270:                                              ; preds = %._crit_edge547
  %271 = fmul double %.2.lcssa, 2.000000e+00
  %272 = fcmp ole double %271, %.0
  %273 = icmp ult i32 %.0474, 6
  %or.cond = select i1 %272, i1 %273, i1 false
  br i1 %or.cond, label %274, label %277

274:                                              ; preds = %270
  call void @zpotrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef nonnull %1, ptr noundef nonnull %15) #6
  call void @zaxpy_(ptr noundef nonnull %1, ptr noundef nonnull @c_b1, ptr noundef %13, ptr noundef nonnull @c__1, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  %275 = load double, ptr %101, align 8, !tbaa !9
  %276 = add nuw nsw i32 %.0474, 1
  br label %104

277:                                              ; preds = %270, %._crit_edge547
  %278 = load i32, ptr %1, align 4, !tbaa !5
  %.not502549 = icmp slt i32 %278, 1
  br i1 %.not502549, label %._crit_edge553, label %.lr.ph552.preheader

.lr.ph552.preheader:                              ; preds = %277
  %279 = add nuw i32 %278, 1
  %wide.trip.count622 = zext i32 %279 to i64
  br label %.lr.ph552

.lr.ph552:                                        ; preds = %.lr.ph552.preheader, %.lr.ph552
  %indvars.iv619 = phi i64 [ 1, %.lr.ph552.preheader ], [ %indvars.iv.next620, %.lr.ph552 ]
  %280 = getelementptr inbounds double, ptr %35, i64 %indvars.iv619
  %281 = load double, ptr %280, align 8, !tbaa !9
  %282 = fcmp ogt double %281, %93
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %indvars.iv619
  %284 = load double, ptr %283, align 8, !tbaa !18
  %285 = call { double, double } @Cd(ptr noundef nonnull %283)
  %286 = extractvalue { double, double } %285, 1
  %287 = insertelement <2 x double> poison, double %284, i64 0
  %288 = insertelement <2 x double> %287, double %286, i64 1
  %289 = fcmp oge <2 x double> %288, zeroinitializer
  %290 = fneg <2 x double> %288
  %291 = select <2 x i1> %289, <2 x double> %288, <2 x double> %290
  %shift740 = shufflevector <2 x double> %291, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %292 = fadd <2 x double> %291, %shift740
  %293 = extractelement <2 x double> %292, i64 0
  %294 = load double, ptr %280, align 8, !tbaa !9
  %295 = call double @llvm.fmuladd.f64(double %96, double %294, double %293)
  %296 = fadd double %92, %295
  %storemerge = select i1 %282, double %295, double %296
  store double %storemerge, ptr %280, align 8, !tbaa !9
  %indvars.iv.next620 = add nuw nsw i64 %indvars.iv619, 1
  %exitcond623.not = icmp eq i64 %indvars.iv.next620, %wide.trip.count622
  br i1 %exitcond623.not, label %._crit_edge553, label %.lr.ph552, !llvm.loop !26

._crit_edge553:                                   ; preds = %.lr.ph552, %277
  store i32 0, ptr %21, align 4, !tbaa !5
  %297 = getelementptr inbounds double, ptr %32, i64 %indvars.iv639
  br label %.loopexit513

.loopexit513:                                     ; preds = %.loopexit513.backedge, %._crit_edge553
  %298 = load i32, ptr %1, align 4, !tbaa !5
  %299 = sext i32 %298 to i64
  %gep568 = getelementptr %struct.doublecomplex, ptr %13, i64 %299
  call void @zlacn2_(ptr noundef nonnull %1, ptr noundef %gep568, ptr noundef %13, ptr noundef nonnull %297, ptr noundef nonnull %21, ptr noundef nonnull %22) #6
  %300 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %300, label %.loopexit513.backedge [
    i32 0, label %376
    i32 1, label %301
    i32 2, label %337
  ]

301:                                              ; preds = %.loopexit513
  call void @zpotrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef nonnull %1, ptr noundef nonnull %15) #6
  %302 = load i32, ptr %1, align 4, !tbaa !5
  %.not506561 = icmp slt i32 %302, 1
  br i1 %.not506561, label %.loopexit513.backedge, label %.lr.ph564.preheader

.loopexit513.backedge:                            ; preds = %301, %..loopexit513_crit_edge, %.loopexit513, %374
  br label %.loopexit513

.lr.ph564.preheader:                              ; preds = %301
  %303 = add nuw i32 %302, 1
  %wide.trip.count632 = zext i32 %303 to i64
  %304 = zext nneg i32 %302 to i64
  %min.iters.check = icmp eq i32 %302, 1
  br i1 %min.iters.check, label %.lr.ph564.preheader743, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph564.preheader
  %305 = shl nuw nsw i64 %wide.trip.count632, 4
  %scevgep688 = getelementptr i8, ptr %scevgep, i64 %305
  %306 = shl nuw nsw i64 %wide.trip.count632, 3
  %scevgep690 = getelementptr i8, ptr %scevgep689, i64 %306
  %bound0 = icmp ugt ptr %scevgep690, %13
  %bound1 = icmp ugt ptr %scevgep688, %14
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph564.preheader743, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %307 = getelementptr double, ptr %14, i64 %index
  %wide.load = load <2 x double>, ptr %307, align 8, !tbaa !9, !alias.scope !27
  %308 = getelementptr %struct.doublecomplex, ptr %13, i64 %index
  %wide.vec = load <4 x double>, ptr %308, align 8, !tbaa !9
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec691 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %309 = fmul <2 x double> %wide.load, %strided.vec
  %310 = fmul <2 x double> %wide.load, %strided.vec691
  %interleaved.vec = shufflevector <2 x double> %309, <2 x double> %310, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %308, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 2
  %311 = icmp eq i64 %index.next, %n.vec
  br i1 %311, label %middle.block, label %vector.body, !llvm.loop !30

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %304
  %312 = shufflevector <2 x double> %309, <2 x double> %310, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %..loopexit513_crit_edge, label %.lr.ph564.preheader743

.lr.ph564.preheader743:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph564.preheader
  %indvars.iv629.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph564.preheader ], [ %ind.end, %middle.block ]
  %313 = zext nneg i32 %302 to i64
  %314 = and i32 %302, 1
  %lcmp.mod757.not = icmp eq i32 %314, 0
  br i1 %lcmp.mod757.not, label %.lr.ph564.prol.loopexit, label %.lr.ph564.prol

.lr.ph564.prol:                                   ; preds = %.lr.ph564.preheader743
  %315 = getelementptr inbounds double, ptr %35, i64 %indvars.iv629.ph
  %316 = load double, ptr %315, align 8, !tbaa !9
  %317 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %indvars.iv629.ph
  %318 = load <2 x double>, ptr %317, align 8, !tbaa !9
  %319 = insertelement <2 x double> poison, double %316, i64 0
  %320 = shufflevector <2 x double> %319, <2 x double> poison, <2 x i32> zeroinitializer
  %321 = fmul <2 x double> %320, %318
  store <2 x double> %321, ptr %317, align 8, !tbaa !9
  %indvars.iv.next630.prol = add nuw nsw i64 %indvars.iv629.ph, 1
  br label %.lr.ph564.prol.loopexit

.lr.ph564.prol.loopexit:                          ; preds = %.lr.ph564.prol, %.lr.ph564.preheader743
  %.lcssa754.unr = phi <2 x double> [ poison, %.lr.ph564.preheader743 ], [ %321, %.lr.ph564.prol ]
  %indvars.iv629.unr = phi i64 [ %indvars.iv629.ph, %.lr.ph564.preheader743 ], [ %indvars.iv.next630.prol, %.lr.ph564.prol ]
  %322 = icmp eq i64 %indvars.iv629.ph, %313
  br i1 %322, label %..loopexit513_crit_edge, label %.lr.ph564

.lr.ph564:                                        ; preds = %.lr.ph564.prol.loopexit, %.lr.ph564
  %indvars.iv629 = phi i64 [ %indvars.iv.next630.1, %.lr.ph564 ], [ %indvars.iv629.unr, %.lr.ph564.prol.loopexit ]
  %323 = getelementptr inbounds double, ptr %35, i64 %indvars.iv629
  %324 = load double, ptr %323, align 8, !tbaa !9
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %indvars.iv629
  %326 = load <2 x double>, ptr %325, align 8, !tbaa !9
  %327 = insertelement <2 x double> poison, double %324, i64 0
  %328 = shufflevector <2 x double> %327, <2 x double> poison, <2 x i32> zeroinitializer
  %329 = fmul <2 x double> %328, %326
  store <2 x double> %329, ptr %325, align 8, !tbaa !9
  %330 = getelementptr double, ptr %14, i64 %indvars.iv629
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = getelementptr %struct.doublecomplex, ptr %13, i64 %indvars.iv629
  %333 = load <2 x double>, ptr %332, align 8, !tbaa !9
  %334 = insertelement <2 x double> poison, double %331, i64 0
  %335 = shufflevector <2 x double> %334, <2 x double> poison, <2 x i32> zeroinitializer
  %336 = fmul <2 x double> %335, %333
  store <2 x double> %336, ptr %332, align 8, !tbaa !9
  %indvars.iv.next630.1 = add nuw nsw i64 %indvars.iv629, 2
  %exitcond633.not.1 = icmp eq i64 %indvars.iv.next630.1, %wide.trip.count632
  br i1 %exitcond633.not.1, label %..loopexit513_crit_edge, label %.lr.ph564, !llvm.loop !31

337:                                              ; preds = %.loopexit513
  %338 = load i32, ptr %1, align 4, !tbaa !5
  %.not505554 = icmp slt i32 %338, 1
  br i1 %.not505554, label %374, label %.lr.ph557.preheader

.lr.ph557.preheader:                              ; preds = %337
  %339 = add nuw i32 %338, 1
  %wide.trip.count627 = zext i32 %339 to i64
  %340 = zext nneg i32 %338 to i64
  %min.iters.check702 = icmp eq i32 %338, 1
  br i1 %min.iters.check702, label %.lr.ph557.preheader744, label %vector.memcheck692

vector.memcheck692:                               ; preds = %.lr.ph557.preheader
  %341 = shl nuw nsw i64 %wide.trip.count627, 4
  %scevgep694 = getelementptr i8, ptr %scevgep693, i64 %341
  %342 = shl nuw nsw i64 %wide.trip.count627, 3
  %scevgep696 = getelementptr i8, ptr %scevgep695, i64 %342
  %bound0697 = icmp ugt ptr %scevgep696, %13
  %bound1698 = icmp ugt ptr %scevgep694, %14
  %found.conflict699 = and i1 %bound0697, %bound1698
  br i1 %found.conflict699, label %.lr.ph557.preheader744, label %vector.ph703

vector.ph703:                                     ; preds = %vector.memcheck692
  %n.vec705 = and i64 %340, 2147483646
  %ind.end706 = or i64 %340, 1
  br label %vector.body708

vector.body708:                                   ; preds = %vector.body708, %vector.ph703
  %index709 = phi i64 [ 0, %vector.ph703 ], [ %index.next716, %vector.body708 ]
  %343 = getelementptr double, ptr %14, i64 %index709
  %wide.load711 = load <2 x double>, ptr %343, align 8, !tbaa !9, !alias.scope !32
  %344 = getelementptr %struct.doublecomplex, ptr %13, i64 %index709
  %wide.vec712 = load <4 x double>, ptr %344, align 8, !tbaa !9
  %strided.vec713 = shufflevector <4 x double> %wide.vec712, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec714 = shufflevector <4 x double> %wide.vec712, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %345 = fmul <2 x double> %wide.load711, %strided.vec713
  %346 = fmul <2 x double> %wide.load711, %strided.vec714
  %interleaved.vec715 = shufflevector <2 x double> %345, <2 x double> %346, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec715, ptr %344, align 8, !tbaa !9
  %index.next716 = add nuw i64 %index709, 2
  %347 = icmp eq i64 %index.next716, %n.vec705
  br i1 %347, label %middle.block700, label %vector.body708, !llvm.loop !35

middle.block700:                                  ; preds = %vector.body708
  %cmp.n717 = icmp eq i64 %n.vec705, %340
  %348 = shufflevector <2 x double> %345, <2 x double> %346, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n717, label %._crit_edge558, label %.lr.ph557.preheader744

.lr.ph557.preheader744:                           ; preds = %middle.block700, %vector.memcheck692, %.lr.ph557.preheader
  %indvars.iv624.ph = phi i64 [ 1, %vector.memcheck692 ], [ 1, %.lr.ph557.preheader ], [ %ind.end706, %middle.block700 ]
  %349 = zext nneg i32 %338 to i64
  %350 = and i32 %338, 1
  %lcmp.mod.not = icmp eq i32 %350, 0
  br i1 %lcmp.mod.not, label %.lr.ph557.prol.loopexit, label %.lr.ph557.prol

.lr.ph557.prol:                                   ; preds = %.lr.ph557.preheader744
  %351 = getelementptr inbounds double, ptr %35, i64 %indvars.iv624.ph
  %352 = load double, ptr %351, align 8, !tbaa !9
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %indvars.iv624.ph
  %354 = load <2 x double>, ptr %353, align 8, !tbaa !9
  %355 = insertelement <2 x double> poison, double %352, i64 0
  %356 = shufflevector <2 x double> %355, <2 x double> poison, <2 x i32> zeroinitializer
  %357 = fmul <2 x double> %356, %354
  store <2 x double> %357, ptr %353, align 8, !tbaa !9
  %indvars.iv.next625.prol = add nuw nsw i64 %indvars.iv624.ph, 1
  br label %.lr.ph557.prol.loopexit

.lr.ph557.prol.loopexit:                          ; preds = %.lr.ph557.prol, %.lr.ph557.preheader744
  %.lcssa751.unr = phi <2 x double> [ poison, %.lr.ph557.preheader744 ], [ %357, %.lr.ph557.prol ]
  %indvars.iv624.unr = phi i64 [ %indvars.iv624.ph, %.lr.ph557.preheader744 ], [ %indvars.iv.next625.prol, %.lr.ph557.prol ]
  %358 = icmp eq i64 %indvars.iv624.ph, %349
  br i1 %358, label %._crit_edge558, label %.lr.ph557

.lr.ph557:                                        ; preds = %.lr.ph557.prol.loopexit, %.lr.ph557
  %indvars.iv624 = phi i64 [ %indvars.iv.next625.1, %.lr.ph557 ], [ %indvars.iv624.unr, %.lr.ph557.prol.loopexit ]
  %359 = getelementptr inbounds double, ptr %35, i64 %indvars.iv624
  %360 = load double, ptr %359, align 8, !tbaa !9
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %indvars.iv624
  %362 = load <2 x double>, ptr %361, align 8, !tbaa !9
  %363 = insertelement <2 x double> poison, double %360, i64 0
  %364 = shufflevector <2 x double> %363, <2 x double> poison, <2 x i32> zeroinitializer
  %365 = fmul <2 x double> %364, %362
  store <2 x double> %365, ptr %361, align 8, !tbaa !9
  %366 = getelementptr double, ptr %14, i64 %indvars.iv624
  %367 = load double, ptr %366, align 8, !tbaa !9
  %368 = getelementptr %struct.doublecomplex, ptr %13, i64 %indvars.iv624
  %369 = load <2 x double>, ptr %368, align 8, !tbaa !9
  %370 = insertelement <2 x double> poison, double %367, i64 0
  %371 = shufflevector <2 x double> %370, <2 x double> poison, <2 x i32> zeroinitializer
  %372 = fmul <2 x double> %371, %369
  store <2 x double> %372, ptr %368, align 8, !tbaa !9
  %indvars.iv.next625.1 = add nuw nsw i64 %indvars.iv624, 2
  %exitcond628.not.1 = icmp eq i64 %indvars.iv.next625.1, %wide.trip.count627
  br i1 %exitcond628.not.1, label %._crit_edge558, label %.lr.ph557, !llvm.loop !36

._crit_edge558:                                   ; preds = %.lr.ph557.prol.loopexit, %.lr.ph557, %middle.block700
  %373 = phi <2 x double> [ %348, %middle.block700 ], [ %.lcssa751.unr, %.lr.ph557.prol.loopexit ], [ %372, %.lr.ph557 ]
  store <2 x double> %373, ptr %20, align 16, !tbaa !9
  br label %374

374:                                              ; preds = %._crit_edge558, %337
  call void @zpotrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef nonnull %1, ptr noundef nonnull %15) #6
  br label %.loopexit513.backedge

..loopexit513_crit_edge:                          ; preds = %.lr.ph564.prol.loopexit, %.lr.ph564, %middle.block
  %375 = phi <2 x double> [ %312, %middle.block ], [ %.lcssa754.unr, %.lr.ph564.prol.loopexit ], [ %336, %.lr.ph564 ]
  store <2 x double> %375, ptr %20, align 16, !tbaa !9
  br label %.loopexit513.backedge

376:                                              ; preds = %.loopexit513
  %377 = load i32, ptr %1, align 4, !tbaa !5
  %.not504569 = icmp slt i32 %377, 1
  br i1 %.not504569, label %._crit_edge574.thread, label %.lr.ph573.preheader

.lr.ph573.preheader:                              ; preds = %376
  %378 = add nuw i32 %377, 1
  %wide.trip.count637 = zext i32 %378 to i64
  %invariant.gep674 = getelementptr %struct.doublecomplex, ptr %31, i64 %103
  br label %.lr.ph573

.lr.ph573:                                        ; preds = %.lr.ph573.preheader, %.lr.ph573
  %indvars.iv634 = phi i64 [ 1, %.lr.ph573.preheader ], [ %indvars.iv.next635, %.lr.ph573 ]
  %.1571 = phi double [ 0.000000e+00, %.lr.ph573.preheader ], [ %390, %.lr.ph573 ]
  %gep675 = getelementptr %struct.doublecomplex, ptr %invariant.gep674, i64 %indvars.iv634
  %379 = load double, ptr %gep675, align 8, !tbaa !18
  %380 = call { double, double } @Cd(ptr noundef nonnull %gep675)
  %381 = extractvalue { double, double } %380, 1
  %382 = insertelement <2 x double> poison, double %379, i64 0
  %383 = insertelement <2 x double> %382, double %381, i64 1
  %384 = fcmp oge <2 x double> %383, zeroinitializer
  %385 = fneg <2 x double> %383
  %386 = select <2 x i1> %384, <2 x double> %383, <2 x double> %385
  %shift741 = shufflevector <2 x double> %386, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %387 = fadd <2 x double> %386, %shift741
  %388 = extractelement <2 x double> %387, i64 0
  %389 = fcmp oge double %.1571, %388
  %390 = select i1 %389, double %.1571, double %388
  %indvars.iv.next635 = add nuw nsw i64 %indvars.iv634, 1
  %exitcond638.not = icmp eq i64 %indvars.iv.next635, %wide.trip.count637
  br i1 %exitcond638.not, label %._crit_edge574, label %.lr.ph573, !llvm.loop !37

._crit_edge574:                                   ; preds = %.lr.ph573
  %391 = fcmp une double %390, 0.000000e+00
  br i1 %391, label %392, label %._crit_edge574.thread

392:                                              ; preds = %._crit_edge574
  %393 = load double, ptr %297, align 8, !tbaa !9
  %394 = fdiv double %393, %390
  store double %394, ptr %297, align 8, !tbaa !9
  br label %._crit_edge574.thread

._crit_edge574.thread:                            ; preds = %376, %._crit_edge574, %392
  %indvars.iv.next640 = add nuw nsw i64 %indvars.iv639, 1
  %.not495.not = icmp ult i64 %indvars.iv639, %100
  br i1 %.not495.not, label %.preheader, label %.loopexit, !llvm.loop !38

.loopexit:                                        ; preds = %._crit_edge574.thread, %.lr.ph583.prol.loopexit, %.lr.ph583, %middle.block719, %63, %87, %64, %.thread
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #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 @zhemv_(ptr noundef, 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 @zpotrs_(ptr noundef, 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