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

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

81:                                               ; preds = %77
  %82 = load ptr, ptr %21, align 8, !tbaa !5
  store i32 -1, ptr %82, align 4, !tbaa !9
  br label %122

83:                                               ; preds = %77, %11
  %84 = load ptr, ptr %14, align 8, !tbaa !5
  %85 = load i32, ptr %84, align 4, !tbaa !9
  %86 = icmp slt i32 %85, 0
  br i1 %86, label %87, label %89

87:                                               ; preds = %83
  %88 = load ptr, ptr %21, align 8, !tbaa !5
  store i32 -2, ptr %88, align 4, !tbaa !9
  br label %121

89:                                               ; preds = %83
  %90 = load ptr, ptr %16, align 8, !tbaa !5
  %91 = load i32, ptr %90, align 4, !tbaa !9
  %92 = load ptr, ptr %14, align 8, !tbaa !5
  %93 = load i32, ptr %92, align 4, !tbaa !9
  %94 = icmp sge i32 1, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %89
  br label %99

96:                                               ; preds = %89
  %97 = load ptr, ptr %14, align 8, !tbaa !5
  %98 = load i32, ptr %97, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %96, %95
  %100 = phi i32 [ 1, %95 ], [ %98, %96 ]
  %101 = icmp slt i32 %91, %100
  br i1 %101, label %102, label %104

102:                                              ; preds = %99
  %103 = load ptr, ptr %21, align 8, !tbaa !5
  store i32 -4, ptr %103, align 4, !tbaa !9
  br label %120

104:                                              ; preds = %99
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = load ptr, ptr %14, align 8, !tbaa !5
  %108 = load i32, ptr %107, align 4, !tbaa !9
  %109 = icmp sge i32 1, %108
  br i1 %109, label %110, label %111

110:                                              ; preds = %104
  br label %114

111:                                              ; preds = %104
  %112 = load ptr, ptr %14, align 8, !tbaa !5
  %113 = load i32, ptr %112, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %111, %110
  %115 = phi i32 [ 1, %110 ], [ %113, %111 ]
  %116 = icmp slt i32 %106, %115
  br i1 %116, label %117, label %119

117:                                              ; preds = %114
  %118 = load ptr, ptr %21, align 8, !tbaa !5
  store i32 -6, ptr %118, align 4, !tbaa !9
  br label %119

119:                                              ; preds = %117, %114
  br label %120

120:                                              ; preds = %119, %102
  br label %121

121:                                              ; preds = %120, %87
  br label %122

122:                                              ; preds = %121, %81
  %123 = load ptr, ptr %21, align 8, !tbaa !5
  %124 = load i32, ptr %123, align 4, !tbaa !9
  %125 = icmp ne i32 %124, 0
  br i1 %125, label %126, label %132

126:                                              ; preds = %122
  %127 = load ptr, ptr %21, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = sub nsw i32 0, %128
  store i32 %129, ptr %28, align 4, !tbaa !9
  %130 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %28, i32 noundef 13)
  %131 = load double, ptr %32, align 8, !tbaa !11
  store double %131, ptr %12, align 8
  store i32 1, ptr %45, align 4
  br label %980

132:                                              ; preds = %122
  store i32 0, ptr %42, align 4, !tbaa !9
  %133 = load ptr, ptr %13, align 8, !tbaa !5
  %134 = call i32 @lsame_(ptr noundef %133, ptr noundef @.str)
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %136, label %137

136:                                              ; preds = %132
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %137

137:                                              ; preds = %136, %132
  store double 0.000000e+00, ptr %40, align 8, !tbaa !11
  %138 = load i32, ptr %42, align 4, !tbaa !9
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %402

140:                                              ; preds = %137
  %141 = load ptr, ptr %14, align 8, !tbaa !5
  %142 = load i32, ptr %141, align 4, !tbaa !9
  store i32 %142, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %143

143:                                              ; preds = %398, %140
  %144 = load i32, ptr %37, align 4, !tbaa !9
  %145 = load i32, ptr %28, align 4, !tbaa !9
  %146 = icmp sle i32 %144, %145
  br i1 %146, label %147, label %401

147:                                              ; preds = %143
  store double 0.000000e+00, ptr %44, align 8, !tbaa !11
  %148 = load ptr, ptr %20, align 8, !tbaa !5
  %149 = load i32, ptr %148, align 4, !tbaa !9
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %273

151:                                              ; preds = %147
  %152 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %152, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %38, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %207, %151
  %154 = load i32, ptr %38, align 4, !tbaa !9
  %155 = load i32, ptr %29, align 4, !tbaa !9
  %156 = icmp sle i32 %154, %155
  br i1 %156, label %157, label %210

157:                                              ; preds = %153
  %158 = load i32, ptr %38, align 4, !tbaa !9
  %159 = load i32, ptr %37, align 4, !tbaa !9
  %160 = load i32, ptr %24, align 4, !tbaa !9
  %161 = mul nsw i32 %159, %160
  %162 = add nsw i32 %158, %161
  store i32 %162, ptr %30, align 4, !tbaa !9
  %163 = load ptr, ptr %15, align 8, !tbaa !5
  %164 = load i32, ptr %30, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds %struct.doublecomplex, ptr %163, i64 %165
  %167 = getelementptr inbounds %struct.doublecomplex, ptr %166, i32 0, i32 0
  %168 = load double, ptr %167, align 8, !tbaa !13
  store double %168, ptr %33, align 8, !tbaa !11
  %169 = load double, ptr %33, align 8, !tbaa !11
  %170 = fcmp oge double %169, 0.000000e+00
  br i1 %170, label %171, label %173

171:                                              ; preds = %157
  %172 = load double, ptr %33, align 8, !tbaa !11
  br label %176

173:                                              ; preds = %157
  %174 = load double, ptr %33, align 8, !tbaa !11
  %175 = fneg double %174
  br label %176

176:                                              ; preds = %173, %171
  %177 = phi double [ %172, %171 ], [ %175, %173 ]
  %178 = load ptr, ptr %15, align 8, !tbaa !5
  %179 = load i32, ptr %38, align 4, !tbaa !9
  %180 = load i32, ptr %37, align 4, !tbaa !9
  %181 = load i32, ptr %24, align 4, !tbaa !9
  %182 = mul nsw i32 %180, %181
  %183 = add nsw i32 %179, %182
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %178, i64 %184
  %186 = call { double, double } @Cd(ptr noundef %185)
  %187 = extractvalue { double, double } %186, 0
  %188 = extractvalue { double, double } %186, 1
  store double %188, ptr %34, align 8, !tbaa !11
  %189 = load double, ptr %34, align 8, !tbaa !11
  %190 = fcmp oge double %189, 0.000000e+00
  br i1 %190, label %191, label %193

191:                                              ; preds = %176
  %192 = load double, ptr %34, align 8, !tbaa !11
  br label %196

193:                                              ; preds = %176
  %194 = load double, ptr %34, align 8, !tbaa !11
  %195 = fneg double %194
  br label %196

196:                                              ; preds = %193, %191
  %197 = phi double [ %192, %191 ], [ %195, %193 ]
  %198 = fadd double %177, %197
  %199 = load ptr, ptr %19, align 8, !tbaa !5
  %200 = load i32, ptr %38, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds double, ptr %199, i64 %201
  %203 = load double, ptr %202, align 8, !tbaa !11
  %204 = fdiv double %198, %203
  %205 = load double, ptr %44, align 8, !tbaa !11
  %206 = fadd double %205, %204
  store double %206, ptr %44, align 8, !tbaa !11
  br label %207

207:                                              ; preds = %196
  %208 = load i32, ptr %38, align 4, !tbaa !9
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr %38, align 4, !tbaa !9
  br label %153, !llvm.loop !15

210:                                              ; preds = %153
  %211 = load ptr, ptr %14, align 8, !tbaa !5
  %212 = load i32, ptr %211, align 4, !tbaa !9
  store i32 %212, ptr %29, align 4, !tbaa !9
  %213 = load i32, ptr %37, align 4, !tbaa !9
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %38, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %269, %210
  %216 = load i32, ptr %38, align 4, !tbaa !9
  %217 = load i32, ptr %29, align 4, !tbaa !9
  %218 = icmp sle i32 %216, %217
  br i1 %218, label %219, label %272

219:                                              ; preds = %215
  %220 = load i32, ptr %37, align 4, !tbaa !9
  %221 = load i32, ptr %38, align 4, !tbaa !9
  %222 = load i32, ptr %24, align 4, !tbaa !9
  %223 = mul nsw i32 %221, %222
  %224 = add nsw i32 %220, %223
  store i32 %224, ptr %30, align 4, !tbaa !9
  %225 = load ptr, ptr %15, align 8, !tbaa !5
  %226 = load i32, ptr %30, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds %struct.doublecomplex, ptr %225, i64 %227
  %229 = getelementptr inbounds %struct.doublecomplex, ptr %228, i32 0, i32 0
  %230 = load double, ptr %229, align 8, !tbaa !13
  store double %230, ptr %33, align 8, !tbaa !11
  %231 = load double, ptr %33, align 8, !tbaa !11
  %232 = fcmp oge double %231, 0.000000e+00
  br i1 %232, label %233, label %235

233:                                              ; preds = %219
  %234 = load double, ptr %33, align 8, !tbaa !11
  br label %238

235:                                              ; preds = %219
  %236 = load double, ptr %33, align 8, !tbaa !11
  %237 = fneg double %236
  br label %238

238:                                              ; preds = %235, %233
  %239 = phi double [ %234, %233 ], [ %237, %235 ]
  %240 = load ptr, ptr %15, align 8, !tbaa !5
  %241 = load i32, ptr %37, align 4, !tbaa !9
  %242 = load i32, ptr %38, align 4, !tbaa !9
  %243 = load i32, ptr %24, align 4, !tbaa !9
  %244 = mul nsw i32 %242, %243
  %245 = add nsw i32 %241, %244
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %240, i64 %246
  %248 = call { double, double } @Cd(ptr noundef %247)
  %249 = extractvalue { double, double } %248, 0
  %250 = extractvalue { double, double } %248, 1
  store double %250, ptr %34, align 8, !tbaa !11
  %251 = load double, ptr %34, align 8, !tbaa !11
  %252 = fcmp oge double %251, 0.000000e+00
  br i1 %252, label %253, label %255

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

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

258:                                              ; preds = %255, %253
  %259 = phi double [ %254, %253 ], [ %257, %255 ]
  %260 = fadd double %239, %259
  %261 = load ptr, ptr %19, align 8, !tbaa !5
  %262 = load i32, ptr %38, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %261, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !11
  %266 = fdiv double %260, %265
  %267 = load double, ptr %44, align 8, !tbaa !11
  %268 = fadd double %267, %266
  store double %268, ptr %44, align 8, !tbaa !11
  br label %269

269:                                              ; preds = %258
  %270 = load i32, ptr %38, align 4, !tbaa !9
  %271 = add nsw i32 %270, 1
  store i32 %271, ptr %38, align 4, !tbaa !9
  br label %215, !llvm.loop !17

272:                                              ; preds = %215
  br label %383

273:                                              ; preds = %147
  %274 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %274, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %38, align 4, !tbaa !9
  br label %275

275:                                              ; preds = %323, %273
  %276 = load i32, ptr %38, align 4, !tbaa !9
  %277 = load i32, ptr %29, align 4, !tbaa !9
  %278 = icmp sle i32 %276, %277
  br i1 %278, label %279, label %326

