; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (zla_gercond_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 [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1

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

78:                                               ; preds = %13
  %79 = load ptr, ptr %15, align 8, !tbaa !5
  %80 = call i64 @lsame_(ptr noundef %79, ptr noundef @.str.1)
  %81 = icmp ne i64 %80, 0
  br i1 %81, label %87, label %82

82:                                               ; preds = %78
  %83 = load ptr, ptr %15, align 8, !tbaa !5
  %84 = call i64 @lsame_(ptr noundef %83, ptr noundef @.str.2)
  %85 = icmp ne i64 %84, 0
  br i1 %85, label %87, label %86

86:                                               ; preds = %82
  br label %94

87:                                               ; preds = %82, %78, %13
  %88 = load ptr, ptr %16, align 8, !tbaa !5
  %89 = load i64, ptr %88, align 8, !tbaa !9
  %90 = icmp slt i64 %89, 0
  br i1 %90, label %91, label %93

91:                                               ; preds = %87
  %92 = load ptr, ptr %24, align 8, !tbaa !5
  store i64 -2, ptr %92, align 8, !tbaa !9
  br label %93

93:                                               ; preds = %91, %87
  br label %94

94:                                               ; preds = %93, %86
  %95 = load ptr, ptr %24, align 8, !tbaa !5
  %96 = load i64, ptr %95, align 8, !tbaa !9
  %97 = icmp ne i64 %96, 0
  br i1 %97, label %98, label %104

98:                                               ; preds = %94
  %99 = load ptr, ptr %24, align 8, !tbaa !5
  %100 = load i64, ptr %99, align 8, !tbaa !9
  %101 = sub nsw i64 0, %100
  store i64 %101, ptr %32, align 8, !tbaa !9
  %102 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %32)
  %103 = load double, ptr %36, align 8, !tbaa !11
  store double %103, ptr %14, align 8
  store i32 1, ptr %48, align 4
  br label %679

104:                                              ; preds = %94
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %105 = load i64, ptr %47, align 8, !tbaa !9
  %106 = icmp ne i64 %105, 0
  br i1 %106, label %107, label %243

107:                                              ; preds = %104
  %108 = load ptr, ptr %16, align 8, !tbaa !5
  %109 = load i64, ptr %108, align 8, !tbaa !9
  store i64 %109, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %110

110:                                              ; preds = %239, %107
  %111 = load i64, ptr %40, align 8, !tbaa !9
  %112 = load i64, ptr %32, align 8, !tbaa !9
  %113 = icmp sle i64 %111, %112
  br i1 %113, label %114, label %242

114:                                              ; preds = %110
  store double 0.000000e+00, ptr %42, align 8, !tbaa !11
  %115 = load ptr, ptr %23, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = icmp ne i64 %116, 0
  br i1 %117, label %118, label %174

118:                                              ; preds = %114
  %119 = load ptr, ptr %16, align 8, !tbaa !5
  %120 = load i64, ptr %119, align 8, !tbaa !9
  store i64 %120, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %121

121:                                              ; preds = %170, %118
  %122 = load i64, ptr %41, align 8, !tbaa !9
  %123 = load i64, ptr %33, align 8, !tbaa !9
  %124 = icmp sle i64 %122, %123
  br i1 %124, label %125, label %173

125:                                              ; preds = %121
  %126 = load i64, ptr %40, align 8, !tbaa !9
  %127 = load i64, ptr %41, align 8, !tbaa !9
  %128 = load i64, ptr %28, align 8, !tbaa !9
  %129 = mul nsw i64 %127, %128
  %130 = add nsw i64 %126, %129
  store i64 %130, ptr %34, align 8, !tbaa !9
  %131 = load ptr, ptr %17, align 8, !tbaa !5
  %132 = load i64, ptr %34, align 8, !tbaa !9
  %133 = getelementptr inbounds %struct.doublecomplex, ptr %131, i64 %132
  %134 = getelementptr inbounds %struct.doublecomplex, ptr %133, i32 0, i32 0
  %135 = load double, ptr %134, align 8, !tbaa !13
  store double %135, ptr %37, align 8, !tbaa !11
  %136 = load double, ptr %37, align 8, !tbaa !11
  %137 = fcmp oge double %136, 0.000000e+00
  br i1 %137, label %138, label %140

138:                                              ; preds = %125
  %139 = load double, ptr %37, align 8, !tbaa !11
  br label %143

140:                                              ; preds = %125
  %141 = load double, ptr %37, align 8, !tbaa !11
  %142 = fneg double %141
  br label %143

143:                                              ; preds = %140, %138
  %144 = phi double [ %139, %138 ], [ %142, %140 ]
  %145 = load ptr, ptr %17, align 8, !tbaa !5
  %146 = load i64, ptr %40, align 8, !tbaa !9
  %147 = load i64, ptr %41, align 8, !tbaa !9
  %148 = load i64, ptr %28, align 8, !tbaa !9
  %149 = mul nsw i64 %147, %148
  %150 = add nsw i64 %146, %149
  %151 = getelementptr inbounds %struct.doublecomplex, ptr %145, i64 %150
  %152 = call double @d_imag(ptr noundef %151)
  store double %152, ptr %38, align 8, !tbaa !11
  %153 = load double, ptr %38, align 8, !tbaa !11
  %154 = fcmp oge double %153, 0.000000e+00
  br i1 %154, label %155, label %157

155:                                              ; preds = %143
  %156 = load double, ptr %38, align 8, !tbaa !11
  br label %160

157:                                              ; preds = %143
  %158 = load double, ptr %38, align 8, !tbaa !11
  %159 = fneg double %158
  br label %160

160:                                              ; preds = %157, %155
  %161 = phi double [ %156, %155 ], [ %159, %157 ]
  %162 = fadd double %144, %161
  %163 = load ptr, ptr %22, align 8, !tbaa !5
  %164 = load i64, ptr %41, align 8, !tbaa !9
  %165 = getelementptr inbounds double, ptr %163, i64 %164
  %166 = load double, ptr %165, align 8, !tbaa !11
  %167 = fdiv double %162, %166
  %168 = load double, ptr %42, align 8, !tbaa !11
  %169 = fadd double %168, %167
  store double %169, ptr %42, align 8, !tbaa !11
  br label %170

170:                                              ; preds = %160
  %171 = load i64, ptr %41, align 8, !tbaa !9
  %172 = add nsw i64 %171, 1
  store i64 %172, ptr %41, align 8, !tbaa !9
  br label %121, !llvm.loop !15

173:                                              ; preds = %121
  br label %225

174:                                              ; preds = %114
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  %176 = load i64, ptr %175, align 8, !tbaa !9
  store i64 %176, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %177

177:                                              ; preds = %221, %174
  %178 = load i64, ptr %41, align 8, !tbaa !9
  %179 = load i64, ptr %33, align 8, !tbaa !9
  %180 = icmp sle i64 %178, %179
  br i1 %180, label %181, label %224

181:                                              ; preds = %177
  %182 = load i64, ptr %40, align 8, !tbaa !9
  %183 = load i64, ptr %41, align 8, !tbaa !9
  %184 = load i64, ptr %28, align 8, !tbaa !9
  %185 = mul nsw i64 %183, %184
  %186 = add nsw i64 %182, %185
  store i64 %186, ptr %34, align 8, !tbaa !9
  %187 = load ptr, ptr %17, align 8, !tbaa !5
  %188 = load i64, ptr %34, align 8, !tbaa !9
  %189 = getelementptr inbounds %struct.doublecomplex, ptr %187, i64 %188
  %190 = getelementptr inbounds %struct.doublecomplex, ptr %189, i32 0, i32 0
  %191 = load double, ptr %190, align 8, !tbaa !13
  store double %191, ptr %37, align 8, !tbaa !11
  %192 = load double, ptr %37, align 8, !tbaa !11
  %193 = fcmp oge double %192, 0.000000e+00
  br i1 %193, label %194, label %196

194:                                              ; preds = %181
  %195 = load double, ptr %37, align 8, !tbaa !11
  br label %199

196:                                              ; preds = %181
  %197 = load double, ptr %37, align 8, !tbaa !11
  %198 = fneg double %197
  br label %199

199:                                              ; preds = %196, %194
  %200 = phi double [ %195, %194 ], [ %198, %196 ]
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  %202 = load i64, ptr %40, align 8, !tbaa !9
  %203 = load i64, ptr %41, align 8, !tbaa !9
  %204 = load i64, ptr %28, align 8, !tbaa !9
  %205 = mul nsw i64 %203, %204
  %206 = add nsw i64 %202, %205
  %207 = getelementptr inbounds %struct.doublecomplex, ptr %201, i64 %206
  %208 = call double @d_imag(ptr noundef %207)
  store double %208, ptr %38, align 8, !tbaa !11
  %209 = load double, ptr %38, align 8, !tbaa !11
  %210 = fcmp oge double %209, 0.000000e+00
  br i1 %210, label %211, label %213

211:                                              ; preds = %199
  %212 = load double, ptr %38, align 8, !tbaa !11
  br label %216

213:                                              ; preds = %199
  %214 = load double, ptr %38, align 8, !tbaa !11
  %215 = fneg double %214
  br label %216

216:                                              ; preds = %213, %211
  %217 = phi double [ %212, %211 ], [ %215, %213 ]
  %218 = fadd double %200, %217
  %219 = load double, ptr %42, align 8, !tbaa !11
  %220 = fadd double %219, %218
  store double %220, ptr %42, align 8, !tbaa !11
  br label %221

221:                                              ; preds = %216
  %222 = load i64, ptr %41, align 8, !tbaa !9
  %223 = add nsw i64 %222, 1
  store i64 %223, ptr %41, align 8, !tbaa !9
  br label %177, !llvm.loop !17

224:                                              ; preds = %177
  br label %225

225:                                              ; preds = %224, %173
  %226 = load double, ptr %42, align 8, !tbaa !11
  %227 = load ptr, ptr %26, align 8, !tbaa !5
  %228 = load i64, ptr %40, align 8, !tbaa !9
  %229 = getelementptr inbounds double, ptr %227, i64 %228
  store double %226, ptr %229, align 8, !tbaa !11
  %230 = load double, ptr %45, align 8, !tbaa !11
  %231 = load double, ptr %42, align 8, !tbaa !11
  %232 = fcmp oge double %230, %231
  br i1 %232, label %233, label %235

233:                                              ; preds = %225
  %234 = load double, ptr %45, align 8, !tbaa !11
  br label %237

235:                                              ; preds = %225
  %236 = load double, ptr %42, align 8, !tbaa !11
  br label %237

237:                                              ; preds = %235, %233
  %238 = phi double [ %234, %233 ], [ %236, %235 ]
  store double %238, ptr %45, align 8, !tbaa !11
  br label %239

239:                                              ; preds = %237
  %240 = load i64, ptr %40, align 8, !tbaa !9
  %241 = add nsw i64 %240, 1
  store i64 %241, ptr %40, align 8, !tbaa !9
  br label %110, !llvm.loop !18

242:                                              ; preds = %110
  br label %379

243:                                              ; preds = %104
  %244 = load ptr, ptr %16, align 8, !tbaa !5
  %245 = load i64, ptr %244, align 8, !tbaa !9
  store i64 %245, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %246

246:                                              ; preds = %375, %243
  %247 = load i64, ptr %40, align 8, !tbaa !9
  %248 = load i64, ptr %32, align 8, !tbaa !9
  %249 = icmp sle i64 %247, %248
  br i1 %249, label %250, label %378

250:                                              ; preds = %246
  store double 0.000000e+00, ptr %42, align 8, !tbaa !11
  %251 = load ptr, ptr %23, align 8, !tbaa !5
  %252 = load i64, ptr %251, align 8, !tbaa !9
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %254, label %310

254:                                              ; preds = %250
  %255 = load ptr, ptr %16, align 8, !tbaa !5
  %256 = load i64, ptr %255, align 8, !tbaa !9
  store i64 %256, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %306, %254
  %258 = load i64, ptr %41, align 8, !tbaa !9
  %259 = load i64, ptr %33, align 8, !tbaa !9
  %260 = icmp sle i64 %258, %259
  br i1 %260, label %261, label %309

261:                                              ; preds = %257
  %262 = load i64, ptr %41, align 8, !tbaa !9
  %263 = load i64, ptr %40, align 8, !tbaa !9
  %264 = load i64, ptr %28, align 8, !tbaa !9
  %265 = mul nsw i64 %263, %264
  %266 = add nsw i64 %262, %265
  store i64 %266, ptr %34, align 8, !tbaa !9
  %267 = load ptr, ptr %17, align 8, !tbaa !5
  %268 = load i64, ptr %34, align 8, !tbaa !9
  %269 = getelementptr inbounds %struct.doublecomplex, ptr %267, i64 %268
  %270 = getelementptr inbounds %struct.doublecomplex, ptr %269, i32 0, i32 0
  %271 = load double, ptr %270, align 8, !tbaa !13
  store double %271, ptr %37, align 8, !tbaa !11
  %272 = load double, ptr %37, align 8, !tbaa !11
  %273 = fcmp oge double %272, 0.000000e+00
  br i1 %273, label %274, label %276

274:                                              ; preds = %261
  %275 = load double, ptr %37, align 8, !tbaa !11
  br label %279

276:                                              ; preds = %261
  %277 = load double, ptr %37, align 8, !tbaa !11
  %278 = fneg double %277
  br label %279

279:                                              ; preds = %276, %274
  %280 = phi double [ %275, %274 ], [ %278, %276 ]
  %281 = load ptr, ptr %17, align 8, !tbaa !5
  %282 = load i64, ptr %41, align 8, !tbaa !9
  %283 = load i64, ptr %40, align 8, !tbaa !9
  %284 = load i64, ptr %28, align 8, !tbaa !9
  %285 = mul nsw i64 %283, %284
  %286 = add nsw i64 %282, %285
  %287 = getelementptr inbounds %struct.doublecomplex, ptr %281, i64 %286
  %288 = call double @d_imag(ptr noundef %287)
  store double %288, ptr %38, align 8, !tbaa !11
  %289 = load double, ptr %38, align 8, !tbaa !11
  %290 = fcmp oge double %289, 0.000000e+00
  br i1 %290, label %291, label %293

291:                                              ; preds = %279
  %292 = load double, ptr %38, align 8, !tbaa !11
  br label %296

293:                                              ; preds = %279
  %294 = load double, ptr %38, align 8, !tbaa !11
  %295 = fneg double %294
  br label %296

296:                                              ; preds = %293, %291
  %297 = phi double [ %292, %291 ], [ %295, %293 ]
  %298 = fadd double %280, %297
  %299 = load ptr, ptr %22, align 8, !tbaa !5
  %300 = load i64, ptr %41, align 8, !tbaa !9
  %301 = getelementptr inbounds double, ptr %299, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = fdiv double %298, %302
  %304 = load double, ptr %42, align 8, !tbaa !11
  %305 = fadd double %304, %303
  store double %305, ptr %42, align 8, !tbaa !11
  br label %306

306:                                              ; preds = %296
  %307 = load i64, ptr %41, align 8, !tbaa !9
  %308 = add nsw i64 %307, 1
  store i64 %308, ptr %41, align 8, !tbaa !9
  br label %257, !llvm.loop !19

309:                                              ; preds = %257
  br label %361

310:                                              ; preds = %250
  %311 = load ptr, ptr %16, align 8, !tbaa !5
  %312 = load i64, ptr %311, align 8, !tbaa !9
  store i64 %312, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %313

313:                                              ; preds = %357, %310
  %314 = load i64, ptr %41, align 8, !tbaa !9
  %315 = load i64, ptr %33, align 8, !tbaa !9
  %316 = icmp sle i64 %314, %315
  br i1 %316, label %317, label %360

317:                                              ; preds = %313
  %318 = load i64, ptr %41, align 8, !tbaa !9
  %319 = load i64, ptr %40, align 8, !tbaa !9
  %320 = load i64, ptr %28, align 8, !tbaa !9
  %321 = mul nsw i64 %319, %320
  %322 = add nsw i64 %318, %321
  store i64 %322, ptr %34, align 8, !tbaa !9
  %323 = load ptr, ptr %17, align 8, !tbaa !5
  %324 = load i64, ptr %34, align 8, !tbaa !9
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %323, i64 %324
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %325, i32 0, i32 0
  %327 = load double, ptr %326, align 8, !tbaa !13
  store double %327, ptr %37, align 8, !tbaa !11
  %328 = load double, ptr %37, align 8, !tbaa !11
  %329 = fcmp oge double %328, 0.000000e+00
  br i1 %329, label %330, label %332

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

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

335:                                              ; preds = %332, %330
  %336 = phi double [ %331, %330 ], [ %334, %332 ]
  %337 = load ptr, ptr %17, align 8, !tbaa !5
  %338 = load i64, ptr %41, align 8, !tbaa !9
  %339 = load i64, ptr %40, align 8, !tbaa !9
  %340 = load i64, ptr %28, align 8, !tbaa !9
  %341 = mul nsw i64 %339, %340
  %342 = add nsw i64 %338, %341
  %343 = getelementptr inbounds %struct.doublecomplex, ptr %337, i64 %342
  %344 = call double @d_imag(ptr noundef %343)
  store double %344, ptr %38, align 8, !tbaa !11
  %345 = load double, ptr %38, align 8, !tbaa !11
  %346 = fcmp oge double %345, 0.000000e+00
  br i1 %346, label %347, label %349

347:                                              ; preds = %335
  %348 = load double, ptr %38, align 8, !tbaa !11
  br label %352

349:                                              ; preds = %335
  %350 = load double, ptr %38, align 8, !tbaa !11
  %351 = fneg double %350
  br label %352

352:                                              ; preds = %349, %347
  %353 = phi double [ %348, %347 ], [ %351, %349 ]
  %354 = fadd double %336, %353
  %355 = load double, ptr %42, align 8, !tbaa !11
  %356 = fadd double %355, %354
  store double %356, ptr %42, align 8, !tbaa !11
  br label %357

357:                                              ; preds = %352
  %358 = load i64, ptr %41, align 8, !tbaa !9
  %359 = add nsw i64 %358, 1
  store i64 %359, ptr %41, align 8, !tbaa !9
  br label %313, !llvm.loop !20

360:                                              ; preds = %313
  br label %361

361:                                              ; preds = %360, %309
  %362 = load double, ptr %42, align 8, !tbaa !11
  %363 = load ptr, ptr %26, align 8, !tbaa !5
  %364 = load i64, ptr %40, align 8, !tbaa !9
  %365 = getelementptr inbounds double, ptr %363, i64 %364
  store double %362, ptr %365, align 8, !tbaa !11
  %366 = load double, ptr %45, align 8, !tbaa !11
  %367 = load double, ptr %42, align 8, !tbaa !11
  %368 = fcmp oge double %366, %367
  br i1 %368, label %369, label %371

369:                                              ; preds = %361
  %370 = load double, ptr %45, align 8, !tbaa !11
  br label %373

371:                                              ; preds = %361
  %372 = load double, ptr %42, align 8, !tbaa !11
  br label %373

373:                                              ; preds = %371, %369
  %374 = phi double [ %370, %369 ], [ %372, %371 ]
  store double %374, ptr %45, align 8, !tbaa !11
  br label %375

375:                                              ; preds = %373
  %376 = load i64, ptr %40, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %40, align 8, !tbaa !9
  br label %246, !llvm.loop !21

378:                                              ; preds = %246
  br label %379

379:                                              ; preds = %378, %242
  %380 = load ptr, ptr %16, align 8, !tbaa !5
  %381 = load i64, ptr %380, align 8, !tbaa !9
  %382 = icmp eq i64 %381, 0
  br i1 %382, label %383, label %385

383:                                              ; preds = %379
  store double 1.000000e+00, ptr %36, align 8, !tbaa !11
  %384 = load double, ptr %36, align 8, !tbaa !11
  store double %384, ptr %14, align 8
  store i32 1, ptr %48, align 4
  br label %679

385:                                              ; preds = %379
  %386 = load double, ptr %45, align 8, !tbaa !11
  %387 = fcmp oeq double %386, 0.000000e+00
  br i1 %387, label %388, label %390

388:                                              ; preds = %385
  %389 = load double, ptr %36, align 8, !tbaa !11
  store double %389, ptr %14, align 8
  store i32 1, ptr %48, align 4
  br label %679

390:                                              ; preds = %385
  br label %391

391:                                              ; preds = %390
  store double 0.000000e+00, ptr %46, align 8, !tbaa !11
  store i64 0, ptr %43, align 8, !tbaa !9
  br label %392

392:                                              ; preds = %670, %391
  %393 = load ptr, ptr %16, align 8, !tbaa !5
  %394 = load ptr, ptr %25, align 8, !tbaa !5
  %395 = load ptr, ptr %16, align 8, !tbaa !5
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = add nsw i64 %396, 1
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %394, i64 %397
  %399 = load ptr, ptr %25, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.doublecomplex, ptr %399, i64 1
  %401 = getelementptr inbounds [3 x i64], ptr %44, i64 0, i64 0
  %402 = call i32 @zlacn2_(ptr noundef %393, ptr noundef %398, ptr noundef %400, ptr noundef %46, ptr noundef %43, ptr noundef %401)
  %403 = load i64, ptr %43, align 8, !tbaa !9
  %404 = icmp ne i64 %403, 0
  br i1 %404, label %405, label %671

405:                                              ; preds = %392
  %406 = load i64, ptr %43, align 8, !tbaa !9
  %407 = icmp eq i64 %406, 2
  br i1 %407, label %408, label %539

408:                                              ; preds = %405
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = load i64, ptr %409, align 8, !tbaa !9
  store i64 %410, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %411

411:                                              ; preds = %453, %408
  %412 = load i64, ptr %40, align 8, !tbaa !9
  %413 = load i64, ptr %32, align 8, !tbaa !9
  %414 = icmp sle i64 %412, %413
  br i1 %414, label %415, label %456

415:                                              ; preds = %411
  %416 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %416, ptr %33, align 8, !tbaa !9
  %417 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %417, ptr %34, align 8, !tbaa !9
  %418 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %418, ptr %35, align 8, !tbaa !9
  %419 = load ptr, ptr %26, align 8, !tbaa !5
  %420 = load i64, ptr %35, align 8, !tbaa !9
  %421 = getelementptr inbounds double, ptr %419, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !11
  %423 = load ptr, ptr %25, align 8, !tbaa !5
  %424 = load i64, ptr %34, align 8, !tbaa !9
  %425 = getelementptr inbounds %struct.doublecomplex, ptr %423, i64 %424
  %426 = getelementptr inbounds %struct.doublecomplex, ptr %425, i32 0, i32 0
  %427 = load double, ptr %426, align 8, !tbaa !13
  %428 = fmul double %422, %427
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  store double %428, ptr %429, align 8, !tbaa !13
  %430 = load ptr, ptr %26, align 8, !tbaa !5
  %431 = load i64, ptr %35, align 8, !tbaa !9
  %432 = getelementptr inbounds double, ptr %430, i64 %431
  %433 = load double, ptr %432, align 8, !tbaa !11
  %434 = load ptr, ptr %25, align 8, !tbaa !5
  %435 = load i64, ptr %34, align 8, !tbaa !9
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %434, i64 %435
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %436, i32 0, i32 1
  %438 = load double, ptr %437, align 8, !tbaa !22
  %439 = fmul double %433, %438
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  store double %439, ptr %440, align 8, !tbaa !22
  %441 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  %442 = load double, ptr %441, align 8, !tbaa !13
  %443 = load ptr, ptr %25, align 8, !tbaa !5
  %444 = load i64, ptr %33, align 8, !tbaa !9
  %445 = getelementptr inbounds %struct.doublecomplex, ptr %443, i64 %444
  %446 = getelementptr inbounds %struct.doublecomplex, ptr %445, i32 0, i32 0
  store double %442, ptr %446, align 8, !tbaa !13
  %447 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  %448 = load double, ptr %447, align 8, !tbaa !22
  %449 = load ptr, ptr %25, align 8, !tbaa !5
  %450 = load i64, ptr %33, align 8, !tbaa !9
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %449, i64 %450
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %451, i32 0, i32 1
  store double %448, ptr %452, align 8, !tbaa !22
  br label %453

453:                                              ; preds = %415
  %454 = load i64, ptr %40, align 8, !tbaa !9
  %455 = add nsw i64 %454, 1
  store i64 %455, ptr %40, align 8, !tbaa !9
  br label %411, !llvm.loop !23

456:                                              ; preds = %411
  %457 = load i64, ptr %47, align 8, !tbaa !9
  %458 = icmp ne i64 %457, 0
  br i1 %458, label %459, label %472

459:                                              ; preds = %456
  %460 = load ptr, ptr %16, align 8, !tbaa !5
  %461 = load ptr, ptr %19, align 8, !tbaa !5
  %462 = load i64, ptr %31, align 8, !tbaa !9
  %463 = getelementptr inbounds %struct.doublecomplex, ptr %461, i64 %462
  %464 = load ptr, ptr %20, align 8, !tbaa !5
  %465 = load ptr, ptr %21, align 8, !tbaa !5
  %466 = getelementptr inbounds i64, ptr %465, i64 1
  %467 = load ptr, ptr %25, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.doublecomplex, ptr %467, i64 1
  %469 = load ptr, ptr %16, align 8, !tbaa !5
  %470 = load ptr, ptr %24, align 8, !tbaa !5
  %471 = call i32 @zgetrs_(ptr noundef @.str.4, ptr noundef %460, ptr noundef @c__1, ptr noundef %463, ptr noundef %464, ptr noundef %466, ptr noundef %468, ptr noundef %469, ptr noundef %470)
  br label %485

472:                                              ; preds = %456
  %473 = load ptr, ptr %16, align 8, !tbaa !5
  %474 = load ptr, ptr %19, align 8, !tbaa !5
  %475 = load i64, ptr %31, align 8, !tbaa !9
  %476 = getelementptr inbounds %struct.doublecomplex, ptr %474, i64 %475
  %477 = load ptr, ptr %20, align 8, !tbaa !5
  %478 = load ptr, ptr %21, align 8, !tbaa !5
  %479 = getelementptr inbounds i64, ptr %478, i64 1
  %480 = load ptr, ptr %25, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %480, i64 1
  %482 = load ptr, ptr %16, align 8, !tbaa !5
  %483 = load ptr, ptr %24, align 8, !tbaa !5
  %484 = call i32 @zgetrs_(ptr noundef @.str.5, ptr noundef %473, ptr noundef @c__1, ptr noundef %476, ptr noundef %477, ptr noundef %479, ptr noundef %481, ptr noundef %482, ptr noundef %483)
  br label %485

485:                                              ; preds = %472, %459
  %486 = load ptr, ptr %23, align 8, !tbaa !5
  %487 = load i64, ptr %486, align 8, !tbaa !9
  %488 = icmp ne i64 %487, 0
  br i1 %488, label %489, label %538

489:                                              ; preds = %485
  %490 = load ptr, ptr %16, align 8, !tbaa !5
  %491 = load i64, ptr %490, align 8, !tbaa !9
  store i64 %491, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %492

492:                                              ; preds = %534, %489
  %493 = load i64, ptr %40, align 8, !tbaa !9
  %494 = load i64, ptr %32, align 8, !tbaa !9
  %495 = icmp sle i64 %493, %494
  br i1 %495, label %496, label %537

496:                                              ; preds = %492
  %497 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %497, ptr %33, align 8, !tbaa !9
  %498 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %498, ptr %34, align 8, !tbaa !9
  %499 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %499, ptr %35, align 8, !tbaa !9
  %500 = load ptr, ptr %22, align 8, !tbaa !5
  %501 = load i64, ptr %35, align 8, !tbaa !9
  %502 = getelementptr inbounds double, ptr %500, i64 %501
  %503 = load double, ptr %502, align 8, !tbaa !11
  %504 = load ptr, ptr %25, align 8, !tbaa !5
  %505 = load i64, ptr %34, align 8, !tbaa !9
  %506 = getelementptr inbounds %struct.doublecomplex, ptr %504, i64 %505
  %507 = getelementptr inbounds %struct.doublecomplex, ptr %506, i32 0, i32 0
  %508 = load double, ptr %507, align 8, !tbaa !13
  %509 = fmul double %503, %508
  %510 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  store double %509, ptr %510, align 8, !tbaa !13
  %511 = load ptr, ptr %22, align 8, !tbaa !5
  %512 = load i64, ptr %35, align 8, !tbaa !9
  %513 = getelementptr inbounds double, ptr %511, i64 %512
  %514 = load double, ptr %513, align 8, !tbaa !11
  %515 = load ptr, ptr %25, align 8, !tbaa !5
  %516 = load i64, ptr %34, align 8, !tbaa !9
  %517 = getelementptr inbounds %struct.doublecomplex, ptr %515, i64 %516
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %517, i32 0, i32 1
  %519 = load double, ptr %518, align 8, !tbaa !22
  %520 = fmul double %514, %519
  %521 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  store double %520, ptr %521, align 8, !tbaa !22
  %522 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  %523 = load double, ptr %522, align 8, !tbaa !13
  %524 = load ptr, ptr %25, align 8, !tbaa !5
  %525 = load i64, ptr %33, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %524, i64 %525
  %527 = getelementptr inbounds %struct.doublecomplex, ptr %526, i32 0, i32 0
  store double %523, ptr %527, align 8, !tbaa !13
  %528 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  %529 = load double, ptr %528, align 8, !tbaa !22
  %530 = load ptr, ptr %25, align 8, !tbaa !5
  %531 = load i64, ptr %33, align 8, !tbaa !9
  %532 = getelementptr inbounds %struct.doublecomplex, ptr %530, i64 %531
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %532, i32 0, i32 1
  store double %529, ptr %533, align 8, !tbaa !22
  br label %534

534:                                              ; preds = %496
  %535 = load i64, ptr %40, align 8, !tbaa !9
  %536 = add nsw i64 %535, 1
  store i64 %536, ptr %40, align 8, !tbaa !9
  br label %492, !llvm.loop !24

537:                                              ; preds = %492
  br label %538

538:                                              ; preds = %537, %485
  br label %670

539:                                              ; preds = %405
  %540 = load ptr, ptr %23, align 8, !tbaa !5
  %541 = load i64, ptr %540, align 8, !tbaa !9
  %542 = icmp ne i64 %541, 0
  br i1 %542, label %543, label %592

543:                                              ; preds = %539
  %544 = load ptr, ptr %16, align 8, !tbaa !5
  %545 = load i64, ptr %544, align 8, !tbaa !9
  store i64 %545, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %546

546:                                              ; preds = %588, %543
  %547 = load i64, ptr %40, align 8, !tbaa !9
  %548 = load i64, ptr %32, align 8, !tbaa !9
  %549 = icmp sle i64 %547, %548
  br i1 %549, label %550, label %591

550:                                              ; preds = %546
  %551 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %551, ptr %33, align 8, !tbaa !9
  %552 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %552, ptr %34, align 8, !tbaa !9
  %553 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %553, ptr %35, align 8, !tbaa !9
  %554 = load ptr, ptr %22, align 8, !tbaa !5
  %555 = load i64, ptr %35, align 8, !tbaa !9
  %556 = getelementptr inbounds double, ptr %554, i64 %555
  %557 = load double, ptr %556, align 8, !tbaa !11
  %558 = load ptr, ptr %25, align 8, !tbaa !5
  %559 = load i64, ptr %34, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.doublecomplex, ptr %558, i64 %559
  %561 = getelementptr inbounds %struct.doublecomplex, ptr %560, i32 0, i32 0
  %562 = load double, ptr %561, align 8, !tbaa !13
  %563 = fmul double %557, %562
  %564 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  store double %563, ptr %564, align 8, !tbaa !13
  %565 = load ptr, ptr %22, align 8, !tbaa !5
  %566 = load i64, ptr %35, align 8, !tbaa !9
  %567 = getelementptr inbounds double, ptr %565, i64 %566
  %568 = load double, ptr %567, align 8, !tbaa !11
  %569 = load ptr, ptr %25, align 8, !tbaa !5
  %570 = load i64, ptr %34, align 8, !tbaa !9
  %571 = getelementptr inbounds %struct.doublecomplex, ptr %569, i64 %570
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %571, i32 0, i32 1
  %573 = load double, ptr %572, align 8, !tbaa !22
  %574 = fmul double %568, %573
  %575 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  store double %574, ptr %575, align 8, !tbaa !22
  %576 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  %577 = load double, ptr %576, align 8, !tbaa !13
  %578 = load ptr, ptr %25, align 8, !tbaa !5
  %579 = load i64, ptr %33, align 8, !tbaa !9
  %580 = getelementptr inbounds %struct.doublecomplex, ptr %578, i64 %579
  %581 = getelementptr inbounds %struct.doublecomplex, ptr %580, i32 0, i32 0
  store double %577, ptr %581, align 8, !tbaa !13
  %582 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  %583 = load double, ptr %582, align 8, !tbaa !22
  %584 = load ptr, ptr %25, align 8, !tbaa !5
  %585 = load i64, ptr %33, align 8, !tbaa !9
  %586 = getelementptr inbounds %struct.doublecomplex, ptr %584, i64 %585
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %586, i32 0, i32 1
  store double %583, ptr %587, align 8, !tbaa !22
  br label %588

588:                                              ; preds = %550
  %589 = load i64, ptr %40, align 8, !tbaa !9
  %590 = add nsw i64 %589, 1
  store i64 %590, ptr %40, align 8, !tbaa !9
  br label %546, !llvm.loop !25

591:                                              ; preds = %546
  br label %592

592:                                              ; preds = %591, %539
  %593 = load i64, ptr %47, align 8, !tbaa !9
  %594 = icmp ne i64 %593, 0
  br i1 %594, label %595, label %608

595:                                              ; preds = %592
  %596 = load ptr, ptr %16, align 8, !tbaa !5
  %597 = load ptr, ptr %19, align 8, !tbaa !5
  %598 = load i64, ptr %31, align 8, !tbaa !9
  %599 = getelementptr inbounds %struct.doublecomplex, ptr %597, i64 %598
  %600 = load ptr, ptr %20, align 8, !tbaa !5
  %601 = load ptr, ptr %21, align 8, !tbaa !5
  %602 = getelementptr inbounds i64, ptr %601, i64 1
  %603 = load ptr, ptr %25, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %603, i64 1
  %605 = load ptr, ptr %16, align 8, !tbaa !5
  %606 = load ptr, ptr %24, align 8, !tbaa !5
  %607 = call i32 @zgetrs_(ptr noundef @.str.5, ptr noundef %596, ptr noundef @c__1, ptr noundef %599, ptr noundef %600, ptr noundef %602, ptr noundef %604, ptr noundef %605, ptr noundef %606)
  br label %621

608:                                              ; preds = %592
  %609 = load ptr, ptr %16, align 8, !tbaa !5
  %610 = load ptr, ptr %19, align 8, !tbaa !5
  %611 = load i64, ptr %31, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %610, i64 %611
  %613 = load ptr, ptr %20, align 8, !tbaa !5
  %614 = load ptr, ptr %21, align 8, !tbaa !5
  %615 = getelementptr inbounds i64, ptr %614, i64 1
  %616 = load ptr, ptr %25, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.doublecomplex, ptr %616, i64 1
  %618 = load ptr, ptr %16, align 8, !tbaa !5
  %619 = load ptr, ptr %24, align 8, !tbaa !5
  %620 = call i32 @zgetrs_(ptr noundef @.str.4, ptr noundef %609, ptr noundef @c__1, ptr noundef %612, ptr noundef %613, ptr noundef %615, ptr noundef %617, ptr noundef %618, ptr noundef %619)
  br label %621

621:                                              ; preds = %608, %595
  %622 = load ptr, ptr %16, align 8, !tbaa !5
  %623 = load i64, ptr %622, align 8, !tbaa !9
  store i64 %623, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %624

624:                                              ; preds = %666, %621
  %625 = load i64, ptr %40, align 8, !tbaa !9
  %626 = load i64, ptr %32, align 8, !tbaa !9
  %627 = icmp sle i64 %625, %626
  br i1 %627, label %628, label %669

628:                                              ; preds = %624
  %629 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %629, ptr %33, align 8, !tbaa !9
  %630 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %630, ptr %34, align 8, !tbaa !9
  %631 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %631, ptr %35, align 8, !tbaa !9
  %632 = load ptr, ptr %26, align 8, !tbaa !5
  %633 = load i64, ptr %35, align 8, !tbaa !9
  %634 = getelementptr inbounds double, ptr %632, i64 %633
  %635 = load double, ptr %634, align 8, !tbaa !11
  %636 = load ptr, ptr %25, align 8, !tbaa !5
  %637 = load i64, ptr %34, align 8, !tbaa !9
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %636, i64 %637
  %639 = getelementptr inbounds %struct.doublecomplex, ptr %638, i32 0, i32 0
  %640 = load double, ptr %639, align 8, !tbaa !13
  %641 = fmul double %635, %640
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  store double %641, ptr %642, align 8, !tbaa !13
  %643 = load ptr, ptr %26, align 8, !tbaa !5
  %644 = load i64, ptr %35, align 8, !tbaa !9
  %645 = getelementptr inbounds double, ptr %643, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !11
  %647 = load ptr, ptr %25, align 8, !tbaa !5
  %648 = load i64, ptr %34, align 8, !tbaa !9
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %647, i64 %648
  %650 = getelementptr inbounds %struct.doublecomplex, ptr %649, i32 0, i32 1
  %651 = load double, ptr %650, align 8, !tbaa !22
  %652 = fmul double %646, %651
  %653 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  store double %652, ptr %653, align 8, !tbaa !22
  %654 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 0
  %655 = load double, ptr %654, align 8, !tbaa !13
  %656 = load ptr, ptr %25, align 8, !tbaa !5
  %657 = load i64, ptr %33, align 8, !tbaa !9
  %658 = getelementptr inbounds %struct.doublecomplex, ptr %656, i64 %657
  %659 = getelementptr inbounds %struct.doublecomplex, ptr %658, i32 0, i32 0
  store double %655, ptr %659, align 8, !tbaa !13
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %39, i32 0, i32 1
  %661 = load double, ptr %660, align 8, !tbaa !22
  %662 = load ptr, ptr %25, align 8, !tbaa !5
  %663 = load i64, ptr %33, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.doublecomplex, ptr %662, i64 %663
  %665 = getelementptr inbounds %struct.doublecomplex, ptr %664, i32 0, i32 1
  store double %661, ptr %665, align 8, !tbaa !22
  br label %666

666:                                              ; preds = %628
  %667 = load i64, ptr %40, align 8, !tbaa !9
  %668 = add nsw i64 %667, 1
  store i64 %668, ptr %40, align 8, !tbaa !9
  br label %624, !llvm.loop !26

669:                                              ; preds = %624
  br label %670

670:                                              ; preds = %669, %538
  br label %392

671:                                              ; preds = %392
  %672 = load double, ptr %46, align 8, !tbaa !11
  %673 = fcmp une double %672, 0.000000e+00
  br i1 %673, label %674, label %677

674:                                              ; preds = %671
  %675 = load double, ptr %46, align 8, !tbaa !11
  %676 = fdiv double 1.000000e+00, %675
  store double %676, ptr %36, align 8, !tbaa !11
  br label %677

677:                                              ; preds = %674, %671
  %678 = load double, ptr %36, align 8, !tbaa !11
  store double %678, ptr %14, align 8
  store i32 1, ptr %48, align 4
  br label %679

679:                                              ; preds = %677, %388, %383, %98
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  %680 = load double, ptr %14, align 8
  ret double %680
}

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

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

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

