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

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

124:                                              ; preds = %17
  %125 = load ptr, ptr %18, align 8, !tbaa !5
  %126 = call i32 @lsame_(ptr noundef %125, ptr noundef @.str.1)
  %127 = icmp ne i32 %126, 0
  br i1 %127, label %130, label %128

128:                                              ; preds = %124
  %129 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -1, ptr %129, align 4, !tbaa !9
  br label %208

130:                                              ; preds = %124, %17
  %131 = load ptr, ptr %19, align 8, !tbaa !5
  %132 = load i32, ptr %131, align 4, !tbaa !9
  %133 = icmp slt i32 %132, 0
  br i1 %133, label %134, label %136

134:                                              ; preds = %130
  %135 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -2, ptr %135, align 4, !tbaa !9
  br label %207

136:                                              ; preds = %130
  %137 = load ptr, ptr %20, align 8, !tbaa !5
  %138 = load i32, ptr %137, align 4, !tbaa !9
  %139 = icmp slt i32 %138, 0
  br i1 %139, label %140, label %142

140:                                              ; preds = %136
  %141 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -3, ptr %141, align 4, !tbaa !9
  br label %206

142:                                              ; preds = %136
  %143 = load ptr, ptr %22, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = load ptr, ptr %19, align 8, !tbaa !5
  %146 = load i32, ptr %145, align 4, !tbaa !9
  %147 = icmp sge i32 1, %146
  br i1 %147, label %148, label %149

148:                                              ; preds = %142
  br label %152

149:                                              ; preds = %142
  %150 = load ptr, ptr %19, align 8, !tbaa !5
  %151 = load i32, ptr %150, align 4, !tbaa !9
  br label %152

152:                                              ; preds = %149, %148
  %153 = phi i32 [ 1, %148 ], [ %151, %149 ]
  %154 = icmp slt i32 %144, %153
  br i1 %154, label %155, label %157

155:                                              ; preds = %152
  %156 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -5, ptr %156, align 4, !tbaa !9
  br label %205

157:                                              ; preds = %152
  %158 = load ptr, ptr %24, align 8, !tbaa !5
  %159 = load i32, ptr %158, align 4, !tbaa !9
  %160 = load ptr, ptr %19, align 8, !tbaa !5
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = icmp sge i32 1, %161
  br i1 %162, label %163, label %164

163:                                              ; preds = %157
  br label %167

164:                                              ; preds = %157
  %165 = load ptr, ptr %19, align 8, !tbaa !5
  %166 = load i32, ptr %165, align 4, !tbaa !9
  br label %167

167:                                              ; preds = %164, %163
  %168 = phi i32 [ 1, %163 ], [ %166, %164 ]
  %169 = icmp slt i32 %159, %168
  br i1 %169, label %170, label %172

170:                                              ; preds = %167
  %171 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -7, ptr %171, align 4, !tbaa !9
  br label %204

172:                                              ; preds = %167
  %173 = load ptr, ptr %27, align 8, !tbaa !5
  %174 = load i32, ptr %173, align 4, !tbaa !9
  %175 = load ptr, ptr %19, align 8, !tbaa !5
  %176 = load i32, ptr %175, align 4, !tbaa !9
  %177 = icmp sge i32 1, %176
  br i1 %177, label %178, label %179

178:                                              ; preds = %172
  br label %182

179:                                              ; preds = %172
  %180 = load ptr, ptr %19, align 8, !tbaa !5
  %181 = load i32, ptr %180, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %179, %178
  %183 = phi i32 [ 1, %178 ], [ %181, %179 ]
  %184 = icmp slt i32 %174, %183
  br i1 %184, label %185, label %187

185:                                              ; preds = %182
  %186 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -10, ptr %186, align 4, !tbaa !9
  br label %203

187:                                              ; preds = %182
  %188 = load ptr, ptr %29, align 8, !tbaa !5
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = load ptr, ptr %19, align 8, !tbaa !5
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = icmp sge i32 1, %191
  br i1 %192, label %193, label %194

193:                                              ; preds = %187
  br label %197

194:                                              ; preds = %187
  %195 = load ptr, ptr %19, align 8, !tbaa !5
  %196 = load i32, ptr %195, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %194, %193
  %198 = phi i32 [ 1, %193 ], [ %196, %194 ]
  %199 = icmp slt i32 %189, %198
  br i1 %199, label %200, label %202

200:                                              ; preds = %197
  %201 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -12, ptr %201, align 4, !tbaa !9
  br label %202

202:                                              ; preds = %200, %197
  br label %203

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

204:                                              ; preds = %203, %170
  br label %205

205:                                              ; preds = %204, %155
  br label %206

206:                                              ; preds = %205, %140
  br label %207

207:                                              ; preds = %206, %134
  br label %208

208:                                              ; preds = %207, %128
  %209 = load ptr, ptr %34, align 8, !tbaa !5
  %210 = load i32, ptr %209, align 4, !tbaa !9
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %212, label %217

212:                                              ; preds = %208
  %213 = load ptr, ptr %34, align 8, !tbaa !5
  %214 = load i32, ptr %213, align 4, !tbaa !9
  %215 = sub nsw i32 0, %214
  store i32 %215, ptr %43, align 4, !tbaa !9
  %216 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %43, i32 noundef 6)
  store i32 1, ptr %68, align 4
  br label %1349

217:                                              ; preds = %208
  %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 %225, label %221

221:                                              ; preds = %217
  %222 = load ptr, ptr %20, align 8, !tbaa !5
  %223 = load i32, ptr %222, align 4, !tbaa !9
  %224 = icmp eq i32 %223, 0
  br i1 %224, label %225, label %245

225:                                              ; preds = %221, %217
  %226 = load ptr, ptr %20, align 8, !tbaa !5
  %227 = load i32, ptr %226, align 4, !tbaa !9
  store i32 %227, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %241, %225
  %229 = load i32, ptr %57, align 4, !tbaa !9
  %230 = load i32, ptr %43, align 4, !tbaa !9
  %231 = icmp sle i32 %229, %230
  br i1 %231, label %232, label %244

232:                                              ; preds = %228
  %233 = load ptr, ptr %30, align 8, !tbaa !5
  %234 = load i32, ptr %57, 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
  %237 = load ptr, ptr %31, align 8, !tbaa !5
  %238 = load i32, ptr %57, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds double, ptr %237, i64 %239
  store double 0.000000e+00, ptr %240, align 8, !tbaa !11
  br label %241

241:                                              ; preds = %232
  %242 = load i32, ptr %57, align 4, !tbaa !9
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %57, align 4, !tbaa !9
  br label %228, !llvm.loop !13

244:                                              ; preds = %228
  store i32 1, ptr %68, align 4
  br label %1349

245:                                              ; preds = %221
  %246 = load ptr, ptr %19, align 8, !tbaa !5
  %247 = load i32, ptr %246, align 4, !tbaa !9
  %248 = add nsw i32 %247, 1
  store i32 %248, ptr %64, align 4, !tbaa !9
  %249 = call double @dlamch_(ptr noundef @.str.3)
  store double %249, ptr %67, align 8, !tbaa !11
  %250 = call double @dlamch_(ptr noundef @.str.4)
  store double %250, ptr %65, align 8, !tbaa !11
  %251 = load i32, ptr %64, align 4, !tbaa !9
  %252 = sitofp i32 %251 to double
  %253 = load double, ptr %65, align 8, !tbaa !11
  %254 = fmul double %252, %253
  store double %254, ptr %54, align 8, !tbaa !11
  %255 = load double, ptr %54, align 8, !tbaa !11
  %256 = load double, ptr %67, align 8, !tbaa !11
  %257 = fdiv double %255, %256
  store double %257, ptr %55, align 8, !tbaa !11
  %258 = load ptr, ptr %20, align 8, !tbaa !5
  %259 = load i32, ptr %258, align 4, !tbaa !9
  store i32 %259, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !9
  br label %260

260:                                              ; preds = %1345, %245
  %261 = load i32, ptr %57, align 4, !tbaa !9
  %262 = load i32, ptr %43, align 4, !tbaa !9
  %263 = icmp sle i32 %261, %262
  br i1 %263, label %264, label %1348

264:                                              ; preds = %260
  store i32 1, ptr %61, align 4, !tbaa !9
  store double 3.000000e+00, ptr %66, align 8, !tbaa !11
  br label %265

265:                                              ; preds = %961, %264
  %266 = load ptr, ptr %19, align 8, !tbaa !5
  %267 = load ptr, ptr %26, align 8, !tbaa !5
  %268 = load i32, ptr %57, align 4, !tbaa !9
  %269 = load i32, ptr %39, align 4, !tbaa !9
  %270 = mul nsw i32 %268, %269
  %271 = add nsw i32 %270, 1
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %267, i64 %272
  %274 = load ptr, ptr %32, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.doublecomplex, ptr %274, i64 1
  call void @zcopy_(ptr noundef %266, ptr noundef %273, ptr noundef @c__1, ptr noundef %275, ptr noundef @c__1)
  %276 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  store double -1.000000e+00, ptr %276, align 8, !tbaa !15
  %277 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  store double 0.000000e+00, ptr %277, align 8, !tbaa !17
  %278 = load ptr, ptr %18, align 8, !tbaa !5
  %279 = load ptr, ptr %19, align 8, !tbaa !5
  %280 = load ptr, ptr %21, align 8, !tbaa !5
  %281 = load i32, ptr %36, align 4, !tbaa !9
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %280, i64 %282
  %284 = load ptr, ptr %22, align 8, !tbaa !5
  %285 = load ptr, ptr %28, align 8, !tbaa !5
  %286 = load i32, ptr %57, align 4, !tbaa !9
  %287 = load i32, ptr %41, align 4, !tbaa !9
  %288 = mul nsw i32 %286, %287
  %289 = add nsw i32 %288, 1
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds %struct.doublecomplex, ptr %285, i64 %290
  %292 = load ptr, ptr %32, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %292, i64 1
  call void @zhemv_(ptr noundef %278, ptr noundef %279, ptr noundef %52, ptr noundef %283, ptr noundef %284, ptr noundef %291, ptr noundef @c__1, ptr noundef @c_b1, ptr noundef %293, ptr noundef @c__1)
  %294 = load ptr, ptr %19, align 8, !tbaa !5
  %295 = load i32, ptr %294, align 4, !tbaa !9
  store i32 %295, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %296

296:                                              ; preds = %346, %265
  %297 = load i32, ptr %56, align 4, !tbaa !9
  %298 = load i32, ptr %44, align 4, !tbaa !9
  %299 = icmp sle i32 %297, %298
  br i1 %299, label %300, label %349

300:                                              ; preds = %296
  %301 = load i32, ptr %56, align 4, !tbaa !9
  %302 = load i32, ptr %57, align 4, !tbaa !9
  %303 = load i32, ptr %39, align 4, !tbaa !9
  %304 = mul nsw i32 %302, %303
  %305 = add nsw i32 %301, %304
  store i32 %305, ptr %45, align 4, !tbaa !9
  %306 = load ptr, ptr %26, align 8, !tbaa !5
  %307 = load i32, ptr %45, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds %struct.doublecomplex, ptr %306, i64 %308
  %310 = getelementptr inbounds %struct.doublecomplex, ptr %309, i32 0, i32 0
  %311 = load double, ptr %310, align 8, !tbaa !15
  store double %311, ptr %48, align 8, !tbaa !11
  %312 = load double, ptr %48, align 8, !tbaa !11
  %313 = fcmp oge double %312, 0.000000e+00
  br i1 %313, label %314, label %316

314:                                              ; preds = %300
  %315 = load double, ptr %48, align 8, !tbaa !11
  br label %319

316:                                              ; preds = %300
  %317 = load double, ptr %48, align 8, !tbaa !11
  %318 = fneg double %317
  br label %319

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

334:                                              ; preds = %319
  %335 = load double, ptr %49, align 8, !tbaa !11
  br label %339

336:                                              ; preds = %319
  %337 = load double, ptr %49, align 8, !tbaa !11
  %338 = fneg double %337
  br label %339

339:                                              ; preds = %336, %334
  %340 = phi double [ %335, %334 ], [ %338, %336 ]
  %341 = fadd double %320, %340
  %342 = load ptr, ptr %33, align 8, !tbaa !5
  %343 = load i32, ptr %56, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds double, ptr %342, i64 %344
  store double %341, ptr %345, align 8, !tbaa !11
  br label %346

346:                                              ; preds = %339
  %347 = load i32, ptr %56, align 4, !tbaa !9
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %56, align 4, !tbaa !9
  br label %296, !llvm.loop !18

349:                                              ; preds = %296
  %350 = load i32, ptr %62, align 4, !tbaa !9
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %352, label %581

352:                                              ; preds = %349
  %353 = load ptr, ptr %19, align 8, !tbaa !5
  %354 = load i32, ptr %353, align 4, !tbaa !9
  store i32 %354, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %58, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %577, %352
  %356 = load i32, ptr %58, align 4, !tbaa !9
  %357 = load i32, ptr %44, align 4, !tbaa !9
  %358 = icmp sle i32 %356, %357
  br i1 %358, label %359, label %580

359:                                              ; preds = %355
  store double 0.000000e+00, ptr %59, align 8, !tbaa !11
  %360 = load i32, ptr %58, align 4, !tbaa !9
  %361 = load i32, ptr %57, align 4, !tbaa !9
  %362 = load i32, ptr %41, align 4, !tbaa !9
  %363 = mul nsw i32 %361, %362
  %364 = add nsw i32 %360, %363
  store i32 %364, ptr %45, align 4, !tbaa !9
  %365 = load ptr, ptr %28, align 8, !tbaa !5
  %366 = load i32, ptr %45, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds %struct.doublecomplex, ptr %365, i64 %367
  %369 = getelementptr inbounds %struct.doublecomplex, ptr %368, i32 0, i32 0
  %370 = load double, ptr %369, align 8, !tbaa !15
  store double %370, ptr %48, align 8, !tbaa !11
  %371 = load double, ptr %48, align 8, !tbaa !11
  %372 = fcmp oge double %371, 0.000000e+00
  br i1 %372, label %373, label %375

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

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

