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

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

73:                                               ; preds = %12
  %74 = load ptr, ptr %22, align 8, !tbaa !5
  store i64 -2, ptr %74, align 8, !tbaa !9
  br label %75

75:                                               ; preds = %73, %12
  %76 = load ptr, ptr %22, align 8, !tbaa !5
  %77 = load i64, ptr %76, align 8, !tbaa !9
  %78 = icmp ne i64 %77, 0
  br i1 %78, label %79, label %85

79:                                               ; preds = %75
  %80 = load ptr, ptr %22, align 8, !tbaa !5
  %81 = load i64, ptr %80, align 8, !tbaa !9
  %82 = sub nsw i64 0, %81
  store i64 %82, ptr %30, align 8, !tbaa !9
  %83 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %30)
  %84 = load double, ptr %34, align 8, !tbaa !11
  store double %84, ptr %13, align 8
  store i32 1, ptr %46, align 4
  br label %871

85:                                               ; preds = %75
  store i64 0, ptr %40, align 8, !tbaa !9
  %86 = load ptr, ptr %14, align 8, !tbaa !5
  %87 = call i64 @lsame_(ptr noundef %86, ptr noundef @.str.1)
  %88 = icmp ne i64 %87, 0
  br i1 %88, label %89, label %90

89:                                               ; preds = %85
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %89, %85
  store double 0.000000e+00, ptr %44, align 8, !tbaa !11
  %91 = load i64, ptr %40, align 8, !tbaa !9
  %92 = icmp ne i64 %91, 0
  br i1 %92, label %93, label %336

93:                                               ; preds = %90
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = load i64, ptr %94, align 8, !tbaa !9
  store i64 %95, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %96

96:                                               ; preds = %332, %93
  %97 = load i64, ptr %38, align 8, !tbaa !9
  %98 = load i64, ptr %30, align 8, !tbaa !9
  %99 = icmp sle i64 %97, %98
  br i1 %99, label %100, label %335

100:                                              ; preds = %96
  store double 0.000000e+00, ptr %41, align 8, !tbaa !11
  %101 = load ptr, ptr %21, align 8, !tbaa !5
  %102 = load i64, ptr %101, align 8, !tbaa !9
  %103 = icmp ne i64 %102, 0
  br i1 %103, label %104, label %216

104:                                              ; preds = %100
  %105 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %105, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %155, %104
  %107 = load i64, ptr %39, align 8, !tbaa !9
  %108 = load i64, ptr %31, align 8, !tbaa !9
  %109 = icmp sle i64 %107, %108
  br i1 %109, label %110, label %158

110:                                              ; preds = %106
  %111 = load i64, ptr %39, align 8, !tbaa !9
  %112 = load i64, ptr %38, align 8, !tbaa !9
  %113 = load i64, ptr %26, align 8, !tbaa !9
  %114 = mul nsw i64 %112, %113
  %115 = add nsw i64 %111, %114
  store i64 %115, ptr %32, align 8, !tbaa !9
  %116 = load ptr, ptr %16, align 8, !tbaa !5
  %117 = load i64, ptr %32, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.doublecomplex, ptr %116, i64 %117
  %119 = getelementptr inbounds %struct.doublecomplex, ptr %118, i32 0, i32 0
  %120 = load double, ptr %119, align 8, !tbaa !13
  store double %120, ptr %35, align 8, !tbaa !11
  %121 = load double, ptr %35, align 8, !tbaa !11
  %122 = fcmp oge double %121, 0.000000e+00
  br i1 %122, label %123, label %125

123:                                              ; preds = %110
  %124 = load double, ptr %35, align 8, !tbaa !11
  br label %128

125:                                              ; preds = %110
  %126 = load double, ptr %35, align 8, !tbaa !11
  %127 = fneg double %126
  br label %128

128:                                              ; preds = %125, %123
  %129 = phi double [ %124, %123 ], [ %127, %125 ]
  %130 = load ptr, ptr %16, align 8, !tbaa !5
  %131 = load i64, ptr %39, align 8, !tbaa !9
  %132 = load i64, ptr %38, align 8, !tbaa !9
  %133 = load i64, ptr %26, align 8, !tbaa !9
  %134 = mul nsw i64 %132, %133
  %135 = add nsw i64 %131, %134
  %136 = getelementptr inbounds %struct.doublecomplex, ptr %130, i64 %135
  %137 = call double @d_imag(ptr noundef %136)
  store double %137, ptr %36, align 8, !tbaa !11
  %138 = load double, ptr %36, align 8, !tbaa !11
  %139 = fcmp oge double %138, 0.000000e+00
  br i1 %139, label %140, label %142

140:                                              ; preds = %128
  %141 = load double, ptr %36, align 8, !tbaa !11
  br label %145

142:                                              ; preds = %128
  %143 = load double, ptr %36, align 8, !tbaa !11
  %144 = fneg double %143
  br label %145

145:                                              ; preds = %142, %140
  %146 = phi double [ %141, %140 ], [ %144, %142 ]
  %147 = fadd double %129, %146
  %148 = load ptr, ptr %20, align 8, !tbaa !5
  %149 = load i64, ptr %39, align 8, !tbaa !9
  %150 = getelementptr inbounds double, ptr %148, i64 %149
  %151 = load double, ptr %150, align 8, !tbaa !11
  %152 = fdiv double %147, %151
  %153 = load double, ptr %41, align 8, !tbaa !11
  %154 = fadd double %153, %152
  store double %154, ptr %41, align 8, !tbaa !11
  br label %155

155:                                              ; preds = %145
  %156 = load i64, ptr %39, align 8, !tbaa !9
  %157 = add nsw i64 %156, 1
  store i64 %157, ptr %39, align 8, !tbaa !9
  br label %106, !llvm.loop !15

158:                                              ; preds = %106
  %159 = load ptr, ptr %15, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  store i64 %160, ptr %31, align 8, !tbaa !9
  %161 = load i64, ptr %38, align 8, !tbaa !9
  %162 = add nsw i64 %161, 1
  store i64 %162, ptr %39, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %212, %158
  %164 = load i64, ptr %39, align 8, !tbaa !9
  %165 = load i64, ptr %31, align 8, !tbaa !9
  %166 = icmp sle i64 %164, %165
  br i1 %166, label %167, label %215

167:                                              ; preds = %163
  %168 = load i64, ptr %38, align 8, !tbaa !9
  %169 = load i64, ptr %39, align 8, !tbaa !9
  %170 = load i64, ptr %26, align 8, !tbaa !9
  %171 = mul nsw i64 %169, %170
  %172 = add nsw i64 %168, %171
  store i64 %172, ptr %32, align 8, !tbaa !9
  %173 = load ptr, ptr %16, align 8, !tbaa !5
  %174 = load i64, ptr %32, align 8, !tbaa !9
  %175 = getelementptr inbounds %struct.doublecomplex, ptr %173, i64 %174
  %176 = getelementptr inbounds %struct.doublecomplex, ptr %175, i32 0, i32 0
  %177 = load double, ptr %176, align 8, !tbaa !13
  store double %177, ptr %35, align 8, !tbaa !11
  %178 = load double, ptr %35, align 8, !tbaa !11
  %179 = fcmp oge double %178, 0.000000e+00
  br i1 %179, label %180, label %182

180:                                              ; preds = %167
  %181 = load double, ptr %35, align 8, !tbaa !11
  br label %185

182:                                              ; preds = %167
  %183 = load double, ptr %35, align 8, !tbaa !11
  %184 = fneg double %183
  br label %185

185:                                              ; preds = %182, %180
  %186 = phi double [ %181, %180 ], [ %184, %182 ]
  %187 = load ptr, ptr %16, align 8, !tbaa !5
  %188 = load i64, ptr %38, align 8, !tbaa !9
  %189 = load i64, ptr %39, align 8, !tbaa !9
  %190 = load i64, ptr %26, align 8, !tbaa !9
  %191 = mul nsw i64 %189, %190
  %192 = add nsw i64 %188, %191
  %193 = getelementptr inbounds %struct.doublecomplex, ptr %187, i64 %192
  %194 = call double @d_imag(ptr noundef %193)
  store double %194, ptr %36, align 8, !tbaa !11
  %195 = load double, ptr %36, align 8, !tbaa !11
  %196 = fcmp oge double %195, 0.000000e+00
  br i1 %196, label %197, label %199

197:                                              ; preds = %185
  %198 = load double, ptr %36, align 8, !tbaa !11
  br label %202

199:                                              ; preds = %185
  %200 = load double, ptr %36, align 8, !tbaa !11
  %201 = fneg double %200
  br label %202

202:                                              ; preds = %199, %197
  %203 = phi double [ %198, %197 ], [ %201, %199 ]
  %204 = fadd double %186, %203
  %205 = load ptr, ptr %20, align 8, !tbaa !5
  %206 = load i64, ptr %39, align 8, !tbaa !9
  %207 = getelementptr inbounds double, ptr %205, i64 %206
  %208 = load double, ptr %207, align 8, !tbaa !11
  %209 = fdiv double %204, %208
  %210 = load double, ptr %41, align 8, !tbaa !11
  %211 = fadd double %210, %209
  store double %211, ptr %41, align 8, !tbaa !11
  br label %212

212:                                              ; preds = %202
  %213 = load i64, ptr %39, align 8, !tbaa !9
  %214 = add nsw i64 %213, 1
  store i64 %214, ptr %39, align 8, !tbaa !9
  br label %163, !llvm.loop !17

215:                                              ; preds = %163
  br label %318

216:                                              ; preds = %100
  %217 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %217, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %262, %216
  %219 = load i64, ptr %39, align 8, !tbaa !9
  %220 = load i64, ptr %31, align 8, !tbaa !9
  %221 = icmp sle i64 %219, %220
  br i1 %221, label %222, label %265

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

235:                                              ; preds = %222
  %236 = load double, ptr %35, align 8, !tbaa !11
  br label %240

237:                                              ; preds = %222
  %238 = load double, ptr %35, align 8, !tbaa !11
  %239 = fneg double %238
  br label %240

240:                                              ; preds = %237, %235
  %241 = phi double [ %236, %235 ], [ %239, %237 ]
  %242 = load ptr, ptr %16, align 8, !tbaa !5
  %243 = load i64, ptr %39, align 8, !tbaa !9
  %244 = load i64, ptr %38, align 8, !tbaa !9
  %245 = load i64, ptr %26, align 8, !tbaa !9
  %246 = mul nsw i64 %244, %245
  %247 = add nsw i64 %243, %246
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %242, i64 %247
  %249 = call double @d_imag(ptr noundef %248)
  store double %249, ptr %36, align 8, !tbaa !11
  %250 = load double, ptr %36, align 8, !tbaa !11
  %251 = fcmp oge double %250, 0.000000e+00
  br i1 %251, label %252, label %254

252:                                              ; preds = %240
  %253 = load double, ptr %36, align 8, !tbaa !11
  br label %257

254:                                              ; preds = %240
  %255 = load double, ptr %36, align 8, !tbaa !11
  %256 = fneg double %255
  br label %257

257:                                              ; preds = %254, %252
  %258 = phi double [ %253, %252 ], [ %256, %254 ]
  %259 = fadd double %241, %258
  %260 = load double, ptr %41, align 8, !tbaa !11
  %261 = fadd double %260, %259
  store double %261, ptr %41, align 8, !tbaa !11
  br label %262

262:                                              ; preds = %257
  %263 = load i64, ptr %39, align 8, !tbaa !9
  %264 = add nsw i64 %263, 1
  store i64 %264, ptr %39, align 8, !tbaa !9
  br label %218, !llvm.loop !18

265:                                              ; preds = %218
  %266 = load ptr, ptr %15, align 8, !tbaa !5
  %267 = load i64, ptr %266, align 8, !tbaa !9
  store i64 %267, ptr %31, align 8, !tbaa !9
  %268 = load i64, ptr %38, align 8, !tbaa !9
  %269 = add nsw i64 %268, 1
  store i64 %269, ptr %39, align 8, !tbaa !9
  br label %270