declare double @d_imag(ptr noundef) #2

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

declare i32 @zgetrs_(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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!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 = !{!14, !12, i64 8}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !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 [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local double @zla_gercond_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, i64 noundef %12) local_unnamed_addr #0 {
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca [3 x i64], align 16
  %17 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #3
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #3
  %18 = load i64, ptr %3, align 8, !tbaa !5
  %19 = xor i64 %18, -1
  %20 = getelementptr inbounds %struct.doublecomplex, ptr %2, i64 %19
  %21 = getelementptr inbounds i8, ptr %7, i64 -8
  %22 = getelementptr inbounds i8, ptr %10, i64 -16
  %23 = getelementptr inbounds i8, ptr %11, i64 -8
  store i64 0, ptr %9, align 8, !tbaa !5
  %24 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #3
  %.not = icmp eq i64 %24, 0
  br i1 %.not, label %25, label %29

25:                                               ; preds = %13
  %26 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #3
  %.not270 = icmp eq i64 %26, 0
  br i1 %.not270, label %27, label %29

27:                                               ; preds = %25
  %28 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #3
  %.not271 = icmp eq i64 %28, 0
  br i1 %.not271, label %.thread289, label %29

29:                                               ; preds = %27, %25, %13
  %30 = load i64, ptr %1, align 8, !tbaa !5
  %31 = icmp slt i64 %30, 0
  br i1 %31, label %.thread, label %32

.thread:                                          ; preds = %29
  store i64 -2, ptr %9, align 8, !tbaa !5
  br label %33

32:                                               ; preds = %29
  %.pr = load i64, ptr %9, align 8, !tbaa !5
  %.not272 = icmp eq i64 %.pr, 0
  br i1 %.not272, label %37, label %33

.thread289:                                       ; preds = %27
  %.pr290 = load i64, ptr %9, align 8, !tbaa !5
  %.not272291 = icmp eq i64 %.pr290, 0
  br i1 %.not272291, label %.thread289..thread292_crit_edge, label %33

.thread289..thread292_crit_edge:                  ; preds = %.thread289
  %.pre = load i64, ptr %1, align 8, !tbaa !5
  br label %.thread292

33:                                               ; preds = %.thread289, %.thread, %32
  %34 = phi i64 [ -2, %.thread ], [ %.pr, %32 ], [ %.pr290, %.thread289 ]
  %35 = sub nsw i64 0, %34
  store i64 %35, ptr %14, align 8, !tbaa !5
  %36 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %14) #3
  br label %273

