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

; 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 [14 x i8], align 1
@c__1 = external hidden global i32, align 4

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

81:                                               ; preds = %12
  %82 = load ptr, ptr %14, align 8, !tbaa !5
  %83 = call i32 @lsame_(ptr noundef %82, ptr noundef @.str.1)
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %87, label %85

85:                                               ; preds = %81
  %86 = load ptr, ptr %23, align 8, !tbaa !5
  store i32 -1, ptr %86, align 4, !tbaa !9
  br label %126

87:                                               ; preds = %81, %12
  %88 = load ptr, ptr %15, align 8, !tbaa !5
  %89 = load i32, ptr %88, align 4, !tbaa !9
  %90 = icmp slt i32 %89, 0
  br i1 %90, label %91, label %93

91:                                               ; preds = %87
  %92 = load ptr, ptr %23, align 8, !tbaa !5
  store i32 -2, ptr %92, align 4, !tbaa !9
  br label %125

93:                                               ; preds = %87
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  %95 = load i32, ptr %94, align 4, !tbaa !9
  %96 = load ptr, ptr %15, align 8, !tbaa !5
  %97 = load i32, ptr %96, align 4, !tbaa !9
  %98 = icmp sge i32 1, %97
  br i1 %98, label %99, label %100

99:                                               ; preds = %93
  br label %103

100:                                              ; preds = %93
  %101 = load ptr, ptr %15, align 8, !tbaa !5
  %102 = load i32, ptr %101, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %100, %99
  %104 = phi i32 [ 1, %99 ], [ %102, %100 ]
  %105 = icmp slt i32 %95, %104
  br i1 %105, label %106, label %108

106:                                              ; preds = %103
  %107 = load ptr, ptr %23, align 8, !tbaa !5
  store i32 -4, ptr %107, align 4, !tbaa !9
  br label %124

108:                                              ; preds = %103
  %109 = load ptr, ptr %19, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = load ptr, ptr %15, align 8, !tbaa !5
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = icmp sge i32 1, %112
  br i1 %113, label %114, label %115

114:                                              ; preds = %108
  br label %118

115:                                              ; preds = %108
  %116 = load ptr, ptr %15, align 8, !tbaa !5
  %117 = load i32, ptr %116, align 4, !tbaa !9
  br label %118

118:                                              ; preds = %115, %114
  %119 = phi i32 [ 1, %114 ], [ %117, %115 ]
  %120 = icmp slt i32 %110, %119
  br i1 %120, label %121, label %123

121:                                              ; preds = %118
  %122 = load ptr, ptr %23, align 8, !tbaa !5
  store i32 -6, ptr %122, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %121, %118
  br label %124

124:                                              ; preds = %123, %106
  br label %125

125:                                              ; preds = %124, %91
  br label %126

126:                                              ; preds = %125, %85
  %127 = load ptr, ptr %23, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %136

130:                                              ; preds = %126
  %131 = load ptr, ptr %23, align 8, !tbaa !5
  %132 = load i32, ptr %131, align 4, !tbaa !9
  %133 = sub nsw i32 0, %132
  store i32 %133, ptr %30, align 4, !tbaa !9
  %134 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %30, i32 noundef 13)
  %135 = load double, ptr %34, align 8, !tbaa !11
  store double %135, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %992

136:                                              ; preds = %126
  store i32 0, ptr %44, align 4, !tbaa !9
  %137 = load ptr, ptr %14, align 8, !tbaa !5
  %138 = call i32 @lsame_(ptr noundef %137, ptr noundef @.str)
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %141

140:                                              ; preds = %136
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %141

141:                                              ; preds = %140, %136
  store double 0.000000e+00, ptr %42, align 8, !tbaa !11
  %142 = load i32, ptr %44, align 4, !tbaa !9
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %406

144:                                              ; preds = %141
  %145 = load ptr, ptr %15, align 8, !tbaa !5
  %146 = load i32, ptr %145, align 4, !tbaa !9
  store i32 %146, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %402, %144
  %148 = load i32, ptr %39, align 4, !tbaa !9
  %149 = load i32, ptr %30, align 4, !tbaa !9
  %150 = icmp sle i32 %148, %149
  br i1 %150, label %151, label %405

151:                                              ; preds = %147
  store double 0.000000e+00, ptr %46, align 8, !tbaa !11
  %152 = load ptr, ptr %22, align 8, !tbaa !5
  %153 = load i32, ptr %152, align 4, !tbaa !9
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %277

155:                                              ; preds = %151
  %156 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %156, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %40, align 4, !tbaa !9
  br label %157

157:                                              ; preds = %211, %155
  %158 = load i32, ptr %40, align 4, !tbaa !9
  %159 = load i32, ptr %31, align 4, !tbaa !9
  %160 = icmp sle i32 %158, %159
  br i1 %160, label %161, label %214

161:                                              ; preds = %157
  %162 = load i32, ptr %40, align 4, !tbaa !9
  %163 = load i32, ptr %39, align 4, !tbaa !9
  %164 = load i32, ptr %26, align 4, !tbaa !9
  %165 = mul nsw i32 %163, %164
  %166 = add nsw i32 %162, %165
  store i32 %166, ptr %32, align 4, !tbaa !9
  %167 = load ptr, ptr %16, align 8, !tbaa !5
  %168 = load i32, ptr %32, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds %struct.doublecomplex, ptr %167, i64 %169
  %171 = getelementptr inbounds %struct.doublecomplex, ptr %170, i32 0, i32 0
  %172 = load double, ptr %171, align 8, !tbaa !13
  store double %172, ptr %35, align 8, !tbaa !11
  %173 = load double, ptr %35, align 8, !tbaa !11
  %174 = fcmp oge double %173, 0.000000e+00
  br i1 %174, label %175, label %177

175:                                              ; preds = %161
  %176 = load double, ptr %35, align 8, !tbaa !11
  br label %180

177:                                              ; preds = %161
  %178 = load double, ptr %35, align 8, !tbaa !11
  %179 = fneg double %178
  br label %180

180:                                              ; preds = %177, %175
  %181 = phi double [ %176, %175 ], [ %179, %177 ]
  %182 = load ptr, ptr %16, align 8, !tbaa !5
  %183 = load i32, ptr %40, align 4, !tbaa !9
  %184 = load i32, ptr %39, align 4, !tbaa !9
  %185 = load i32, ptr %26, align 4, !tbaa !9
  %186 = mul nsw i32 %184, %185
  %187 = add nsw i32 %183, %186
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds %struct.doublecomplex, ptr %182, i64 %188
  %190 = call { double, double } @Cd(ptr noundef %189)
  %191 = extractvalue { double, double } %190, 0
  %192 = extractvalue { double, double } %190, 1
  store double %192, ptr %36, align 8, !tbaa !11
  %193 = load double, ptr %36, align 8, !tbaa !11
  %194 = fcmp oge double %193, 0.000000e+00
  br i1 %194, label %195, label %197

195:                                              ; preds = %180
  %196 = load double, ptr %36, align 8, !tbaa !11
  br label %200

197:                                              ; preds = %180
  %198 = load double, ptr %36, align 8, !tbaa !11
  %199 = fneg double %198
  br label %200

200:                                              ; preds = %197, %195
  %201 = phi double [ %196, %195 ], [ %199, %197 ]
  %202 = fadd double %181, %201
  %203 = load ptr, ptr %21, align 8, !tbaa !5
  %204 = load i32, ptr %40, align 4, !tbaa !9
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds double, ptr %203, i64 %205
  %207 = load double, ptr %206, align 8, !tbaa !11
  %208 = fdiv double %202, %207
  %209 = load double, ptr %46, align 8, !tbaa !11
  %210 = fadd double %209, %208
  store double %210, ptr %46, align 8, !tbaa !11
  br label %211

211:                                              ; preds = %200
  %212 = load i32, ptr %40, align 4, !tbaa !9
  %213 = add nsw i32 %212, 1
  store i32 %213, ptr %40, align 4, !tbaa !9
  br label %157, !llvm.loop !15

214:                                              ; preds = %157
  %215 = load ptr, ptr %15, align 8, !tbaa !5
  %216 = load i32, ptr %215, align 4, !tbaa !9
  store i32 %216, ptr %31, align 4, !tbaa !9
  %217 = load i32, ptr %39, align 4, !tbaa !9
  %218 = add nsw i32 %217, 1
  store i32 %218, ptr %40, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %273, %214
  %220 = load i32, ptr %40, align 4, !tbaa !9
  %221 = load i32, ptr %31, align 4, !tbaa !9
  %222 = icmp sle i32 %220, %221
  br i1 %222, label %223, label %276

223:                                              ; preds = %219
  %224 = load i32, ptr %39, align 4, !tbaa !9
  %225 = load i32, ptr %40, align 4, !tbaa !9
  %226 = load i32, ptr %26, align 4, !tbaa !9
  %227 = mul nsw i32 %225, %226
  %228 = add nsw i32 %224, %227
  store i32 %228, ptr %32, align 4, !tbaa !9
  %229 = load ptr, ptr %16, align 8, !tbaa !5
  %230 = load i32, ptr %32, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.doublecomplex, ptr %229, i64 %231
  %233 = getelementptr inbounds %struct.doublecomplex, ptr %232, i32 0, i32 0
  %234 = load double, ptr %233, align 8, !tbaa !13
  store double %234, ptr %35, align 8, !tbaa !11
  %235 = load double, ptr %35, align 8, !tbaa !11
  %236 = fcmp oge double %235, 0.000000e+00
  br i1 %236, label %237, label %239

237:                                              ; preds = %223
  %238 = load double, ptr %35, align 8, !tbaa !11
  br label %242

239:                                              ; preds = %223
  %240 = load double, ptr %35, align 8, !tbaa !11
  %241 = fneg double %240
  br label %242

242:                                              ; preds = %239, %237
  %243 = phi double [ %238, %237 ], [ %241, %239 ]
  %244 = load ptr, ptr %16, align 8, !tbaa !5
  %245 = load i32, ptr %39, align 4, !tbaa !9
  %246 = load i32, ptr %40, align 4, !tbaa !9
  %247 = load i32, ptr %26, align 4, !tbaa !9
  %248 = mul nsw i32 %246, %247
  %249 = add nsw i32 %245, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds %struct.doublecomplex, ptr %244, i64 %250
  %252 = call { double, double } @Cd(ptr noundef %251)
  %253 = extractvalue { double, double } %252, 0
  %254 = extractvalue { double, double } %252, 1
  store double %254, ptr %36, align 8, !tbaa !11
  %255 = load double, ptr %36, align 8, !tbaa !11
  %256 = fcmp oge double %255, 0.000000e+00
  br i1 %256, label %257, label %259

257:                                              ; preds = %242
  %258 = load double, ptr %36, align 8, !tbaa !11
  br label %262

259:                                              ; preds = %242
  %260 = load double, ptr %36, align 8, !tbaa !11
  %261 = fneg double %260
  br label %262

262:                                              ; preds = %259, %257
  %263 = phi double [ %258, %257 ], [ %261, %259 ]
  %264 = fadd double %243, %263
  %265 = load ptr, ptr %21, align 8, !tbaa !5
  %266 = load i32, ptr %40, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds double, ptr %265, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !11
  %270 = fdiv double %264, %269
  %271 = load double, ptr %46, align 8, !tbaa !11
  %272 = fadd double %271, %270
  store double %272, ptr %46, align 8, !tbaa !11
  br label %273

273:                                              ; preds = %262
  %274 = load i32, ptr %40, align 4, !tbaa !9
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %40, align 4, !tbaa !9
  br label %219, !llvm.loop !17

276:                                              ; preds = %219
  br label %387

277:                                              ; preds = %151
  %278 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %278, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %40, align 4, !tbaa !9
  br label %279

279:                                              ; preds = %327, %277
  %280 = load i32, ptr %40, align 4, !tbaa !9
  %281 = load i32, ptr %31, align 4, !tbaa !9
  %282 = icmp sle i32 %280, %281
  br i1 %282, label %283, label %330

283:                                              ; preds = %279
  %284 = load i32, ptr %40, align 4, !tbaa !9
  %285 = load i32, ptr %39, align 4, !tbaa !9
  %286 = load i32, ptr %26, align 4, !tbaa !9
  %287 = mul nsw i32 %285, %286
  %288 = add nsw i32 %284, %287
  store i32 %288, ptr %32, align 4, !tbaa !9
  %289 = load ptr, ptr %16, align 8, !tbaa !5
  %290 = load i32, ptr %32, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds %struct.doublecomplex, ptr %289, i64 %291
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %292, i32 0, i32 0
  %294 = load double, ptr %293, align 8, !tbaa !13
  store double %294, ptr %35, align 8, !tbaa !11
  %295 = load double, ptr %35, align 8, !tbaa !11
  %296 = fcmp oge double %295, 0.000000e+00
  br i1 %296, label %297, label %299

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

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