279:                                              ; preds = %275
  %280 = load i32, ptr %38, align 4, !tbaa !9
  %281 = load i32, ptr %37, align 4, !tbaa !9
  %282 = load i32, ptr %24, align 4, !tbaa !9
  %283 = mul nsw i32 %281, %282
  %284 = add nsw i32 %280, %283
  store i32 %284, ptr %30, align 4, !tbaa !9
  %285 = load ptr, ptr %15, align 8, !tbaa !5
  %286 = load i32, ptr %30, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %285, i64 %287
  %289 = getelementptr inbounds %struct.doublecomplex, ptr %288, i32 0, i32 0
  %290 = load double, ptr %289, align 8, !tbaa !13
  store double %290, ptr %33, align 8, !tbaa !11
  %291 = load double, ptr %33, align 8, !tbaa !11
  %292 = fcmp oge double %291, 0.000000e+00
  br i1 %292, label %293, label %295

293:                                              ; preds = %279
  %294 = load double, ptr %33, align 8, !tbaa !11
  br label %298

295:                                              ; preds = %279
  %296 = load double, ptr %33, align 8, !tbaa !11
  %297 = fneg double %296
  br label %298

298:                                              ; preds = %295, %293
  %299 = phi double [ %294, %293 ], [ %297, %295 ]
  %300 = load ptr, ptr %15, align 8, !tbaa !5
  %301 = load i32, ptr %38, align 4, !tbaa !9
  %302 = load i32, ptr %37, align 4, !tbaa !9
  %303 = load i32, ptr %24, align 4, !tbaa !9
  %304 = mul nsw i32 %302, %303
  %305 = add nsw i32 %301, %304
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds %struct.doublecomplex, ptr %300, i64 %306
  %308 = call { double, double } @Cd(ptr noundef %307)
  %309 = extractvalue { double, double } %308, 0
  %310 = extractvalue { double, double } %308, 1
  store double %310, ptr %34, align 8, !tbaa !11
  %311 = load double, ptr %34, align 8, !tbaa !11
  %312 = fcmp oge double %311, 0.000000e+00
  br i1 %312, label %313, label %315

313:                                              ; preds = %298
  %314 = load double, ptr %34, align 8, !tbaa !11
  br label %318

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

318:                                              ; preds = %315, %313
  %319 = phi double [ %314, %313 ], [ %317, %315 ]
  %320 = fadd double %299, %319
  %321 = load double, ptr %44, align 8, !tbaa !11
  %322 = fadd double %321, %320
  store double %322, ptr %44, align 8, !tbaa !11
  br label %323

323:                                              ; preds = %318
  %324 = load i32, ptr %38, align 4, !tbaa !9
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %38, align 4, !tbaa !9
  br label %275, !llvm.loop !18

326:                                              ; preds = %275
  %327 = load ptr, ptr %14, align 8, !tbaa !5
  %328 = load i32, ptr %327, align 4, !tbaa !9
  store i32 %328, ptr %29, align 4, !tbaa !9
  %329 = load i32, ptr %37, align 4, !tbaa !9
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %38, align 4, !tbaa !9
  br label %331

331:                                              ; preds = %379, %326
  %332 = load i32, ptr %38, align 4, !tbaa !9
  %333 = load i32, ptr %29, align 4, !tbaa !9
  %334 = icmp sle i32 %332, %333
  br i1 %334, label %335, label %382

335:                                              ; preds = %331
  %336 = load i32, ptr %37, align 4, !tbaa !9
  %337 = load i32, ptr %38, align 4, !tbaa !9
  %338 = load i32, ptr %24, align 4, !tbaa !9
  %339 = mul nsw i32 %337, %338
  %340 = add nsw i32 %336, %339
  store i32 %340, ptr %30, align 4, !tbaa !9
  %341 = load ptr, ptr %15, align 8, !tbaa !5
  %342 = load i32, ptr %30, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds %struct.doublecomplex, ptr %341, i64 %343
  %345 = getelementptr inbounds %struct.doublecomplex, ptr %344, i32 0, i32 0
  %346 = load double, ptr %345, align 8, !tbaa !13
  store double %346, ptr %33, align 8, !tbaa !11
  %347 = load double, ptr %33, align 8, !tbaa !11
  %348 = fcmp oge double %347, 0.000000e+00
  br i1 %348, label %349, label %351

349:                                              ; preds = %335
  %350 = load double, ptr %33, align 8, !tbaa !11
  br label %354

351:                                              ; preds = %335
  %352 = load double, ptr %33, align 8, !tbaa !11
  %353 = fneg double %352
  br label %354

354:                                              ; preds = %351, %349
  %355 = phi double [ %350, %349 ], [ %353, %351 ]
  %356 = load ptr, ptr %15, align 8, !tbaa !5
  %357 = load i32, ptr %37, align 4, !tbaa !9
  %358 = load i32, ptr %38, align 4, !tbaa !9
  %359 = load i32, ptr %24, align 4, !tbaa !9
  %360 = mul nsw i32 %358, %359
  %361 = add nsw i32 %357, %360
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds %struct.doublecomplex, ptr %356, i64 %362
  %364 = call { double, double } @Cd(ptr noundef %363)
  %365 = extractvalue { double, double } %364, 0
  %366 = extractvalue { double, double } %364, 1
  store double %366, ptr %34, align 8, !tbaa !11
  %367 = load double, ptr %34, align 8, !tbaa !11
  %368 = fcmp oge double %367, 0.000000e+00
  br i1 %368, label %369, label %371

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

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

374:                                              ; preds = %371, %369
  %375 = phi double [ %370, %369 ], [ %373, %371 ]
  %376 = fadd double %355, %375
  %377 = load double, ptr %44, align 8, !tbaa !11
  %378 = fadd double %377, %376
  store double %378, ptr %44, align 8, !tbaa !11
  br label %379

379:                                              ; preds = %374
  %380 = load i32, ptr %38, align 4, !tbaa !9
  %381 = add nsw i32 %380, 1
  store i32 %381, ptr %38, align 4, !tbaa !9
  br label %331, !llvm.loop !19

382:                                              ; preds = %331
  br label %383

383:                                              ; preds = %382, %272
  %384 = load double, ptr %44, align 8, !tbaa !11
  %385 = load ptr, ptr %23, align 8, !tbaa !5
  %386 = load i32, ptr %37, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds double, ptr %385, i64 %387
  store double %384, ptr %388, align 8, !tbaa !11
  %389 = load double, ptr %40, align 8, !tbaa !11
  %390 = load double, ptr %44, align 8, !tbaa !11
  %391 = fcmp oge double %389, %390
  br i1 %391, label %392, label %394

392:                                              ; preds = %383
  %393 = load double, ptr %40, align 8, !tbaa !11
  br label %396

394:                                              ; preds = %383
  %395 = load double, ptr %44, align 8, !tbaa !11
  br label %396

396:                                              ; preds = %394, %392
  %397 = phi double [ %393, %392 ], [ %395, %394 ]
  store double %397, ptr %40, align 8, !tbaa !11
  br label %398

398:                                              ; preds = %396
  %399 = load i32, ptr %37, align 4, !tbaa !9
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %37, align 4, !tbaa !9
  br label %143, !llvm.loop !20

401:                                              ; preds = %143
  br label %664

402:                                              ; preds = %137
  %403 = load ptr, ptr %14, align 8, !tbaa !5
  %404 = load i32, ptr %403, align 4, !tbaa !9
  store i32 %404, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %405

405:                                              ; preds = %660, %402
  %406 = load i32, ptr %37, align 4, !tbaa !9
  %407 = load i32, ptr %28, align 4, !tbaa !9
  %408 = icmp sle i32 %406, %407
  br i1 %408, label %409, label %663

409:                                              ; preds = %405
  store double 0.000000e+00, ptr %44, align 8, !tbaa !11
  %410 = load ptr, ptr %20, align 8, !tbaa !5
  %411 = load i32, ptr %410, align 4, !tbaa !9
  %412 = icmp ne i32 %411, 0
  br i1 %412, label %413, label %535

413:                                              ; preds = %409
  %414 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %414, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %38, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %469, %413
  %416 = load i32, ptr %38, align 4, !tbaa !9
  %417 = load i32, ptr %29, align 4, !tbaa !9
  %418 = icmp sle i32 %416, %417
  br i1 %418, label %419, label %472

419:                                              ; preds = %415
  %420 = load i32, ptr %37, align 4, !tbaa !9
  %421 = load i32, ptr %38, align 4, !tbaa !9
  %422 = load i32, ptr %24, align 4, !tbaa !9
  %423 = mul nsw i32 %421, %422
  %424 = add nsw i32 %420, %423
  store i32 %424, ptr %30, align 4, !tbaa !9
  %425 = load ptr, ptr %15, align 8, !tbaa !5
  %426 = load i32, ptr %30, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds %struct.doublecomplex, ptr %425, i64 %427
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %428, i32 0, i32 0
  %430 = load double, ptr %429, align 8, !tbaa !13
  store double %430, ptr %33, align 8, !tbaa !11
  %431 = load double, ptr %33, align 8, !tbaa !11
  %432 = fcmp oge double %431, 0.000000e+00
  br i1 %432, label %433, label %435

433:                                              ; preds = %419
  %434 = load double, ptr %33, align 8, !tbaa !11
  br label %438

435:                                              ; preds = %419
  %436 = load double, ptr %33, align 8, !tbaa !11
  %437 = fneg double %436
  br label %438

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

453:                                              ; preds = %438
  %454 = load double, ptr %34, align 8, !tbaa !11
  br label %458

455:                                              ; preds = %438
  %456 = load double, ptr %34, align 8, !tbaa !11
  %457 = fneg double %456
  br label %458

458:                                              ; preds = %455, %453
  %459 = phi double [ %454, %453 ], [ %457, %455 ]
  %460 = fadd double %439, %459
  %461 = load ptr, ptr %19, align 8, !tbaa !5
  %462 = load i32, ptr %38, align 4, !tbaa !9
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds double, ptr %461, i64 %463
  %465 = load double, ptr %464, align 8, !tbaa !11
  %466 = fdiv double %460, %465
  %467 = load double, ptr %44, align 8, !tbaa !11
  %468 = fadd double %467, %466
  store double %468, ptr %44, align 8, !tbaa !11
  br label %469

469:                                              ; preds = %458
  %470 = load i32, ptr %38, align 4, !tbaa !9
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %38, align 4, !tbaa !9
  br label %415, !llvm.loop !21

472:                                              ; preds = %415
  %473 = load ptr, ptr %14, align 8, !tbaa !5
  %474 = load i32, ptr %473, align 4, !tbaa !9
  store i32 %474, ptr %29, align 4, !tbaa !9
  %475 = load i32, ptr %37, align 4, !tbaa !9
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %38, align 4, !tbaa !9
  br label %477

477:                                              ; preds = %531, %472
  %478 = load i32, ptr %38, align 4, !tbaa !9
  %479 = load i32, ptr %29, align 4, !tbaa !9
  %480 = icmp sle i32 %478, %479
  br i1 %480, label %481, label %534

481:                                              ; preds = %477
  %482 = load i32, ptr %38, align 4, !tbaa !9
  %483 = load i32, ptr %37, align 4, !tbaa !9
  %484 = load i32, ptr %24, align 4, !tbaa !9
  %485 = mul nsw i32 %483, %484
  %486 = add nsw i32 %482, %485
  store i32 %486, ptr %30, align 4, !tbaa !9
  %487 = load ptr, ptr %15, align 8, !tbaa !5
  %488 = load i32, ptr %30, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds %struct.doublecomplex, ptr %487, i64 %489
  %491 = getelementptr inbounds %struct.doublecomplex, ptr %490, i32 0, i32 0
  %492 = load double, ptr %491, align 8, !tbaa !13
  store double %492, ptr %33, align 8, !tbaa !11
  %493 = load double, ptr %33, align 8, !tbaa !11
  %494 = fcmp oge double %493, 0.000000e+00
  br i1 %494, label %495, label %497