270:                                              ; preds = %314, %265
  %271 = load i64, ptr %39, align 8, !tbaa !9
  %272 = load i64, ptr %31, align 8, !tbaa !9
  %273 = icmp sle i64 %271, %272
  br i1 %273, label %274, label %317

274:                                              ; preds = %270
  %275 = load i64, ptr %38, align 8, !tbaa !9
  %276 = load i64, ptr %39, align 8, !tbaa !9
  %277 = load i64, ptr %26, align 8, !tbaa !9
  %278 = mul nsw i64 %276, %277
  %279 = add nsw i64 %275, %278
  store i64 %279, ptr %32, align 8, !tbaa !9
  %280 = load ptr, ptr %16, align 8, !tbaa !5
  %281 = load i64, ptr %32, align 8, !tbaa !9
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %280, i64 %281
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %282, i32 0, i32 0
  %284 = load double, ptr %283, align 8, !tbaa !13
  store double %284, ptr %35, align 8, !tbaa !11
  %285 = load double, ptr %35, align 8, !tbaa !11
  %286 = fcmp oge double %285, 0.000000e+00
  br i1 %286, label %287, label %289

287:                                              ; preds = %274
  %288 = load double, ptr %35, align 8, !tbaa !11
  br label %292

289:                                              ; preds = %274
  %290 = load double, ptr %35, align 8, !tbaa !11
  %291 = fneg double %290
  br label %292

292:                                              ; preds = %289, %287
  %293 = phi double [ %288, %287 ], [ %291, %289 ]
  %294 = load ptr, ptr %16, align 8, !tbaa !5
  %295 = load i64, ptr %38, align 8, !tbaa !9
  %296 = load i64, ptr %39, align 8, !tbaa !9
  %297 = load i64, ptr %26, align 8, !tbaa !9
  %298 = mul nsw i64 %296, %297
  %299 = add nsw i64 %295, %298
  %300 = getelementptr inbounds %struct.doublecomplex, ptr %294, i64 %299
  %301 = call double @d_imag(ptr noundef %300)
  store double %301, ptr %36, align 8, !tbaa !11
  %302 = load double, ptr %36, align 8, !tbaa !11
  %303 = fcmp oge double %302, 0.000000e+00
  br i1 %303, label %304, label %306

304:                                              ; preds = %292
  %305 = load double, ptr %36, align 8, !tbaa !11
  br label %309

306:                                              ; preds = %292
  %307 = load double, ptr %36, align 8, !tbaa !11
  %308 = fneg double %307
  br label %309

309:                                              ; preds = %306, %304
  %310 = phi double [ %305, %304 ], [ %308, %306 ]
  %311 = fadd double %293, %310
  %312 = load double, ptr %41, align 8, !tbaa !11
  %313 = fadd double %312, %311
  store double %313, ptr %41, align 8, !tbaa !11
  br label %314

314:                                              ; preds = %309
  %315 = load i64, ptr %39, align 8, !tbaa !9
  %316 = add nsw i64 %315, 1
  store i64 %316, ptr %39, align 8, !tbaa !9
  br label %270, !llvm.loop !19

317:                                              ; preds = %270
  br label %318

318:                                              ; preds = %317, %215
  %319 = load double, ptr %41, align 8, !tbaa !11
  %320 = load ptr, ptr %24, align 8, !tbaa !5
  %321 = load i64, ptr %38, align 8, !tbaa !9
  %322 = getelementptr inbounds double, ptr %320, i64 %321
  store double %319, ptr %322, align 8, !tbaa !11
  %323 = load double, ptr %44, align 8, !tbaa !11
  %324 = load double, ptr %41, align 8, !tbaa !11
  %325 = fcmp oge double %323, %324
  br i1 %325, label %326, label %328

326:                                              ; preds = %318
  %327 = load double, ptr %44, align 8, !tbaa !11
  br label %330

328:                                              ; preds = %318
  %329 = load double, ptr %41, align 8, !tbaa !11
  br label %330

330:                                              ; preds = %328, %326
  %331 = phi double [ %327, %326 ], [ %329, %328 ]
  store double %331, ptr %44, align 8, !tbaa !11
  br label %332

332:                                              ; preds = %330
  %333 = load i64, ptr %38, align 8, !tbaa !9
  %334 = add nsw i64 %333, 1
  store i64 %334, ptr %38, align 8, !tbaa !9
  br label %96, !llvm.loop !20

335:                                              ; preds = %96
  br label %579

336:                                              ; preds = %90
  %337 = load ptr, ptr %15, align 8, !tbaa !5
  %338 = load i64, ptr %337, align 8, !tbaa !9
  store i64 %338, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %339

339:                                              ; preds = %575, %336
  %340 = load i64, ptr %38, align 8, !tbaa !9
  %341 = load i64, ptr %30, align 8, !tbaa !9
  %342 = icmp sle i64 %340, %341
  br i1 %342, label %343, label %578

343:                                              ; preds = %339
  store double 0.000000e+00, ptr %41, align 8, !tbaa !11
  %344 = load ptr, ptr %21, align 8, !tbaa !5
  %345 = load i64, ptr %344, align 8, !tbaa !9
  %346 = icmp ne i64 %345, 0
  br i1 %346, label %347, label %459

347:                                              ; preds = %343
  %348 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %348, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %398, %347
  %350 = load i64, ptr %39, align 8, !tbaa !9
  %351 = load i64, ptr %31, align 8, !tbaa !9
  %352 = icmp sle i64 %350, %351
  br i1 %352, label %353, label %401

353:                                              ; preds = %349
  %354 = load i64, ptr %38, align 8, !tbaa !9
  %355 = load i64, ptr %39, align 8, !tbaa !9
  %356 = load i64, ptr %26, align 8, !tbaa !9
  %357 = mul nsw i64 %355, %356
  %358 = add nsw i64 %354, %357
  store i64 %358, ptr %32, align 8, !tbaa !9
  %359 = load ptr, ptr %16, align 8, !tbaa !5
  %360 = load i64, ptr %32, align 8, !tbaa !9
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %359, i64 %360
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %361, i32 0, i32 0
  %363 = load double, ptr %362, align 8, !tbaa !13
  store double %363, ptr %35, align 8, !tbaa !11
  %364 = load double, ptr %35, align 8, !tbaa !11
  %365 = fcmp oge double %364, 0.000000e+00
  br i1 %365, label %366, label %368

366:                                              ; preds = %353
  %367 = load double, ptr %35, align 8, !tbaa !11
  br label %371

368:                                              ; preds = %353
  %369 = load double, ptr %35, align 8, !tbaa !11
  %370 = fneg double %369
  br label %371

371:                                              ; preds = %368, %366
  %372 = phi double [ %367, %366 ], [ %370, %368 ]
  %373 = load ptr, ptr %16, align 8, !tbaa !5
  %374 = load i64, ptr %38, align 8, !tbaa !9
  %375 = load i64, ptr %39, align 8, !tbaa !9
  %376 = load i64, ptr %26, align 8, !tbaa !9
  %377 = mul nsw i64 %375, %376
  %378 = add nsw i64 %374, %377
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %373, i64 %378
  %380 = call double @d_imag(ptr noundef %379)
  store double %380, ptr %36, align 8, !tbaa !11
  %381 = load double, ptr %36, align 8, !tbaa !11
  %382 = fcmp oge double %381, 0.000000e+00
  br i1 %382, label %383, label %385

383:                                              ; preds = %371
  %384 = load double, ptr %36, align 8, !tbaa !11
  br label %388

385:                                              ; preds = %371
  %386 = load double, ptr %36, align 8, !tbaa !11
  %387 = fneg double %386
  br label %388

388:                                              ; preds = %385, %383
  %389 = phi double [ %384, %383 ], [ %387, %385 ]
  %390 = fadd double %372, %389
  %391 = load ptr, ptr %20, align 8, !tbaa !5
  %392 = load i64, ptr %39, align 8, !tbaa !9
  %393 = getelementptr inbounds double, ptr %391, i64 %392
  %394 = load double, ptr %393, align 8, !tbaa !11
  %395 = fdiv double %390, %394
  %396 = load double, ptr %41, align 8, !tbaa !11
  %397 = fadd double %396, %395
  store double %397, ptr %41, align 8, !tbaa !11
  br label %398

398:                                              ; preds = %388
  %399 = load i64, ptr %39, align 8, !tbaa !9
  %400 = add nsw i64 %399, 1
  store i64 %400, ptr %39, align 8, !tbaa !9
  br label %349, !llvm.loop !21

401:                                              ; preds = %349
  %402 = load ptr, ptr %15, align 8, !tbaa !5
  %403 = load i64, ptr %402, align 8, !tbaa !9
  store i64 %403, ptr %31, align 8, !tbaa !9
  %404 = load i64, ptr %38, align 8, !tbaa !9
  %405 = add nsw i64 %404, 1
  store i64 %405, ptr %39, align 8, !tbaa !9
  br label %406

406:                                              ; preds = %455, %401
  %407 = load i64, ptr %39, align 8, !tbaa !9
  %408 = load i64, ptr %31, align 8, !tbaa !9
  %409 = icmp sle i64 %407, %408
  br i1 %409, label %410, label %458

410:                                              ; preds = %406
  %411 = load i64, ptr %39, align 8, !tbaa !9
  %412 = load i64, ptr %38, align 8, !tbaa !9
  %413 = load i64, ptr %26, align 8, !tbaa !9
  %414 = mul nsw i64 %412, %413
  %415 = add nsw i64 %411, %414
  store i64 %415, ptr %32, align 8, !tbaa !9
  %416 = load ptr, ptr %16, align 8, !tbaa !5
  %417 = load i64, ptr %32, align 8, !tbaa !9
  %418 = getelementptr inbounds %struct.doublecomplex, ptr %416, i64 %417
  %419 = getelementptr inbounds %struct.doublecomplex, ptr %418, i32 0, i32 0
  %420 = load double, ptr %419, align 8, !tbaa !13
  store double %420, ptr %35, align 8, !tbaa !11
  %421 = load double, ptr %35, align 8, !tbaa !11
  %422 = fcmp oge double %421, 0.000000e+00
  br i1 %422, label %423, label %425

423:                                              ; preds = %410
  %424 = load double, ptr %35, align 8, !tbaa !11
  br label %428

425:                                              ; preds = %410
  %426 = load double, ptr %35, align 8, !tbaa !11
  %427 = fneg double %426
  br label %428

428:                                              ; preds = %425, %423
  %429 = phi double [ %424, %423 ], [ %427, %425 ]
  %430 = load ptr, ptr %16, align 8, !tbaa !5
  %431 = load i64, ptr %39, align 8, !tbaa !9
  %432 = load i64, ptr %38, align 8, !tbaa !9
  %433 = load i64, ptr %26, align 8, !tbaa !9
  %434 = mul nsw i64 %432, %433
  %435 = add nsw i64 %431, %434
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %430, i64 %435
  %437 = call double @d_imag(ptr noundef %436)
  store double %437, ptr %36, align 8, !tbaa !11
  %438 = load double, ptr %36, align 8, !tbaa !11
  %439 = fcmp oge double %438, 0.000000e+00
  br i1 %439, label %440, label %442

440:                                              ; preds = %428
  %441 = load double, ptr %36, align 8, !tbaa !11
  br label %445

442:                                              ; preds = %428
  %443 = load double, ptr %36, align 8, !tbaa !11
  %444 = fneg double %443
  br label %445

445:                                              ; preds = %442, %440
  %446 = phi double [ %441, %440 ], [ %444, %442 ]
  %447 = fadd double %429, %446
  %448 = load ptr, ptr %20, align 8, !tbaa !5
  %449 = load i64, ptr %39, align 8, !tbaa !9
  %450 = getelementptr inbounds double, ptr %448, i64 %449
  %451 = load double, ptr %450, align 8, !tbaa !11
  %452 = fdiv double %447, %451
  %453 = load double, ptr %41, align 8, !tbaa !11
  %454 = fadd double %453, %452
  store double %454, ptr %41, align 8, !tbaa !11
  br label %455