37:                                               ; preds = %32
  br i1 %.not, label %.thread292, label %38

38:                                               ; preds = %37
  %.not277309 = icmp eq i64 %30, 0
  br i1 %.not277309, label %.loopexit297, label %.lr.ph313

.lr.ph313:                                        ; preds = %38, %.loopexit298
  %.0252312 = phi double [ %78, %.loopexit298 ], [ 0.000000e+00, %38 ]
  %.0260310 = phi i64 [ %79, %.loopexit298 ], [ 1, %38 ]
  %39 = load i64, ptr %8, align 8, !tbaa !5
  %.not285 = icmp eq i64 %39, 0
  %40 = load i64, ptr %1, align 8, !tbaa !5
  %.not286304 = icmp slt i64 %40, 1
  br i1 %.not285, label %60, label %41

41:                                               ; preds = %.lr.ph313
  br i1 %.not286304, label %.loopexit298, label %.lr.ph

.lr.ph:                                           ; preds = %41
  %42 = getelementptr %struct.doublecomplex, ptr %20, i64 %.0260310
  br label %43

43:                                               ; preds = %.lr.ph, %43
  %.0253303 = phi double [ 0.000000e+00, %.lr.ph ], [ %58, %43 ]
  %.0256302 = phi i64 [ 1, %.lr.ph ], [ %59, %43 ]
  %44 = mul nsw i64 %.0256302, %18
  %45 = getelementptr %struct.doublecomplex, ptr %42, i64 %44
  %46 = load double, ptr %45, align 8, !tbaa !9
  %47 = tail call double @d_imag(ptr noundef nonnull %45) #3
  %48 = insertelement <2 x double> poison, double %46, i64 0
  %49 = insertelement <2 x double> %48, double %47, i64 1
  %50 = fcmp oge <2 x double> %49, zeroinitializer
  %51 = fneg <2 x double> %49
  %52 = select <2 x i1> %50, <2 x double> %49, <2 x double> %51
  %shift = shufflevector <2 x double> %52, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %53 = fadd <2 x double> %52, %shift
  %54 = extractelement <2 x double> %53, i64 0
  %55 = getelementptr inbounds double, ptr %21, i64 %.0256302
  %56 = load double, ptr %55, align 8, !tbaa !12
  %57 = fdiv double %54, %56
  %58 = fadd double %.0253303, %57
  %59 = add nuw i64 %.0256302, 1
  %exitcond.not = icmp eq i64 %.0256302, %40
  br i1 %exitcond.not, label %.loopexit298, label %43, !llvm.loop !13