495:                                              ; preds = %481
  %496 = load double, ptr %33, align 8, !tbaa !11
  br label %500

497:                                              ; preds = %481
  %498 = load double, ptr %33, align 8, !tbaa !11
  %499 = fneg double %498
  br label %500

500:                                              ; preds = %497, %495
  %501 = phi double [ %496, %495 ], [ %499, %497 ]
  %502 = load ptr, ptr %15, align 8, !tbaa !5
  %503 = load i32, ptr %38, align 4, !tbaa !9
  %504 = load i32, ptr %37, align 4, !tbaa !9
  %505 = load i32, ptr %24, align 4, !tbaa !9
  %506 = mul nsw i32 %504, %505
  %507 = add nsw i32 %503, %506
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %502, i64 %508
  %510 = call { double, double } @Cd(ptr noundef %509)
  %511 = extractvalue { double, double } %510, 0
  %512 = extractvalue { double, double } %510, 1
  store double %512, ptr %34, align 8, !tbaa !11
  %513 = load double, ptr %34, align 8, !tbaa !11
  %514 = fcmp oge double %513, 0.000000e+00
  br i1 %514, label %515, label %517

515:                                              ; preds = %500
  %516 = load double, ptr %34, align 8, !tbaa !11
  br label %520

517:                                              ; preds = %500
  %518 = load double, ptr %34, align 8, !tbaa !11
  %519 = fneg double %518
  br label %520

520:                                              ; preds = %517, %515
  %521 = phi double [ %516, %515 ], [ %519, %517 ]
  %522 = fadd double %501, %521
  %523 = load ptr, ptr %19, align 8, !tbaa !5
  %524 = load i32, ptr %38, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds double, ptr %523, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !11
  %528 = fdiv double %522, %527
  %529 = load double, ptr %44, align 8, !tbaa !11
  %530 = fadd double %529, %528
  store double %530, ptr %44, align 8, !tbaa !11
  br label %531

531:                                              ; preds = %520
  %532 = load i32, ptr %38, align 4, !tbaa !9
  %533 = add nsw i32 %532, 1
  store i32 %533, ptr %38, align 4, !tbaa !9
  br label %477, !llvm.loop !22

534:                                              ; preds = %477
  br label %645

535:                                              ; preds = %409
  %536 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %536, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %38, align 4, !tbaa !9
  br label %537

537:                                              ; preds = %585, %535
  %538 = load i32, ptr %38, align 4, !tbaa !9
  %539 = load i32, ptr %29, align 4, !tbaa !9
  %540 = icmp sle i32 %538, %539
  br i1 %540, label %541, label %588

541:                                              ; preds = %537
  %542 = load i32, ptr %37, align 4, !tbaa !9
  %543 = load i32, ptr %38, align 4, !tbaa !9
  %544 = load i32, ptr %24, align 4, !tbaa !9
  %545 = mul nsw i32 %543, %544
  %546 = add nsw i32 %542, %545
  store i32 %546, ptr %30, align 4, !tbaa !9
  %547 = load ptr, ptr %15, align 8, !tbaa !5
  %548 = load i32, ptr %30, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds %struct.doublecomplex, ptr %547, i64 %549
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %550, i32 0, i32 0
  %552 = load double, ptr %551, align 8, !tbaa !13
  store double %552, ptr %33, align 8, !tbaa !11
  %553 = load double, ptr %33, align 8, !tbaa !11
  %554 = fcmp oge double %553, 0.000000e+00
  br i1 %554, label %555, label %557

555:                                              ; preds = %541
  %556 = load double, ptr %33, align 8, !tbaa !11
  br label %560

557:                                              ; preds = %541
  %558 = load double, ptr %33, align 8, !tbaa !11
  %559 = fneg double %558
  br label %560

560:                                              ; preds = %557, %555
  %561 = phi double [ %556, %555 ], [ %559, %557 ]
  %562 = load ptr, ptr %15, align 8, !tbaa !5
  %563 = load i32, ptr %37, align 4, !tbaa !9
  %564 = load i32, ptr %38, align 4, !tbaa !9
  %565 = load i32, ptr %24, align 4, !tbaa !9
  %566 = mul nsw i32 %564, %565
  %567 = add nsw i32 %563, %566
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds %struct.doublecomplex, ptr %562, i64 %568
  %570 = call { double, double } @Cd(ptr noundef %569)
  %571 = extractvalue { double, double } %570, 0
  %572 = extractvalue { double, double } %570, 1
  store double %572, ptr %34, align 8, !tbaa !11
  %573 = load double, ptr %34, align 8, !tbaa !11
  %574 = fcmp oge double %573, 0.000000e+00
  br i1 %574, label %575, label %577

575:                                              ; preds = %560
  %576 = load double, ptr %34, align 8, !tbaa !11
  br label %580

577:                                              ; preds = %560
  %578 = load double, ptr %34, align 8, !tbaa !11
  %579 = fneg double %578
  br label %580

580:                                              ; preds = %577, %575
  %581 = phi double [ %576, %575 ], [ %579, %577 ]
  %582 = fadd double %561, %581
  %583 = load double, ptr %44, align 8, !tbaa !11
  %584 = fadd double %583, %582
  store double %584, ptr %44, align 8, !tbaa !11
  br label %585

585:                                              ; preds = %580
  %586 = load i32, ptr %38, align 4, !tbaa !9
  %587 = add nsw i32 %586, 1
  store i32 %587, ptr %38, align 4, !tbaa !9
  br label %537, !llvm.loop !23

588:                                              ; preds = %537
  %589 = load ptr, ptr %14, align 8, !tbaa !5
  %590 = load i32, ptr %589, align 4, !tbaa !9
  store i32 %590, ptr %29, align 4, !tbaa !9
  %591 = load i32, ptr %37, align 4, !tbaa !9
  %592 = add nsw i32 %591, 1
  store i32 %592, ptr %38, align 4, !tbaa !9
  br label %593

593:                                              ; preds = %641, %588
  %594 = load i32, ptr %38, align 4, !tbaa !9
  %595 = load i32, ptr %29, align 4, !tbaa !9
  %596 = icmp sle i32 %594, %595
  br i1 %596, label %597, label %644

597:                                              ; preds = %593
  %598 = load i32, ptr %38, align 4, !tbaa !9
  %599 = load i32, ptr %37, align 4, !tbaa !9
  %600 = load i32, ptr %24, align 4, !tbaa !9
  %601 = mul nsw i32 %599, %600
  %602 = add nsw i32 %598, %601
  store i32 %602, ptr %30, align 4, !tbaa !9
  %603 = load ptr, ptr %15, align 8, !tbaa !5
  %604 = load i32, ptr %30, align 4, !tbaa !9
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds %struct.doublecomplex, ptr %603, i64 %605
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %606, i32 0, i32 0
  %608 = load double, ptr %607, align 8, !tbaa !13
  store double %608, ptr %33, align 8, !tbaa !11
  %609 = load double, ptr %33, align 8, !tbaa !11
  %610 = fcmp oge double %609, 0.000000e+00
  br i1 %610, label %611, label %613

611:                                              ; preds = %597
  %612 = load double, ptr %33, align 8, !tbaa !11
  br label %616

613:                                              ; preds = %597
  %614 = load double, ptr %33, align 8, !tbaa !11
  %615 = fneg double %614
  br label %616

616:                                              ; preds = %613, %611
  %617 = phi double [ %612, %611 ], [ %615, %613 ]
  %618 = load ptr, ptr %15, align 8, !tbaa !5
  %619 = load i32, ptr %38, align 4, !tbaa !9
  %620 = load i32, ptr %37, align 4, !tbaa !9
  %621 = load i32, ptr %24, align 4, !tbaa !9
  %622 = mul nsw i32 %620, %621
  %623 = add nsw i32 %619, %622
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %618, i64 %624
  %626 = call { double, double } @Cd(ptr noundef %625)
  %627 = extractvalue { double, double } %626, 0
  %628 = extractvalue { double, double } %626, 1
  store double %628, ptr %34, align 8, !tbaa !11
  %629 = load double, ptr %34, align 8, !tbaa !11
  %630 = fcmp oge double %629, 0.000000e+00
  br i1 %630, label %631, label %633

631:                                              ; preds = %616
  %632 = load double, ptr %34, align 8, !tbaa !11
  br label %636

633:                                              ; preds = %616
  %634 = load double, ptr %34, align 8, !tbaa !11
  %635 = fneg double %634
  br label %636

636:                                              ; preds = %633, %631
  %637 = phi double [ %632, %631 ], [ %635, %633 ]
  %638 = fadd double %617, %637
  %639 = load double, ptr %44, align 8, !tbaa !11
  %640 = fadd double %639, %638
  store double %640, ptr %44, align 8, !tbaa !11
  br label %641

641:                                              ; preds = %636
  %642 = load i32, ptr %38, align 4, !tbaa !9
  %643 = add nsw i32 %642, 1
  store i32 %643, ptr %38, align 4, !tbaa !9
  br label %593, !llvm.loop !24

644:                                              ; preds = %593
  br label %645

645:                                              ; preds = %644, %534
  %646 = load double, ptr %44, align 8, !tbaa !11
  %647 = load ptr, ptr %23, align 8, !tbaa !5
  %648 = load i32, ptr %37, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds double, ptr %647, i64 %649
  store double %646, ptr %650, align 8, !tbaa !11
  %651 = load double, ptr %40, align 8, !tbaa !11
  %652 = load double, ptr %44, align 8, !tbaa !11
  %653 = fcmp oge double %651, %652
  br i1 %653, label %654, label %656

654:                                              ; preds = %645
  %655 = load double, ptr %40, align 8, !tbaa !11
  br label %658

656:                                              ; preds = %645
  %657 = load double, ptr %44, align 8, !tbaa !11
  br label %658

658:                                              ; preds = %656, %654
  %659 = phi double [ %655, %654 ], [ %657, %656 ]
  store double %659, ptr %40, align 8, !tbaa !11
  br label %660

660:                                              ; preds = %658
  %661 = load i32, ptr %37, align 4, !tbaa !9
  %662 = add nsw i32 %661, 1
  store i32 %662, ptr %37, align 4, !tbaa !9
  br label %405, !llvm.loop !25

663:                                              ; preds = %405
  br label %664

664:                                              ; preds = %663, %401
  %665 = load ptr, ptr %14, align 8, !tbaa !5
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = icmp eq i32 %666, 0
  br i1 %667, label %668, label %670

668:                                              ; preds = %664
  store double 1.000000e+00, ptr %32, align 8, !tbaa !11
  %669 = load double, ptr %32, align 8, !tbaa !11
  store double %669, ptr %12, align 8
  store i32 1, ptr %45, align 4
  br label %980

670:                                              ; preds = %664
  %671 = load double, ptr %40, align 8, !tbaa !11
  %672 = fcmp oeq double %671, 0.000000e+00
  br i1 %672, label %673, label %675

673:                                              ; preds = %670
  %674 = load double, ptr %32, align 8, !tbaa !11
  store double %674, ptr %12, align 8
  store i32 1, ptr %45, align 4
  br label %980

675:                                              ; preds = %670
  br label %676

676:                                              ; preds = %675
  store double 0.000000e+00, ptr %43, align 8, !tbaa !11
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %677