455:                                              ; preds = %445
  %456 = load i64, ptr %39, align 8, !tbaa !9
  %457 = add nsw i64 %456, 1
  store i64 %457, ptr %39, align 8, !tbaa !9
  br label %406, !llvm.loop !22

458:                                              ; preds = %406
  br label %561

459:                                              ; preds = %343
  %460 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %460, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %505, %459
  %462 = load i64, ptr %39, align 8, !tbaa !9
  %463 = load i64, ptr %31, align 8, !tbaa !9
  %464 = icmp sle i64 %462, %463
  br i1 %464, label %465, label %508

465:                                              ; preds = %461
  %466 = load i64, ptr %38, align 8, !tbaa !9
  %467 = load i64, ptr %39, align 8, !tbaa !9
  %468 = load i64, ptr %26, align 8, !tbaa !9
  %469 = mul nsw i64 %467, %468
  %470 = add nsw i64 %466, %469
  store i64 %470, ptr %32, align 8, !tbaa !9
  %471 = load ptr, ptr %16, align 8, !tbaa !5
  %472 = load i64, ptr %32, align 8, !tbaa !9
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %471, i64 %472
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %473, i32 0, i32 0
  %475 = load double, ptr %474, align 8, !tbaa !13
  store double %475, ptr %35, align 8, !tbaa !11
  %476 = load double, ptr %35, align 8, !tbaa !11
  %477 = fcmp oge double %476, 0.000000e+00
  br i1 %477, label %478, label %480

478:                                              ; preds = %465
  %479 = load double, ptr %35, align 8, !tbaa !11
  br label %483

480:                                              ; preds = %465
  %481 = load double, ptr %35, align 8, !tbaa !11
  %482 = fneg double %481
  br label %483

483:                                              ; preds = %480, %478
  %484 = phi double [ %479, %478 ], [ %482, %480 ]
  %485 = load ptr, ptr %16, align 8, !tbaa !5
  %486 = load i64, ptr %38, align 8, !tbaa !9
  %487 = load i64, ptr %39, align 8, !tbaa !9
  %488 = load i64, ptr %26, align 8, !tbaa !9
  %489 = mul nsw i64 %487, %488
  %490 = add nsw i64 %486, %489
  %491 = getelementptr inbounds %struct.doublecomplex, ptr %485, i64 %490
  %492 = call double @d_imag(ptr noundef %491)
  store double %492, ptr %36, align 8, !tbaa !11
  %493 = load double, ptr %36, align 8, !tbaa !11
  %494 = fcmp oge double %493, 0.000000e+00
  br i1 %494, label %495, label %497

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

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

500:                                              ; preds = %497, %495
  %501 = phi double [ %496, %495 ], [ %499, %497 ]
  %502 = fadd double %484, %501
  %503 = load double, ptr %41, align 8, !tbaa !11
  %504 = fadd double %503, %502
  store double %504, ptr %41, align 8, !tbaa !11
  br label %505

505:                                              ; preds = %500
  %506 = load i64, ptr %39, align 8, !tbaa !9
  %507 = add nsw i64 %506, 1
  store i64 %507, ptr %39, align 8, !tbaa !9
  br label %461, !llvm.loop !23

508:                                              ; preds = %461
  %509 = load ptr, ptr %15, align 8, !tbaa !5
  %510 = load i64, ptr %509, align 8, !tbaa !9
  store i64 %510, ptr %31, align 8, !tbaa !9
  %511 = load i64, ptr %38, align 8, !tbaa !9
  %512 = add nsw i64 %511, 1
  store i64 %512, ptr %39, align 8, !tbaa !9
  br label %513

513:                                              ; preds = %557, %508
  %514 = load i64, ptr %39, align 8, !tbaa !9
  %515 = load i64, ptr %31, align 8, !tbaa !9
  %516 = icmp sle i64 %514, %515
  br i1 %516, label %517, label %560

517:                                              ; preds = %513
  %518 = load i64, ptr %39, align 8, !tbaa !9
  %519 = load i64, ptr %38, align 8, !tbaa !9
  %520 = load i64, ptr %26, align 8, !tbaa !9
  %521 = mul nsw i64 %519, %520
  %522 = add nsw i64 %518, %521
  store i64 %522, ptr %32, align 8, !tbaa !9
  %523 = load ptr, ptr %16, align 8, !tbaa !5
  %524 = load i64, ptr %32, align 8, !tbaa !9
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %523, i64 %524
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %525, i32 0, i32 0
  %527 = load double, ptr %526, align 8, !tbaa !13
  store double %527, ptr %35, align 8, !tbaa !11
  %528 = load double, ptr %35, align 8, !tbaa !11
  %529 = fcmp oge double %528, 0.000000e+00
  br i1 %529, label %530, label %532

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

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

535:                                              ; preds = %532, %530
  %536 = phi double [ %531, %530 ], [ %534, %532 ]
  %537 = load ptr, ptr %16, align 8, !tbaa !5
  %538 = load i64, ptr %39, align 8, !tbaa !9
  %539 = load i64, ptr %38, align 8, !tbaa !9
  %540 = load i64, ptr %26, align 8, !tbaa !9
  %541 = mul nsw i64 %539, %540
  %542 = add nsw i64 %538, %541
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %537, i64 %542
  %544 = call double @d_imag(ptr noundef %543)
  store double %544, ptr %36, align 8, !tbaa !11
  %545 = load double, ptr %36, align 8, !tbaa !11
  %546 = fcmp oge double %545, 0.000000e+00
  br i1 %546, label %547, label %549

547:                                              ; preds = %535
  %548 = load double, ptr %36, align 8, !tbaa !11
  br label %552

549:                                              ; preds = %535
  %550 = load double, ptr %36, align 8, !tbaa !11
  %551 = fneg double %550
  br label %552

552:                                              ; preds = %549, %547
  %553 = phi double [ %548, %547 ], [ %551, %549 ]
  %554 = fadd double %536, %553
  %555 = load double, ptr %41, align 8, !tbaa !11
  %556 = fadd double %555, %554
  store double %556, ptr %41, align 8, !tbaa !11
  br label %557

557:                                              ; preds = %552
  %558 = load i64, ptr %39, align 8, !tbaa !9
  %559 = add nsw i64 %558, 1
  store i64 %559, ptr %39, align 8, !tbaa !9
  br label %513, !llvm.loop !24

560:                                              ; preds = %513
  br label %561

561:                                              ; preds = %560, %458
  %562 = load double, ptr %41, align 8, !tbaa !11
  %563 = load ptr, ptr %24, align 8, !tbaa !5
  %564 = load i64, ptr %38, align 8, !tbaa !9
  %565 = getelementptr inbounds double, ptr %563, i64 %564
  store double %562, ptr %565, align 8, !tbaa !11
  %566 = load double, ptr %44, align 8, !tbaa !11
  %567 = load double, ptr %41, align 8, !tbaa !11
  %568 = fcmp oge double %566, %567
  br i1 %568, label %569, label %571

569:                                              ; preds = %561
  %570 = load double, ptr %44, align 8, !tbaa !11
  br label %573

571:                                              ; preds = %561
  %572 = load double, ptr %41, align 8, !tbaa !11
  br label %573

573:                                              ; preds = %571, %569
  %574 = phi double [ %570, %569 ], [ %572, %571 ]
  store double %574, ptr %44, align 8, !tbaa !11
  br label %575

575:                                              ; preds = %573
  %576 = load i64, ptr %38, align 8, !tbaa !9
  %577 = add nsw i64 %576, 1
  store i64 %577, ptr %38, align 8, !tbaa !9
  br label %339, !llvm.loop !25

578:                                              ; preds = %339
  br label %579

579:                                              ; preds = %578, %335
  %580 = load ptr, ptr %15, align 8, !tbaa !5
  %581 = load i64, ptr %580, align 8, !tbaa !9
  %582 = icmp eq i64 %581, 0
  br i1 %582, label %583, label %585

583:                                              ; preds = %579
  store double 1.000000e+00, ptr %34, align 8, !tbaa !11
  %584 = load double, ptr %34, align 8, !tbaa !11
  store double %584, ptr %13, align 8
  store i32 1, ptr %46, align 4
  br label %871

585:                                              ; preds = %579
  %586 = load double, ptr %44, align 8, !tbaa !11
  %587 = fcmp oeq double %586, 0.000000e+00
  br i1 %587, label %588, label %590

588:                                              ; preds = %585
  %589 = load double, ptr %34, align 8, !tbaa !11
  store double %589, ptr %13, align 8
  store i32 1, ptr %46, align 4
  br label %871

590:                                              ; preds = %585
  br label %591

591:                                              ; preds = %590
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  store i64 0, ptr %42, align 8, !tbaa !9
  br label %592

592:                                              ; preds = %862, %591
  %593 = load ptr, ptr %15, align 8, !tbaa !5
  %594 = load ptr, ptr %23, align 8, !tbaa !5
  %595 = load ptr, ptr %15, align 8, !tbaa !5
  %596 = load i64, ptr %595, align 8, !tbaa !9
  %597 = add nsw i64 %596, 1
  %598 = getelementptr inbounds %struct.doublecomplex, ptr %594, i64 %597
  %599 = load ptr, ptr %23, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.doublecomplex, ptr %599, i64 1
  %601 = getelementptr inbounds [3 x i64], ptr %43, i64 0, i64 0
  %602 = call i32 @zlacn2_(ptr noundef %593, ptr noundef %598, ptr noundef %600, ptr noundef %45, ptr noundef %42, ptr noundef %601)
  %603 = load i64, ptr %42, align 8, !tbaa !9
  %604 = icmp ne i64 %603, 0
  br i1 %604, label %605, label %863

605:                                              ; preds = %592
  %606 = load i64, ptr %42, align 8, !tbaa !9
  %607 = icmp eq i64 %606, 2
  br i1 %607, label %608, label %735

608:                                              ; preds = %605
  %609 = load ptr, ptr %15, align 8, !tbaa !5
  %610 = load i64, ptr %609, align 8, !tbaa !9
  store i64 %610, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %611

611:                                              ; preds = %653, %608
  %612 = load i64, ptr %38, align 8, !tbaa !9
  %613 = load i64, ptr %30, align 8, !tbaa !9
  %614 = icmp sle i64 %612, %613
  br i1 %614, label %615, label %656

615:                                              ; preds = %611
  %616 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %616, ptr %31, align 8, !tbaa !9
  %617 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %617, ptr %32, align 8, !tbaa !9
  %618 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %618, ptr %33, align 8, !tbaa !9
  %619 = load ptr, ptr %24, align 8, !tbaa !5
  %620 = load i64, ptr %33, align 8, !tbaa !9
  %621 = getelementptr inbounds double, ptr %619, i64 %620
  %622 = load double, ptr %621, align 8, !tbaa !11
  %623 = load ptr, ptr %23, align 8, !tbaa !5
  %624 = load i64, ptr %32, align 8, !tbaa !9
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %623, i64 %624
  %626 = getelementptr inbounds %struct.doublecomplex, ptr %625, i32 0, i32 0
  %627 = load double, ptr %626, align 8, !tbaa !13
  %628 = fmul double %622, %627
  %629 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %628, ptr %629, align 8, !tbaa !13
  %630 = load ptr, ptr %24, align 8, !tbaa !5
  %631 = load i64, ptr %33, align 8, !tbaa !9
  %632 = getelementptr inbounds double, ptr %630, i64 %631
  %633 = load double, ptr %632, align 8, !tbaa !11
  %634 = load ptr, ptr %23, align 8, !tbaa !5
  %635 = load i64, ptr %32, align 8, !tbaa !9
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %634, i64 %635
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %636, i32 0, i32 1
  %638 = load double, ptr %637, align 8, !tbaa !26
  %639 = fmul double %633, %638
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %639, ptr %640, align 8, !tbaa !26
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %642 = load double, ptr %641, align 8, !tbaa !13
  %643 = load ptr, ptr %23, align 8, !tbaa !5
  %644 = load i64, ptr %31, align 8, !tbaa !9
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %643, i64 %644
  %646 = getelementptr inbounds %struct.doublecomplex, ptr %645, i32 0, i32 0
  store double %642, ptr %646, align 8, !tbaa !13
  %647 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %648 = load double, ptr %647, align 8, !tbaa !26
  %649 = load ptr, ptr %23, align 8, !tbaa !5
  %650 = load i64, ptr %31, align 8, !tbaa !9
  %651 = getelementptr inbounds %struct.doublecomplex, ptr %649, i64 %650
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %651, i32 0, i32 1
  store double %648, ptr %652, align 8, !tbaa !26
  br label %653