60:                                               ; preds = %.lr.ph313
  br i1 %.not286304, label %.loopexit298, label %.lr.ph307

.lr.ph307:                                        ; preds = %60
  %61 = getelementptr %struct.doublecomplex, ptr %20, i64 %.0260310
  br label %62

62:                                               ; preds = %.lr.ph307, %62
  %.1254306 = phi double [ 0.000000e+00, %.lr.ph307 ], [ %74, %62 ]
  %.1257305 = phi i64 [ 1, %.lr.ph307 ], [ %75, %62 ]
  %63 = mul nsw i64 %.1257305, %18
  %64 = getelementptr %struct.doublecomplex, ptr %61, i64 %63
  %65 = load double, ptr %64, align 8, !tbaa !9
  %66 = tail call double @d_imag(ptr noundef nonnull %64) #3
  %67 = insertelement <2 x double> poison, double %65, i64 0
  %68 = insertelement <2 x double> %67, double %66, i64 1
  %69 = fcmp oge <2 x double> %68, zeroinitializer
  %70 = fneg <2 x double> %68
  %71 = select <2 x i1> %69, <2 x double> %68, <2 x double> %70
  %shift460 = shufflevector <2 x double> %71, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %72 = fadd <2 x double> %71, %shift460
  %73 = extractelement <2 x double> %72, i64 0
  %74 = fadd double %.1254306, %73
  %75 = add nuw i64 %.1257305, 1
  %exitcond357.not = icmp eq i64 %.1257305, %40
  br i1 %exitcond357.not, label %.loopexit298, label %62, !llvm.loop !15