677:                                              ; preds = %971, %676
  %678 = load ptr, ptr %14, align 8, !tbaa !5
  %679 = load ptr, ptr %22, align 8, !tbaa !5
  %680 = load ptr, ptr %14, align 8, !tbaa !5
  %681 = load i32, ptr %680, align 4, !tbaa !9
  %682 = add nsw i32 %681, 1
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds %struct.doublecomplex, ptr %679, i64 %683
  %685 = load ptr, ptr %22, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.doublecomplex, ptr %685, i64 1
  %687 = getelementptr inbounds [3 x i32], ptr %39, i64 0, i64 0
  call void @zlacn2_(ptr noundef %678, ptr noundef %684, ptr noundef %686, ptr noundef %43, ptr noundef %36, ptr noundef %687)
  %688 = load i32, ptr %36, align 4, !tbaa !9
  %689 = icmp ne i32 %688, 0
  br i1 %689, label %690, label %972

690:                                              ; preds = %677
  %691 = load i32, ptr %36, align 4, !tbaa !9
  %692 = icmp eq i32 %691, 2
  br i1 %692, label %693, label %832

693:                                              ; preds = %690
  %694 = load ptr, ptr %14, align 8, !tbaa !5
  %695 = load i32, ptr %694, align 4, !tbaa !9
  store i32 %695, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %696

696:                                              ; preds = %744, %693
  %697 = load i32, ptr %37, align 4, !tbaa !9
  %698 = load i32, ptr %28, align 4, !tbaa !9
  %699 = icmp sle i32 %697, %698
  br i1 %699, label %700, label %747

700:                                              ; preds = %696
  %701 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %701, ptr %29, align 4, !tbaa !9
  %702 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %702, ptr %30, align 4, !tbaa !9
  %703 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %703, ptr %31, align 4, !tbaa !9
  %704 = load ptr, ptr %23, align 8, !tbaa !5
  %705 = load i32, ptr %31, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds double, ptr %704, i64 %706
  %708 = load double, ptr %707, align 8, !tbaa !11
  %709 = load ptr, ptr %22, align 8, !tbaa !5
  %710 = load i32, ptr %30, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %709, i64 %711
  %713 = getelementptr inbounds %struct.doublecomplex, ptr %712, i32 0, i32 0
  %714 = load double, ptr %713, align 8, !tbaa !13
  %715 = fmul double %708, %714
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  store double %715, ptr %716, align 8, !tbaa !13
  %717 = load ptr, ptr %23, align 8, !tbaa !5
  %718 = load i32, ptr %31, align 4, !tbaa !9
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds double, ptr %717, i64 %719
  %721 = load double, ptr %720, align 8, !tbaa !11
  %722 = load ptr, ptr %22, align 8, !tbaa !5
  %723 = load i32, ptr %30, align 4, !tbaa !9
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds %struct.doublecomplex, ptr %722, i64 %724
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %725, i32 0, i32 1
  %727 = load double, ptr %726, align 8, !tbaa !26
  %728 = fmul double %721, %727
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  store double %728, ptr %729, align 8, !tbaa !26
  %730 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  %731 = load double, ptr %730, align 8, !tbaa !13
  %732 = load ptr, ptr %22, align 8, !tbaa !5
  %733 = load i32, ptr %29, align 4, !tbaa !9
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds %struct.doublecomplex, ptr %732, i64 %734
  %736 = getelementptr inbounds %struct.doublecomplex, ptr %735, i32 0, i32 0
  store double %731, ptr %736, align 8, !tbaa !13
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  %738 = load double, ptr %737, align 8, !tbaa !26
  %739 = load ptr, ptr %22, align 8, !tbaa !5
  %740 = load i32, ptr %29, align 4, !tbaa !9
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds %struct.doublecomplex, ptr %739, i64 %741
  %743 = getelementptr inbounds %struct.doublecomplex, ptr %742, i32 0, i32 1
  store double %738, ptr %743, align 8, !tbaa !26
  br label %744

744:                                              ; preds = %700
  %745 = load i32, ptr %37, align 4, !tbaa !9
  %746 = add nsw i32 %745, 1
  store i32 %746, ptr %37, align 4, !tbaa !9
  br label %696, !llvm.loop !27

747:                                              ; preds = %696
  %748 = load i32, ptr %42, align 4, !tbaa !9
  %749 = icmp ne i32 %748, 0
  br i1 %749, label %750, label %761

750:                                              ; preds = %747
  %751 = load ptr, ptr %14, align 8, !tbaa !5
  %752 = load ptr, ptr %17, align 8, !tbaa !5
  %753 = load i32, ptr %27, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds %struct.doublecomplex, ptr %752, i64 %754
  %756 = load ptr, ptr %18, align 8, !tbaa !5
  %757 = load ptr, ptr %22, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.doublecomplex, ptr %757, i64 1
  %759 = load ptr, ptr %14, align 8, !tbaa !5
  %760 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef @.str, ptr noundef %751, ptr noundef @c__1, ptr noundef %755, ptr noundef %756, ptr noundef %758, ptr noundef %759, ptr noundef %760)
  br label %772

761:                                              ; preds = %747
  %762 = load ptr, ptr %14, align 8, !tbaa !5
  %763 = load ptr, ptr %17, align 8, !tbaa !5
  %764 = load i32, ptr %27, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %765
  %767 = load ptr, ptr %18, align 8, !tbaa !5
  %768 = load ptr, ptr %22, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %768, i64 1
  %770 = load ptr, ptr %14, align 8, !tbaa !5
  %771 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef @.str.1, ptr noundef %762, ptr noundef @c__1, ptr noundef %766, ptr noundef %767, ptr noundef %769, ptr noundef %770, ptr noundef %771)
  br label %772

772:                                              ; preds = %761, %750
  %773 = load ptr, ptr %20, align 8, !tbaa !5
  %774 = load i32, ptr %773, align 4, !tbaa !9
  %775 = icmp ne i32 %774, 0
  br i1 %775, label %776, label %831

776:                                              ; preds = %772
  %777 = load ptr, ptr %14, align 8, !tbaa !5
  %778 = load i32, ptr %777, align 4, !tbaa !9
  store i32 %778, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %779

779:                                              ; preds = %827, %776
  %780 = load i32, ptr %37, align 4, !tbaa !9
  %781 = load i32, ptr %28, align 4, !tbaa !9
  %782 = icmp sle i32 %780, %781
  br i1 %782, label %783, label %830

783:                                              ; preds = %779
  %784 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %784, ptr %29, align 4, !tbaa !9
  %785 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %785, ptr %30, align 4, !tbaa !9
  %786 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %786, ptr %31, align 4, !tbaa !9
  %787 = load ptr, ptr %19, align 8, !tbaa !5
  %788 = load i32, ptr %31, align 4, !tbaa !9
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds double, ptr %787, i64 %789
  %791 = load double, ptr %790, align 8, !tbaa !11
  %792 = load ptr, ptr %22, align 8, !tbaa !5
  %793 = load i32, ptr %30, align 4, !tbaa !9
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds %struct.doublecomplex, ptr %792, i64 %794
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %795, i32 0, i32 0
  %797 = load double, ptr %796, align 8, !tbaa !13
  %798 = fmul double %791, %797
  %799 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  store double %798, ptr %799, align 8, !tbaa !13
  %800 = load ptr, ptr %19, align 8, !tbaa !5
  %801 = load i32, ptr %31, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds double, ptr %800, i64 %802
  %804 = load double, ptr %803, align 8, !tbaa !11
  %805 = load ptr, ptr %22, align 8, !tbaa !5
  %806 = load i32, ptr %30, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds %struct.doublecomplex, ptr %805, i64 %807
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %808, i32 0, i32 1
  %810 = load double, ptr %809, align 8, !tbaa !26
  %811 = fmul double %804, %810
  %812 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  store double %811, ptr %812, align 8, !tbaa !26
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  %814 = load double, ptr %813, align 8, !tbaa !13
  %815 = load ptr, ptr %22, align 8, !tbaa !5
  %816 = load i32, ptr %29, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds %struct.doublecomplex, ptr %815, i64 %817
  %819 = getelementptr inbounds %struct.doublecomplex, ptr %818, i32 0, i32 0
  store double %814, ptr %819, align 8, !tbaa !13
  %820 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  %821 = load double, ptr %820, align 8, !tbaa !26
  %822 = load ptr, ptr %22, align 8, !tbaa !5
  %823 = load i32, ptr %29, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds %struct.doublecomplex, ptr %822, i64 %824
  %826 = getelementptr inbounds %struct.doublecomplex, ptr %825, i32 0, i32 1
  store double %821, ptr %826, align 8, !tbaa !26
  br label %827

827:                                              ; preds = %783
  %828 = load i32, ptr %37, align 4, !tbaa !9
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %37, align 4, !tbaa !9
  br label %779, !llvm.loop !28

830:                                              ; preds = %779
  br label %831

831:                                              ; preds = %830, %772
  br label %971

832:                                              ; preds = %690
  %833 = load ptr, ptr %20, align 8, !tbaa !5
  %834 = load i32, ptr %833, align 4, !tbaa !9
  %835 = icmp ne i32 %834, 0
  br i1 %835, label %836, label %891

836:                                              ; preds = %832
  %837 = load ptr, ptr %14, align 8, !tbaa !5
  %838 = load i32, ptr %837, align 4, !tbaa !9
  store i32 %838, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %839

839:                                              ; preds = %887, %836
  %840 = load i32, ptr %37, align 4, !tbaa !9
  %841 = load i32, ptr %28, align 4, !tbaa !9
  %842 = icmp sle i32 %840, %841
  br i1 %842, label %843, label %890

843:                                              ; preds = %839
  %844 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %844, ptr %29, align 4, !tbaa !9
  %845 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %845, ptr %30, align 4, !tbaa !9
  %846 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %846, ptr %31, align 4, !tbaa !9
  %847 = load ptr, ptr %19, align 8, !tbaa !5
  %848 = load i32, ptr %31, align 4, !tbaa !9
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %847, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !11
  %852 = load ptr, ptr %22, align 8, !tbaa !5
  %853 = load i32, ptr %30, align 4, !tbaa !9
  %854 = sext i32 %853 to i64
  %855 = getelementptr inbounds %struct.doublecomplex, ptr %852, i64 %854
  %856 = getelementptr inbounds %struct.doublecomplex, ptr %855, i32 0, i32 0
  %857 = load double, ptr %856, align 8, !tbaa !13
  %858 = fmul double %851, %857
  %859 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  store double %858, ptr %859, align 8, !tbaa !13
  %860 = load ptr, ptr %19, align 8, !tbaa !5
  %861 = load i32, ptr %31, align 4, !tbaa !9
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds double, ptr %860, i64 %862
  %864 = load double, ptr %863, align 8, !tbaa !11
  %865 = load ptr, ptr %22, align 8, !tbaa !5
  %866 = load i32, ptr %30, align 4, !tbaa !9
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds %struct.doublecomplex, ptr %865, i64 %867
  %869 = getelementptr inbounds %struct.doublecomplex, ptr %868, i32 0, i32 1
  %870 = load double, ptr %869, align 8, !tbaa !26
  %871 = fmul double %864, %870
  %872 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  store double %871, ptr %872, align 8, !tbaa !26
  %873 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  %874 = load double, ptr %873, align 8, !tbaa !13
  %875 = load ptr, ptr %22, align 8, !tbaa !5
  %876 = load i32, ptr %29, align 4, !tbaa !9
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds %struct.doublecomplex, ptr %875, i64 %877
  %879 = getelementptr inbounds %struct.doublecomplex, ptr %878, i32 0, i32 0
  store double %874, ptr %879, align 8, !tbaa !13
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  %881 = load double, ptr %880, align 8, !tbaa !26
  %882 = load ptr, ptr %22, align 8, !tbaa !5
  %883 = load i32, ptr %29, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %882, i64 %884
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %885, i32 0, i32 1
  store double %881, ptr %886, align 8, !tbaa !26
  br label %887

