; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (zgebal)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @zgebal_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) #0 {
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, 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 double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca i64, align 8
  %45 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  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 8, 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 8, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  %46 = load ptr, ptr %13, align 8, !tbaa !5
  %47 = load i64, ptr %46, align 8, !tbaa !9
  store i64 %47, ptr %18, align 8, !tbaa !9
  %48 = load i64, ptr %18, align 8, !tbaa !9
  %49 = add nsw i64 1, %48
  store i64 %49, ptr %19, align 8, !tbaa !9
  %50 = load i64, ptr %19, align 8, !tbaa !9
  %51 = load ptr, ptr %12, align 8, !tbaa !5
  %52 = sub i64 0, %50
  %53 = getelementptr inbounds %struct.doublecomplex, ptr %51, i64 %52
  store ptr %53, ptr %12, align 8, !tbaa !5
  %54 = load ptr, ptr %16, align 8, !tbaa !5
  %55 = getelementptr inbounds double, ptr %54, i32 -1
  store ptr %55, ptr %16, align 8, !tbaa !5
  %56 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 0, ptr %56, align 8, !tbaa !9
  %57 = load ptr, ptr %10, align 8, !tbaa !5
  %58 = call i64 @lsame_(ptr noundef %57, ptr noundef @.str)
  %59 = icmp ne i64 %58, 0
  br i1 %59, label %74, label %60

60:                                               ; preds = %8
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = call i64 @lsame_(ptr noundef %61, ptr noundef @.str.1)
  %63 = icmp ne i64 %62, 0
  br i1 %63, label %74, label %64

64:                                               ; preds = %60
  %65 = load ptr, ptr %10, align 8, !tbaa !5
  %66 = call i64 @lsame_(ptr noundef %65, ptr noundef @.str.2)
  %67 = icmp ne i64 %66, 0
  br i1 %67, label %74, label %68

68:                                               ; preds = %64
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = call i64 @lsame_(ptr noundef %69, ptr noundef @.str.3)
  %71 = icmp ne i64 %70, 0
  br i1 %71, label %74, label %72

72:                                               ; preds = %68
  %73 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -1, ptr %73, align 8, !tbaa !9
  br label %97

74:                                               ; preds = %68, %64, %60, %8
  %75 = load ptr, ptr %11, align 8, !tbaa !5
  %76 = load i64, ptr %75, align 8, !tbaa !9
  %77 = icmp slt i64 %76, 0
  br i1 %77, label %78, label %80

78:                                               ; preds = %74
  %79 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -2, ptr %79, align 8, !tbaa !9
  br label %96

80:                                               ; preds = %74
  %81 = load ptr, ptr %13, align 8, !tbaa !5
  %82 = load i64, ptr %81, align 8, !tbaa !9
  %83 = load ptr, ptr %11, align 8, !tbaa !5
  %84 = load i64, ptr %83, align 8, !tbaa !9
  %85 = icmp sge i64 1, %84
  br i1 %85, label %86, label %87

86:                                               ; preds = %80
  br label %90

87:                                               ; preds = %80
  %88 = load ptr, ptr %11, align 8, !tbaa !5
  %89 = load i64, ptr %88, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %87, %86
  %91 = phi i64 [ 1, %86 ], [ %89, %87 ]
  %92 = icmp slt i64 %82, %91
  br i1 %92, label %93, label %95

93:                                               ; preds = %90
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -4, ptr %94, align 8, !tbaa !9
  br label %95

95:                                               ; preds = %93, %90
  br label %96

96:                                               ; preds = %95, %78
  br label %97

97:                                               ; preds = %96, %72
  %98 = load ptr, ptr %17, align 8, !tbaa !5
  %99 = load i64, ptr %98, align 8, !tbaa !9
  %100 = icmp ne i64 %99, 0
  br i1 %100, label %101, label %106

101:                                              ; preds = %97
  %102 = load ptr, ptr %17, align 8, !tbaa !5
  %103 = load i64, ptr %102, align 8, !tbaa !9
  %104 = sub nsw i64 0, %103
  store i64 %104, ptr %20, align 8, !tbaa !9
  %105 = call i32 @xerbla_(ptr noundef @.str.4, ptr noundef %20)
  store i32 0, ptr %9, align 4
  store i32 1, ptr %45, align 4
  br label %703

106:                                              ; preds = %97
  store i64 1, ptr %30, align 8, !tbaa !9
  %107 = load ptr, ptr %11, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  store i64 %108, ptr %31, align 8, !tbaa !9
  %109 = load ptr, ptr %11, align 8, !tbaa !5
  %110 = load i64, ptr %109, align 8, !tbaa !9
  %111 = icmp eq i64 %110, 0
  br i1 %111, label %112, label %113

112:                                              ; preds = %106
  br label %698

113:                                              ; preds = %106
  %114 = load ptr, ptr %10, align 8, !tbaa !5
  %115 = call i64 @lsame_(ptr noundef %114, ptr noundef @.str)
  %116 = icmp ne i64 %115, 0
  br i1 %116, label %117, label %132

117:                                              ; preds = %113
  %118 = load ptr, ptr %11, align 8, !tbaa !5
  %119 = load i64, ptr %118, align 8, !tbaa !9
  store i64 %119, ptr %20, align 8, !tbaa !9
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %120

120:                                              ; preds = %128, %117
  %121 = load i64, ptr %28, align 8, !tbaa !9
  %122 = load i64, ptr %20, align 8, !tbaa !9
  %123 = icmp sle i64 %121, %122
  br i1 %123, label %124, label %131

124:                                              ; preds = %120
  %125 = load ptr, ptr %16, align 8, !tbaa !5
  %126 = load i64, ptr %28, align 8, !tbaa !9
  %127 = getelementptr inbounds double, ptr %125, i64 %126
  store double 1.000000e+00, ptr %127, align 8, !tbaa !11
  br label %128

128:                                              ; preds = %124
  %129 = load i64, ptr %28, align 8, !tbaa !9
  %130 = add nsw i64 %129, 1
  store i64 %130, ptr %28, align 8, !tbaa !9
  br label %120, !llvm.loop !13

131:                                              ; preds = %120
  br label %698

132:                                              ; preds = %113
  %133 = load ptr, ptr %10, align 8, !tbaa !5
  %134 = call i64 @lsame_(ptr noundef %133, ptr noundef @.str.2)
  %135 = icmp ne i64 %134, 0
  br i1 %135, label %136, label %137

136:                                              ; preds = %132
  br label %304

137:                                              ; preds = %132
  br label %196

138:                                              ; preds = %297, %240
  %139 = load i64, ptr %29, align 8, !tbaa !9
  %140 = sitofp i64 %139 to double
  %141 = load ptr, ptr %16, align 8, !tbaa !5
  %142 = load i64, ptr %32, align 8, !tbaa !9
  %143 = getelementptr inbounds double, ptr %141, i64 %142
  store double %140, ptr %143, align 8, !tbaa !11
  %144 = load i64, ptr %29, align 8, !tbaa !9
  %145 = load i64, ptr %32, align 8, !tbaa !9
  %146 = icmp eq i64 %144, %145
  br i1 %146, label %147, label %148

147:                                              ; preds = %138
  br label %184

148:                                              ; preds = %138
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = load i64, ptr %29, align 8, !tbaa !9
  %151 = load i64, ptr %18, align 8, !tbaa !9
  %152 = mul nsw i64 %150, %151
  %153 = add nsw i64 %152, 1
  %154 = getelementptr inbounds %struct.doublecomplex, ptr %149, i64 %153
  %155 = load ptr, ptr %12, align 8, !tbaa !5
  %156 = load i64, ptr %32, align 8, !tbaa !9
  %157 = load i64, ptr %18, align 8, !tbaa !9
  %158 = mul nsw i64 %156, %157
  %159 = add nsw i64 %158, 1
  %160 = getelementptr inbounds %struct.doublecomplex, ptr %155, i64 %159
  %161 = call i32 @f2c_zswap(ptr noundef %31, ptr noundef %154, ptr noundef @c__1, ptr noundef %160, ptr noundef @c__1)
  %162 = load ptr, ptr %11, align 8, !tbaa !5
  %163 = load i64, ptr %162, align 8, !tbaa !9
  %164 = load i64, ptr %30, align 8, !tbaa !9
  %165 = sub nsw i64 %163, %164
  %166 = add nsw i64 %165, 1
  store i64 %166, ptr %20, align 8, !tbaa !9
  %167 = load ptr, ptr %12, align 8, !tbaa !5
  %168 = load i64, ptr %29, align 8, !tbaa !9
  %169 = load i64, ptr %30, align 8, !tbaa !9
  %170 = load i64, ptr %18, align 8, !tbaa !9
  %171 = mul nsw i64 %169, %170
  %172 = add nsw i64 %168, %171
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %167, i64 %172
  %174 = load ptr, ptr %13, align 8, !tbaa !5
  %175 = load ptr, ptr %12, align 8, !tbaa !5
  %176 = load i64, ptr %32, align 8, !tbaa !9
  %177 = load i64, ptr %30, align 8, !tbaa !9
  %178 = load i64, ptr %18, align 8, !tbaa !9
  %179 = mul nsw i64 %177, %178
  %180 = add nsw i64 %176, %179
  %181 = getelementptr inbounds %struct.doublecomplex, ptr %175, i64 %180
  %182 = load ptr, ptr %13, align 8, !tbaa !5
  %183 = call i32 @f2c_zswap(ptr noundef %20, ptr noundef %173, ptr noundef %174, ptr noundef %181, ptr noundef %182)
  br label %184