.loopexit298:                                     ; preds = %43, %62, %41, %60
  %.2255 = phi double [ 0.000000e+00, %60 ], [ 0.000000e+00, %41 ], [ %74, %62 ], [ %58, %43 ]
  %76 = getelementptr inbounds double, ptr %23, i64 %.0260310
  store double %.2255, ptr %76, align 8, !tbaa !12
  %77 = fcmp oge double %.0252312, %.2255
  %78 = select i1 %77, double %.0252312, double %.2255
  %79 = add nuw i64 %.0260310, 1
  %exitcond358.not = icmp eq i64 %.0260310, %30
  br i1 %exitcond358.not, label %.loopexit297, label %.lr.ph313, !llvm.loop !16

.thread292:                                       ; preds = %.thread289..thread292_crit_edge, %37
  %80 = phi i64 [ %.pre, %.thread289..thread292_crit_edge ], [ %30, %37 ]
  %.not273327 = icmp slt i64 %80, 1
  br i1 %.not273327, label %.loopexit297, label %.lr.ph331

.lr.ph331:                                        ; preds = %.thread292, %.loopexit295
  %.1330 = phi double [ %116, %.loopexit295 ], [ 0.000000e+00, %.thread292 ]
  %.1261328 = phi i64 [ %117, %.loopexit295 ], [ 1, %.thread292 ]
  %81 = load i64, ptr %8, align 8, !tbaa !5
  %.not274 = icmp eq i64 %81, 0
  %82 = load i64, ptr %1, align 8, !tbaa !5
  %.not275320 = icmp slt i64 %82, 1
  br i1 %.not274, label %100, label %83

83:                                               ; preds = %.lr.ph331
  br i1 %.not275320, label %.loopexit295, label %.lr.ph318

.lr.ph318:                                        ; preds = %83
  %84 = mul nsw i64 %.1261328, %18
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %20, i64 %84
  br label %85