887:                                              ; preds = %843
  %888 = load i32, ptr %37, align 4, !tbaa !9
  %889 = add nsw i32 %888, 1
  store i32 %889, ptr %37, align 4, !tbaa !9
  br label %839, !llvm.loop !29

890:                                              ; preds = %839
  br label %891

891:                                              ; preds = %890, %832
  %892 = load i32, ptr %42, align 4, !tbaa !9
  %893 = icmp ne i32 %892, 0
  br i1 %893, label %894, label %905

894:                                              ; preds = %891
  %895 = load ptr, ptr %14, align 8, !tbaa !5
  %896 = load ptr, ptr %17, align 8, !tbaa !5
  %897 = load i32, ptr %27, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %struct.doublecomplex, ptr %896, i64 %898
  %900 = load ptr, ptr %18, align 8, !tbaa !5
  %901 = load ptr, ptr %22, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.doublecomplex, ptr %901, i64 1
  %903 = load ptr, ptr %14, align 8, !tbaa !5
  %904 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef @.str, ptr noundef %895, ptr noundef @c__1, ptr noundef %899, ptr noundef %900, ptr noundef %902, ptr noundef %903, ptr noundef %904)
  br label %916

905:                                              ; preds = %891
  %906 = load ptr, ptr %14, align 8, !tbaa !5
  %907 = load ptr, ptr %17, align 8, !tbaa !5
  %908 = load i32, ptr %27, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds %struct.doublecomplex, ptr %907, i64 %909
  %911 = load ptr, ptr %18, align 8, !tbaa !5
  %912 = load ptr, ptr %22, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.doublecomplex, ptr %912, i64 1
  %914 = load ptr, ptr %14, align 8, !tbaa !5
  %915 = load ptr, ptr %21, align 8, !tbaa !5
  call void @zpotrs_(ptr noundef @.str.1, ptr noundef %906, ptr noundef @c__1, ptr noundef %910, ptr noundef %911, ptr noundef %913, ptr noundef %914, ptr noundef %915)
  br label %916

916:                                              ; preds = %905, %894
  %917 = load ptr, ptr %14, align 8, !tbaa !5
  %918 = load i32, ptr %917, align 4, !tbaa !9
  store i32 %918, ptr %28, align 4, !tbaa !9
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %919

919:                                              ; preds = %967, %916
  %920 = load i32, ptr %37, align 4, !tbaa !9
  %921 = load i32, ptr %28, align 4, !tbaa !9
  %922 = icmp sle i32 %920, %921
  br i1 %922, label %923, label %970

923:                                              ; preds = %919
  %924 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %924, ptr %29, align 4, !tbaa !9
  %925 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %925, ptr %30, align 4, !tbaa !9
  %926 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %926, ptr %31, align 4, !tbaa !9
  %927 = load ptr, ptr %23, align 8, !tbaa !5
  %928 = load i32, ptr %31, align 4, !tbaa !9
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds double, ptr %927, i64 %929
  %931 = load double, ptr %930, align 8, !tbaa !11
  %932 = load ptr, ptr %22, align 8, !tbaa !5
  %933 = load i32, ptr %30, align 4, !tbaa !9
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds %struct.doublecomplex, ptr %932, i64 %934
  %936 = getelementptr inbounds %struct.doublecomplex, ptr %935, i32 0, i32 0
  %937 = load double, ptr %936, align 8, !tbaa !13
  %938 = fmul double %931, %937
  %939 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  store double %938, ptr %939, align 8, !tbaa !13
  %940 = load ptr, ptr %23, align 8, !tbaa !5
  %941 = load i32, ptr %31, align 4, !tbaa !9
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds double, ptr %940, i64 %942
  %944 = load double, ptr %943, align 8, !tbaa !11
  %945 = load ptr, ptr %22, align 8, !tbaa !5
  %946 = load i32, ptr %30, align 4, !tbaa !9
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds %struct.doublecomplex, ptr %945, i64 %947
  %949 = getelementptr inbounds %struct.doublecomplex, ptr %948, i32 0, i32 1
  %950 = load double, ptr %949, align 8, !tbaa !26
  %951 = fmul double %944, %950
  %952 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  store double %951, ptr %952, align 8, !tbaa !26
  %953 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 0
  %954 = load double, ptr %953, align 8, !tbaa !13
  %955 = load ptr, ptr %22, align 8, !tbaa !5
  %956 = load i32, ptr %29, align 4, !tbaa !9
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds %struct.doublecomplex, ptr %955, i64 %957
  %959 = getelementptr inbounds %struct.doublecomplex, ptr %958, i32 0, i32 0
  store double %954, ptr %959, align 8, !tbaa !13
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %35, i32 0, i32 1
  %961 = load double, ptr %960, align 8, !tbaa !26
  %962 = load ptr, ptr %22, align 8, !tbaa !5
  %963 = load i32, ptr %29, align 4, !tbaa !9
  %964 = sext i32 %963 to i64
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %962, i64 %964
  %966 = getelementptr inbounds %struct.doublecomplex, ptr %965, i32 0, i32 1
  store double %961, ptr %966, align 8, !tbaa !26
  br label %967

967:                                              ; preds = %923
  %968 = load i32, ptr %37, align 4, !tbaa !9
  %969 = add nsw i32 %968, 1
  store i32 %969, ptr %37, align 4, !tbaa !9
  br label %919, !llvm.loop !30

970:                                              ; preds = %919
  br label %971

971:                                              ; preds = %970, %831
  br label %677

972:                                              ; preds = %677
  %973 = load double, ptr %43, align 8, !tbaa !11
  %974 = fcmp une double %973, 0.000000e+00
  br i1 %974, label %975, label %978

975:                                              ; preds = %972
  %976 = load double, ptr %43, align 8, !tbaa !11
  %977 = fdiv double 1.000000e+00, %976
  store double %977, ptr %32, align 8, !tbaa !11
  br label %978

978:                                              ; preds = %975, %972
  %979 = load double, ptr %32, align 8, !tbaa !11
  store double %979, ptr %12, align 8
  store i32 1, ptr %45, align 4
  br label %980

980:                                              ; preds = %978, %673, %668, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  %981 = load double, ptr %12, align 8
  ret double %981
}

; 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 @zpotrs_(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_porcond_c_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readonly %7, ptr noundef %8, ptr noundef %9, ptr nocapture noundef %10) local_unnamed_addr #0 {
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca [3 x i32], align 4
  %15 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %16 = load i32, ptr %3, align 4, !tbaa !5
  %narrow = xor i32 %16, -1
  %17 = sext i32 %narrow to i64
  %18 = getelementptr inbounds %struct.doublecomplex, ptr %2, i64 %17
  %19 = getelementptr inbounds i8, ptr %6, i64 -8
  %20 = getelementptr inbounds i8, ptr %9, i64 -16
  %21 = getelementptr inbounds i8, ptr %10, i64 -8
  store i32 0, ptr %8, align 4, !tbaa !5
  %22 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not = icmp eq i32 %22, 0
  br i1 %.not, label %23, label %25

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

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

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

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

34:                                               ; preds = %31
  %.pr = load i32, ptr %8, align 4, !tbaa !5
  %.not370 = icmp eq i32 %.pr, 0
  br i1 %.not370, label %38, label %.thread

.thread.sink.split:                               ; preds = %31, %28, %25, %23
  %.sink = phi i32 [ -1, %23 ], [ -2, %25 ], [ -4, %28 ], [ -6, %31 ]
  store i32 %.sink, ptr %8, align 4, !tbaa !5
  br label %.thread

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

38:                                               ; preds = %34
  %39 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not371 = icmp eq i32 %39, 0
  %40 = load i32, ptr %1, align 4, !tbaa !5
  %.not373437 = icmp slt i32 %40, 1
  br i1 %.not371, label %107, label %41

41:                                               ; preds = %38
  br i1 %.not373437, label %.loopexit399, label %.lr.ph421.preheader

.lr.ph421.preheader:                              ; preds = %41
  %42 = sext i32 %16 to i64
  %43 = add nuw i32 %40, 2
  %wide.trip.count496 = zext i32 %43 to i64
  br label %.lr.ph421

.lr.ph421:                                        ; preds = %.lr.ph421.preheader, %.loopexit400
  %indvars.iv491 = phi i64 [ 2, %.lr.ph421.preheader ], [ %indvars.iv.next492, %.loopexit400 ]
  %indvars.iv474 = phi i64 [ 1, %.lr.ph421.preheader ], [ %indvars.iv.next475, %.loopexit400 ]
  %.0346420 = phi double [ 0.000000e+00, %.lr.ph421.preheader ], [ %106, %.loopexit400 ]
  %44 = load i32, ptr %7, align 4, !tbaa !5
  %.not387 = icmp eq i32 %44, 0
  %45 = mul nsw i64 %indvars.iv474, %42
  %invariant.gep565 = getelementptr %struct.doublecomplex, ptr %18, i64 %45
  br i1 %.not387, label %.preheader401, label %.preheader403

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

60:                                               ; preds = %.preheader403
  %61 = load i32, ptr %1, align 4, !tbaa !5
  %62 = sext i32 %61 to i64
  %.not391.not407 = icmp slt i64 %indvars.iv474, %62
  br i1 %.not391.not407, label %.lr.ph.preheader, label %.loopexit400

.lr.ph.preheader:                                 ; preds = %60
  %wide.trip.count479 = zext i32 %61 to i64
  %invariant.gep563 = getelementptr %struct.doublecomplex, ptr %18, i64 %indvars.iv474
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv476 = phi i64 [ %indvars.iv474, %.lr.ph.preheader ], [ %indvars.iv.next477, %.lr.ph ]
  %.1409 = phi double [ %59, %.lr.ph.preheader ], [ %77, %.lr.ph ]
  %indvars.iv.next477 = add nuw nsw i64 %indvars.iv476, 1
  %63 = mul nsw i64 %indvars.iv.next477, %42
  %gep564 = getelementptr %struct.doublecomplex, ptr %invariant.gep563, i64 %63
  %64 = load double, ptr %gep564, align 8, !tbaa !9
  %65 = tail call { double, double } @Cd(ptr noundef nonnull %gep564)
  %66 = extractvalue { double, double } %65, 1
  %67 = insertelement <2 x double> poison, double %64, 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
  %shift674 = shufflevector <2 x double> %71, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %72 = fadd <2 x double> %71, %shift674
  %73 = extractelement <2 x double> %72, i64 0
  %74 = getelementptr double, ptr %6, i64 %indvars.iv476
  %75 = load double, ptr %74, align 8, !tbaa !12
  %76 = fdiv double %73, %75
  %77 = fadd double %.1409, %76
  %exitcond480.not = icmp eq i64 %indvars.iv.next477, %wide.trip.count479
  br i1 %exitcond480.not, label %.loopexit400, label %.lr.ph, !llvm.loop !15