302:                                              ; preds = %299, %297
  %303 = phi double [ %298, %297 ], [ %301, %299 ]
  %304 = load ptr, ptr %16, align 8, !tbaa !5
  %305 = load i32, ptr %40, align 4, !tbaa !9
  %306 = load i32, ptr %39, align 4, !tbaa !9
  %307 = load i32, ptr %26, align 4, !tbaa !9
  %308 = mul nsw i32 %306, %307
  %309 = add nsw i32 %305, %308
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %304, i64 %310
  %312 = call { double, double } @Cd(ptr noundef %311)
  %313 = extractvalue { double, double } %312, 0
  %314 = extractvalue { double, double } %312, 1
  store double %314, ptr %36, align 8, !tbaa !11
  %315 = load double, ptr %36, align 8, !tbaa !11
  %316 = fcmp oge double %315, 0.000000e+00
  br i1 %316, label %317, label %319

317:                                              ; preds = %302
  %318 = load double, ptr %36, align 8, !tbaa !11
  br label %322

319:                                              ; preds = %302
  %320 = load double, ptr %36, align 8, !tbaa !11
  %321 = fneg double %320
  br label %322

322:                                              ; preds = %319, %317
  %323 = phi double [ %318, %317 ], [ %321, %319 ]
  %324 = fadd double %303, %323
  %325 = load double, ptr %46, align 8, !tbaa !11
  %326 = fadd double %325, %324
  store double %326, ptr %46, align 8, !tbaa !11
  br label %327

327:                                              ; preds = %322
  %328 = load i32, ptr %40, align 4, !tbaa !9
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %40, align 4, !tbaa !9
  br label %279, !llvm.loop !18

330:                                              ; preds = %279
  %331 = load ptr, ptr %15, align 8, !tbaa !5
  %332 = load i32, ptr %331, align 4, !tbaa !9
  store i32 %332, ptr %31, align 4, !tbaa !9
  %333 = load i32, ptr %39, align 4, !tbaa !9
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %40, align 4, !tbaa !9
  br label %335

335:                                              ; preds = %383, %330
  %336 = load i32, ptr %40, align 4, !tbaa !9
  %337 = load i32, ptr %31, align 4, !tbaa !9
  %338 = icmp sle i32 %336, %337
  br i1 %338, label %339, label %386

339:                                              ; preds = %335
  %340 = load i32, ptr %39, align 4, !tbaa !9
  %341 = load i32, ptr %40, align 4, !tbaa !9
  %342 = load i32, ptr %26, align 4, !tbaa !9
  %343 = mul nsw i32 %341, %342
  %344 = add nsw i32 %340, %343
  store i32 %344, ptr %32, align 4, !tbaa !9
  %345 = load ptr, ptr %16, align 8, !tbaa !5
  %346 = load i32, ptr %32, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds %struct.doublecomplex, ptr %345, i64 %347
  %349 = getelementptr inbounds %struct.doublecomplex, ptr %348, i32 0, i32 0
  %350 = load double, ptr %349, align 8, !tbaa !13
  store double %350, ptr %35, align 8, !tbaa !11
  %351 = load double, ptr %35, align 8, !tbaa !11
  %352 = fcmp oge double %351, 0.000000e+00
  br i1 %352, label %353, label %355

353:                                              ; preds = %339
  %354 = load double, ptr %35, align 8, !tbaa !11
  br label %358

355:                                              ; preds = %339
  %356 = load double, ptr %35, align 8, !tbaa !11
  %357 = fneg double %356
  br label %358

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

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

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

378:                                              ; preds = %375, %373
  %379 = phi double [ %374, %373 ], [ %377, %375 ]
  %380 = fadd double %359, %379
  %381 = load double, ptr %46, align 8, !tbaa !11
  %382 = fadd double %381, %380
  store double %382, ptr %46, align 8, !tbaa !11
  br label %383

383:                                              ; preds = %378
  %384 = load i32, ptr %40, align 4, !tbaa !9
  %385 = add nsw i32 %384, 1
  store i32 %385, ptr %40, align 4, !tbaa !9
  br label %335, !llvm.loop !19

386:                                              ; preds = %335
  br label %387

387:                                              ; preds = %386, %276
  %388 = load double, ptr %46, align 8, !tbaa !11
  %389 = load ptr, ptr %25, align 8, !tbaa !5
  %390 = load i32, ptr %39, align 4, !tbaa !9
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds double, ptr %389, i64 %391
  store double %388, ptr %392, align 8, !tbaa !11
  %393 = load double, ptr %42, align 8, !tbaa !11
  %394 = load double, ptr %46, align 8, !tbaa !11
  %395 = fcmp oge double %393, %394
  br i1 %395, label %396, label %398

396:                                              ; preds = %387
  %397 = load double, ptr %42, align 8, !tbaa !11
  br label %400

398:                                              ; preds = %387
  %399 = load double, ptr %46, align 8, !tbaa !11
  br label %400

400:                                              ; preds = %398, %396
  %401 = phi double [ %397, %396 ], [ %399, %398 ]
  store double %401, ptr %42, align 8, !tbaa !11
  br label %402

402:                                              ; preds = %400
  %403 = load i32, ptr %39, align 4, !tbaa !9
  %404 = add nsw i32 %403, 1
  store i32 %404, ptr %39, align 4, !tbaa !9
  br label %147, !llvm.loop !20

405:                                              ; preds = %147
  br label %668

406:                                              ; preds = %141
  %407 = load ptr, ptr %15, align 8, !tbaa !5
  %408 = load i32, ptr %407, align 4, !tbaa !9
  store i32 %408, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %664, %406
  %410 = load i32, ptr %39, align 4, !tbaa !9
  %411 = load i32, ptr %30, align 4, !tbaa !9
  %412 = icmp sle i32 %410, %411
  br i1 %412, label %413, label %667

413:                                              ; preds = %409
  store double 0.000000e+00, ptr %46, align 8, !tbaa !11
  %414 = load ptr, ptr %22, align 8, !tbaa !5
  %415 = load i32, ptr %414, align 4, !tbaa !9
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %417, label %539

417:                                              ; preds = %413
  %418 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %418, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %40, align 4, !tbaa !9
  br label %419

419:                                              ; preds = %473, %417
  %420 = load i32, ptr %40, align 4, !tbaa !9
  %421 = load i32, ptr %31, align 4, !tbaa !9
  %422 = icmp sle i32 %420, %421
  br i1 %422, label %423, label %476

423:                                              ; preds = %419
  %424 = load i32, ptr %39, align 4, !tbaa !9
  %425 = load i32, ptr %40, align 4, !tbaa !9
  %426 = load i32, ptr %26, align 4, !tbaa !9
  %427 = mul nsw i32 %425, %426
  %428 = add nsw i32 %424, %427
  store i32 %428, ptr %32, align 4, !tbaa !9
  %429 = load ptr, ptr %16, align 8, !tbaa !5
  %430 = load i32, ptr %32, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds %struct.doublecomplex, ptr %429, i64 %431
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %432, i32 0, i32 0
  %434 = load double, ptr %433, align 8, !tbaa !13
  store double %434, ptr %35, align 8, !tbaa !11
  %435 = load double, ptr %35, align 8, !tbaa !11
  %436 = fcmp oge double %435, 0.000000e+00
  br i1 %436, label %437, label %439

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

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

442:                                              ; preds = %439, %437
  %443 = phi double [ %438, %437 ], [ %441, %439 ]
  %444 = load ptr, ptr %16, align 8, !tbaa !5
  %445 = load i32, ptr %39, align 4, !tbaa !9
  %446 = load i32, ptr %40, align 4, !tbaa !9
  %447 = load i32, ptr %26, align 4, !tbaa !9
  %448 = mul nsw i32 %446, %447
  %449 = add nsw i32 %445, %448
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %444, i64 %450
  %452 = call { double, double } @Cd(ptr noundef %451)
  %453 = extractvalue { double, double } %452, 0
  %454 = extractvalue { double, double } %452, 1
  store double %454, ptr %36, align 8, !tbaa !11
  %455 = load double, ptr %36, align 8, !tbaa !11
  %456 = fcmp oge double %455, 0.000000e+00
  br i1 %456, label %457, label %459

457:                                              ; preds = %442
  %458 = load double, ptr %36, align 8, !tbaa !11
  br label %462

459:                                              ; preds = %442
  %460 = load double, ptr %36, align 8, !tbaa !11
  %461 = fneg double %460
  br label %462

462:                                              ; preds = %459, %457
  %463 = phi double [ %458, %457 ], [ %461, %459 ]
  %464 = fadd double %443, %463
  %465 = load ptr, ptr %21, align 8, !tbaa !5
  %466 = load i32, ptr %40, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds double, ptr %465, i64 %467
  %469 = load double, ptr %468, align 8, !tbaa !11
  %470 = fdiv double %464, %469
  %471 = load double, ptr %46, align 8, !tbaa !11
  %472 = fadd double %471, %470
  store double %472, ptr %46, align 8, !tbaa !11
  br label %473

473:                                              ; preds = %462
  %474 = load i32, ptr %40, align 4, !tbaa !9
  %475 = add nsw i32 %474, 1
  store i32 %475, ptr %40, align 4, !tbaa !9
  br label %419, !llvm.loop !21

476:                                              ; preds = %419
  %477 = load ptr, ptr %15, align 8, !tbaa !5
  %478 = load i32, ptr %477, align 4, !tbaa !9
  store i32 %478, ptr %31, align 4, !tbaa !9
  %479 = load i32, ptr %39, align 4, !tbaa !9
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %40, align 4, !tbaa !9
  br label %481

481:                                              ; preds = %535, %476
  %482 = load i32, ptr %40, align 4, !tbaa !9
  %483 = load i32, ptr %31, align 4, !tbaa !9
  %484 = icmp sle i32 %482, %483
  br i1 %484, label %485, label %538

485:                                              ; preds = %481
  %486 = load i32, ptr %40, align 4, !tbaa !9
  %487 = load i32, ptr %39, align 4, !tbaa !9
  %488 = load i32, ptr %26, align 4, !tbaa !9
  %489 = mul nsw i32 %487, %488
  %490 = add nsw i32 %486, %489
  store i32 %490, ptr %32, align 4, !tbaa !9
  %491 = load ptr, ptr %16, align 8, !tbaa !5
  %492 = load i32, ptr %32, align 4, !tbaa !9
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds %struct.doublecomplex, ptr %491, i64 %493
  %495 = getelementptr inbounds %struct.doublecomplex, ptr %494, i32 0, i32 0
  %496 = load double, ptr %495, align 8, !tbaa !13
  store double %496, ptr %35, align 8, !tbaa !11
  %497 = load double, ptr %35, align 8, !tbaa !11
  %498 = fcmp oge double %497, 0.000000e+00
  br i1 %498, label %499, label %501

499:                                              ; preds = %485
  %500 = load double, ptr %35, align 8, !tbaa !11
  br label %504

501:                                              ; preds = %485
  %502 = load double, ptr %35, align 8, !tbaa !11
  %503 = fneg double %502
  br label %504

504:                                              ; preds = %501, %499
  %505 = phi double [ %500, %499 ], [ %503, %501 ]
  %506 = load ptr, ptr %16, align 8, !tbaa !5
  %507 = load i32, ptr %40, align 4, !tbaa !9
  %508 = load i32, ptr %39, align 4, !tbaa !9
  %509 = load i32, ptr %26, align 4, !tbaa !9
  %510 = mul nsw i32 %508, %509
  %511 = add nsw i32 %507, %510
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %506, i64 %512
  %514 = call { double, double } @Cd(ptr noundef %513)
  %515 = extractvalue { double, double } %514, 0
  %516 = extractvalue { double, double } %514, 1
  store double %516, ptr %36, align 8, !tbaa !11
  %517 = load double, ptr %36, align 8, !tbaa !11
  %518 = fcmp oge double %517, 0.000000e+00
  br i1 %518, label %519, label %521

519:                                              ; preds = %504
  %520 = load double, ptr %36, align 8, !tbaa !11
  br label %524

521:                                              ; preds = %504
  %522 = load double, ptr %36, align 8, !tbaa !11
  %523 = fneg double %522
  br label %524

524:                                              ; preds = %521, %519
  %525 = phi double [ %520, %519 ], [ %523, %521 ]
  %526 = fadd double %505, %525
  %527 = load ptr, ptr %21, align 8, !tbaa !5
  %528 = load i32, ptr %40, align 4, !tbaa !9
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds double, ptr %527, i64 %529
  %531 = load double, ptr %530, align 8, !tbaa !11
  %532 = fdiv double %526, %531
  %533 = load double, ptr %46, align 8, !tbaa !11
  %534 = fadd double %533, %532
  store double %534, ptr %46, align 8, !tbaa !11
  br label %535