85:                                               ; preds = %.lr.ph318, %85
  %.3317 = phi double [ 0.000000e+00, %.lr.ph318 ], [ %98, %85 ]
  %.2258316 = phi i64 [ 1, %.lr.ph318 ], [ %99, %85 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.2258316
  %86 = load double, ptr %gep, align 8, !tbaa !9
  %87 = tail call double @d_imag(ptr noundef nonnull %gep) #3
  %88 = insertelement <2 x double> poison, double %86, i64 0
  %89 = insertelement <2 x double> %88, double %87, i64 1
  %90 = fcmp oge <2 x double> %89, zeroinitializer
  %91 = fneg <2 x double> %89
  %92 = select <2 x i1> %90, <2 x double> %89, <2 x double> %91
  %shift461 = shufflevector <2 x double> %92, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %93 = fadd <2 x double> %92, %shift461
  %94 = extractelement <2 x double> %93, i64 0
  %95 = getelementptr inbounds double, ptr %21, i64 %.2258316
  %96 = load double, ptr %95, align 8, !tbaa !12
  %97 = fdiv double %94, %96
  %98 = fadd double %.3317, %97
  %99 = add nuw i64 %.2258316, 1
  %exitcond359.not = icmp eq i64 %.2258316, %82
  br i1 %exitcond359.not, label %.loopexit295, label %85, !llvm.loop !17

100:                                              ; preds = %.lr.ph331
  br i1 %.not275320, label %.loopexit295, label %.lr.ph323

.lr.ph323:                                        ; preds = %100
  %101 = mul nsw i64 %.1261328, %18
  %invariant.gep325 = getelementptr %struct.doublecomplex, ptr %20, i64 %101
  br label %102

102:                                              ; preds = %.lr.ph323, %102
  %.4322 = phi double [ 0.000000e+00, %.lr.ph323 ], [ %112, %102 ]
  %.3259321 = phi i64 [ 1, %.lr.ph323 ], [ %113, %102 ]
  %gep326 = getelementptr %struct.doublecomplex, ptr %invariant.gep325, i64 %.3259321
  %103 = load double, ptr %gep326, align 8, !tbaa !9
  %104 = tail call double @d_imag(ptr noundef nonnull %gep326) #3
  %105 = insertelement <2 x double> poison, double %103, i64 0
  %106 = insertelement <2 x double> %105, double %104, i64 1
  %107 = fcmp oge <2 x double> %106, zeroinitializer
  %108 = fneg <2 x double> %106
  %109 = select <2 x i1> %107, <2 x double> %106, <2 x double> %108
  %shift462 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %110 = fadd <2 x double> %109, %shift462
  %111 = extractelement <2 x double> %110, i64 0
  %112 = fadd double %.4322, %111
  %113 = add nuw i64 %.3259321, 1
  %exitcond360.not = icmp eq i64 %.3259321, %82
  br i1 %exitcond360.not, label %.loopexit295, label %102, !llvm.loop !18

.loopexit295:                                     ; preds = %85, %102, %83, %100
  %.5 = phi double [ 0.000000e+00, %100 ], [ 0.000000e+00, %83 ], [ %112, %102 ], [ %98, %85 ]
  %114 = getelementptr inbounds double, ptr %23, i64 %.1261328
  store double %.5, ptr %114, align 8, !tbaa !12
  %115 = fcmp oge double %.1330, %.5
  %116 = select i1 %115, double %.1330, double %.5
  %117 = add nuw i64 %.1261328, 1
  %exitcond361.not = icmp eq i64 %.1261328, %80
  br i1 %exitcond361.not, label %.loopexit297, label %.lr.ph331, !llvm.loop !19

.loopexit297:                                     ; preds = %.loopexit298, %.loopexit295, %38, %.thread292
  %.2 = phi double [ 0.000000e+00, %.thread292 ], [ 0.000000e+00, %38 ], [ %116, %.loopexit295 ], [ %78, %.loopexit298 ]
  %118 = load i64, ptr %1, align 8, !tbaa !5
  %119 = icmp eq i64 %118, 0
  br i1 %119, label %273, label %120

120:                                              ; preds = %.loopexit297
  %121 = fcmp oeq double %.2, 0.000000e+00
  br i1 %121, label %273, label %122

122:                                              ; preds = %120
  store double 0.000000e+00, ptr %17, align 8, !tbaa !12
  store i64 0, ptr %15, align 8, !tbaa !5
  %.str.4..str.5 = select i1 %.not, ptr @.str.4, ptr @.str.5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %122
  %123 = phi i64 [ %118, %122 ], [ %.be, %.loopexit.backedge ]
  %124 = getelementptr %struct.doublecomplex, ptr %10, i64 %123
  %125 = call i32 @zlacn2_(ptr noundef nonnull %1, ptr noundef %124, ptr noundef %10, ptr noundef nonnull %17, ptr noundef nonnull %15, ptr noundef nonnull %16) #3
  %126 = load i64, ptr %15, align 8, !tbaa !5
  switch i64 %126, label %199 [
    i64 0, label %269
    i64 2, label %127
  ]

127:                                              ; preds = %.loopexit
  %128 = load i64, ptr %1, align 8, !tbaa !5
  %.not282333 = icmp slt i64 %128, 1
  br i1 %.not282333, label %._crit_edge, label %.lr.ph335.preheader

.lr.ph335.preheader:                              ; preds = %127
  %min.iters.check444 = icmp eq i64 %128, 1
  br i1 %min.iters.check444, label %.lr.ph335.preheader467, label %vector.memcheck436

vector.memcheck436:                               ; preds = %.lr.ph335.preheader
  %129 = shl i64 %128, 4
  %scevgep437 = getelementptr i8, ptr %10, i64 %129
  %130 = shl i64 %128, 3
  %scevgep438 = getelementptr i8, ptr %11, i64 %130
  %bound0439 = icmp ugt ptr %scevgep438, %10
  %bound1440 = icmp ugt ptr %scevgep437, %11
  %found.conflict441 = and i1 %bound0439, %bound1440
  br i1 %found.conflict441, label %.lr.ph335.preheader467, label %vector.ph445

vector.ph445:                                     ; preds = %vector.memcheck436
  %n.vec447 = and i64 %128, 9223372036854775806
  %ind.end448 = or i64 %128, 1
  br label %vector.body450

vector.body450:                                   ; preds = %vector.body450, %vector.ph445
  %index451 = phi i64 [ 0, %vector.ph445 ], [ %index.next458, %vector.body450 ]
  %131 = getelementptr double, ptr %11, i64 %index451
  %wide.load453 = load <2 x double>, ptr %131, align 8, !tbaa !12, !alias.scope !20
  %132 = getelementptr %struct.doublecomplex, ptr %10, i64 %index451
  %wide.vec454 = load <4 x double>, ptr %132, align 8, !tbaa !12
  %strided.vec455 = shufflevector <4 x double> %wide.vec454, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec456 = shufflevector <4 x double> %wide.vec454, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %133 = fmul <2 x double> %wide.load453, %strided.vec455
  %134 = fmul <2 x double> %wide.load453, %strided.vec456
  %interleaved.vec457 = shufflevector <2 x double> %133, <2 x double> %134, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec457, ptr %132, align 8, !tbaa !12
  %index.next458 = add nuw i64 %index451, 2
  %135 = icmp eq i64 %index.next458, %n.vec447
  br i1 %135, label %middle.block442, label %vector.body450, !llvm.loop !23

middle.block442:                                  ; preds = %vector.body450
  %cmp.n459 = icmp eq i64 %128, %n.vec447
  br i1 %cmp.n459, label %._crit_edge, label %.lr.ph335.preheader467

.lr.ph335.preheader467:                           ; preds = %middle.block442, %vector.memcheck436, %.lr.ph335.preheader
  %.2262334.ph = phi i64 [ 1, %vector.memcheck436 ], [ 1, %.lr.ph335.preheader ], [ %ind.end448, %middle.block442 ]
  %xtraiter = and i64 %128, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph335.prol.loopexit, label %.lr.ph335.prol

.lr.ph335.prol:                                   ; preds = %.lr.ph335.preheader467
  %136 = getelementptr inbounds double, ptr %23, i64 %.2262334.ph
  %137 = load double, ptr %136, align 8, !tbaa !12
  %138 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.2262334.ph
  %139 = load <2 x double>, ptr %138, align 8, !tbaa !12
  %140 = insertelement <2 x double> poison, double %137, i64 0
  %141 = shufflevector <2 x double> %140, <2 x double> poison, <2 x i32> zeroinitializer
  %142 = fmul <2 x double> %141, %139
  store <2 x double> %142, ptr %138, align 8, !tbaa !12
  %143 = add nuw i64 %.2262334.ph, 1
  br label %.lr.ph335.prol.loopexit

.lr.ph335.prol.loopexit:                          ; preds = %.lr.ph335.prol, %.lr.ph335.preheader467
  %.2262334.unr = phi i64 [ %.2262334.ph, %.lr.ph335.preheader467 ], [ %143, %.lr.ph335.prol ]
  %144 = icmp eq i64 %128, %.2262334.ph
  br i1 %144, label %._crit_edge, label %.lr.ph335

.lr.ph335:                                        ; preds = %.lr.ph335.prol.loopexit, %.lr.ph335
  %.2262334 = phi i64 [ %160, %.lr.ph335 ], [ %.2262334.unr, %.lr.ph335.prol.loopexit ]
  %145 = getelementptr inbounds double, ptr %23, i64 %.2262334
  %146 = load double, ptr %145, align 8, !tbaa !12
  %147 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.2262334
  %148 = load <2 x double>, ptr %147, align 8, !tbaa !12
  %149 = insertelement <2 x double> poison, double %146, i64 0
  %150 = shufflevector <2 x double> %149, <2 x double> poison, <2 x i32> zeroinitializer
  %151 = fmul <2 x double> %150, %148
  store <2 x double> %151, ptr %147, align 8, !tbaa !12
  %152 = add nuw i64 %.2262334, 1
  %153 = getelementptr double, ptr %11, i64 %.2262334
  %154 = load double, ptr %153, align 8, !tbaa !12
  %155 = getelementptr %struct.doublecomplex, ptr %10, i64 %.2262334
  %156 = load <2 x double>, ptr %155, align 8, !tbaa !12
  %157 = insertelement <2 x double> poison, double %154, i64 0
  %158 = shufflevector <2 x double> %157, <2 x double> poison, <2 x i32> zeroinitializer
  %159 = fmul <2 x double> %158, %156
  store <2 x double> %159, ptr %155, align 8, !tbaa !12
  %160 = add nuw i64 %.2262334, 2
  %exitcond362.not.1 = icmp eq i64 %152, %128
  br i1 %exitcond362.not.1, label %._crit_edge, label %.lr.ph335, !llvm.loop !26

._crit_edge:                                      ; preds = %.lr.ph335.prol.loopexit, %.lr.ph335, %middle.block442, %127
  br i1 %.not, label %163, label %161

161:                                              ; preds = %._crit_edge
  %162 = call i32 @zgetrs_(ptr noundef nonnull @.str.4, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %10, ptr noundef nonnull %1, ptr noundef nonnull %9) #3
  br label %165

163:                                              ; preds = %._crit_edge
  %164 = call i32 @zgetrs_(ptr noundef nonnull @.str.5, 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) #3
  br label %165

165:                                              ; preds = %163, %161
  %166 = load i64, ptr %8, align 8, !tbaa !5
  %.not283 = icmp eq i64 %166, 0
  %.pre366.pre = load i64, ptr %1, align 8, !tbaa !5
  %.not284336 = icmp slt i64 %.pre366.pre, 1
  %or.cond = select i1 %.not283, i1 true, i1 %.not284336
  br i1 %or.cond, label %.loopexit.backedge, label %.lr.ph339.preheader

.lr.ph339.preheader:                              ; preds = %165
  %min.iters.check420 = icmp ult i64 %.pre366.pre, 2
  br i1 %min.iters.check420, label %.lr.ph339.preheader465, label %vector.memcheck412

vector.memcheck412:                               ; preds = %.lr.ph339.preheader
  %167 = shl i64 %.pre366.pre, 4
  %scevgep413 = getelementptr i8, ptr %10, i64 %167
  %168 = shl i64 %.pre366.pre, 3
  %scevgep414 = getelementptr i8, ptr %7, i64 %168
  %bound0415 = icmp ugt ptr %scevgep414, %10
  %bound1416 = icmp ugt ptr %scevgep413, %7
  %found.conflict417 = and i1 %bound0415, %bound1416
  br i1 %found.conflict417, label %.lr.ph339.preheader465, label %vector.ph421

vector.ph421:                                     ; preds = %vector.memcheck412
  %n.vec423 = and i64 %.pre366.pre, 9223372036854775806
  %ind.end424 = or i64 %.pre366.pre, 1
  br label %vector.body426

vector.body426:                                   ; preds = %vector.body426, %vector.ph421
  %index427 = phi i64 [ 0, %vector.ph421 ], [ %index.next434, %vector.body426 ]
  %169 = getelementptr double, ptr %7, i64 %index427
  %wide.load429 = load <2 x double>, ptr %169, align 8, !tbaa !12, !alias.scope !27
  %170 = getelementptr %struct.doublecomplex, ptr %10, i64 %index427
  %wide.vec430 = load <4 x double>, ptr %170, align 8, !tbaa !12
  %strided.vec431 = shufflevector <4 x double> %wide.vec430, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec432 = shufflevector <4 x double> %wide.vec430, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %171 = fmul <2 x double> %wide.load429, %strided.vec431
  %172 = fmul <2 x double> %wide.load429, %strided.vec432
  %interleaved.vec433 = shufflevector <2 x double> %171, <2 x double> %172, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec433, ptr %170, align 8, !tbaa !12
  %index.next434 = add nuw i64 %index427, 2
  %173 = icmp eq i64 %index.next434, %n.vec423
  br i1 %173, label %middle.block418, label %vector.body426, !llvm.loop !30

middle.block418:                                  ; preds = %vector.body426
  %cmp.n435 = icmp eq i64 %.pre366.pre, %n.vec423
  br i1 %cmp.n435, label %.loopexit.backedge, label %.lr.ph339.preheader465

.loopexit.backedge:                               ; preds = %.lr.ph339.prol.loopexit, %.lr.ph339, %.lr.ph347.prol.loopexit, %.lr.ph347, %middle.block418, %middle.block, %.loopexit293, %165
  %.be = phi i64 [ %236, %.loopexit293 ], [ %.pre366.pre, %165 ], [ %236, %middle.block ], [ %.pre366.pre, %middle.block418 ], [ %236, %.lr.ph347 ], [ %236, %.lr.ph347.prol.loopexit ], [ %.pre366.pre, %.lr.ph339 ], [ %.pre366.pre, %.lr.ph339.prol.loopexit ]
  br label %.loopexit

.lr.ph339.preheader465:                           ; preds = %middle.block418, %vector.memcheck412, %.lr.ph339.preheader
  %.3263337.ph = phi i64 [ 1, %vector.memcheck412 ], [ 1, %.lr.ph339.preheader ], [ %ind.end424, %middle.block418 ]
  %xtraiter476 = and i64 %.pre366.pre, 1
  %lcmp.mod477.not = icmp eq i64 %xtraiter476, 0
  br i1 %lcmp.mod477.not, label %.lr.ph339.prol.loopexit, label %.lr.ph339.prol

.lr.ph339.prol:                                   ; preds = %.lr.ph339.preheader465
  %174 = getelementptr inbounds double, ptr %21, i64 %.3263337.ph
  %175 = load double, ptr %174, align 8, !tbaa !12
  %176 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.3263337.ph
  %177 = load <2 x double>, ptr %176, align 8, !tbaa !12
  %178 = insertelement <2 x double> poison, double %175, i64 0
  %179 = shufflevector <2 x double> %178, <2 x double> poison, <2 x i32> zeroinitializer
  %180 = fmul <2 x double> %179, %177
  store <2 x double> %180, ptr %176, align 8, !tbaa !12
  %181 = add nuw i64 %.3263337.ph, 1
  br label %.lr.ph339.prol.loopexit

.lr.ph339.prol.loopexit:                          ; preds = %.lr.ph339.prol, %.lr.ph339.preheader465
  %.3263337.unr = phi i64 [ %.3263337.ph, %.lr.ph339.preheader465 ], [ %181, %.lr.ph339.prol ]
  %182 = icmp eq i64 %.pre366.pre, %.3263337.ph
  br i1 %182, label %.loopexit.backedge, label %.lr.ph339

.lr.ph339:                                        ; preds = %.lr.ph339.prol.loopexit, %.lr.ph339
  %.3263337 = phi i64 [ %198, %.lr.ph339 ], [ %.3263337.unr, %.lr.ph339.prol.loopexit ]
  %183 = getelementptr inbounds double, ptr %21, i64 %.3263337
  %184 = load double, ptr %183, align 8, !tbaa !12
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.3263337
  %186 = load <2 x double>, ptr %185, align 8, !tbaa !12
  %187 = insertelement <2 x double> poison, double %184, i64 0
  %188 = shufflevector <2 x double> %187, <2 x double> poison, <2 x i32> zeroinitializer
  %189 = fmul <2 x double> %188, %186
  store <2 x double> %189, ptr %185, align 8, !tbaa !12
  %190 = add nuw i64 %.3263337, 1
  %191 = getelementptr double, ptr %7, i64 %.3263337
  %192 = load double, ptr %191, align 8, !tbaa !12
  %193 = getelementptr %struct.doublecomplex, ptr %10, i64 %.3263337
  %194 = load <2 x double>, ptr %193, align 8, !tbaa !12
  %195 = insertelement <2 x double> poison, double %192, i64 0
  %196 = shufflevector <2 x double> %195, <2 x double> poison, <2 x i32> zeroinitializer
  %197 = fmul <2 x double> %196, %194
  store <2 x double> %197, ptr %193, align 8, !tbaa !12
  %198 = add nuw i64 %.3263337, 2
  %exitcond363.not.1 = icmp eq i64 %190, %.pre366.pre
  br i1 %exitcond363.not.1, label %.loopexit.backedge, label %.lr.ph339, !llvm.loop !31

199:                                              ; preds = %.loopexit
  %200 = load i64, ptr %8, align 8, !tbaa !5
  %.not279 = icmp eq i64 %200, 0
  br i1 %.not279, label %.loopexit293, label %201

201:                                              ; preds = %199
  %202 = load i64, ptr %1, align 8, !tbaa !5
  %.not280340 = icmp slt i64 %202, 1
  br i1 %.not280340, label %.loopexit293, label %.lr.ph343.preheader

.lr.ph343.preheader:                              ; preds = %201
  %min.iters.check396 = icmp eq i64 %202, 1
  br i1 %min.iters.check396, label %.lr.ph343.preheader464, label %vector.memcheck388

vector.memcheck388:                               ; preds = %.lr.ph343.preheader
  %203 = shl i64 %202, 4
  %scevgep389 = getelementptr i8, ptr %10, i64 %203
  %204 = shl i64 %202, 3
  %scevgep390 = getelementptr i8, ptr %7, i64 %204
  %bound0391 = icmp ugt ptr %scevgep390, %10
  %bound1392 = icmp ugt ptr %scevgep389, %7
  %found.conflict393 = and i1 %bound0391, %bound1392
  br i1 %found.conflict393, label %.lr.ph343.preheader464, label %vector.ph397

vector.ph397:                                     ; preds = %vector.memcheck388
  %n.vec399 = and i64 %202, 9223372036854775806
  %ind.end400 = or i64 %202, 1
  br label %vector.body402

vector.body402:                                   ; preds = %vector.body402, %vector.ph397
  %index403 = phi i64 [ 0, %vector.ph397 ], [ %index.next410, %vector.body402 ]
  %205 = getelementptr double, ptr %7, i64 %index403
  %wide.load405 = load <2 x double>, ptr %205, align 8, !tbaa !12, !alias.scope !32
  %206 = getelementptr %struct.doublecomplex, ptr %10, i64 %index403
  %wide.vec406 = load <4 x double>, ptr %206, align 8, !tbaa !12
  %strided.vec407 = shufflevector <4 x double> %wide.vec406, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec408 = shufflevector <4 x double> %wide.vec406, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %207 = fmul <2 x double> %wide.load405, %strided.vec407
  %208 = fmul <2 x double> %wide.load405, %strided.vec408
  %interleaved.vec409 = shufflevector <2 x double> %207, <2 x double> %208, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec409, ptr %206, align 8, !tbaa !12
  %index.next410 = add nuw i64 %index403, 2
  %209 = icmp eq i64 %index.next410, %n.vec399
  br i1 %209, label %middle.block394, label %vector.body402, !llvm.loop !35

middle.block394:                                  ; preds = %vector.body402
  %cmp.n411 = icmp eq i64 %202, %n.vec399
  br i1 %cmp.n411, label %.loopexit293, label %.lr.ph343.preheader464

.lr.ph343.preheader464:                           ; preds = %middle.block394, %vector.memcheck388, %.lr.ph343.preheader
  %.4264341.ph = phi i64 [ 1, %vector.memcheck388 ], [ 1, %.lr.ph343.preheader ], [ %ind.end400, %middle.block394 ]
  %xtraiter478 = and i64 %202, 1
  %lcmp.mod479.not = icmp eq i64 %xtraiter478, 0
  br i1 %lcmp.mod479.not, label %.lr.ph343.prol.loopexit, label %.lr.ph343.prol

.lr.ph343.prol:                                   ; preds = %.lr.ph343.preheader464
  %210 = getelementptr inbounds double, ptr %21, i64 %.4264341.ph
  %211 = load double, ptr %210, align 8, !tbaa !12
  %212 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.4264341.ph
  %213 = load <2 x double>, ptr %212, align 8, !tbaa !12
  %214 = insertelement <2 x double> poison, double %211, i64 0
  %215 = shufflevector <2 x double> %214, <2 x double> poison, <2 x i32> zeroinitializer
  %216 = fmul <2 x double> %215, %213
  store <2 x double> %216, ptr %212, align 8, !tbaa !12
  %217 = add nuw i64 %.4264341.ph, 1
  br label %.lr.ph343.prol.loopexit

.lr.ph343.prol.loopexit:                          ; preds = %.lr.ph343.prol, %.lr.ph343.preheader464
  %.4264341.unr = phi i64 [ %.4264341.ph, %.lr.ph343.preheader464 ], [ %217, %.lr.ph343.prol ]
  %218 = icmp eq i64 %202, %.4264341.ph
  br i1 %218, label %.loopexit293, label %.lr.ph343

.lr.ph343:                                        ; preds = %.lr.ph343.prol.loopexit, %.lr.ph343
  %.4264341 = phi i64 [ %234, %.lr.ph343 ], [ %.4264341.unr, %.lr.ph343.prol.loopexit ]
  %219 = getelementptr inbounds double, ptr %21, i64 %.4264341
  %220 = load double, ptr %219, align 8, !tbaa !12
  %221 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.4264341
  %222 = load <2 x double>, ptr %221, align 8, !tbaa !12
  %223 = insertelement <2 x double> poison, double %220, i64 0
  %224 = shufflevector <2 x double> %223, <2 x double> poison, <2 x i32> zeroinitializer
  %225 = fmul <2 x double> %224, %222
  store <2 x double> %225, ptr %221, align 8, !tbaa !12
  %226 = add nuw i64 %.4264341, 1
  %227 = getelementptr double, ptr %7, i64 %.4264341
  %228 = load double, ptr %227, align 8, !tbaa !12
  %229 = getelementptr %struct.doublecomplex, ptr %10, i64 %.4264341
  %230 = load <2 x double>, ptr %229, align 8, !tbaa !12
  %231 = insertelement <2 x double> poison, double %228, i64 0
  %232 = shufflevector <2 x double> %231, <2 x double> poison, <2 x i32> zeroinitializer
  %233 = fmul <2 x double> %232, %230
  store <2 x double> %233, ptr %229, align 8, !tbaa !12
  %234 = add nuw i64 %.4264341, 2
  %exitcond364.not.1 = icmp eq i64 %226, %202
  br i1 %exitcond364.not.1, label %.loopexit293, label %.lr.ph343, !llvm.loop !36

.loopexit293:                                     ; preds = %.lr.ph343.prol.loopexit, %.lr.ph343, %middle.block394, %201, %199
  %235 = call i32 @zgetrs_(ptr noundef nonnull %.str.4..str.5, 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) #3
  %236 = load i64, ptr %1, align 8, !tbaa !5
  %.not281344 = icmp slt i64 %236, 1
  br i1 %.not281344, label %.loopexit.backedge, label %.lr.ph347.preheader

.lr.ph347.preheader:                              ; preds = %.loopexit293
  %min.iters.check = icmp eq i64 %236, 1
  br i1 %min.iters.check, label %.lr.ph347.preheader463, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph347.preheader
  %237 = shl i64 %236, 4
  %scevgep = getelementptr i8, ptr %10, i64 %237
  %238 = shl i64 %236, 3
  %scevgep386 = getelementptr i8, ptr %11, i64 %238
  %bound0 = icmp ugt ptr %scevgep386, %10
  %bound1 = icmp ugt ptr %scevgep, %11
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph347.preheader463, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %239 = getelementptr double, ptr %11, i64 %index
  %wide.load = load <2 x double>, ptr %239, align 8, !tbaa !12, !alias.scope !37
  %240 = getelementptr %struct.doublecomplex, ptr %10, i64 %index
  %wide.vec = load <4 x double>, ptr %240, align 8, !tbaa !12
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec387 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %241 = fmul <2 x double> %wide.load, %strided.vec
  %242 = fmul <2 x double> %wide.load, %strided.vec387
  %interleaved.vec = shufflevector <2 x double> %241, <2 x double> %242, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %240, align 8, !tbaa !12
  %index.next = add nuw i64 %index, 2
  %243 = icmp eq i64 %index.next, %n.vec
  br i1 %243, label %middle.block, label %vector.body, !llvm.loop !40

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %236, %n.vec
  br i1 %cmp.n, label %.loopexit.backedge, label %.lr.ph347.preheader463

.lr.ph347.preheader463:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph347.preheader
  %.5265345.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph347.preheader ], [ %ind.end, %middle.block ]
  %xtraiter480 = and i64 %236, 1
  %lcmp.mod481.not = icmp eq i64 %xtraiter480, 0
  br i1 %lcmp.mod481.not, label %.lr.ph347.prol.loopexit, label %.lr.ph347.prol