.preheader401:                                    ; preds = %.lr.ph421, %.preheader401
  %indvars.iv481 = phi i64 [ %indvars.iv.next482, %.preheader401 ], [ 1, %.lr.ph421 ]
  %.2411 = phi double [ %88, %.preheader401 ], [ 0.000000e+00, %.lr.ph421 ]
  %gep566 = getelementptr %struct.doublecomplex, ptr %invariant.gep565, i64 %indvars.iv481
  %78 = load double, ptr %gep566, align 8, !tbaa !9
  %79 = tail call { double, double } @Cd(ptr noundef nonnull %gep566)
  %80 = extractvalue { double, double } %79, 1
  %81 = insertelement <2 x double> poison, double %78, i64 0
  %82 = insertelement <2 x double> %81, double %80, i64 1
  %83 = fcmp oge <2 x double> %82, zeroinitializer
  %84 = fneg <2 x double> %82
  %85 = select <2 x i1> %83, <2 x double> %82, <2 x double> %84
  %shift675 = shufflevector <2 x double> %85, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %86 = fadd <2 x double> %85, %shift675
  %87 = extractelement <2 x double> %86, i64 0
  %88 = fadd double %.2411, %87
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %exitcond485.not = icmp eq i64 %indvars.iv.next482, %indvars.iv491
  br i1 %exitcond485.not, label %89, label %.preheader401, !llvm.loop !16

89:                                               ; preds = %.preheader401
  %90 = load i32, ptr %1, align 4, !tbaa !5
  %91 = sext i32 %90 to i64
  %.not389.not412 = icmp slt i64 %indvars.iv474, %91
  br i1 %.not389.not412, label %.lr.ph415.preheader, label %.loopexit400

.lr.ph415.preheader:                              ; preds = %89
  %wide.trip.count489 = zext i32 %90 to i64
  %invariant.gep567 = getelementptr %struct.doublecomplex, ptr %18, i64 %indvars.iv474
  br label %.lr.ph415

.lr.ph415:                                        ; preds = %.lr.ph415.preheader, %.lr.ph415
  %indvars.iv486 = phi i64 [ %indvars.iv474, %.lr.ph415.preheader ], [ %indvars.iv.next487, %.lr.ph415 ]
  %.3414 = phi double [ %88, %.lr.ph415.preheader ], [ %103, %.lr.ph415 ]
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %92 = mul nsw i64 %indvars.iv.next487, %42
  %gep568 = getelementptr %struct.doublecomplex, ptr %invariant.gep567, i64 %92
  %93 = load double, ptr %gep568, align 8, !tbaa !9
  %94 = tail call { double, double } @Cd(ptr noundef nonnull %gep568)
  %95 = extractvalue { double, double } %94, 1
  %96 = insertelement <2 x double> poison, double %93, i64 0
  %97 = insertelement <2 x double> %96, double %95, i64 1
  %98 = fcmp oge <2 x double> %97, zeroinitializer
  %99 = fneg <2 x double> %97
  %100 = select <2 x i1> %98, <2 x double> %97, <2 x double> %99
  %shift676 = shufflevector <2 x double> %100, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %101 = fadd <2 x double> %100, %shift676
  %102 = extractelement <2 x double> %101, i64 0
  %103 = fadd double %.3414, %102
  %exitcond490.not = icmp eq i64 %indvars.iv.next487, %wide.trip.count489
  br i1 %exitcond490.not, label %.loopexit400, label %.lr.ph415, !llvm.loop !17

.loopexit400:                                     ; preds = %.lr.ph, %.lr.ph415, %60, %89
  %.4 = phi double [ %88, %89 ], [ %59, %60 ], [ %103, %.lr.ph415 ], [ %77, %.lr.ph ]
  %104 = getelementptr inbounds double, ptr %21, i64 %indvars.iv474
  store double %.4, ptr %104, align 8, !tbaa !12
  %105 = fcmp oge double %.0346420, %.4
  %106 = select i1 %105, double %.0346420, double %.4
  %indvars.iv.next475 = add nuw nsw i64 %indvars.iv474, 1
  %indvars.iv.next492 = add nuw nsw i64 %indvars.iv491, 1
  %exitcond497.not = icmp eq i64 %indvars.iv.next492, %wide.trip.count496
  br i1 %exitcond497.not, label %.loopexit399thread-pre-split, label %.lr.ph421, !llvm.loop !18

107:                                              ; preds = %38
  br i1 %.not373437, label %.loopexit399, label %.lr.ph441.preheader

.lr.ph441.preheader:                              ; preds = %107
  %108 = sext i32 %16 to i64
  %109 = add nuw i32 %40, 2
  %wide.trip.count526 = zext i32 %109 to i64
  br label %.lr.ph441

.lr.ph441:                                        ; preds = %.lr.ph441.preheader, %.loopexit396
  %indvars.iv521 = phi i64 [ 2, %.lr.ph441.preheader ], [ %indvars.iv.next522, %.loopexit396 ]
  %indvars.iv504 = phi i64 [ 1, %.lr.ph441.preheader ], [ %indvars.iv.next505, %.loopexit396 ]
  %.1347440 = phi double [ 0.000000e+00, %.lr.ph441.preheader ], [ %175, %.loopexit396 ]
  %110 = load i32, ptr %7, align 4, !tbaa !5
  %.not374 = icmp eq i32 %110, 0
  %invariant.gep573 = getelementptr %struct.doublecomplex, ptr %18, i64 %indvars.iv504
  br i1 %.not374, label %.preheader, label %.preheader398

.preheader398:                                    ; preds = %.lr.ph441, %.preheader398
  %indvars.iv498 = phi i64 [ %indvars.iv.next499, %.preheader398 ], [ 1, %.lr.ph441 ]
  %.5424 = phi double [ %125, %.preheader398 ], [ 0.000000e+00, %.lr.ph441 ]
  %111 = mul nsw i64 %indvars.iv498, %108
  %gep570 = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %111
  %112 = load double, ptr %gep570, align 8, !tbaa !9
  %113 = tail call { double, double } @Cd(ptr noundef nonnull %gep570)
  %114 = extractvalue { double, double } %113, 1
  %115 = insertelement <2 x double> poison, double %112, i64 0
  %116 = insertelement <2 x double> %115, double %114, i64 1
  %117 = fcmp oge <2 x double> %116, zeroinitializer
  %118 = fneg <2 x double> %116
  %119 = select <2 x i1> %117, <2 x double> %116, <2 x double> %118
  %shift677 = shufflevector <2 x double> %119, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %120 = fadd <2 x double> %119, %shift677
  %121 = extractelement <2 x double> %120, i64 0
  %122 = getelementptr inbounds double, ptr %19, i64 %indvars.iv498
  %123 = load double, ptr %122, align 8, !tbaa !12
  %124 = fdiv double %121, %123
  %125 = fadd double %.5424, %124
  %indvars.iv.next499 = add nuw nsw i64 %indvars.iv498, 1
  %exitcond503.not = icmp eq i64 %indvars.iv.next499, %indvars.iv521
  br i1 %exitcond503.not, label %126, label %.preheader398, !llvm.loop !19

126:                                              ; preds = %.preheader398
  %127 = load i32, ptr %1, align 4, !tbaa !5
  %128 = sext i32 %127 to i64
  %.not378.not425 = icmp slt i64 %indvars.iv504, %128
  br i1 %.not378.not425, label %.lr.ph428, label %.loopexit396

.lr.ph428:                                        ; preds = %126
  %129 = mul nsw i64 %indvars.iv504, %108
  %wide.trip.count509 = zext i32 %127 to i64
  %invariant.gep571 = getelementptr %struct.doublecomplex, ptr %18, i64 %129
  br label %130

130:                                              ; preds = %.lr.ph428, %130
  %indvars.iv506 = phi i64 [ %indvars.iv504, %.lr.ph428 ], [ %indvars.iv.next507, %130 ]
  %.6427 = phi double [ %125, %.lr.ph428 ], [ %144, %130 ]
  %indvars.iv.next507 = add nuw nsw i64 %indvars.iv506, 1
  %gep572 = getelementptr %struct.doublecomplex, ptr %invariant.gep571, i64 %indvars.iv.next507
  %131 = load double, ptr %gep572, align 8, !tbaa !9
  %132 = tail call { double, double } @Cd(ptr noundef nonnull %gep572)
  %133 = extractvalue { double, double } %132, 1
  %134 = insertelement <2 x double> poison, double %131, i64 0
  %135 = insertelement <2 x double> %134, double %133, i64 1
  %136 = fcmp oge <2 x double> %135, zeroinitializer
  %137 = fneg <2 x double> %135
  %138 = select <2 x i1> %136, <2 x double> %135, <2 x double> %137
  %shift678 = shufflevector <2 x double> %138, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %139 = fadd <2 x double> %138, %shift678
  %140 = extractelement <2 x double> %139, i64 0
  %141 = getelementptr double, ptr %6, i64 %indvars.iv506
  %142 = load double, ptr %141, align 8, !tbaa !12
  %143 = fdiv double %140, %142
  %144 = fadd double %.6427, %143
  %exitcond510.not = icmp eq i64 %indvars.iv.next507, %wide.trip.count509
  br i1 %exitcond510.not, label %.loopexit396, label %130, !llvm.loop !20

.preheader:                                       ; preds = %.lr.ph441, %.preheader
  %indvars.iv511 = phi i64 [ %indvars.iv.next512, %.preheader ], [ 1, %.lr.ph441 ]
  %.7431 = phi double [ %156, %.preheader ], [ 0.000000e+00, %.lr.ph441 ]
  %145 = mul nsw i64 %indvars.iv511, %108
  %gep574 = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %145
  %146 = load double, ptr %gep574, align 8, !tbaa !9
  %147 = tail call { double, double } @Cd(ptr noundef nonnull %gep574)
  %148 = extractvalue { double, double } %147, 1
  %149 = insertelement <2 x double> poison, double %146, i64 0
  %150 = insertelement <2 x double> %149, double %148, i64 1
  %151 = fcmp oge <2 x double> %150, zeroinitializer
  %152 = fneg <2 x double> %150
  %153 = select <2 x i1> %151, <2 x double> %150, <2 x double> %152
  %shift679 = shufflevector <2 x double> %153, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %154 = fadd <2 x double> %153, %shift679
  %155 = extractelement <2 x double> %154, i64 0
  %156 = fadd double %.7431, %155
  %indvars.iv.next512 = add nuw nsw i64 %indvars.iv511, 1
  %exitcond515.not = icmp eq i64 %indvars.iv.next512, %indvars.iv521
  br i1 %exitcond515.not, label %157, label %.preheader, !llvm.loop !21

157:                                              ; preds = %.preheader
  %158 = load i32, ptr %1, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %.not376.not432 = icmp slt i64 %indvars.iv504, %159
  br i1 %.not376.not432, label %.lr.ph435, label %.loopexit396

.lr.ph435:                                        ; preds = %157
  %160 = mul nsw i64 %indvars.iv504, %108
  %wide.trip.count519 = zext i32 %158 to i64
  %invariant.gep575 = getelementptr %struct.doublecomplex, ptr %18, i64 %160
  br label %161

161:                                              ; preds = %.lr.ph435, %161
  %indvars.iv516 = phi i64 [ %indvars.iv504, %.lr.ph435 ], [ %indvars.iv.next517, %161 ]
  %.8434 = phi double [ %156, %.lr.ph435 ], [ %172, %161 ]
  %indvars.iv.next517 = add nuw nsw i64 %indvars.iv516, 1
  %gep576 = getelementptr %struct.doublecomplex, ptr %invariant.gep575, i64 %indvars.iv.next517
  %162 = load double, ptr %gep576, align 8, !tbaa !9
  %163 = tail call { double, double } @Cd(ptr noundef nonnull %gep576)
  %164 = extractvalue { double, double } %163, 1
  %165 = insertelement <2 x double> poison, double %162, i64 0
  %166 = insertelement <2 x double> %165, double %164, i64 1
  %167 = fcmp oge <2 x double> %166, zeroinitializer
  %168 = fneg <2 x double> %166
  %169 = select <2 x i1> %167, <2 x double> %166, <2 x double> %168
  %shift680 = shufflevector <2 x double> %169, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %170 = fadd <2 x double> %169, %shift680
  %171 = extractelement <2 x double> %170, i64 0
  %172 = fadd double %.8434, %171
  %exitcond520.not = icmp eq i64 %indvars.iv.next517, %wide.trip.count519
  br i1 %exitcond520.not, label %.loopexit396, label %161, !llvm.loop !22