535:                                              ; preds = %524
  %536 = load i32, ptr %40, align 4, !tbaa !9
  %537 = add nsw i32 %536, 1
  store i32 %537, ptr %40, align 4, !tbaa !9
  br label %481, !llvm.loop !22

538:                                              ; preds = %481
  br label %649

539:                                              ; preds = %413
  %540 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %540, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %40, align 4, !tbaa !9
  br label %541

541:                                              ; preds = %589, %539
  %542 = load i32, ptr %40, align 4, !tbaa !9
  %543 = load i32, ptr %31, align 4, !tbaa !9
  %544 = icmp sle i32 %542, %543
  br i1 %544, label %545, label %592

545:                                              ; preds = %541
  %546 = load i32, ptr %39, align 4, !tbaa !9
  %547 = load i32, ptr %40, align 4, !tbaa !9
  %548 = load i32, ptr %26, align 4, !tbaa !9
  %549 = mul nsw i32 %547, %548
  %550 = add nsw i32 %546, %549
  store i32 %550, ptr %32, align 4, !tbaa !9
  %551 = load ptr, ptr %16, align 8, !tbaa !5
  %552 = load i32, ptr %32, align 4, !tbaa !9
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds %struct.doublecomplex, ptr %551, i64 %553
  %555 = getelementptr inbounds %struct.doublecomplex, ptr %554, i32 0, i32 0
  %556 = load double, ptr %555, align 8, !tbaa !13
  store double %556, ptr %35, align 8, !tbaa !11
  %557 = load double, ptr %35, align 8, !tbaa !11
  %558 = fcmp oge double %557, 0.000000e+00
  br i1 %558, label %559, label %561

559:                                              ; preds = %545
  %560 = load double, ptr %35, align 8, !tbaa !11
  br label %564

561:                                              ; preds = %545
  %562 = load double, ptr %35, align 8, !tbaa !11
  %563 = fneg double %562
  br label %564

564:                                              ; preds = %561, %559
  %565 = phi double [ %560, %559 ], [ %563, %561 ]
  %566 = load ptr, ptr %16, align 8, !tbaa !5
  %567 = load i32, ptr %39, align 4, !tbaa !9
  %568 = load i32, ptr %40, align 4, !tbaa !9
  %569 = load i32, ptr %26, align 4, !tbaa !9
  %570 = mul nsw i32 %568, %569
  %571 = add nsw i32 %567, %570
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds %struct.doublecomplex, ptr %566, i64 %572
  %574 = call { double, double } @Cd(ptr noundef %573)
  %575 = extractvalue { double, double } %574, 0
  %576 = extractvalue { double, double } %574, 1
  store double %576, ptr %36, align 8, !tbaa !11
  %577 = load double, ptr %36, align 8, !tbaa !11
  %578 = fcmp oge double %577, 0.000000e+00
  br i1 %578, label %579, label %581

579:                                              ; preds = %564
  %580 = load double, ptr %36, align 8, !tbaa !11
  br label %584

581:                                              ; preds = %564
  %582 = load double, ptr %36, align 8, !tbaa !11
  %583 = fneg double %582
  br label %584

584:                                              ; preds = %581, %579
  %585 = phi double [ %580, %579 ], [ %583, %581 ]
  %586 = fadd double %565, %585
  %587 = load double, ptr %46, align 8, !tbaa !11
  %588 = fadd double %587, %586
  store double %588, ptr %46, align 8, !tbaa !11
  br label %589

589:                                              ; preds = %584
  %590 = load i32, ptr %40, align 4, !tbaa !9
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %40, align 4, !tbaa !9
  br label %541, !llvm.loop !23

592:                                              ; preds = %541
  %593 = load ptr, ptr %15, align 8, !tbaa !5
  %594 = load i32, ptr %593, align 4, !tbaa !9
  store i32 %594, ptr %31, align 4, !tbaa !9
  %595 = load i32, ptr %39, align 4, !tbaa !9
  %596 = add nsw i32 %595, 1
  store i32 %596, ptr %40, align 4, !tbaa !9
  br label %597

597:                                              ; preds = %645, %592
  %598 = load i32, ptr %40, align 4, !tbaa !9
  %599 = load i32, ptr %31, align 4, !tbaa !9
  %600 = icmp sle i32 %598, %599
  br i1 %600, label %601, label %648

601:                                              ; preds = %597
  %602 = load i32, ptr %40, align 4, !tbaa !9
  %603 = load i32, ptr %39, align 4, !tbaa !9
  %604 = load i32, ptr %26, align 4, !tbaa !9
  %605 = mul nsw i32 %603, %604
  %606 = add nsw i32 %602, %605
  store i32 %606, ptr %32, align 4, !tbaa !9
  %607 = load ptr, ptr %16, align 8, !tbaa !5
  %608 = load i32, ptr %32, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds %struct.doublecomplex, ptr %607, i64 %609
  %611 = getelementptr inbounds %struct.doublecomplex, ptr %610, i32 0, i32 0
  %612 = load double, ptr %611, align 8, !tbaa !13
  store double %612, ptr %35, align 8, !tbaa !11
  %613 = load double, ptr %35, align 8, !tbaa !11
  %614 = fcmp oge double %613, 0.000000e+00
  br i1 %614, label %615, label %617

615:                                              ; preds = %601
  %616 = load double, ptr %35, align 8, !tbaa !11
  br label %620

617:                                              ; preds = %601
  %618 = load double, ptr %35, align 8, !tbaa !11
  %619 = fneg double %618
  br label %620

620:                                              ; preds = %617, %615
  %621 = phi double [ %616, %615 ], [ %619, %617 ]
  %622 = load ptr, ptr %16, align 8, !tbaa !5
  %623 = load i32, ptr %40, align 4, !tbaa !9
  %624 = load i32, ptr %39, align 4, !tbaa !9
  %625 = load i32, ptr %26, align 4, !tbaa !9
  %626 = mul nsw i32 %624, %625
  %627 = add nsw i32 %623, %626
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds %struct.doublecomplex, ptr %622, i64 %628
  %630 = call { double, double } @Cd(ptr noundef %629)
  %631 = extractvalue { double, double } %630, 0
  %632 = extractvalue { double, double } %630, 1
  store double %632, ptr %36, align 8, !tbaa !11
  %633 = load double, ptr %36, align 8, !tbaa !11
  %634 = fcmp oge double %633, 0.000000e+00
  br i1 %634, label %635, label %637

635:                                              ; preds = %620
  %636 = load double, ptr %36, align 8, !tbaa !11
  br label %640

637:                                              ; preds = %620
  %638 = load double, ptr %36, align 8, !tbaa !11
  %639 = fneg double %638
  br label %640

640:                                              ; preds = %637, %635
  %641 = phi double [ %636, %635 ], [ %639, %637 ]
  %642 = fadd double %621, %641
  %643 = load double, ptr %46, align 8, !tbaa !11
  %644 = fadd double %643, %642
  store double %644, ptr %46, align 8, !tbaa !11
  br label %645

645:                                              ; preds = %640
  %646 = load i32, ptr %40, align 4, !tbaa !9
  %647 = add nsw i32 %646, 1
  store i32 %647, ptr %40, align 4, !tbaa !9
  br label %597, !llvm.loop !24

648:                                              ; preds = %597
  br label %649

649:                                              ; preds = %648, %538
  %650 = load double, ptr %46, align 8, !tbaa !11
  %651 = load ptr, ptr %25, align 8, !tbaa !5
  %652 = load i32, ptr %39, align 4, !tbaa !9
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds double, ptr %651, i64 %653
  store double %650, ptr %654, align 8, !tbaa !11
  %655 = load double, ptr %42, align 8, !tbaa !11
  %656 = load double, ptr %46, align 8, !tbaa !11
  %657 = fcmp oge double %655, %656
  br i1 %657, label %658, label %660

658:                                              ; preds = %649
  %659 = load double, ptr %42, align 8, !tbaa !11
  br label %662

660:                                              ; preds = %649
  %661 = load double, ptr %46, align 8, !tbaa !11
  br label %662

662:                                              ; preds = %660, %658
  %663 = phi double [ %659, %658 ], [ %661, %660 ]
  store double %663, ptr %42, align 8, !tbaa !11
  br label %664

664:                                              ; preds = %662
  %665 = load i32, ptr %39, align 4, !tbaa !9
  %666 = add nsw i32 %665, 1
  store i32 %666, ptr %39, align 4, !tbaa !9
  br label %409, !llvm.loop !25

667:                                              ; preds = %409
  br label %668

668:                                              ; preds = %667, %405
  %669 = load ptr, ptr %15, align 8, !tbaa !5
  %670 = load i32, ptr %669, align 4, !tbaa !9
  %671 = icmp eq i32 %670, 0
  br i1 %671, label %672, label %674

672:                                              ; preds = %668
  store double 1.000000e+00, ptr %34, align 8, !tbaa !11
  %673 = load double, ptr %34, align 8, !tbaa !11
  store double %673, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %992

674:                                              ; preds = %668
  %675 = load double, ptr %42, align 8, !tbaa !11
  %676 = fcmp oeq double %675, 0.000000e+00
  br i1 %676, label %677, label %679

677:                                              ; preds = %674
  %678 = load double, ptr %34, align 8, !tbaa !11
  store double %678, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %992

679:                                              ; preds = %674
  br label %680

680:                                              ; preds = %679
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %681

681:                                              ; preds = %983, %680
  %682 = load ptr, ptr %15, align 8, !tbaa !5
  %683 = load ptr, ptr %24, align 8, !tbaa !5
  %684 = load ptr, ptr %15, align 8, !tbaa !5
  %685 = load i32, ptr %684, align 4, !tbaa !9
  %686 = add nsw i32 %685, 1
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds %struct.doublecomplex, ptr %683, i64 %687
  %689 = load ptr, ptr %24, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.doublecomplex, ptr %689, i64 1
  %691 = getelementptr inbounds [3 x i32], ptr %41, i64 0, i64 0
  call void @zlacn2_(ptr noundef %682, ptr noundef %688, ptr noundef %690, ptr noundef %45, ptr noundef %38, ptr noundef %691)
  %692 = load i32, ptr %38, align 4, !tbaa !9
  %693 = icmp ne i32 %692, 0
  br i1 %693, label %694, label %984

694:                                              ; preds = %681
  %695 = load i32, ptr %38, align 4, !tbaa !9
  %696 = icmp eq i32 %695, 2
  br i1 %696, label %697, label %840

697:                                              ; preds = %694
  %698 = load ptr, ptr %15, align 8, !tbaa !5
  %699 = load i32, ptr %698, align 4, !tbaa !9
  store i32 %699, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %700

700:                                              ; preds = %748, %697
  %701 = load i32, ptr %39, align 4, !tbaa !9
  %702 = load i32, ptr %30, align 4, !tbaa !9
  %703 = icmp sle i32 %701, %702
  br i1 %703, label %704, label %751

704:                                              ; preds = %700
  %705 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %705, ptr %31, align 4, !tbaa !9
  %706 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %706, ptr %32, align 4, !tbaa !9
  %707 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %707, ptr %33, align 4, !tbaa !9
  %708 = load ptr, ptr %25, align 8, !tbaa !5
  %709 = load i32, ptr %33, 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 = load ptr, ptr %24, align 8, !tbaa !5
  %714 = load i32, ptr %32, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %715
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %716, i32 0, i32 0
  %718 = load double, ptr %717, align 8, !tbaa !13
  %719 = fmul double %712, %718
  %720 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %719, ptr %720, align 8, !tbaa !13
  %721 = load ptr, ptr %25, align 8, !tbaa !5
  %722 = load i32, ptr %33, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds double, ptr %721, i64 %723
  %725 = load double, ptr %724, align 8, !tbaa !11
  %726 = load ptr, ptr %24, align 8, !tbaa !5
  %727 = load i32, ptr %32, align 4, !tbaa !9
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %726, i64 %728
  %730 = getelementptr inbounds %struct.doublecomplex, ptr %729, i32 0, i32 1
  %731 = load double, ptr %730, align 8, !tbaa !26
  %732 = fmul double %725, %731
  %733 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %732, ptr %733, align 8, !tbaa !26
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %735 = load double, ptr %734, align 8, !tbaa !13
  %736 = load ptr, ptr %24, align 8, !tbaa !5
  %737 = load i32, ptr %31, align 4, !tbaa !9
  %738 = sext i32 %737 to i64
  %739 = getelementptr inbounds %struct.doublecomplex, ptr %736, i64 %738
  %740 = getelementptr inbounds %struct.doublecomplex, ptr %739, i32 0, i32 0
  store double %735, ptr %740, align 8, !tbaa !13
  %741 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %742 = load double, ptr %741, align 8, !tbaa !26
  %743 = load ptr, ptr %24, align 8, !tbaa !5
  %744 = load i32, ptr %31, align 4, !tbaa !9
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds %struct.doublecomplex, ptr %743, i64 %745
  %747 = getelementptr inbounds %struct.doublecomplex, ptr %746, i32 0, i32 1
  store double %742, ptr %747, align 8, !tbaa !26
  br label %748