653:                                              ; preds = %615
  %654 = load i64, ptr %38, align 8, !tbaa !9
  %655 = add nsw i64 %654, 1
  store i64 %655, ptr %38, align 8, !tbaa !9
  br label %611, !llvm.loop !27

656:                                              ; preds = %611
  %657 = load i64, ptr %40, align 8, !tbaa !9
  %658 = icmp ne i64 %657, 0
  br i1 %658, label %659, label %670

659:                                              ; preds = %656
  %660 = load ptr, ptr %15, align 8, !tbaa !5
  %661 = load ptr, ptr %18, align 8, !tbaa !5
  %662 = load i64, ptr %29, align 8, !tbaa !9
  %663 = getelementptr inbounds %struct.doublecomplex, ptr %661, i64 %662
  %664 = load ptr, ptr %19, align 8, !tbaa !5
  %665 = load ptr, ptr %23, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.doublecomplex, ptr %665, i64 1
  %667 = load ptr, ptr %15, align 8, !tbaa !5
  %668 = load ptr, ptr %22, align 8, !tbaa !5
  %669 = call i32 @zpotrs_(ptr noundef @.str.1, ptr noundef %660, ptr noundef @c__1, ptr noundef %663, ptr noundef %664, ptr noundef %666, ptr noundef %667, ptr noundef %668)
  br label %681

670:                                              ; preds = %656
  %671 = load ptr, ptr %15, align 8, !tbaa !5
  %672 = load ptr, ptr %18, align 8, !tbaa !5
  %673 = load i64, ptr %29, align 8, !tbaa !9
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %672, i64 %673
  %675 = load ptr, ptr %19, align 8, !tbaa !5
  %676 = load ptr, ptr %23, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.doublecomplex, ptr %676, i64 1
  %678 = load ptr, ptr %15, align 8, !tbaa !5
  %679 = load ptr, ptr %22, align 8, !tbaa !5
  %680 = call i32 @zpotrs_(ptr noundef @.str.2, ptr noundef %671, ptr noundef @c__1, ptr noundef %674, ptr noundef %675, ptr noundef %677, ptr noundef %678, ptr noundef %679)
  br label %681

681:                                              ; preds = %670, %659
  %682 = load ptr, ptr %21, align 8, !tbaa !5
  %683 = load i64, ptr %682, align 8, !tbaa !9
  %684 = icmp ne i64 %683, 0
  br i1 %684, label %685, label %734

685:                                              ; preds = %681
  %686 = load ptr, ptr %15, align 8, !tbaa !5
  %687 = load i64, ptr %686, align 8, !tbaa !9
  store i64 %687, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %688

688:                                              ; preds = %730, %685
  %689 = load i64, ptr %38, align 8, !tbaa !9
  %690 = load i64, ptr %30, align 8, !tbaa !9
  %691 = icmp sle i64 %689, %690
  br i1 %691, label %692, label %733

692:                                              ; preds = %688
  %693 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %693, ptr %31, align 8, !tbaa !9
  %694 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %694, ptr %32, align 8, !tbaa !9
  %695 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %695, ptr %33, align 8, !tbaa !9
  %696 = load ptr, ptr %20, align 8, !tbaa !5
  %697 = load i64, ptr %33, align 8, !tbaa !9
  %698 = getelementptr inbounds double, ptr %696, i64 %697
  %699 = load double, ptr %698, align 8, !tbaa !11
  %700 = load ptr, ptr %23, align 8, !tbaa !5
  %701 = load i64, ptr %32, align 8, !tbaa !9
  %702 = getelementptr inbounds %struct.doublecomplex, ptr %700, i64 %701
  %703 = getelementptr inbounds %struct.doublecomplex, ptr %702, i32 0, i32 0
  %704 = load double, ptr %703, align 8, !tbaa !13
  %705 = fmul double %699, %704
  %706 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %705, ptr %706, align 8, !tbaa !13
  %707 = load ptr, ptr %20, align 8, !tbaa !5
  %708 = load i64, ptr %33, align 8, !tbaa !9
  %709 = getelementptr inbounds double, ptr %707, i64 %708
  %710 = load double, ptr %709, align 8, !tbaa !11
  %711 = load ptr, ptr %23, align 8, !tbaa !5
  %712 = load i64, ptr %32, align 8, !tbaa !9
  %713 = getelementptr inbounds %struct.doublecomplex, ptr %711, i64 %712
  %714 = getelementptr inbounds %struct.doublecomplex, ptr %713, i32 0, i32 1
  %715 = load double, ptr %714, align 8, !tbaa !26
  %716 = fmul double %710, %715
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %716, ptr %717, align 8, !tbaa !26
  %718 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %719 = load double, ptr %718, align 8, !tbaa !13
  %720 = load ptr, ptr %23, align 8, !tbaa !5
  %721 = load i64, ptr %31, align 8, !tbaa !9
  %722 = getelementptr inbounds %struct.doublecomplex, ptr %720, i64 %721
  %723 = getelementptr inbounds %struct.doublecomplex, ptr %722, i32 0, i32 0
  store double %719, ptr %723, align 8, !tbaa !13
  %724 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %725 = load double, ptr %724, align 8, !tbaa !26
  %726 = load ptr, ptr %23, align 8, !tbaa !5
  %727 = load i64, ptr %31, align 8, !tbaa !9
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %726, i64 %727
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %728, i32 0, i32 1
  store double %725, ptr %729, align 8, !tbaa !26
  br label %730

730:                                              ; preds = %692
  %731 = load i64, ptr %38, align 8, !tbaa !9
  %732 = add nsw i64 %731, 1
  store i64 %732, ptr %38, align 8, !tbaa !9
  br label %688, !llvm.loop !28

733:                                              ; preds = %688
  br label %734

734:                                              ; preds = %733, %681
  br label %862

735:                                              ; preds = %605
  %736 = load ptr, ptr %21, align 8, !tbaa !5
  %737 = load i64, ptr %736, align 8, !tbaa !9
  %738 = icmp ne i64 %737, 0
  br i1 %738, label %739, label %788

739:                                              ; preds = %735
  %740 = load ptr, ptr %15, align 8, !tbaa !5
  %741 = load i64, ptr %740, align 8, !tbaa !9
  store i64 %741, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %742

742:                                              ; preds = %784, %739
  %743 = load i64, ptr %38, align 8, !tbaa !9
  %744 = load i64, ptr %30, align 8, !tbaa !9
  %745 = icmp sle i64 %743, %744
  br i1 %745, label %746, label %787

746:                                              ; preds = %742
  %747 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %747, ptr %31, align 8, !tbaa !9
  %748 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %748, ptr %32, align 8, !tbaa !9
  %749 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %749, ptr %33, align 8, !tbaa !9
  %750 = load ptr, ptr %20, align 8, !tbaa !5
  %751 = load i64, ptr %33, align 8, !tbaa !9
  %752 = getelementptr inbounds double, ptr %750, i64 %751
  %753 = load double, ptr %752, align 8, !tbaa !11
  %754 = load ptr, ptr %23, align 8, !tbaa !5
  %755 = load i64, ptr %32, align 8, !tbaa !9
  %756 = getelementptr inbounds %struct.doublecomplex, ptr %754, i64 %755
  %757 = getelementptr inbounds %struct.doublecomplex, ptr %756, i32 0, i32 0
  %758 = load double, ptr %757, align 8, !tbaa !13
  %759 = fmul double %753, %758
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %759, ptr %760, align 8, !tbaa !13
  %761 = load ptr, ptr %20, align 8, !tbaa !5
  %762 = load i64, ptr %33, align 8, !tbaa !9
  %763 = getelementptr inbounds double, ptr %761, i64 %762
  %764 = load double, ptr %763, align 8, !tbaa !11
  %765 = load ptr, ptr %23, align 8, !tbaa !5
  %766 = load i64, ptr %32, align 8, !tbaa !9
  %767 = getelementptr inbounds %struct.doublecomplex, ptr %765, i64 %766
  %768 = getelementptr inbounds %struct.doublecomplex, ptr %767, i32 0, i32 1
  %769 = load double, ptr %768, align 8, !tbaa !26
  %770 = fmul double %764, %769
  %771 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %770, ptr %771, align 8, !tbaa !26
  %772 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %773 = load double, ptr %772, align 8, !tbaa !13
  %774 = load ptr, ptr %23, align 8, !tbaa !5
  %775 = load i64, ptr %31, align 8, !tbaa !9
  %776 = getelementptr inbounds %struct.doublecomplex, ptr %774, i64 %775
  %777 = getelementptr inbounds %struct.doublecomplex, ptr %776, i32 0, i32 0
  store double %773, ptr %777, align 8, !tbaa !13
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %779 = load double, ptr %778, align 8, !tbaa !26
  %780 = load ptr, ptr %23, align 8, !tbaa !5
  %781 = load i64, ptr %31, align 8, !tbaa !9
  %782 = getelementptr inbounds %struct.doublecomplex, ptr %780, i64 %781
  %783 = getelementptr inbounds %struct.doublecomplex, ptr %782, i32 0, i32 1
  store double %779, ptr %783, align 8, !tbaa !26
  br label %784

784:                                              ; preds = %746
  %785 = load i64, ptr %38, align 8, !tbaa !9
  %786 = add nsw i64 %785, 1
  store i64 %786, ptr %38, align 8, !tbaa !9
  br label %742, !llvm.loop !29

787:                                              ; preds = %742
  br label %788

788:                                              ; preds = %787, %735
  %789 = load i64, ptr %40, align 8, !tbaa !9
  %790 = icmp ne i64 %789, 0
  br i1 %790, label %791, label %802

791:                                              ; preds = %788
  %792 = load ptr, ptr %15, align 8, !tbaa !5
  %793 = load ptr, ptr %18, align 8, !tbaa !5
  %794 = load i64, ptr %29, align 8, !tbaa !9
  %795 = getelementptr inbounds %struct.doublecomplex, ptr %793, i64 %794
  %796 = load ptr, ptr %19, align 8, !tbaa !5
  %797 = load ptr, ptr %23, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.doublecomplex, ptr %797, i64 1
  %799 = load ptr, ptr %15, align 8, !tbaa !5
  %800 = load ptr, ptr %22, align 8, !tbaa !5
  %801 = call i32 @zpotrs_(ptr noundef @.str.1, ptr noundef %792, ptr noundef @c__1, ptr noundef %795, ptr noundef %796, ptr noundef %798, ptr noundef %799, ptr noundef %800)
  br label %813