.lr.ph347.prol:                                   ; preds = %.lr.ph347.preheader463
  %244 = getelementptr inbounds double, ptr %23, i64 %.5265345.ph
  %245 = load double, ptr %244, align 8, !tbaa !12
  %246 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.5265345.ph
  %247 = load <2 x double>, ptr %246, align 8, !tbaa !12
  %248 = insertelement <2 x double> poison, double %245, i64 0
  %249 = shufflevector <2 x double> %248, <2 x double> poison, <2 x i32> zeroinitializer
  %250 = fmul <2 x double> %249, %247
  store <2 x double> %250, ptr %246, align 8, !tbaa !12
  %251 = add nuw i64 %.5265345.ph, 1
  br label %.lr.ph347.prol.loopexit

.lr.ph347.prol.loopexit:                          ; preds = %.lr.ph347.prol, %.lr.ph347.preheader463
  %.5265345.unr = phi i64 [ %.5265345.ph, %.lr.ph347.preheader463 ], [ %251, %.lr.ph347.prol ]
  %252 = icmp eq i64 %236, %.5265345.ph
  br i1 %252, label %.loopexit.backedge, label %.lr.ph347

.lr.ph347:                                        ; preds = %.lr.ph347.prol.loopexit, %.lr.ph347
  %.5265345 = phi i64 [ %268, %.lr.ph347 ], [ %.5265345.unr, %.lr.ph347.prol.loopexit ]
  %253 = getelementptr inbounds double, ptr %23, i64 %.5265345
  %254 = load double, ptr %253, align 8, !tbaa !12
  %255 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %.5265345
  %256 = load <2 x double>, ptr %255, align 8, !tbaa !12
  %257 = insertelement <2 x double> poison, double %254, i64 0
  %258 = shufflevector <2 x double> %257, <2 x double> poison, <2 x i32> zeroinitializer
  %259 = fmul <2 x double> %258, %256
  store <2 x double> %259, ptr %255, align 8, !tbaa !12
  %260 = add nuw i64 %.5265345, 1
  %261 = getelementptr double, ptr %11, i64 %.5265345
  %262 = load double, ptr %261, align 8, !tbaa !12
  %263 = getelementptr %struct.doublecomplex, ptr %10, i64 %.5265345
  %264 = load <2 x double>, ptr %263, align 8, !tbaa !12
  %265 = insertelement <2 x double> poison, double %262, i64 0
  %266 = shufflevector <2 x double> %265, <2 x double> poison, <2 x i32> zeroinitializer
  %267 = fmul <2 x double> %266, %264
  store <2 x double> %267, ptr %263, align 8, !tbaa !12
  %268 = add nuw i64 %.5265345, 2
  %exitcond365.not.1 = icmp eq i64 %260, %236
  br i1 %exitcond365.not.1, label %.loopexit.backedge, label %.lr.ph347, !llvm.loop !41