748:                                              ; preds = %704
  %749 = load i32, ptr %39, align 4, !tbaa !9
  %750 = add nsw i32 %749, 1
  store i32 %750, ptr %39, align 4, !tbaa !9
  br label %700, !llvm.loop !27

751:                                              ; preds = %700
  %752 = load i32, ptr %44, align 4, !tbaa !9
  %753 = icmp ne i32 %752, 0
  br i1 %753, label %754, label %767

754:                                              ; preds = %751
  %755 = load ptr, ptr %15, align 8, !tbaa !5
  %756 = load ptr, ptr %18, align 8, !tbaa !5
  %757 = load i32, ptr %29, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %756, i64 %758
  %760 = load ptr, ptr %19, align 8, !tbaa !5
  %761 = load ptr, ptr %20, align 8, !tbaa !5
  %762 = getelementptr inbounds i32, ptr %761, i64 1
  %763 = load ptr, ptr %24, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 1
  %765 = load ptr, ptr %15, align 8, !tbaa !5
  %766 = load ptr, ptr %23, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef @.str, ptr noundef %755, ptr noundef @c__1, ptr noundef %759, ptr noundef %760, ptr noundef %762, ptr noundef %764, ptr noundef %765, ptr noundef %766)
  br label %780

767:                                              ; preds = %751
  %768 = load ptr, ptr %15, align 8, !tbaa !5
  %769 = load ptr, ptr %18, align 8, !tbaa !5
  %770 = load i32, ptr %29, align 4, !tbaa !9
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %769, i64 %771
  %773 = load ptr, ptr %19, align 8, !tbaa !5
  %774 = load ptr, ptr %20, align 8, !tbaa !5
  %775 = getelementptr inbounds i32, ptr %774, i64 1
  %776 = load ptr, ptr %24, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.doublecomplex, ptr %776, i64 1
  %778 = load ptr, ptr %15, align 8, !tbaa !5
  %779 = load ptr, ptr %23, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef @.str.1, ptr noundef %768, ptr noundef @c__1, ptr noundef %772, ptr noundef %773, ptr noundef %775, ptr noundef %777, ptr noundef %778, ptr noundef %779)
  br label %780

780:                                              ; preds = %767, %754
  %781 = load ptr, ptr %22, align 8, !tbaa !5
  %782 = load i32, ptr %781, align 4, !tbaa !9
  %783 = icmp ne i32 %782, 0
  br i1 %783, label %784, label %839

784:                                              ; preds = %780
  %785 = load ptr, ptr %15, align 8, !tbaa !5
  %786 = load i32, ptr %785, align 4, !tbaa !9
  store i32 %786, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %787

787:                                              ; preds = %835, %784
  %788 = load i32, ptr %39, align 4, !tbaa !9
  %789 = load i32, ptr %30, align 4, !tbaa !9
  %790 = icmp sle i32 %788, %789
  br i1 %790, label %791, label %838

791:                                              ; preds = %787
  %792 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %792, ptr %31, align 4, !tbaa !9
  %793 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %793, ptr %32, align 4, !tbaa !9
  %794 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %794, ptr %33, align 4, !tbaa !9
  %795 = load ptr, ptr %21, align 8, !tbaa !5
  %796 = load i32, ptr %33, align 4, !tbaa !9
  %797 = sext i32 %796 to i64
  %798 = getelementptr inbounds double, ptr %795, i64 %797
  %799 = load double, ptr %798, align 8, !tbaa !11
  %800 = load ptr, ptr %24, align 8, !tbaa !5
  %801 = load i32, ptr %32, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds %struct.doublecomplex, ptr %800, i64 %802
  %804 = getelementptr inbounds %struct.doublecomplex, ptr %803, i32 0, i32 0
  %805 = load double, ptr %804, align 8, !tbaa !13
  %806 = fmul double %799, %805
  %807 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %806, ptr %807, align 8, !tbaa !13
  %808 = load ptr, ptr %21, align 8, !tbaa !5
  %809 = load i32, ptr %33, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds double, ptr %808, i64 %810
  %812 = load double, ptr %811, align 8, !tbaa !11
  %813 = load ptr, ptr %24, align 8, !tbaa !5
  %814 = load i32, ptr %32, align 4, !tbaa !9
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds %struct.doublecomplex, ptr %813, i64 %815
  %817 = getelementptr inbounds %struct.doublecomplex, ptr %816, i32 0, i32 1
  %818 = load double, ptr %817, align 8, !tbaa !26
  %819 = fmul double %812, %818
  %820 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %819, ptr %820, align 8, !tbaa !26
  %821 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %822 = load double, ptr %821, align 8, !tbaa !13
  %823 = load ptr, ptr %24, align 8, !tbaa !5
  %824 = load i32, ptr %31, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds %struct.doublecomplex, ptr %823, i64 %825
  %827 = getelementptr inbounds %struct.doublecomplex, ptr %826, i32 0, i32 0
  store double %822, ptr %827, align 8, !tbaa !13
  %828 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %829 = load double, ptr %828, align 8, !tbaa !26
  %830 = load ptr, ptr %24, align 8, !tbaa !5
  %831 = load i32, ptr %31, align 4, !tbaa !9
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds %struct.doublecomplex, ptr %830, i64 %832
  %834 = getelementptr inbounds %struct.doublecomplex, ptr %833, i32 0, i32 1
  store double %829, ptr %834, align 8, !tbaa !26
  br label %835

835:                                              ; preds = %791
  %836 = load i32, ptr %39, align 4, !tbaa !9
  %837 = add nsw i32 %836, 1
  store i32 %837, ptr %39, align 4, !tbaa !9
  br label %787, !llvm.loop !28

838:                                              ; preds = %787
  br label %839

839:                                              ; preds = %838, %780
  br label %983

840:                                              ; preds = %694
  %841 = load ptr, ptr %22, align 8, !tbaa !5
  %842 = load i32, ptr %841, align 4, !tbaa !9
  %843 = icmp ne i32 %842, 0
  br i1 %843, label %844, label %899

844:                                              ; preds = %840
  %845 = load ptr, ptr %15, align 8, !tbaa !5
  %846 = load i32, ptr %845, align 4, !tbaa !9
  store i32 %846, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %847

847:                                              ; preds = %895, %844
  %848 = load i32, ptr %39, align 4, !tbaa !9
  %849 = load i32, ptr %30, align 4, !tbaa !9
  %850 = icmp sle i32 %848, %849
  br i1 %850, label %851, label %898

851:                                              ; preds = %847
  %852 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %852, ptr %31, align 4, !tbaa !9
  %853 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %853, ptr %32, align 4, !tbaa !9
  %854 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %854, ptr %33, align 4, !tbaa !9
  %855 = load ptr, ptr %21, align 8, !tbaa !5
  %856 = load i32, ptr %33, align 4, !tbaa !9
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds double, ptr %855, i64 %857
  %859 = load double, ptr %858, align 8, !tbaa !11
  %860 = load ptr, ptr %24, align 8, !tbaa !5
  %861 = load i32, ptr %32, align 4, !tbaa !9
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds %struct.doublecomplex, ptr %860, i64 %862
  %864 = getelementptr inbounds %struct.doublecomplex, ptr %863, i32 0, i32 0
  %865 = load double, ptr %864, align 8, !tbaa !13
  %866 = fmul double %859, %865
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %866, ptr %867, align 8, !tbaa !13
  %868 = load ptr, ptr %21, align 8, !tbaa !5
  %869 = load i32, ptr %33, align 4, !tbaa !9
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds double, ptr %868, i64 %870
  %872 = load double, ptr %871, align 8, !tbaa !11
  %873 = load ptr, ptr %24, align 8, !tbaa !5
  %874 = load i32, ptr %32, align 4, !tbaa !9
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds %struct.doublecomplex, ptr %873, i64 %875
  %877 = getelementptr inbounds %struct.doublecomplex, ptr %876, i32 0, i32 1
  %878 = load double, ptr %877, align 8, !tbaa !26
  %879 = fmul double %872, %878
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %879, ptr %880, align 8, !tbaa !26
  %881 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %882 = load double, ptr %881, align 8, !tbaa !13
  %883 = load ptr, ptr %24, align 8, !tbaa !5
  %884 = load i32, ptr %31, align 4, !tbaa !9
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %883, i64 %885
  %887 = getelementptr inbounds %struct.doublecomplex, ptr %886, i32 0, i32 0
  store double %882, ptr %887, align 8, !tbaa !13
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %889 = load double, ptr %888, align 8, !tbaa !26
  %890 = load ptr, ptr %24, align 8, !tbaa !5
  %891 = load i32, ptr %31, align 4, !tbaa !9
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds %struct.doublecomplex, ptr %890, i64 %892
  %894 = getelementptr inbounds %struct.doublecomplex, ptr %893, i32 0, i32 1
  store double %889, ptr %894, align 8, !tbaa !26
  br label %895

895:                                              ; preds = %851
  %896 = load i32, ptr %39, align 4, !tbaa !9
  %897 = add nsw i32 %896, 1
  store i32 %897, ptr %39, align 4, !tbaa !9
  br label %847, !llvm.loop !29

898:                                              ; preds = %847
  br label %899

899:                                              ; preds = %898, %840
  %900 = load i32, ptr %44, align 4, !tbaa !9
  %901 = icmp ne i32 %900, 0
  br i1 %901, label %902, label %915

902:                                              ; preds = %899
  %903 = load ptr, ptr %15, align 8, !tbaa !5
  %904 = load ptr, ptr %18, align 8, !tbaa !5
  %905 = load i32, ptr %29, align 4, !tbaa !9
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds %struct.doublecomplex, ptr %904, i64 %906
  %908 = load ptr, ptr %19, align 8, !tbaa !5
  %909 = load ptr, ptr %20, align 8, !tbaa !5
  %910 = getelementptr inbounds i32, ptr %909, i64 1
  %911 = load ptr, ptr %24, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.doublecomplex, ptr %911, i64 1
  %913 = load ptr, ptr %15, align 8, !tbaa !5
  %914 = load ptr, ptr %23, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef @.str, ptr noundef %903, ptr noundef @c__1, ptr noundef %907, ptr noundef %908, ptr noundef %910, ptr noundef %912, ptr noundef %913, ptr noundef %914)
  br label %928

915:                                              ; preds = %899
  %916 = load ptr, ptr %15, align 8, !tbaa !5
  %917 = load ptr, ptr %18, align 8, !tbaa !5
  %918 = load i32, ptr %29, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds %struct.doublecomplex, ptr %917, i64 %919
  %921 = load ptr, ptr %19, align 8, !tbaa !5
  %922 = load ptr, ptr %20, align 8, !tbaa !5
  %923 = getelementptr inbounds i32, ptr %922, i64 1
  %924 = load ptr, ptr %24, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.doublecomplex, ptr %924, i64 1
  %926 = load ptr, ptr %15, align 8, !tbaa !5
  %927 = load ptr, ptr %23, align 8, !tbaa !5
  call void @zhetrs_(ptr noundef @.str.1, ptr noundef %916, ptr noundef @c__1, ptr noundef %920, ptr noundef %921, ptr noundef %923, ptr noundef %925, ptr noundef %926, ptr noundef %927)
  br label %928

928:                                              ; preds = %915, %902
  %929 = load ptr, ptr %15, align 8, !tbaa !5
  %930 = load i32, ptr %929, align 4, !tbaa !9
  store i32 %930, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %931

931:                                              ; preds = %979, %928
  %932 = load i32, ptr %39, align 4, !tbaa !9
  %933 = load i32, ptr %30, align 4, !tbaa !9
  %934 = icmp sle i32 %932, %933
  br i1 %934, label %935, label %982