.loopexit396:                                     ; preds = %130, %161, %126, %157
  %.9 = phi double [ %156, %157 ], [ %125, %126 ], [ %172, %161 ], [ %144, %130 ]
  %173 = getelementptr inbounds double, ptr %21, i64 %indvars.iv504
  store double %.9, ptr %173, align 8, !tbaa !12
  %174 = fcmp oge double %.1347440, %.9
  %175 = select i1 %174, double %.1347440, double %.9
  %indvars.iv.next505 = add nuw nsw i64 %indvars.iv504, 1
  %indvars.iv.next522 = add nuw nsw i64 %indvars.iv521, 1
  %exitcond527.not = icmp eq i64 %indvars.iv.next522, %wide.trip.count526
  br i1 %exitcond527.not, label %.loopexit399thread-pre-split, label %.lr.ph441, !llvm.loop !23

.loopexit399thread-pre-split:                     ; preds = %.loopexit400, %.loopexit396
  %.2348.ph = phi double [ %175, %.loopexit396 ], [ %106, %.loopexit400 ]
  %.pr548 = load i32, ptr %1, align 4, !tbaa !5
  %176 = fcmp oeq double %.2348.ph, 0.000000e+00
  br label %.loopexit399

.loopexit399:                                     ; preds = %.loopexit399thread-pre-split, %41, %107
  %177 = phi i32 [ %.pr548, %.loopexit399thread-pre-split ], [ %40, %41 ], [ %40, %107 ]
  %.2348 = phi i1 [ %176, %.loopexit399thread-pre-split ], [ true, %41 ], [ true, %107 ]
  %178 = icmp eq i32 %177, 0
  %brmerge = select i1 %178, i1 true, i1 %.2348
  %.mux = select i1 %178, double 1.000000e+00, double 0.000000e+00
  br i1 %brmerge, label %327, label %179

179:                                              ; preds = %.loopexit399
  store double 0.000000e+00, ptr %15, align 8, !tbaa !12
  store i32 0, ptr %13, align 4, !tbaa !5
  %scevgep = getelementptr i8, ptr %9, i64 -16
  %scevgep593 = getelementptr i8, ptr %10, i64 -8
  %scevgep597 = getelementptr i8, ptr %9, i64 -16
  %scevgep599 = getelementptr i8, ptr %6, i64 -8
  %scevgep623 = getelementptr i8, ptr %9, i64 -16
  %scevgep625 = getelementptr i8, ptr %6, i64 -8
  %scevgep649 = getelementptr i8, ptr %9, i64 -16
  %scevgep651 = getelementptr i8, ptr %10, i64 -8
  %.str.1..str = select i1 %.not371, ptr @.str.1, ptr @.str
  %.str.1..str578 = select i1 %.not371, ptr @.str.1, ptr @.str
  br label %.loopexit

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

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

.lr.ph445.preheader:                              ; preds = %183
  %185 = add nuw i32 %184, 1
  %wide.trip.count = zext i32 %185 to i64
  %186 = zext nneg i32 %184 to i64
  %min.iters.check658 = icmp eq i32 %184, 1
  br i1 %min.iters.check658, label %.lr.ph445.preheader685, label %vector.memcheck648

vector.memcheck648:                               ; preds = %.lr.ph445.preheader
  %187 = shl nuw nsw i64 %wide.trip.count, 4
  %scevgep650 = getelementptr i8, ptr %scevgep649, i64 %187
  %188 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep652 = getelementptr i8, ptr %scevgep651, i64 %188
  %bound0653 = icmp ugt ptr %scevgep652, %9
  %bound1654 = icmp ugt ptr %scevgep650, %10
  %found.conflict655 = and i1 %bound0653, %bound1654
  br i1 %found.conflict655, label %.lr.ph445.preheader685, label %vector.ph659

vector.ph659:                                     ; preds = %vector.memcheck648
  %n.vec661 = and i64 %186, 2147483646
  %ind.end662 = or i64 %186, 1
  br label %vector.body664

vector.body664:                                   ; preds = %vector.body664, %vector.ph659
  %index665 = phi i64 [ 0, %vector.ph659 ], [ %index.next672, %vector.body664 ]
  %189 = getelementptr double, ptr %10, i64 %index665
  %wide.load667 = load <2 x double>, ptr %189, align 8, !tbaa !12, !alias.scope !24
  %190 = getelementptr %struct.doublecomplex, ptr %9, i64 %index665
  %wide.vec668 = load <4 x double>, ptr %190, align 8, !tbaa !12
  %strided.vec669 = shufflevector <4 x double> %wide.vec668, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec670 = shufflevector <4 x double> %wide.vec668, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %191 = fmul <2 x double> %wide.load667, %strided.vec669
  %192 = fmul <2 x double> %wide.load667, %strided.vec670
  %interleaved.vec671 = shufflevector <2 x double> %191, <2 x double> %192, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec671, ptr %190, align 8, !tbaa !12
  %index.next672 = add nuw i64 %index665, 2
  %193 = icmp eq i64 %index.next672, %n.vec661
  br i1 %193, label %middle.block656, label %vector.body664, !llvm.loop !27

middle.block656:                                  ; preds = %vector.body664
  %cmp.n673 = icmp eq i64 %n.vec661, %186
  br i1 %cmp.n673, label %._crit_edge, label %.lr.ph445.preheader685

.lr.ph445.preheader685:                           ; preds = %middle.block656, %vector.memcheck648, %.lr.ph445.preheader
  %indvars.iv528.ph = phi i64 [ 1, %vector.memcheck648 ], [ 1, %.lr.ph445.preheader ], [ %ind.end662, %middle.block656 ]
  %194 = zext nneg i32 %184 to i64
  %195 = and i32 %184, 1
  %lcmp.mod.not = icmp eq i32 %195, 0
  br i1 %lcmp.mod.not, label %.lr.ph445.prol.loopexit, label %.lr.ph445.prol

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

.lr.ph445.prol.loopexit:                          ; preds = %.lr.ph445.prol, %.lr.ph445.preheader685
  %indvars.iv528.unr = phi i64 [ %indvars.iv528.ph, %.lr.ph445.preheader685 ], [ %indvars.iv.next529.prol, %.lr.ph445.prol ]
  %203 = icmp eq i64 %indvars.iv528.ph, %194
  br i1 %203, label %._crit_edge, label %.lr.ph445

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

._crit_edge:                                      ; preds = %.lr.ph445.prol.loopexit, %.lr.ph445, %middle.block656, %183
  call void @zpotrs_(ptr noundef nonnull %.str.1..str, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %9, ptr noundef nonnull %1, ptr noundef nonnull %8) #5
  %218 = load i32, ptr %7, align 4, !tbaa !5
  %.not385 = icmp eq i32 %218, 0
  %.pre.pre = load i32, ptr %1, align 4, !tbaa !5
  %.not386446 = icmp slt i32 %.pre.pre, 1
  %or.cond = select i1 %.not385, i1 true, i1 %.not386446
  br i1 %or.cond, label %.loopexit.backedge, label %.lr.ph449.preheader

.lr.ph449.preheader:                              ; preds = %._crit_edge
  %219 = add nuw i32 %.pre.pre, 1
  %wide.trip.count535 = zext i32 %219 to i64
  %220 = zext nneg i32 %.pre.pre to i64
  %min.iters.check632 = icmp ult i32 %.pre.pre, 2
  br i1 %min.iters.check632, label %.lr.ph449.preheader683, label %vector.memcheck622

vector.memcheck622:                               ; preds = %.lr.ph449.preheader
  %221 = shl nuw nsw i64 %wide.trip.count535, 4
  %scevgep624 = getelementptr i8, ptr %scevgep623, i64 %221
  %222 = shl nuw nsw i64 %wide.trip.count535, 3
  %scevgep626 = getelementptr i8, ptr %scevgep625, i64 %222
  %bound0627 = icmp ugt ptr %scevgep626, %9
  %bound1628 = icmp ugt ptr %scevgep624, %6
  %found.conflict629 = and i1 %bound0627, %bound1628
  br i1 %found.conflict629, label %.lr.ph449.preheader683, label %vector.ph633

vector.ph633:                                     ; preds = %vector.memcheck622
  %n.vec635 = and i64 %220, 2147483646
  %ind.end636 = or i64 %220, 1
  br label %vector.body638

vector.body638:                                   ; preds = %vector.body638, %vector.ph633
  %index639 = phi i64 [ 0, %vector.ph633 ], [ %index.next646, %vector.body638 ]
  %223 = getelementptr double, ptr %6, i64 %index639
  %wide.load641 = load <2 x double>, ptr %223, align 8, !tbaa !12, !alias.scope !31
  %224 = getelementptr %struct.doublecomplex, ptr %9, i64 %index639
  %wide.vec642 = load <4 x double>, ptr %224, align 8, !tbaa !12
  %strided.vec643 = shufflevector <4 x double> %wide.vec642, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec644 = shufflevector <4 x double> %wide.vec642, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %225 = fmul <2 x double> %wide.load641, %strided.vec643
  %226 = fmul <2 x double> %wide.load641, %strided.vec644
  %interleaved.vec645 = shufflevector <2 x double> %225, <2 x double> %226, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec645, ptr %224, align 8, !tbaa !12
  %index.next646 = add nuw i64 %index639, 2
  %227 = icmp eq i64 %index.next646, %n.vec635
  br i1 %227, label %middle.block630, label %vector.body638, !llvm.loop !34

middle.block630:                                  ; preds = %vector.body638
  %cmp.n647 = icmp eq i64 %n.vec635, %220
  br i1 %cmp.n647, label %.loopexit.backedge, label %.lr.ph449.preheader683

.loopexit.backedge:                               ; preds = %.lr.ph449.prol.loopexit, %.lr.ph449, %.lr.ph457.prol.loopexit, %.lr.ph457, %middle.block630, %middle.block, %.loopexit394, %._crit_edge
  %.be = phi i32 [ %289, %.loopexit394 ], [ %.pre.pre, %._crit_edge ], [ %289, %middle.block ], [ %.pre.pre, %middle.block630 ], [ %289, %.lr.ph457 ], [ %289, %.lr.ph457.prol.loopexit ], [ %.pre.pre, %.lr.ph449 ], [ %.pre.pre, %.lr.ph449.prol.loopexit ]
  br label %.loopexit

.lr.ph449.preheader683:                           ; preds = %middle.block630, %vector.memcheck622, %.lr.ph449.preheader
  %indvars.iv532.ph = phi i64 [ 1, %vector.memcheck622 ], [ 1, %.lr.ph449.preheader ], [ %ind.end636, %middle.block630 ]
  %228 = zext nneg i32 %.pre.pre to i64
  %229 = and i32 %.pre.pre, 1
  %lcmp.mod699.not = icmp eq i32 %229, 0
  br i1 %lcmp.mod699.not, label %.lr.ph449.prol.loopexit, label %.lr.ph449.prol

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

.lr.ph449.prol.loopexit:                          ; preds = %.lr.ph449.prol, %.lr.ph449.preheader683
  %indvars.iv532.unr = phi i64 [ %indvars.iv532.ph, %.lr.ph449.preheader683 ], [ %indvars.iv.next533.prol, %.lr.ph449.prol ]
  %237 = icmp eq i64 %indvars.iv532.ph, %228
  br i1 %237, label %.loopexit.backedge, label %.lr.ph449