184:                                              ; preds = %148, %147
  %185 = load i64, ptr %39, align 8, !tbaa !9
  switch i64 %185, label %188 [
    i64 1, label %186
    i64 2, label %187
  ]

186:                                              ; preds = %184
  br label %189

187:                                              ; preds = %184
  br label %247

188:                                              ; preds = %184
  br label %189

189:                                              ; preds = %188, %186
  %190 = load i64, ptr %31, align 8, !tbaa !9
  %191 = icmp eq i64 %190, 1
  br i1 %191, label %192, label %193

192:                                              ; preds = %189
  br label %698

193:                                              ; preds = %189
  %194 = load i64, ptr %31, align 8, !tbaa !9
  %195 = add nsw i64 %194, -1
  store i64 %195, ptr %31, align 8, !tbaa !9
  br label %196

196:                                              ; preds = %193, %137
  %197 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %197, ptr %29, align 8, !tbaa !9
  br label %198

198:                                              ; preds = %243, %196
  %199 = load i64, ptr %29, align 8, !tbaa !9
  %200 = icmp sge i64 %199, 1
  br i1 %200, label %201, label %246

201:                                              ; preds = %198
  %202 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %202, ptr %20, align 8, !tbaa !9
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %203

203:                                              ; preds = %237, %201
  %204 = load i64, ptr %28, align 8, !tbaa !9
  %205 = load i64, ptr %20, align 8, !tbaa !9
  %206 = icmp sle i64 %204, %205
  br i1 %206, label %207, label %240

207:                                              ; preds = %203
  %208 = load i64, ptr %28, align 8, !tbaa !9
  %209 = load i64, ptr %29, align 8, !tbaa !9
  %210 = icmp eq i64 %208, %209
  br i1 %210, label %211, label %212

211:                                              ; preds = %207
  br label %236

212:                                              ; preds = %207
  %213 = load i64, ptr %29, align 8, !tbaa !9
  %214 = load i64, ptr %28, align 8, !tbaa !9
  %215 = load i64, ptr %18, align 8, !tbaa !9
  %216 = mul nsw i64 %214, %215
  %217 = add nsw i64 %213, %216
  store i64 %217, ptr %21, align 8, !tbaa !9
  %218 = load ptr, ptr %12, align 8, !tbaa !5
  %219 = load i64, ptr %21, align 8, !tbaa !9
  %220 = getelementptr inbounds %struct.doublecomplex, ptr %218, i64 %219
  %221 = getelementptr inbounds %struct.doublecomplex, ptr %220, i32 0, i32 0
  %222 = load double, ptr %221, align 8, !tbaa !15
  %223 = fcmp une double %222, 0.000000e+00
  br i1 %223, label %234, label %224

224:                                              ; preds = %212
  %225 = load ptr, ptr %12, align 8, !tbaa !5
  %226 = load i64, ptr %29, align 8, !tbaa !9
  %227 = load i64, ptr %28, align 8, !tbaa !9
  %228 = load i64, ptr %18, align 8, !tbaa !9
  %229 = mul nsw i64 %227, %228
  %230 = add nsw i64 %226, %229
  %231 = getelementptr inbounds %struct.doublecomplex, ptr %225, i64 %230
  %232 = call double @d_imag(ptr noundef %231)
  %233 = fcmp une double %232, 0.000000e+00
  br i1 %233, label %234, label %235

234:                                              ; preds = %224, %212
  br label %242

235:                                              ; preds = %224
  br label %236

236:                                              ; preds = %235, %211
  br label %237

237:                                              ; preds = %236
  %238 = load i64, ptr %28, align 8, !tbaa !9
  %239 = add nsw i64 %238, 1
  store i64 %239, ptr %28, align 8, !tbaa !9
  br label %203, !llvm.loop !17

240:                                              ; preds = %203
  %241 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %241, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %39, align 8, !tbaa !9
  br label %138

242:                                              ; preds = %234
  br label %243

243:                                              ; preds = %242
  %244 = load i64, ptr %29, align 8, !tbaa !9
  %245 = add nsw i64 %244, -1
  store i64 %245, ptr %29, align 8, !tbaa !9
  br label %198, !llvm.loop !18

246:                                              ; preds = %198
  br label %250

247:                                              ; preds = %187
  %248 = load i64, ptr %30, align 8, !tbaa !9
  %249 = add nsw i64 %248, 1
  store i64 %249, ptr %30, align 8, !tbaa !9
  br label %250

250:                                              ; preds = %247, %246
  %251 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %251, ptr %20, align 8, !tbaa !9
  %252 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %252, ptr %29, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %300, %250
  %254 = load i64, ptr %29, align 8, !tbaa !9
  %255 = load i64, ptr %20, align 8, !tbaa !9
  %256 = icmp sle i64 %254, %255
  br i1 %256, label %257, label %303

257:                                              ; preds = %253
  %258 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %258, ptr %21, align 8, !tbaa !9
  %259 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %259, ptr %28, align 8, !tbaa !9
  br label %260

260:                                              ; preds = %294, %257
  %261 = load i64, ptr %28, align 8, !tbaa !9
  %262 = load i64, ptr %21, align 8, !tbaa !9
  %263 = icmp sle i64 %261, %262
  br i1 %263, label %264, label %297

264:                                              ; preds = %260
  %265 = load i64, ptr %28, align 8, !tbaa !9
  %266 = load i64, ptr %29, align 8, !tbaa !9
  %267 = icmp eq i64 %265, %266
  br i1 %267, label %268, label %269

268:                                              ; preds = %264
  br label %293

269:                                              ; preds = %264
  %270 = load i64, ptr %28, align 8, !tbaa !9
  %271 = load i64, ptr %29, align 8, !tbaa !9
  %272 = load i64, ptr %18, align 8, !tbaa !9
  %273 = mul nsw i64 %271, %272
  %274 = add nsw i64 %270, %273
  store i64 %274, ptr %22, align 8, !tbaa !9
  %275 = load ptr, ptr %12, align 8, !tbaa !5
  %276 = load i64, ptr %22, align 8, !tbaa !9
  %277 = getelementptr inbounds %struct.doublecomplex, ptr %275, i64 %276
  %278 = getelementptr inbounds %struct.doublecomplex, ptr %277, i32 0, i32 0
  %279 = load double, ptr %278, align 8, !tbaa !15
  %280 = fcmp une double %279, 0.000000e+00
  br i1 %280, label %291, label %281

281:                                              ; preds = %269
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = load i64, ptr %28, align 8, !tbaa !9
  %284 = load i64, ptr %29, align 8, !tbaa !9
  %285 = load i64, ptr %18, align 8, !tbaa !9
  %286 = mul nsw i64 %284, %285
  %287 = add nsw i64 %283, %286
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %282, i64 %287
  %289 = call double @d_imag(ptr noundef %288)
  %290 = fcmp une double %289, 0.000000e+00
  br i1 %290, label %291, label %292

291:                                              ; preds = %281, %269
  br label %299

292:                                              ; preds = %281
  br label %293

293:                                              ; preds = %292, %268
  br label %294

294:                                              ; preds = %293
  %295 = load i64, ptr %28, align 8, !tbaa !9
  %296 = add nsw i64 %295, 1
  store i64 %296, ptr %28, align 8, !tbaa !9
  br label %260, !llvm.loop !19

297:                                              ; preds = %260
  %298 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %298, ptr %32, align 8, !tbaa !9
  store i64 2, ptr %39, align 8, !tbaa !9
  br label %138

299:                                              ; preds = %291
  br label %300

300:                                              ; preds = %299
  %301 = load i64, ptr %29, align 8, !tbaa !9
  %302 = add nsw i64 %301, 1
  store i64 %302, ptr %29, align 8, !tbaa !9
  br label %253, !llvm.loop !20

303:                                              ; preds = %253
  br label %304

304:                                              ; preds = %303, %136
  %305 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %305, ptr %20, align 8, !tbaa !9
  %306 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %306, ptr %28, align 8, !tbaa !9
  br label %307

307:                                              ; preds = %315, %304
  %308 = load i64, ptr %28, align 8, !tbaa !9
  %309 = load i64, ptr %20, align 8, !tbaa !9
  %310 = icmp sle i64 %308, %309
  br i1 %310, label %311, label %318

311:                                              ; preds = %307
  %312 = load ptr, ptr %16, align 8, !tbaa !5
  %313 = load i64, ptr %28, align 8, !tbaa !9
  %314 = getelementptr inbounds double, ptr %312, i64 %313
  store double 1.000000e+00, ptr %314, align 8, !tbaa !11
  br label %315

315:                                              ; preds = %311
  %316 = load i64, ptr %28, align 8, !tbaa !9
  %317 = add nsw i64 %316, 1
  store i64 %317, ptr %28, align 8, !tbaa !9
  br label %307, !llvm.loop !21

318:                                              ; preds = %307
  %319 = load ptr, ptr %10, align 8, !tbaa !5
  %320 = call i64 @lsame_(ptr noundef %319, ptr noundef @.str.1)
  %321 = icmp ne i64 %320, 0
  br i1 %321, label %322, label %323

322:                                              ; preds = %318
  br label %698