935:                                              ; preds = %931
  %936 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %936, ptr %31, align 4, !tbaa !9
  %937 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %937, ptr %32, align 4, !tbaa !9
  %938 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %938, ptr %33, align 4, !tbaa !9
  %939 = load ptr, ptr %25, align 8, !tbaa !5
  %940 = load i32, ptr %33, align 4, !tbaa !9
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds double, ptr %939, i64 %941
  %943 = load double, ptr %942, align 8, !tbaa !11
  %944 = load ptr, ptr %24, align 8, !tbaa !5
  %945 = load i32, ptr %32, align 4, !tbaa !9
  %946 = sext i32 %945 to i64
  %947 = getelementptr inbounds %struct.doublecomplex, ptr %944, i64 %946
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %947, i32 0, i32 0
  %949 = load double, ptr %948, align 8, !tbaa !13
  %950 = fmul double %943, %949
  %951 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %950, ptr %951, align 8, !tbaa !13
  %952 = load ptr, ptr %25, align 8, !tbaa !5
  %953 = load i32, ptr %33, align 4, !tbaa !9
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds double, ptr %952, i64 %954
  %956 = load double, ptr %955, align 8, !tbaa !11
  %957 = load ptr, ptr %24, align 8, !tbaa !5
  %958 = load i32, ptr %32, align 4, !tbaa !9
  %959 = sext i32 %958 to i64
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %957, i64 %959
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %960, i32 0, i32 1
  %962 = load double, ptr %961, align 8, !tbaa !26
  %963 = fmul double %956, %962
  %964 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %963, ptr %964, align 8, !tbaa !26
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %966 = load double, ptr %965, align 8, !tbaa !13
  %967 = load ptr, ptr %24, align 8, !tbaa !5
  %968 = load i32, ptr %31, align 4, !tbaa !9
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %967, i64 %969
  %971 = getelementptr inbounds %struct.doublecomplex, ptr %970, i32 0, i32 0
  store double %966, ptr %971, align 8, !tbaa !13
  %972 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %973 = load double, ptr %972, align 8, !tbaa !26
  %974 = load ptr, ptr %24, align 8, !tbaa !5
  %975 = load i32, ptr %31, align 4, !tbaa !9
  %976 = sext i32 %975 to i64
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %974, i64 %976
  %978 = getelementptr inbounds %struct.doublecomplex, ptr %977, i32 0, i32 1
  store double %973, ptr %978, align 8, !tbaa !26
  br label %979

979:                                              ; preds = %935
  %980 = load i32, ptr %39, align 4, !tbaa !9
  %981 = add nsw i32 %980, 1
  store i32 %981, ptr %39, align 4, !tbaa !9
  br label %931, !llvm.loop !30

982:                                              ; preds = %931
  br label %983

983:                                              ; preds = %982, %839
  br label %681

984:                                              ; preds = %681
  %985 = load double, ptr %45, align 8, !tbaa !11
  %986 = fcmp une double %985, 0.000000e+00
  br i1 %986, label %987, label %990

987:                                              ; preds = %984
  %988 = load double, ptr %45, align 8, !tbaa !11
  %989 = fdiv double 1.000000e+00, %988
  store double %989, ptr %34, align 8, !tbaa !11
  br label %990

990:                                              ; preds = %987, %984
  %991 = load double, ptr %34, align 8, !tbaa !11
  store double %991, ptr %13, align 8
  store i32 1, ptr %47, align 4
  br label %992

992:                                              ; preds = %990, %677, %672, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  %993 = load double, ptr %13, align 8
  ret double %993
}

; 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

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

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

declare void @zhetrs_(ptr noundef, ptr noundef, ptr noundef, 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 = { 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 = !{!14, !12, i64 0}
!14 = !{!"", !12, i64 0, !12, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = !{!14, !12, i64 8}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}


; 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 [14 x i8], align 1
@c__1 = external hidden global i32, align 4

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

24:                                               ; preds = %12
  %25 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not374 = icmp eq i32 %25, 0
  br i1 %.not374, label %.thread.sink.split, label %26

26:                                               ; preds = %24, %12
  %27 = load i32, ptr %1, align 4, !tbaa !5
  %28 = icmp slt i32 %27, 0
  br i1 %28, label %.thread.sink.split, label %29

29:                                               ; preds = %26
  %30 = load i32, ptr %3, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %27, i32 1)
  %31 = icmp slt i32 %30, %spec.select
  br i1 %31, label %.thread.sink.split, label %32

32:                                               ; preds = %29
  %33 = load i32, ptr %5, align 4, !tbaa !5
  %34 = icmp slt i32 %33, %spec.select
  br i1 %34, label %.thread.sink.split, label %35

35:                                               ; preds = %32
  %.pr = load i32, ptr %9, align 4, !tbaa !5
  %.not375 = icmp eq i32 %.pr, 0
  br i1 %.not375, label %39, label %.thread

.thread.sink.split:                               ; preds = %32, %29, %26, %24
  %.sink = phi i32 [ -1, %24 ], [ -2, %26 ], [ -4, %29 ], [ -6, %32 ]
  store i32 %.sink, ptr %9, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %35
  %36 = phi i32 [ %.pr, %35 ], [ %.sink, %.thread.sink.split ]
  %37 = sub nsw i32 0, %36
  store i32 %37, ptr %13, align 4, !tbaa !5
  %38 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %13, i32 noundef 13) #5
  br label %328

39:                                               ; preds = %35
  %40 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not376 = icmp eq i32 %40, 0
  %41 = load i32, ptr %1, align 4, !tbaa !5
  %.not378442 = icmp slt i32 %41, 1
  br i1 %.not376, label %108, label %42

42:                                               ; preds = %39
  br i1 %.not378442, label %.loopexit404, label %.lr.ph426.preheader

.lr.ph426.preheader:                              ; preds = %42
  %43 = sext i32 %17 to i64
  %44 = add nuw i32 %41, 2
  %wide.trip.count501 = zext i32 %44 to i64
  br label %.lr.ph426

.lr.ph426:                                        ; preds = %.lr.ph426.preheader, %.loopexit405
  %indvars.iv496 = phi i64 [ 2, %.lr.ph426.preheader ], [ %indvars.iv.next497, %.loopexit405 ]
  %indvars.iv479 = phi i64 [ 1, %.lr.ph426.preheader ], [ %indvars.iv.next480, %.loopexit405 ]
  %.0351425 = phi double [ 0.000000e+00, %.lr.ph426.preheader ], [ %107, %.loopexit405 ]
  %45 = load i32, ptr %8, align 4, !tbaa !5
  %.not392 = icmp eq i32 %45, 0
  %46 = mul nsw i64 %indvars.iv479, %43
  %invariant.gep570 = getelementptr %struct.doublecomplex, ptr %19, i64 %46
  br i1 %.not392, label %.preheader406, label %.preheader408

.preheader408:                                    ; preds = %.lr.ph426, %.preheader408
  %indvars.iv = phi i64 [ %indvars.iv.next, %.preheader408 ], [ 1, %.lr.ph426 ]
  %.0411 = phi double [ %60, %.preheader408 ], [ 0.000000e+00, %.lr.ph426 ]
  %gep567 = getelementptr %struct.doublecomplex, ptr %invariant.gep570, i64 %indvars.iv
  %47 = load double, ptr %gep567, align 8, !tbaa !9
  %48 = tail call { double, double } @Cd(ptr noundef nonnull %gep567)
  %49 = extractvalue { double, double } %48, 1
  %50 = insertelement <2 x double> poison, double %47, i64 0
  %51 = insertelement <2 x double> %50, double %49, i64 1
  %52 = fcmp oge <2 x double> %51, zeroinitializer
  %53 = fneg <2 x double> %51
  %54 = select <2 x i1> %52, <2 x double> %51, <2 x double> %53
  %shift = shufflevector <2 x double> %54, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %55 = fadd <2 x double> %54, %shift
  %56 = extractelement <2 x double> %55, i64 0
  %57 = getelementptr inbounds double, ptr %20, i64 %indvars.iv
  %58 = load double, ptr %57, align 8, !tbaa !12
  %59 = fdiv double %56, %58
  %60 = fadd double %.0411, %59
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %indvars.iv496
  br i1 %exitcond.not, label %61, label %.preheader408, !llvm.loop !13

61:                                               ; preds = %.preheader408
  %62 = load i32, ptr %1, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %.not396.not412 = icmp slt i64 %indvars.iv479, %63
  br i1 %.not396.not412, label %.lr.ph.preheader, label %.loopexit405

.lr.ph.preheader:                                 ; preds = %61
  %wide.trip.count484 = zext i32 %62 to i64
  %invariant.gep568 = getelementptr %struct.doublecomplex, ptr %19, i64 %indvars.iv479
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv481 = phi i64 [ %indvars.iv479, %.lr.ph.preheader ], [ %indvars.iv.next482, %.lr.ph ]
  %.1414 = phi double [ %60, %.lr.ph.preheader ], [ %78, %.lr.ph ]
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %64 = mul nsw i64 %indvars.iv.next482, %43
  %gep569 = getelementptr %struct.doublecomplex, ptr %invariant.gep568, i64 %64
  %65 = load double, ptr %gep569, align 8, !tbaa !9
  %66 = tail call { double, double } @Cd(ptr noundef nonnull %gep569)
  %67 = extractvalue { double, double } %66, 1
  %68 = insertelement <2 x double> poison, double %65, i64 0
  %69 = insertelement <2 x double> %68, double %67, i64 1
  %70 = fcmp oge <2 x double> %69, zeroinitializer
  %71 = fneg <2 x double> %69
  %72 = select <2 x i1> %70, <2 x double> %69, <2 x double> %71
  %shift679 = shufflevector <2 x double> %72, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %73 = fadd <2 x double> %72, %shift679
  %74 = extractelement <2 x double> %73, i64 0
  %75 = getelementptr double, ptr %7, i64 %indvars.iv481
  %76 = load double, ptr %75, align 8, !tbaa !12
  %77 = fdiv double %74, %76
  %78 = fadd double %.1414, %77
  %exitcond485.not = icmp eq i64 %indvars.iv.next482, %wide.trip.count484
  br i1 %exitcond485.not, label %.loopexit405, label %.lr.ph, !llvm.loop !15

.preheader406:                                    ; preds = %.lr.ph426, %.preheader406
  %indvars.iv486 = phi i64 [ %indvars.iv.next487, %.preheader406 ], [ 1, %.lr.ph426 ]
  %.2416 = phi double [ %89, %.preheader406 ], [ 0.000000e+00, %.lr.ph426 ]
  %gep571 = getelementptr %struct.doublecomplex, ptr %invariant.gep570, i64 %indvars.iv486
  %79 = load double, ptr %gep571, align 8, !tbaa !9
  %80 = tail call { double, double } @Cd(ptr noundef nonnull %gep571)
  %81 = extractvalue { double, double } %80, 1
  %82 = insertelement <2 x double> poison, double %79, i64 0
  %83 = insertelement <2 x double> %82, double %81, i64 1
  %84 = fcmp oge <2 x double> %83, zeroinitializer
  %85 = fneg <2 x double> %83
  %86 = select <2 x i1> %84, <2 x double> %83, <2 x double> %85
  %shift680 = shufflevector <2 x double> %86, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %87 = fadd <2 x double> %86, %shift680
  %88 = extractelement <2 x double> %87, i64 0
  %89 = fadd double %.2416, %88
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %exitcond490.not = icmp eq i64 %indvars.iv.next487, %indvars.iv496
  br i1 %exitcond490.not, label %90, label %.preheader406, !llvm.loop !16

90:                                               ; preds = %.preheader406
  %91 = load i32, ptr %1, align 4, !tbaa !5
  %92 = sext i32 %91 to i64
  %.not394.not417 = icmp slt i64 %indvars.iv479, %92
  br i1 %.not394.not417, label %.lr.ph420.preheader, label %.loopexit405

.lr.ph420.preheader:                              ; preds = %90
  %wide.trip.count494 = zext i32 %91 to i64
  %invariant.gep572 = getelementptr %struct.doublecomplex, ptr %19, i64 %indvars.iv479
  br label %.lr.ph420

.lr.ph420:                                        ; preds = %.lr.ph420.preheader, %.lr.ph420
  %indvars.iv491 = phi i64 [ %indvars.iv479, %.lr.ph420.preheader ], [ %indvars.iv.next492, %.lr.ph420 ]
  %.3419 = phi double [ %89, %.lr.ph420.preheader ], [ %104, %.lr.ph420 ]
  %indvars.iv.next492 = add nuw nsw i64 %indvars.iv491, 1
  %93 = mul nsw i64 %indvars.iv.next492, %43
  %gep573 = getelementptr %struct.doublecomplex, ptr %invariant.gep572, i64 %93
  %94 = load double, ptr %gep573, align 8, !tbaa !9
  %95 = tail call { double, double } @Cd(ptr noundef nonnull %gep573)
  %96 = extractvalue { double, double } %95, 1
  %97 = insertelement <2 x double> poison, double %94, i64 0
  %98 = insertelement <2 x double> %97, double %96, i64 1
  %99 = fcmp oge <2 x double> %98, zeroinitializer
  %100 = fneg <2 x double> %98
  %101 = select <2 x i1> %99, <2 x double> %98, <2 x double> %100
  %shift681 = shufflevector <2 x double> %101, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %102 = fadd <2 x double> %101, %shift681
  %103 = extractelement <2 x double> %102, i64 0
  %104 = fadd double %.3419, %103
  %exitcond495.not = icmp eq i64 %indvars.iv.next492, %wide.trip.count494
  br i1 %exitcond495.not, label %.loopexit405, label %.lr.ph420, !llvm.loop !17