.lr.ph449:                                        ; preds = %.lr.ph449.prol.loopexit, %.lr.ph449
  %indvars.iv532 = phi i64 [ %indvars.iv.next533.1, %.lr.ph449 ], [ %indvars.iv532.unr, %.lr.ph449.prol.loopexit ]
  %238 = getelementptr inbounds double, ptr %19, i64 %indvars.iv532
  %239 = load double, ptr %238, align 8, !tbaa !12
  %240 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %indvars.iv532
  %241 = load <2 x double>, ptr %240, align 8, !tbaa !12
  %242 = insertelement <2 x double> poison, double %239, i64 0
  %243 = shufflevector <2 x double> %242, <2 x double> poison, <2 x i32> zeroinitializer
  %244 = fmul <2 x double> %243, %241
  store <2 x double> %244, ptr %240, align 8, !tbaa !12
  %245 = getelementptr double, ptr %6, i64 %indvars.iv532
  %246 = load double, ptr %245, align 8, !tbaa !12
  %247 = getelementptr %struct.doublecomplex, ptr %9, i64 %indvars.iv532
  %248 = load <2 x double>, ptr %247, align 8, !tbaa !12
  %249 = insertelement <2 x double> poison, double %246, i64 0
  %250 = shufflevector <2 x double> %249, <2 x double> poison, <2 x i32> zeroinitializer
  %251 = fmul <2 x double> %250, %248
  store <2 x double> %251, ptr %247, align 8, !tbaa !12
  %indvars.iv.next533.1 = add nuw nsw i64 %indvars.iv532, 2
  %exitcond536.not.1 = icmp eq i64 %indvars.iv.next533.1, %wide.trip.count535
  br i1 %exitcond536.not.1, label %.loopexit.backedge, label %.lr.ph449, !llvm.loop !35

252:                                              ; preds = %.loopexit
  %253 = load i32, ptr %7, align 4, !tbaa !5
  %.not381 = icmp eq i32 %253, 0
  br i1 %.not381, label %.loopexit394, label %254

254:                                              ; preds = %252
  %255 = load i32, ptr %1, align 4, !tbaa !5
  %.not382450 = icmp slt i32 %255, 1
  br i1 %.not382450, label %.loopexit394, label %.lr.ph453.preheader

.lr.ph453.preheader:                              ; preds = %254
  %256 = add nuw i32 %255, 1
  %wide.trip.count540 = zext i32 %256 to i64
  %257 = zext nneg i32 %255 to i64
  %min.iters.check606 = icmp eq i32 %255, 1
  br i1 %min.iters.check606, label %.lr.ph453.preheader682, label %vector.memcheck596

vector.memcheck596:                               ; preds = %.lr.ph453.preheader
  %258 = shl nuw nsw i64 %wide.trip.count540, 4
  %scevgep598 = getelementptr i8, ptr %scevgep597, i64 %258
  %259 = shl nuw nsw i64 %wide.trip.count540, 3
  %scevgep600 = getelementptr i8, ptr %scevgep599, i64 %259
  %bound0601 = icmp ugt ptr %scevgep600, %9
  %bound1602 = icmp ugt ptr %scevgep598, %6
  %found.conflict603 = and i1 %bound0601, %bound1602
  br i1 %found.conflict603, label %.lr.ph453.preheader682, label %vector.ph607

vector.ph607:                                     ; preds = %vector.memcheck596
  %n.vec609 = and i64 %257, 2147483646
  %ind.end610 = or i64 %257, 1
  br label %vector.body612

vector.body612:                                   ; preds = %vector.body612, %vector.ph607
  %index613 = phi i64 [ 0, %vector.ph607 ], [ %index.next620, %vector.body612 ]
  %260 = getelementptr double, ptr %6, i64 %index613
  %wide.load615 = load <2 x double>, ptr %260, align 8, !tbaa !12, !alias.scope !36
  %261 = getelementptr %struct.doublecomplex, ptr %9, i64 %index613
  %wide.vec616 = load <4 x double>, ptr %261, align 8, !tbaa !12
  %strided.vec617 = shufflevector <4 x double> %wide.vec616, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec618 = shufflevector <4 x double> %wide.vec616, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %262 = fmul <2 x double> %wide.load615, %strided.vec617
  %263 = fmul <2 x double> %wide.load615, %strided.vec618
  %interleaved.vec619 = shufflevector <2 x double> %262, <2 x double> %263, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec619, ptr %261, align 8, !tbaa !12
  %index.next620 = add nuw i64 %index613, 2
  %264 = icmp eq i64 %index.next620, %n.vec609
  br i1 %264, label %middle.block604, label %vector.body612, !llvm.loop !39

middle.block604:                                  ; preds = %vector.body612
  %cmp.n621 = icmp eq i64 %n.vec609, %257
  br i1 %cmp.n621, label %.loopexit394, label %.lr.ph453.preheader682

.lr.ph453.preheader682:                           ; preds = %middle.block604, %vector.memcheck596, %.lr.ph453.preheader
  %indvars.iv537.ph = phi i64 [ 1, %vector.memcheck596 ], [ 1, %.lr.ph453.preheader ], [ %ind.end610, %middle.block604 ]
  %265 = zext nneg i32 %255 to i64
  %266 = and i32 %255, 1
  %lcmp.mod701.not = icmp eq i32 %266, 0
  br i1 %lcmp.mod701.not, label %.lr.ph453.prol.loopexit, label %.lr.ph453.prol

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

.lr.ph453.prol.loopexit:                          ; preds = %.lr.ph453.prol, %.lr.ph453.preheader682
  %indvars.iv537.unr = phi i64 [ %indvars.iv537.ph, %.lr.ph453.preheader682 ], [ %indvars.iv.next538.prol, %.lr.ph453.prol ]
  %274 = icmp eq i64 %indvars.iv537.ph, %265
  br i1 %274, label %.loopexit394, label %.lr.ph453

.lr.ph453:                                        ; preds = %.lr.ph453.prol.loopexit, %.lr.ph453
  %indvars.iv537 = phi i64 [ %indvars.iv.next538.1, %.lr.ph453 ], [ %indvars.iv537.unr, %.lr.ph453.prol.loopexit ]
  %275 = getelementptr inbounds double, ptr %19, i64 %indvars.iv537
  %276 = load double, ptr %275, align 8, !tbaa !12
  %277 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %indvars.iv537
  %278 = load <2 x double>, ptr %277, align 8, !tbaa !12
  %279 = insertelement <2 x double> poison, double %276, i64 0
  %280 = shufflevector <2 x double> %279, <2 x double> poison, <2 x i32> zeroinitializer
  %281 = fmul <2 x double> %280, %278
  store <2 x double> %281, ptr %277, align 8, !tbaa !12
  %282 = getelementptr double, ptr %6, i64 %indvars.iv537
  %283 = load double, ptr %282, align 8, !tbaa !12
  %284 = getelementptr %struct.doublecomplex, ptr %9, i64 %indvars.iv537
  %285 = load <2 x double>, ptr %284, align 8, !tbaa !12
  %286 = insertelement <2 x double> poison, double %283, i64 0
  %287 = shufflevector <2 x double> %286, <2 x double> poison, <2 x i32> zeroinitializer
  %288 = fmul <2 x double> %287, %285
  store <2 x double> %288, ptr %284, 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 %.loopexit394, label %.lr.ph453, !llvm.loop !40

.loopexit394:                                     ; preds = %.lr.ph453.prol.loopexit, %.lr.ph453, %middle.block604, %254, %252
  call void @zpotrs_(ptr noundef nonnull %.str.1..str578, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %9, ptr noundef nonnull %1, ptr noundef nonnull %8) #5
  %289 = load i32, ptr %1, align 4, !tbaa !5
  %.not383454 = icmp slt i32 %289, 1
  br i1 %.not383454, label %.loopexit.backedge, label %.lr.ph457.preheader

.lr.ph457.preheader:                              ; preds = %.loopexit394
  %290 = add nuw i32 %289, 1
  %wide.trip.count545 = zext i32 %290 to i64
  %291 = zext nneg i32 %289 to i64
  %min.iters.check = icmp eq i32 %289, 1
  br i1 %min.iters.check, label %.lr.ph457.preheader681, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph457.preheader
  %292 = shl nuw nsw i64 %wide.trip.count545, 4
  %scevgep592 = getelementptr i8, ptr %scevgep, i64 %292
  %293 = shl nuw nsw i64 %wide.trip.count545, 3
  %scevgep594 = getelementptr i8, ptr %scevgep593, i64 %293
  %bound0 = icmp ugt ptr %scevgep594, %9
  %bound1 = icmp ugt ptr %scevgep592, %10
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph457.preheader681, label %vector.ph

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

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %291
  br i1 %cmp.n, label %.loopexit.backedge, label %.lr.ph457.preheader681

.lr.ph457.preheader681:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph457.preheader
  %indvars.iv542.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph457.preheader ], [ %ind.end, %middle.block ]
  %299 = zext nneg i32 %289 to i64
  %300 = and i32 %289, 1
  %lcmp.mod703.not = icmp eq i32 %300, 0
  br i1 %lcmp.mod703.not, label %.lr.ph457.prol.loopexit, label %.lr.ph457.prol

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

.lr.ph457.prol.loopexit:                          ; preds = %.lr.ph457.prol, %.lr.ph457.preheader681
  %indvars.iv542.unr = phi i64 [ %indvars.iv542.ph, %.lr.ph457.preheader681 ], [ %indvars.iv.next543.prol, %.lr.ph457.prol ]
  %308 = icmp eq i64 %indvars.iv542.ph, %299
  br i1 %308, label %.loopexit.backedge, label %.lr.ph457

.lr.ph457:                                        ; preds = %.lr.ph457.prol.loopexit, %.lr.ph457
  %indvars.iv542 = phi i64 [ %indvars.iv.next543.1, %.lr.ph457 ], [ %indvars.iv542.unr, %.lr.ph457.prol.loopexit ]
  %309 = getelementptr inbounds double, ptr %21, i64 %indvars.iv542
  %310 = load double, ptr %309, align 8, !tbaa !12
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %20, i64 %indvars.iv542
  %312 = load <2 x double>, ptr %311, align 8, !tbaa !12
  %313 = insertelement <2 x double> poison, double %310, i64 0
  %314 = shufflevector <2 x double> %313, <2 x double> poison, <2 x i32> zeroinitializer
  %315 = fmul <2 x double> %314, %312
  store <2 x double> %315, ptr %311, align 8, !tbaa !12
  %316 = getelementptr double, ptr %10, i64 %indvars.iv542
  %317 = load double, ptr %316, align 8, !tbaa !12
  %318 = getelementptr %struct.doublecomplex, ptr %9, i64 %indvars.iv542
  %319 = load <2 x double>, ptr %318, align 8, !tbaa !12
  %320 = insertelement <2 x double> poison, double %317, i64 0
  %321 = shufflevector <2 x double> %320, <2 x double> poison, <2 x i32> zeroinitializer
  %322 = fmul <2 x double> %321, %319
  store <2 x double> %322, ptr %318, align 8, !tbaa !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 %.loopexit.backedge, label %.lr.ph457, !llvm.loop !45

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

327:                                              ; preds = %.loopexit399, %323, %.thread
  %.0345 = phi double [ 0.000000e+00, %.thread ], [ %.0363, %323 ], [ %.mux, %.loopexit399 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #5
  ret double %.0345
}

; 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 @zpotrs_(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