323:                                              ; preds = %318
  %324 = call double @dlamch_(ptr noundef @.str.2)
  %325 = call double @dlamch_(ptr noundef @.str.1)
  %326 = fdiv double %324, %325
  store double %326, ptr %40, align 8, !tbaa !11
  %327 = load double, ptr %40, align 8, !tbaa !11
  %328 = fdiv double 1.000000e+00, %327
  store double %328, ptr %42, align 8, !tbaa !11
  %329 = load double, ptr %40, align 8, !tbaa !11
  %330 = fmul double %329, 2.000000e+00
  store double %330, ptr %41, align 8, !tbaa !11
  %331 = load double, ptr %41, align 8, !tbaa !11
  %332 = fdiv double 1.000000e+00, %331
  store double %332, ptr %43, align 8, !tbaa !11
  br label %333

333:                                              ; preds = %696, %323
  store i64 0, ptr %44, align 8, !tbaa !9
  %334 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %334, ptr %20, align 8, !tbaa !9
  %335 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %335, ptr %28, align 8, !tbaa !9
  br label %336

336:                                              ; preds = %690, %333
  %337 = load i64, ptr %28, align 8, !tbaa !9
  %338 = load i64, ptr %20, align 8, !tbaa !9
  %339 = icmp sle i64 %337, %338
  br i1 %339, label %340, label %693

340:                                              ; preds = %336
  store double 0.000000e+00, ptr %25, align 8, !tbaa !11
  store double 0.000000e+00, ptr %33, align 8, !tbaa !11
  %341 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %341, ptr %21, align 8, !tbaa !9
  %342 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %342, ptr %29, align 8, !tbaa !9
  br label %343

343:                                              ; preds = %432, %340
  %344 = load i64, ptr %29, align 8, !tbaa !9
  %345 = load i64, ptr %21, align 8, !tbaa !9
  %346 = icmp sle i64 %344, %345
  br i1 %346, label %347, label %435

347:                                              ; preds = %343
  %348 = load i64, ptr %29, align 8, !tbaa !9
  %349 = load i64, ptr %28, align 8, !tbaa !9
  %350 = icmp eq i64 %348, %349
  br i1 %350, label %351, label %352

351:                                              ; preds = %347
  br label %431

352:                                              ; preds = %347
  %353 = load i64, ptr %29, align 8, !tbaa !9
  %354 = load i64, ptr %28, align 8, !tbaa !9
  %355 = load i64, ptr %18, align 8, !tbaa !9
  %356 = mul nsw i64 %354, %355
  %357 = add nsw i64 %353, %356
  store i64 %357, ptr %22, align 8, !tbaa !9
  %358 = load ptr, ptr %12, align 8, !tbaa !5
  %359 = load i64, ptr %22, align 8, !tbaa !9
  %360 = getelementptr inbounds %struct.doublecomplex, ptr %358, i64 %359
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %360, i32 0, i32 0
  %362 = load double, ptr %361, align 8, !tbaa !15
  store double %362, ptr %23, align 8, !tbaa !11
  %363 = load double, ptr %23, align 8, !tbaa !11
  %364 = fcmp oge double %363, 0.000000e+00
  br i1 %364, label %365, label %367

365:                                              ; preds = %352
  %366 = load double, ptr %23, align 8, !tbaa !11
  br label %370

367:                                              ; preds = %352
  %368 = load double, ptr %23, align 8, !tbaa !11
  %369 = fneg double %368
  br label %370

370:                                              ; preds = %367, %365
  %371 = phi double [ %366, %365 ], [ %369, %367 ]
  %372 = load ptr, ptr %12, align 8, !tbaa !5
  %373 = load i64, ptr %29, align 8, !tbaa !9
  %374 = load i64, ptr %28, align 8, !tbaa !9
  %375 = load i64, ptr %18, align 8, !tbaa !9
  %376 = mul nsw i64 %374, %375
  %377 = add nsw i64 %373, %376
  %378 = getelementptr inbounds %struct.doublecomplex, ptr %372, i64 %377
  %379 = call double @d_imag(ptr noundef %378)
  store double %379, ptr %24, align 8, !tbaa !11
  %380 = load double, ptr %24, align 8, !tbaa !11
  %381 = fcmp oge double %380, 0.000000e+00
  br i1 %381, label %382, label %384

382:                                              ; preds = %370
  %383 = load double, ptr %24, align 8, !tbaa !11
  br label %387

384:                                              ; preds = %370
  %385 = load double, ptr %24, align 8, !tbaa !11
  %386 = fneg double %385
  br label %387

387:                                              ; preds = %384, %382
  %388 = phi double [ %383, %382 ], [ %386, %384 ]
  %389 = fadd double %371, %388
  %390 = load double, ptr %25, align 8, !tbaa !11
  %391 = fadd double %390, %389
  store double %391, ptr %25, align 8, !tbaa !11
  %392 = load i64, ptr %28, align 8, !tbaa !9
  %393 = load i64, ptr %29, align 8, !tbaa !9
  %394 = load i64, ptr %18, align 8, !tbaa !9
  %395 = mul nsw i64 %393, %394
  %396 = add nsw i64 %392, %395
  store i64 %396, ptr %22, align 8, !tbaa !9
  %397 = load ptr, ptr %12, align 8, !tbaa !5
  %398 = load i64, ptr %22, align 8, !tbaa !9
  %399 = getelementptr inbounds %struct.doublecomplex, ptr %397, i64 %398
  %400 = getelementptr inbounds %struct.doublecomplex, ptr %399, i32 0, i32 0
  %401 = load double, ptr %400, align 8, !tbaa !15
  store double %401, ptr %23, align 8, !tbaa !11
  %402 = load double, ptr %23, align 8, !tbaa !11
  %403 = fcmp oge double %402, 0.000000e+00
  br i1 %403, label %404, label %406

404:                                              ; preds = %387
  %405 = load double, ptr %23, align 8, !tbaa !11
  br label %409

406:                                              ; preds = %387
  %407 = load double, ptr %23, align 8, !tbaa !11
  %408 = fneg double %407
  br label %409

409:                                              ; preds = %406, %404
  %410 = phi double [ %405, %404 ], [ %408, %406 ]
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = load i64, ptr %28, align 8, !tbaa !9
  %413 = load i64, ptr %29, align 8, !tbaa !9
  %414 = load i64, ptr %18, align 8, !tbaa !9
  %415 = mul nsw i64 %413, %414
  %416 = add nsw i64 %412, %415
  %417 = getelementptr inbounds %struct.doublecomplex, ptr %411, i64 %416
  %418 = call double @d_imag(ptr noundef %417)
  store double %418, ptr %24, align 8, !tbaa !11
  %419 = load double, ptr %24, align 8, !tbaa !11
  %420 = fcmp oge double %419, 0.000000e+00
  br i1 %420, label %421, label %423

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

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

426:                                              ; preds = %423, %421
  %427 = phi double [ %422, %421 ], [ %425, %423 ]
  %428 = fadd double %410, %427
  %429 = load double, ptr %33, align 8, !tbaa !11
  %430 = fadd double %429, %428
  store double %430, ptr %33, align 8, !tbaa !11
  br label %431

431:                                              ; preds = %426, %351
  br label %432

432:                                              ; preds = %431
  %433 = load i64, ptr %29, align 8, !tbaa !9
  %434 = add nsw i64 %433, 1
  store i64 %434, ptr %29, align 8, !tbaa !9
  br label %343, !llvm.loop !22

435:                                              ; preds = %343
  %436 = load ptr, ptr %12, align 8, !tbaa !5
  %437 = load i64, ptr %28, align 8, !tbaa !9
  %438 = load i64, ptr %18, align 8, !tbaa !9
  %439 = mul nsw i64 %437, %438
  %440 = add nsw i64 %439, 1
  %441 = getelementptr inbounds %struct.doublecomplex, ptr %436, i64 %440
  %442 = call i64 @f2c_izamax(ptr noundef %31, ptr noundef %441, ptr noundef @c__1)
  store i64 %442, ptr %37, align 8, !tbaa !9
  %443 = load ptr, ptr %12, align 8, !tbaa !5
  %444 = load i64, ptr %37, align 8, !tbaa !9
  %445 = load i64, ptr %28, align 8, !tbaa !9
  %446 = load i64, ptr %18, align 8, !tbaa !9
  %447 = mul nsw i64 %445, %446
  %448 = add nsw i64 %444, %447
  %449 = getelementptr inbounds %struct.doublecomplex, ptr %443, i64 %448
  %450 = call double @z_abs(ptr noundef %449)
  store double %450, ptr %35, align 8, !tbaa !11
  %451 = load ptr, ptr %11, align 8, !tbaa !5
  %452 = load i64, ptr %451, align 8, !tbaa !9
  %453 = load i64, ptr %30, align 8, !tbaa !9
  %454 = sub nsw i64 %452, %453
  %455 = add nsw i64 %454, 1
  store i64 %455, ptr %21, align 8, !tbaa !9
  %456 = load ptr, ptr %12, align 8, !tbaa !5
  %457 = load i64, ptr %28, align 8, !tbaa !9
  %458 = load i64, ptr %30, align 8, !tbaa !9
  %459 = load i64, ptr %18, align 8, !tbaa !9
  %460 = mul nsw i64 %458, %459
  %461 = add nsw i64 %457, %460
  %462 = getelementptr inbounds %struct.doublecomplex, ptr %456, i64 %461
  %463 = load ptr, ptr %13, align 8, !tbaa !5
  %464 = call i64 @f2c_izamax(ptr noundef %21, ptr noundef %462, ptr noundef %463)
  store i64 %464, ptr %38, align 8, !tbaa !9
  %465 = load ptr, ptr %12, align 8, !tbaa !5
  %466 = load i64, ptr %28, align 8, !tbaa !9
  %467 = load i64, ptr %38, align 8, !tbaa !9
  %468 = load i64, ptr %30, align 8, !tbaa !9
  %469 = add nsw i64 %467, %468
  %470 = sub nsw i64 %469, 1
  %471 = load i64, ptr %18, align 8, !tbaa !9
  %472 = mul nsw i64 %470, %471
  %473 = add nsw i64 %466, %472
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %465, i64 %473
  %475 = call double @z_abs(ptr noundef %474)
  store double %475, ptr %36, align 8, !tbaa !11
  %476 = load double, ptr %25, align 8, !tbaa !11
  %477 = fcmp oeq double %476, 0.000000e+00
  br i1 %477, label %481, label %478