.loopexit405:                                     ; preds = %.lr.ph, %.lr.ph420, %61, %90
  %.4 = phi double [ %89, %90 ], [ %60, %61 ], [ %104, %.lr.ph420 ], [ %78, %.lr.ph ]
  %105 = getelementptr inbounds double, ptr %22, i64 %indvars.iv479
  store double %.4, ptr %105, align 8, !tbaa !12
  %106 = fcmp oge double %.0351425, %.4
  %107 = select i1 %106, double %.0351425, double %.4
  %indvars.iv.next480 = add nuw nsw i64 %indvars.iv479, 1
  %indvars.iv.next497 = add nuw nsw i64 %indvars.iv496, 1
  %exitcond502.not = icmp eq i64 %indvars.iv.next497, %wide.trip.count501
  br i1 %exitcond502.not, label %.loopexit404thread-pre-split, label %.lr.ph426, !llvm.loop !18

108:                                              ; preds = %39
  br i1 %.not378442, label %.loopexit404, label %.lr.ph446.preheader

.lr.ph446.preheader:                              ; preds = %108
  %109 = sext i32 %17 to i64
  %110 = add nuw i32 %41, 2
  %wide.trip.count531 = zext i32 %110 to i64
  br label %.lr.ph446

.lr.ph446:                                        ; preds = %.lr.ph446.preheader, %.loopexit401
  %indvars.iv526 = phi i64 [ 2, %.lr.ph446.preheader ], [ %indvars.iv.next527, %.loopexit401 ]
  %indvars.iv509 = phi i64 [ 1, %.lr.ph446.preheader ], [ %indvars.iv.next510, %.loopexit401 ]
  %.1352445 = phi double [ 0.000000e+00, %.lr.ph446.preheader ], [ %176, %.loopexit401 ]
  %111 = load i32, ptr %8, align 4, !tbaa !5
  %.not379 = icmp eq i32 %111, 0
  %invariant.gep578 = getelementptr %struct.doublecomplex, ptr %19, i64 %indvars.iv509
  br i1 %.not379, label %.preheader, label %.preheader403

.preheader403:                                    ; preds = %.lr.ph446, %.preheader403
  %indvars.iv503 = phi i64 [ %indvars.iv.next504, %.preheader403 ], [ 1, %.lr.ph446 ]
  %.5429 = phi double [ %126, %.preheader403 ], [ 0.000000e+00, %.lr.ph446 ]
  %112 = mul nsw i64 %indvars.iv503, %109
  %gep575 = getelementptr %struct.doublecomplex, ptr %invariant.gep578, i64 %112
  %113 = load double, ptr %gep575, align 8, !tbaa !9
  %114 = tail call { double, double } @Cd(ptr noundef nonnull %gep575)
  %115 = extractvalue { double, double } %114, 1
  %116 = insertelement <2 x double> poison, double %113, i64 0
  %117 = insertelement <2 x double> %116, double %115, i64 1
  %118 = fcmp oge <2 x double> %117, zeroinitializer
  %119 = fneg <2 x double> %117
  %120 = select <2 x i1> %118, <2 x double> %117, <2 x double> %119
  %shift682 = shufflevector <2 x double> %120, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %121 = fadd <2 x double> %120, %shift682
  %122 = extractelement <2 x double> %121, i64 0
  %123 = getelementptr inbounds double, ptr %20, i64 %indvars.iv503
  %124 = load double, ptr %123, align 8, !tbaa !12
  %125 = fdiv double %122, %124
  %126 = fadd double %.5429, %125
  %indvars.iv.next504 = add nuw nsw i64 %indvars.iv503, 1
  %exitcond508.not = icmp eq i64 %indvars.iv.next504, %indvars.iv526
  br i1 %exitcond508.not, label %127, label %.preheader403, !llvm.loop !19

127:                                              ; preds = %.preheader403
  %128 = load i32, ptr %1, align 4, !tbaa !5
  %129 = sext i32 %128 to i64
  %.not383.not430 = icmp slt i64 %indvars.iv509, %129
  br i1 %.not383.not430, label %.lr.ph433, label %.loopexit401

.lr.ph433:                                        ; preds = %127
  %130 = mul nsw i64 %indvars.iv509, %109
  %wide.trip.count514 = zext i32 %128 to i64
  %invariant.gep576 = getelementptr %struct.doublecomplex, ptr %19, i64 %130
  br label %131

131:                                              ; preds = %.lr.ph433, %131
  %indvars.iv511 = phi i64 [ %indvars.iv509, %.lr.ph433 ], [ %indvars.iv.next512, %131 ]
  %.6432 = phi double [ %126, %.lr.ph433 ], [ %145, %131 ]
  %indvars.iv.next512 = add nuw nsw i64 %indvars.iv511, 1
  %gep577 = getelementptr %struct.doublecomplex, ptr %invariant.gep576, i64 %indvars.iv.next512
  %132 = load double, ptr %gep577, align 8, !tbaa !9
  %133 = tail call { double, double } @Cd(ptr noundef nonnull %gep577)
  %134 = extractvalue { double, double } %133, 1
  %135 = insertelement <2 x double> poison, double %132, i64 0
  %136 = insertelement <2 x double> %135, double %134, i64 1
  %137 = fcmp oge <2 x double> %136, zeroinitializer
  %138 = fneg <2 x double> %136
  %139 = select <2 x i1> %137, <2 x double> %136, <2 x double> %138
  %shift683 = shufflevector <2 x double> %139, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %140 = fadd <2 x double> %139, %shift683
  %141 = extractelement <2 x double> %140, i64 0
  %142 = getelementptr double, ptr %7, i64 %indvars.iv511
  %143 = load double, ptr %142, align 8, !tbaa !12
  %144 = fdiv double %141, %143
  %145 = fadd double %.6432, %144
  %exitcond515.not = icmp eq i64 %indvars.iv.next512, %wide.trip.count514
  br i1 %exitcond515.not, label %.loopexit401, label %131, !llvm.loop !20

.preheader:                                       ; preds = %.lr.ph446, %.preheader
  %indvars.iv516 = phi i64 [ %indvars.iv.next517, %.preheader ], [ 1, %.lr.ph446 ]
  %.7436 = phi double [ %157, %.preheader ], [ 0.000000e+00, %.lr.ph446 ]
  %146 = mul nsw i64 %indvars.iv516, %109
  %gep579 = getelementptr %struct.doublecomplex, ptr %invariant.gep578, i64 %146
  %147 = load double, ptr %gep579, align 8, !tbaa !9
  %148 = tail call { double, double } @Cd(ptr noundef nonnull %gep579)
  %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
  %shift684 = shufflevector <2 x double> %154, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %155 = fadd <2 x double> %154, %shift684
  %156 = extractelement <2 x double> %155, i64 0
  %157 = fadd double %.7436, %156
  %indvars.iv.next517 = add nuw nsw i64 %indvars.iv516, 1
  %exitcond520.not = icmp eq i64 %indvars.iv.next517, %indvars.iv526
  br i1 %exitcond520.not, label %158, label %.preheader, !llvm.loop !21

158:                                              ; preds = %.preheader
  %159 = load i32, ptr %1, align 4, !tbaa !5
  %160 = sext i32 %159 to i64
  %.not381.not437 = icmp slt i64 %indvars.iv509, %160
  br i1 %.not381.not437, label %.lr.ph440, label %.loopexit401

.lr.ph440:                                        ; preds = %158
  %161 = mul nsw i64 %indvars.iv509, %109
  %wide.trip.count524 = zext i32 %159 to i64
  %invariant.gep580 = getelementptr %struct.doublecomplex, ptr %19, i64 %161
  br label %162

162:                                              ; preds = %.lr.ph440, %162
  %indvars.iv521 = phi i64 [ %indvars.iv509, %.lr.ph440 ], [ %indvars.iv.next522, %162 ]
  %.8439 = phi double [ %157, %.lr.ph440 ], [ %173, %162 ]
  %indvars.iv.next522 = add nuw nsw i64 %indvars.iv521, 1
  %gep581 = getelementptr %struct.doublecomplex, ptr %invariant.gep580, i64 %indvars.iv.next522
  %163 = load double, ptr %gep581, align 8, !tbaa !9
  %164 = tail call { double, double } @Cd(ptr noundef nonnull %gep581)
  %165 = extractvalue { double, double } %164, 1
  %166 = insertelement <2 x double> poison, double %163, i64 0
  %167 = insertelement <2 x double> %166, double %165, i64 1
  %168 = fcmp oge <2 x double> %167, zeroinitializer
  %169 = fneg <2 x double> %167
  %170 = select <2 x i1> %168, <2 x double> %167, <2 x double> %169
  %shift685 = shufflevector <2 x double> %170, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %171 = fadd <2 x double> %170, %shift685
  %172 = extractelement <2 x double> %171, i64 0
  %173 = fadd double %.8439, %172
  %exitcond525.not = icmp eq i64 %indvars.iv.next522, %wide.trip.count524
  br i1 %exitcond525.not, label %.loopexit401, label %162, !llvm.loop !22

.loopexit401:                                     ; preds = %131, %162, %127, %158
  %.9 = phi double [ %157, %158 ], [ %126, %127 ], [ %173, %162 ], [ %145, %131 ]
  %174 = getelementptr inbounds double, ptr %22, i64 %indvars.iv509
  store double %.9, ptr %174, align 8, !tbaa !12
  %175 = fcmp oge double %.1352445, %.9
  %176 = select i1 %175, double %.1352445, double %.9
  %indvars.iv.next510 = add nuw nsw i64 %indvars.iv509, 1
  %indvars.iv.next527 = add nuw nsw i64 %indvars.iv526, 1
  %exitcond532.not = icmp eq i64 %indvars.iv.next527, %wide.trip.count531
  br i1 %exitcond532.not, label %.loopexit404thread-pre-split, label %.lr.ph446, !llvm.loop !23

.loopexit404thread-pre-split:                     ; preds = %.loopexit405, %.loopexit401
  %.2353.ph = phi double [ %176, %.loopexit401 ], [ %107, %.loopexit405 ]
  %.pr553 = load i32, ptr %1, align 4, !tbaa !5
  %177 = fcmp oeq double %.2353.ph, 0.000000e+00
  br label %.loopexit404

.loopexit404:                                     ; preds = %.loopexit404thread-pre-split, %42, %108
  %178 = phi i32 [ %.pr553, %.loopexit404thread-pre-split ], [ %41, %42 ], [ %41, %108 ]
  %.2353 = phi i1 [ %177, %.loopexit404thread-pre-split ], [ true, %42 ], [ true, %108 ]
  %179 = icmp eq i32 %178, 0
  %brmerge = select i1 %179, i1 true, i1 %.2353
  %.mux = select i1 %179, double 1.000000e+00, double 0.000000e+00
  br i1 %brmerge, label %328, label %180

180:                                              ; preds = %.loopexit404
  store double 0.000000e+00, ptr %16, align 8, !tbaa !12
  store i32 0, ptr %14, align 4, !tbaa !5
  %scevgep = getelementptr i8, ptr %10, i64 -16
  %scevgep598 = getelementptr i8, ptr %11, i64 -8
  %scevgep602 = getelementptr i8, ptr %10, i64 -16
  %scevgep604 = getelementptr i8, ptr %7, i64 -8
  %scevgep628 = getelementptr i8, ptr %10, i64 -16
  %scevgep630 = getelementptr i8, ptr %7, i64 -8
  %scevgep654 = getelementptr i8, ptr %10, i64 -16
  %scevgep656 = getelementptr i8, ptr %11, i64 -8
  %.str.1..str = select i1 %.not376, ptr @.str.1, ptr @.str
  %.str.1..str583 = select i1 %.not376, ptr @.str.1, ptr @.str
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %180
  %181 = phi i32 [ %178, %180 ], [ %.be, %.loopexit.backedge ]
  %182 = sext i32 %181 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %10, i64 %182
  call void @zlacn2_(ptr noundef nonnull %1, ptr noundef %gep, ptr noundef %10, ptr noundef nonnull %16, ptr noundef nonnull %14, ptr noundef nonnull %15) #5
  %183 = load i32, ptr %14, align 4, !tbaa !5
  switch i32 %183, label %253 [
    i32 0, label %324
    i32 2, label %184
  ]

184:                                              ; preds = %.loopexit
  %185 = load i32, ptr %1, align 4, !tbaa !5
  %.not389448 = icmp slt i32 %185, 1
  br i1 %.not389448, label %._crit_edge, label %.lr.ph450.preheader

.lr.ph450.preheader:                              ; preds = %184
  %186 = add nuw i32 %185, 1
  %wide.trip.count = zext i32 %186 to i64
  %187 = zext nneg i32 %185 to i64
  %min.iters.check663 = icmp eq i32 %185, 1
  br i1 %min.iters.check663, label %.lr.ph450.preheader690, label %vector.memcheck653

vector.memcheck653:                               ; preds = %.lr.ph450.preheader
  %188 = shl nuw nsw i64 %wide.trip.count, 4
  %scevgep655 = getelementptr i8, ptr %scevgep654, i64 %188
  %189 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep657 = getelementptr i8, ptr %scevgep656, i64 %189
  %bound0658 = icmp ugt ptr %scevgep657, %10
  %bound1659 = icmp ugt ptr %scevgep655, %11
  %found.conflict660 = and i1 %bound0658, %bound1659
  br i1 %found.conflict660, label %.lr.ph450.preheader690, label %vector.ph664