802:                                              ; preds = %788
  %803 = load ptr, ptr %15, align 8, !tbaa !5
  %804 = load ptr, ptr %18, align 8, !tbaa !5
  %805 = load i64, ptr %29, align 8, !tbaa !9
  %806 = getelementptr inbounds %struct.doublecomplex, ptr %804, i64 %805
  %807 = load ptr, ptr %19, align 8, !tbaa !5
  %808 = load ptr, ptr %23, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %808, i64 1
  %810 = load ptr, ptr %15, align 8, !tbaa !5
  %811 = load ptr, ptr %22, align 8, !tbaa !5
  %812 = call i32 @zpotrs_(ptr noundef @.str.2, ptr noundef %803, ptr noundef @c__1, ptr noundef %806, ptr noundef %807, ptr noundef %809, ptr noundef %810, ptr noundef %811)
  br label %813

813:                                              ; preds = %802, %791
  %814 = load ptr, ptr %15, align 8, !tbaa !5
  %815 = load i64, ptr %814, align 8, !tbaa !9
  store i64 %815, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %816

816:                                              ; preds = %858, %813
  %817 = load i64, ptr %38, align 8, !tbaa !9
  %818 = load i64, ptr %30, align 8, !tbaa !9
  %819 = icmp sle i64 %817, %818
  br i1 %819, label %820, label %861

820:                                              ; preds = %816
  %821 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %821, ptr %31, align 8, !tbaa !9
  %822 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %822, ptr %32, align 8, !tbaa !9
  %823 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %823, ptr %33, align 8, !tbaa !9
  %824 = load ptr, ptr %24, align 8, !tbaa !5
  %825 = load i64, ptr %33, align 8, !tbaa !9
  %826 = getelementptr inbounds double, ptr %824, i64 %825
  %827 = load double, ptr %826, align 8, !tbaa !11
  %828 = load ptr, ptr %23, align 8, !tbaa !5
  %829 = load i64, ptr %32, align 8, !tbaa !9
  %830 = getelementptr inbounds %struct.doublecomplex, ptr %828, i64 %829
  %831 = getelementptr inbounds %struct.doublecomplex, ptr %830, i32 0, i32 0
  %832 = load double, ptr %831, align 8, !tbaa !13
  %833 = fmul double %827, %832
  %834 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %833, ptr %834, align 8, !tbaa !13
  %835 = load ptr, ptr %24, align 8, !tbaa !5
  %836 = load i64, ptr %33, align 8, !tbaa !9
  %837 = getelementptr inbounds double, ptr %835, i64 %836
  %838 = load double, ptr %837, align 8, !tbaa !11
  %839 = load ptr, ptr %23, align 8, !tbaa !5
  %840 = load i64, ptr %32, align 8, !tbaa !9
  %841 = getelementptr inbounds %struct.doublecomplex, ptr %839, i64 %840
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %841, i32 0, i32 1
  %843 = load double, ptr %842, align 8, !tbaa !26
  %844 = fmul double %838, %843
  %845 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %844, ptr %845, align 8, !tbaa !26
  %846 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %847 = load double, ptr %846, align 8, !tbaa !13
  %848 = load ptr, ptr %23, align 8, !tbaa !5
  %849 = load i64, ptr %31, align 8, !tbaa !9
  %850 = getelementptr inbounds %struct.doublecomplex, ptr %848, i64 %849
  %851 = getelementptr inbounds %struct.doublecomplex, ptr %850, i32 0, i32 0
  store double %847, ptr %851, align 8, !tbaa !13
  %852 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %853 = load double, ptr %852, align 8, !tbaa !26
  %854 = load ptr, ptr %23, align 8, !tbaa !5
  %855 = load i64, ptr %31, align 8, !tbaa !9
  %856 = getelementptr inbounds %struct.doublecomplex, ptr %854, i64 %855
  %857 = getelementptr inbounds %struct.doublecomplex, ptr %856, i32 0, i32 1
  store double %853, ptr %857, align 8, !tbaa !26
  br label %858

858:                                              ; preds = %820
  %859 = load i64, ptr %38, align 8, !tbaa !9
  %860 = add nsw i64 %859, 1
  store i64 %860, ptr %38, align 8, !tbaa !9
  br label %816, !llvm.loop !30

861:                                              ; preds = %816
  br label %862

862:                                              ; preds = %861, %734
  br label %592

863:                                              ; preds = %592
  %864 = load double, ptr %45, align 8, !tbaa !11
  %865 = fcmp une double %864, 0.000000e+00
  br i1 %865, label %866, label %869

866:                                              ; preds = %863
  %867 = load double, ptr %45, align 8, !tbaa !11
  %868 = fdiv double 1.000000e+00, %867
  store double %868, ptr %34, align 8, !tbaa !11
  br label %869

869:                                              ; preds = %866, %863
  %870 = load double, ptr %34, align 8, !tbaa !11
  store double %870, ptr %13, align 8
  store i32 1, ptr %46, align 4
  br label %871

871:                                              ; preds = %869, %588, %583, %79
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  %872 = load double, ptr %13, align 8
  ret double %872
}

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

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

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

declare double @d_imag(ptr noundef) #2

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

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

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

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

; 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, i64 noundef %11) local_unnamed_addr #0 {
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca [3 x i64], align 16
  %16 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #3
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #3
  %17 = load i64, ptr %3, align 8, !tbaa !5
  %18 = xor i64 %17, -1
  %19 = getelementptr inbounds %struct.doublecomplex, ptr %2, i64 %18
  %20 = getelementptr inbounds i8, ptr %6, i64 -8
  %21 = getelementptr inbounds i8, ptr %9, i64 -16
  %22 = getelementptr inbounds i8, ptr %10, i64 -8
  store i64 0, ptr %8, align 8, !tbaa !5
  %23 = load i64, ptr %1, align 8, !tbaa !5
  %24 = icmp sgt i64 %23, -1
  %spec.store.select = select i1 %24, i64 0, i64 -2
  store i64 %spec.store.select, ptr %8, align 8
  br i1 %24, label %27, label %25

25:                                               ; preds = %12
  store i64 2, ptr %13, align 8, !tbaa !5
  %26 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %13) #3
  br label %320

27:                                               ; preds = %12
  %28 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #3
  %.not355 = icmp eq i64 %28, 0
  %29 = load i64, ptr %1, align 8, !tbaa !5
  %.not357425 = icmp slt i64 %29, 1
  br i1 %.not355, label %98, label %30

30:                                               ; preds = %27
  br i1 %.not357425, label %.loopexit381, label %.lr.ph405.preheader

.lr.ph405.preheader:                              ; preds = %30
  %31 = add nuw i64 %29, 1
  br label %.lr.ph405

.lr.ph405:                                        ; preds = %.lr.ph405.preheader, %.loopexit382
  %indvars.iv = phi i64 [ 2, %.lr.ph405.preheader ], [ %indvars.iv.next, %.loopexit382 ]
  %.0404 = phi double [ 0.000000e+00, %.lr.ph405.preheader ], [ %96, %.loopexit382 ]
  %.0344402 = phi i64 [ 1, %.lr.ph405.preheader ], [ %97, %.loopexit382 ]
  %32 = load i64, ptr %7, align 8, !tbaa !5
  %.not371 = icmp eq i64 %32, 0
  %33 = mul nsw i64 %.0344402, %17
  %invariant.gep392 = getelementptr %struct.doublecomplex, ptr %19, i64 %33
  br i1 %.not371, label %.preheader383, label %.preheader385