478:                                              ; preds = %435
  %479 = load double, ptr %33, align 8, !tbaa !11
  %480 = fcmp oeq double %479, 0.000000e+00
  br i1 %480, label %481, label %482

481:                                              ; preds = %478, %435
  br label %689

482:                                              ; preds = %478
  %483 = load double, ptr %33, align 8, !tbaa !11
  %484 = fdiv double %483, 2.000000e+00
  store double %484, ptr %27, align 8, !tbaa !11
  store double 1.000000e+00, ptr %26, align 8, !tbaa !11
  %485 = load double, ptr %25, align 8, !tbaa !11
  %486 = load double, ptr %33, align 8, !tbaa !11
  %487 = fadd double %485, %486
  store double %487, ptr %34, align 8, !tbaa !11
  br label %488

488:                                              ; preds = %535, %482
  %489 = load double, ptr %26, align 8, !tbaa !11
  %490 = load double, ptr %25, align 8, !tbaa !11
  %491 = fcmp oge double %489, %490
  br i1 %491, label %492, label %494

492:                                              ; preds = %488
  %493 = load double, ptr %26, align 8, !tbaa !11
  br label %496

494:                                              ; preds = %488
  %495 = load double, ptr %25, align 8, !tbaa !11
  br label %496

496:                                              ; preds = %494, %492
  %497 = phi double [ %493, %492 ], [ %495, %494 ]
  store double %497, ptr %23, align 8, !tbaa !11
  %498 = load double, ptr %33, align 8, !tbaa !11
  %499 = load double, ptr %27, align 8, !tbaa !11
  %500 = fcmp ole double %498, %499
  br i1 %500, label %501, label %503

501:                                              ; preds = %496
  %502 = load double, ptr %33, align 8, !tbaa !11
  br label %505

503:                                              ; preds = %496
  %504 = load double, ptr %27, align 8, !tbaa !11
  br label %505

505:                                              ; preds = %503, %501
  %506 = phi double [ %502, %501 ], [ %504, %503 ]
  store double %506, ptr %24, align 8, !tbaa !11
  %507 = load double, ptr %25, align 8, !tbaa !11
  %508 = load double, ptr %27, align 8, !tbaa !11
  %509 = fcmp oge double %507, %508
  br i1 %509, label %534, label %510

510:                                              ; preds = %505
  %511 = load double, ptr %23, align 8, !tbaa !11
  %512 = load double, ptr %35, align 8, !tbaa !11
  %513 = fcmp oge double %511, %512
  br i1 %513, label %514, label %516

514:                                              ; preds = %510
  %515 = load double, ptr %23, align 8, !tbaa !11
  br label %518

516:                                              ; preds = %510
  %517 = load double, ptr %35, align 8, !tbaa !11
  br label %518

518:                                              ; preds = %516, %514
  %519 = phi double [ %515, %514 ], [ %517, %516 ]
  %520 = load double, ptr %43, align 8, !tbaa !11
  %521 = fcmp oge double %519, %520
  br i1 %521, label %534, label %522

522:                                              ; preds = %518
  %523 = load double, ptr %24, align 8, !tbaa !11
  %524 = load double, ptr %36, align 8, !tbaa !11
  %525 = fcmp ole double %523, %524
  br i1 %525, label %526, label %528

526:                                              ; preds = %522
  %527 = load double, ptr %24, align 8, !tbaa !11
  br label %530

528:                                              ; preds = %522
  %529 = load double, ptr %36, align 8, !tbaa !11
  br label %530

530:                                              ; preds = %528, %526
  %531 = phi double [ %527, %526 ], [ %529, %528 ]
  %532 = load double, ptr %41, align 8, !tbaa !11
  %533 = fcmp ole double %531, %532
  br i1 %533, label %534, label %535

534:                                              ; preds = %530, %518, %505
  br label %548

535:                                              ; preds = %530
  %536 = load double, ptr %26, align 8, !tbaa !11
  %537 = fmul double %536, 2.000000e+00
  store double %537, ptr %26, align 8, !tbaa !11
  %538 = load double, ptr %25, align 8, !tbaa !11
  %539 = fmul double %538, 2.000000e+00
  store double %539, ptr %25, align 8, !tbaa !11
  %540 = load double, ptr %35, align 8, !tbaa !11
  %541 = fmul double %540, 2.000000e+00
  store double %541, ptr %35, align 8, !tbaa !11
  %542 = load double, ptr %33, align 8, !tbaa !11
  %543 = fdiv double %542, 2.000000e+00
  store double %543, ptr %33, align 8, !tbaa !11
  %544 = load double, ptr %27, align 8, !tbaa !11
  %545 = fdiv double %544, 2.000000e+00
  store double %545, ptr %27, align 8, !tbaa !11
  %546 = load double, ptr %36, align 8, !tbaa !11
  %547 = fdiv double %546, 2.000000e+00
  store double %547, ptr %36, align 8, !tbaa !11
  br label %488

548:                                              ; preds = %534
  %549 = load double, ptr %25, align 8, !tbaa !11
  %550 = fdiv double %549, 2.000000e+00
  store double %550, ptr %27, align 8, !tbaa !11
  br label %551

551:                                              ; preds = %598, %548
  %552 = load double, ptr %26, align 8, !tbaa !11
  %553 = load double, ptr %25, align 8, !tbaa !11
  %554 = fcmp ole double %552, %553
  br i1 %554, label %555, label %557

555:                                              ; preds = %551
  %556 = load double, ptr %26, align 8, !tbaa !11
  br label %559

557:                                              ; preds = %551
  %558 = load double, ptr %25, align 8, !tbaa !11
  br label %559

559:                                              ; preds = %557, %555
  %560 = phi double [ %556, %555 ], [ %558, %557 ]
  store double %560, ptr %23, align 8, !tbaa !11
  %561 = load double, ptr %23, align 8, !tbaa !11
  %562 = load double, ptr %27, align 8, !tbaa !11
  %563 = fcmp ole double %561, %562
  br i1 %563, label %564, label %566

564:                                              ; preds = %559
  %565 = load double, ptr %23, align 8, !tbaa !11
  br label %568

566:                                              ; preds = %559
  %567 = load double, ptr %27, align 8, !tbaa !11
  br label %568

568:                                              ; preds = %566, %564
  %569 = phi double [ %565, %564 ], [ %567, %566 ]
  store double %569, ptr %23, align 8, !tbaa !11
  %570 = load double, ptr %27, align 8, !tbaa !11
  %571 = load double, ptr %33, align 8, !tbaa !11
  %572 = fcmp olt double %570, %571
  br i1 %572, label %597, label %573

573:                                              ; preds = %568
  %574 = load double, ptr %33, align 8, !tbaa !11
  %575 = load double, ptr %36, align 8, !tbaa !11
  %576 = fcmp oge double %574, %575
  br i1 %576, label %577, label %579

577:                                              ; preds = %573
  %578 = load double, ptr %33, align 8, !tbaa !11
  br label %581

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

581:                                              ; preds = %579, %577
  %582 = phi double [ %578, %577 ], [ %580, %579 ]
  %583 = load double, ptr %43, align 8, !tbaa !11
  %584 = fcmp oge double %582, %583
  br i1 %584, label %597, label %585

585:                                              ; preds = %581
  %586 = load double, ptr %23, align 8, !tbaa !11
  %587 = load double, ptr %35, align 8, !tbaa !11
  %588 = fcmp ole double %586, %587
  br i1 %588, label %589, label %591

589:                                              ; preds = %585
  %590 = load double, ptr %23, align 8, !tbaa !11
  br label %593

591:                                              ; preds = %585
  %592 = load double, ptr %35, align 8, !tbaa !11
  br label %593

593:                                              ; preds = %591, %589
  %594 = phi double [ %590, %589 ], [ %592, %591 ]
  %595 = load double, ptr %41, align 8, !tbaa !11
  %596 = fcmp ole double %594, %595
  br i1 %596, label %597, label %598

597:                                              ; preds = %593, %581, %568
  br label %611