vector.ph664:                                     ; preds = %vector.memcheck653
  %n.vec666 = and i64 %187, 2147483646
  %ind.end667 = or i64 %187, 1
  br label %vector.body669

vector.body669:                                   ; preds = %vector.body669, %vector.ph664
  %index670 = phi i64 [ 0, %vector.ph664 ], [ %index.next677, %vector.body669 ]
  %190 = getelementptr double, ptr %11, i64 %index670
  %wide.load672 = load <2 x double>, ptr %190, align 8, !tbaa !12, !alias.scope !24
  %191 = getelementptr %struct.doublecomplex, ptr %10, i64 %index670
  %wide.vec673 = load <4 x double>, ptr %191, align 8, !tbaa !12
  %strided.vec674 = shufflevector <4 x double> %wide.vec673, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec675 = shufflevector <4 x double> %wide.vec673, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %192 = fmul <2 x double> %wide.load672, %strided.vec674
  %193 = fmul <2 x double> %wide.load672, %strided.vec675
  %interleaved.vec676 = shufflevector <2 x double> %192, <2 x double> %193, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec676, ptr %191, align 8, !tbaa !12
  %index.next677 = add nuw i64 %index670, 2
  %194 = icmp eq i64 %index.next677, %n.vec666
  br i1 %194, label %middle.block661, label %vector.body669, !llvm.loop !27

middle.block661:                                  ; preds = %vector.body669
  %cmp.n678 = icmp eq i64 %n.vec666, %187
  br i1 %cmp.n678, label %._crit_edge, label %.lr.ph450.preheader690

.lr.ph450.preheader690:                           ; preds = %middle.block661, %vector.memcheck653, %.lr.ph450.preheader
  %indvars.iv533.ph = phi i64 [ 1, %vector.memcheck653 ], [ 1, %.lr.ph450.preheader ], [ %ind.end667, %middle.block661 ]
  %195 = zext nneg i32 %185 to i64
  %196 = and i32 %185, 1
  %lcmp.mod.not = icmp eq i32 %196, 0
  br i1 %lcmp.mod.not, label %.lr.ph450.prol.loopexit, label %.lr.ph450.prol

.lr.ph450.prol:                                   ; preds = %.lr.ph450.preheader690
  %197 = getelementptr inbounds double, ptr %22, i64 %indvars.iv533.ph
  %198 = load double, ptr %197, align 8, !tbaa !12
  %199 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv533.ph
  %200 = load <2 x double>, ptr %199, align 8, !tbaa !12
  %201 = insertelement <2 x double> poison, double %198, i64 0
  %202 = shufflevector <2 x double> %201, <2 x double> poison, <2 x i32> zeroinitializer
  %203 = fmul <2 x double> %202, %200
  store <2 x double> %203, ptr %199, align 8, !tbaa !12
  %indvars.iv.next534.prol = add nuw nsw i64 %indvars.iv533.ph, 1
  br label %.lr.ph450.prol.loopexit

.lr.ph450.prol.loopexit:                          ; preds = %.lr.ph450.prol, %.lr.ph450.preheader690
  %indvars.iv533.unr = phi i64 [ %indvars.iv533.ph, %.lr.ph450.preheader690 ], [ %indvars.iv.next534.prol, %.lr.ph450.prol ]
  %204 = icmp eq i64 %indvars.iv533.ph, %195
  br i1 %204, label %._crit_edge, label %.lr.ph450

.lr.ph450:                                        ; preds = %.lr.ph450.prol.loopexit, %.lr.ph450
  %indvars.iv533 = phi i64 [ %indvars.iv.next534.1, %.lr.ph450 ], [ %indvars.iv533.unr, %.lr.ph450.prol.loopexit ]
  %205 = getelementptr inbounds double, ptr %22, i64 %indvars.iv533
  %206 = load double, ptr %205, align 8, !tbaa !12
  %207 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv533
  %208 = load <2 x double>, ptr %207, align 8, !tbaa !12
  %209 = insertelement <2 x double> poison, double %206, i64 0
  %210 = shufflevector <2 x double> %209, <2 x double> poison, <2 x i32> zeroinitializer
  %211 = fmul <2 x double> %210, %208
  store <2 x double> %211, ptr %207, align 8, !tbaa !12
  %212 = getelementptr double, ptr %11, i64 %indvars.iv533
  %213 = load double, ptr %212, align 8, !tbaa !12
  %214 = getelementptr %struct.doublecomplex, ptr %10, i64 %indvars.iv533
  %215 = load <2 x double>, ptr %214, align 8, !tbaa !12
  %216 = insertelement <2 x double> poison, double %213, i64 0
  %217 = shufflevector <2 x double> %216, <2 x double> poison, <2 x i32> zeroinitializer
  %218 = fmul <2 x double> %217, %215
  store <2 x double> %218, ptr %214, align 8, !tbaa !12
  %indvars.iv.next534.1 = add nuw nsw i64 %indvars.iv533, 2
  %exitcond536.not.1 = icmp eq i64 %indvars.iv.next534.1, %wide.trip.count
  br i1 %exitcond536.not.1, label %._crit_edge, label %.lr.ph450, !llvm.loop !30

._crit_edge:                                      ; preds = %.lr.ph450.prol.loopexit, %.lr.ph450, %middle.block661, %184
  call void @zhetrs_(ptr noundef nonnull %.str.1..str, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %10, ptr noundef nonnull %1, ptr noundef nonnull %9) #5
  %219 = load i32, ptr %8, align 4, !tbaa !5
  %.not390 = icmp eq i32 %219, 0
  %.pre.pre = load i32, ptr %1, align 4, !tbaa !5
  %.not391451 = icmp slt i32 %.pre.pre, 1
  %or.cond = select i1 %.not390, i1 true, i1 %.not391451
  br i1 %or.cond, label %.loopexit.backedge, label %.lr.ph454.preheader

.lr.ph454.preheader:                              ; preds = %._crit_edge
  %220 = add nuw i32 %.pre.pre, 1
  %wide.trip.count540 = zext i32 %220 to i64
  %221 = zext nneg i32 %.pre.pre to i64
  %min.iters.check637 = icmp ult i32 %.pre.pre, 2
  br i1 %min.iters.check637, label %.lr.ph454.preheader688, label %vector.memcheck627

vector.memcheck627:                               ; preds = %.lr.ph454.preheader
  %222 = shl nuw nsw i64 %wide.trip.count540, 4
  %scevgep629 = getelementptr i8, ptr %scevgep628, i64 %222
  %223 = shl nuw nsw i64 %wide.trip.count540, 3
  %scevgep631 = getelementptr i8, ptr %scevgep630, i64 %223
  %bound0632 = icmp ugt ptr %scevgep631, %10
  %bound1633 = icmp ugt ptr %scevgep629, %7
  %found.conflict634 = and i1 %bound0632, %bound1633
  br i1 %found.conflict634, label %.lr.ph454.preheader688, label %vector.ph638

vector.ph638:                                     ; preds = %vector.memcheck627
  %n.vec640 = and i64 %221, 2147483646
  %ind.end641 = or i64 %221, 1
  br label %vector.body643

vector.body643:                                   ; preds = %vector.body643, %vector.ph638
  %index644 = phi i64 [ 0, %vector.ph638 ], [ %index.next651, %vector.body643 ]
  %224 = getelementptr double, ptr %7, i64 %index644
  %wide.load646 = load <2 x double>, ptr %224, align 8, !tbaa !12, !alias.scope !31
  %225 = getelementptr %struct.doublecomplex, ptr %10, i64 %index644
  %wide.vec647 = load <4 x double>, ptr %225, align 8, !tbaa !12
  %strided.vec648 = shufflevector <4 x double> %wide.vec647, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec649 = shufflevector <4 x double> %wide.vec647, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %226 = fmul <2 x double> %wide.load646, %strided.vec648
  %227 = fmul <2 x double> %wide.load646, %strided.vec649
  %interleaved.vec650 = shufflevector <2 x double> %226, <2 x double> %227, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec650, ptr %225, align 8, !tbaa !12
  %index.next651 = add nuw i64 %index644, 2
  %228 = icmp eq i64 %index.next651, %n.vec640
  br i1 %228, label %middle.block635, label %vector.body643, !llvm.loop !34

middle.block635:                                  ; preds = %vector.body643
  %cmp.n652 = icmp eq i64 %n.vec640, %221
  br i1 %cmp.n652, label %.loopexit.backedge, label %.lr.ph454.preheader688

.loopexit.backedge:                               ; preds = %.lr.ph454.prol.loopexit, %.lr.ph454, %.lr.ph462.prol.loopexit, %.lr.ph462, %middle.block635, %middle.block, %.loopexit399, %._crit_edge
  %.be = phi i32 [ %290, %.loopexit399 ], [ %.pre.pre, %._crit_edge ], [ %290, %middle.block ], [ %.pre.pre, %middle.block635 ], [ %290, %.lr.ph462 ], [ %290, %.lr.ph462.prol.loopexit ], [ %.pre.pre, %.lr.ph454 ], [ %.pre.pre, %.lr.ph454.prol.loopexit ]
  br label %.loopexit

.lr.ph454.preheader688:                           ; preds = %middle.block635, %vector.memcheck627, %.lr.ph454.preheader
  %indvars.iv537.ph = phi i64 [ 1, %vector.memcheck627 ], [ 1, %.lr.ph454.preheader ], [ %ind.end641, %middle.block635 ]
  %229 = zext nneg i32 %.pre.pre to i64
  %230 = and i32 %.pre.pre, 1
  %lcmp.mod704.not = icmp eq i32 %230, 0
  br i1 %lcmp.mod704.not, label %.lr.ph454.prol.loopexit, label %.lr.ph454.prol

.lr.ph454.prol:                                   ; preds = %.lr.ph454.preheader688
  %231 = getelementptr inbounds double, ptr %20, i64 %indvars.iv537.ph
  %232 = load double, ptr %231, align 8, !tbaa !12
  %233 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv537.ph
  %234 = load <2 x double>, ptr %233, align 8, !tbaa !12
  %235 = insertelement <2 x double> poison, double %232, i64 0
  %236 = shufflevector <2 x double> %235, <2 x double> poison, <2 x i32> zeroinitializer
  %237 = fmul <2 x double> %236, %234
  store <2 x double> %237, ptr %233, align 8, !tbaa !12
  %indvars.iv.next538.prol = add nuw nsw i64 %indvars.iv537.ph, 1
  br label %.lr.ph454.prol.loopexit

.lr.ph454.prol.loopexit:                          ; preds = %.lr.ph454.prol, %.lr.ph454.preheader688
  %indvars.iv537.unr = phi i64 [ %indvars.iv537.ph, %.lr.ph454.preheader688 ], [ %indvars.iv.next538.prol, %.lr.ph454.prol ]
  %238 = icmp eq i64 %indvars.iv537.ph, %229
  br i1 %238, label %.loopexit.backedge, label %.lr.ph454

.lr.ph454:                                        ; preds = %.lr.ph454.prol.loopexit, %.lr.ph454
  %indvars.iv537 = phi i64 [ %indvars.iv.next538.1, %.lr.ph454 ], [ %indvars.iv537.unr, %.lr.ph454.prol.loopexit ]
  %239 = getelementptr inbounds double, ptr %20, i64 %indvars.iv537
  %240 = load double, ptr %239, align 8, !tbaa !12
  %241 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv537
  %242 = load <2 x double>, ptr %241, align 8, !tbaa !12
  %243 = insertelement <2 x double> poison, double %240, i64 0
  %244 = shufflevector <2 x double> %243, <2 x double> poison, <2 x i32> zeroinitializer
  %245 = fmul <2 x double> %244, %242
  store <2 x double> %245, ptr %241, align 8, !tbaa !12
  %246 = getelementptr double, ptr %7, i64 %indvars.iv537
  %247 = load double, ptr %246, align 8, !tbaa !12
  %248 = getelementptr %struct.doublecomplex, ptr %10, i64 %indvars.iv537
  %249 = load <2 x double>, ptr %248, align 8, !tbaa !12
  %250 = insertelement <2 x double> poison, double %247, i64 0
  %251 = shufflevector <2 x double> %250, <2 x double> poison, <2 x i32> zeroinitializer
  %252 = fmul <2 x double> %251, %249
  store <2 x double> %252, ptr %248, align 8, !tbaa !12
  %indvars.iv.next538.1 = add nuw nsw i64 %indvars.iv537, 2
  %exitcond541.not.1 = icmp eq i64 %indvars.iv.next538.1, %wide.trip.count540
  br i1 %exitcond541.not.1, label %.loopexit.backedge, label %.lr.ph454, !llvm.loop !35

