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

; 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 [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@c_false = external hidden global i64, align 8
@c_true = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @zhsein_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18) #0 {
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca %struct.doublecomplex, align 8
  %52 = alloca %struct.doublecomplex, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = alloca i64, align 8
  %58 = alloca %struct.doublecomplex, align 8
  %59 = alloca i64, align 8
  %60 = alloca double, align 8
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca double, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca double, align 8
  %72 = alloca i32, align 4
  store ptr %0, ptr %21, align 8, !tbaa !5
  store ptr %1, ptr %22, align 8, !tbaa !5
  store ptr %2, ptr %23, align 8, !tbaa !5
  store ptr %3, ptr %24, align 8, !tbaa !5
  store ptr %4, ptr %25, align 8, !tbaa !5
  store ptr %5, ptr %26, align 8, !tbaa !5
  store ptr %6, ptr %27, align 8, !tbaa !5
  store ptr %7, ptr %28, align 8, !tbaa !5
  store ptr %8, ptr %29, align 8, !tbaa !5
  store ptr %9, ptr %30, align 8, !tbaa !5
  store ptr %10, ptr %31, align 8, !tbaa !5
  store ptr %11, ptr %32, align 8, !tbaa !5
  store ptr %12, ptr %33, align 8, !tbaa !5
  store ptr %13, ptr %34, align 8, !tbaa !5
  store ptr %14, ptr %35, align 8, !tbaa !5
  store ptr %15, ptr %36, align 8, !tbaa !5
  store ptr %16, ptr %37, align 8, !tbaa !5
  store ptr %17, ptr %38, align 8, !tbaa !5
  store ptr %18, ptr %39, align 8, !tbaa !5
  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
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #3
  %73 = load ptr, ptr %24, align 8, !tbaa !5
  %74 = getelementptr inbounds i64, ptr %73, i32 -1
  store ptr %74, ptr %24, align 8, !tbaa !5
  %75 = load ptr, ptr %27, align 8, !tbaa !5
  %76 = load i64, ptr %75, align 8, !tbaa !9
  store i64 %76, ptr %40, align 8, !tbaa !9
  %77 = load i64, ptr %40, align 8, !tbaa !9
  %78 = add nsw i64 1, %77
  store i64 %78, ptr %41, align 8, !tbaa !9
  %79 = load i64, ptr %41, align 8, !tbaa !9
  %80 = load ptr, ptr %26, align 8, !tbaa !5
  %81 = sub i64 0, %79
  %82 = getelementptr inbounds %struct.doublecomplex, ptr %80, i64 %81
  store ptr %82, ptr %26, align 8, !tbaa !5
  %83 = load ptr, ptr %28, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.doublecomplex, ptr %83, i32 -1
  store ptr %84, ptr %28, align 8, !tbaa !5
  %85 = load ptr, ptr %30, align 8, !tbaa !5
  %86 = load i64, ptr %85, align 8, !tbaa !9
  store i64 %86, ptr %42, align 8, !tbaa !9
  %87 = load i64, ptr %42, align 8, !tbaa !9
  %88 = add nsw i64 1, %87
  store i64 %88, ptr %43, align 8, !tbaa !9
  %89 = load i64, ptr %43, align 8, !tbaa !9
  %90 = load ptr, ptr %29, align 8, !tbaa !5
  %91 = sub i64 0, %89
  %92 = getelementptr inbounds %struct.doublecomplex, ptr %90, i64 %91
  store ptr %92, ptr %29, align 8, !tbaa !5
  %93 = load ptr, ptr %32, align 8, !tbaa !5
  %94 = load i64, ptr %93, align 8, !tbaa !9
  store i64 %94, ptr %44, align 8, !tbaa !9
  %95 = load i64, ptr %44, align 8, !tbaa !9
  %96 = add nsw i64 1, %95
  store i64 %96, ptr %45, align 8, !tbaa !9
  %97 = load i64, ptr %45, align 8, !tbaa !9
  %98 = load ptr, ptr %31, align 8, !tbaa !5
  %99 = sub i64 0, %97
  %100 = getelementptr inbounds %struct.doublecomplex, ptr %98, i64 %99
  store ptr %100, ptr %31, align 8, !tbaa !5
  %101 = load ptr, ptr %35, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.doublecomplex, ptr %101, i32 -1
  store ptr %102, ptr %35, align 8, !tbaa !5
  %103 = load ptr, ptr %36, align 8, !tbaa !5
  %104 = getelementptr inbounds double, ptr %103, i32 -1
  store ptr %104, ptr %36, align 8, !tbaa !5
  %105 = load ptr, ptr %37, align 8, !tbaa !5
  %106 = getelementptr inbounds i64, ptr %105, i32 -1
  store ptr %106, ptr %37, align 8, !tbaa !5
  %107 = load ptr, ptr %38, align 8, !tbaa !5
  %108 = getelementptr inbounds i64, ptr %107, i32 -1
  store ptr %108, ptr %38, align 8, !tbaa !5
  %109 = load ptr, ptr %21, align 8, !tbaa !5
  %110 = call i64 @lsame_(ptr noundef %109, ptr noundef @.str)
  store i64 %110, ptr %65, align 8, !tbaa !9
  %111 = load ptr, ptr %21, align 8, !tbaa !5
  %112 = call i64 @lsame_(ptr noundef %111, ptr noundef @.str.1)
  %113 = icmp ne i64 %112, 0
  br i1 %113, label %117, label %114

114:                                              ; preds = %19
  %115 = load i64, ptr %65, align 8, !tbaa !9
  %116 = icmp ne i64 %115, 0
  br label %117

117:                                              ; preds = %114, %19
  %118 = phi i1 [ true, %19 ], [ %116, %114 ]
  %119 = zext i1 %118 to i32
  %120 = sext i32 %119 to i64
  store i64 %120, ptr %69, align 8, !tbaa !9
  %121 = load ptr, ptr %21, align 8, !tbaa !5
  %122 = call i64 @lsame_(ptr noundef %121, ptr noundef @.str.2)
  %123 = icmp ne i64 %122, 0
  br i1 %123, label %127, label %124

124:                                              ; preds = %117
  %125 = load i64, ptr %65, align 8, !tbaa !9
  %126 = icmp ne i64 %125, 0
  br label %127

127:                                              ; preds = %124, %117
  %128 = phi i1 [ true, %117 ], [ %126, %124 ]
  %129 = zext i1 %128 to i32
  %130 = sext i32 %129 to i64
  store i64 %130, ptr %64, align 8, !tbaa !9
  %131 = load ptr, ptr %22, align 8, !tbaa !5
  %132 = call i64 @lsame_(ptr noundef %131, ptr noundef @.str.3)
  store i64 %132, ptr %70, align 8, !tbaa !9
  %133 = load ptr, ptr %23, align 8, !tbaa !5
  %134 = call i64 @lsame_(ptr noundef %133, ptr noundef @.str.4)
  store i64 %134, ptr %67, align 8, !tbaa !9
  %135 = load ptr, ptr %34, align 8, !tbaa !5
  store i64 0, ptr %135, align 8, !tbaa !9
  %136 = load ptr, ptr %25, align 8, !tbaa !5
  %137 = load i64, ptr %136, align 8, !tbaa !9
  store i64 %137, ptr %46, align 8, !tbaa !9
  store i64 1, ptr %54, align 8, !tbaa !9
  br label %138

138:                                              ; preds = %153, %127
  %139 = load i64, ptr %54, align 8, !tbaa !9
  %140 = load i64, ptr %46, align 8, !tbaa !9
  %141 = icmp sle i64 %139, %140
  br i1 %141, label %142, label %156

142:                                              ; preds = %138
  %143 = load ptr, ptr %24, align 8, !tbaa !5
  %144 = load i64, ptr %54, align 8, !tbaa !9
  %145 = getelementptr inbounds i64, ptr %143, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = icmp ne i64 %146, 0
  br i1 %147, label %148, label %152

148:                                              ; preds = %142
  %149 = load ptr, ptr %34, align 8, !tbaa !5
  %150 = load i64, ptr %149, align 8, !tbaa !9
  %151 = add nsw i64 %150, 1
  store i64 %151, ptr %149, align 8, !tbaa !9
  br label %152

152:                                              ; preds = %148, %142
  br label %153

153:                                              ; preds = %152
  %154 = load i64, ptr %54, align 8, !tbaa !9
  %155 = add nsw i64 %154, 1
  store i64 %155, ptr %54, align 8, !tbaa !9
  br label %138, !llvm.loop !11

156:                                              ; preds = %138
  %157 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 0, ptr %157, align 8, !tbaa !9
  %158 = load i64, ptr %69, align 8, !tbaa !9
  %159 = icmp ne i64 %158, 0
  br i1 %159, label %165, label %160

160:                                              ; preds = %156
  %161 = load i64, ptr %64, align 8, !tbaa !9
  %162 = icmp ne i64 %161, 0
  br i1 %162, label %165, label %163

163:                                              ; preds = %160
  %164 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -1, ptr %164, align 8, !tbaa !9
  br label %249

165:                                              ; preds = %160, %156
  %166 = load i64, ptr %70, align 8, !tbaa !9
  %167 = icmp ne i64 %166, 0
  br i1 %167, label %174, label %168

168:                                              ; preds = %165
  %169 = load ptr, ptr %22, align 8, !tbaa !5
  %170 = call i64 @lsame_(ptr noundef %169, ptr noundef @.str.4)
  %171 = icmp ne i64 %170, 0
  br i1 %171, label %174, label %172

172:                                              ; preds = %168
  %173 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -2, ptr %173, align 8, !tbaa !9
  br label %248

174:                                              ; preds = %168, %165
  %175 = load i64, ptr %67, align 8, !tbaa !9
  %176 = icmp ne i64 %175, 0
  br i1 %176, label %183, label %177

177:                                              ; preds = %174
  %178 = load ptr, ptr %23, align 8, !tbaa !5
  %179 = call i64 @lsame_(ptr noundef %178, ptr noundef @.str.5)
  %180 = icmp ne i64 %179, 0
  br i1 %180, label %183, label %181

181:                                              ; preds = %177
  %182 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -3, ptr %182, align 8, !tbaa !9
  br label %247

183:                                              ; preds = %177, %174
  %184 = load ptr, ptr %25, align 8, !tbaa !5
  %185 = load i64, ptr %184, align 8, !tbaa !9
  %186 = icmp slt i64 %185, 0
  br i1 %186, label %187, label %189

187:                                              ; preds = %183
  %188 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -5, ptr %188, align 8, !tbaa !9
  br label %246

189:                                              ; preds = %183
  %190 = load ptr, ptr %27, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = load ptr, ptr %25, align 8, !tbaa !5
  %193 = load i64, ptr %192, align 8, !tbaa !9
  %194 = icmp sge i64 1, %193
  br i1 %194, label %195, label %196

195:                                              ; preds = %189
  br label %199

196:                                              ; preds = %189
  %197 = load ptr, ptr %25, align 8, !tbaa !5
  %198 = load i64, ptr %197, align 8, !tbaa !9
  br label %199

199:                                              ; preds = %196, %195
  %200 = phi i64 [ 1, %195 ], [ %198, %196 ]
  %201 = icmp slt i64 %191, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %199
  %203 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -7, ptr %203, align 8, !tbaa !9
  br label %245

204:                                              ; preds = %199
  %205 = load ptr, ptr %30, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = icmp slt i64 %206, 1
  br i1 %207, label %217, label %208

208:                                              ; preds = %204
  %209 = load i64, ptr %64, align 8, !tbaa !9
  %210 = icmp ne i64 %209, 0
  br i1 %210, label %211, label %219

211:                                              ; preds = %208
  %212 = load ptr, ptr %30, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = load ptr, ptr %25, align 8, !tbaa !5
  %215 = load i64, ptr %214, align 8, !tbaa !9
  %216 = icmp slt i64 %213, %215
  br i1 %216, label %217, label %219

217:                                              ; preds = %211, %204
  %218 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -10, ptr %218, align 8, !tbaa !9
  br label %244

219:                                              ; preds = %211, %208
  %220 = load ptr, ptr %32, align 8, !tbaa !5
  %221 = load i64, ptr %220, align 8, !tbaa !9
  %222 = icmp slt i64 %221, 1
  br i1 %222, label %232, label %223

223:                                              ; preds = %219
  %224 = load i64, ptr %69, align 8, !tbaa !9
  %225 = icmp ne i64 %224, 0
  br i1 %225, label %226, label %234

226:                                              ; preds = %223
  %227 = load ptr, ptr %32, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  %229 = load ptr, ptr %25, align 8, !tbaa !5
  %230 = load i64, ptr %229, align 8, !tbaa !9
  %231 = icmp slt i64 %228, %230
  br i1 %231, label %232, label %234

232:                                              ; preds = %226, %219
  %233 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -12, ptr %233, align 8, !tbaa !9
  br label %243

234:                                              ; preds = %226, %223
  %235 = load ptr, ptr %33, align 8, !tbaa !5
  %236 = load i64, ptr %235, align 8, !tbaa !9
  %237 = load ptr, ptr %34, align 8, !tbaa !5
  %238 = load i64, ptr %237, align 8, !tbaa !9
  %239 = icmp slt i64 %236, %238
  br i1 %239, label %240, label %242

240:                                              ; preds = %234
  %241 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 -13, ptr %241, align 8, !tbaa !9
  br label %242

242:                                              ; preds = %240, %234
  br label %243

243:                                              ; preds = %242, %232
  br label %244

244:                                              ; preds = %243, %217
  br label %245

245:                                              ; preds = %244, %202
  br label %246

246:                                              ; preds = %245, %187
  br label %247

247:                                              ; preds = %246, %181
  br label %248

248:                                              ; preds = %247, %172
  br label %249

249:                                              ; preds = %248, %163
  %250 = load ptr, ptr %39, align 8, !tbaa !5
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = icmp ne i64 %251, 0
  br i1 %252, label %253, label %258

253:                                              ; preds = %249
  %254 = load ptr, ptr %39, align 8, !tbaa !5
  %255 = load i64, ptr %254, align 8, !tbaa !9
  %256 = sub nsw i64 0, %255
  store i64 %256, ptr %46, align 8, !tbaa !9
  %257 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %46)
  store i32 0, ptr %20, align 4
  store i32 1, ptr %72, align 4
  br label %650

258:                                              ; preds = %249
  %259 = load ptr, ptr %25, align 8, !tbaa !5
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = icmp eq i64 %260, 0
  br i1 %261, label %262, label %263

262:                                              ; preds = %258
  store i32 0, ptr %20, align 4
  store i32 1, ptr %72, align 4
  br label %650

263:                                              ; preds = %258
  %264 = call double @dlamch_(ptr noundef @.str.7)
  store double %264, ptr %62, align 8, !tbaa !13
  %265 = call double @dlamch_(ptr noundef @.str.8)
  store double %265, ptr %60, align 8, !tbaa !13
  %266 = load double, ptr %62, align 8, !tbaa !13
  %267 = load ptr, ptr %25, align 8, !tbaa !5
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = sitofp i64 %268 to double
  %270 = load double, ptr %60, align 8, !tbaa !13
  %271 = fdiv double %269, %270
  %272 = fmul double %266, %271
  store double %272, ptr %71, align 8, !tbaa !13
  %273 = load ptr, ptr %25, align 8, !tbaa !5
  %274 = load i64, ptr %273, align 8, !tbaa !9
  store i64 %274, ptr %68, align 8, !tbaa !9
  store i64 1, ptr %55, align 8, !tbaa !9
  store i64 0, ptr %59, align 8, !tbaa !9
  %275 = load i64, ptr %70, align 8, !tbaa !9
  %276 = icmp ne i64 %275, 0
  br i1 %276, label %277, label %278

277:                                              ; preds = %263
  store i64 0, ptr %56, align 8, !tbaa !9
  br label %281

278:                                              ; preds = %263
  %279 = load ptr, ptr %25, align 8, !tbaa !5
  %280 = load i64, ptr %279, align 8, !tbaa !9
  store i64 %280, ptr %56, align 8, !tbaa !9
  br label %281

281:                                              ; preds = %278, %277
  store i64 1, ptr %57, align 8, !tbaa !9
  %282 = load ptr, ptr %25, align 8, !tbaa !5
  %283 = load i64, ptr %282, align 8, !tbaa !9
  store i64 %283, ptr %46, align 8, !tbaa !9
  store i64 1, ptr %54, align 8, !tbaa !9
  br label %284

284:                                              ; preds = %646, %281
  %285 = load i64, ptr %54, align 8, !tbaa !9
  %286 = load i64, ptr %46, align 8, !tbaa !9
  %287 = icmp sle i64 %285, %286
  br i1 %287, label %288, label %649

288:                                              ; preds = %284
  %289 = load ptr, ptr %24, align 8, !tbaa !5
  %290 = load i64, ptr %54, align 8, !tbaa !9
  %291 = getelementptr inbounds i64, ptr %289, i64 %290
  %292 = load i64, ptr %291, align 8, !tbaa !9
  %293 = icmp ne i64 %292, 0
  br i1 %293, label %294, label %645

294:                                              ; preds = %288
  %295 = load i64, ptr %70, align 8, !tbaa !9
  %296 = icmp ne i64 %295, 0
  br i1 %296, label %297, label %374

297:                                              ; preds = %294
  %298 = load i64, ptr %55, align 8, !tbaa !9
  %299 = add nsw i64 %298, 1
  store i64 %299, ptr %47, align 8, !tbaa !9
  %300 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %300, ptr %53, align 8, !tbaa !9
  br label %301

301:                                              ; preds = %327, %297
  %302 = load i64, ptr %53, align 8, !tbaa !9
  %303 = load i64, ptr %47, align 8, !tbaa !9
  %304 = icmp sge i64 %302, %303
  br i1 %304, label %305, label %330

305:                                              ; preds = %301
  %306 = load i64, ptr %53, align 8, !tbaa !9
  %307 = load i64, ptr %53, align 8, !tbaa !9
  %308 = sub nsw i64 %307, 1
  %309 = load i64, ptr %40, align 8, !tbaa !9
  %310 = mul nsw i64 %308, %309
  %311 = add nsw i64 %306, %310
  store i64 %311, ptr %48, align 8, !tbaa !9
  %312 = load ptr, ptr %26, align 8, !tbaa !5
  %313 = load i64, ptr %48, align 8, !tbaa !9
  %314 = getelementptr inbounds %struct.doublecomplex, ptr %312, i64 %313
  %315 = getelementptr inbounds %struct.doublecomplex, ptr %314, i32 0, i32 0
  %316 = load double, ptr %315, align 8, !tbaa !15
  %317 = fcmp oeq double %316, 0.000000e+00
  br i1 %317, label %318, label %326

318:                                              ; preds = %305
  %319 = load ptr, ptr %26, align 8, !tbaa !5
  %320 = load i64, ptr %48, align 8, !tbaa !9
  %321 = getelementptr inbounds %struct.doublecomplex, ptr %319, i64 %320
  %322 = getelementptr inbounds %struct.doublecomplex, ptr %321, i32 0, i32 1
  %323 = load double, ptr %322, align 8, !tbaa !17
  %324 = fcmp oeq double %323, 0.000000e+00
  br i1 %324, label %325, label %326

325:                                              ; preds = %318
  br label %331

326:                                              ; preds = %318, %305
  br label %327

327:                                              ; preds = %326
  %328 = load i64, ptr %53, align 8, !tbaa !9
  %329 = add nsw i64 %328, -1
  store i64 %329, ptr %53, align 8, !tbaa !9
  br label %301, !llvm.loop !18

330:                                              ; preds = %301
  br label %331

331:                                              ; preds = %330, %325
  %332 = load i64, ptr %53, align 8, !tbaa !9
  store i64 %332, ptr %55, align 8, !tbaa !9
  %333 = load i64, ptr %54, align 8, !tbaa !9
  %334 = load i64, ptr %56, align 8, !tbaa !9
  %335 = icmp sgt i64 %333, %334
  br i1 %335, label %336, label %373

336:                                              ; preds = %331
  %337 = load ptr, ptr %25, align 8, !tbaa !5
  %338 = load i64, ptr %337, align 8, !tbaa !9
  %339 = sub nsw i64 %338, 1
  store i64 %339, ptr %47, align 8, !tbaa !9
  %340 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %340, ptr %53, align 8, !tbaa !9
  br label %341

341:                                              ; preds = %367, %336
  %342 = load i64, ptr %53, align 8, !tbaa !9
  %343 = load i64, ptr %47, align 8, !tbaa !9
  %344 = icmp sle i64 %342, %343
  br i1 %344, label %345, label %370

345:                                              ; preds = %341
  %346 = load i64, ptr %53, align 8, !tbaa !9
  %347 = add nsw i64 %346, 1
  %348 = load i64, ptr %53, align 8, !tbaa !9
  %349 = load i64, ptr %40, align 8, !tbaa !9
  %350 = mul nsw i64 %348, %349
  %351 = add nsw i64 %347, %350
  store i64 %351, ptr %48, align 8, !tbaa !9
  %352 = load ptr, ptr %26, align 8, !tbaa !5
  %353 = load i64, ptr %48, align 8, !tbaa !9
  %354 = getelementptr inbounds %struct.doublecomplex, ptr %352, i64 %353
  %355 = getelementptr inbounds %struct.doublecomplex, ptr %354, i32 0, i32 0
  %356 = load double, ptr %355, align 8, !tbaa !15
  %357 = fcmp oeq double %356, 0.000000e+00
  br i1 %357, label %358, label %366

358:                                              ; preds = %345
  %359 = load ptr, ptr %26, align 8, !tbaa !5
  %360 = load i64, ptr %48, align 8, !tbaa !9
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %359, i64 %360
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %361, i32 0, i32 1
  %363 = load double, ptr %362, align 8, !tbaa !17
  %364 = fcmp oeq double %363, 0.000000e+00
  br i1 %364, label %365, label %366

365:                                              ; preds = %358
  br label %371

366:                                              ; preds = %358, %345
  br label %367

367:                                              ; preds = %366
  %368 = load i64, ptr %53, align 8, !tbaa !9
  %369 = add nsw i64 %368, 1
  store i64 %369, ptr %53, align 8, !tbaa !9
  br label %341, !llvm.loop !19

370:                                              ; preds = %341
  br label %371

371:                                              ; preds = %370, %365
  %372 = load i64, ptr %53, align 8, !tbaa !9
  store i64 %372, ptr %56, align 8, !tbaa !9
  br label %373

373:                                              ; preds = %371, %331
  br label %374

374:                                              ; preds = %373, %294
  %375 = load i64, ptr %55, align 8, !tbaa !9
  %376 = load i64, ptr %59, align 8, !tbaa !9
  %377 = icmp ne i64 %375, %376
  br i1 %377, label %378, label %404

378:                                              ; preds = %374
  %379 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %379, ptr %59, align 8, !tbaa !9
  %380 = load i64, ptr %56, align 8, !tbaa !9
  %381 = load i64, ptr %55, align 8, !tbaa !9
  %382 = sub nsw i64 %380, %381
  %383 = add nsw i64 %382, 1
  store i64 %383, ptr %47, align 8, !tbaa !9
  %384 = load ptr, ptr %26, align 8, !tbaa !5
  %385 = load i64, ptr %55, align 8, !tbaa !9
  %386 = load i64, ptr %55, align 8, !tbaa !9
  %387 = load i64, ptr %40, align 8, !tbaa !9
  %388 = mul nsw i64 %386, %387
  %389 = add nsw i64 %385, %388
  %390 = getelementptr inbounds %struct.doublecomplex, ptr %384, i64 %389
  %391 = load ptr, ptr %27, align 8, !tbaa !5
  %392 = load ptr, ptr %36, align 8, !tbaa !5
  %393 = getelementptr inbounds double, ptr %392, i64 1
  %394 = call double @zlanhs_(ptr noundef @.str.9, ptr noundef %47, ptr noundef %390, ptr noundef %391, ptr noundef %393)
  store double %394, ptr %66, align 8, !tbaa !13
  %395 = load double, ptr %66, align 8, !tbaa !13
  %396 = fcmp ogt double %395, 0.000000e+00
  br i1 %396, label %397, label %401

397:                                              ; preds = %378
  %398 = load double, ptr %66, align 8, !tbaa !13
  %399 = load double, ptr %60, align 8, !tbaa !13
  %400 = fmul double %398, %399
  store double %400, ptr %61, align 8, !tbaa !13
  br label %403

401:                                              ; preds = %378
  %402 = load double, ptr %71, align 8, !tbaa !13
  store double %402, ptr %61, align 8, !tbaa !13
  br label %403

403:                                              ; preds = %401, %397
  br label %404

404:                                              ; preds = %403, %374
  %405 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %405, ptr %47, align 8, !tbaa !9
  %406 = load ptr, ptr %28, align 8, !tbaa !5
  %407 = load i64, ptr %47, align 8, !tbaa !9
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %406, i64 %407
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %408, i32 0, i32 0
  %410 = load double, ptr %409, align 8, !tbaa !15
  %411 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  store double %410, ptr %411, align 8, !tbaa !15
  %412 = load ptr, ptr %28, align 8, !tbaa !5
  %413 = load i64, ptr %47, align 8, !tbaa !9
  %414 = getelementptr inbounds %struct.doublecomplex, ptr %412, i64 %413
  %415 = getelementptr inbounds %struct.doublecomplex, ptr %414, i32 0, i32 1
  %416 = load double, ptr %415, align 8, !tbaa !17
  %417 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  store double %416, ptr %417, align 8, !tbaa !17
  br label %418

418:                                              ; preds = %482, %404
  %419 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %419, ptr %47, align 8, !tbaa !9
  %420 = load i64, ptr %54, align 8, !tbaa !9
  %421 = sub nsw i64 %420, 1
  store i64 %421, ptr %53, align 8, !tbaa !9
  br label %422

422:                                              ; preds = %498, %418
  %423 = load i64, ptr %53, align 8, !tbaa !9
  %424 = load i64, ptr %47, align 8, !tbaa !9
  %425 = icmp sge i64 %423, %424
  br i1 %425, label %426, label %501

426:                                              ; preds = %422
  %427 = load i64, ptr %53, align 8, !tbaa !9
  store i64 %427, ptr %48, align 8, !tbaa !9
  %428 = load ptr, ptr %28, align 8, !tbaa !5
  %429 = load i64, ptr %48, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.doublecomplex, ptr %428, i64 %429
  %431 = getelementptr inbounds %struct.doublecomplex, ptr %430, i32 0, i32 0
  %432 = load double, ptr %431, align 8, !tbaa !15
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %434 = load double, ptr %433, align 8, !tbaa !15
  %435 = fsub double %432, %434
  %436 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  store double %435, ptr %436, align 8, !tbaa !15
  %437 = load ptr, ptr %28, align 8, !tbaa !5
  %438 = load i64, ptr %48, align 8, !tbaa !9
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %437, i64 %438
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %439, i32 0, i32 1
  %441 = load double, ptr %440, align 8, !tbaa !17
  %442 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %443 = load double, ptr %442, align 8, !tbaa !17
  %444 = fsub double %441, %443
  %445 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  store double %444, ptr %445, align 8, !tbaa !17
  %446 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 0
  %447 = load double, ptr %446, align 8, !tbaa !15
  %448 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %447, ptr %448, align 8, !tbaa !15
  %449 = getelementptr inbounds %struct.doublecomplex, ptr %52, i32 0, i32 1
  %450 = load double, ptr %449, align 8, !tbaa !17
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double %450, ptr %451, align 8, !tbaa !17
  %452 = load ptr, ptr %24, align 8, !tbaa !5
  %453 = load i64, ptr %53, align 8, !tbaa !9
  %454 = getelementptr inbounds i64, ptr %452, i64 %453
  %455 = load i64, ptr %454, align 8, !tbaa !9
  %456 = icmp ne i64 %455, 0
  br i1 %456, label %457, label %497

457:                                              ; preds = %426
  %458 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %459 = load double, ptr %458, align 8, !tbaa !15
  store double %459, ptr %49, align 8, !tbaa !13
  %460 = load double, ptr %49, align 8, !tbaa !13
  %461 = fcmp oge double %460, 0.000000e+00
  br i1 %461, label %462, label %464

462:                                              ; preds = %457
  %463 = load double, ptr %49, align 8, !tbaa !13
  br label %467

464:                                              ; preds = %457
  %465 = load double, ptr %49, align 8, !tbaa !13
  %466 = fneg double %465
  br label %467

467:                                              ; preds = %464, %462
  %468 = phi double [ %463, %462 ], [ %466, %464 ]
  %469 = call double @d_imag(ptr noundef %51)
  store double %469, ptr %50, align 8, !tbaa !13
  %470 = load double, ptr %50, align 8, !tbaa !13
  %471 = fcmp oge double %470, 0.000000e+00
  br i1 %471, label %472, label %474

472:                                              ; preds = %467
  %473 = load double, ptr %50, align 8, !tbaa !13
  br label %477

474:                                              ; preds = %467
  %475 = load double, ptr %50, align 8, !tbaa !13
  %476 = fneg double %475
  br label %477

477:                                              ; preds = %474, %472
  %478 = phi double [ %473, %472 ], [ %476, %474 ]
  %479 = fadd double %468, %478
  %480 = load double, ptr %61, align 8, !tbaa !13
  %481 = fcmp olt double %479, %480
  br i1 %481, label %482, label %497

482:                                              ; preds = %477
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %484 = load double, ptr %483, align 8, !tbaa !15
  %485 = load double, ptr %61, align 8, !tbaa !13
  %486 = fadd double %484, %485
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  store double %486, ptr %487, align 8, !tbaa !15
  %488 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %489 = load double, ptr %488, align 8, !tbaa !17
  %490 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  store double %489, ptr %490, align 8, !tbaa !17
  %491 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 0
  %492 = load double, ptr %491, align 8, !tbaa !15
  %493 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  store double %492, ptr %493, align 8, !tbaa !15
  %494 = getelementptr inbounds %struct.doublecomplex, ptr %51, i32 0, i32 1
  %495 = load double, ptr %494, align 8, !tbaa !17
  %496 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  store double %495, ptr %496, align 8, !tbaa !17
  br label %418

497:                                              ; preds = %477, %426
  br label %498

498:                                              ; preds = %497
  %499 = load i64, ptr %53, align 8, !tbaa !9
  %500 = add nsw i64 %499, -1
  store i64 %500, ptr %53, align 8, !tbaa !9
  br label %422, !llvm.loop !20

501:                                              ; preds = %422
  %502 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %502, ptr %47, align 8, !tbaa !9
  %503 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %504 = load double, ptr %503, align 8, !tbaa !15
  %505 = load ptr, ptr %28, align 8, !tbaa !5
  %506 = load i64, ptr %47, align 8, !tbaa !9
  %507 = getelementptr inbounds %struct.doublecomplex, ptr %505, i64 %506
  %508 = getelementptr inbounds %struct.doublecomplex, ptr %507, i32 0, i32 0
  store double %504, ptr %508, align 8, !tbaa !15
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %510 = load double, ptr %509, align 8, !tbaa !17
  %511 = load ptr, ptr %28, align 8, !tbaa !5
  %512 = load i64, ptr %47, align 8, !tbaa !9
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %511, i64 %512
  %514 = getelementptr inbounds %struct.doublecomplex, ptr %513, i32 0, i32 1
  store double %510, ptr %514, align 8, !tbaa !17
  %515 = load i64, ptr %64, align 8, !tbaa !9
  %516 = icmp ne i64 %515, 0
  br i1 %516, label %517, label %582

517:                                              ; preds = %501
  %518 = load ptr, ptr %25, align 8, !tbaa !5
  %519 = load i64, ptr %518, align 8, !tbaa !9
  %520 = load i64, ptr %55, align 8, !tbaa !9
  %521 = sub nsw i64 %519, %520
  %522 = add nsw i64 %521, 1
  store i64 %522, ptr %47, align 8, !tbaa !9
  %523 = load ptr, ptr %26, align 8, !tbaa !5
  %524 = load i64, ptr %55, align 8, !tbaa !9
  %525 = load i64, ptr %55, align 8, !tbaa !9
  %526 = load i64, ptr %40, align 8, !tbaa !9
  %527 = mul nsw i64 %525, %526
  %528 = add nsw i64 %524, %527
  %529 = getelementptr inbounds %struct.doublecomplex, ptr %523, i64 %528
  %530 = load ptr, ptr %27, align 8, !tbaa !5
  %531 = load ptr, ptr %29, align 8, !tbaa !5
  %532 = load i64, ptr %55, align 8, !tbaa !9
  %533 = load i64, ptr %57, align 8, !tbaa !9
  %534 = load i64, ptr %42, align 8, !tbaa !9
  %535 = mul nsw i64 %533, %534
  %536 = add nsw i64 %532, %535
  %537 = getelementptr inbounds %struct.doublecomplex, ptr %531, i64 %536
  %538 = load ptr, ptr %35, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.doublecomplex, ptr %538, i64 1
  %540 = load ptr, ptr %36, align 8, !tbaa !5
  %541 = getelementptr inbounds double, ptr %540, i64 1
  %542 = call i32 @zlaein_(ptr noundef @c_false, ptr noundef %67, ptr noundef %47, ptr noundef %529, ptr noundef %530, ptr noundef %58, ptr noundef %537, ptr noundef %539, ptr noundef %68, ptr noundef %541, ptr noundef %61, ptr noundef %71, ptr noundef %63)
  %543 = load i64, ptr %63, align 8, !tbaa !9
  %544 = icmp sgt i64 %543, 0
  br i1 %544, label %545, label %553

545:                                              ; preds = %517
  %546 = load ptr, ptr %39, align 8, !tbaa !5
  %547 = load i64, ptr %546, align 8, !tbaa !9
  %548 = add nsw i64 %547, 1
  store i64 %548, ptr %546, align 8, !tbaa !9
  %549 = load i64, ptr %54, align 8, !tbaa !9
  %550 = load ptr, ptr %37, align 8, !tbaa !5
  %551 = load i64, ptr %57, align 8, !tbaa !9
  %552 = getelementptr inbounds i64, ptr %550, i64 %551
  store i64 %549, ptr %552, align 8, !tbaa !9
  br label %557

553:                                              ; preds = %517
  %554 = load ptr, ptr %37, align 8, !tbaa !5
  %555 = load i64, ptr %57, align 8, !tbaa !9
  %556 = getelementptr inbounds i64, ptr %554, i64 %555
  store i64 0, ptr %556, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %553, %545
  %558 = load i64, ptr %55, align 8, !tbaa !9
  %559 = sub nsw i64 %558, 1
  store i64 %559, ptr %47, align 8, !tbaa !9
  store i64 1, ptr %53, align 8, !tbaa !9
  br label %560

560:                                              ; preds = %578, %557
  %561 = load i64, ptr %53, align 8, !tbaa !9
  %562 = load i64, ptr %47, align 8, !tbaa !9
  %563 = icmp sle i64 %561, %562
  br i1 %563, label %564, label %581

564:                                              ; preds = %560
  %565 = load i64, ptr %53, align 8, !tbaa !9
  %566 = load i64, ptr %57, align 8, !tbaa !9
  %567 = load i64, ptr %42, align 8, !tbaa !9
  %568 = mul nsw i64 %566, %567
  %569 = add nsw i64 %565, %568
  store i64 %569, ptr %48, align 8, !tbaa !9
  %570 = load ptr, ptr %29, align 8, !tbaa !5
  %571 = load i64, ptr %48, align 8, !tbaa !9
  %572 = getelementptr inbounds %struct.doublecomplex, ptr %570, i64 %571
  %573 = getelementptr inbounds %struct.doublecomplex, ptr %572, i32 0, i32 0
  store double 0.000000e+00, ptr %573, align 8, !tbaa !15
  %574 = load ptr, ptr %29, align 8, !tbaa !5
  %575 = load i64, ptr %48, align 8, !tbaa !9
  %576 = getelementptr inbounds %struct.doublecomplex, ptr %574, i64 %575
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %576, i32 0, i32 1
  store double 0.000000e+00, ptr %577, align 8, !tbaa !17
  br label %578

578:                                              ; preds = %564
  %579 = load i64, ptr %53, align 8, !tbaa !9
  %580 = add nsw i64 %579, 1
  store i64 %580, ptr %53, align 8, !tbaa !9
  br label %560, !llvm.loop !21

581:                                              ; preds = %560
  br label %582

582:                                              ; preds = %581, %501
  %583 = load i64, ptr %69, align 8, !tbaa !9
  %584 = icmp ne i64 %583, 0
  br i1 %584, label %585, label %642

585:                                              ; preds = %582
  %586 = load ptr, ptr %26, align 8, !tbaa !5
  %587 = load i64, ptr %41, align 8, !tbaa !9
  %588 = getelementptr inbounds %struct.doublecomplex, ptr %586, i64 %587
  %589 = load ptr, ptr %27, align 8, !tbaa !5
  %590 = load ptr, ptr %31, align 8, !tbaa !5
  %591 = load i64, ptr %57, align 8, !tbaa !9
  %592 = load i64, ptr %44, align 8, !tbaa !9
  %593 = mul nsw i64 %591, %592
  %594 = add nsw i64 %593, 1
  %595 = getelementptr inbounds %struct.doublecomplex, ptr %590, i64 %594
  %596 = load ptr, ptr %35, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %596, i64 1
  %598 = load ptr, ptr %36, align 8, !tbaa !5
  %599 = getelementptr inbounds double, ptr %598, i64 1
  %600 = call i32 @zlaein_(ptr noundef @c_true, ptr noundef %67, ptr noundef %56, ptr noundef %588, ptr noundef %589, ptr noundef %58, ptr noundef %595, ptr noundef %597, ptr noundef %68, ptr noundef %599, ptr noundef %61, ptr noundef %71, ptr noundef %63)
  %601 = load i64, ptr %63, align 8, !tbaa !9
  %602 = icmp sgt i64 %601, 0
  br i1 %602, label %603, label %611

603:                                              ; preds = %585
  %604 = load ptr, ptr %39, align 8, !tbaa !5
  %605 = load i64, ptr %604, align 8, !tbaa !9
  %606 = add nsw i64 %605, 1
  store i64 %606, ptr %604, align 8, !tbaa !9
  %607 = load i64, ptr %54, align 8, !tbaa !9
  %608 = load ptr, ptr %38, align 8, !tbaa !5
  %609 = load i64, ptr %57, align 8, !tbaa !9
  %610 = getelementptr inbounds i64, ptr %608, i64 %609
  store i64 %607, ptr %610, align 8, !tbaa !9
  br label %615

611:                                              ; preds = %585
  %612 = load ptr, ptr %38, align 8, !tbaa !5
  %613 = load i64, ptr %57, align 8, !tbaa !9
  %614 = getelementptr inbounds i64, ptr %612, i64 %613
  store i64 0, ptr %614, align 8, !tbaa !9
  br label %615

615:                                              ; preds = %611, %603
  %616 = load ptr, ptr %25, align 8, !tbaa !5
  %617 = load i64, ptr %616, align 8, !tbaa !9
  store i64 %617, ptr %47, align 8, !tbaa !9
  %618 = load i64, ptr %56, align 8, !tbaa !9
  %619 = add nsw i64 %618, 1
  store i64 %619, ptr %53, align 8, !tbaa !9
  br label %620

620:                                              ; preds = %638, %615
  %621 = load i64, ptr %53, align 8, !tbaa !9
  %622 = load i64, ptr %47, align 8, !tbaa !9
  %623 = icmp sle i64 %621, %622
  br i1 %623, label %624, label %641

624:                                              ; preds = %620
  %625 = load i64, ptr %53, align 8, !tbaa !9
  %626 = load i64, ptr %57, align 8, !tbaa !9
  %627 = load i64, ptr %44, align 8, !tbaa !9
  %628 = mul nsw i64 %626, %627
  %629 = add nsw i64 %625, %628
  store i64 %629, ptr %48, align 8, !tbaa !9
  %630 = load ptr, ptr %31, align 8, !tbaa !5
  %631 = load i64, ptr %48, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %630, i64 %631
  %633 = getelementptr inbounds %struct.doublecomplex, ptr %632, i32 0, i32 0
  store double 0.000000e+00, ptr %633, align 8, !tbaa !15
  %634 = load ptr, ptr %31, align 8, !tbaa !5
  %635 = load i64, ptr %48, align 8, !tbaa !9
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %634, i64 %635
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %636, i32 0, i32 1
  store double 0.000000e+00, ptr %637, align 8, !tbaa !17
  br label %638

638:                                              ; preds = %624
  %639 = load i64, ptr %53, align 8, !tbaa !9
  %640 = add nsw i64 %639, 1
  store i64 %640, ptr %53, align 8, !tbaa !9
  br label %620, !llvm.loop !22

641:                                              ; preds = %620
  br label %642

642:                                              ; preds = %641, %582
  %643 = load i64, ptr %57, align 8, !tbaa !9
  %644 = add nsw i64 %643, 1
  store i64 %644, ptr %57, align 8, !tbaa !9
  br label %645

645:                                              ; preds = %642, %288
  br label %646

646:                                              ; preds = %645
  %647 = load i64, ptr %54, align 8, !tbaa !9
  %648 = add nsw i64 %647, 1
  store i64 %648, ptr %54, align 8, !tbaa !9
  br label %284, !llvm.loop !23

649:                                              ; preds = %284
  store i32 0, ptr %20, align 4
  store i32 1, ptr %72, align 4
  br label %650

650:                                              ; preds = %649, %262, %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 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
  %651 = load i32, ptr %20, align 4
  ret i32 %651
}

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

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

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

declare double @dlamch_(ptr noundef) #2

declare double @zlanhs_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare double @d_imag(ptr noundef) #2

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

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

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

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

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


; 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 [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@c_false = external hidden global i64, align 8
@c_true = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zhsein_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef %7, ptr noundef %8, ptr nocapture noundef readonly %9, ptr noundef %10, ptr nocapture noundef readonly %11, ptr nocapture noundef readonly %12, ptr nocapture noundef %13, ptr noundef %14, ptr noundef %15, ptr nocapture noundef writeonly %16, ptr nocapture noundef writeonly %17, ptr nocapture noundef %18) local_unnamed_addr #0 {
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca %struct.doublecomplex, align 16
  %23 = alloca i64, align 8
  %24 = alloca %struct.doublecomplex, align 16
  %25 = alloca double, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #5
  %30 = getelementptr inbounds i8, ptr %3, i64 -8
  %31 = load i64, ptr %6, align 8, !tbaa !5
  %32 = xor i64 %31, -1
  %33 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %32
  %34 = getelementptr inbounds i8, ptr %7, i64 -16
  %35 = load i64, ptr %9, align 8, !tbaa !5
  %36 = xor i64 %35, -1
  %37 = getelementptr inbounds %struct.doublecomplex, ptr %8, i64 %36
  %38 = load i64, ptr %11, align 8, !tbaa !5
  %39 = xor i64 %38, -1
  %40 = getelementptr inbounds %struct.doublecomplex, ptr %10, i64 %39
  %41 = getelementptr inbounds i8, ptr %16, i64 -8
  %42 = getelementptr inbounds i8, ptr %17, i64 -8
  %43 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %44 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %45 = icmp ne i64 %44, 0
  %46 = icmp ne i64 %43, 0
  %47 = select i1 %45, i1 true, i1 %46
  %48 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %49 = icmp ne i64 %48, 0
  %50 = select i1 %49, i1 true, i1 %46
  %51 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5
  %52 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5
  store i64 %52, ptr %27, align 8, !tbaa !5
  store i64 0, ptr %13, align 8, !tbaa !5
  %53 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %53, ptr %20, align 8, !tbaa !5
  %.not235 = icmp slt i64 %53, 1
  br i1 %.not235, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %19
  %xtraiter = and i64 %53, 1
  %54 = icmp eq i64 %53, 1
  br i1 %54, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %53, 9223372036854775806
  br label %.lr.ph

.lr.ph:                                           ; preds = %65, %.lr.ph.preheader.new
  %55 = phi i64 [ 0, %.lr.ph.preheader.new ], [ %66, %65 ]
  %.0199236 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %67, %65 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %65 ]
  %56 = getelementptr inbounds i64, ptr %30, i64 %.0199236
  %57 = load i64, ptr %56, align 8, !tbaa !5
  %.not225 = icmp eq i64 %57, 0
  br i1 %.not225, label %.lr.ph.1, label %58

58:                                               ; preds = %.lr.ph
  %59 = add nsw i64 %55, 1
  store i64 %59, ptr %13, align 8, !tbaa !5
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph, %58
  %60 = phi i64 [ %55, %.lr.ph ], [ %59, %58 ]
  %61 = getelementptr i64, ptr %3, i64 %.0199236
  %62 = load i64, ptr %61, align 8, !tbaa !5
  %.not225.1 = icmp eq i64 %62, 0
  br i1 %.not225.1, label %65, label %63

63:                                               ; preds = %.lr.ph.1
  %64 = add nsw i64 %60, 1
  store i64 %64, ptr %13, align 8, !tbaa !5
  br label %65

65:                                               ; preds = %63, %.lr.ph.1
  %66 = phi i64 [ %60, %.lr.ph.1 ], [ %64, %63 ]
  %67 = add nuw i64 %.0199236, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa.loopexit, label %.lr.ph, !llvm.loop !9

._crit_edge.loopexit.unr-lcssa.loopexit:          ; preds = %65
  %68 = add nsw i64 %66, 1
  br label %._crit_edge.loopexit.unr-lcssa

._crit_edge.loopexit.unr-lcssa:                   ; preds = %._crit_edge.loopexit.unr-lcssa.loopexit, %.lr.ph.preheader
  %.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %68, %._crit_edge.loopexit.unr-lcssa.loopexit ]
  %.0199236.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %67, %._crit_edge.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa
  %69 = getelementptr inbounds i64, ptr %30, i64 %.0199236.unr
  %70 = load i64, ptr %69, align 8, !tbaa !5
  %.not225.epil = icmp eq i64 %70, 0
  br i1 %.not225.epil, label %._crit_edge, label %71

71:                                               ; preds = %.lr.ph.epil
  store i64 %.unr, ptr %13, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %71, %.lr.ph.epil, %19
  store i64 0, ptr %18, align 8, !tbaa !5
  %or.cond = select i1 %47, i1 true, i1 %50
  br i1 %or.cond, label %72, label %.thread.sink.split

72:                                               ; preds = %._crit_edge
  %.not209 = icmp eq i64 %51, 0
  br i1 %.not209, label %73, label %75

73:                                               ; preds = %72
  %74 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5
  %.not210 = icmp eq i64 %74, 0
  br i1 %.not210, label %.thread.sink.split, label %75

75:                                               ; preds = %73, %72
  %.not211 = icmp eq i64 %52, 0
  br i1 %.not211, label %76, label %78

76:                                               ; preds = %75
  %77 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5
  %.not212 = icmp eq i64 %77, 0
  br i1 %.not212, label %.thread.sink.split, label %78

78:                                               ; preds = %76, %75
  %79 = load i64, ptr %4, align 8, !tbaa !5
  %80 = icmp slt i64 %79, 0
  br i1 %80, label %.thread.sink.split, label %81

81:                                               ; preds = %78
  %82 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %79, i64 1)
  %83 = icmp slt i64 %82, %spec.select
  br i1 %83, label %.thread.sink.split, label %84

84:                                               ; preds = %81
  %85 = load i64, ptr %9, align 8, !tbaa !5
  %86 = icmp slt i64 %85, 1
  %87 = icmp ult i64 %85, %79
  %or.cond227 = and i1 %50, %87
  %or.cond230 = select i1 %86, i1 true, i1 %or.cond227
  br i1 %or.cond230, label %.thread.sink.split, label %88

88:                                               ; preds = %84
  %89 = load i64, ptr %11, align 8, !tbaa !5
  %90 = icmp slt i64 %89, 1
  %91 = icmp ult i64 %89, %79
  %or.cond228 = and i1 %47, %91
  %or.cond231 = select i1 %90, i1 true, i1 %or.cond228
  br i1 %or.cond231, label %.thread.sink.split, label %92

92:                                               ; preds = %88
  %93 = load i64, ptr %12, align 8, !tbaa !5
  %94 = load i64, ptr %13, align 8, !tbaa !5
  %95 = icmp slt i64 %93, %94
  br i1 %95, label %.thread.sink.split, label %96

96:                                               ; preds = %92
  %.pr = load i64, ptr %18, align 8, !tbaa !5
  %.not213 = icmp eq i64 %.pr, 0
  br i1 %.not213, label %100, label %.thread

.thread.sink.split:                               ; preds = %92, %88, %84, %81, %78, %76, %73, %._crit_edge
  %.sink292 = phi i64 [ -1, %._crit_edge ], [ -2, %73 ], [ -3, %76 ], [ -5, %78 ], [ -7, %81 ], [ -10, %84 ], [ -12, %88 ], [ -13, %92 ]
  store i64 %.sink292, ptr %18, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %96
  %97 = phi i64 [ %.pr, %96 ], [ %.sink292, %.thread.sink.split ]
  %98 = sub nsw i64 0, %97
  store i64 %98, ptr %20, align 8, !tbaa !5
  %99 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %20) #5
  br label %.loopexit233

100:                                              ; preds = %96
  %101 = icmp eq i64 %79, 0
  br i1 %101, label %.loopexit233, label %102

102:                                              ; preds = %100
  %103 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %104 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #5
  %105 = load i64, ptr %4, align 8, !tbaa !5
  %106 = sitofp i64 %105 to double
  %107 = fdiv double %106, %104
  %108 = fmul double %103, %107
  store double %108, ptr %29, align 8, !tbaa !11
  store i64 %105, ptr %28, align 8, !tbaa !5
  %spec.select229 = select i1 %.not209, i64 %105, i64 0
  store i64 %spec.select229, ptr %23, align 8, !tbaa !5
  %invariant.gep270 = getelementptr i8, ptr %40, i64 16
  %.not215272 = icmp slt i64 %105, 1
  br i1 %.not215272, label %.loopexit233, label %.lr.ph284

.lr.ph284:                                        ; preds = %102
  %109 = add i64 %31, 1
  %110 = getelementptr inbounds i8, ptr %24, i64 8
  %111 = getelementptr inbounds i8, ptr %22, i64 8
  br label %112

112:                                              ; preds = %.lr.ph284, %225
  %.0193282 = phi i64 [ 0, %.lr.ph284 ], [ %.2, %225 ]
  %.0194279 = phi i64 [ 1, %.lr.ph284 ], [ %.1195, %225 ]
  %.0196278 = phi i64 [ 1, %.lr.ph284 ], [ %.2198, %225 ]
  %.1200273 = phi i64 [ 1, %.lr.ph284 ], [ %226, %225 ]
  %113 = getelementptr inbounds i64, ptr %30, i64 %.1200273
  %114 = load i64, ptr %113, align 8, !tbaa !5
  %.not216 = icmp eq i64 %114, 0
  br i1 %.not216, label %225, label %115

115:                                              ; preds = %112
  br i1 %.not209, label %143, label %116

116:                                              ; preds = %115
  %.not217.not237 = icmp sgt i64 %.1200273, %.0196278
  br i1 %.not217.not237, label %.lr.ph240, label %._crit_edge241

.lr.ph240:                                        ; preds = %116, %127
  %.0201238 = phi i64 [ %117, %127 ], [ %.1200273, %116 ]
  %117 = add nsw i64 %.0201238, -1
  %118 = mul nsw i64 %117, %31
  %119 = getelementptr %struct.doublecomplex, ptr %33, i64 %.0201238
  %120 = getelementptr %struct.doublecomplex, ptr %119, i64 %118
  %121 = load double, ptr %120, align 8, !tbaa !13
  %122 = fcmp oeq double %121, 0.000000e+00
  br i1 %122, label %123, label %127

123:                                              ; preds = %.lr.ph240
  %124 = getelementptr inbounds i8, ptr %120, i64 8
  %125 = load double, ptr %124, align 8, !tbaa !15
  %126 = fcmp oeq double %125, 0.000000e+00
  br i1 %126, label %._crit_edge241, label %127

127:                                              ; preds = %.lr.ph240, %123
  %.not217.not = icmp sgt i64 %117, %.0196278
  br i1 %.not217.not, label %.lr.ph240, label %._crit_edge241, !llvm.loop !16

._crit_edge241:                                   ; preds = %123, %127, %116
  %.0201.lcssa = phi i64 [ %.1200273, %116 ], [ %.0196278, %127 ], [ %.0201238, %123 ]
  %128 = load i64, ptr %23, align 8, !tbaa !5
  %129 = icmp sgt i64 %.1200273, %128
  br i1 %129, label %130, label %143

130:                                              ; preds = %._crit_edge241
  %131 = load i64, ptr %4, align 8, !tbaa !5
  %.not218.not244 = icmp slt i64 %.1200273, %131
  br i1 %.not218.not244, label %.lr.ph247, label %._crit_edge248

.lr.ph247:                                        ; preds = %130, %142
  %.1202245 = phi i64 [ %132, %142 ], [ %.1200273, %130 ]
  %132 = add nuw nsw i64 %.1202245, 1
  %133 = mul nsw i64 %.1202245, %31
  %134 = getelementptr %struct.doublecomplex, ptr %33, i64 %132
  %135 = getelementptr %struct.doublecomplex, ptr %134, i64 %133
  %136 = load double, ptr %135, align 8, !tbaa !13
  %137 = fcmp oeq double %136, 0.000000e+00
  br i1 %137, label %138, label %142

138:                                              ; preds = %.lr.ph247
  %139 = getelementptr inbounds i8, ptr %135, i64 8
  %140 = load double, ptr %139, align 8, !tbaa !15
  %141 = fcmp oeq double %140, 0.000000e+00
  br i1 %141, label %._crit_edge248, label %142

142:                                              ; preds = %.lr.ph247, %138
  %.not218.not = icmp slt i64 %132, %131
  br i1 %.not218.not, label %.lr.ph247, label %._crit_edge248, !llvm.loop !17

._crit_edge248:                                   ; preds = %138, %142, %130
  %.1202.lcssa = phi i64 [ %.1200273, %130 ], [ %131, %142 ], [ %.1202245, %138 ]
  store i64 %.1202.lcssa, ptr %23, align 8, !tbaa !5
  br label %143

143:                                              ; preds = %._crit_edge241, %._crit_edge248, %115
  %.1197 = phi i64 [ %.0201.lcssa, %._crit_edge248 ], [ %.0201.lcssa, %._crit_edge241 ], [ %.0196278, %115 ]
  %.not219 = icmp eq i64 %.1197, %.0193282
  br i1 %.not219, label %155, label %144

144:                                              ; preds = %143
  %145 = load i64, ptr %23, align 8, !tbaa !5
  %reass.sub = sub i64 %145, %.1197
  %146 = add i64 %reass.sub, 1
  store i64 %146, ptr %21, align 8, !tbaa !5
  %147 = mul i64 %.1197, %109
  %148 = getelementptr inbounds %struct.doublecomplex, ptr %33, i64 %147
  %149 = call double @zlanhs_(ptr noundef nonnull @.str.9, ptr noundef nonnull %21, ptr noundef %148, ptr noundef nonnull %6, ptr noundef %15) #5
  %150 = fcmp ogt double %149, 0.000000e+00
  br i1 %150, label %151, label %153

151:                                              ; preds = %144
  %152 = fmul double %104, %149
  store double %152, ptr %25, align 8, !tbaa !11
  br label %155

153:                                              ; preds = %144
  %154 = load double, ptr %29, align 8, !tbaa !11
  store double %154, ptr %25, align 8, !tbaa !11
  br label %155

155:                                              ; preds = %151, %153, %143
  %.1 = phi i64 [ %.1197, %151 ], [ %.1197, %153 ], [ %.0193282, %143 ]
  %156 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %.1200273
  %157 = load <2 x double>, ptr %156, align 8, !tbaa !11
  store <2 x double> %157, ptr %24, align 16, !tbaa !11
  store i64 %.1197, ptr %21, align 8, !tbaa !5
  %.not221.not253259 = icmp sgt i64 %.1200273, %.1197
  br i1 %.not221.not253259, label %.lr.ph256, label %._crit_edge257

.lr.ph256:                                        ; preds = %155, %.lr.ph256.backedge
  %158 = phi i64 [ %.be, %.lr.ph256.backedge ], [ %.1197, %155 ]
  %.2203254.in = phi i64 [ %.2203254.in.be, %.lr.ph256.backedge ], [ %.1200273, %155 ]
  %.2203254 = add nsw i64 %.2203254.in, -1
  %159 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %.2203254
  %160 = load <2 x double>, ptr %159, align 8, !tbaa !11
  %161 = load <2 x double>, ptr %24, align 16, !tbaa !11
  %162 = fsub <2 x double> %160, %161
  store <2 x double> %162, ptr %22, align 16, !tbaa !11
  %163 = getelementptr inbounds i64, ptr %30, i64 %.2203254
  %164 = load i64, ptr %163, align 8, !tbaa !5
  %.not224 = icmp eq i64 %164, 0
  br i1 %.not224, label %179, label %165

165:                                              ; preds = %.lr.ph256
  %166 = call double @d_imag(ptr noundef nonnull %22) #5
  %167 = insertelement <2 x double> %162, double %166, i64 1
  %168 = fcmp oge <2 x double> %167, zeroinitializer
  %169 = fneg <2 x double> %167
  %170 = select <2 x i1> %168, <2 x double> %167, <2 x double> %169
  %shift = shufflevector <2 x double> %170, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %171 = fadd <2 x double> %170, %shift
  %172 = extractelement <2 x double> %171, i64 0
  %173 = load double, ptr %25, align 8, !tbaa !11
  %174 = fcmp olt double %172, %173
  br i1 %174, label %175, label %._crit_edge289

._crit_edge289:                                   ; preds = %165
  %.pre = load i64, ptr %21, align 8, !tbaa !5
  br label %179

175:                                              ; preds = %165
  %176 = load double, ptr %24, align 16, !tbaa !13
  %177 = fadd double %173, %176
  store double %177, ptr %22, align 16, !tbaa !13
  %178 = load double, ptr %110, align 8, !tbaa !15
  store double %178, ptr %111, align 8, !tbaa !15
  store double %177, ptr %24, align 16, !tbaa !13
  store double %178, ptr %110, align 8, !tbaa !15
  store i64 %.1197, ptr %21, align 8, !tbaa !5
  br label %.lr.ph256.backedge

179:                                              ; preds = %._crit_edge289, %.lr.ph256
  %180 = phi i64 [ %.pre, %._crit_edge289 ], [ %158, %.lr.ph256 ]
  %.not221.not = icmp sgt i64 %.2203254, %180
  br i1 %.not221.not, label %.lr.ph256.backedge, label %._crit_edge257.loopexit

.lr.ph256.backedge:                               ; preds = %179, %175
  %.be = phi i64 [ %180, %179 ], [ %.1197, %175 ]
  %.2203254.in.be = phi i64 [ %.2203254, %179 ], [ %.1200273, %175 ]
  br label %.lr.ph256, !llvm.loop !18

._crit_edge257.loopexit:                          ; preds = %179
  %181 = load <2 x double>, ptr %24, align 16, !tbaa !11
  br label %._crit_edge257

._crit_edge257:                                   ; preds = %._crit_edge257.loopexit, %155
  %182 = phi <2 x double> [ %181, %._crit_edge257.loopexit ], [ %157, %155 ]
  store i64 %.1200273, ptr %21, align 8, !tbaa !5
  store <2 x double> %182, ptr %156, align 8, !tbaa !11
  br i1 %50, label %183, label %.loopexit232

183:                                              ; preds = %._crit_edge257
  %184 = load i64, ptr %4, align 8, !tbaa !5
  %reass.sub285 = sub i64 %184, %.1197
  %185 = add i64 %reass.sub285, 1
  store i64 %185, ptr %21, align 8, !tbaa !5
  %186 = mul i64 %.1197, %109
  %187 = getelementptr inbounds %struct.doublecomplex, ptr %33, i64 %186
  %188 = mul nsw i64 %.0194279, %35
  %189 = getelementptr %struct.doublecomplex, ptr %37, i64 %.1197
  %190 = getelementptr %struct.doublecomplex, ptr %189, i64 %188
  %191 = call i32 @zlaein_(ptr noundef nonnull @c_false, ptr noundef nonnull %27, ptr noundef nonnull %21, ptr noundef %187, ptr noundef nonnull %6, ptr noundef nonnull %24, ptr noundef %190, ptr noundef %14, ptr noundef nonnull %28, ptr noundef %15, ptr noundef nonnull %25, ptr noundef nonnull %29, ptr noundef nonnull %26) #5
  %192 = load i64, ptr %26, align 8, !tbaa !5
  %193 = icmp sgt i64 %192, 0
  br i1 %193, label %194, label %197

194:                                              ; preds = %183
  %195 = load i64, ptr %18, align 8, !tbaa !5
  %196 = add nsw i64 %195, 1
  store i64 %196, ptr %18, align 8, !tbaa !5
  br label %197

197:                                              ; preds = %183, %194
  %.sink = phi i64 [ %.1200273, %194 ], [ 0, %183 ]
  %198 = getelementptr inbounds i64, ptr %41, i64 %.0194279
  store i64 %.sink, ptr %198, align 8
  %199 = add nsw i64 %.1197, -1
  store i64 %199, ptr %21, align 8, !tbaa !5
  %.not222.not260 = icmp sgt i64 %.1197, 1
  br i1 %.not222.not260, label %.lr.ph263.preheader, label %.loopexit232

.lr.ph263.preheader:                              ; preds = %197
  %200 = shl i64 %.0194279, 4
  %201 = add i64 %200, -16
  %202 = mul i64 %35, %201
  %scevgep = getelementptr i8, ptr %8, i64 %202
  %203 = shl i64 %.1197, 4
  %204 = add i64 %203, -16
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %204, i1 false), !tbaa !11
  br label %.loopexit232

.loopexit232:                                     ; preds = %.lr.ph263.preheader, %197, %._crit_edge257
  br i1 %47, label %205, label %.loopexit

205:                                              ; preds = %.loopexit232
  %206 = mul nsw i64 %.0194279, %38
  %gep271 = getelementptr %struct.doublecomplex, ptr %invariant.gep270, i64 %206
  %207 = call i32 @zlaein_(ptr noundef nonnull @c_true, ptr noundef nonnull %27, ptr noundef nonnull %23, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %24, ptr noundef %gep271, ptr noundef %14, ptr noundef nonnull %28, ptr noundef %15, ptr noundef nonnull %25, ptr noundef nonnull %29, ptr noundef nonnull %26) #5
  %208 = load i64, ptr %26, align 8, !tbaa !5
  %209 = icmp sgt i64 %208, 0
  br i1 %209, label %210, label %213

210:                                              ; preds = %205
  %211 = load i64, ptr %18, align 8, !tbaa !5
  %212 = add nsw i64 %211, 1
  store i64 %212, ptr %18, align 8, !tbaa !5
  br label %213

213:                                              ; preds = %205, %210
  %.sink288 = phi i64 [ %.1200273, %210 ], [ 0, %205 ]
  %214 = getelementptr inbounds i64, ptr %42, i64 %.0194279
  store i64 %.sink288, ptr %214, align 8
  %215 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %215, ptr %21, align 8, !tbaa !5
  %216 = load i64, ptr %23, align 8, !tbaa !5
  %.not223.not266 = icmp slt i64 %216, %215
  br i1 %.not223.not266, label %.lr.ph269.preheader, label %.loopexit

.lr.ph269.preheader:                              ; preds = %213
  %217 = shl i64 %.0194279, 4
  %218 = add i64 %217, -16
  %219 = mul i64 %38, %218
  %220 = shl i64 %216, 4
  %221 = getelementptr i8, ptr %10, i64 %219
  %scevgep287 = getelementptr i8, ptr %221, i64 %220
  %222 = sub i64 %215, %216
  %223 = shl i64 %222, 4
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep287, i8 0, i64 %223, i1 false), !tbaa !11
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph269.preheader, %213, %.loopexit232
  %224 = add nsw i64 %.0194279, 1
  br label %225

225:                                              ; preds = %112, %.loopexit
  %.2198 = phi i64 [ %.1197, %.loopexit ], [ %.0196278, %112 ]
  %.1195 = phi i64 [ %224, %.loopexit ], [ %.0194279, %112 ]
  %.2 = phi i64 [ %.1, %.loopexit ], [ %.0193282, %112 ]
  %226 = add nuw nsw i64 %.1200273, 1
  %.not215.not = icmp slt i64 %.1200273, %105
  br i1 %.not215.not, label %112, label %.loopexit233, !llvm.loop !19

.loopexit233:                                     ; preds = %225, %102, %100, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  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 double @dlamch_(ptr noundef) local_unnamed_addr #2

declare double @zlanhs_(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 i32 @zlaein_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

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


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