378:                                              ; preds = %375, %373
  %379 = phi double [ %374, %373 ], [ %377, %375 ]
  %380 = load ptr, ptr %28, align 8, !tbaa !5
  %381 = load i32, ptr %58, align 4, !tbaa !9
  %382 = load i32, ptr %57, align 4, !tbaa !9
  %383 = load i32, ptr %41, align 4, !tbaa !9
  %384 = mul nsw i32 %382, %383
  %385 = add nsw i32 %381, %384
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds %struct.doublecomplex, ptr %380, i64 %386
  %388 = call { double, double } @Cd(ptr noundef %387)
  %389 = extractvalue { double, double } %388, 0
  %390 = extractvalue { double, double } %388, 1
  store double %390, ptr %49, align 8, !tbaa !11
  %391 = load double, ptr %49, align 8, !tbaa !11
  %392 = fcmp oge double %391, 0.000000e+00
  br i1 %392, label %393, label %395

393:                                              ; preds = %378
  %394 = load double, ptr %49, align 8, !tbaa !11
  br label %398

395:                                              ; preds = %378
  %396 = load double, ptr %49, align 8, !tbaa !11
  %397 = fneg double %396
  br label %398

398:                                              ; preds = %395, %393
  %399 = phi double [ %394, %393 ], [ %397, %395 ]
  %400 = fadd double %379, %399
  store double %400, ptr %63, align 8, !tbaa !11
  %401 = load i32, ptr %58, align 4, !tbaa !9
  %402 = sub nsw i32 %401, 1
  store i32 %402, ptr %45, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %540, %398
  %404 = load i32, ptr %56, align 4, !tbaa !9
  %405 = load i32, ptr %45, align 4, !tbaa !9
  %406 = icmp sle i32 %404, %405
  br i1 %406, label %407, label %543

407:                                              ; preds = %403
  %408 = load i32, ptr %56, align 4, !tbaa !9
  %409 = load i32, ptr %58, align 4, !tbaa !9
  %410 = load i32, ptr %35, align 4, !tbaa !9
  %411 = mul nsw i32 %409, %410
  %412 = add nsw i32 %408, %411
  store i32 %412, ptr %46, align 4, !tbaa !9
  %413 = load ptr, ptr %21, align 8, !tbaa !5
  %414 = load i32, ptr %46, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds %struct.doublecomplex, ptr %413, i64 %415
  %417 = getelementptr inbounds %struct.doublecomplex, ptr %416, i32 0, i32 0
  %418 = load double, ptr %417, align 8, !tbaa !15
  store double %418, ptr %48, align 8, !tbaa !11
  %419 = load double, ptr %48, align 8, !tbaa !11
  %420 = fcmp oge double %419, 0.000000e+00
  br i1 %420, label %421, label %423

421:                                              ; preds = %407
  %422 = load double, ptr %48, align 8, !tbaa !11
  br label %426

423:                                              ; preds = %407
  %424 = load double, ptr %48, align 8, !tbaa !11
  %425 = fneg double %424
  br label %426

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

441:                                              ; preds = %426
  %442 = load double, ptr %49, align 8, !tbaa !11
  br label %446

443:                                              ; preds = %426
  %444 = load double, ptr %49, align 8, !tbaa !11
  %445 = fneg double %444
  br label %446

446:                                              ; preds = %443, %441
  %447 = phi double [ %442, %441 ], [ %445, %443 ]
  %448 = fadd double %427, %447
  %449 = load double, ptr %63, align 8, !tbaa !11
  %450 = load ptr, ptr %33, align 8, !tbaa !5
  %451 = load i32, ptr %56, align 4, !tbaa !9
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds double, ptr %450, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !11
  %455 = call double @llvm.fmuladd.f64(double %448, double %449, double %454)
  store double %455, ptr %453, align 8, !tbaa !11
  %456 = load i32, ptr %56, align 4, !tbaa !9
  %457 = load i32, ptr %58, align 4, !tbaa !9
  %458 = load i32, ptr %35, align 4, !tbaa !9
  %459 = mul nsw i32 %457, %458
  %460 = add nsw i32 %456, %459
  store i32 %460, ptr %46, align 4, !tbaa !9
  %461 = load i32, ptr %56, align 4, !tbaa !9
  %462 = load i32, ptr %57, align 4, !tbaa !9
  %463 = load i32, ptr %41, align 4, !tbaa !9
  %464 = mul nsw i32 %462, %463
  %465 = add nsw i32 %461, %464
  store i32 %465, ptr %47, align 4, !tbaa !9
  %466 = load ptr, ptr %21, align 8, !tbaa !5
  %467 = load i32, ptr %46, align 4, !tbaa !9
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %466, i64 %468
  %470 = getelementptr inbounds %struct.doublecomplex, ptr %469, i32 0, i32 0
  %471 = load double, ptr %470, align 8, !tbaa !15
  store double %471, ptr %48, align 8, !tbaa !11
  %472 = load double, ptr %48, align 8, !tbaa !11
  %473 = fcmp oge double %472, 0.000000e+00
  br i1 %473, label %474, label %476

474:                                              ; preds = %446
  %475 = load double, ptr %48, align 8, !tbaa !11
  br label %479

476:                                              ; preds = %446
  %477 = load double, ptr %48, align 8, !tbaa !11
  %478 = fneg double %477
  br label %479

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

494:                                              ; preds = %479
  %495 = load double, ptr %49, align 8, !tbaa !11
  br label %499

496:                                              ; preds = %479
  %497 = load double, ptr %49, align 8, !tbaa !11
  %498 = fneg double %497
  br label %499

499:                                              ; preds = %496, %494
  %500 = phi double [ %495, %494 ], [ %498, %496 ]
  %501 = fadd double %480, %500
  %502 = load ptr, ptr %28, align 8, !tbaa !5
  %503 = load i32, ptr %47, align 4, !tbaa !9
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds %struct.doublecomplex, ptr %502, i64 %504
  %506 = getelementptr inbounds %struct.doublecomplex, ptr %505, i32 0, i32 0
  %507 = load double, ptr %506, align 8, !tbaa !15
  store double %507, ptr %50, align 8, !tbaa !11
  %508 = load double, ptr %50, align 8, !tbaa !11
  %509 = fcmp oge double %508, 0.000000e+00
  br i1 %509, label %510, label %512

510:                                              ; preds = %499
  %511 = load double, ptr %50, align 8, !tbaa !11
  br label %515

512:                                              ; preds = %499
  %513 = load double, ptr %50, align 8, !tbaa !11
  %514 = fneg double %513
  br label %515

515:                                              ; preds = %512, %510
  %516 = phi double [ %511, %510 ], [ %514, %512 ]
  %517 = load ptr, ptr %28, align 8, !tbaa !5
  %518 = load i32, ptr %56, align 4, !tbaa !9
  %519 = load i32, ptr %57, align 4, !tbaa !9
  %520 = load i32, ptr %41, align 4, !tbaa !9
  %521 = mul nsw i32 %519, %520
  %522 = add nsw i32 %518, %521
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds %struct.doublecomplex, ptr %517, i64 %523
  %525 = call { double, double } @Cd(ptr noundef %524)
  %526 = extractvalue { double, double } %525, 0
  %527 = extractvalue { double, double } %525, 1
  store double %527, ptr %51, align 8, !tbaa !11
  %528 = load double, ptr %51, align 8, !tbaa !11
  %529 = fcmp oge double %528, 0.000000e+00
  br i1 %529, label %530, label %532

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

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

535:                                              ; preds = %532, %530
  %536 = phi double [ %531, %530 ], [ %534, %532 ]
  %537 = fadd double %516, %536
  %538 = load double, ptr %59, align 8, !tbaa !11
  %539 = call double @llvm.fmuladd.f64(double %501, double %537, double %538)
  store double %539, ptr %59, align 8, !tbaa !11
  br label %540

540:                                              ; preds = %535
  %541 = load i32, ptr %56, align 4, !tbaa !9
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %56, align 4, !tbaa !9
  br label %403, !llvm.loop !19

543:                                              ; preds = %403
  %544 = load i32, ptr %58, align 4, !tbaa !9
  %545 = load i32, ptr %58, align 4, !tbaa !9
  %546 = load i32, ptr %35, align 4, !tbaa !9
  %547 = mul nsw i32 %545, %546
  %548 = add nsw i32 %544, %547
  store i32 %548, ptr %45, align 4, !tbaa !9
  %549 = load ptr, ptr %33, align 8, !tbaa !5
  %550 = load i32, ptr %58, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds double, ptr %549, i64 %551
  %553 = load double, ptr %552, align 8, !tbaa !11
  %554 = load ptr, ptr %21, align 8, !tbaa !5
  %555 = load i32, ptr %45, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds %struct.doublecomplex, ptr %554, i64 %556
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %557, i32 0, i32 0
  %559 = load double, ptr %558, align 8, !tbaa !15
  store double %559, ptr %48, align 8, !tbaa !11
  %560 = load double, ptr %48, align 8, !tbaa !11
  %561 = fcmp oge double %560, 0.000000e+00
  br i1 %561, label %562, label %564

562:                                              ; preds = %543
  %563 = load double, ptr %48, align 8, !tbaa !11
  br label %567

564:                                              ; preds = %543
  %565 = load double, ptr %48, align 8, !tbaa !11
  %566 = fneg double %565
  br label %567

567:                                              ; preds = %564, %562
  %568 = phi double [ %563, %562 ], [ %566, %564 ]
  %569 = load double, ptr %63, align 8, !tbaa !11
  %570 = call double @llvm.fmuladd.f64(double %568, double %569, double %553)
  %571 = load double, ptr %59, align 8, !tbaa !11
  %572 = fadd double %570, %571
  %573 = load ptr, ptr %33, align 8, !tbaa !5
  %574 = load i32, ptr %58, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds double, ptr %573, i64 %575
  store double %572, ptr %576, align 8, !tbaa !11
  br label %577

577:                                              ; preds = %567
  %578 = load i32, ptr %58, align 4, !tbaa !9
  %579 = add nsw i32 %578, 1
  store i32 %579, ptr %58, align 4, !tbaa !9
  br label %355, !llvm.loop !20

580:                                              ; preds = %355
  br label %813

581:                                              ; preds = %349
  %582 = load ptr, ptr %19, align 8, !tbaa !5
  %583 = load i32, ptr %582, align 4, !tbaa !9
  store i32 %583, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %58, align 4, !tbaa !9
  br label %584

584:                                              ; preds = %809, %581
  %585 = load i32, ptr %58, align 4, !tbaa !9
  %586 = load i32, ptr %44, align 4, !tbaa !9
  %587 = icmp sle i32 %585, %586
  br i1 %587, label %588, label %812

588:                                              ; preds = %584
  store double 0.000000e+00, ptr %59, align 8, !tbaa !11
  %589 = load i32, ptr %58, align 4, !tbaa !9
  %590 = load i32, ptr %57, align 4, !tbaa !9
  %591 = load i32, ptr %41, align 4, !tbaa !9
  %592 = mul nsw i32 %590, %591
  %593 = add nsw i32 %589, %592
  store i32 %593, ptr %45, align 4, !tbaa !9
  %594 = load ptr, ptr %28, align 8, !tbaa !5
  %595 = load i32, ptr %45, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %594, i64 %596
  %598 = getelementptr inbounds %struct.doublecomplex, ptr %597, i32 0, i32 0
  %599 = load double, ptr %598, align 8, !tbaa !15
  store double %599, ptr %48, align 8, !tbaa !11
  %600 = load double, ptr %48, align 8, !tbaa !11
  %601 = fcmp oge double %600, 0.000000e+00
  br i1 %601, label %602, label %604

602:                                              ; preds = %588
  %603 = load double, ptr %48, align 8, !tbaa !11
  br label %607

604:                                              ; preds = %588
  %605 = load double, ptr %48, align 8, !tbaa !11
  %606 = fneg double %605
  br label %607

607:                                              ; preds = %604, %602
  %608 = phi double [ %603, %602 ], [ %606, %604 ]
  %609 = load ptr, ptr %28, align 8, !tbaa !5
  %610 = load i32, ptr %58, align 4, !tbaa !9
  %611 = load i32, ptr %57, align 4, !tbaa !9
  %612 = load i32, ptr %41, align 4, !tbaa !9
  %613 = mul nsw i32 %611, %612
  %614 = add nsw i32 %610, %613
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds %struct.doublecomplex, ptr %609, i64 %615
  %617 = call { double, double } @Cd(ptr noundef %616)
  %618 = extractvalue { double, double } %617, 0
  %619 = extractvalue { double, double } %617, 1
  store double %619, ptr %49, align 8, !tbaa !11
  %620 = load double, ptr %49, align 8, !tbaa !11
  %621 = fcmp oge double %620, 0.000000e+00
  br i1 %621, label %622, label %624

622:                                              ; preds = %607
  %623 = load double, ptr %49, align 8, !tbaa !11
  br label %627

624:                                              ; preds = %607
  %625 = load double, ptr %49, align 8, !tbaa !11
  %626 = fneg double %625
  br label %627

627:                                              ; preds = %624, %622
  %628 = phi double [ %623, %622 ], [ %626, %624 ]
  %629 = fadd double %608, %628
  store double %629, ptr %63, align 8, !tbaa !11
  %630 = load i32, ptr %58, align 4, !tbaa !9
  %631 = load i32, ptr %58, align 4, !tbaa !9
  %632 = load i32, ptr %35, align 4, !tbaa !9
  %633 = mul nsw i32 %631, %632
  %634 = add nsw i32 %630, %633
  store i32 %634, ptr %45, align 4, !tbaa !9
  %635 = load ptr, ptr %21, align 8, !tbaa !5
  %636 = load i32, ptr %45, align 4, !tbaa !9
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %635, i64 %637
  %639 = getelementptr inbounds %struct.doublecomplex, ptr %638, i32 0, i32 0
  %640 = load double, ptr %639, align 8, !tbaa !15
  store double %640, ptr %48, align 8, !tbaa !11
  %641 = load double, ptr %48, align 8, !tbaa !11
  %642 = fcmp oge double %641, 0.000000e+00
  br i1 %642, label %643, label %645