253:                                              ; preds = %.loopexit
  %254 = load i32, ptr %8, align 4, !tbaa !5
  %.not386 = icmp eq i32 %254, 0
  br i1 %.not386, label %.loopexit399, label %255

255:                                              ; preds = %253
  %256 = load i32, ptr %1, align 4, !tbaa !5
  %.not387455 = icmp slt i32 %256, 1
  br i1 %.not387455, label %.loopexit399, label %.lr.ph458.preheader

.lr.ph458.preheader:                              ; preds = %255
  %257 = add nuw i32 %256, 1
  %wide.trip.count545 = zext i32 %257 to i64
  %258 = zext nneg i32 %256 to i64
  %min.iters.check611 = icmp eq i32 %256, 1
  br i1 %min.iters.check611, label %.lr.ph458.preheader687, label %vector.memcheck601

vector.memcheck601:                               ; preds = %.lr.ph458.preheader
  %259 = shl nuw nsw i64 %wide.trip.count545, 4
  %scevgep603 = getelementptr i8, ptr %scevgep602, i64 %259
  %260 = shl nuw nsw i64 %wide.trip.count545, 3
  %scevgep605 = getelementptr i8, ptr %scevgep604, i64 %260
  %bound0606 = icmp ugt ptr %scevgep605, %10
  %bound1607 = icmp ugt ptr %scevgep603, %7
  %found.conflict608 = and i1 %bound0606, %bound1607
  br i1 %found.conflict608, label %.lr.ph458.preheader687, label %vector.ph612

vector.ph612:                                     ; preds = %vector.memcheck601
  %n.vec614 = and i64 %258, 2147483646
  %ind.end615 = or i64 %258, 1
  br label %vector.body617

vector.body617:                                   ; preds = %vector.body617, %vector.ph612
  %index618 = phi i64 [ 0, %vector.ph612 ], [ %index.next625, %vector.body617 ]
  %261 = getelementptr double, ptr %7, i64 %index618
  %wide.load620 = load <2 x double>, ptr %261, align 8, !tbaa !12, !alias.scope !36
  %262 = getelementptr %struct.doublecomplex, ptr %10, i64 %index618
  %wide.vec621 = load <4 x double>, ptr %262, align 8, !tbaa !12
  %strided.vec622 = shufflevector <4 x double> %wide.vec621, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec623 = shufflevector <4 x double> %wide.vec621, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %263 = fmul <2 x double> %wide.load620, %strided.vec622
  %264 = fmul <2 x double> %wide.load620, %strided.vec623
  %interleaved.vec624 = shufflevector <2 x double> %263, <2 x double> %264, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec624, ptr %262, align 8, !tbaa !12
  %index.next625 = add nuw i64 %index618, 2
  %265 = icmp eq i64 %index.next625, %n.vec614
  br i1 %265, label %middle.block609, label %vector.body617, !llvm.loop !39

middle.block609:                                  ; preds = %vector.body617
  %cmp.n626 = icmp eq i64 %n.vec614, %258
  br i1 %cmp.n626, label %.loopexit399, label %.lr.ph458.preheader687

.lr.ph458.preheader687:                           ; preds = %middle.block609, %vector.memcheck601, %.lr.ph458.preheader
  %indvars.iv542.ph = phi i64 [ 1, %vector.memcheck601 ], [ 1, %.lr.ph458.preheader ], [ %ind.end615, %middle.block609 ]
  %266 = zext nneg i32 %256 to i64
  %267 = and i32 %256, 1
  %lcmp.mod706.not = icmp eq i32 %267, 0
  br i1 %lcmp.mod706.not, label %.lr.ph458.prol.loopexit, label %.lr.ph458.prol

.lr.ph458.prol:                                   ; preds = %.lr.ph458.preheader687
  %268 = getelementptr inbounds double, ptr %20, i64 %indvars.iv542.ph
  %269 = load double, ptr %268, align 8, !tbaa !12
  %270 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv542.ph
  %271 = load <2 x double>, ptr %270, align 8, !tbaa !12
  %272 = insertelement <2 x double> poison, double %269, i64 0
  %273 = shufflevector <2 x double> %272, <2 x double> poison, <2 x i32> zeroinitializer
  %274 = fmul <2 x double> %273, %271
  store <2 x double> %274, ptr %270, align 8, !tbaa !12
  %indvars.iv.next543.prol = add nuw nsw i64 %indvars.iv542.ph, 1
  br label %.lr.ph458.prol.loopexit

.lr.ph458.prol.loopexit:                          ; preds = %.lr.ph458.prol, %.lr.ph458.preheader687
  %indvars.iv542.unr = phi i64 [ %indvars.iv542.ph, %.lr.ph458.preheader687 ], [ %indvars.iv.next543.prol, %.lr.ph458.prol ]
  %275 = icmp eq i64 %indvars.iv542.ph, %266
  br i1 %275, label %.loopexit399, label %.lr.ph458

.lr.ph458:                                        ; preds = %.lr.ph458.prol.loopexit, %.lr.ph458
  %indvars.iv542 = phi i64 [ %indvars.iv.next543.1, %.lr.ph458 ], [ %indvars.iv542.unr, %.lr.ph458.prol.loopexit ]
  %276 = getelementptr inbounds double, ptr %20, i64 %indvars.iv542
  %277 = load double, ptr %276, align 8, !tbaa !12
  %278 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv542
  %279 = load <2 x double>, ptr %278, align 8, !tbaa !12
  %280 = insertelement <2 x double> poison, double %277, i64 0
  %281 = shufflevector <2 x double> %280, <2 x double> poison, <2 x i32> zeroinitializer
  %282 = fmul <2 x double> %281, %279
  store <2 x double> %282, ptr %278, align 8, !tbaa !12
  %283 = getelementptr double, ptr %7, i64 %indvars.iv542
  %284 = load double, ptr %283, align 8, !tbaa !12
  %285 = getelementptr %struct.doublecomplex, ptr %10, i64 %indvars.iv542
  %286 = load <2 x double>, ptr %285, align 8, !tbaa !12
  %287 = insertelement <2 x double> poison, double %284, i64 0
  %288 = shufflevector <2 x double> %287, <2 x double> poison, <2 x i32> zeroinitializer
  %289 = fmul <2 x double> %288, %286
  store <2 x double> %289, ptr %285, align 8, !tbaa !12
  %indvars.iv.next543.1 = add nuw nsw i64 %indvars.iv542, 2
  %exitcond546.not.1 = icmp eq i64 %indvars.iv.next543.1, %wide.trip.count545
  br i1 %exitcond546.not.1, label %.loopexit399, label %.lr.ph458, !llvm.loop !40

.loopexit399:                                     ; preds = %.lr.ph458.prol.loopexit, %.lr.ph458, %middle.block609, %255, %253
  call void @zhetrs_(ptr noundef nonnull %.str.1..str583, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %10, ptr noundef nonnull %1, ptr noundef nonnull %9) #5
  %290 = load i32, ptr %1, align 4, !tbaa !5
  %.not388459 = icmp slt i32 %290, 1
  br i1 %.not388459, label %.loopexit.backedge, label %.lr.ph462.preheader

.lr.ph462.preheader:                              ; preds = %.loopexit399
  %291 = add nuw i32 %290, 1
  %wide.trip.count550 = zext i32 %291 to i64
  %292 = zext nneg i32 %290 to i64
  %min.iters.check = icmp eq i32 %290, 1
  br i1 %min.iters.check, label %.lr.ph462.preheader686, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph462.preheader
  %293 = shl nuw nsw i64 %wide.trip.count550, 4
  %scevgep597 = getelementptr i8, ptr %scevgep, i64 %293
  %294 = shl nuw nsw i64 %wide.trip.count550, 3
  %scevgep599 = getelementptr i8, ptr %scevgep598, i64 %294
  %bound0 = icmp ugt ptr %scevgep599, %10
  %bound1 = icmp ugt ptr %scevgep597, %11
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph462.preheader686, label %vector.ph

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

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %292
  br i1 %cmp.n, label %.loopexit.backedge, label %.lr.ph462.preheader686

.lr.ph462.preheader686:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph462.preheader
  %indvars.iv547.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph462.preheader ], [ %ind.end, %middle.block ]
  %300 = zext nneg i32 %290 to i64
  %301 = and i32 %290, 1
  %lcmp.mod708.not = icmp eq i32 %301, 0
  br i1 %lcmp.mod708.not, label %.lr.ph462.prol.loopexit, label %.lr.ph462.prol

.lr.ph462.prol:                                   ; preds = %.lr.ph462.preheader686
  %302 = getelementptr inbounds double, ptr %22, i64 %indvars.iv547.ph
  %303 = load double, ptr %302, align 8, !tbaa !12
  %304 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv547.ph
  %305 = load <2 x double>, ptr %304, align 8, !tbaa !12
  %306 = insertelement <2 x double> poison, double %303, i64 0
  %307 = shufflevector <2 x double> %306, <2 x double> poison, <2 x i32> zeroinitializer
  %308 = fmul <2 x double> %307, %305
  store <2 x double> %308, ptr %304, align 8, !tbaa !12
  %indvars.iv.next548.prol = add nuw nsw i64 %indvars.iv547.ph, 1
  br label %.lr.ph462.prol.loopexit

.lr.ph462.prol.loopexit:                          ; preds = %.lr.ph462.prol, %.lr.ph462.preheader686
  %indvars.iv547.unr = phi i64 [ %indvars.iv547.ph, %.lr.ph462.preheader686 ], [ %indvars.iv.next548.prol, %.lr.ph462.prol ]
  %309 = icmp eq i64 %indvars.iv547.ph, %300
  br i1 %309, label %.loopexit.backedge, label %.lr.ph462

.lr.ph462:                                        ; preds = %.lr.ph462.prol.loopexit, %.lr.ph462
  %indvars.iv547 = phi i64 [ %indvars.iv.next548.1, %.lr.ph462 ], [ %indvars.iv547.unr, %.lr.ph462.prol.loopexit ]
  %310 = getelementptr inbounds double, ptr %22, i64 %indvars.iv547
  %311 = load double, ptr %310, align 8, !tbaa !12
  %312 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %indvars.iv547
  %313 = load <2 x double>, ptr %312, align 8, !tbaa !12
  %314 = insertelement <2 x double> poison, double %311, i64 0
  %315 = shufflevector <2 x double> %314, <2 x double> poison, <2 x i32> zeroinitializer
  %316 = fmul <2 x double> %315, %313
  store <2 x double> %316, ptr %312, align 8, !tbaa !12
  %317 = getelementptr double, ptr %11, i64 %indvars.iv547
  %318 = load double, ptr %317, align 8, !tbaa !12
  %319 = getelementptr %struct.doublecomplex, ptr %10, i64 %indvars.iv547
  %320 = load <2 x double>, ptr %319, align 8, !tbaa !12
  %321 = insertelement <2 x double> poison, double %318, i64 0
  %322 = shufflevector <2 x double> %321, <2 x double> poison, <2 x i32> zeroinitializer
  %323 = fmul <2 x double> %322, %320
  store <2 x double> %323, ptr %319, align 8, !tbaa !12
  %indvars.iv.next548.1 = add nuw nsw i64 %indvars.iv547, 2
  %exitcond551.not.1 = icmp eq i64 %indvars.iv.next548.1, %wide.trip.count550
  br i1 %exitcond551.not.1, label %.loopexit.backedge, label %.lr.ph462, !llvm.loop !45

324:                                              ; preds = %.loopexit
  %325 = load double, ptr %16, align 8, !tbaa !12
  %326 = fcmp une double %325, 0.000000e+00
  %327 = fdiv double 1.000000e+00, %325
  %.0368 = select i1 %326, double %327, double 0.000000e+00
  br label %328

328:                                              ; preds = %.loopexit404, %324, %.thread
  %.0350 = phi double [ 0.000000e+00, %.thread ], [ %.0368, %324 ], [ %.mux, %.loopexit404 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  ret double %.0350
}

; 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

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

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

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

; 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) #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = distinct !{!27, !14, !28, !29}
!28 = !{!"llvm.loop.isvectorized", i32 1}
!29 = !{!"llvm.loop.unroll.runtime.disable"}
!30 = distinct !{!30, !14, !28}
!31 = !{!32}
!32 = distinct !{!32, !33}
!33 = distinct !{!33, !"LVerDomain"}
!34 = distinct !{!34, !14, !28, !29}
!35 = distinct !{!35, !14, !28}
!36 = !{!37}
!37 = distinct !{!37, !38}
!38 = distinct !{!38, !"LVerDomain"}
!39 = distinct !{!39, !14, !28, !29}
!40 = distinct !{!40, !14, !28}
!41 = !{!42}
!42 = distinct !{!42, !43}
!43 = distinct !{!43, !"LVerDomain"}
!44 = distinct !{!44, !14, !28, !29}
!45 = distinct !{!45, !14, !28}


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