269:                                              ; preds = %.loopexit
  %270 = load double, ptr %17, align 8, !tbaa !12
  %271 = fcmp une double %270, 0.000000e+00
  %272 = fdiv double 1.000000e+00, %270
  %.0266 = select i1 %271, double %272, double 0.000000e+00
  br label %273

273:                                              ; preds = %120, %.loopexit297, %269, %33
  %.0 = phi double [ 0.000000e+00, %33 ], [ %.0266, %269 ], [ 1.000000e+00, %.loopexit297 ], [ 0.000000e+00, %120 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #3
  ret double %.0
}

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

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

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

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

declare i32 @zgetrs_(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

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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !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 = !{!21}
!21 = distinct !{!21, !22}
!22 = distinct !{!22, !"LVerDomain"}
!23 = distinct !{!23, !14, !24, !25}
!24 = !{!"llvm.loop.isvectorized", i32 1}
!25 = !{!"llvm.loop.unroll.runtime.disable"}
!26 = distinct !{!26, !14, !24}
!27 = !{!28}
!28 = distinct !{!28, !29}
!29 = distinct !{!29, !"LVerDomain"}
!30 = distinct !{!30, !14, !24, !25}
!31 = distinct !{!31, !14, !24}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = distinct !{!35, !14, !24, !25}
!36 = distinct !{!36, !14, !24}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = distinct !{!40, !14, !24, !25}
!41 = distinct !{!41, !14, !24}


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