643:                                              ; preds = %627
  %644 = load double, ptr %48, align 8, !tbaa !11
  br label %648

645:                                              ; preds = %627
  %646 = load double, ptr %48, align 8, !tbaa !11
  %647 = fneg double %646
  br label %648

648:                                              ; preds = %645, %643
  %649 = phi double [ %644, %643 ], [ %647, %645 ]
  %650 = load double, ptr %63, align 8, !tbaa !11
  %651 = load ptr, ptr %33, align 8, !tbaa !5
  %652 = load i32, ptr %58, align 4, !tbaa !9
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds double, ptr %651, i64 %653
  %655 = load double, ptr %654, align 8, !tbaa !11
  %656 = call double @llvm.fmuladd.f64(double %649, double %650, double %655)
  store double %656, ptr %654, align 8, !tbaa !11
  %657 = load ptr, ptr %19, align 8, !tbaa !5
  %658 = load i32, ptr %657, align 4, !tbaa !9
  store i32 %658, ptr %45, align 4, !tbaa !9
  %659 = load i32, ptr %58, align 4, !tbaa !9
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %56, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %798, %648
  %662 = load i32, ptr %56, align 4, !tbaa !9
  %663 = load i32, ptr %45, align 4, !tbaa !9
  %664 = icmp sle i32 %662, %663
  br i1 %664, label %665, label %801

665:                                              ; preds = %661
  %666 = load i32, ptr %56, align 4, !tbaa !9
  %667 = load i32, ptr %58, align 4, !tbaa !9
  %668 = load i32, ptr %35, align 4, !tbaa !9
  %669 = mul nsw i32 %667, %668
  %670 = add nsw i32 %666, %669
  store i32 %670, ptr %46, align 4, !tbaa !9
  %671 = load ptr, ptr %21, align 8, !tbaa !5
  %672 = load i32, ptr %46, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %671, i64 %673
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %674, i32 0, i32 0
  %676 = load double, ptr %675, align 8, !tbaa !15
  store double %676, ptr %48, align 8, !tbaa !11
  %677 = load double, ptr %48, align 8, !tbaa !11
  %678 = fcmp oge double %677, 0.000000e+00
  br i1 %678, label %679, label %681

679:                                              ; preds = %665
  %680 = load double, ptr %48, align 8, !tbaa !11
  br label %684

681:                                              ; preds = %665
  %682 = load double, ptr %48, align 8, !tbaa !11
  %683 = fneg double %682
  br label %684

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

699:                                              ; preds = %684
  %700 = load double, ptr %49, align 8, !tbaa !11
  br label %704

701:                                              ; preds = %684
  %702 = load double, ptr %49, align 8, !tbaa !11
  %703 = fneg double %702
  br label %704

704:                                              ; preds = %701, %699
  %705 = phi double [ %700, %699 ], [ %703, %701 ]
  %706 = fadd double %685, %705
  %707 = load double, ptr %63, align 8, !tbaa !11
  %708 = load ptr, ptr %33, align 8, !tbaa !5
  %709 = load i32, ptr %56, align 4, !tbaa !9
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds double, ptr %708, i64 %710
  %712 = load double, ptr %711, align 8, !tbaa !11
  %713 = call double @llvm.fmuladd.f64(double %706, double %707, double %712)
  store double %713, ptr %711, align 8, !tbaa !11
  %714 = load i32, ptr %56, align 4, !tbaa !9
  %715 = load i32, ptr %58, align 4, !tbaa !9
  %716 = load i32, ptr %35, align 4, !tbaa !9
  %717 = mul nsw i32 %715, %716
  %718 = add nsw i32 %714, %717
  store i32 %718, ptr %46, align 4, !tbaa !9
  %719 = load i32, ptr %56, align 4, !tbaa !9
  %720 = load i32, ptr %57, align 4, !tbaa !9
  %721 = load i32, ptr %41, align 4, !tbaa !9
  %722 = mul nsw i32 %720, %721
  %723 = add nsw i32 %719, %722
  store i32 %723, ptr %47, align 4, !tbaa !9
  %724 = load ptr, ptr %21, align 8, !tbaa !5
  %725 = load i32, ptr %46, align 4, !tbaa !9
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds %struct.doublecomplex, ptr %724, i64 %726
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %727, i32 0, i32 0
  %729 = load double, ptr %728, align 8, !tbaa !15
  store double %729, ptr %48, align 8, !tbaa !11
  %730 = load double, ptr %48, align 8, !tbaa !11
  %731 = fcmp oge double %730, 0.000000e+00
  br i1 %731, label %732, label %734

732:                                              ; preds = %704
  %733 = load double, ptr %48, align 8, !tbaa !11
  br label %737

734:                                              ; preds = %704
  %735 = load double, ptr %48, align 8, !tbaa !11
  %736 = fneg double %735
  br label %737

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

752:                                              ; preds = %737
  %753 = load double, ptr %49, align 8, !tbaa !11
  br label %757

754:                                              ; preds = %737
  %755 = load double, ptr %49, align 8, !tbaa !11
  %756 = fneg double %755
  br label %757

757:                                              ; preds = %754, %752
  %758 = phi double [ %753, %752 ], [ %756, %754 ]
  %759 = fadd double %738, %758
  %760 = load ptr, ptr %28, align 8, !tbaa !5
  %761 = load i32, ptr %47, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds %struct.doublecomplex, ptr %760, i64 %762
  %764 = getelementptr inbounds %struct.doublecomplex, ptr %763, i32 0, i32 0
  %765 = load double, ptr %764, align 8, !tbaa !15
  store double %765, ptr %50, align 8, !tbaa !11
  %766 = load double, ptr %50, align 8, !tbaa !11
  %767 = fcmp oge double %766, 0.000000e+00
  br i1 %767, label %768, label %770

768:                                              ; preds = %757
  %769 = load double, ptr %50, align 8, !tbaa !11
  br label %773

770:                                              ; preds = %757
  %771 = load double, ptr %50, align 8, !tbaa !11
  %772 = fneg double %771
  br label %773

773:                                              ; preds = %770, %768
  %774 = phi double [ %769, %768 ], [ %772, %770 ]
  %775 = load ptr, ptr %28, align 8, !tbaa !5
  %776 = load i32, ptr %56, align 4, !tbaa !9
  %777 = load i32, ptr %57, align 4, !tbaa !9
  %778 = load i32, ptr %41, align 4, !tbaa !9
  %779 = mul nsw i32 %777, %778
  %780 = add nsw i32 %776, %779
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds %struct.doublecomplex, ptr %775, i64 %781
  %783 = call { double, double } @Cd(ptr noundef %782)
  %784 = extractvalue { double, double } %783, 0
  %785 = extractvalue { double, double } %783, 1
  store double %785, ptr %51, align 8, !tbaa !11
  %786 = load double, ptr %51, align 8, !tbaa !11
  %787 = fcmp oge double %786, 0.000000e+00
  br i1 %787, label %788, label %790

788:                                              ; preds = %773
  %789 = load double, ptr %51, align 8, !tbaa !11
  br label %793

790:                                              ; preds = %773
  %791 = load double, ptr %51, align 8, !tbaa !11
  %792 = fneg double %791
  br label %793

793:                                              ; preds = %790, %788
  %794 = phi double [ %789, %788 ], [ %792, %790 ]
  %795 = fadd double %774, %794
  %796 = load double, ptr %59, align 8, !tbaa !11
  %797 = call double @llvm.fmuladd.f64(double %759, double %795, double %796)
  store double %797, ptr %59, align 8, !tbaa !11
  br label %798

798:                                              ; preds = %793
  %799 = load i32, ptr %56, align 4, !tbaa !9
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %56, align 4, !tbaa !9
  br label %661, !llvm.loop !21

801:                                              ; preds = %661
  %802 = load double, ptr %59, align 8, !tbaa !11
  %803 = load ptr, ptr %33, align 8, !tbaa !5
  %804 = load i32, ptr %58, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds double, ptr %803, i64 %805
  %807 = load double, ptr %806, align 8, !tbaa !11
  %808 = fadd double %807, %802
  store double %808, ptr %806, align 8, !tbaa !11
  br label %809

809:                                              ; preds = %801
  %810 = load i32, ptr %58, align 4, !tbaa !9
  %811 = add nsw i32 %810, 1
  store i32 %811, ptr %58, align 4, !tbaa !9
  br label %584, !llvm.loop !22

812:                                              ; preds = %584
  br label %813

813:                                              ; preds = %812, %580
  store double 0.000000e+00, ptr %59, align 8, !tbaa !11
  %814 = load ptr, ptr %19, align 8, !tbaa !5
  %815 = load i32, ptr %814, align 4, !tbaa !9
  store i32 %815, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %816

816:                                              ; preds = %933, %813
  %817 = load i32, ptr %56, align 4, !tbaa !9
  %818 = load i32, ptr %44, align 4, !tbaa !9
  %819 = icmp sle i32 %817, %818
  br i1 %819, label %820, label %936

820:                                              ; preds = %816
  %821 = load ptr, ptr %33, align 8, !tbaa !5
  %822 = load i32, ptr %56, align 4, !tbaa !9
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds double, ptr %821, i64 %823
  %825 = load double, ptr %824, align 8, !tbaa !11
  %826 = load double, ptr %55, align 8, !tbaa !11
  %827 = fcmp ogt double %825, %826
  br i1 %827, label %828, label %878

828:                                              ; preds = %820
  %829 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %829, ptr %45, align 4, !tbaa !9
  %830 = load double, ptr %59, align 8, !tbaa !11
  store double %830, ptr %50, align 8, !tbaa !11
  %831 = load ptr, ptr %32, align 8, !tbaa !5
  %832 = load i32, ptr %45, align 4, !tbaa !9
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds %struct.doublecomplex, ptr %831, i64 %833
  %835 = getelementptr inbounds %struct.doublecomplex, ptr %834, i32 0, i32 0
  %836 = load double, ptr %835, align 8, !tbaa !15
  store double %836, ptr %48, align 8, !tbaa !11
  %837 = load double, ptr %48, align 8, !tbaa !11
  %838 = fcmp oge double %837, 0.000000e+00
  br i1 %838, label %839, label %841

839:                                              ; preds = %828
  %840 = load double, ptr %48, align 8, !tbaa !11
  br label %844

841:                                              ; preds = %828
  %842 = load double, ptr %48, align 8, !tbaa !11
  %843 = fneg double %842
  br label %844

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

855:                                              ; preds = %844
  %856 = load double, ptr %49, align 8, !tbaa !11
  br label %860

857:                                              ; preds = %844
  %858 = load double, ptr %49, align 8, !tbaa !11
  %859 = fneg double %858
  br label %860

860:                                              ; preds = %857, %855
  %861 = phi double [ %856, %855 ], [ %859, %857 ]
  %862 = fadd double %845, %861
  %863 = load ptr, ptr %33, align 8, !tbaa !5
  %864 = load i32, ptr %56, align 4, !tbaa !9
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds double, ptr %863, i64 %865
  %867 = load double, ptr %866, align 8, !tbaa !11
  %868 = fdiv double %862, %867
  store double %868, ptr %51, align 8, !tbaa !11
  %869 = load double, ptr %50, align 8, !tbaa !11
  %870 = load double, ptr %51, align 8, !tbaa !11
  %871 = fcmp oge double %869, %870
  br i1 %871, label %872, label %874

872:                                              ; preds = %860
  %873 = load double, ptr %50, align 8, !tbaa !11
  br label %876

874:                                              ; preds = %860
  %875 = load double, ptr %51, align 8, !tbaa !11
  br label %876

876:                                              ; preds = %874, %872
  %877 = phi double [ %873, %872 ], [ %875, %874 ]
  store double %877, ptr %59, align 8, !tbaa !11
  br label %932

878:                                              ; preds = %820
  %879 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %879, ptr %45, align 4, !tbaa !9
  %880 = load double, ptr %59, align 8, !tbaa !11
  store double %880, ptr %50, align 8, !tbaa !11
  %881 = load ptr, ptr %32, align 8, !tbaa !5
  %882 = load i32, ptr %45, align 4, !tbaa !9
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %881, i64 %883
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %884, i32 0, i32 0
  %886 = load double, ptr %885, align 8, !tbaa !15
  store double %886, ptr %48, align 8, !tbaa !11
  %887 = load double, ptr %48, align 8, !tbaa !11
  %888 = fcmp oge double %887, 0.000000e+00
  br i1 %888, label %889, label %891

889:                                              ; preds = %878
  %890 = load double, ptr %48, align 8, !tbaa !11
  br label %894

891:                                              ; preds = %878
  %892 = load double, ptr %48, align 8, !tbaa !11
  %893 = fneg double %892
  br label %894

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

905:                                              ; preds = %894
  %906 = load double, ptr %49, align 8, !tbaa !11
  br label %910

907:                                              ; preds = %894
  %908 = load double, ptr %49, align 8, !tbaa !11
  %909 = fneg double %908
  br label %910

910:                                              ; preds = %907, %905
  %911 = phi double [ %906, %905 ], [ %909, %907 ]
  %912 = fadd double %895, %911
  %913 = load double, ptr %54, align 8, !tbaa !11
  %914 = fadd double %912, %913
  %915 = load ptr, ptr %33, align 8, !tbaa !5
  %916 = load i32, ptr %56, align 4, !tbaa !9
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds double, ptr %915, i64 %917
  %919 = load double, ptr %918, align 8, !tbaa !11
  %920 = load double, ptr %54, align 8, !tbaa !11
  %921 = fadd double %919, %920
  %922 = fdiv double %914, %921
  store double %922, ptr %51, align 8, !tbaa !11
  %923 = load double, ptr %50, align 8, !tbaa !11
  %924 = load double, ptr %51, align 8, !tbaa !11
  %925 = fcmp oge double %923, %924
  br i1 %925, label %926, label %928