.preheader385:                                    ; preds = %.lr.ph405, %.preheader385
  %.0332388 = phi double [ %46, %.preheader385 ], [ 0.000000e+00, %.lr.ph405 ]
  %.0336387 = phi i64 [ %47, %.preheader385 ], [ 1, %.lr.ph405 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep392, i64 %.0336387
  %34 = load double, ptr %gep, align 8, !tbaa !9
  %35 = tail call double @d_imag(ptr noundef nonnull %gep) #3
  %36 = insertelement <2 x double> poison, double %34, i64 0
  %37 = insertelement <2 x double> %36, double %35, i64 1
  %38 = fcmp oge <2 x double> %37, zeroinitializer
  %39 = fneg <2 x double> %37
  %40 = select <2 x i1> %38, <2 x double> %37, <2 x double> %39
  %shift = shufflevector <2 x double> %40, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %41 = fadd <2 x double> %40, %shift
  %42 = extractelement <2 x double> %41, i64 0
  %43 = getelementptr inbounds double, ptr %20, i64 %.0336387
  %44 = load double, ptr %43, align 8, !tbaa !12
  %45 = fdiv double %42, %44
  %46 = fadd double %.0332388, %45
  %47 = add nuw i64 %.0336387, 1
  %exitcond.not = icmp eq i64 %47, %indvars.iv
  br i1 %exitcond.not, label %48, label %.preheader385, !llvm.loop !13

48:                                               ; preds = %.preheader385
  %49 = load i64, ptr %1, align 8, !tbaa !5
  %.not375.not389 = icmp slt i64 %.0344402, %49
  br i1 %.not375.not389, label %.lr.ph, label %.loopexit382

.lr.ph:                                           ; preds = %48
  %50 = getelementptr %struct.doublecomplex, ptr %19, i64 %.0344402
  br label %51

51:                                               ; preds = %.lr.ph, %51
  %.1333391 = phi double [ %46, %.lr.ph ], [ %66, %51 ]
  %.1337.in390 = phi i64 [ %.0344402, %.lr.ph ], [ %.1337, %51 ]
  %.1337 = add nuw nsw i64 %.1337.in390, 1
  %52 = mul nsw i64 %.1337, %17
  %53 = getelementptr %struct.doublecomplex, ptr %50, i64 %52
  %54 = load double, ptr %53, align 8, !tbaa !9
  %55 = tail call double @d_imag(ptr noundef nonnull %53) #3
  %56 = insertelement <2 x double> poison, double %54, i64 0
  %57 = insertelement <2 x double> %56, double %55, i64 1
  %58 = fcmp oge <2 x double> %57, zeroinitializer
  %59 = fneg <2 x double> %57
  %60 = select <2 x i1> %58, <2 x double> %57, <2 x double> %59
  %shift571 = shufflevector <2 x double> %60, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %61 = fadd <2 x double> %60, %shift571
  %62 = extractelement <2 x double> %61, i64 0
  %63 = getelementptr double, ptr %6, i64 %.1337.in390
  %64 = load double, ptr %63, align 8, !tbaa !12
  %65 = fdiv double %62, %64
  %66 = fadd double %.1333391, %65
  %.not375.not = icmp slt i64 %.1337, %49
  br i1 %.not375.not, label %51, label %.loopexit382, !llvm.loop !15

.preheader383:                                    ; preds = %.lr.ph405, %.preheader383
  %.2334395 = phi double [ %76, %.preheader383 ], [ 0.000000e+00, %.lr.ph405 ]
  %.2338394 = phi i64 [ %77, %.preheader383 ], [ 1, %.lr.ph405 ]
  %gep393 = getelementptr %struct.doublecomplex, ptr %invariant.gep392, i64 %.2338394
  %67 = load double, ptr %gep393, align 8, !tbaa !9
  %68 = tail call double @d_imag(ptr noundef nonnull %gep393) #3
  %69 = insertelement <2 x double> poison, double %67, i64 0
  %70 = insertelement <2 x double> %69, double %68, i64 1
  %71 = fcmp oge <2 x double> %70, zeroinitializer
  %72 = fneg <2 x double> %70
  %73 = select <2 x i1> %71, <2 x double> %70, <2 x double> %72
  %shift572 = shufflevector <2 x double> %73, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %74 = fadd <2 x double> %73, %shift572
  %75 = extractelement <2 x double> %74, i64 0
  %76 = fadd double %.2334395, %75
  %77 = add nuw i64 %.2338394, 1
  %exitcond459.not = icmp eq i64 %77, %indvars.iv
  br i1 %exitcond459.not, label %78, label %.preheader383, !llvm.loop !16

78:                                               ; preds = %.preheader383
  %79 = load i64, ptr %1, align 8, !tbaa !5
  %.not373.not396 = icmp slt i64 %.0344402, %79
  br i1 %.not373.not396, label %.lr.ph399, label %.loopexit382

.lr.ph399:                                        ; preds = %78
  %80 = getelementptr %struct.doublecomplex, ptr %19, i64 %.0344402
  br label %81

81:                                               ; preds = %.lr.ph399, %81
  %.3398 = phi double [ %76, %.lr.ph399 ], [ %93, %81 ]
  %.3339.in397 = phi i64 [ %.0344402, %.lr.ph399 ], [ %.3339, %81 ]
  %.3339 = add nuw nsw i64 %.3339.in397, 1
  %82 = mul nsw i64 %.3339, %17
  %83 = getelementptr %struct.doublecomplex, ptr %80, i64 %82
  %84 = load double, ptr %83, align 8, !tbaa !9
  %85 = tail call double @d_imag(ptr noundef nonnull %83) #3
  %86 = insertelement <2 x double> poison, double %84, i64 0
  %87 = insertelement <2 x double> %86, double %85, i64 1
  %88 = fcmp oge <2 x double> %87, zeroinitializer
  %89 = fneg <2 x double> %87
  %90 = select <2 x i1> %88, <2 x double> %87, <2 x double> %89
  %shift573 = shufflevector <2 x double> %90, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %91 = fadd <2 x double> %90, %shift573
  %92 = extractelement <2 x double> %91, i64 0
  %93 = fadd double %.3398, %92
  %.not373.not = icmp slt i64 %.3339, %79
  br i1 %.not373.not, label %81, label %.loopexit382, !llvm.loop !17

.loopexit382:                                     ; preds = %51, %81, %48, %78
  %.4 = phi double [ %76, %78 ], [ %46, %48 ], [ %93, %81 ], [ %66, %51 ]
  %94 = getelementptr inbounds double, ptr %22, i64 %.0344402
  store double %.4, ptr %94, align 8, !tbaa !12
  %95 = fcmp oge double %.0404, %.4
  %96 = select i1 %95, double %.0404, double %.4
  %97 = add nuw nsw i64 %.0344402, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond460.not = icmp eq i64 %indvars.iv, %31
  br i1 %exitcond460.not, label %.loopexit381thread-pre-split, label %.lr.ph405, !llvm.loop !18

98:                                               ; preds = %27
  br i1 %.not357425, label %.loopexit381, label %.lr.ph429.preheader

.lr.ph429.preheader:                              ; preds = %98
  %99 = add nuw i64 %29, 1
  br label %.lr.ph429

.lr.ph429:                                        ; preds = %.lr.ph429.preheader, %.loopexit378
  %indvars.iv461 = phi i64 [ 2, %.lr.ph429.preheader ], [ %indvars.iv.next462, %.loopexit378 ]
  %.1428 = phi double [ 0.000000e+00, %.lr.ph429.preheader ], [ %164, %.loopexit378 ]
  %.1345426 = phi i64 [ 1, %.lr.ph429.preheader ], [ %165, %.loopexit378 ]
  %100 = load i64, ptr %7, align 8, !tbaa !5
  %.not358 = icmp eq i64 %100, 0
  %101 = getelementptr %struct.doublecomplex, ptr %19, i64 %.1345426
  br i1 %.not358, label %.preheader, label %.preheader380

.preheader380:                                    ; preds = %.lr.ph429, %.preheader380
  %.5408 = phi double [ %116, %.preheader380 ], [ 0.000000e+00, %.lr.ph429 ]
  %.4340407 = phi i64 [ %117, %.preheader380 ], [ 1, %.lr.ph429 ]
  %102 = mul nsw i64 %.4340407, %17
  %103 = getelementptr %struct.doublecomplex, ptr %101, i64 %102
  %104 = load double, ptr %103, align 8, !tbaa !9
  %105 = tail call double @d_imag(ptr noundef nonnull %103) #3
  %106 = insertelement <2 x double> poison, double %104, i64 0
  %107 = insertelement <2 x double> %106, double %105, i64 1
  %108 = fcmp oge <2 x double> %107, zeroinitializer
  %109 = fneg <2 x double> %107
  %110 = select <2 x i1> %108, <2 x double> %107, <2 x double> %109
  %shift574 = shufflevector <2 x double> %110, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %111 = fadd <2 x double> %110, %shift574
  %112 = extractelement <2 x double> %111, i64 0
  %113 = getelementptr inbounds double, ptr %20, i64 %.4340407
  %114 = load double, ptr %113, align 8, !tbaa !12
  %115 = fdiv double %112, %114
  %116 = fadd double %.5408, %115
  %117 = add nuw i64 %.4340407, 1
  %exitcond463.not = icmp eq i64 %117, %indvars.iv461
  br i1 %exitcond463.not, label %118, label %.preheader380, !llvm.loop !19

118:                                              ; preds = %.preheader380
  %119 = load i64, ptr %1, align 8, !tbaa !5
  %.not362.not409 = icmp slt i64 %.1345426, %119
  br i1 %.not362.not409, label %.lr.ph412, label %.loopexit378

.lr.ph412:                                        ; preds = %118
  %120 = mul nsw i64 %.1345426, %17
  %invariant.gep414 = getelementptr %struct.doublecomplex, ptr %19, i64 %120
  br label %121

121:                                              ; preds = %.lr.ph412, %121
  %.6411 = phi double [ %116, %.lr.ph412 ], [ %134, %121 ]
  %.5341.in410 = phi i64 [ %.1345426, %.lr.ph412 ], [ %.5341, %121 ]
  %.5341 = add nuw nsw i64 %.5341.in410, 1
  %gep415 = getelementptr %struct.doublecomplex, ptr %invariant.gep414, i64 %.5341
  %122 = load double, ptr %gep415, align 8, !tbaa !9
  %123 = tail call double @d_imag(ptr noundef nonnull %gep415) #3
  %124 = insertelement <2 x double> poison, double %122, i64 0
  %125 = insertelement <2 x double> %124, double %123, i64 1
  %126 = fcmp oge <2 x double> %125, zeroinitializer
  %127 = fneg <2 x double> %125
  %128 = select <2 x i1> %126, <2 x double> %125, <2 x double> %127
  %shift575 = shufflevector <2 x double> %128, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %129 = fadd <2 x double> %128, %shift575
  %130 = extractelement <2 x double> %129, i64 0
  %131 = getelementptr double, ptr %6, i64 %.5341.in410
  %132 = load double, ptr %131, align 8, !tbaa !12
  %133 = fdiv double %130, %132
  %134 = fadd double %.6411, %133
  %.not362.not = icmp slt i64 %.5341, %119
  br i1 %.not362.not, label %121, label %.loopexit378, !llvm.loop !20

.preheader:                                       ; preds = %.lr.ph429, %.preheader
  %.7417 = phi double [ %146, %.preheader ], [ 0.000000e+00, %.lr.ph429 ]
  %.6342416 = phi i64 [ %147, %.preheader ], [ 1, %.lr.ph429 ]
  %135 = mul nsw i64 %.6342416, %17
  %136 = getelementptr %struct.doublecomplex, ptr %101, i64 %135
  %137 = load double, ptr %136, align 8, !tbaa !9
  %138 = tail call double @d_imag(ptr noundef nonnull %136) #3
  %139 = insertelement <2 x double> poison, double %137, i64 0
  %140 = insertelement <2 x double> %139, double %138, i64 1
  %141 = fcmp oge <2 x double> %140, zeroinitializer
  %142 = fneg <2 x double> %140
  %143 = select <2 x i1> %141, <2 x double> %140, <2 x double> %142
  %shift576 = shufflevector <2 x double> %143, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %144 = fadd <2 x double> %143, %shift576
  %145 = extractelement <2 x double> %144, i64 0
  %146 = fadd double %.7417, %145
  %147 = add nuw i64 %.6342416, 1
  %exitcond464.not = icmp eq i64 %147, %indvars.iv461
  br i1 %exitcond464.not, label %148, label %.preheader, !llvm.loop !21

148:                                              ; preds = %.preheader
  %149 = load i64, ptr %1, align 8, !tbaa !5
  %.not360.not418 = icmp slt i64 %.1345426, %149
  br i1 %.not360.not418, label %.lr.ph421, label %.loopexit378

.lr.ph421:                                        ; preds = %148
  %150 = mul nsw i64 %.1345426, %17
  %invariant.gep423 = getelementptr %struct.doublecomplex, ptr %19, i64 %150
  br label %151

151:                                              ; preds = %.lr.ph421, %151
  %.8420 = phi double [ %146, %.lr.ph421 ], [ %161, %151 ]
  %.7343.in419 = phi i64 [ %.1345426, %.lr.ph421 ], [ %.7343, %151 ]
  %.7343 = add nuw nsw i64 %.7343.in419, 1
  %gep424 = getelementptr %struct.doublecomplex, ptr %invariant.gep423, i64 %.7343
  %152 = load double, ptr %gep424, align 8, !tbaa !9
  %153 = tail call double @d_imag(ptr noundef nonnull %gep424) #3
  %154 = insertelement <2 x double> poison, double %152, i64 0
  %155 = insertelement <2 x double> %154, double %153, i64 1
  %156 = fcmp oge <2 x double> %155, zeroinitializer
  %157 = fneg <2 x double> %155
  %158 = select <2 x i1> %156, <2 x double> %155, <2 x double> %157
  %shift577 = shufflevector <2 x double> %158, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %159 = fadd <2 x double> %158, %shift577
  %160 = extractelement <2 x double> %159, i64 0
  %161 = fadd double %.8420, %160
  %.not360.not = icmp slt i64 %.7343, %149
  br i1 %.not360.not, label %151, label %.loopexit378, !llvm.loop !22

.loopexit378:                                     ; preds = %121, %151, %118, %148
  %.9 = phi double [ %146, %148 ], [ %116, %118 ], [ %161, %151 ], [ %134, %121 ]
  %162 = getelementptr inbounds double, ptr %22, i64 %.1345426
  store double %.9, ptr %162, align 8, !tbaa !12
  %163 = fcmp oge double %.1428, %.9
  %164 = select i1 %163, double %.1428, double %.9
  %165 = add nuw nsw i64 %.1345426, 1
  %indvars.iv.next462 = add nuw i64 %indvars.iv461, 1
  %exitcond465.not = icmp eq i64 %indvars.iv461, %99
  br i1 %exitcond465.not, label %.loopexit381thread-pre-split, label %.lr.ph429, !llvm.loop !23

.loopexit381thread-pre-split:                     ; preds = %.loopexit382, %.loopexit378
  %.2.ph = phi double [ %164, %.loopexit378 ], [ %96, %.loopexit382 ]
  %.pr = load i64, ptr %1, align 8, !tbaa !5
  %166 = fcmp oeq double %.2.ph, 0.000000e+00
  br label %.loopexit381

.loopexit381:                                     ; preds = %.loopexit381thread-pre-split, %30, %98
  %167 = phi i64 [ %.pr, %.loopexit381thread-pre-split ], [ %29, %30 ], [ %29, %98 ]
  %.2 = phi i1 [ %166, %.loopexit381thread-pre-split ], [ true, %30 ], [ true, %98 ]
  %168 = icmp eq i64 %167, 0
  %brmerge = select i1 %168, i1 true, i1 %.2
  %.mux = select i1 %168, double 1.000000e+00, double 0.000000e+00
  br i1 %brmerge, label %320, label %169

169:                                              ; preds = %.loopexit381
  store double 0.000000e+00, ptr %16, align 8, !tbaa !12
  store i64 0, ptr %14, align 8, !tbaa !5
  %.str.2..str.1 = select i1 %.not355, ptr @.str.2, ptr @.str.1
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %169
  %170 = phi i64 [ %167, %169 ], [ %.be, %.loopexit.backedge ]
  %171 = getelementptr %struct.doublecomplex, ptr %9, i64 %170
  %172 = call i32 @zlacn2_(ptr noundef nonnull %1, ptr noundef %171, ptr noundef %9, ptr noundef nonnull %16, ptr noundef nonnull %14, ptr noundef nonnull %15) #3
  %173 = load i64, ptr %14, align 8, !tbaa !5
  switch i64 %173, label %246 [
    i64 0, label %316
    i64 2, label %174
  ]

174:                                              ; preds = %.loopexit
  %175 = load i64, ptr %1, align 8, !tbaa !5
  %.not368431 = icmp slt i64 %175, 1
  br i1 %.not368431, label %._crit_edge, label %.lr.ph433.preheader

.lr.ph433.preheader:                              ; preds = %174
  %min.iters.check555 = icmp eq i64 %175, 1
  br i1 %min.iters.check555, label %.lr.ph433.preheader582, label %vector.memcheck547

vector.memcheck547:                               ; preds = %.lr.ph433.preheader
  %176 = shl i64 %175, 4
  %scevgep548 = getelementptr i8, ptr %9, i64 %176
  %177 = shl i64 %175, 3
  %scevgep549 = getelementptr i8, ptr %10, i64 %177
  %bound0550 = icmp ugt ptr %scevgep549, %9
  %bound1551 = icmp ugt ptr %scevgep548, %10
  %found.conflict552 = and i1 %bound0550, %bound1551
  br i1 %found.conflict552, label %.lr.ph433.preheader582, label %vector.ph556

vector.ph556:                                     ; preds = %vector.memcheck547
  %n.vec558 = and i64 %175, 9223372036854775806
  %ind.end559 = or i64 %175, 1
  br label %vector.body561

vector.body561:                                   ; preds = %vector.body561, %vector.ph556
  %index562 = phi i64 [ 0, %vector.ph556 ], [ %index.next569, %vector.body561 ]
  %178 = getelementptr double, ptr %10, i64 %index562
  %wide.load564 = load <2 x double>, ptr %178, align 8, !tbaa !12, !alias.scope !24
  %179 = getelementptr %struct.doublecomplex, ptr %9, i64 %index562
  %wide.vec565 = load <4 x double>, ptr %179, align 8, !tbaa !12
  %strided.vec566 = shufflevector <4 x double> %wide.vec565, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec567 = shufflevector <4 x double> %wide.vec565, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %180 = fmul <2 x double> %wide.load564, %strided.vec566
  %181 = fmul <2 x double> %wide.load564, %strided.vec567
  %interleaved.vec568 = shufflevector <2 x double> %180, <2 x double> %181, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec568, ptr %179, align 8, !tbaa !12
  %index.next569 = add nuw i64 %index562, 2
  %182 = icmp eq i64 %index.next569, %n.vec558
  br i1 %182, label %middle.block553, label %vector.body561, !llvm.loop !27

middle.block553:                                  ; preds = %vector.body561
  %cmp.n570 = icmp eq i64 %175, %n.vec558
  br i1 %cmp.n570, label %._crit_edge, label %.lr.ph433.preheader582

.lr.ph433.preheader582:                           ; preds = %middle.block553, %vector.memcheck547, %.lr.ph433.preheader
  %.2346432.ph = phi i64 [ 1, %vector.memcheck547 ], [ 1, %.lr.ph433.preheader ], [ %ind.end559, %middle.block553 ]
  %xtraiter = and i64 %175, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph433.prol.loopexit, label %.lr.ph433.prol

.lr.ph433.prol:                                   ; preds = %.lr.ph433.preheader582
  %183 = getelementptr inbounds double, ptr %22, i64 %.2346432.ph
  %184 = load double, ptr %183, align 8, !tbaa !12
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.2346432.ph
  %186 = load <2 x double>, ptr %185, align 8, !tbaa !12
  %187 = insertelement <2 x double> poison, double %184, i64 0
  %188 = shufflevector <2 x double> %187, <2 x double> poison, <2 x i32> zeroinitializer
  %189 = fmul <2 x double> %188, %186
  store <2 x double> %189, ptr %185, align 8, !tbaa !12
  %190 = add nuw i64 %.2346432.ph, 1
  br label %.lr.ph433.prol.loopexit

.lr.ph433.prol.loopexit:                          ; preds = %.lr.ph433.prol, %.lr.ph433.preheader582
  %.2346432.unr = phi i64 [ %.2346432.ph, %.lr.ph433.preheader582 ], [ %190, %.lr.ph433.prol ]
  %191 = icmp eq i64 %175, %.2346432.ph
  br i1 %191, label %._crit_edge, label %.lr.ph433

.lr.ph433:                                        ; preds = %.lr.ph433.prol.loopexit, %.lr.ph433
  %.2346432 = phi i64 [ %207, %.lr.ph433 ], [ %.2346432.unr, %.lr.ph433.prol.loopexit ]
  %192 = getelementptr inbounds double, ptr %22, i64 %.2346432
  %193 = load double, ptr %192, align 8, !tbaa !12
  %194 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.2346432
  %195 = load <2 x double>, ptr %194, align 8, !tbaa !12
  %196 = insertelement <2 x double> poison, double %193, i64 0
  %197 = shufflevector <2 x double> %196, <2 x double> poison, <2 x i32> zeroinitializer
  %198 = fmul <2 x double> %197, %195
  store <2 x double> %198, ptr %194, align 8, !tbaa !12
  %199 = add nuw i64 %.2346432, 1
  %200 = getelementptr double, ptr %10, i64 %.2346432
  %201 = load double, ptr %200, align 8, !tbaa !12
  %202 = getelementptr %struct.doublecomplex, ptr %9, i64 %.2346432
  %203 = load <2 x double>, ptr %202, align 8, !tbaa !12
  %204 = insertelement <2 x double> poison, double %201, i64 0
  %205 = shufflevector <2 x double> %204, <2 x double> poison, <2 x i32> zeroinitializer
  %206 = fmul <2 x double> %205, %203
  store <2 x double> %206, ptr %202, align 8, !tbaa !12
  %207 = add nuw i64 %.2346432, 2
  %exitcond466.not.1 = icmp eq i64 %199, %175
  br i1 %exitcond466.not.1, label %._crit_edge, label %.lr.ph433, !llvm.loop !30

._crit_edge:                                      ; preds = %.lr.ph433.prol.loopexit, %.lr.ph433, %middle.block553, %174
  br i1 %.not355, label %210, label %208

208:                                              ; preds = %._crit_edge
  %209 = call i32 @zpotrs_(ptr noundef nonnull @.str.1, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %5, ptr noundef %9, ptr noundef nonnull %1, ptr noundef nonnull %8) #3
  br label %212

210:                                              ; preds = %._crit_edge
  %211 = call i32 @zpotrs_(ptr noundef nonnull @.str.2, 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) #3
  br label %212

212:                                              ; preds = %210, %208
  %213 = load i64, ptr %7, align 8, !tbaa !5
  %.not369 = icmp eq i64 %213, 0
  %.pre.pre = load i64, ptr %1, align 8, !tbaa !5
  %.not370434 = icmp slt i64 %.pre.pre, 1
  %or.cond = select i1 %.not369, i1 true, i1 %.not370434
  br i1 %or.cond, label %.loopexit.backedge, label %.lr.ph437.preheader

.lr.ph437.preheader:                              ; preds = %212
  %min.iters.check531 = icmp ult i64 %.pre.pre, 2
  br i1 %min.iters.check531, label %.lr.ph437.preheader580, label %vector.memcheck523

vector.memcheck523:                               ; preds = %.lr.ph437.preheader
  %214 = shl i64 %.pre.pre, 4
  %scevgep524 = getelementptr i8, ptr %9, i64 %214
  %215 = shl i64 %.pre.pre, 3
  %scevgep525 = getelementptr i8, ptr %6, i64 %215
  %bound0526 = icmp ugt ptr %scevgep525, %9
  %bound1527 = icmp ugt ptr %scevgep524, %6
  %found.conflict528 = and i1 %bound0526, %bound1527
  br i1 %found.conflict528, label %.lr.ph437.preheader580, label %vector.ph532

vector.ph532:                                     ; preds = %vector.memcheck523
  %n.vec534 = and i64 %.pre.pre, 9223372036854775806
  %ind.end535 = or i64 %.pre.pre, 1
  br label %vector.body537

vector.body537:                                   ; preds = %vector.body537, %vector.ph532
  %index538 = phi i64 [ 0, %vector.ph532 ], [ %index.next545, %vector.body537 ]
  %216 = getelementptr double, ptr %6, i64 %index538
  %wide.load540 = load <2 x double>, ptr %216, align 8, !tbaa !12, !alias.scope !31
  %217 = getelementptr %struct.doublecomplex, ptr %9, i64 %index538
  %wide.vec541 = load <4 x double>, ptr %217, align 8, !tbaa !12
  %strided.vec542 = shufflevector <4 x double> %wide.vec541, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec543 = shufflevector <4 x double> %wide.vec541, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %218 = fmul <2 x double> %wide.load540, %strided.vec542
  %219 = fmul <2 x double> %wide.load540, %strided.vec543
  %interleaved.vec544 = shufflevector <2 x double> %218, <2 x double> %219, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec544, ptr %217, align 8, !tbaa !12
  %index.next545 = add nuw i64 %index538, 2
  %220 = icmp eq i64 %index.next545, %n.vec534
  br i1 %220, label %middle.block529, label %vector.body537, !llvm.loop !34

middle.block529:                                  ; preds = %vector.body537
  %cmp.n546 = icmp eq i64 %.pre.pre, %n.vec534
  br i1 %cmp.n546, label %.loopexit.backedge, label %.lr.ph437.preheader580

.loopexit.backedge:                               ; preds = %.lr.ph437.prol.loopexit, %.lr.ph437, %.lr.ph445.prol.loopexit, %.lr.ph445, %middle.block529, %middle.block, %.loopexit376, %212
  %.be = phi i64 [ %283, %.loopexit376 ], [ %.pre.pre, %212 ], [ %283, %middle.block ], [ %.pre.pre, %middle.block529 ], [ %283, %.lr.ph445 ], [ %283, %.lr.ph445.prol.loopexit ], [ %.pre.pre, %.lr.ph437 ], [ %.pre.pre, %.lr.ph437.prol.loopexit ]
  br label %.loopexit

.lr.ph437.preheader580:                           ; preds = %middle.block529, %vector.memcheck523, %.lr.ph437.preheader
  %.3347435.ph = phi i64 [ 1, %vector.memcheck523 ], [ 1, %.lr.ph437.preheader ], [ %ind.end535, %middle.block529 ]
  %xtraiter595 = and i64 %.pre.pre, 1
  %lcmp.mod596.not = icmp eq i64 %xtraiter595, 0
  br i1 %lcmp.mod596.not, label %.lr.ph437.prol.loopexit, label %.lr.ph437.prol

.lr.ph437.prol:                                   ; preds = %.lr.ph437.preheader580
  %221 = getelementptr inbounds double, ptr %20, i64 %.3347435.ph
  %222 = load double, ptr %221, align 8, !tbaa !12
  %223 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.3347435.ph
  %224 = load <2 x double>, ptr %223, align 8, !tbaa !12
  %225 = insertelement <2 x double> poison, double %222, i64 0
  %226 = shufflevector <2 x double> %225, <2 x double> poison, <2 x i32> zeroinitializer
  %227 = fmul <2 x double> %226, %224
  store <2 x double> %227, ptr %223, align 8, !tbaa !12
  %228 = add nuw i64 %.3347435.ph, 1
  br label %.lr.ph437.prol.loopexit

.lr.ph437.prol.loopexit:                          ; preds = %.lr.ph437.prol, %.lr.ph437.preheader580
  %.3347435.unr = phi i64 [ %.3347435.ph, %.lr.ph437.preheader580 ], [ %228, %.lr.ph437.prol ]
  %229 = icmp eq i64 %.pre.pre, %.3347435.ph
  br i1 %229, label %.loopexit.backedge, label %.lr.ph437

.lr.ph437:                                        ; preds = %.lr.ph437.prol.loopexit, %.lr.ph437
  %.3347435 = phi i64 [ %245, %.lr.ph437 ], [ %.3347435.unr, %.lr.ph437.prol.loopexit ]
  %230 = getelementptr inbounds double, ptr %20, i64 %.3347435
  %231 = load double, ptr %230, align 8, !tbaa !12
  %232 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.3347435
  %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
  %237 = add nuw i64 %.3347435, 1
  %238 = getelementptr double, ptr %6, i64 %.3347435
  %239 = load double, ptr %238, align 8, !tbaa !12
  %240 = getelementptr %struct.doublecomplex, ptr %9, i64 %.3347435
  %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 = add nuw i64 %.3347435, 2
  %exitcond467.not.1 = icmp eq i64 %237, %.pre.pre
  br i1 %exitcond467.not.1, label %.loopexit.backedge, label %.lr.ph437, !llvm.loop !35

246:                                              ; preds = %.loopexit
  %247 = load i64, ptr %7, align 8, !tbaa !5
  %.not365 = icmp eq i64 %247, 0
  br i1 %.not365, label %.loopexit376, label %248

248:                                              ; preds = %246
  %249 = load i64, ptr %1, align 8, !tbaa !5
  %.not366438 = icmp slt i64 %249, 1
  br i1 %.not366438, label %.loopexit376, label %.lr.ph441.preheader

.lr.ph441.preheader:                              ; preds = %248
  %min.iters.check507 = icmp eq i64 %249, 1
  br i1 %min.iters.check507, label %.lr.ph441.preheader579, label %vector.memcheck499

vector.memcheck499:                               ; preds = %.lr.ph441.preheader
  %250 = shl i64 %249, 4
  %scevgep500 = getelementptr i8, ptr %9, i64 %250
  %251 = shl i64 %249, 3
  %scevgep501 = getelementptr i8, ptr %6, i64 %251
  %bound0502 = icmp ugt ptr %scevgep501, %9
  %bound1503 = icmp ugt ptr %scevgep500, %6
  %found.conflict504 = and i1 %bound0502, %bound1503
  br i1 %found.conflict504, label %.lr.ph441.preheader579, label %vector.ph508

vector.ph508:                                     ; preds = %vector.memcheck499
  %n.vec510 = and i64 %249, 9223372036854775806
  %ind.end511 = or i64 %249, 1
  br label %vector.body513

vector.body513:                                   ; preds = %vector.body513, %vector.ph508
  %index514 = phi i64 [ 0, %vector.ph508 ], [ %index.next521, %vector.body513 ]
  %252 = getelementptr double, ptr %6, i64 %index514
  %wide.load516 = load <2 x double>, ptr %252, align 8, !tbaa !12, !alias.scope !36
  %253 = getelementptr %struct.doublecomplex, ptr %9, i64 %index514
  %wide.vec517 = load <4 x double>, ptr %253, align 8, !tbaa !12
  %strided.vec518 = shufflevector <4 x double> %wide.vec517, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec519 = shufflevector <4 x double> %wide.vec517, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %254 = fmul <2 x double> %wide.load516, %strided.vec518
  %255 = fmul <2 x double> %wide.load516, %strided.vec519
  %interleaved.vec520 = shufflevector <2 x double> %254, <2 x double> %255, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec520, ptr %253, align 8, !tbaa !12
  %index.next521 = add nuw i64 %index514, 2
  %256 = icmp eq i64 %index.next521, %n.vec510
  br i1 %256, label %middle.block505, label %vector.body513, !llvm.loop !39

middle.block505:                                  ; preds = %vector.body513
  %cmp.n522 = icmp eq i64 %249, %n.vec510
  br i1 %cmp.n522, label %.loopexit376, label %.lr.ph441.preheader579

.lr.ph441.preheader579:                           ; preds = %middle.block505, %vector.memcheck499, %.lr.ph441.preheader
  %.4348439.ph = phi i64 [ 1, %vector.memcheck499 ], [ 1, %.lr.ph441.preheader ], [ %ind.end511, %middle.block505 ]
  %xtraiter597 = and i64 %249, 1
  %lcmp.mod598.not = icmp eq i64 %xtraiter597, 0
  br i1 %lcmp.mod598.not, label %.lr.ph441.prol.loopexit, label %.lr.ph441.prol

.lr.ph441.prol:                                   ; preds = %.lr.ph441.preheader579
  %257 = getelementptr inbounds double, ptr %20, i64 %.4348439.ph
  %258 = load double, ptr %257, align 8, !tbaa !12
  %259 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.4348439.ph
  %260 = load <2 x double>, ptr %259, align 8, !tbaa !12
  %261 = insertelement <2 x double> poison, double %258, i64 0
  %262 = shufflevector <2 x double> %261, <2 x double> poison, <2 x i32> zeroinitializer
  %263 = fmul <2 x double> %262, %260
  store <2 x double> %263, ptr %259, align 8, !tbaa !12
  %264 = add nuw i64 %.4348439.ph, 1
  br label %.lr.ph441.prol.loopexit

.lr.ph441.prol.loopexit:                          ; preds = %.lr.ph441.prol, %.lr.ph441.preheader579
  %.4348439.unr = phi i64 [ %.4348439.ph, %.lr.ph441.preheader579 ], [ %264, %.lr.ph441.prol ]
  %265 = icmp eq i64 %249, %.4348439.ph
  br i1 %265, label %.loopexit376, label %.lr.ph441

.lr.ph441:                                        ; preds = %.lr.ph441.prol.loopexit, %.lr.ph441
  %.4348439 = phi i64 [ %281, %.lr.ph441 ], [ %.4348439.unr, %.lr.ph441.prol.loopexit ]
  %266 = getelementptr inbounds double, ptr %20, i64 %.4348439
  %267 = load double, ptr %266, align 8, !tbaa !12
  %268 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.4348439
  %269 = load <2 x double>, ptr %268, align 8, !tbaa !12
  %270 = insertelement <2 x double> poison, double %267, i64 0
  %271 = shufflevector <2 x double> %270, <2 x double> poison, <2 x i32> zeroinitializer
  %272 = fmul <2 x double> %271, %269
  store <2 x double> %272, ptr %268, align 8, !tbaa !12
  %273 = add nuw i64 %.4348439, 1
  %274 = getelementptr double, ptr %6, i64 %.4348439
  %275 = load double, ptr %274, align 8, !tbaa !12
  %276 = getelementptr %struct.doublecomplex, ptr %9, i64 %.4348439
  %277 = load <2 x double>, ptr %276, align 8, !tbaa !12
  %278 = insertelement <2 x double> poison, double %275, i64 0
  %279 = shufflevector <2 x double> %278, <2 x double> poison, <2 x i32> zeroinitializer
  %280 = fmul <2 x double> %279, %277
  store <2 x double> %280, ptr %276, align 8, !tbaa !12
  %281 = add nuw i64 %.4348439, 2
  %exitcond468.not.1 = icmp eq i64 %273, %249
  br i1 %exitcond468.not.1, label %.loopexit376, label %.lr.ph441, !llvm.loop !40

.loopexit376:                                     ; preds = %.lr.ph441.prol.loopexit, %.lr.ph441, %middle.block505, %248, %246
  %282 = call i32 @zpotrs_(ptr noundef nonnull %.str.2..str.1, 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) #3
  %283 = load i64, ptr %1, align 8, !tbaa !5
  %.not367442 = icmp slt i64 %283, 1
  br i1 %.not367442, label %.loopexit.backedge, label %.lr.ph445.preheader

.lr.ph445.preheader:                              ; preds = %.loopexit376
  %min.iters.check = icmp eq i64 %283, 1
  br i1 %min.iters.check, label %.lr.ph445.preheader578, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph445.preheader
  %284 = shl i64 %283, 4
  %scevgep = getelementptr i8, ptr %9, i64 %284
  %285 = shl i64 %283, 3
  %scevgep497 = getelementptr i8, ptr %10, i64 %285
  %bound0 = icmp ugt ptr %scevgep497, %9
  %bound1 = icmp ugt ptr %scevgep, %10
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph445.preheader578, label %vector.ph

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

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %283, %n.vec
  br i1 %cmp.n, label %.loopexit.backedge, label %.lr.ph445.preheader578

.lr.ph445.preheader578:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph445.preheader
  %.5349443.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph445.preheader ], [ %ind.end, %middle.block ]
  %xtraiter599 = and i64 %283, 1
  %lcmp.mod600.not = icmp eq i64 %xtraiter599, 0
  br i1 %lcmp.mod600.not, label %.lr.ph445.prol.loopexit, label %.lr.ph445.prol