598:                                              ; preds = %593
  %599 = load double, ptr %26, align 8, !tbaa !11
  %600 = fdiv double %599, 2.000000e+00
  store double %600, ptr %26, align 8, !tbaa !11
  %601 = load double, ptr %25, align 8, !tbaa !11
  %602 = fdiv double %601, 2.000000e+00
  store double %602, ptr %25, align 8, !tbaa !11
  %603 = load double, ptr %27, align 8, !tbaa !11
  %604 = fdiv double %603, 2.000000e+00
  store double %604, ptr %27, align 8, !tbaa !11
  %605 = load double, ptr %35, align 8, !tbaa !11
  %606 = fdiv double %605, 2.000000e+00
  store double %606, ptr %35, align 8, !tbaa !11
  %607 = load double, ptr %33, align 8, !tbaa !11
  %608 = fmul double %607, 2.000000e+00
  store double %608, ptr %33, align 8, !tbaa !11
  %609 = load double, ptr %36, align 8, !tbaa !11
  %610 = fmul double %609, 2.000000e+00
  store double %610, ptr %36, align 8, !tbaa !11
  br label %551

611:                                              ; preds = %597
  %612 = load double, ptr %25, align 8, !tbaa !11
  %613 = load double, ptr %33, align 8, !tbaa !11
  %614 = fadd double %612, %613
  %615 = load double, ptr %34, align 8, !tbaa !11
  %616 = fmul double %615, 0x3FEE666666666666
  %617 = fcmp oge double %614, %616
  br i1 %617, label %618, label %619

618:                                              ; preds = %611
  br label %689

619:                                              ; preds = %611
  %620 = load double, ptr %26, align 8, !tbaa !11
  %621 = fcmp olt double %620, 1.000000e+00
  br i1 %621, label %622, label %639

622:                                              ; preds = %619
  %623 = load ptr, ptr %16, align 8, !tbaa !5
  %624 = load i64, ptr %28, align 8, !tbaa !9
  %625 = getelementptr inbounds double, ptr %623, i64 %624
  %626 = load double, ptr %625, align 8, !tbaa !11
  %627 = fcmp olt double %626, 1.000000e+00
  br i1 %627, label %628, label %639

628:                                              ; preds = %622
  %629 = load double, ptr %26, align 8, !tbaa !11
  %630 = load ptr, ptr %16, align 8, !tbaa !5
  %631 = load i64, ptr %28, align 8, !tbaa !9
  %632 = getelementptr inbounds double, ptr %630, i64 %631
  %633 = load double, ptr %632, align 8, !tbaa !11
  %634 = fmul double %629, %633
  %635 = load double, ptr %40, align 8, !tbaa !11
  %636 = fcmp ole double %634, %635
  br i1 %636, label %637, label %638

637:                                              ; preds = %628
  br label %689

638:                                              ; preds = %628
  br label %639

639:                                              ; preds = %638, %622, %619
  %640 = load double, ptr %26, align 8, !tbaa !11
  %641 = fcmp ogt double %640, 1.000000e+00
  br i1 %641, label %642, label %659

642:                                              ; preds = %639
  %643 = load ptr, ptr %16, align 8, !tbaa !5
  %644 = load i64, ptr %28, align 8, !tbaa !9
  %645 = getelementptr inbounds double, ptr %643, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !11
  %647 = fcmp ogt double %646, 1.000000e+00
  br i1 %647, label %648, label %659

648:                                              ; preds = %642
  %649 = load ptr, ptr %16, align 8, !tbaa !5
  %650 = load i64, ptr %28, align 8, !tbaa !9
  %651 = getelementptr inbounds double, ptr %649, i64 %650
  %652 = load double, ptr %651, align 8, !tbaa !11
  %653 = load double, ptr %42, align 8, !tbaa !11
  %654 = load double, ptr %26, align 8, !tbaa !11
  %655 = fdiv double %653, %654
  %656 = fcmp oge double %652, %655
  br i1 %656, label %657, label %658

657:                                              ; preds = %648
  br label %689

658:                                              ; preds = %648
  br label %659

659:                                              ; preds = %658, %642, %639
  %660 = load double, ptr %26, align 8, !tbaa !11
  %661 = fdiv double 1.000000e+00, %660
  store double %661, ptr %27, align 8, !tbaa !11
  %662 = load double, ptr %26, align 8, !tbaa !11
  %663 = load ptr, ptr %16, align 8, !tbaa !5
  %664 = load i64, ptr %28, align 8, !tbaa !9
  %665 = getelementptr inbounds double, ptr %663, i64 %664
  %666 = load double, ptr %665, align 8, !tbaa !11
  %667 = fmul double %666, %662
  store double %667, ptr %665, align 8, !tbaa !11
  store i64 1, ptr %44, align 8, !tbaa !9
  %668 = load ptr, ptr %11, align 8, !tbaa !5
  %669 = load i64, ptr %668, align 8, !tbaa !9
  %670 = load i64, ptr %30, align 8, !tbaa !9
  %671 = sub nsw i64 %669, %670
  %672 = add nsw i64 %671, 1
  store i64 %672, ptr %21, align 8, !tbaa !9
  %673 = load ptr, ptr %12, align 8, !tbaa !5
  %674 = load i64, ptr %28, align 8, !tbaa !9
  %675 = load i64, ptr %30, align 8, !tbaa !9
  %676 = load i64, ptr %18, align 8, !tbaa !9
  %677 = mul nsw i64 %675, %676
  %678 = add nsw i64 %674, %677
  %679 = getelementptr inbounds %struct.doublecomplex, ptr %673, i64 %678
  %680 = load ptr, ptr %13, align 8, !tbaa !5
  %681 = call i32 @f2c_zdscal(ptr noundef %21, ptr noundef %27, ptr noundef %679, ptr noundef %680)
  %682 = load ptr, ptr %12, align 8, !tbaa !5
  %683 = load i64, ptr %28, align 8, !tbaa !9
  %684 = load i64, ptr %18, align 8, !tbaa !9
  %685 = mul nsw i64 %683, %684
  %686 = add nsw i64 %685, 1
  %687 = getelementptr inbounds %struct.doublecomplex, ptr %682, i64 %686
  %688 = call i32 @f2c_zdscal(ptr noundef %31, ptr noundef %26, ptr noundef %687, ptr noundef @c__1)
  br label %689

689:                                              ; preds = %659, %657, %637, %618, %481
  br label %690

690:                                              ; preds = %689
  %691 = load i64, ptr %28, align 8, !tbaa !9
  %692 = add nsw i64 %691, 1
  store i64 %692, ptr %28, align 8, !tbaa !9
  br label %336, !llvm.loop !23

693:                                              ; preds = %336
  %694 = load i64, ptr %44, align 8, !tbaa !9
  %695 = icmp ne i64 %694, 0
  br i1 %695, label %696, label %697

696:                                              ; preds = %693
  br label %333

697:                                              ; preds = %693
  br label %698

698:                                              ; preds = %697, %322, %192, %131, %112
  %699 = load i64, ptr %30, align 8, !tbaa !9
  %700 = load ptr, ptr %14, align 8, !tbaa !5
  store i64 %699, ptr %700, align 8, !tbaa !9
  %701 = load i64, ptr %31, align 8, !tbaa !9
  %702 = load ptr, ptr %15, align 8, !tbaa !5
  store i64 %701, ptr %702, align 8, !tbaa !9
  store i32 0, ptr %9, align 4
  store i32 1, ptr %45, align 4
  br label %703

703:                                              ; preds = %698, %101
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  %704 = load i32, ptr %9, align 4
  ret i32 %704
}

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

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

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

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

declare double @d_imag(ptr noundef) #2

declare double @dlamch_(ptr noundef) #2

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

declare double @z_abs(ptr noundef) #2

declare i32 @f2c_zdscal(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 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !12, i64 0}
!16 = !{!"", !12, i64 0, !12, i64 8}
!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}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i64, align 8

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

19:                                               ; preds = %8
  %20 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %.not260 = icmp eq i64 %20, 0
  br i1 %.not260, label %21, label %25

21:                                               ; preds = %19
  %22 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not261 = icmp eq i64 %22, 0
  br i1 %.not261, label %23, label %25

23:                                               ; preds = %21
  %24 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.3) #4
  %.not262 = icmp eq i64 %24, 0
  br i1 %.not262, label %.thread.sink.split, label %25

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

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

31:                                               ; preds = %28
  %.pr = load i64, ptr %7, align 8, !tbaa !5
  %.not263 = icmp eq i64 %.pr, 0
  br i1 %.not263, label %35, label %.thread

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

.thread:                                          ; preds = %.thread.sink.split, %31
  %32 = phi i64 [ %.pr, %31 ], [ %.sink, %.thread.sink.split ]
  %33 = sub nsw i64 0, %32
  store i64 %33, ptr %9, align 8, !tbaa !5
  %34 = call i32 @xerbla_(ptr noundef nonnull @.str.4, ptr noundef nonnull %9) #4
  br label %279

35:                                               ; preds = %31
  store i64 %26, ptr %13, align 8, !tbaa !5
  %36 = icmp eq i64 %26, 0
  br i1 %36, label %.loopexit, label %37

37:                                               ; preds = %35
  %38 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %.not264 = icmp eq i64 %38, 0
  br i1 %.not264, label %46, label %39

39:                                               ; preds = %37
  %40 = load i64, ptr %1, align 8, !tbaa !5
  %.not274287 = icmp slt i64 %40, 1
  br i1 %.not274287, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %39
  %min.iters.check = icmp ult i64 %40, 4
  br i1 %min.iters.check, label %.lr.ph.preheader475, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %40, 9223372036854775804
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %41 = getelementptr double, ptr %6, i64 %index
  %42 = getelementptr inbounds i8, ptr %41, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %41, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %42, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %43 = icmp eq i64 %index.next, %n.vec
  br i1 %43, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %40, %n.vec
  br i1 %cmp.n, label %.loopexit, label %.lr.ph.preheader475

.lr.ph.preheader475:                              ; preds = %middle.block, %.lr.ph.preheader
  %.0248288.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader475, %.lr.ph
  %.0248288 = phi i64 [ %45, %.lr.ph ], [ %.0248288.ph, %.lr.ph.preheader475 ]
  %44 = getelementptr inbounds double, ptr %17, i64 %.0248288
  store double 1.000000e+00, ptr %44, align 8, !tbaa !9
  %45 = add nuw i64 %.0248288, 1
  %exitcond.not = icmp eq i64 %.0248288, %40
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph, !llvm.loop !15

46:                                               ; preds = %37
  %47 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not265 = icmp eq i64 %47, 0
  br i1 %.not265, label %.preheader, label %.loopexit281

.preheader:                                       ; preds = %46
  %invariant.gep311 = getelementptr i8, ptr %16, i64 16
  br label %69

.loopexit280:                                     ; preds = %.lr.ph296, %.lr.ph307, %102, %._crit_edge.loopexit
  %.0244 = phi i64 [ %.1245294, %._crit_edge.loopexit ], [ %.2246305, %102 ], [ %.2246305, %.lr.ph307 ], [ %.1245294, %.lr.ph296 ]
  %.0240 = phi i64 [ %.1241, %._crit_edge.loopexit ], [ %.2242, %102 ], [ %.2242, %.lr.ph307 ], [ %.1241, %.lr.ph296 ]
  %.0239 = phi i64 [ %.pre398, %._crit_edge.loopexit ], [ %.2242, %102 ], [ %.2242, %.lr.ph307 ], [ %72, %.lr.ph296 ]
  %cond = phi i1 [ false, %._crit_edge.loopexit ], [ true, %102 ], [ true, %.lr.ph307 ], [ false, %.lr.ph296 ]
  %48 = sitofp i64 %.0244 to double
  %49 = getelementptr inbounds double, ptr %17, i64 %.0239
  store double %48, ptr %49, align 8, !tbaa !9
  %50 = icmp eq i64 %.0244, %.0239
  br i1 %50, label %63, label %51

51:                                               ; preds = %.loopexit280
  %52 = mul nsw i64 %.0244, %14
  %gep312 = getelementptr %struct.doublecomplex, ptr %invariant.gep311, i64 %52
  %53 = mul nsw i64 %.0239, %14
  %gep314 = getelementptr %struct.doublecomplex, ptr %invariant.gep311, i64 %53
  %54 = call i32 @f2c_zswap(ptr noundef nonnull %13, ptr noundef %gep312, ptr noundef nonnull @c__1, ptr noundef %gep314, ptr noundef nonnull @c__1) #4
  %55 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub = sub i64 %55, %.0240
  %56 = add i64 %reass.sub, 1
  store i64 %56, ptr %9, align 8, !tbaa !5
  %57 = mul nsw i64 %.0240, %14
  %58 = getelementptr %struct.doublecomplex, ptr %16, i64 %.0244
  %59 = getelementptr %struct.doublecomplex, ptr %58, i64 %57
  %60 = getelementptr %struct.doublecomplex, ptr %16, i64 %.0239
  %61 = getelementptr %struct.doublecomplex, ptr %60, i64 %57
  %62 = call i32 @f2c_zswap(ptr noundef nonnull %9, ptr noundef %59, ptr noundef nonnull %3, ptr noundef %61, ptr noundef nonnull %3) #4
  br label %63

63:                                               ; preds = %.loopexit280, %51
  br i1 %cond, label %88, label %64

64:                                               ; preds = %63
  %65 = load i64, ptr %13, align 8, !tbaa !5
  %66 = icmp eq i64 %65, 1
  br i1 %66, label %.loopexit, label %67

67:                                               ; preds = %64
  %68 = add nsw i64 %65, -1
  store i64 %68, ptr %13, align 8, !tbaa !5
  br label %69

69:                                               ; preds = %.preheader, %67
  %70 = phi i64 [ %68, %67 ], [ %26, %.preheader ]
  %.1241 = phi i64 [ %.0240, %67 ], [ 1, %.preheader ]
  %71 = icmp sgt i64 %70, 0
  br i1 %71, label %.lr.ph296, label %.loopexit282

.lr.ph296:                                        ; preds = %69, %85
  %.1245294 = phi i64 [ %86, %85 ], [ %70, %69 ]
  %72 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %72, ptr %9, align 8, !tbaa !5
  %.not266289 = icmp slt i64 %72, 1
  br i1 %.not266289, label %.loopexit280, label %.lr.ph291.preheader

.lr.ph291.preheader:                              ; preds = %.lr.ph296
  %invariant.gep488 = getelementptr %struct.doublecomplex, ptr %16, i64 %.1245294
  br label %.lr.ph291

.lr.ph291:                                        ; preds = %.lr.ph291.preheader, %82
  %73 = phi i64 [ %83, %82 ], [ %72, %.lr.ph291.preheader ]
  %.1249290 = phi i64 [ %84, %82 ], [ 1, %.lr.ph291.preheader ]
  %74 = icmp eq i64 %.1249290, %.1245294
  br i1 %74, label %82, label %75

75:                                               ; preds = %.lr.ph291
  %76 = mul nsw i64 %.1249290, %14
  %gep489 = getelementptr %struct.doublecomplex, ptr %invariant.gep488, i64 %76
  %77 = load double, ptr %gep489, align 8, !tbaa !16
  %78 = fcmp une double %77, 0.000000e+00
  br i1 %78, label %85, label %79

79:                                               ; preds = %75
  %80 = call double @d_imag(ptr noundef nonnull %gep489) #4
  %81 = fcmp une double %80, 0.000000e+00
  br i1 %81, label %85, label %._crit_edge397

._crit_edge397:                                   ; preds = %79
  %.pre = load i64, ptr %9, align 8, !tbaa !5
  br label %82

82:                                               ; preds = %._crit_edge397, %.lr.ph291
  %83 = phi i64 [ %.pre, %._crit_edge397 ], [ %73, %.lr.ph291 ]
  %84 = add nuw nsw i64 %.1249290, 1
  %.not266.not = icmp slt i64 %.1249290, %83
  br i1 %.not266.not, label %.lr.ph291, label %._crit_edge.loopexit, !llvm.loop !18

._crit_edge.loopexit:                             ; preds = %82
  %.pre398 = load i64, ptr %13, align 8, !tbaa !5
  br label %.loopexit280

85:                                               ; preds = %79, %75
  %86 = add nsw i64 %.1245294, -1
  %87 = icmp sgt i64 %.1245294, 1
  br i1 %87, label %.lr.ph296, label %.loopexit282, !llvm.loop !19

88:                                               ; preds = %63
  %89 = add nsw i64 %.0240, 1
  br label %.loopexit282

.loopexit282:                                     ; preds = %85, %69, %88
  %.2242 = phi i64 [ %89, %88 ], [ %.1241, %69 ], [ %.1241, %85 ]
  %90 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %90, ptr %9, align 8, !tbaa !5
  %.not267304 = icmp sgt i64 %.2242, %90
  br i1 %.not267304, label %.loopexit281, label %.lr.ph307

.lr.ph307:                                        ; preds = %.loopexit282, %105
  %.2246305 = phi i64 [ %106, %105 ], [ %.2242, %.loopexit282 ]
  %91 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %91, ptr %10, align 8, !tbaa !5
  %.not268297 = icmp sgt i64 %.2242, %91
  br i1 %.not268297, label %.loopexit280, label %.lr.ph300

.lr.ph300:                                        ; preds = %.lr.ph307
  %92 = mul nsw i64 %.2246305, %14
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %16, i64 %92
  br label %93

93:                                               ; preds = %.lr.ph300, %102
  %94 = phi i64 [ %91, %.lr.ph300 ], [ %103, %102 ]
  %.2250298 = phi i64 [ %.2242, %.lr.ph300 ], [ %104, %102 ]
  %95 = icmp eq i64 %.2250298, %.2246305
  br i1 %95, label %102, label %96

96:                                               ; preds = %93
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.2250298
  %97 = load double, ptr %gep, align 8, !tbaa !16
  %98 = fcmp une double %97, 0.000000e+00
  br i1 %98, label %105, label %99

99:                                               ; preds = %96
  %100 = call double @d_imag(ptr noundef nonnull %gep) #4
  %101 = fcmp une double %100, 0.000000e+00
  br i1 %101, label %105, label %._crit_edge399

._crit_edge399:                                   ; preds = %99
  %.pre400 = load i64, ptr %10, align 8, !tbaa !5
  br label %102

102:                                              ; preds = %._crit_edge399, %93
  %103 = phi i64 [ %.pre400, %._crit_edge399 ], [ %94, %93 ]
  %104 = add nsw i64 %.2250298, 1
  %.not268.not = icmp slt i64 %.2250298, %103
  br i1 %.not268.not, label %93, label %.loopexit280, !llvm.loop !20

105:                                              ; preds = %99, %96
  %106 = add nsw i64 %.2246305, 1
  %107 = load i64, ptr %9, align 8, !tbaa !5
  %.not267.not = icmp slt i64 %.2246305, %107
  br i1 %.not267.not, label %.lr.ph307, label %.loopexit281.loopexit, !llvm.loop !21

.loopexit281.loopexit:                            ; preds = %105
  %.pre401 = load i64, ptr %13, align 8, !tbaa !5
  br label %.loopexit281

.loopexit281:                                     ; preds = %.loopexit282, %.loopexit281.loopexit, %46
  %108 = phi i64 [ %26, %46 ], [ %.pre401, %.loopexit281.loopexit ], [ %90, %.loopexit282 ]
  %.3243 = phi i64 [ 1, %46 ], [ %.2242, %.loopexit281.loopexit ], [ %.2242, %.loopexit282 ]
  store i64 %108, ptr %9, align 8, !tbaa !5
  %.not269315 = icmp sgt i64 %.3243, %108
  br i1 %.not269315, label %._crit_edge319, label %.lr.ph318.preheader

.lr.ph318.preheader:                              ; preds = %.loopexit281
  %109 = add i64 %108, 1
  %110 = sub i64 %109, %.3243
  %min.iters.check446 = icmp ult i64 %110, 4
  br i1 %min.iters.check446, label %.lr.ph318.preheader460, label %vector.ph447

vector.ph447:                                     ; preds = %.lr.ph318.preheader
  %n.vec449 = and i64 %110, -4
  %ind.end450 = add i64 %.3243, %n.vec449
  %111 = getelementptr double, ptr %17, i64 %.3243
  br label %vector.body452

vector.body452:                                   ; preds = %vector.body452, %vector.ph447
  %index453 = phi i64 [ 0, %vector.ph447 ], [ %index.next455, %vector.body452 ]
  %112 = getelementptr double, ptr %111, i64 %index453
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %112, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %113, align 8, !tbaa !9
  %index.next455 = add nuw i64 %index453, 4
  %114 = icmp eq i64 %index.next455, %n.vec449
  br i1 %114, label %middle.block444, label %vector.body452, !llvm.loop !22

middle.block444:                                  ; preds = %vector.body452
  %cmp.n456 = icmp eq i64 %110, %n.vec449
  br i1 %cmp.n456, label %._crit_edge319, label %.lr.ph318.preheader460

.lr.ph318.preheader460:                           ; preds = %middle.block444, %.lr.ph318.preheader
  %.3251316.ph = phi i64 [ %.3243, %.lr.ph318.preheader ], [ %ind.end450, %middle.block444 ]
  br label %.lr.ph318

.lr.ph318:                                        ; preds = %.lr.ph318.preheader460, %.lr.ph318
  %.3251316 = phi i64 [ %116, %.lr.ph318 ], [ %.3251316.ph, %.lr.ph318.preheader460 ]
  %115 = getelementptr inbounds double, ptr %17, i64 %.3251316
  store double 1.000000e+00, ptr %115, align 8, !tbaa !9
  %116 = add i64 %.3251316, 1
  %exitcond396.not = icmp eq i64 %.3251316, %108
  br i1 %exitcond396.not, label %._crit_edge319, label %.lr.ph318, !llvm.loop !23

._crit_edge319:                                   ; preds = %.lr.ph318, %middle.block444, %.loopexit281
  %117 = call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %.not270 = icmp eq i64 %117, 0
  br i1 %.not270, label %118, label %.loopexit

118:                                              ; preds = %._crit_edge319
  %119 = call double @dlamch_(ptr noundef nonnull @.str.2) #4
  %120 = call double @dlamch_(ptr noundef nonnull @.str.1) #4
  %121 = fdiv double %119, %120
  %122 = fdiv double 1.000000e+00, %121
  %123 = fmul double %121, 2.000000e+00
  %124 = fdiv double 1.000000e+00, %123
  %invariant.gep373 = getelementptr i8, ptr %16, i64 16
  %125 = mul nsw i64 %.3243, %14
  %126 = add i64 %.3243, -1
  br label %127

127:                                              ; preds = %._crit_edge380, %118
  %128 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %128, ptr %9, align 8, !tbaa !5
  %.not271375 = icmp sgt i64 %.3243, %128
  br i1 %.not271375, label %.loopexit, label %.lr.ph379

.lr.ph379:                                        ; preds = %127, %275
  %.0377 = phi i64 [ %.1, %275 ], [ 0, %127 ]
  %.4252376 = phi i64 [ %276, %275 ], [ %.3243, %127 ]
  %129 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %129, ptr %10, align 8, !tbaa !5
  %.not273320 = icmp sgt i64 %.3243, %129
  %.pre407 = mul nsw i64 %.4252376, %14
  br i1 %.not273320, label %._crit_edge326, label %.lr.ph325

.lr.ph325:                                        ; preds = %.lr.ph379
  %invariant.gep329 = getelementptr %struct.doublecomplex, ptr %16, i64 %.pre407
  %130 = getelementptr %struct.doublecomplex, ptr %16, i64 %.4252376
  br label %131

131:                                              ; preds = %.lr.ph325, %154
  %132 = phi i64 [ %129, %.lr.ph325 ], [ %155, %154 ]
  %.3247321 = phi i64 [ %.3243, %.lr.ph325 ], [ %157, %154 ]
  %133 = phi <2 x double> [ zeroinitializer, %.lr.ph325 ], [ %156, %154 ]
  %134 = icmp eq i64 %.3247321, %.4252376
  br i1 %134, label %154, label %135

135:                                              ; preds = %131
  %gep330 = getelementptr %struct.doublecomplex, ptr %invariant.gep329, i64 %.3247321
  %136 = load double, ptr %gep330, align 8, !tbaa !16
  %137 = call double @d_imag(ptr noundef nonnull %gep330) #4
  %138 = mul nsw i64 %.3247321, %14
  %139 = getelementptr %struct.doublecomplex, ptr %130, i64 %138
  %140 = load double, ptr %139, align 8, !tbaa !16
  %141 = call double @d_imag(ptr noundef nonnull %139) #4
  %142 = insertelement <2 x double> poison, double %140, i64 0
  %143 = insertelement <2 x double> %142, double %136, i64 1
  %144 = fcmp oge <2 x double> %143, zeroinitializer
  %145 = fneg <2 x double> %143
  %146 = select <2 x i1> %144, <2 x double> %143, <2 x double> %145
  %147 = insertelement <2 x double> poison, double %141, i64 0
  %148 = insertelement <2 x double> %147, double %137, i64 1
  %149 = fcmp oge <2 x double> %148, zeroinitializer
  %150 = fneg <2 x double> %148
  %151 = select <2 x i1> %149, <2 x double> %148, <2 x double> %150
  %152 = fadd <2 x double> %146, %151
  %153 = fadd <2 x double> %133, %152
  %.pre402 = load i64, ptr %10, align 8, !tbaa !5
  br label %154

154:                                              ; preds = %135, %131
  %155 = phi i64 [ %132, %131 ], [ %.pre402, %135 ]
  %156 = phi <2 x double> [ %133, %131 ], [ %153, %135 ]
  %157 = add nsw i64 %.3247321, 1
  %.not273.not = icmp slt i64 %.3247321, %155
  br i1 %.not273.not, label %131, label %._crit_edge326, !llvm.loop !24

._crit_edge326:                                   ; preds = %154, %.lr.ph379
  %158 = phi <2 x double> [ zeroinitializer, %.lr.ph379 ], [ %156, %154 ]
  %gep374 = getelementptr %struct.doublecomplex, ptr %invariant.gep373, i64 %.pre407
  %159 = call i64 @f2c_izamax(ptr noundef nonnull %13, ptr noundef %gep374, ptr noundef nonnull @c__1) #4
  %160 = getelementptr %struct.doublecomplex, ptr %16, i64 %159
  %161 = getelementptr %struct.doublecomplex, ptr %160, i64 %.pre407
  %162 = call double @z_abs(ptr noundef %161) #4
  %163 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub382 = sub i64 %163, %.3243
  %164 = add i64 %reass.sub382, 1
  store i64 %164, ptr %10, align 8, !tbaa !5
  %165 = getelementptr %struct.doublecomplex, ptr %16, i64 %.4252376
  %166 = getelementptr %struct.doublecomplex, ptr %165, i64 %125
  %167 = call i64 @f2c_izamax(ptr noundef nonnull %10, ptr noundef %166, ptr noundef nonnull %3) #4
  %168 = add i64 %126, %167
  %169 = mul nsw i64 %168, %14
  %170 = getelementptr %struct.doublecomplex, ptr %165, i64 %169
  %171 = call double @z_abs(ptr noundef %170) #4
  %172 = extractelement <2 x double> %158, i64 1
  %173 = fcmp oeq double %172, 0.000000e+00
  %174 = extractelement <2 x double> %158, i64 0
  %175 = fcmp oeq double %174, 0.000000e+00
  %or.cond = select i1 %173, i1 true, i1 %175
  br i1 %or.cond, label %275, label %176

176:                                              ; preds = %._crit_edge326
  %177 = fmul double %174, 5.000000e-01
  store double 1.000000e+00, ptr %11, align 8, !tbaa !9
  %178 = fadd double %174, %172
  %179 = fcmp ult double %172, %177
  %180 = insertelement <2 x double> poison, double %171, i64 0
  %181 = insertelement <2 x double> %180, double %162, i64 1
  br i1 %179, label %.lr.ph337.preheader, label %._crit_edge338

.lr.ph337.preheader:                              ; preds = %176
  %182 = fcmp ole double %174, %177
  %183 = select i1 %182, double %174, double %177
  br label %.lr.ph337

.lr.ph337:                                        ; preds = %.lr.ph337.preheader, %200
  %184 = phi double [ %207, %200 ], [ %183, %.lr.ph337.preheader ]
  %185 = phi double [ %201, %200 ], [ 1.000000e+00, %.lr.ph337.preheader ]
  %186 = phi double [ %203, %200 ], [ %177, %.lr.ph337.preheader ]
  %187 = phi <2 x double> [ %202, %200 ], [ %158, %.lr.ph337.preheader ]
  %188 = phi <2 x double> [ %204, %200 ], [ %181, %.lr.ph337.preheader ]
  %189 = extractelement <2 x double> %187, i64 1
  %190 = fcmp oge double %185, %189
  %191 = select i1 %190, double %185, double %189
  %192 = extractelement <2 x double> %188, i64 1
  %193 = fcmp oge double %191, %192
  %194 = select i1 %193, double %191, double %192
  %195 = fcmp ult double %194, %124
  %196 = extractelement <2 x double> %188, i64 0
  %197 = fcmp ole double %184, %196
  %198 = select i1 %197, double %184, double %196
  %199 = fcmp ugt double %198, %123
  %or.cond493 = select i1 %195, i1 %199, i1 false
  br i1 %or.cond493, label %200, label %._crit_edge338

200:                                              ; preds = %.lr.ph337
  %201 = fmul double %185, 2.000000e+00
  store double %201, ptr %11, align 8, !tbaa !9
  %202 = fmul <2 x double> %187, <double 5.000000e-01, double 2.000000e+00>
  %203 = fmul double %186, 5.000000e-01
  %204 = fmul <2 x double> %188, <double 5.000000e-01, double 2.000000e+00>
  %205 = extractelement <2 x double> %202, i64 0
  %206 = fcmp ole double %205, %203
  %207 = select i1 %206, double %205, double %203
  %208 = extractelement <2 x double> %202, i64 1
  %209 = fcmp ult double %208, %203
  br i1 %209, label %.lr.ph337, label %._crit_edge338

._crit_edge338:                                   ; preds = %.lr.ph337, %200, %176
  %.promoted353 = phi double [ 1.000000e+00, %176 ], [ %201, %200 ], [ %185, %.lr.ph337 ]
  %210 = phi <2 x double> [ %158, %176 ], [ %202, %200 ], [ %187, %.lr.ph337 ]
  %211 = phi <2 x double> [ %181, %176 ], [ %204, %200 ], [ %188, %.lr.ph337 ]
  %212 = extractelement <2 x double> %210, i64 1
  %213 = fmul double %212, 5.000000e-01
  store double %213, ptr %12, align 8, !tbaa !9
  %214 = extractelement <2 x double> %210, i64 0
  %215 = fcmp olt double %213, %214
  br i1 %215, label %._crit_edge361, label %.lr.ph360.preheader

.lr.ph360.preheader:                              ; preds = %._crit_edge338
  %216 = fcmp ole double %.promoted353, %212
  %217 = select i1 %216, double %.promoted353, double %212
  %218 = fcmp ole double %217, %213
  %219 = select i1 %218, double %217, double %213
  br label %.lr.ph360

.lr.ph360:                                        ; preds = %.lr.ph360.preheader, %235
  %220 = phi double [ %244, %235 ], [ %219, %.lr.ph360.preheader ]
  %221 = phi double [ %236, %235 ], [ %.promoted353, %.lr.ph360.preheader ]
  %222 = phi double [ %238, %235 ], [ %213, %.lr.ph360.preheader ]
  %223 = phi <2 x double> [ %237, %235 ], [ %210, %.lr.ph360.preheader ]
  %224 = phi <2 x double> [ %239, %235 ], [ %211, %.lr.ph360.preheader ]
  %225 = extractelement <2 x double> %223, i64 0
  %226 = extractelement <2 x double> %224, i64 0
  %227 = fcmp oge double %225, %226
  %228 = select i1 %227, double %225, double %226
  %229 = fcmp ult double %228, %124
  br i1 %229, label %230, label %._crit_edge361

230:                                              ; preds = %.lr.ph360
  %231 = extractelement <2 x double> %224, i64 1
  %232 = fcmp ole double %220, %231
  %233 = select i1 %232, double %220, double %231
  %234 = fcmp ugt double %233, %123
  br i1 %234, label %235, label %._crit_edge361

235:                                              ; preds = %230
  %236 = fmul double %221, 5.000000e-01
  store double %236, ptr %11, align 8, !tbaa !9
  %237 = fmul <2 x double> %223, <double 2.000000e+00, double 5.000000e-01>
  %238 = fmul double %222, 5.000000e-01
  store double %238, ptr %12, align 8, !tbaa !9
  %239 = fmul <2 x double> %224, <double 2.000000e+00, double 5.000000e-01>
  %240 = extractelement <2 x double> %237, i64 1
  %241 = fcmp ole double %236, %240
  %242 = select i1 %241, double %236, double %240
  %243 = fcmp ole double %242, %238
  %244 = select i1 %243, double %242, double %238
  %245 = extractelement <2 x double> %237, i64 0
  %246 = fcmp olt double %238, %245
  br i1 %246, label %._crit_edge361, label %.lr.ph360

._crit_edge361:                                   ; preds = %230, %.lr.ph360, %235, %._crit_edge338
  %.lcssa = phi double [ %.promoted353, %._crit_edge338 ], [ %236, %235 ], [ %221, %.lr.ph360 ], [ %221, %230 ]
  %247 = phi <2 x double> [ %210, %._crit_edge338 ], [ %237, %235 ], [ %223, %.lr.ph360 ], [ %223, %230 ]
  %shift = shufflevector <2 x double> %247, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %248 = fadd <2 x double> %247, %shift
  %249 = extractelement <2 x double> %248, i64 0
  %250 = fmul double %178, 0x3FEE666666666666
  %251 = fcmp ult double %249, %250
  br i1 %251, label %252, label %275

252:                                              ; preds = %._crit_edge361
  %253 = fcmp olt double %.lcssa, 1.000000e+00
  br i1 %253, label %254, label %260

254:                                              ; preds = %252
  %255 = getelementptr inbounds double, ptr %17, i64 %.4252376
  %256 = load double, ptr %255, align 8, !tbaa !9
  %257 = fcmp uge double %256, 1.000000e+00
  %258 = fmul double %.lcssa, %256
  %259 = fcmp ugt double %258, %121
  %or.cond276 = select i1 %257, i1 true, i1 %259
  br i1 %or.cond276, label %260, label %275

260:                                              ; preds = %254, %252
  %261 = fcmp ogt double %.lcssa, 1.000000e+00
  %262 = getelementptr inbounds double, ptr %17, i64 %.4252376
  %263 = load double, ptr %262, align 8, !tbaa !9
  br i1 %261, label %264, label %._crit_edge405

264:                                              ; preds = %260
  %265 = fcmp ule double %263, 1.000000e+00
  %266 = fdiv double %122, %.lcssa
  %267 = fcmp ult double %263, %266
  %or.cond278 = select i1 %265, i1 true, i1 %267
  br i1 %or.cond278, label %._crit_edge405, label %275

._crit_edge405:                                   ; preds = %260, %264
  %268 = fdiv double 1.000000e+00, %.lcssa
  store double %268, ptr %12, align 8, !tbaa !9
  %269 = getelementptr inbounds double, ptr %17, i64 %.4252376
  %270 = fmul double %.lcssa, %263
  store double %270, ptr %269, align 8, !tbaa !9
  %271 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub383 = sub i64 %271, %.3243
  %272 = add i64 %reass.sub383, 1
  store i64 %272, ptr %10, align 8, !tbaa !5
  %273 = call i32 @f2c_zdscal(ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef %166, ptr noundef nonnull %3) #4
  %274 = call i32 @f2c_zdscal(ptr noundef nonnull %13, ptr noundef nonnull %11, ptr noundef %gep374, ptr noundef nonnull @c__1) #4
  br label %275

275:                                              ; preds = %264, %254, %._crit_edge405, %._crit_edge326, %._crit_edge361
  %.1 = phi i64 [ %.0377, %._crit_edge326 ], [ %.0377, %._crit_edge361 ], [ 1, %._crit_edge405 ], [ %.0377, %254 ], [ %.0377, %264 ]
  %276 = add nsw i64 %.4252376, 1
  %277 = load i64, ptr %9, align 8, !tbaa !5
  %.not271.not = icmp slt i64 %.4252376, %277
  br i1 %.not271.not, label %.lr.ph379, label %._crit_edge380, !llvm.loop !25

._crit_edge380:                                   ; preds = %275
  %.not272 = icmp eq i64 %.1, 0
  br i1 %.not272, label %.loopexit, label %127

.loopexit:                                        ; preds = %.lr.ph, %64, %127, %._crit_edge380, %middle.block, %39, %._crit_edge319, %35
  %.4 = phi i64 [ 1, %35 ], [ %.3243, %._crit_edge319 ], [ 1, %39 ], [ 1, %middle.block ], [ %.3243, %._crit_edge380 ], [ %.3243, %127 ], [ %.0240, %64 ], [ 1, %.lr.ph ]
  store i64 %.4, ptr %4, align 8, !tbaa !5
  %278 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %278, ptr %5, align 8, !tbaa !5
  br label %279

279:                                              ; preds = %.loopexit, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  ret i32 0
}

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

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

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

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

declare double @z_abs(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #3

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !14, !13}
!16 = !{!17, !10, i64 0}
!17 = !{!"", !10, i64 0, !10, i64 8}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12, !13, !14}
!23 = distinct !{!23, !12, !14, !13}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}


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