926:                                              ; preds = %910
  %927 = load double, ptr %50, align 8, !tbaa !11
  br label %930

928:                                              ; preds = %910
  %929 = load double, ptr %51, align 8, !tbaa !11
  br label %930

930:                                              ; preds = %928, %926
  %931 = phi double [ %927, %926 ], [ %929, %928 ]
  store double %931, ptr %59, align 8, !tbaa !11
  br label %932

932:                                              ; preds = %930, %876
  br label %933

933:                                              ; preds = %932
  %934 = load i32, ptr %56, align 4, !tbaa !9
  %935 = add nsw i32 %934, 1
  store i32 %935, ptr %56, align 4, !tbaa !9
  br label %816, !llvm.loop !23

936:                                              ; preds = %816
  %937 = load double, ptr %59, align 8, !tbaa !11
  %938 = load ptr, ptr %31, align 8, !tbaa !5
  %939 = load i32, ptr %57, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds double, ptr %938, i64 %940
  store double %937, ptr %941, align 8, !tbaa !11
  %942 = load ptr, ptr %31, align 8, !tbaa !5
  %943 = load i32, ptr %57, align 4, !tbaa !9
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds double, ptr %942, i64 %944
  %946 = load double, ptr %945, align 8, !tbaa !11
  %947 = load double, ptr %67, align 8, !tbaa !11
  %948 = fcmp ogt double %946, %947
  br i1 %948, label %949, label %992

949:                                              ; preds = %936
  %950 = load ptr, ptr %31, align 8, !tbaa !5
  %951 = load i32, ptr %57, align 4, !tbaa !9
  %952 = sext i32 %951 to i64
  %953 = getelementptr inbounds double, ptr %950, i64 %952
  %954 = load double, ptr %953, align 8, !tbaa !11
  %955 = fmul double %954, 2.000000e+00
  %956 = load double, ptr %66, align 8, !tbaa !11
  %957 = fcmp ole double %955, %956
  br i1 %957, label %958, label %992

958:                                              ; preds = %949
  %959 = load i32, ptr %61, align 4, !tbaa !9
  %960 = icmp sle i32 %959, 5
  br i1 %960, label %961, label %992

961:                                              ; preds = %958
  %962 = load ptr, ptr %18, align 8, !tbaa !5
  %963 = load ptr, ptr %19, align 8, !tbaa !5
  %964 = load ptr, ptr %23, align 8, !tbaa !5
  %965 = load i32, ptr %38, align 4, !tbaa !9
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds %struct.doublecomplex, ptr %964, i64 %966
  %968 = load ptr, ptr %24, align 8, !tbaa !5
  %969 = load ptr, ptr %25, align 8, !tbaa !5
  %970 = getelementptr inbounds i32, ptr %969, i64 1
  %971 = load ptr, ptr %32, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.doublecomplex, ptr %971, i64 1
  %973 = load ptr, ptr %19, align 8, !tbaa !5
  %974 = load ptr, ptr %34, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef %962, ptr noundef %963, ptr noundef @c__1, ptr noundef %967, ptr noundef %968, ptr noundef %970, ptr noundef %972, ptr noundef %973, ptr noundef %974)
  %975 = load ptr, ptr %19, align 8, !tbaa !5
  %976 = load ptr, ptr %32, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %976, i64 1
  %978 = load ptr, ptr %28, align 8, !tbaa !5
  %979 = load i32, ptr %57, align 4, !tbaa !9
  %980 = load i32, ptr %41, align 4, !tbaa !9
  %981 = mul nsw i32 %979, %980
  %982 = add nsw i32 %981, 1
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %978, i64 %983
  call void @zaxpy_(ptr noundef %975, ptr noundef @c_b1, ptr noundef %977, ptr noundef @c__1, ptr noundef %984, ptr noundef @c__1)
  %985 = load ptr, ptr %31, align 8, !tbaa !5
  %986 = load i32, ptr %57, align 4, !tbaa !9
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds double, ptr %985, i64 %987
  %989 = load double, ptr %988, align 8, !tbaa !11
  store double %989, ptr %66, align 8, !tbaa !11
  %990 = load i32, ptr %61, align 4, !tbaa !9
  %991 = add nsw i32 %990, 1
  store i32 %991, ptr %61, align 4, !tbaa !9
  br label %265

992:                                              ; preds = %958, %949, %936
  %993 = load ptr, ptr %19, align 8, !tbaa !5
  %994 = load i32, ptr %993, align 4, !tbaa !9
  store i32 %994, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %995

995:                                              ; preds = %1106, %992
  %996 = load i32, ptr %56, align 4, !tbaa !9
  %997 = load i32, ptr %44, align 4, !tbaa !9
  %998 = icmp sle i32 %996, %997
  br i1 %998, label %999, label %1109

999:                                              ; preds = %995
  %1000 = load ptr, ptr %33, align 8, !tbaa !5
  %1001 = load i32, ptr %56, align 4, !tbaa !9
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds double, ptr %1000, i64 %1002
  %1004 = load double, ptr %1003, align 8, !tbaa !11
  %1005 = load double, ptr %55, align 8, !tbaa !11
  %1006 = fcmp ogt double %1004, %1005
  br i1 %1006, label %1007, label %1055

1007:                                             ; preds = %999
  %1008 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1008, ptr %45, align 4, !tbaa !9
  %1009 = load ptr, ptr %32, align 8, !tbaa !5
  %1010 = load i32, ptr %45, align 4, !tbaa !9
  %1011 = sext i32 %1010 to i64
  %1012 = getelementptr inbounds %struct.doublecomplex, ptr %1009, i64 %1011
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %1012, i32 0, i32 0
  %1014 = load double, ptr %1013, align 8, !tbaa !15
  store double %1014, ptr %48, align 8, !tbaa !11
  %1015 = load double, ptr %48, align 8, !tbaa !11
  %1016 = fcmp oge double %1015, 0.000000e+00
  br i1 %1016, label %1017, label %1019

1017:                                             ; preds = %1007
  %1018 = load double, ptr %48, align 8, !tbaa !11
  br label %1022

1019:                                             ; preds = %1007
  %1020 = load double, ptr %48, align 8, !tbaa !11
  %1021 = fneg double %1020
  br label %1022

1022:                                             ; preds = %1019, %1017
  %1023 = phi double [ %1018, %1017 ], [ %1021, %1019 ]
  %1024 = load ptr, ptr %32, align 8, !tbaa !5
  %1025 = load i32, ptr %56, align 4, !tbaa !9
  %1026 = sext i32 %1025 to i64
  %1027 = getelementptr inbounds %struct.doublecomplex, ptr %1024, i64 %1026
  %1028 = call { double, double } @Cd(ptr noundef %1027)
  %1029 = extractvalue { double, double } %1028, 0
  %1030 = extractvalue { double, double } %1028, 1
  store double %1030, ptr %49, align 8, !tbaa !11
  %1031 = load double, ptr %49, align 8, !tbaa !11
  %1032 = fcmp oge double %1031, 0.000000e+00
  br i1 %1032, label %1033, label %1035

1033:                                             ; preds = %1022
  %1034 = load double, ptr %49, align 8, !tbaa !11
  br label %1038

1035:                                             ; preds = %1022
  %1036 = load double, ptr %49, align 8, !tbaa !11
  %1037 = fneg double %1036
  br label %1038

1038:                                             ; preds = %1035, %1033
  %1039 = phi double [ %1034, %1033 ], [ %1037, %1035 ]
  %1040 = fadd double %1023, %1039
  %1041 = load i32, ptr %64, align 4, !tbaa !9
  %1042 = sitofp i32 %1041 to double
  %1043 = load double, ptr %67, align 8, !tbaa !11
  %1044 = fmul double %1042, %1043
  %1045 = load ptr, ptr %33, align 8, !tbaa !5
  %1046 = load i32, ptr %56, align 4, !tbaa !9
  %1047 = sext i32 %1046 to i64
  %1048 = getelementptr inbounds double, ptr %1045, i64 %1047
  %1049 = load double, ptr %1048, align 8, !tbaa !11
  %1050 = call double @llvm.fmuladd.f64(double %1044, double %1049, double %1040)
  %1051 = load ptr, ptr %33, align 8, !tbaa !5
  %1052 = load i32, ptr %56, align 4, !tbaa !9
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds double, ptr %1051, i64 %1053
  store double %1050, ptr %1054, align 8, !tbaa !11
  br label %1105

1055:                                             ; preds = %999
  %1056 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1056, ptr %45, align 4, !tbaa !9
  %1057 = load ptr, ptr %32, align 8, !tbaa !5
  %1058 = load i32, ptr %45, align 4, !tbaa !9
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds %struct.doublecomplex, ptr %1057, i64 %1059
  %1061 = getelementptr inbounds %struct.doublecomplex, ptr %1060, i32 0, i32 0
  %1062 = load double, ptr %1061, align 8, !tbaa !15
  store double %1062, ptr %48, align 8, !tbaa !11
  %1063 = load double, ptr %48, align 8, !tbaa !11
  %1064 = fcmp oge double %1063, 0.000000e+00
  br i1 %1064, label %1065, label %1067

1065:                                             ; preds = %1055
  %1066 = load double, ptr %48, align 8, !tbaa !11
  br label %1070

1067:                                             ; preds = %1055
  %1068 = load double, ptr %48, align 8, !tbaa !11
  %1069 = fneg double %1068
  br label %1070

1070:                                             ; preds = %1067, %1065
  %1071 = phi double [ %1066, %1065 ], [ %1069, %1067 ]
  %1072 = load ptr, ptr %32, align 8, !tbaa !5
  %1073 = load i32, ptr %56, align 4, !tbaa !9
  %1074 = sext i32 %1073 to i64
  %1075 = getelementptr inbounds %struct.doublecomplex, ptr %1072, i64 %1074
  %1076 = call { double, double } @Cd(ptr noundef %1075)
  %1077 = extractvalue { double, double } %1076, 0
  %1078 = extractvalue { double, double } %1076, 1
  store double %1078, ptr %49, align 8, !tbaa !11
  %1079 = load double, ptr %49, align 8, !tbaa !11
  %1080 = fcmp oge double %1079, 0.000000e+00
  br i1 %1080, label %1081, label %1083

1081:                                             ; preds = %1070
  %1082 = load double, ptr %49, align 8, !tbaa !11
  br label %1086

1083:                                             ; preds = %1070
  %1084 = load double, ptr %49, align 8, !tbaa !11
  %1085 = fneg double %1084
  br label %1086

1086:                                             ; preds = %1083, %1081
  %1087 = phi double [ %1082, %1081 ], [ %1085, %1083 ]
  %1088 = fadd double %1071, %1087
  %1089 = load i32, ptr %64, align 4, !tbaa !9
  %1090 = sitofp i32 %1089 to double
  %1091 = load double, ptr %67, align 8, !tbaa !11
  %1092 = fmul double %1090, %1091
  %1093 = load ptr, ptr %33, align 8, !tbaa !5
  %1094 = load i32, ptr %56, align 4, !tbaa !9
  %1095 = sext i32 %1094 to i64
  %1096 = getelementptr inbounds double, ptr %1093, i64 %1095
  %1097 = load double, ptr %1096, align 8, !tbaa !11
  %1098 = call double @llvm.fmuladd.f64(double %1092, double %1097, double %1088)
  %1099 = load double, ptr %54, align 8, !tbaa !11
  %1100 = fadd double %1098, %1099
  %1101 = load ptr, ptr %33, align 8, !tbaa !5
  %1102 = load i32, ptr %56, align 4, !tbaa !9
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds double, ptr %1101, i64 %1103
  store double %1100, ptr %1104, align 8, !tbaa !11
  br label %1105

1105:                                             ; preds = %1086, %1038
  br label %1106

1106:                                             ; preds = %1105
  %1107 = load i32, ptr %56, align 4, !tbaa !9
  %1108 = add nsw i32 %1107, 1
  store i32 %1108, ptr %56, align 4, !tbaa !9
  br label %995, !llvm.loop !24

1109:                                             ; preds = %995
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %1110

1110:                                             ; preds = %1270, %1109
  %1111 = load ptr, ptr %19, align 8, !tbaa !5
  %1112 = load ptr, ptr %32, align 8, !tbaa !5
  %1113 = load ptr, ptr %19, align 8, !tbaa !5
  %1114 = load i32, ptr %1113, align 4, !tbaa !9
  %1115 = add nsw i32 %1114, 1
  %1116 = sext i32 %1115 to i64
  %1117 = getelementptr inbounds %struct.doublecomplex, ptr %1112, i64 %1116
  %1118 = load ptr, ptr %32, align 8, !tbaa !5
  %1119 = getelementptr inbounds %struct.doublecomplex, ptr %1118, i64 1
  %1120 = load ptr, ptr %30, align 8, !tbaa !5
  %1121 = load i32, ptr %57, align 4, !tbaa !9
  %1122 = sext i32 %1121 to i64
  %1123 = getelementptr inbounds double, ptr %1120, i64 %1122
  %1124 = getelementptr inbounds [3 x i32], ptr %60, i64 0, i64 0
  call void @zlacn2_(ptr noundef %1111, ptr noundef %1117, ptr noundef %1119, ptr noundef %1123, ptr noundef %53, ptr noundef %1124)
  %1125 = load i32, ptr %53, align 4, !tbaa !9
  %1126 = icmp ne i32 %1125, 0
  br i1 %1126, label %1127, label %1271

1127:                                             ; preds = %1110
  %1128 = load i32, ptr %53, align 4, !tbaa !9
  %1129 = icmp eq i32 %1128, 1
  br i1 %1129, label %1130, label %1198

1130:                                             ; preds = %1127
  %1131 = load ptr, ptr %18, align 8, !tbaa !5
  %1132 = load ptr, ptr %19, align 8, !tbaa !5
  %1133 = load ptr, ptr %23, align 8, !tbaa !5
  %1134 = load i32, ptr %38, align 4, !tbaa !9
  %1135 = sext i32 %1134 to i64
  %1136 = getelementptr inbounds %struct.doublecomplex, ptr %1133, i64 %1135
  %1137 = load ptr, ptr %24, align 8, !tbaa !5
  %1138 = load ptr, ptr %25, align 8, !tbaa !5
  %1139 = getelementptr inbounds i32, ptr %1138, i64 1
  %1140 = load ptr, ptr %32, align 8, !tbaa !5
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %1140, i64 1
  %1142 = load ptr, ptr %19, align 8, !tbaa !5
  %1143 = load ptr, ptr %34, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef %1131, ptr noundef %1132, ptr noundef @c__1, ptr noundef %1136, ptr noundef %1137, ptr noundef %1139, ptr noundef %1141, ptr noundef %1142, ptr noundef %1143)
  %1144 = load ptr, ptr %19, align 8, !tbaa !5
  %1145 = load i32, ptr %1144, align 4, !tbaa !9
  store i32 %1145, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %1146

1146:                                             ; preds = %1194, %1130
  %1147 = load i32, ptr %56, align 4, !tbaa !9
  %1148 = load i32, ptr %44, align 4, !tbaa !9
  %1149 = icmp sle i32 %1147, %1148
  br i1 %1149, label %1150, label %1197

1150:                                             ; preds = %1146
  %1151 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1151, ptr %45, align 4, !tbaa !9
  %1152 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1152, ptr %46, align 4, !tbaa !9
  %1153 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1153, ptr %47, align 4, !tbaa !9
  %1154 = load ptr, ptr %33, align 8, !tbaa !5
  %1155 = load i32, ptr %46, align 4, !tbaa !9
  %1156 = sext i32 %1155 to i64
  %1157 = getelementptr inbounds double, ptr %1154, i64 %1156
  %1158 = load double, ptr %1157, align 8, !tbaa !11
  %1159 = load ptr, ptr %32, align 8, !tbaa !5
  %1160 = load i32, ptr %47, align 4, !tbaa !9
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr inbounds %struct.doublecomplex, ptr %1159, i64 %1161
  %1163 = getelementptr inbounds %struct.doublecomplex, ptr %1162, i32 0, i32 0
  %1164 = load double, ptr %1163, align 8, !tbaa !15
  %1165 = fmul double %1158, %1164
  %1166 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  store double %1165, ptr %1166, align 8, !tbaa !15
  %1167 = load ptr, ptr %33, align 8, !tbaa !5
  %1168 = load i32, ptr %46, align 4, !tbaa !9
  %1169 = sext i32 %1168 to i64
  %1170 = getelementptr inbounds double, ptr %1167, i64 %1169
  %1171 = load double, ptr %1170, align 8, !tbaa !11
  %1172 = load ptr, ptr %32, align 8, !tbaa !5
  %1173 = load i32, ptr %47, align 4, !tbaa !9
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds %struct.doublecomplex, ptr %1172, i64 %1174
  %1176 = getelementptr inbounds %struct.doublecomplex, ptr %1175, i32 0, i32 1
  %1177 = load double, ptr %1176, align 8, !tbaa !17
  %1178 = fmul double %1171, %1177
  %1179 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  store double %1178, ptr %1179, align 8, !tbaa !17
  %1180 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %1181 = load double, ptr %1180, align 8, !tbaa !15
  %1182 = load ptr, ptr %32, align 8, !tbaa !5
  %1183 = load i32, ptr %45, align 4, !tbaa !9
  %1184 = sext i32 %1183 to i64
  %1185 = getelementptr inbounds %struct.doublecomplex, ptr %1182, i64 %1184
  %1186 = getelementptr inbounds %struct.doublecomplex, ptr %1185, i32 0, i32 0
  store double %1181, ptr %1186, align 8, !tbaa !15
  %1187 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %1188 = load double, ptr %1187, align 8, !tbaa !17
  %1189 = load ptr, ptr %32, align 8, !tbaa !5
  %1190 = load i32, ptr %45, align 4, !tbaa !9
  %1191 = sext i32 %1190 to i64
  %1192 = getelementptr inbounds %struct.doublecomplex, ptr %1189, i64 %1191
  %1193 = getelementptr inbounds %struct.doublecomplex, ptr %1192, i32 0, i32 1
  store double %1188, ptr %1193, align 8, !tbaa !17
  br label %1194

1194:                                             ; preds = %1150
  %1195 = load i32, ptr %56, align 4, !tbaa !9
  %1196 = add nsw i32 %1195, 1
  store i32 %1196, ptr %56, align 4, !tbaa !9
  br label %1146, !llvm.loop !25

1197:                                             ; preds = %1146
  br label %1270

1198:                                             ; preds = %1127
  %1199 = load i32, ptr %53, align 4, !tbaa !9
  %1200 = icmp eq i32 %1199, 2
  br i1 %1200, label %1201, label %1269

1201:                                             ; preds = %1198
  %1202 = load ptr, ptr %19, align 8, !tbaa !5
  %1203 = load i32, ptr %1202, align 4, !tbaa !9
  store i32 %1203, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %1204

1204:                                             ; preds = %1252, %1201
  %1205 = load i32, ptr %56, align 4, !tbaa !9
  %1206 = load i32, ptr %44, align 4, !tbaa !9
  %1207 = icmp sle i32 %1205, %1206
  br i1 %1207, label %1208, label %1255

1208:                                             ; preds = %1204
  %1209 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1209, ptr %45, align 4, !tbaa !9
  %1210 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1210, ptr %46, align 4, !tbaa !9
  %1211 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1211, ptr %47, align 4, !tbaa !9
  %1212 = load ptr, ptr %33, align 8, !tbaa !5
  %1213 = load i32, ptr %46, align 4, !tbaa !9
  %1214 = sext i32 %1213 to i64
  %1215 = getelementptr inbounds double, ptr %1212, i64 %1214
  %1216 = load double, ptr %1215, align 8, !tbaa !11
  %1217 = load ptr, ptr %32, align 8, !tbaa !5
  %1218 = load i32, ptr %47, align 4, !tbaa !9
  %1219 = sext i32 %1218 to i64
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %1217, i64 %1219
  %1221 = getelementptr inbounds %struct.doublecomplex, ptr %1220, i32 0, i32 0
  %1222 = load double, ptr %1221, align 8, !tbaa !15
  %1223 = fmul double %1216, %1222
  %1224 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  store double %1223, ptr %1224, align 8, !tbaa !15
  %1225 = load ptr, ptr %33, align 8, !tbaa !5
  %1226 = load i32, ptr %46, align 4, !tbaa !9
  %1227 = sext i32 %1226 to i64
  %1228 = getelementptr inbounds double, ptr %1225, i64 %1227
  %1229 = load double, ptr %1228, align 8, !tbaa !11
  %1230 = load ptr, ptr %32, align 8, !tbaa !5
  %1231 = load i32, ptr %47, align 4, !tbaa !9
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds %struct.doublecomplex, ptr %1230, i64 %1232
  %1234 = getelementptr inbounds %struct.doublecomplex, ptr %1233, i32 0, i32 1
  %1235 = load double, ptr %1234, align 8, !tbaa !17
  %1236 = fmul double %1229, %1235
  %1237 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  store double %1236, ptr %1237, align 8, !tbaa !17
  %1238 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %1239 = load double, ptr %1238, align 8, !tbaa !15
  %1240 = load ptr, ptr %32, align 8, !tbaa !5
  %1241 = load i32, ptr %45, align 4, !tbaa !9
  %1242 = sext i32 %1241 to i64
  %1243 = getelementptr inbounds %struct.doublecomplex, ptr %1240, i64 %1242
  %1244 = getelementptr inbounds %struct.doublecomplex, ptr %1243, i32 0, i32 0
  store double %1239, ptr %1244, align 8, !tbaa !15
  %1245 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %1246 = load double, ptr %1245, align 8, !tbaa !17
  %1247 = load ptr, ptr %32, align 8, !tbaa !5
  %1248 = load i32, ptr %45, align 4, !tbaa !9
  %1249 = sext i32 %1248 to i64
  %1250 = getelementptr inbounds %struct.doublecomplex, ptr %1247, i64 %1249
  %1251 = getelementptr inbounds %struct.doublecomplex, ptr %1250, i32 0, i32 1
  store double %1246, ptr %1251, align 8, !tbaa !17
  br label %1252

1252:                                             ; preds = %1208
  %1253 = load i32, ptr %56, align 4, !tbaa !9
  %1254 = add nsw i32 %1253, 1
  store i32 %1254, ptr %56, align 4, !tbaa !9
  br label %1204, !llvm.loop !26

1255:                                             ; preds = %1204
  %1256 = load ptr, ptr %18, align 8, !tbaa !5
  %1257 = load ptr, ptr %19, align 8, !tbaa !5
  %1258 = load ptr, ptr %23, align 8, !tbaa !5
  %1259 = load i32, ptr %38, align 4, !tbaa !9
  %1260 = sext i32 %1259 to i64
  %1261 = getelementptr inbounds %struct.doublecomplex, ptr %1258, i64 %1260
  %1262 = load ptr, ptr %24, align 8, !tbaa !5
  %1263 = load ptr, ptr %25, align 8, !tbaa !5
  %1264 = getelementptr inbounds i32, ptr %1263, i64 1
  %1265 = load ptr, ptr %32, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.doublecomplex, ptr %1265, i64 1
  %1267 = load ptr, ptr %19, align 8, !tbaa !5
  %1268 = load ptr, ptr %34, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef %1256, ptr noundef %1257, ptr noundef @c__1, ptr noundef %1261, ptr noundef %1262, ptr noundef %1264, ptr noundef %1266, ptr noundef %1267, ptr noundef %1268)
  br label %1269

1269:                                             ; preds = %1255, %1198
  br label %1270

1270:                                             ; preds = %1269, %1197
  br label %1110

1271:                                             ; preds = %1110
  store double 0.000000e+00, ptr %66, align 8, !tbaa !11
  %1272 = load ptr, ptr %19, align 8, !tbaa !5
  %1273 = load i32, ptr %1272, align 4, !tbaa !9
  store i32 %1273, ptr %44, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %1274

1274:                                             ; preds = %1330, %1271
  %1275 = load i32, ptr %56, align 4, !tbaa !9
  %1276 = load i32, ptr %44, align 4, !tbaa !9
  %1277 = icmp sle i32 %1275, %1276
  br i1 %1277, label %1278, label %1333

1278:                                             ; preds = %1274
  %1279 = load i32, ptr %56, align 4, !tbaa !9
  %1280 = load i32, ptr %57, align 4, !tbaa !9
  %1281 = load i32, ptr %41, align 4, !tbaa !9
  %1282 = mul nsw i32 %1280, %1281
  %1283 = add nsw i32 %1279, %1282
  store i32 %1283, ptr %45, align 4, !tbaa !9
  %1284 = load double, ptr %66, align 8, !tbaa !11
  store double %1284, ptr %50, align 8, !tbaa !11
  %1285 = load ptr, ptr %28, align 8, !tbaa !5
  %1286 = load i32, ptr %45, align 4, !tbaa !9
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds %struct.doublecomplex, ptr %1285, i64 %1287
  %1289 = getelementptr inbounds %struct.doublecomplex, ptr %1288, i32 0, i32 0
  %1290 = load double, ptr %1289, align 8, !tbaa !15
  store double %1290, ptr %48, align 8, !tbaa !11
  %1291 = load double, ptr %48, align 8, !tbaa !11
  %1292 = fcmp oge double %1291, 0.000000e+00
  br i1 %1292, label %1293, label %1295

1293:                                             ; preds = %1278
  %1294 = load double, ptr %48, align 8, !tbaa !11
  br label %1298

1295:                                             ; preds = %1278
  %1296 = load double, ptr %48, align 8, !tbaa !11
  %1297 = fneg double %1296
  br label %1298

1298:                                             ; preds = %1295, %1293
  %1299 = phi double [ %1294, %1293 ], [ %1297, %1295 ]
  %1300 = load ptr, ptr %28, align 8, !tbaa !5
  %1301 = load i32, ptr %56, align 4, !tbaa !9
  %1302 = load i32, ptr %57, align 4, !tbaa !9
  %1303 = load i32, ptr %41, align 4, !tbaa !9
  %1304 = mul nsw i32 %1302, %1303
  %1305 = add nsw i32 %1301, %1304
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds %struct.doublecomplex, ptr %1300, i64 %1306
  %1308 = call { double, double } @Cd(ptr noundef %1307)
  %1309 = extractvalue { double, double } %1308, 0
  %1310 = extractvalue { double, double } %1308, 1
  store double %1310, ptr %49, align 8, !tbaa !11
  %1311 = load double, ptr %49, align 8, !tbaa !11
  %1312 = fcmp oge double %1311, 0.000000e+00
  br i1 %1312, label %1313, label %1315

1313:                                             ; preds = %1298
  %1314 = load double, ptr %49, align 8, !tbaa !11
  br label %1318

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

1318:                                             ; preds = %1315, %1313
  %1319 = phi double [ %1314, %1313 ], [ %1317, %1315 ]
  %1320 = fadd double %1299, %1319
  store double %1320, ptr %51, align 8, !tbaa !11
  %1321 = load double, ptr %50, align 8, !tbaa !11
  %1322 = load double, ptr %51, align 8, !tbaa !11
  %1323 = fcmp oge double %1321, %1322
  br i1 %1323, label %1324, label %1326

1324:                                             ; preds = %1318
  %1325 = load double, ptr %50, align 8, !tbaa !11
  br label %1328

1326:                                             ; preds = %1318
  %1327 = load double, ptr %51, align 8, !tbaa !11
  br label %1328

1328:                                             ; preds = %1326, %1324
  %1329 = phi double [ %1325, %1324 ], [ %1327, %1326 ]
  store double %1329, ptr %66, align 8, !tbaa !11
  br label %1330

1330:                                             ; preds = %1328
  %1331 = load i32, ptr %56, align 4, !tbaa !9
  %1332 = add nsw i32 %1331, 1
  store i32 %1332, ptr %56, align 4, !tbaa !9
  br label %1274, !llvm.loop !27

1333:                                             ; preds = %1274
  %1334 = load double, ptr %66, align 8, !tbaa !11
  %1335 = fcmp une double %1334, 0.000000e+00
  br i1 %1335, label %1336, label %1344

1336:                                             ; preds = %1333
  %1337 = load double, ptr %66, align 8, !tbaa !11
  %1338 = load ptr, ptr %30, align 8, !tbaa !5
  %1339 = load i32, ptr %57, align 4, !tbaa !9
  %1340 = sext i32 %1339 to i64
  %1341 = getelementptr inbounds double, ptr %1338, i64 %1340
  %1342 = load double, ptr %1341, align 8, !tbaa !11
  %1343 = fdiv double %1342, %1337
  store double %1343, ptr %1341, align 8, !tbaa !11
  br label %1344

1344:                                             ; preds = %1336, %1333
  br label %1345

1345:                                             ; preds = %1344
  %1346 = load i32, ptr %57, align 4, !tbaa !9
  %1347 = add nsw i32 %1346, 1
  store i32 %1347, ptr %57, align 4, !tbaa !9
  br label %260, !llvm.loop !28

1348:                                             ; preds = %260
  store i32 1, ptr %68, align 4
  br label %1349

1349:                                             ; preds = %1348, %244, %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 4, 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 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, 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
  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 @zhetrs_(ptr noundef, 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 @zherfs_(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 noundef %8, ptr nocapture noundef readonly %9, ptr noundef %10, ptr nocapture noundef readonly %11, ptr noundef %12, ptr nocapture noundef %13, ptr noundef %14, ptr nocapture noundef %15, ptr noundef %16) local_unnamed_addr #0 {
  %18 = ptrtoint ptr %12 to i64
  %19 = ptrtoint ptr %13 to i64
  %20 = alloca i32, align 4
  %21 = alloca %struct.doublecomplex, align 16
  %22 = alloca i32, align 4
  %23 = alloca [3 x i32], align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %23) #6
  %24 = load i32, ptr %4, align 4, !tbaa !5
  %narrow500 = xor i32 %24, -1
  %25 = sext i32 %narrow500 to i64
  %26 = getelementptr inbounds %struct.doublecomplex, ptr %3, i64 %25
  %27 = load i32, ptr %9, align 4, !tbaa !5
  %narrow = xor i32 %27, -1
  %28 = sext i32 %narrow to i64
  %29 = getelementptr inbounds %struct.doublecomplex, ptr %8, i64 %28
  %30 = load i32, ptr %11, align 4, !tbaa !5
  %narrow496 = xor i32 %30, -1
  %31 = sext i32 %narrow496 to i64
  %32 = getelementptr inbounds %struct.doublecomplex, ptr %10, i64 %31
  %33 = getelementptr inbounds i8, ptr %12, i64 -8
  %34 = getelementptr inbounds i8, ptr %13, i64 -8
  %35 = getelementptr inbounds i8, ptr %14, i64 -16
  %36 = getelementptr inbounds i8, ptr %15, i64 -8
  store i32 0, ptr %16, align 4, !tbaa !5
  %37 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not = icmp eq i32 %37, 0
  br i1 %.not, label %38, label %40

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

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

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

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

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

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

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

58:                                               ; preds = %55
  %.pr = load i32, ptr %16, align 4, !tbaa !5
  %.not498 = icmp eq i32 %.pr, 0
  br i1 %.not498, label %62, label %.thread

.thread.sink.split:                               ; preds = %55, %52, %49, %46, %43, %40, %38
  %.sink = phi i32 [ -1, %38 ], [ -2, %40 ], [ -3, %43 ], [ -5, %46 ], [ -7, %49 ], [ -10, %52 ], [ -12, %55 ]
  store i32 %.sink, ptr %16, align 4, !tbaa !5
  br label %.thread

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

62:                                               ; preds = %58
  %63 = icmp eq i32 %41, 0
  %.not512584 = icmp eq i32 %44, 0
  br i1 %63, label %65, label %64

64:                                               ; preds = %62
  br i1 %.not512584, label %.loopexit, label %88

65:                                               ; preds = %62
  br i1 %.not512584, label %.loopexit, label %.lr.ph587.preheader

.lr.ph587.preheader:                              ; preds = %65
  %66 = add nuw i32 %44, 1
  %wide.trip.count649 = zext i32 %66 to i64
  %67 = zext nneg i32 %44 to i64
  %min.iters.check725 = icmp ult i32 %44, 4
  %68 = sub i64 %19, %18
  %diff.check = icmp ult i64 %68, 32
  %or.cond736 = or i1 %min.iters.check725, %diff.check
  br i1 %or.cond736, label %.lr.ph587.preheader746, label %vector.ph726

vector.ph726:                                     ; preds = %.lr.ph587.preheader
  %n.vec728 = and i64 %67, 2147483644
  %ind.end729 = or disjoint i64 %n.vec728, 1
  br label %vector.body731

vector.body731:                                   ; preds = %vector.body731, %vector.ph726
  %index732 = phi i64 [ 0, %vector.ph726 ], [ %index.next734, %vector.body731 ]
  %69 = getelementptr double, ptr %12, i64 %index732
  %70 = getelementptr inbounds i8, ptr %69, i64 16
  store <2 x double> zeroinitializer, ptr %69, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %70, align 8, !tbaa !9
  %71 = getelementptr double, ptr %13, i64 %index732
  %72 = getelementptr inbounds i8, ptr %71, i64 16
  store <2 x double> zeroinitializer, ptr %71, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %72, align 8, !tbaa !9
  %index.next734 = add nuw i64 %index732, 4
  %73 = icmp eq i64 %index.next734, %n.vec728
  br i1 %73, label %middle.block723, label %vector.body731, !llvm.loop !11

middle.block723:                                  ; preds = %vector.body731
  %cmp.n735 = icmp eq i64 %n.vec728, %67
  br i1 %cmp.n735, label %.loopexit, label %.lr.ph587.preheader746

.lr.ph587.preheader746:                           ; preds = %middle.block723, %.lr.ph587.preheader
  %indvars.iv646.ph = phi i64 [ 1, %.lr.ph587.preheader ], [ %ind.end729, %middle.block723 ]
  %74 = sub nsw i64 %wide.trip.count649, %indvars.iv646.ph
  %75 = zext nneg i32 %44 to i64
  %76 = sub nsw i64 %75, %indvars.iv646.ph
  %xtraiter762 = and i64 %74, 3
  %lcmp.mod763.not = icmp eq i64 %xtraiter762, 0
  br i1 %lcmp.mod763.not, label %.lr.ph587.prol.loopexit, label %.lr.ph587.prol

.lr.ph587.prol:                                   ; preds = %.lr.ph587.preheader746, %.lr.ph587.prol
  %indvars.iv646.prol = phi i64 [ %indvars.iv.next647.prol, %.lr.ph587.prol ], [ %indvars.iv646.ph, %.lr.ph587.preheader746 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph587.prol ], [ 0, %.lr.ph587.preheader746 ]
  %77 = getelementptr inbounds double, ptr %33, i64 %indvars.iv646.prol
  store double 0.000000e+00, ptr %77, align 8, !tbaa !9
  %78 = getelementptr inbounds double, ptr %34, i64 %indvars.iv646.prol
  store double 0.000000e+00, ptr %78, align 8, !tbaa !9
  %indvars.iv.next647.prol = add nuw nsw i64 %indvars.iv646.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter762
  br i1 %prol.iter.cmp.not, label %.lr.ph587.prol.loopexit, label %.lr.ph587.prol, !llvm.loop !15

.lr.ph587.prol.loopexit:                          ; preds = %.lr.ph587.prol, %.lr.ph587.preheader746
  %indvars.iv646.unr = phi i64 [ %indvars.iv646.ph, %.lr.ph587.preheader746 ], [ %indvars.iv.next647.prol, %.lr.ph587.prol ]
  %79 = icmp ult i64 %76, 3
  br i1 %79, label %.loopexit, label %.lr.ph587

.lr.ph587:                                        ; preds = %.lr.ph587.prol.loopexit, %.lr.ph587
  %indvars.iv646 = phi i64 [ %indvars.iv.next647.3, %.lr.ph587 ], [ %indvars.iv646.unr, %.lr.ph587.prol.loopexit ]
  %80 = getelementptr inbounds double, ptr %33, i64 %indvars.iv646
  store double 0.000000e+00, ptr %80, align 8, !tbaa !9
  %81 = getelementptr inbounds double, ptr %34, i64 %indvars.iv646
  store double 0.000000e+00, ptr %81, align 8, !tbaa !9
  %82 = getelementptr double, ptr %12, i64 %indvars.iv646
  store double 0.000000e+00, ptr %82, align 8, !tbaa !9
  %83 = getelementptr double, ptr %13, i64 %indvars.iv646
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  %indvars.iv.next647.1 = add nuw nsw i64 %indvars.iv646, 2
  %84 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next647.1
  store double 0.000000e+00, ptr %84, align 8, !tbaa !9
  %85 = getelementptr inbounds double, ptr %34, i64 %indvars.iv.next647.1
  store double 0.000000e+00, ptr %85, align 8, !tbaa !9
  %indvars.iv.next647.2 = add nuw nsw i64 %indvars.iv646, 3
  %86 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next647.2
  store double 0.000000e+00, ptr %86, align 8, !tbaa !9
  %87 = getelementptr inbounds double, ptr %34, i64 %indvars.iv.next647.2
  store double 0.000000e+00, ptr %87, align 8, !tbaa !9
  %indvars.iv.next647.3 = add nuw nsw i64 %indvars.iv646, 4
  %exitcond650.not.3 = icmp eq i64 %indvars.iv.next647.3, %wide.trip.count649
  br i1 %exitcond650.not.3, label %.loopexit, label %.lr.ph587, !llvm.loop !17

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

.preheader.lr.ph:                                 ; preds = %88
  %invariant.gep = getelementptr i8, ptr %32, i64 16
  %96 = add i32 %24, 1
  %97 = fmul double %90, %92
  %98 = sext i32 %24 to i64
  %99 = sext i32 %27 to i64
  %100 = sext i32 %30 to i64
  %101 = zext nneg i32 %95 to i64
  %scevgep = getelementptr i8, ptr %14, i64 -16
  %scevgep693 = getelementptr i8, ptr %15, i64 -8
  %scevgep697 = getelementptr i8, ptr %14, i64 -16
  %scevgep699 = getelementptr i8, ptr %15, i64 -8
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge578.thread
  %indvars.iv643 = phi i64 [ 1, %.preheader.lr.ph ], [ %indvars.iv.next644, %._crit_edge578.thread ]
  %102 = getelementptr inbounds double, ptr %34, i64 %indvars.iv643
  %103 = mul nsw i64 %indvars.iv643, %99
  %gep581 = getelementptr %struct.doublecomplex, ptr %invariant.gep580, i64 %103
  %104 = mul nsw i64 %indvars.iv643, %100
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %104
  %invariant.gep664 = getelementptr %struct.doublecomplex, ptr %29, i64 %103
  %invariant.gep670 = getelementptr %struct.doublecomplex, ptr %32, i64 %104
  %invariant.gep668 = getelementptr %struct.doublecomplex, ptr %32, i64 %104
  %invariant.gep676 = getelementptr %struct.doublecomplex, ptr %32, i64 %104
  %invariant.gep674 = getelementptr %struct.doublecomplex, ptr %32, i64 %104
  br label %105

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

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

120:                                              ; preds = %._crit_edge
  br i1 %.not502542, label %._crit_edge551, label %.lr.ph534.preheader

.lr.ph534.preheader:                              ; preds = %120
  %121 = add nuw i32 %119, 1
  %wide.trip.count605 = zext i32 %121 to i64
  br label %.lr.ph534

.lr.ph534:                                        ; preds = %.lr.ph534.preheader, %._crit_edge530
  %indvars.iv602 = phi i64 [ 1, %.lr.ph534.preheader ], [ %indvars.iv.next603, %._crit_edge530 ]
  %gep671 = getelementptr %struct.doublecomplex, ptr %invariant.gep670, i64 %indvars.iv602
  %122 = load double, ptr %gep671, align 8, !tbaa !18
  %123 = fcmp oge double %122, 0.000000e+00
  %124 = fneg double %122
  %125 = select i1 %123, double %122, double %124
  %126 = call { double, double } @Cd(ptr noundef nonnull %gep671)
  %127 = extractvalue { double, double } %126, 1
  %128 = fcmp oge double %127, 0.000000e+00
  %129 = fneg double %127
  %130 = select i1 %128, double %127, double %129
  %131 = fadd double %125, %130
  %.not511.not525 = icmp ugt i64 %indvars.iv602, 1
  br i1 %.not511.not525, label %.lr.ph529, label %._crit_edge530

.lr.ph529:                                        ; preds = %.lr.ph534
  %132 = mul nsw i64 %indvars.iv602, %98
  %invariant.gep666 = getelementptr %struct.doublecomplex, ptr %26, i64 %132
  br label %133

133:                                              ; preds = %.lr.ph529, %133
  %indvars.iv597 = phi i64 [ 1, %.lr.ph529 ], [ %indvars.iv.next598, %133 ]
  %.0479527 = phi double [ 0.000000e+00, %.lr.ph529 ], [ %167, %133 ]
  %gep667 = getelementptr %struct.doublecomplex, ptr %invariant.gep666, i64 %indvars.iv597
  %134 = load double, ptr %gep667, align 8, !tbaa !18
  %135 = call { double, double } @Cd(ptr noundef nonnull %gep667)
  %136 = extractvalue { double, double } %135, 1
  %137 = insertelement <2 x double> poison, double %134, i64 0
  %138 = insertelement <2 x double> %137, double %136, i64 1
  %139 = fcmp oge <2 x double> %138, zeroinitializer
  %140 = fneg <2 x double> %138
  %141 = select <2 x i1> %139, <2 x double> %138, <2 x double> %140
  %shift737 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %142 = fadd <2 x double> %141, %shift737
  %143 = extractelement <2 x double> %142, i64 0
  %144 = getelementptr inbounds double, ptr %36, i64 %indvars.iv597
  %145 = load double, ptr %144, align 8, !tbaa !9
  %146 = call double @llvm.fmuladd.f64(double %143, double %131, double %145)
  store double %146, ptr %144, align 8, !tbaa !9
  %147 = load double, ptr %gep667, align 8, !tbaa !18
  %148 = call { double, double } @Cd(ptr noundef nonnull %gep667)
  %149 = extractvalue { double, double } %148, 1
  %150 = insertelement <2 x double> poison, double %147, i64 0
  %151 = insertelement <2 x double> %150, double %149, i64 1
  %152 = fcmp oge <2 x double> %151, zeroinitializer
  %153 = fneg <2 x double> %151
  %154 = select <2 x i1> %152, <2 x double> %151, <2 x double> %153
  %shift738 = shufflevector <2 x double> %154, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %155 = fadd <2 x double> %154, %shift738
  %156 = extractelement <2 x double> %155, i64 0
  %gep669 = getelementptr %struct.doublecomplex, ptr %invariant.gep668, i64 %indvars.iv597
  %157 = load double, ptr %gep669, align 8, !tbaa !18
  %158 = call { double, double } @Cd(ptr noundef nonnull %gep669)
  %159 = extractvalue { double, double } %158, 1
  %160 = insertelement <2 x double> poison, double %157, i64 0
  %161 = insertelement <2 x double> %160, double %159, i64 1
  %162 = fcmp oge <2 x double> %161, zeroinitializer
  %163 = fneg <2 x double> %161
  %164 = select <2 x i1> %162, <2 x double> %161, <2 x double> %163
  %shift739 = shufflevector <2 x double> %164, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %165 = fadd <2 x double> %164, %shift739
  %166 = extractelement <2 x double> %165, i64 0
  %167 = call double @llvm.fmuladd.f64(double %156, double %166, double %.0479527)
  %indvars.iv.next598 = add nuw nsw i64 %indvars.iv597, 1
  %exitcond601.not = icmp eq i64 %indvars.iv.next598, %indvars.iv602
  br i1 %exitcond601.not, label %._crit_edge530, label %133, !llvm.loop !21

._crit_edge530:                                   ; preds = %133, %.lr.ph534
  %.0479.lcssa = phi double [ 0.000000e+00, %.lr.ph534 ], [ %167, %133 ]
  %168 = trunc nuw nsw i64 %indvars.iv602 to i32
  %169 = mul i32 %96, %168
  %170 = getelementptr inbounds double, ptr %36, i64 %indvars.iv602
  %171 = load double, ptr %170, align 8, !tbaa !9
  %172 = sext i32 %169 to i64
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %26, i64 %172
  %174 = load double, ptr %173, align 8, !tbaa !18
  %175 = fcmp oge double %174, 0.000000e+00
  %176 = fneg double %174
  %177 = select i1 %175, double %174, double %176
  %178 = call double @llvm.fmuladd.f64(double %177, double %131, double %171)
  %179 = fadd double %.0479.lcssa, %178
  store double %179, ptr %170, align 8, !tbaa !9
  %indvars.iv.next603 = add nuw nsw i64 %indvars.iv602, 1
  %exitcond606.not = icmp eq i64 %indvars.iv.next603, %wide.trip.count605
  br i1 %exitcond606.not, label %.loopexit518, label %.lr.ph534, !llvm.loop !22

180:                                              ; preds = %._crit_edge
  br i1 %.not502542, label %._crit_edge551, label %.lr.ph545.preheader

.lr.ph545.preheader:                              ; preds = %180
  %181 = add nuw i32 %119, 1
  %wide.trip.count616 = zext i32 %181 to i64
  br label %.lr.ph545

.lr.ph545:                                        ; preds = %.lr.ph545.preheader, %._crit_edge540
  %indvars.iv613 = phi i64 [ 1, %.lr.ph545.preheader ], [ %indvars.iv.next614, %._crit_edge540 ]
  %indvars.iv607 = phi i32 [ 2, %.lr.ph545.preheader ], [ %indvars.iv.next608, %._crit_edge540 ]
  %indvars615 = trunc i64 %indvars.iv613 to i32
  %gep677 = getelementptr %struct.doublecomplex, ptr %invariant.gep676, i64 %indvars.iv613
  %182 = load double, ptr %gep677, align 8, !tbaa !18
  %183 = call { double, double } @Cd(ptr noundef nonnull %gep677)
  %184 = extractvalue { double, double } %183, 1
  %185 = insertelement <2 x double> poison, double %182, i64 0
  %186 = insertelement <2 x double> %185, double %184, i64 1
  %187 = fcmp oge <2 x double> %186, zeroinitializer
  %188 = fneg <2 x double> %186
  %189 = select <2 x i1> %187, <2 x double> %186, <2 x double> %188
  %shift740 = shufflevector <2 x double> %189, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %190 = fadd <2 x double> %189, %shift740
  %191 = extractelement <2 x double> %190, i64 0
  %192 = mul nsw i32 %24, %indvars615
  %193 = sext i32 %192 to i64
  %194 = getelementptr %struct.doublecomplex, ptr %26, i64 %indvars.iv613
  %195 = getelementptr %struct.doublecomplex, ptr %194, i64 %193
  %196 = load double, ptr %195, align 8, !tbaa !18
  %197 = fcmp oge double %196, 0.000000e+00
  %198 = fneg double %196
  %199 = select i1 %197, double %196, double %198
  %200 = getelementptr inbounds double, ptr %36, i64 %indvars.iv613
  %201 = load double, ptr %200, align 8, !tbaa !9
  %202 = call double @llvm.fmuladd.f64(double %199, double %191, double %201)
  store double %202, ptr %200, align 8, !tbaa !9
  %203 = load i32, ptr %1, align 4, !tbaa !5
  %indvars.iv.next614 = add nuw nsw i64 %indvars.iv613, 1
  %204 = sext i32 %203 to i64
  %.not503535.not = icmp slt i64 %indvars.iv613, %204
  br i1 %.not503535.not, label %.lr.ph539.preheader, label %._crit_edge540

.lr.ph539.preheader:                              ; preds = %.lr.ph545
  %205 = mul nsw i64 %indvars.iv613, %98
  %206 = sext i32 %indvars.iv607 to i64
  %207 = add i32 %203, 1
  %invariant.gep672 = getelementptr %struct.doublecomplex, ptr %26, i64 %205
  br label %.lr.ph539

.lr.ph539:                                        ; preds = %.lr.ph539.preheader, %.lr.ph539
  %indvars.iv609 = phi i64 [ %206, %.lr.ph539.preheader ], [ %indvars.iv.next610, %.lr.ph539 ]
  %.1480537 = phi double [ 0.000000e+00, %.lr.ph539.preheader ], [ %241, %.lr.ph539 ]
  %gep673 = getelementptr %struct.doublecomplex, ptr %invariant.gep672, i64 %indvars.iv609
  %208 = load double, ptr %gep673, align 8, !tbaa !18
  %209 = call { double, double } @Cd(ptr noundef nonnull %gep673)
  %210 = extractvalue { double, double } %209, 1
  %211 = insertelement <2 x double> poison, double %208, i64 0
  %212 = insertelement <2 x double> %211, double %210, i64 1
  %213 = fcmp oge <2 x double> %212, zeroinitializer
  %214 = fneg <2 x double> %212
  %215 = select <2 x i1> %213, <2 x double> %212, <2 x double> %214
  %shift741 = shufflevector <2 x double> %215, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %216 = fadd <2 x double> %215, %shift741
  %217 = extractelement <2 x double> %216, i64 0
  %218 = getelementptr inbounds double, ptr %36, i64 %indvars.iv609
  %219 = load double, ptr %218, align 8, !tbaa !9
  %220 = call double @llvm.fmuladd.f64(double %217, double %191, double %219)
  store double %220, ptr %218, align 8, !tbaa !9
  %221 = load double, ptr %gep673, align 8, !tbaa !18
  %222 = call { double, double } @Cd(ptr noundef nonnull %gep673)
  %223 = extractvalue { double, double } %222, 1
  %224 = insertelement <2 x double> poison, double %221, i64 0
  %225 = insertelement <2 x double> %224, double %223, i64 1
  %226 = fcmp oge <2 x double> %225, zeroinitializer
  %227 = fneg <2 x double> %225
  %228 = select <2 x i1> %226, <2 x double> %225, <2 x double> %227
  %shift742 = shufflevector <2 x double> %228, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %229 = fadd <2 x double> %228, %shift742
  %230 = extractelement <2 x double> %229, i64 0
  %gep675 = getelementptr %struct.doublecomplex, ptr %invariant.gep674, i64 %indvars.iv609
  %231 = load double, ptr %gep675, align 8, !tbaa !18
  %232 = call { double, double } @Cd(ptr noundef nonnull %gep675)
  %233 = extractvalue { double, double } %232, 1
  %234 = insertelement <2 x double> poison, double %231, i64 0
  %235 = insertelement <2 x double> %234, double %233, i64 1
  %236 = fcmp oge <2 x double> %235, zeroinitializer
  %237 = fneg <2 x double> %235
  %238 = select <2 x i1> %236, <2 x double> %235, <2 x double> %237
  %shift743 = shufflevector <2 x double> %238, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %239 = fadd <2 x double> %238, %shift743
  %240 = extractelement <2 x double> %239, i64 0
  %241 = call double @llvm.fmuladd.f64(double %230, double %240, double %.1480537)
  %indvars.iv.next610 = add nsw i64 %indvars.iv609, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next610 to i32
  %exitcond612.not = icmp eq i32 %207, %lftr.wideiv
  br i1 %exitcond612.not, label %._crit_edge540.loopexit, label %.lr.ph539, !llvm.loop !23

._crit_edge540.loopexit:                          ; preds = %.lr.ph539
  %.pre = load double, ptr %200, align 8, !tbaa !9
  br label %._crit_edge540

._crit_edge540:                                   ; preds = %._crit_edge540.loopexit, %.lr.ph545
  %242 = phi double [ %202, %.lr.ph545 ], [ %.pre, %._crit_edge540.loopexit ]
  %.1480.lcssa = phi double [ 0.000000e+00, %.lr.ph545 ], [ %241, %._crit_edge540.loopexit ]
  %243 = fadd double %.1480.lcssa, %242
  store double %243, ptr %200, align 8, !tbaa !9
  %indvars.iv.next608 = add nuw i32 %indvars.iv607, 1
  %exitcond617.not = icmp eq i64 %indvars.iv.next614, %wide.trip.count616
  br i1 %exitcond617.not, label %.loopexit518, label %.lr.ph545, !llvm.loop !24

.loopexit518:                                     ; preds = %._crit_edge530, %._crit_edge540
  %.pr653 = load i32, ptr %1, align 4, !tbaa !5
  %.not505546 = icmp slt i32 %.pr653, 1
  br i1 %.not505546, label %._crit_edge551, label %.lr.ph550.preheader

.lr.ph550.preheader:                              ; preds = %.loopexit518
  %244 = add nuw i32 %.pr653, 1
  %wide.trip.count621 = zext i32 %244 to i64
  br label %.lr.ph550

.lr.ph550:                                        ; preds = %.lr.ph550.preheader, %267
  %indvars.iv618 = phi i64 [ 1, %.lr.ph550.preheader ], [ %indvars.iv.next619, %267 ]
  %.2548 = phi double [ 0.000000e+00, %.lr.ph550.preheader ], [ %269, %267 ]
  %245 = getelementptr inbounds double, ptr %36, i64 %indvars.iv618
  %246 = load double, ptr %245, align 8, !tbaa !9
  %247 = fcmp ogt double %246, %94
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %indvars.iv618
  %249 = load double, ptr %248, align 8, !tbaa !18
  %250 = fcmp oge double %249, 0.000000e+00
  %251 = fneg double %249
  %252 = select i1 %250, double %249, double %251
  %253 = call { double, double } @Cd(ptr noundef nonnull %248)
  %254 = extractvalue { double, double } %253, 1
  %255 = fcmp oge double %254, 0.000000e+00
  %256 = fneg double %254
  %257 = select i1 %255, double %254, double %256
  %258 = fadd double %252, %257
  br i1 %247, label %259, label %262

259:                                              ; preds = %.lr.ph550
  %260 = load double, ptr %245, align 8, !tbaa !9
  %261 = fdiv double %258, %260
  br label %267

262:                                              ; preds = %.lr.ph550
  %263 = fadd double %93, %258
  %264 = load double, ptr %245, align 8, !tbaa !9
  %265 = fadd double %93, %264
  %266 = fdiv double %263, %265
  br label %267

267:                                              ; preds = %259, %262
  %.sink682 = phi double [ %261, %259 ], [ %266, %262 ]
  %268 = fcmp oge double %.2548, %.sink682
  %269 = select i1 %268, double %.2548, double %.sink682
  %indvars.iv.next619 = add nuw nsw i64 %indvars.iv618, 1
  %exitcond622.not = icmp eq i64 %indvars.iv.next619, %wide.trip.count621
  br i1 %exitcond622.not, label %._crit_edge551, label %.lr.ph550, !llvm.loop !25

._crit_edge551:                                   ; preds = %267, %180, %120, %.loopexit518
  %.2.lcssa = phi double [ 0.000000e+00, %.loopexit518 ], [ 0.000000e+00, %120 ], [ 0.000000e+00, %180 ], [ %269, %267 ]
  store double %.2.lcssa, ptr %102, align 8, !tbaa !9
  %270 = fcmp ogt double %.2.lcssa, %90
  br i1 %270, label %271, label %278

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

275:                                              ; preds = %271
  call void @zhetrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %14, ptr noundef nonnull %1, ptr noundef nonnull %16) #6
  call void @zaxpy_(ptr noundef nonnull %1, ptr noundef nonnull @c_b1, ptr noundef %14, ptr noundef nonnull @c__1, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  %276 = load double, ptr %102, align 8, !tbaa !9
  %277 = add nuw nsw i32 %.0478, 1
  br label %105

278:                                              ; preds = %271, %._crit_edge551
  %279 = load i32, ptr %1, align 4, !tbaa !5
  %.not506553 = icmp slt i32 %279, 1
  br i1 %.not506553, label %._crit_edge557, label %.lr.ph556.preheader

.lr.ph556.preheader:                              ; preds = %278
  %280 = add nuw i32 %279, 1
  %wide.trip.count626 = zext i32 %280 to i64
  br label %.lr.ph556

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

._crit_edge557:                                   ; preds = %.lr.ph556, %278
  store i32 0, ptr %22, align 4, !tbaa !5
  %298 = getelementptr inbounds double, ptr %33, i64 %indvars.iv643
  br label %.loopexit517

.loopexit517:                                     ; preds = %.loopexit517.backedge, %._crit_edge557
  %299 = load i32, ptr %1, align 4, !tbaa !5
  %300 = sext i32 %299 to i64
  %gep572 = getelementptr %struct.doublecomplex, ptr %14, i64 %300
  call void @zlacn2_(ptr noundef nonnull %1, ptr noundef %gep572, ptr noundef %14, ptr noundef nonnull %298, ptr noundef nonnull %22, ptr noundef nonnull %23) #6
  %301 = load i32, ptr %22, align 4, !tbaa !5
  switch i32 %301, label %.loopexit517.backedge [
    i32 0, label %377
    i32 1, label %302
    i32 2, label %338
  ]

302:                                              ; preds = %.loopexit517
  call void @zhetrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %14, ptr noundef nonnull %1, ptr noundef nonnull %16) #6
  %303 = load i32, ptr %1, align 4, !tbaa !5
  %.not510565 = icmp slt i32 %303, 1
  br i1 %.not510565, label %.loopexit517.backedge, label %.lr.ph568.preheader

.loopexit517.backedge:                            ; preds = %302, %..loopexit517_crit_edge, %.loopexit517, %375
  br label %.loopexit517

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

vector.memcheck:                                  ; preds = %.lr.ph568.preheader
  %306 = shl nuw nsw i64 %wide.trip.count636, 4
  %scevgep692 = getelementptr i8, ptr %scevgep, i64 %306
  %307 = shl nuw nsw i64 %wide.trip.count636, 3
  %scevgep694 = getelementptr i8, ptr %scevgep693, i64 %307
  %bound0 = icmp ugt ptr %scevgep694, %14
  %bound1 = icmp ugt ptr %scevgep692, %15
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph568.preheader747, label %vector.ph

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

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %305
  %313 = shufflevector <2 x double> %310, <2 x double> %311, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %..loopexit517_crit_edge, label %.lr.ph568.preheader747

.lr.ph568.preheader747:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph568.preheader
  %indvars.iv633.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph568.preheader ], [ %ind.end, %middle.block ]
  %314 = zext nneg i32 %303 to i64
  %315 = and i32 %303, 1
  %lcmp.mod761.not = icmp eq i32 %315, 0
  br i1 %lcmp.mod761.not, label %.lr.ph568.prol.loopexit, label %.lr.ph568.prol

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

.lr.ph568.prol.loopexit:                          ; preds = %.lr.ph568.prol, %.lr.ph568.preheader747
  %.lcssa758.unr = phi <2 x double> [ poison, %.lr.ph568.preheader747 ], [ %322, %.lr.ph568.prol ]
  %indvars.iv633.unr = phi i64 [ %indvars.iv633.ph, %.lr.ph568.preheader747 ], [ %indvars.iv.next634.prol, %.lr.ph568.prol ]
  %323 = icmp eq i64 %indvars.iv633.ph, %314
  br i1 %323, label %..loopexit517_crit_edge, label %.lr.ph568

.lr.ph568:                                        ; preds = %.lr.ph568.prol.loopexit, %.lr.ph568
  %indvars.iv633 = phi i64 [ %indvars.iv.next634.1, %.lr.ph568 ], [ %indvars.iv633.unr, %.lr.ph568.prol.loopexit ]
  %324 = getelementptr inbounds double, ptr %36, i64 %indvars.iv633
  %325 = load double, ptr %324, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %35, i64 %indvars.iv633
  %327 = load <2 x double>, ptr %326, align 8, !tbaa !9
  %328 = insertelement <2 x double> poison, double %325, i64 0
  %329 = shufflevector <2 x double> %328, <2 x double> poison, <2 x i32> zeroinitializer
  %330 = fmul <2 x double> %329, %327
  store <2 x double> %330, ptr %326, align 8, !tbaa !9
  %331 = getelementptr double, ptr %15, i64 %indvars.iv633
  %332 = load double, ptr %331, align 8, !tbaa !9
  %333 = getelementptr %struct.doublecomplex, ptr %14, i64 %indvars.iv633
  %334 = load <2 x double>, ptr %333, align 8, !tbaa !9
  %335 = insertelement <2 x double> poison, double %332, i64 0
  %336 = shufflevector <2 x double> %335, <2 x double> poison, <2 x i32> zeroinitializer
  %337 = fmul <2 x double> %336, %334
  store <2 x double> %337, ptr %333, align 8, !tbaa !9
  %indvars.iv.next634.1 = add nuw nsw i64 %indvars.iv633, 2
  %exitcond637.not.1 = icmp eq i64 %indvars.iv.next634.1, %wide.trip.count636
  br i1 %exitcond637.not.1, label %..loopexit517_crit_edge, label %.lr.ph568, !llvm.loop !31

338:                                              ; preds = %.loopexit517
  %339 = load i32, ptr %1, align 4, !tbaa !5
  %.not509558 = icmp slt i32 %339, 1
  br i1 %.not509558, label %375, label %.lr.ph561.preheader

.lr.ph561.preheader:                              ; preds = %338
  %340 = add nuw i32 %339, 1
  %wide.trip.count631 = zext i32 %340 to i64
  %341 = zext nneg i32 %339 to i64
  %min.iters.check706 = icmp eq i32 %339, 1
  br i1 %min.iters.check706, label %.lr.ph561.preheader748, label %vector.memcheck696

vector.memcheck696:                               ; preds = %.lr.ph561.preheader
  %342 = shl nuw nsw i64 %wide.trip.count631, 4
  %scevgep698 = getelementptr i8, ptr %scevgep697, i64 %342
  %343 = shl nuw nsw i64 %wide.trip.count631, 3
  %scevgep700 = getelementptr i8, ptr %scevgep699, i64 %343
  %bound0701 = icmp ugt ptr %scevgep700, %14
  %bound1702 = icmp ugt ptr %scevgep698, %15
  %found.conflict703 = and i1 %bound0701, %bound1702
  br i1 %found.conflict703, label %.lr.ph561.preheader748, label %vector.ph707

vector.ph707:                                     ; preds = %vector.memcheck696
  %n.vec709 = and i64 %341, 2147483646
  %ind.end710 = or i64 %341, 1
  br label %vector.body712

vector.body712:                                   ; preds = %vector.body712, %vector.ph707
  %index713 = phi i64 [ 0, %vector.ph707 ], [ %index.next720, %vector.body712 ]
  %344 = getelementptr double, ptr %15, i64 %index713
  %wide.load715 = load <2 x double>, ptr %344, align 8, !tbaa !9, !alias.scope !32
  %345 = getelementptr %struct.doublecomplex, ptr %14, i64 %index713
  %wide.vec716 = load <4 x double>, ptr %345, align 8, !tbaa !9
  %strided.vec717 = shufflevector <4 x double> %wide.vec716, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec718 = shufflevector <4 x double> %wide.vec716, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %346 = fmul <2 x double> %wide.load715, %strided.vec717
  %347 = fmul <2 x double> %wide.load715, %strided.vec718
  %interleaved.vec719 = shufflevector <2 x double> %346, <2 x double> %347, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec719, ptr %345, align 8, !tbaa !9
  %index.next720 = add nuw i64 %index713, 2
  %348 = icmp eq i64 %index.next720, %n.vec709
  br i1 %348, label %middle.block704, label %vector.body712, !llvm.loop !35

middle.block704:                                  ; preds = %vector.body712
  %cmp.n721 = icmp eq i64 %n.vec709, %341
  %349 = shufflevector <2 x double> %346, <2 x double> %347, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n721, label %._crit_edge562, label %.lr.ph561.preheader748

.lr.ph561.preheader748:                           ; preds = %middle.block704, %vector.memcheck696, %.lr.ph561.preheader
  %indvars.iv628.ph = phi i64 [ 1, %vector.memcheck696 ], [ 1, %.lr.ph561.preheader ], [ %ind.end710, %middle.block704 ]
  %350 = zext nneg i32 %339 to i64
  %351 = and i32 %339, 1
  %lcmp.mod.not = icmp eq i32 %351, 0
  br i1 %lcmp.mod.not, label %.lr.ph561.prol.loopexit, label %.lr.ph561.prol

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

.lr.ph561.prol.loopexit:                          ; preds = %.lr.ph561.prol, %.lr.ph561.preheader748
  %.lcssa755.unr = phi <2 x double> [ poison, %.lr.ph561.preheader748 ], [ %358, %.lr.ph561.prol ]
  %indvars.iv628.unr = phi i64 [ %indvars.iv628.ph, %.lr.ph561.preheader748 ], [ %indvars.iv.next629.prol, %.lr.ph561.prol ]
  %359 = icmp eq i64 %indvars.iv628.ph, %350
  br i1 %359, label %._crit_edge562, label %.lr.ph561

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

._crit_edge562:                                   ; preds = %.lr.ph561.prol.loopexit, %.lr.ph561, %middle.block704
  %374 = phi <2 x double> [ %349, %middle.block704 ], [ %.lcssa755.unr, %.lr.ph561.prol.loopexit ], [ %373, %.lr.ph561 ]
  store <2 x double> %374, ptr %21, align 16, !tbaa !9
  br label %375

375:                                              ; preds = %._crit_edge562, %338
  call void @zhetrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %14, ptr noundef nonnull %1, ptr noundef nonnull %16) #6
  br label %.loopexit517.backedge

..loopexit517_crit_edge:                          ; preds = %.lr.ph568.prol.loopexit, %.lr.ph568, %middle.block
  %376 = phi <2 x double> [ %313, %middle.block ], [ %.lcssa758.unr, %.lr.ph568.prol.loopexit ], [ %337, %.lr.ph568 ]
  store <2 x double> %376, ptr %21, align 16, !tbaa !9
  br label %.loopexit517.backedge

377:                                              ; preds = %.loopexit517
  %378 = load i32, ptr %1, align 4, !tbaa !5
  %.not508573 = icmp slt i32 %378, 1
  br i1 %.not508573, label %._crit_edge578.thread, label %.lr.ph577.preheader

.lr.ph577.preheader:                              ; preds = %377
  %379 = add nuw i32 %378, 1
  %wide.trip.count641 = zext i32 %379 to i64
  %invariant.gep678 = getelementptr %struct.doublecomplex, ptr %32, i64 %104
  br label %.lr.ph577

.lr.ph577:                                        ; preds = %.lr.ph577.preheader, %.lr.ph577
  %indvars.iv638 = phi i64 [ 1, %.lr.ph577.preheader ], [ %indvars.iv.next639, %.lr.ph577 ]
  %.1575 = phi double [ 0.000000e+00, %.lr.ph577.preheader ], [ %391, %.lr.ph577 ]
  %gep679 = getelementptr %struct.doublecomplex, ptr %invariant.gep678, i64 %indvars.iv638
  %380 = load double, ptr %gep679, align 8, !tbaa !18
  %381 = call { double, double } @Cd(ptr noundef nonnull %gep679)
  %382 = extractvalue { double, double } %381, 1
  %383 = insertelement <2 x double> poison, double %380, i64 0
  %384 = insertelement <2 x double> %383, double %382, i64 1
  %385 = fcmp oge <2 x double> %384, zeroinitializer
  %386 = fneg <2 x double> %384
  %387 = select <2 x i1> %385, <2 x double> %384, <2 x double> %386
  %shift745 = shufflevector <2 x double> %387, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %388 = fadd <2 x double> %387, %shift745
  %389 = extractelement <2 x double> %388, i64 0
  %390 = fcmp oge double %.1575, %389
  %391 = select i1 %390, double %.1575, double %389
  %indvars.iv.next639 = add nuw nsw i64 %indvars.iv638, 1
  %exitcond642.not = icmp eq i64 %indvars.iv.next639, %wide.trip.count641
  br i1 %exitcond642.not, label %._crit_edge578, label %.lr.ph577, !llvm.loop !37

._crit_edge578:                                   ; preds = %.lr.ph577
  %392 = fcmp une double %391, 0.000000e+00
  br i1 %392, label %393, label %._crit_edge578.thread

393:                                              ; preds = %._crit_edge578
  %394 = load double, ptr %298, align 8, !tbaa !9
  %395 = fdiv double %394, %391
  store double %395, ptr %298, align 8, !tbaa !9
  br label %._crit_edge578.thread

._crit_edge578.thread:                            ; preds = %377, %._crit_edge578, %393
  %indvars.iv.next644 = add nuw nsw i64 %indvars.iv643, 1
  %.not499.not = icmp ult i64 %indvars.iv643, %101
  br i1 %.not499.not, label %.preheader, label %.loopexit, !llvm.loop !38

.loopexit:                                        ; preds = %._crit_edge578.thread, %.lr.ph587.prol.loopexit, %.lr.ph587, %middle.block723, %64, %88, %65, %.thread
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #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 @zhetrs_(ptr noundef, 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