.lr.ph445.prol:                                   ; preds = %.lr.ph445.preheader578
  %291 = getelementptr inbounds double, ptr %22, i64 %.5349443.ph
  %292 = load double, ptr %291, align 8, !tbaa !12
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.5349443.ph
  %294 = load <2 x double>, ptr %293, align 8, !tbaa !12
  %295 = insertelement <2 x double> poison, double %292, i64 0
  %296 = shufflevector <2 x double> %295, <2 x double> poison, <2 x i32> zeroinitializer
  %297 = fmul <2 x double> %296, %294
  store <2 x double> %297, ptr %293, align 8, !tbaa !12
  %298 = add nuw i64 %.5349443.ph, 1
  br label %.lr.ph445.prol.loopexit

.lr.ph445.prol.loopexit:                          ; preds = %.lr.ph445.prol, %.lr.ph445.preheader578
  %.5349443.unr = phi i64 [ %.5349443.ph, %.lr.ph445.preheader578 ], [ %298, %.lr.ph445.prol ]
  %299 = icmp eq i64 %283, %.5349443.ph
  br i1 %299, label %.loopexit.backedge, label %.lr.ph445

.lr.ph445:                                        ; preds = %.lr.ph445.prol.loopexit, %.lr.ph445
  %.5349443 = phi i64 [ %315, %.lr.ph445 ], [ %.5349443.unr, %.lr.ph445.prol.loopexit ]
  %300 = getelementptr inbounds double, ptr %22, i64 %.5349443
  %301 = load double, ptr %300, align 8, !tbaa !12
  %302 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %.5349443
  %303 = load <2 x double>, ptr %302, align 8, !tbaa !12
  %304 = insertelement <2 x double> poison, double %301, i64 0
  %305 = shufflevector <2 x double> %304, <2 x double> poison, <2 x i32> zeroinitializer
  %306 = fmul <2 x double> %305, %303
  store <2 x double> %306, ptr %302, align 8, !tbaa !12
  %307 = add nuw i64 %.5349443, 1
  %308 = getelementptr double, ptr %10, i64 %.5349443
  %309 = load double, ptr %308, align 8, !tbaa !12
  %310 = getelementptr %struct.doublecomplex, ptr %9, i64 %.5349443
  %311 = load <2 x double>, ptr %310, align 8, !tbaa !12
  %312 = insertelement <2 x double> poison, double %309, i64 0
  %313 = shufflevector <2 x double> %312, <2 x double> poison, <2 x i32> zeroinitializer
  %314 = fmul <2 x double> %313, %311
  store <2 x double> %314, ptr %310, align 8, !tbaa !12
  %315 = add nuw i64 %.5349443, 2
  %exitcond469.not.1 = icmp eq i64 %307, %283
  br i1 %exitcond469.not.1, label %.loopexit.backedge, label %.lr.ph445, !llvm.loop !45

316:                                              ; preds = %.loopexit
  %317 = load double, ptr %16, align 8, !tbaa !12
  %318 = fcmp une double %317, 0.000000e+00
  %319 = fdiv double 1.000000e+00, %317
  %.0350 = select i1 %318, double %319, double 0.000000e+00
  br label %320

320:                                              ; preds = %.loopexit381, %316, %25
  %.0351 = phi double [ 0.000000e+00, %25 ], [ %.0350, %316 ], [ %.mux, %.loopexit381 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #3
  ret double %.0351
}

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

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

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = 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: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass