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

; 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 [7 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 [5 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@c__1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i64, align 8
@c_b41 = external hidden global double, align 8
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1

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

80:                                               ; preds = %8
  store i64 0, ptr %59, align 8, !tbaa !9
  br label %94

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

85:                                               ; preds = %81
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %93

86:                                               ; preds = %81
  %87 = load ptr, ptr %10, align 8, !tbaa !5
  %88 = call i64 @lsame_(ptr noundef %87, ptr noundef @.str.2)
  %89 = icmp ne i64 %88, 0
  br i1 %89, label %90, label %91

90:                                               ; preds = %86
  store i64 2, ptr %59, align 8, !tbaa !9
  br label %92

91:                                               ; preds = %86
  store i64 -1, ptr %59, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %91, %90
  br label %93

93:                                               ; preds = %92, %85
  br label %94

94:                                               ; preds = %93, %80
  %95 = load i64, ptr %59, align 8, !tbaa !9
  %96 = icmp slt i64 %95, 0
  br i1 %96, label %97, label %99

97:                                               ; preds = %94
  %98 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -1, ptr %98, align 8, !tbaa !9
  br label %129

99:                                               ; preds = %94
  %100 = load ptr, ptr %11, align 8, !tbaa !5
  %101 = load i64, ptr %100, align 8, !tbaa !9
  %102 = icmp slt i64 %101, 0
  br i1 %102, label %103, label %105

103:                                              ; preds = %99
  %104 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -2, ptr %104, align 8, !tbaa !9
  br label %128

105:                                              ; preds = %99
  %106 = load ptr, ptr %15, align 8, !tbaa !5
  %107 = load i64, ptr %106, align 8, !tbaa !9
  %108 = icmp slt i64 %107, 1
  br i1 %108, label %125, label %109

109:                                              ; preds = %105
  %110 = load i64, ptr %59, align 8, !tbaa !9
  %111 = icmp sgt i64 %110, 0
  br i1 %111, label %112, label %127

112:                                              ; preds = %109
  %113 = load ptr, ptr %15, align 8, !tbaa !5
  %114 = load i64, ptr %113, align 8, !tbaa !9
  %115 = load ptr, ptr %11, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = icmp sge i64 1, %116
  br i1 %117, label %118, label %119

118:                                              ; preds = %112
  br label %122

119:                                              ; preds = %112
  %120 = load ptr, ptr %11, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  br label %122

122:                                              ; preds = %119, %118
  %123 = phi i64 [ 1, %118 ], [ %121, %119 ]
  %124 = icmp slt i64 %114, %123
  br i1 %124, label %125, label %127

125:                                              ; preds = %122, %105
  %126 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -6, ptr %126, align 8, !tbaa !9
  br label %127

127:                                              ; preds = %125, %122, %109
  br label %128

128:                                              ; preds = %127, %103
  br label %129

129:                                              ; preds = %128, %97
  %130 = load ptr, ptr %17, align 8, !tbaa !5
  %131 = load i64, ptr %130, align 8, !tbaa !9
  %132 = icmp ne i64 %131, 0
  br i1 %132, label %133, label %138

133:                                              ; preds = %129
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = sub nsw i64 0, %135
  store i64 %136, ptr %20, align 8, !tbaa !9
  %137 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %20)
  store i32 0, ptr %9, align 4
  store i32 1, ptr %61, align 4
  br label %1250

138:                                              ; preds = %129
  %139 = load ptr, ptr %11, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  %141 = icmp eq i64 %140, 0
  br i1 %141, label %142, label %143

142:                                              ; preds = %138
  store i32 0, ptr %9, align 4
  store i32 1, ptr %61, align 4
  br label %1250

143:                                              ; preds = %138
  %144 = load ptr, ptr %11, align 8, !tbaa !5
  %145 = load i64, ptr %144, align 8, !tbaa !9
  %146 = icmp eq i64 %145, 1
  br i1 %146, label %147, label %162

147:                                              ; preds = %143
  %148 = load i64, ptr %59, align 8, !tbaa !9
  %149 = icmp eq i64 %148, 2
  br i1 %149, label %150, label %161

150:                                              ; preds = %147
  %151 = load i64, ptr %18, align 8, !tbaa !9
  %152 = add nsw i64 %151, 1
  store i64 %152, ptr %20, align 8, !tbaa !9
  %153 = load ptr, ptr %14, align 8, !tbaa !5
  %154 = load i64, ptr %20, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.doublecomplex, ptr %153, i64 %154
  %156 = getelementptr inbounds %struct.doublecomplex, ptr %155, i32 0, i32 0
  store double 1.000000e+00, ptr %156, align 8, !tbaa !11
  %157 = load ptr, ptr %14, align 8, !tbaa !5
  %158 = load i64, ptr %20, align 8, !tbaa !9
  %159 = getelementptr inbounds %struct.doublecomplex, ptr %157, i64 %158
  %160 = getelementptr inbounds %struct.doublecomplex, ptr %159, i32 0, i32 1
  store double 0.000000e+00, ptr %160, align 8, !tbaa !14
  br label %161

161:                                              ; preds = %150, %147
  store i32 0, ptr %9, align 4
  store i32 1, ptr %61, align 4
  br label %1250

162:                                              ; preds = %143
  %163 = call double @dlamch_(ptr noundef @.str.4)
  store double %163, ptr %44, align 8, !tbaa !15
  %164 = load double, ptr %44, align 8, !tbaa !15
  store double %164, ptr %22, align 8, !tbaa !15
  %165 = load double, ptr %22, align 8, !tbaa !15
  %166 = load double, ptr %22, align 8, !tbaa !15
  %167 = fmul double %165, %166
  store double %167, ptr %47, align 8, !tbaa !15
  %168 = call double @dlamch_(ptr noundef @.str.5)
  store double %168, ptr %54, align 8, !tbaa !15
  %169 = load double, ptr %54, align 8, !tbaa !15
  %170 = fdiv double 1.000000e+00, %169
  store double %170, ptr %55, align 8, !tbaa !15
  %171 = load double, ptr %55, align 8, !tbaa !15
  %172 = call double @sqrt(double noundef %171) #5
  %173 = fdiv double %172, 3.000000e+00
  store double %173, ptr %60, align 8, !tbaa !15
  %174 = load double, ptr %54, align 8, !tbaa !15
  %175 = call double @sqrt(double noundef %174) #5
  %176 = load double, ptr %47, align 8, !tbaa !15
  %177 = fdiv double %175, %176
  store double %177, ptr %57, align 8, !tbaa !15
  %178 = load i64, ptr %59, align 8, !tbaa !9
  %179 = icmp eq i64 %178, 2
  br i1 %179, label %180, label %188

180:                                              ; preds = %162
  %181 = load ptr, ptr %11, align 8, !tbaa !5
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = load ptr, ptr %14, align 8, !tbaa !5
  %184 = load i64, ptr %19, align 8, !tbaa !9
  %185 = getelementptr inbounds %struct.doublecomplex, ptr %183, i64 %184
  %186 = load ptr, ptr %15, align 8, !tbaa !5
  %187 = call i32 @zlaset_(ptr noundef @.str.6, ptr noundef %181, ptr noundef %182, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %185, ptr noundef %186)
  br label %188

188:                                              ; preds = %180, %162
  %189 = load ptr, ptr %11, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = mul nsw i64 %190, 30
  store i64 %191, ptr %58, align 8, !tbaa !9
  store i64 0, ptr %49, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  %192 = load ptr, ptr %11, align 8, !tbaa !5
  %193 = load i64, ptr %192, align 8, !tbaa !9
  %194 = sub nsw i64 %193, 1
  store i64 %194, ptr %41, align 8, !tbaa !9
  br label %195

195:                                              ; preds = %1165, %309, %294, %188
  %196 = load i64, ptr %36, align 8, !tbaa !9
  %197 = load ptr, ptr %11, align 8, !tbaa !5
  %198 = load i64, ptr %197, align 8, !tbaa !9
  %199 = icmp sgt i64 %196, %198
  br i1 %199, label %200, label %201

200:                                              ; preds = %195
  br label %1166

201:                                              ; preds = %195
  %202 = load i64, ptr %36, align 8, !tbaa !9
  %203 = icmp sgt i64 %202, 1
  br i1 %203, label %204, label %209

204:                                              ; preds = %201
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = load i64, ptr %36, align 8, !tbaa !9
  %207 = sub nsw i64 %206, 1
  %208 = getelementptr inbounds double, ptr %205, i64 %207
  store double 0.000000e+00, ptr %208, align 8, !tbaa !15
  br label %209

209:                                              ; preds = %204, %201
  %210 = load i64, ptr %36, align 8, !tbaa !9
  %211 = load i64, ptr %41, align 8, !tbaa !9
  %212 = icmp sle i64 %210, %211
  br i1 %212, label %213, label %281

213:                                              ; preds = %209
  %214 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %214, ptr %20, align 8, !tbaa !9
  %215 = load i64, ptr %36, align 8, !tbaa !9
  store i64 %215, ptr %32, align 8, !tbaa !9
  br label %216

216:                                              ; preds = %277, %213
  %217 = load i64, ptr %32, align 8, !tbaa !9
  %218 = load i64, ptr %20, align 8, !tbaa !9
  %219 = icmp sle i64 %217, %218
  br i1 %219, label %220, label %280

220:                                              ; preds = %216
  %221 = load ptr, ptr %13, align 8, !tbaa !5
  %222 = load i64, ptr %32, align 8, !tbaa !9
  %223 = getelementptr inbounds double, ptr %221, i64 %222
  %224 = load double, ptr %223, align 8, !tbaa !15
  store double %224, ptr %22, align 8, !tbaa !15
  %225 = load double, ptr %22, align 8, !tbaa !15
  %226 = fcmp oge double %225, 0.000000e+00
  br i1 %226, label %227, label %229

227:                                              ; preds = %220
  %228 = load double, ptr %22, align 8, !tbaa !15
  br label %232

229:                                              ; preds = %220
  %230 = load double, ptr %22, align 8, !tbaa !15
  %231 = fneg double %230
  br label %232

232:                                              ; preds = %229, %227
  %233 = phi double [ %228, %227 ], [ %231, %229 ]
  store double %233, ptr %46, align 8, !tbaa !15
  %234 = load double, ptr %46, align 8, !tbaa !15
  %235 = fcmp oeq double %234, 0.000000e+00
  br i1 %235, label %236, label %237

236:                                              ; preds = %232
  br label %284

237:                                              ; preds = %232
  %238 = load double, ptr %46, align 8, !tbaa !15
  %239 = load ptr, ptr %12, align 8, !tbaa !5
  %240 = load i64, ptr %32, align 8, !tbaa !9
  %241 = getelementptr inbounds double, ptr %239, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !15
  store double %242, ptr %22, align 8, !tbaa !15
  %243 = load double, ptr %22, align 8, !tbaa !15
  %244 = fcmp oge double %243, 0.000000e+00
  br i1 %244, label %245, label %247

245:                                              ; preds = %237
  %246 = load double, ptr %22, align 8, !tbaa !15
  br label %250

247:                                              ; preds = %237
  %248 = load double, ptr %22, align 8, !tbaa !15
  %249 = fneg double %248
  br label %250

250:                                              ; preds = %247, %245
  %251 = phi double [ %246, %245 ], [ %249, %247 ]
  %252 = call double @sqrt(double noundef %251) #5
  %253 = load ptr, ptr %12, align 8, !tbaa !5
  %254 = load i64, ptr %32, align 8, !tbaa !9
  %255 = add nsw i64 %254, 1
  %256 = getelementptr inbounds double, ptr %253, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !15
  store double %257, ptr %23, align 8, !tbaa !15
  %258 = load double, ptr %23, align 8, !tbaa !15
  %259 = fcmp oge double %258, 0.000000e+00
  br i1 %259, label %260, label %262

260:                                              ; preds = %250
  %261 = load double, ptr %23, align 8, !tbaa !15
  br label %265

262:                                              ; preds = %250
  %263 = load double, ptr %23, align 8, !tbaa !15
  %264 = fneg double %263
  br label %265

265:                                              ; preds = %262, %260
  %266 = phi double [ %261, %260 ], [ %264, %262 ]
  %267 = call double @sqrt(double noundef %266) #5
  %268 = fmul double %252, %267
  %269 = load double, ptr %44, align 8, !tbaa !15
  %270 = fmul double %268, %269
  %271 = fcmp ole double %238, %270
  br i1 %271, label %272, label %276

272:                                              ; preds = %265
  %273 = load ptr, ptr %13, align 8, !tbaa !5
  %274 = load i64, ptr %32, align 8, !tbaa !9
  %275 = getelementptr inbounds double, ptr %273, i64 %274
  store double 0.000000e+00, ptr %275, align 8, !tbaa !15
  br label %284

276:                                              ; preds = %265
  br label %277

277:                                              ; preds = %276
  %278 = load i64, ptr %32, align 8, !tbaa !9
  %279 = add nsw i64 %278, 1
  store i64 %279, ptr %32, align 8, !tbaa !9
  br label %216, !llvm.loop !16

280:                                              ; preds = %216
  br label %281

281:                                              ; preds = %280, %209
  %282 = load ptr, ptr %11, align 8, !tbaa !5
  %283 = load i64, ptr %282, align 8, !tbaa !9
  store i64 %283, ptr %32, align 8, !tbaa !9
  br label %284

284:                                              ; preds = %281, %272, %236
  %285 = load i64, ptr %36, align 8, !tbaa !9
  store i64 %285, ptr %31, align 8, !tbaa !9
  %286 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %286, ptr %45, align 8, !tbaa !9
  %287 = load i64, ptr %32, align 8, !tbaa !9
  store i64 %287, ptr %48, align 8, !tbaa !9
  %288 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %288, ptr %56, align 8, !tbaa !9
  %289 = load i64, ptr %32, align 8, !tbaa !9
  %290 = add nsw i64 %289, 1
  store i64 %290, ptr %36, align 8, !tbaa !9
  %291 = load i64, ptr %48, align 8, !tbaa !9
  %292 = load i64, ptr %31, align 8, !tbaa !9
  %293 = icmp eq i64 %291, %292
  br i1 %293, label %294, label %295

294:                                              ; preds = %284
  br label %195

295:                                              ; preds = %284
  %296 = load i64, ptr %48, align 8, !tbaa !9
  %297 = load i64, ptr %31, align 8, !tbaa !9
  %298 = sub nsw i64 %296, %297
  %299 = add nsw i64 %298, 1
  store i64 %299, ptr %20, align 8, !tbaa !9
  %300 = load ptr, ptr %12, align 8, !tbaa !5
  %301 = load i64, ptr %31, align 8, !tbaa !9
  %302 = getelementptr inbounds double, ptr %300, i64 %301
  %303 = load ptr, ptr %13, align 8, !tbaa !5
  %304 = load i64, ptr %31, align 8, !tbaa !9
  %305 = getelementptr inbounds double, ptr %303, i64 %304
  %306 = call double @dlanst_(ptr noundef @.str.2, ptr noundef %20, ptr noundef %302, ptr noundef %305)
  store double %306, ptr %50, align 8, !tbaa !15
  store i64 0, ptr %53, align 8, !tbaa !9
  %307 = load double, ptr %50, align 8, !tbaa !15
  %308 = fcmp oeq double %307, 0.000000e+00
  br i1 %308, label %309, label %310

309:                                              ; preds = %295
  br label %195

310:                                              ; preds = %295
  %311 = load double, ptr %50, align 8, !tbaa !15
  %312 = load double, ptr %60, align 8, !tbaa !15
  %313 = fcmp ogt double %311, %312
  br i1 %313, label %314, label %334

314:                                              ; preds = %310
  store i64 1, ptr %53, align 8, !tbaa !9
  %315 = load i64, ptr %48, align 8, !tbaa !9
  %316 = load i64, ptr %31, align 8, !tbaa !9
  %317 = sub nsw i64 %315, %316
  %318 = add nsw i64 %317, 1
  store i64 %318, ptr %20, align 8, !tbaa !9
  %319 = load ptr, ptr %12, align 8, !tbaa !5
  %320 = load i64, ptr %31, align 8, !tbaa !9
  %321 = getelementptr inbounds double, ptr %319, i64 %320
  %322 = load ptr, ptr %11, align 8, !tbaa !5
  %323 = load ptr, ptr %17, align 8, !tbaa !5
  %324 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %50, ptr noundef %60, ptr noundef %20, ptr noundef @c__1, ptr noundef %321, ptr noundef %322, ptr noundef %323)
  %325 = load i64, ptr %48, align 8, !tbaa !9
  %326 = load i64, ptr %31, align 8, !tbaa !9
  %327 = sub nsw i64 %325, %326
  store i64 %327, ptr %20, align 8, !tbaa !9
  %328 = load ptr, ptr %13, align 8, !tbaa !5
  %329 = load i64, ptr %31, align 8, !tbaa !9
  %330 = getelementptr inbounds double, ptr %328, i64 %329
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = load ptr, ptr %17, align 8, !tbaa !5
  %333 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %50, ptr noundef %60, ptr noundef %20, ptr noundef @c__1, ptr noundef %330, ptr noundef %331, ptr noundef %332)
  br label %359

334:                                              ; preds = %310
  %335 = load double, ptr %50, align 8, !tbaa !15
  %336 = load double, ptr %57, align 8, !tbaa !15
  %337 = fcmp olt double %335, %336
  br i1 %337, label %338, label %358

338:                                              ; preds = %334
  store i64 2, ptr %53, align 8, !tbaa !9
  %339 = load i64, ptr %48, align 8, !tbaa !9
  %340 = load i64, ptr %31, align 8, !tbaa !9
  %341 = sub nsw i64 %339, %340
  %342 = add nsw i64 %341, 1
  store i64 %342, ptr %20, align 8, !tbaa !9
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = load i64, ptr %31, align 8, !tbaa !9
  %345 = getelementptr inbounds double, ptr %343, i64 %344
  %346 = load ptr, ptr %11, align 8, !tbaa !5
  %347 = load ptr, ptr %17, align 8, !tbaa !5
  %348 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %50, ptr noundef %57, ptr noundef %20, ptr noundef @c__1, ptr noundef %345, ptr noundef %346, ptr noundef %347)
  %349 = load i64, ptr %48, align 8, !tbaa !9
  %350 = load i64, ptr %31, align 8, !tbaa !9
  %351 = sub nsw i64 %349, %350
  store i64 %351, ptr %20, align 8, !tbaa !9
  %352 = load ptr, ptr %13, align 8, !tbaa !5
  %353 = load i64, ptr %31, align 8, !tbaa !9
  %354 = getelementptr inbounds double, ptr %352, i64 %353
  %355 = load ptr, ptr %11, align 8, !tbaa !5
  %356 = load ptr, ptr %17, align 8, !tbaa !5
  %357 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %50, ptr noundef %57, ptr noundef %20, ptr noundef @c__1, ptr noundef %354, ptr noundef %355, ptr noundef %356)
  br label %358

358:                                              ; preds = %338, %334
  br label %359

359:                                              ; preds = %358, %314
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = load i64, ptr %48, align 8, !tbaa !9
  %362 = getelementptr inbounds double, ptr %360, i64 %361
  %363 = load double, ptr %362, align 8, !tbaa !15
  store double %363, ptr %22, align 8, !tbaa !15
  %364 = load double, ptr %22, align 8, !tbaa !15
  %365 = fcmp oge double %364, 0.000000e+00
  br i1 %365, label %366, label %368

366:                                              ; preds = %359
  %367 = load double, ptr %22, align 8, !tbaa !15
  br label %371

368:                                              ; preds = %359
  %369 = load double, ptr %22, align 8, !tbaa !15
  %370 = fneg double %369
  br label %371

371:                                              ; preds = %368, %366
  %372 = phi double [ %367, %366 ], [ %370, %368 ]
  %373 = load ptr, ptr %12, align 8, !tbaa !5
  %374 = load i64, ptr %31, align 8, !tbaa !9
  %375 = getelementptr inbounds double, ptr %373, i64 %374
  %376 = load double, ptr %375, align 8, !tbaa !15
  store double %376, ptr %23, align 8, !tbaa !15
  %377 = load double, ptr %23, align 8, !tbaa !15
  %378 = fcmp oge double %377, 0.000000e+00
  br i1 %378, label %379, label %381

379:                                              ; preds = %371
  %380 = load double, ptr %23, align 8, !tbaa !15
  br label %384

381:                                              ; preds = %371
  %382 = load double, ptr %23, align 8, !tbaa !15
  %383 = fneg double %382
  br label %384

384:                                              ; preds = %381, %379
  %385 = phi double [ %380, %379 ], [ %383, %381 ]
  %386 = fcmp olt double %372, %385
  br i1 %386, label %387, label %390

387:                                              ; preds = %384
  %388 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %388, ptr %48, align 8, !tbaa !9
  %389 = load i64, ptr %56, align 8, !tbaa !9
  store i64 %389, ptr %31, align 8, !tbaa !9
  br label %390

390:                                              ; preds = %387, %384
  %391 = load i64, ptr %48, align 8, !tbaa !9
  %392 = load i64, ptr %31, align 8, !tbaa !9
  %393 = icmp sgt i64 %391, %392
  br i1 %393, label %394, label %740

394:                                              ; preds = %390
  br label %395

395:                                              ; preds = %738, %717, %564, %394
  %396 = load i64, ptr %31, align 8, !tbaa !9
  %397 = load i64, ptr %48, align 8, !tbaa !9
  %398 = icmp ne i64 %396, %397
  br i1 %398, label %399, label %464

399:                                              ; preds = %395
  %400 = load i64, ptr %48, align 8, !tbaa !9
  %401 = sub nsw i64 %400, 1
  store i64 %401, ptr %51, align 8, !tbaa !9
  %402 = load i64, ptr %51, align 8, !tbaa !9
  store i64 %402, ptr %20, align 8, !tbaa !9
  %403 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %403, ptr %32, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %460, %399
  %405 = load i64, ptr %32, align 8, !tbaa !9
  %406 = load i64, ptr %20, align 8, !tbaa !9
  %407 = icmp sle i64 %405, %406
  br i1 %407, label %408, label %463

408:                                              ; preds = %404
  %409 = load ptr, ptr %13, align 8, !tbaa !5
  %410 = load i64, ptr %32, align 8, !tbaa !9
  %411 = getelementptr inbounds double, ptr %409, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !15
  store double %412, ptr %22, align 8, !tbaa !15
  %413 = load double, ptr %22, align 8, !tbaa !15
  %414 = fcmp oge double %413, 0.000000e+00
  br i1 %414, label %415, label %417

415:                                              ; preds = %408
  %416 = load double, ptr %22, align 8, !tbaa !15
  br label %420

417:                                              ; preds = %408
  %418 = load double, ptr %22, align 8, !tbaa !15
  %419 = fneg double %418
  br label %420

420:                                              ; preds = %417, %415
  %421 = phi double [ %416, %415 ], [ %419, %417 ]
  store double %421, ptr %23, align 8, !tbaa !15
  %422 = load double, ptr %23, align 8, !tbaa !15
  %423 = load double, ptr %23, align 8, !tbaa !15
  %424 = fmul double %422, %423
  store double %424, ptr %46, align 8, !tbaa !15
  %425 = load double, ptr %46, align 8, !tbaa !15
  %426 = load double, ptr %47, align 8, !tbaa !15
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = load i64, ptr %32, align 8, !tbaa !9
  %429 = getelementptr inbounds double, ptr %427, i64 %428
  %430 = load double, ptr %429, align 8, !tbaa !15
  store double %430, ptr %22, align 8, !tbaa !15
  %431 = load double, ptr %22, align 8, !tbaa !15
  %432 = fcmp oge double %431, 0.000000e+00
  br i1 %432, label %433, label %435

433:                                              ; preds = %420
  %434 = load double, ptr %22, align 8, !tbaa !15
  br label %438

435:                                              ; preds = %420
  %436 = load double, ptr %22, align 8, !tbaa !15
  %437 = fneg double %436
  br label %438

438:                                              ; preds = %435, %433
  %439 = phi double [ %434, %433 ], [ %437, %435 ]
  %440 = fmul double %426, %439
  %441 = load ptr, ptr %12, align 8, !tbaa !5
  %442 = load i64, ptr %32, align 8, !tbaa !9
  %443 = add nsw i64 %442, 1
  %444 = getelementptr inbounds double, ptr %441, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !15
  store double %445, ptr %23, align 8, !tbaa !15
  %446 = load double, ptr %23, align 8, !tbaa !15
  %447 = fcmp oge double %446, 0.000000e+00
  br i1 %447, label %448, label %450

448:                                              ; preds = %438
  %449 = load double, ptr %23, align 8, !tbaa !15
  br label %453

450:                                              ; preds = %438
  %451 = load double, ptr %23, align 8, !tbaa !15
  %452 = fneg double %451
  br label %453

453:                                              ; preds = %450, %448
  %454 = phi double [ %449, %448 ], [ %452, %450 ]
  %455 = load double, ptr %54, align 8, !tbaa !15
  %456 = call double @llvm.fmuladd.f64(double %440, double %454, double %455)
  %457 = fcmp ole double %425, %456
  br i1 %457, label %458, label %459

458:                                              ; preds = %453
  br label %466

459:                                              ; preds = %453
  br label %460

460:                                              ; preds = %459
  %461 = load i64, ptr %32, align 8, !tbaa !9
  %462 = add nsw i64 %461, 1
  store i64 %462, ptr %32, align 8, !tbaa !9
  br label %404, !llvm.loop !18

463:                                              ; preds = %404
  br label %464

464:                                              ; preds = %463, %395
  %465 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %465, ptr %32, align 8, !tbaa !9
  br label %466

466:                                              ; preds = %464, %458
  %467 = load i64, ptr %32, align 8, !tbaa !9
  %468 = load i64, ptr %48, align 8, !tbaa !9
  %469 = icmp slt i64 %467, %468
  br i1 %469, label %470, label %474

470:                                              ; preds = %466
  %471 = load ptr, ptr %13, align 8, !tbaa !5
  %472 = load i64, ptr %32, align 8, !tbaa !9
  %473 = getelementptr inbounds double, ptr %471, i64 %472
  store double 0.000000e+00, ptr %473, align 8, !tbaa !15
  br label %474

474:                                              ; preds = %470, %466
  %475 = load ptr, ptr %12, align 8, !tbaa !5
  %476 = load i64, ptr %31, align 8, !tbaa !9
  %477 = getelementptr inbounds double, ptr %475, i64 %476
  %478 = load double, ptr %477, align 8, !tbaa !15
  store double %478, ptr %33, align 8, !tbaa !15
  %479 = load i64, ptr %32, align 8, !tbaa !9
  %480 = load i64, ptr %31, align 8, !tbaa !9
  %481 = icmp eq i64 %479, %480
  br i1 %481, label %482, label %483

482:                                              ; preds = %474
  br label %728

483:                                              ; preds = %474
  %484 = load i64, ptr %32, align 8, !tbaa !9
  %485 = load i64, ptr %31, align 8, !tbaa !9
  %486 = add nsw i64 %485, 1
  %487 = icmp eq i64 %484, %486
  br i1 %487, label %488, label %566

488:                                              ; preds = %483
  %489 = load i64, ptr %59, align 8, !tbaa !9
  %490 = icmp sgt i64 %489, 0
  br i1 %490, label %491, label %534

491:                                              ; preds = %488
  %492 = load ptr, ptr %12, align 8, !tbaa !5
  %493 = load i64, ptr %31, align 8, !tbaa !9
  %494 = getelementptr inbounds double, ptr %492, i64 %493
  %495 = load ptr, ptr %13, align 8, !tbaa !5
  %496 = load i64, ptr %31, align 8, !tbaa !9
  %497 = getelementptr inbounds double, ptr %495, i64 %496
  %498 = load ptr, ptr %12, align 8, !tbaa !5
  %499 = load i64, ptr %31, align 8, !tbaa !9
  %500 = add nsw i64 %499, 1
  %501 = getelementptr inbounds double, ptr %498, i64 %500
  %502 = call i32 @dlaev2_(ptr noundef %494, ptr noundef %497, ptr noundef %501, ptr noundef %42, ptr noundef %43, ptr noundef %25, ptr noundef %35)
  %503 = load double, ptr %25, align 8, !tbaa !15
  %504 = load ptr, ptr %16, align 8, !tbaa !5
  %505 = load i64, ptr %31, align 8, !tbaa !9
  %506 = getelementptr inbounds double, ptr %504, i64 %505
  store double %503, ptr %506, align 8, !tbaa !15
  %507 = load double, ptr %35, align 8, !tbaa !15
  %508 = load ptr, ptr %16, align 8, !tbaa !5
  %509 = load ptr, ptr %11, align 8, !tbaa !5
  %510 = load i64, ptr %509, align 8, !tbaa !9
  %511 = sub nsw i64 %510, 1
  %512 = load i64, ptr %31, align 8, !tbaa !9
  %513 = add nsw i64 %511, %512
  %514 = getelementptr inbounds double, ptr %508, i64 %513
  store double %507, ptr %514, align 8, !tbaa !15
  %515 = load ptr, ptr %11, align 8, !tbaa !5
  %516 = load ptr, ptr %16, align 8, !tbaa !5
  %517 = load i64, ptr %31, align 8, !tbaa !9
  %518 = getelementptr inbounds double, ptr %516, i64 %517
  %519 = load ptr, ptr %16, align 8, !tbaa !5
  %520 = load ptr, ptr %11, align 8, !tbaa !5
  %521 = load i64, ptr %520, align 8, !tbaa !9
  %522 = sub nsw i64 %521, 1
  %523 = load i64, ptr %31, align 8, !tbaa !9
  %524 = add nsw i64 %522, %523
  %525 = getelementptr inbounds double, ptr %519, i64 %524
  %526 = load ptr, ptr %14, align 8, !tbaa !5
  %527 = load i64, ptr %31, align 8, !tbaa !9
  %528 = load i64, ptr %18, align 8, !tbaa !9
  %529 = mul nsw i64 %527, %528
  %530 = add nsw i64 %529, 1
  %531 = getelementptr inbounds %struct.doublecomplex, ptr %526, i64 %530
  %532 = load ptr, ptr %15, align 8, !tbaa !5
  %533 = call i32 @zlasr_(ptr noundef @.str.8, ptr noundef @.str.1, ptr noundef @.str.9, ptr noundef %515, ptr noundef @c__2, ptr noundef %518, ptr noundef %525, ptr noundef %531, ptr noundef %532)
  br label %546

534:                                              ; preds = %488
  %535 = load ptr, ptr %12, align 8, !tbaa !5
  %536 = load i64, ptr %31, align 8, !tbaa !9
  %537 = getelementptr inbounds double, ptr %535, i64 %536
  %538 = load ptr, ptr %13, align 8, !tbaa !5
  %539 = load i64, ptr %31, align 8, !tbaa !9
  %540 = getelementptr inbounds double, ptr %538, i64 %539
  %541 = load ptr, ptr %12, align 8, !tbaa !5
  %542 = load i64, ptr %31, align 8, !tbaa !9
  %543 = add nsw i64 %542, 1
  %544 = getelementptr inbounds double, ptr %541, i64 %543
  %545 = call i32 @dlae2_(ptr noundef %537, ptr noundef %540, ptr noundef %544, ptr noundef %42, ptr noundef %43)
  br label %546

546:                                              ; preds = %534, %491
  %547 = load double, ptr %42, align 8, !tbaa !15
  %548 = load ptr, ptr %12, align 8, !tbaa !5
  %549 = load i64, ptr %31, align 8, !tbaa !9
  %550 = getelementptr inbounds double, ptr %548, i64 %549
  store double %547, ptr %550, align 8, !tbaa !15
  %551 = load double, ptr %43, align 8, !tbaa !15
  %552 = load ptr, ptr %12, align 8, !tbaa !5
  %553 = load i64, ptr %31, align 8, !tbaa !9
  %554 = add nsw i64 %553, 1
  %555 = getelementptr inbounds double, ptr %552, i64 %554
  store double %551, ptr %555, align 8, !tbaa !15
  %556 = load ptr, ptr %13, align 8, !tbaa !5
  %557 = load i64, ptr %31, align 8, !tbaa !9
  %558 = getelementptr inbounds double, ptr %556, i64 %557
  store double 0.000000e+00, ptr %558, align 8, !tbaa !15
  %559 = load i64, ptr %31, align 8, !tbaa !9
  %560 = add nsw i64 %559, 2
  store i64 %560, ptr %31, align 8, !tbaa !9
  %561 = load i64, ptr %31, align 8, !tbaa !9
  %562 = load i64, ptr %48, align 8, !tbaa !9
  %563 = icmp sle i64 %561, %562
  br i1 %563, label %564, label %565

564:                                              ; preds = %546
  br label %395

565:                                              ; preds = %546
  br label %1091

566:                                              ; preds = %483
  %567 = load i64, ptr %49, align 8, !tbaa !9
  %568 = load i64, ptr %58, align 8, !tbaa !9
  %569 = icmp eq i64 %567, %568
  br i1 %569, label %570, label %571

570:                                              ; preds = %566
  br label %1091

571:                                              ; preds = %566
  %572 = load i64, ptr %49, align 8, !tbaa !9
  %573 = add nsw i64 %572, 1
  store i64 %573, ptr %49, align 8, !tbaa !9
  %574 = load ptr, ptr %12, align 8, !tbaa !5
  %575 = load i64, ptr %31, align 8, !tbaa !9
  %576 = add nsw i64 %575, 1
  %577 = getelementptr inbounds double, ptr %574, i64 %576
  %578 = load double, ptr %577, align 8, !tbaa !15
  %579 = load double, ptr %33, align 8, !tbaa !15
  %580 = fsub double %578, %579
  %581 = load ptr, ptr %13, align 8, !tbaa !5
  %582 = load i64, ptr %31, align 8, !tbaa !9
  %583 = getelementptr inbounds double, ptr %581, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !15
  %585 = fmul double %584, 2.000000e+00
  %586 = fdiv double %580, %585
  store double %586, ptr %27, align 8, !tbaa !15
  %587 = call double @dlapy2_(ptr noundef %27, ptr noundef @c_b41)
  store double %587, ptr %34, align 8, !tbaa !15
  %588 = load ptr, ptr %12, align 8, !tbaa !5
  %589 = load i64, ptr %32, align 8, !tbaa !9
  %590 = getelementptr inbounds double, ptr %588, i64 %589
  %591 = load double, ptr %590, align 8, !tbaa !15
  %592 = load double, ptr %33, align 8, !tbaa !15
  %593 = fsub double %591, %592
  %594 = load ptr, ptr %13, align 8, !tbaa !5
  %595 = load i64, ptr %31, align 8, !tbaa !9
  %596 = getelementptr inbounds double, ptr %594, i64 %595
  %597 = load double, ptr %596, align 8, !tbaa !15
  %598 = load double, ptr %27, align 8, !tbaa !15
  %599 = call double @d_sign(ptr noundef %34, ptr noundef %27)
  %600 = fadd double %598, %599
  %601 = fdiv double %597, %600
  %602 = fadd double %593, %601
  store double %602, ptr %27, align 8, !tbaa !15
  store double 1.000000e+00, ptr %35, align 8, !tbaa !15
  store double 1.000000e+00, ptr %25, align 8, !tbaa !15
  store double 0.000000e+00, ptr %33, align 8, !tbaa !15
  %603 = load i64, ptr %32, align 8, !tbaa !9
  %604 = sub nsw i64 %603, 1
  store i64 %604, ptr %40, align 8, !tbaa !9
  %605 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %605, ptr %20, align 8, !tbaa !9
  %606 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %606, ptr %28, align 8, !tbaa !9
  br label %607

607:                                              ; preds = %687, %571
  %608 = load i64, ptr %28, align 8, !tbaa !9
  %609 = load i64, ptr %20, align 8, !tbaa !9
  %610 = icmp sge i64 %608, %609
  br i1 %610, label %611, label %690

611:                                              ; preds = %607
  %612 = load double, ptr %35, align 8, !tbaa !15
  %613 = load ptr, ptr %13, align 8, !tbaa !5
  %614 = load i64, ptr %28, align 8, !tbaa !9
  %615 = getelementptr inbounds double, ptr %613, i64 %614
  %616 = load double, ptr %615, align 8, !tbaa !15
  %617 = fmul double %612, %616
  store double %617, ptr %26, align 8, !tbaa !15
  %618 = load double, ptr %25, align 8, !tbaa !15
  %619 = load ptr, ptr %13, align 8, !tbaa !5
  %620 = load i64, ptr %28, align 8, !tbaa !9
  %621 = getelementptr inbounds double, ptr %619, i64 %620
  %622 = load double, ptr %621, align 8, !tbaa !15
  %623 = fmul double %618, %622
  store double %623, ptr %24, align 8, !tbaa !15
  %624 = call i32 @dlartg_(ptr noundef %27, ptr noundef %26, ptr noundef %25, ptr noundef %35, ptr noundef %34)
  %625 = load i64, ptr %28, align 8, !tbaa !9
  %626 = load i64, ptr %32, align 8, !tbaa !9
  %627 = sub nsw i64 %626, 1
  %628 = icmp ne i64 %625, %627
  br i1 %628, label %629, label %635

629:                                              ; preds = %611
  %630 = load double, ptr %34, align 8, !tbaa !15
  %631 = load ptr, ptr %13, align 8, !tbaa !5
  %632 = load i64, ptr %28, align 8, !tbaa !9
  %633 = add nsw i64 %632, 1
  %634 = getelementptr inbounds double, ptr %631, i64 %633
  store double %630, ptr %634, align 8, !tbaa !15
  br label %635

635:                                              ; preds = %629, %611
  %636 = load ptr, ptr %12, align 8, !tbaa !5
  %637 = load i64, ptr %28, align 8, !tbaa !9
  %638 = add nsw i64 %637, 1
  %639 = getelementptr inbounds double, ptr %636, i64 %638
  %640 = load double, ptr %639, align 8, !tbaa !15
  %641 = load double, ptr %33, align 8, !tbaa !15
  %642 = fsub double %640, %641
  store double %642, ptr %27, align 8, !tbaa !15
  %643 = load ptr, ptr %12, 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 !15
  %647 = load double, ptr %27, align 8, !tbaa !15
  %648 = fsub double %646, %647
  %649 = load double, ptr %35, align 8, !tbaa !15
  %650 = load double, ptr %25, align 8, !tbaa !15
  %651 = fmul double %650, 2.000000e+00
  %652 = load double, ptr %24, align 8, !tbaa !15
  %653 = fmul double %651, %652
  %654 = call double @llvm.fmuladd.f64(double %648, double %649, double %653)
  store double %654, ptr %34, align 8, !tbaa !15
  %655 = load double, ptr %35, align 8, !tbaa !15
  %656 = load double, ptr %34, align 8, !tbaa !15
  %657 = fmul double %655, %656
  store double %657, ptr %33, align 8, !tbaa !15
  %658 = load double, ptr %27, align 8, !tbaa !15
  %659 = load double, ptr %33, align 8, !tbaa !15
  %660 = fadd double %658, %659
  %661 = load ptr, ptr %12, align 8, !tbaa !5
  %662 = load i64, ptr %28, align 8, !tbaa !9
  %663 = add nsw i64 %662, 1
  %664 = getelementptr inbounds double, ptr %661, i64 %663
  store double %660, ptr %664, align 8, !tbaa !15
  %665 = load double, ptr %25, align 8, !tbaa !15
  %666 = load double, ptr %34, align 8, !tbaa !15
  %667 = load double, ptr %24, align 8, !tbaa !15
  %668 = fneg double %667
  %669 = call double @llvm.fmuladd.f64(double %665, double %666, double %668)
  store double %669, ptr %27, align 8, !tbaa !15
  %670 = load i64, ptr %59, align 8, !tbaa !9
  %671 = icmp sgt i64 %670, 0
  br i1 %671, label %672, label %686

672:                                              ; preds = %635
  %673 = load double, ptr %25, align 8, !tbaa !15
  %674 = load ptr, ptr %16, align 8, !tbaa !5
  %675 = load i64, ptr %28, align 8, !tbaa !9
  %676 = getelementptr inbounds double, ptr %674, i64 %675
  store double %673, ptr %676, align 8, !tbaa !15
  %677 = load double, ptr %35, align 8, !tbaa !15
  %678 = fneg double %677
  %679 = load ptr, ptr %16, align 8, !tbaa !5
  %680 = load ptr, ptr %11, align 8, !tbaa !5
  %681 = load i64, ptr %680, align 8, !tbaa !9
  %682 = sub nsw i64 %681, 1
  %683 = load i64, ptr %28, align 8, !tbaa !9
  %684 = add nsw i64 %682, %683
  %685 = getelementptr inbounds double, ptr %679, i64 %684
  store double %678, ptr %685, align 8, !tbaa !15
  br label %686

686:                                              ; preds = %672, %635
  br label %687

687:                                              ; preds = %686
  %688 = load i64, ptr %28, align 8, !tbaa !9
  %689 = add nsw i64 %688, -1
  store i64 %689, ptr %28, align 8, !tbaa !9
  br label %607, !llvm.loop !19

690:                                              ; preds = %607
  %691 = load i64, ptr %59, align 8, !tbaa !9
  %692 = icmp sgt i64 %691, 0
  br i1 %692, label %693, label %717

693:                                              ; preds = %690
  %694 = load i64, ptr %32, align 8, !tbaa !9
  %695 = load i64, ptr %31, align 8, !tbaa !9
  %696 = sub nsw i64 %694, %695
  %697 = add nsw i64 %696, 1
  store i64 %697, ptr %38, align 8, !tbaa !9
  %698 = load ptr, ptr %11, align 8, !tbaa !5
  %699 = load ptr, ptr %16, align 8, !tbaa !5
  %700 = load i64, ptr %31, align 8, !tbaa !9
  %701 = getelementptr inbounds double, ptr %699, i64 %700
  %702 = load ptr, ptr %16, align 8, !tbaa !5
  %703 = load ptr, ptr %11, align 8, !tbaa !5
  %704 = load i64, ptr %703, align 8, !tbaa !9
  %705 = sub nsw i64 %704, 1
  %706 = load i64, ptr %31, align 8, !tbaa !9
  %707 = add nsw i64 %705, %706
  %708 = getelementptr inbounds double, ptr %702, i64 %707
  %709 = load ptr, ptr %14, align 8, !tbaa !5
  %710 = load i64, ptr %31, align 8, !tbaa !9
  %711 = load i64, ptr %18, align 8, !tbaa !9
  %712 = mul nsw i64 %710, %711
  %713 = add nsw i64 %712, 1
  %714 = getelementptr inbounds %struct.doublecomplex, ptr %709, i64 %713
  %715 = load ptr, ptr %15, align 8, !tbaa !5
  %716 = call i32 @zlasr_(ptr noundef @.str.8, ptr noundef @.str.1, ptr noundef @.str.9, ptr noundef %698, ptr noundef %38, ptr noundef %701, ptr noundef %708, ptr noundef %714, ptr noundef %715)
  br label %717

717:                                              ; preds = %693, %690
  %718 = load double, ptr %33, align 8, !tbaa !15
  %719 = load ptr, ptr %12, align 8, !tbaa !5
  %720 = load i64, ptr %31, align 8, !tbaa !9
  %721 = getelementptr inbounds double, ptr %719, i64 %720
  %722 = load double, ptr %721, align 8, !tbaa !15
  %723 = fsub double %722, %718
  store double %723, ptr %721, align 8, !tbaa !15
  %724 = load double, ptr %27, align 8, !tbaa !15
  %725 = load ptr, ptr %13, align 8, !tbaa !5
  %726 = load i64, ptr %31, align 8, !tbaa !9
  %727 = getelementptr inbounds double, ptr %725, i64 %726
  store double %724, ptr %727, align 8, !tbaa !15
  br label %395

728:                                              ; preds = %482
  %729 = load double, ptr %33, align 8, !tbaa !15
  %730 = load ptr, ptr %12, align 8, !tbaa !5
  %731 = load i64, ptr %31, align 8, !tbaa !9
  %732 = getelementptr inbounds double, ptr %730, i64 %731
  store double %729, ptr %732, align 8, !tbaa !15
  %733 = load i64, ptr %31, align 8, !tbaa !9
  %734 = add nsw i64 %733, 1
  store i64 %734, ptr %31, align 8, !tbaa !9
  %735 = load i64, ptr %31, align 8, !tbaa !9
  %736 = load i64, ptr %48, align 8, !tbaa !9
  %737 = icmp sle i64 %735, %736
  br i1 %737, label %738, label %739

738:                                              ; preds = %728
  br label %395

739:                                              ; preds = %728
  br label %1091

740:                                              ; preds = %390
  br label %741

741:                                              ; preds = %1089, %1068, %916, %740
  %742 = load i64, ptr %31, align 8, !tbaa !9
  %743 = load i64, ptr %48, align 8, !tbaa !9
  %744 = icmp ne i64 %742, %743
  br i1 %744, label %745, label %811

745:                                              ; preds = %741
  %746 = load i64, ptr %48, align 8, !tbaa !9
  %747 = add nsw i64 %746, 1
  store i64 %747, ptr %52, align 8, !tbaa !9
  %748 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %748, ptr %20, align 8, !tbaa !9
  %749 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %749, ptr %32, align 8, !tbaa !9
  br label %750

750:                                              ; preds = %807, %745
  %751 = load i64, ptr %32, align 8, !tbaa !9
  %752 = load i64, ptr %20, align 8, !tbaa !9
  %753 = icmp sge i64 %751, %752
  br i1 %753, label %754, label %810

754:                                              ; preds = %750
  %755 = load ptr, ptr %13, align 8, !tbaa !5
  %756 = load i64, ptr %32, align 8, !tbaa !9
  %757 = sub nsw i64 %756, 1
  %758 = getelementptr inbounds double, ptr %755, i64 %757
  %759 = load double, ptr %758, align 8, !tbaa !15
  store double %759, ptr %22, align 8, !tbaa !15
  %760 = load double, ptr %22, align 8, !tbaa !15
  %761 = fcmp oge double %760, 0.000000e+00
  br i1 %761, label %762, label %764

762:                                              ; preds = %754
  %763 = load double, ptr %22, align 8, !tbaa !15
  br label %767

764:                                              ; preds = %754
  %765 = load double, ptr %22, align 8, !tbaa !15
  %766 = fneg double %765
  br label %767

767:                                              ; preds = %764, %762
  %768 = phi double [ %763, %762 ], [ %766, %764 ]
  store double %768, ptr %23, align 8, !tbaa !15
  %769 = load double, ptr %23, align 8, !tbaa !15
  %770 = load double, ptr %23, align 8, !tbaa !15
  %771 = fmul double %769, %770
  store double %771, ptr %46, align 8, !tbaa !15
  %772 = load double, ptr %46, align 8, !tbaa !15
  %773 = load double, ptr %47, align 8, !tbaa !15
  %774 = load ptr, ptr %12, align 8, !tbaa !5
  %775 = load i64, ptr %32, align 8, !tbaa !9
  %776 = getelementptr inbounds double, ptr %774, i64 %775
  %777 = load double, ptr %776, align 8, !tbaa !15
  store double %777, ptr %22, align 8, !tbaa !15
  %778 = load double, ptr %22, align 8, !tbaa !15
  %779 = fcmp oge double %778, 0.000000e+00
  br i1 %779, label %780, label %782

780:                                              ; preds = %767
  %781 = load double, ptr %22, align 8, !tbaa !15
  br label %785

782:                                              ; preds = %767
  %783 = load double, ptr %22, align 8, !tbaa !15
  %784 = fneg double %783
  br label %785

785:                                              ; preds = %782, %780
  %786 = phi double [ %781, %780 ], [ %784, %782 ]
  %787 = fmul double %773, %786
  %788 = load ptr, ptr %12, align 8, !tbaa !5
  %789 = load i64, ptr %32, align 8, !tbaa !9
  %790 = sub nsw i64 %789, 1
  %791 = getelementptr inbounds double, ptr %788, i64 %790
  %792 = load double, ptr %791, align 8, !tbaa !15
  store double %792, ptr %23, align 8, !tbaa !15
  %793 = load double, ptr %23, align 8, !tbaa !15
  %794 = fcmp oge double %793, 0.000000e+00
  br i1 %794, label %795, label %797

795:                                              ; preds = %785
  %796 = load double, ptr %23, align 8, !tbaa !15
  br label %800

797:                                              ; preds = %785
  %798 = load double, ptr %23, align 8, !tbaa !15
  %799 = fneg double %798
  br label %800

800:                                              ; preds = %797, %795
  %801 = phi double [ %796, %795 ], [ %799, %797 ]
  %802 = load double, ptr %54, align 8, !tbaa !15
  %803 = call double @llvm.fmuladd.f64(double %787, double %801, double %802)
  %804 = fcmp ole double %772, %803
  br i1 %804, label %805, label %806

805:                                              ; preds = %800
  br label %813

806:                                              ; preds = %800
  br label %807

807:                                              ; preds = %806
  %808 = load i64, ptr %32, align 8, !tbaa !9
  %809 = add nsw i64 %808, -1
  store i64 %809, ptr %32, align 8, !tbaa !9
  br label %750, !llvm.loop !20

810:                                              ; preds = %750
  br label %811

811:                                              ; preds = %810, %741
  %812 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %812, ptr %32, align 8, !tbaa !9
  br label %813

813:                                              ; preds = %811, %805
  %814 = load i64, ptr %32, align 8, !tbaa !9
  %815 = load i64, ptr %48, align 8, !tbaa !9
  %816 = icmp sgt i64 %814, %815
  br i1 %816, label %817, label %822

817:                                              ; preds = %813
  %818 = load ptr, ptr %13, align 8, !tbaa !5
  %819 = load i64, ptr %32, align 8, !tbaa !9
  %820 = sub nsw i64 %819, 1
  %821 = getelementptr inbounds double, ptr %818, i64 %820
  store double 0.000000e+00, ptr %821, align 8, !tbaa !15
  br label %822

822:                                              ; preds = %817, %813
  %823 = load ptr, ptr %12, align 8, !tbaa !5
  %824 = load i64, ptr %31, align 8, !tbaa !9
  %825 = getelementptr inbounds double, ptr %823, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !15
  store double %826, ptr %33, align 8, !tbaa !15
  %827 = load i64, ptr %32, align 8, !tbaa !9
  %828 = load i64, ptr %31, align 8, !tbaa !9
  %829 = icmp eq i64 %827, %828
  br i1 %829, label %830, label %831

830:                                              ; preds = %822
  br label %1079

831:                                              ; preds = %822
  %832 = load i64, ptr %32, align 8, !tbaa !9
  %833 = load i64, ptr %31, align 8, !tbaa !9
  %834 = sub nsw i64 %833, 1
  %835 = icmp eq i64 %832, %834
  br i1 %835, label %836, label %918

836:                                              ; preds = %831
  %837 = load i64, ptr %59, align 8, !tbaa !9
  %838 = icmp sgt i64 %837, 0
  br i1 %838, label %839, label %884

839:                                              ; preds = %836
  %840 = load ptr, ptr %12, align 8, !tbaa !5
  %841 = load i64, ptr %31, align 8, !tbaa !9
  %842 = sub nsw i64 %841, 1
  %843 = getelementptr inbounds double, ptr %840, i64 %842
  %844 = load ptr, ptr %13, align 8, !tbaa !5
  %845 = load i64, ptr %31, align 8, !tbaa !9
  %846 = sub nsw i64 %845, 1
  %847 = getelementptr inbounds double, ptr %844, i64 %846
  %848 = load ptr, ptr %12, align 8, !tbaa !5
  %849 = load i64, ptr %31, align 8, !tbaa !9
  %850 = getelementptr inbounds double, ptr %848, i64 %849
  %851 = call i32 @dlaev2_(ptr noundef %843, ptr noundef %847, ptr noundef %850, ptr noundef %42, ptr noundef %43, ptr noundef %25, ptr noundef %35)
  %852 = load double, ptr %25, align 8, !tbaa !15
  %853 = load ptr, ptr %16, align 8, !tbaa !5
  %854 = load i64, ptr %32, align 8, !tbaa !9
  %855 = getelementptr inbounds double, ptr %853, i64 %854
  store double %852, ptr %855, align 8, !tbaa !15
  %856 = load double, ptr %35, align 8, !tbaa !15
  %857 = load ptr, ptr %16, align 8, !tbaa !5
  %858 = load ptr, ptr %11, align 8, !tbaa !5
  %859 = load i64, ptr %858, align 8, !tbaa !9
  %860 = sub nsw i64 %859, 1
  %861 = load i64, ptr %32, align 8, !tbaa !9
  %862 = add nsw i64 %860, %861
  %863 = getelementptr inbounds double, ptr %857, i64 %862
  store double %856, ptr %863, align 8, !tbaa !15
  %864 = load ptr, ptr %11, align 8, !tbaa !5
  %865 = load ptr, ptr %16, align 8, !tbaa !5
  %866 = load i64, ptr %32, align 8, !tbaa !9
  %867 = getelementptr inbounds double, ptr %865, i64 %866
  %868 = load ptr, ptr %16, align 8, !tbaa !5
  %869 = load ptr, ptr %11, align 8, !tbaa !5
  %870 = load i64, ptr %869, align 8, !tbaa !9
  %871 = sub nsw i64 %870, 1
  %872 = load i64, ptr %32, align 8, !tbaa !9
  %873 = add nsw i64 %871, %872
  %874 = getelementptr inbounds double, ptr %868, i64 %873
  %875 = load ptr, ptr %14, align 8, !tbaa !5
  %876 = load i64, ptr %31, align 8, !tbaa !9
  %877 = sub nsw i64 %876, 1
  %878 = load i64, ptr %18, align 8, !tbaa !9
  %879 = mul nsw i64 %877, %878
  %880 = add nsw i64 %879, 1
  %881 = getelementptr inbounds %struct.doublecomplex, ptr %875, i64 %880
  %882 = load ptr, ptr %15, align 8, !tbaa !5
  %883 = call i32 @zlasr_(ptr noundef @.str.8, ptr noundef @.str.1, ptr noundef @.str.10, ptr noundef %864, ptr noundef @c__2, ptr noundef %867, ptr noundef %874, ptr noundef %881, ptr noundef %882)
  br label %897

884:                                              ; preds = %836
  %885 = load ptr, ptr %12, align 8, !tbaa !5
  %886 = load i64, ptr %31, align 8, !tbaa !9
  %887 = sub nsw i64 %886, 1
  %888 = getelementptr inbounds double, ptr %885, i64 %887
  %889 = load ptr, ptr %13, align 8, !tbaa !5
  %890 = load i64, ptr %31, align 8, !tbaa !9
  %891 = sub nsw i64 %890, 1
  %892 = getelementptr inbounds double, ptr %889, i64 %891
  %893 = load ptr, ptr %12, align 8, !tbaa !5
  %894 = load i64, ptr %31, align 8, !tbaa !9
  %895 = getelementptr inbounds double, ptr %893, i64 %894
  %896 = call i32 @dlae2_(ptr noundef %888, ptr noundef %892, ptr noundef %895, ptr noundef %42, ptr noundef %43)
  br label %897

897:                                              ; preds = %884, %839
  %898 = load double, ptr %42, align 8, !tbaa !15
  %899 = load ptr, ptr %12, align 8, !tbaa !5
  %900 = load i64, ptr %31, align 8, !tbaa !9
  %901 = sub nsw i64 %900, 1
  %902 = getelementptr inbounds double, ptr %899, i64 %901
  store double %898, ptr %902, align 8, !tbaa !15
  %903 = load double, ptr %43, align 8, !tbaa !15
  %904 = load ptr, ptr %12, align 8, !tbaa !5
  %905 = load i64, ptr %31, align 8, !tbaa !9
  %906 = getelementptr inbounds double, ptr %904, i64 %905
  store double %903, ptr %906, align 8, !tbaa !15
  %907 = load ptr, ptr %13, align 8, !tbaa !5
  %908 = load i64, ptr %31, align 8, !tbaa !9
  %909 = sub nsw i64 %908, 1
  %910 = getelementptr inbounds double, ptr %907, i64 %909
  store double 0.000000e+00, ptr %910, align 8, !tbaa !15
  %911 = load i64, ptr %31, align 8, !tbaa !9
  %912 = add nsw i64 %911, -2
  store i64 %912, ptr %31, align 8, !tbaa !9
  %913 = load i64, ptr %31, align 8, !tbaa !9
  %914 = load i64, ptr %48, align 8, !tbaa !9
  %915 = icmp sge i64 %913, %914
  br i1 %915, label %916, label %917

916:                                              ; preds = %897
  br label %741

917:                                              ; preds = %897
  br label %1091

918:                                              ; preds = %831
  %919 = load i64, ptr %49, align 8, !tbaa !9
  %920 = load i64, ptr %58, align 8, !tbaa !9
  %921 = icmp eq i64 %919, %920
  br i1 %921, label %922, label %923

922:                                              ; preds = %918
  br label %1091

923:                                              ; preds = %918
  %924 = load i64, ptr %49, align 8, !tbaa !9
  %925 = add nsw i64 %924, 1
  store i64 %925, ptr %49, align 8, !tbaa !9
  %926 = load ptr, ptr %12, align 8, !tbaa !5
  %927 = load i64, ptr %31, align 8, !tbaa !9
  %928 = sub nsw i64 %927, 1
  %929 = getelementptr inbounds double, ptr %926, i64 %928
  %930 = load double, ptr %929, align 8, !tbaa !15
  %931 = load double, ptr %33, align 8, !tbaa !15
  %932 = fsub double %930, %931
  %933 = load ptr, ptr %13, align 8, !tbaa !5
  %934 = load i64, ptr %31, align 8, !tbaa !9
  %935 = sub nsw i64 %934, 1
  %936 = getelementptr inbounds double, ptr %933, i64 %935
  %937 = load double, ptr %936, align 8, !tbaa !15
  %938 = fmul double %937, 2.000000e+00
  %939 = fdiv double %932, %938
  store double %939, ptr %27, align 8, !tbaa !15
  %940 = call double @dlapy2_(ptr noundef %27, ptr noundef @c_b41)
  store double %940, ptr %34, align 8, !tbaa !15
  %941 = load ptr, ptr %12, align 8, !tbaa !5
  %942 = load i64, ptr %32, align 8, !tbaa !9
  %943 = getelementptr inbounds double, ptr %941, i64 %942
  %944 = load double, ptr %943, align 8, !tbaa !15
  %945 = load double, ptr %33, align 8, !tbaa !15
  %946 = fsub double %944, %945
  %947 = load ptr, ptr %13, align 8, !tbaa !5
  %948 = load i64, ptr %31, align 8, !tbaa !9
  %949 = sub nsw i64 %948, 1
  %950 = getelementptr inbounds double, ptr %947, i64 %949
  %951 = load double, ptr %950, align 8, !tbaa !15
  %952 = load double, ptr %27, align 8, !tbaa !15
  %953 = call double @d_sign(ptr noundef %34, ptr noundef %27)
  %954 = fadd double %952, %953
  %955 = fdiv double %951, %954
  %956 = fadd double %946, %955
  store double %956, ptr %27, align 8, !tbaa !15
  store double 1.000000e+00, ptr %35, align 8, !tbaa !15
  store double 1.000000e+00, ptr %25, align 8, !tbaa !15
  store double 0.000000e+00, ptr %33, align 8, !tbaa !15
  %957 = load i64, ptr %31, align 8, !tbaa !9
  %958 = sub nsw i64 %957, 1
  store i64 %958, ptr %39, align 8, !tbaa !9
  %959 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %959, ptr %20, align 8, !tbaa !9
  %960 = load i64, ptr %32, align 8, !tbaa !9
  store i64 %960, ptr %28, align 8, !tbaa !9
  br label %961

961:                                              ; preds = %1038, %923
  %962 = load i64, ptr %28, align 8, !tbaa !9
  %963 = load i64, ptr %20, align 8, !tbaa !9
  %964 = icmp sle i64 %962, %963
  br i1 %964, label %965, label %1041

965:                                              ; preds = %961
  %966 = load double, ptr %35, align 8, !tbaa !15
  %967 = load ptr, ptr %13, align 8, !tbaa !5
  %968 = load i64, ptr %28, align 8, !tbaa !9
  %969 = getelementptr inbounds double, ptr %967, i64 %968
  %970 = load double, ptr %969, align 8, !tbaa !15
  %971 = fmul double %966, %970
  store double %971, ptr %26, align 8, !tbaa !15
  %972 = load double, ptr %25, align 8, !tbaa !15
  %973 = load ptr, ptr %13, align 8, !tbaa !5
  %974 = load i64, ptr %28, align 8, !tbaa !9
  %975 = getelementptr inbounds double, ptr %973, i64 %974
  %976 = load double, ptr %975, align 8, !tbaa !15
  %977 = fmul double %972, %976
  store double %977, ptr %24, align 8, !tbaa !15
  %978 = call i32 @dlartg_(ptr noundef %27, ptr noundef %26, ptr noundef %25, ptr noundef %35, ptr noundef %34)
  %979 = load i64, ptr %28, align 8, !tbaa !9
  %980 = load i64, ptr %32, align 8, !tbaa !9
  %981 = icmp ne i64 %979, %980
  br i1 %981, label %982, label %988

982:                                              ; preds = %965
  %983 = load double, ptr %34, align 8, !tbaa !15
  %984 = load ptr, ptr %13, align 8, !tbaa !5
  %985 = load i64, ptr %28, align 8, !tbaa !9
  %986 = sub nsw i64 %985, 1
  %987 = getelementptr inbounds double, ptr %984, i64 %986
  store double %983, ptr %987, align 8, !tbaa !15
  br label %988

988:                                              ; preds = %982, %965
  %989 = load ptr, ptr %12, align 8, !tbaa !5
  %990 = load i64, ptr %28, align 8, !tbaa !9
  %991 = getelementptr inbounds double, ptr %989, i64 %990
  %992 = load double, ptr %991, align 8, !tbaa !15
  %993 = load double, ptr %33, align 8, !tbaa !15
  %994 = fsub double %992, %993
  store double %994, ptr %27, align 8, !tbaa !15
  %995 = load ptr, ptr %12, align 8, !tbaa !5
  %996 = load i64, ptr %28, align 8, !tbaa !9
  %997 = add nsw i64 %996, 1
  %998 = getelementptr inbounds double, ptr %995, i64 %997
  %999 = load double, ptr %998, align 8, !tbaa !15
  %1000 = load double, ptr %27, align 8, !tbaa !15
  %1001 = fsub double %999, %1000
  %1002 = load double, ptr %35, align 8, !tbaa !15
  %1003 = load double, ptr %25, align 8, !tbaa !15
  %1004 = fmul double %1003, 2.000000e+00
  %1005 = load double, ptr %24, align 8, !tbaa !15
  %1006 = fmul double %1004, %1005
  %1007 = call double @llvm.fmuladd.f64(double %1001, double %1002, double %1006)
  store double %1007, ptr %34, align 8, !tbaa !15
  %1008 = load double, ptr %35, align 8, !tbaa !15
  %1009 = load double, ptr %34, align 8, !tbaa !15
  %1010 = fmul double %1008, %1009
  store double %1010, ptr %33, align 8, !tbaa !15
  %1011 = load double, ptr %27, align 8, !tbaa !15
  %1012 = load double, ptr %33, align 8, !tbaa !15
  %1013 = fadd double %1011, %1012
  %1014 = load ptr, ptr %12, align 8, !tbaa !5
  %1015 = load i64, ptr %28, align 8, !tbaa !9
  %1016 = getelementptr inbounds double, ptr %1014, i64 %1015
  store double %1013, ptr %1016, align 8, !tbaa !15
  %1017 = load double, ptr %25, align 8, !tbaa !15
  %1018 = load double, ptr %34, align 8, !tbaa !15
  %1019 = load double, ptr %24, align 8, !tbaa !15
  %1020 = fneg double %1019
  %1021 = call double @llvm.fmuladd.f64(double %1017, double %1018, double %1020)
  store double %1021, ptr %27, align 8, !tbaa !15
  %1022 = load i64, ptr %59, align 8, !tbaa !9
  %1023 = icmp sgt i64 %1022, 0
  br i1 %1023, label %1024, label %1037

1024:                                             ; preds = %988
  %1025 = load double, ptr %25, align 8, !tbaa !15
  %1026 = load ptr, ptr %16, align 8, !tbaa !5
  %1027 = load i64, ptr %28, align 8, !tbaa !9
  %1028 = getelementptr inbounds double, ptr %1026, i64 %1027
  store double %1025, ptr %1028, align 8, !tbaa !15
  %1029 = load double, ptr %35, align 8, !tbaa !15
  %1030 = load ptr, ptr %16, align 8, !tbaa !5
  %1031 = load ptr, ptr %11, align 8, !tbaa !5
  %1032 = load i64, ptr %1031, align 8, !tbaa !9
  %1033 = sub nsw i64 %1032, 1
  %1034 = load i64, ptr %28, align 8, !tbaa !9
  %1035 = add nsw i64 %1033, %1034
  %1036 = getelementptr inbounds double, ptr %1030, i64 %1035
  store double %1029, ptr %1036, align 8, !tbaa !15
  br label %1037

1037:                                             ; preds = %1024, %988
  br label %1038

1038:                                             ; preds = %1037
  %1039 = load i64, ptr %28, align 8, !tbaa !9
  %1040 = add nsw i64 %1039, 1
  store i64 %1040, ptr %28, align 8, !tbaa !9
  br label %961, !llvm.loop !21

1041:                                             ; preds = %961
  %1042 = load i64, ptr %59, align 8, !tbaa !9
  %1043 = icmp sgt i64 %1042, 0
  br i1 %1043, label %1044, label %1068

1044:                                             ; preds = %1041
  %1045 = load i64, ptr %31, align 8, !tbaa !9
  %1046 = load i64, ptr %32, align 8, !tbaa !9
  %1047 = sub nsw i64 %1045, %1046
  %1048 = add nsw i64 %1047, 1
  store i64 %1048, ptr %38, align 8, !tbaa !9
  %1049 = load ptr, ptr %11, align 8, !tbaa !5
  %1050 = load ptr, ptr %16, align 8, !tbaa !5
  %1051 = load i64, ptr %32, align 8, !tbaa !9
  %1052 = getelementptr inbounds double, ptr %1050, i64 %1051
  %1053 = load ptr, ptr %16, align 8, !tbaa !5
  %1054 = load ptr, ptr %11, align 8, !tbaa !5
  %1055 = load i64, ptr %1054, align 8, !tbaa !9
  %1056 = sub nsw i64 %1055, 1
  %1057 = load i64, ptr %32, align 8, !tbaa !9
  %1058 = add nsw i64 %1056, %1057
  %1059 = getelementptr inbounds double, ptr %1053, i64 %1058
  %1060 = load ptr, ptr %14, align 8, !tbaa !5
  %1061 = load i64, ptr %32, align 8, !tbaa !9
  %1062 = load i64, ptr %18, align 8, !tbaa !9
  %1063 = mul nsw i64 %1061, %1062
  %1064 = add nsw i64 %1063, 1
  %1065 = getelementptr inbounds %struct.doublecomplex, ptr %1060, i64 %1064
  %1066 = load ptr, ptr %15, align 8, !tbaa !5
  %1067 = call i32 @zlasr_(ptr noundef @.str.8, ptr noundef @.str.1, ptr noundef @.str.10, ptr noundef %1049, ptr noundef %38, ptr noundef %1052, ptr noundef %1059, ptr noundef %1065, ptr noundef %1066)
  br label %1068

1068:                                             ; preds = %1044, %1041
  %1069 = load double, ptr %33, align 8, !tbaa !15
  %1070 = load ptr, ptr %12, align 8, !tbaa !5
  %1071 = load i64, ptr %31, align 8, !tbaa !9
  %1072 = getelementptr inbounds double, ptr %1070, i64 %1071
  %1073 = load double, ptr %1072, align 8, !tbaa !15
  %1074 = fsub double %1073, %1069
  store double %1074, ptr %1072, align 8, !tbaa !15
  %1075 = load double, ptr %27, align 8, !tbaa !15
  %1076 = load ptr, ptr %13, align 8, !tbaa !5
  %1077 = load i64, ptr %39, align 8, !tbaa !9
  %1078 = getelementptr inbounds double, ptr %1076, i64 %1077
  store double %1075, ptr %1078, align 8, !tbaa !15
  br label %741

1079:                                             ; preds = %830
  %1080 = load double, ptr %33, align 8, !tbaa !15
  %1081 = load ptr, ptr %12, align 8, !tbaa !5
  %1082 = load i64, ptr %31, align 8, !tbaa !9
  %1083 = getelementptr inbounds double, ptr %1081, i64 %1082
  store double %1080, ptr %1083, align 8, !tbaa !15
  %1084 = load i64, ptr %31, align 8, !tbaa !9
  %1085 = add nsw i64 %1084, -1
  store i64 %1085, ptr %31, align 8, !tbaa !9
  %1086 = load i64, ptr %31, align 8, !tbaa !9
  %1087 = load i64, ptr %48, align 8, !tbaa !9
  %1088 = icmp sge i64 %1086, %1087
  br i1 %1088, label %1089, label %1090

1089:                                             ; preds = %1079
  br label %741

1090:                                             ; preds = %1079
  br label %1091

1091:                                             ; preds = %1090, %922, %917, %739, %570, %565
  %1092 = load i64, ptr %53, align 8, !tbaa !9
  %1093 = icmp eq i64 %1092, 1
  br i1 %1093, label %1094, label %1114

1094:                                             ; preds = %1091
  %1095 = load i64, ptr %56, align 8, !tbaa !9
  %1096 = load i64, ptr %45, align 8, !tbaa !9
  %1097 = sub nsw i64 %1095, %1096
  %1098 = add nsw i64 %1097, 1
  store i64 %1098, ptr %20, align 8, !tbaa !9
  %1099 = load ptr, ptr %12, align 8, !tbaa !5
  %1100 = load i64, ptr %45, align 8, !tbaa !9
  %1101 = getelementptr inbounds double, ptr %1099, i64 %1100
  %1102 = load ptr, ptr %11, align 8, !tbaa !5
  %1103 = load ptr, ptr %17, align 8, !tbaa !5
  %1104 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %60, ptr noundef %50, ptr noundef %20, ptr noundef @c__1, ptr noundef %1101, ptr noundef %1102, ptr noundef %1103)
  %1105 = load i64, ptr %56, align 8, !tbaa !9
  %1106 = load i64, ptr %45, align 8, !tbaa !9
  %1107 = sub nsw i64 %1105, %1106
  store i64 %1107, ptr %20, align 8, !tbaa !9
  %1108 = load ptr, ptr %13, align 8, !tbaa !5
  %1109 = load i64, ptr %45, align 8, !tbaa !9
  %1110 = getelementptr inbounds double, ptr %1108, i64 %1109
  %1111 = load ptr, ptr %11, align 8, !tbaa !5
  %1112 = load ptr, ptr %17, align 8, !tbaa !5
  %1113 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %60, ptr noundef %50, ptr noundef %20, ptr noundef @c__1, ptr noundef %1110, ptr noundef %1111, ptr noundef %1112)
  br label %1138

1114:                                             ; preds = %1091
  %1115 = load i64, ptr %53, align 8, !tbaa !9
  %1116 = icmp eq i64 %1115, 2
  br i1 %1116, label %1117, label %1137

1117:                                             ; preds = %1114
  %1118 = load i64, ptr %56, align 8, !tbaa !9
  %1119 = load i64, ptr %45, align 8, !tbaa !9
  %1120 = sub nsw i64 %1118, %1119
  %1121 = add nsw i64 %1120, 1
  store i64 %1121, ptr %20, align 8, !tbaa !9
  %1122 = load ptr, ptr %12, align 8, !tbaa !5
  %1123 = load i64, ptr %45, align 8, !tbaa !9
  %1124 = getelementptr inbounds double, ptr %1122, i64 %1123
  %1125 = load ptr, ptr %11, align 8, !tbaa !5
  %1126 = load ptr, ptr %17, align 8, !tbaa !5
  %1127 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %57, ptr noundef %50, ptr noundef %20, ptr noundef @c__1, ptr noundef %1124, ptr noundef %1125, ptr noundef %1126)
  %1128 = load i64, ptr %56, align 8, !tbaa !9
  %1129 = load i64, ptr %45, align 8, !tbaa !9
  %1130 = sub nsw i64 %1128, %1129
  store i64 %1130, ptr %20, align 8, !tbaa !9
  %1131 = load ptr, ptr %13, align 8, !tbaa !5
  %1132 = load i64, ptr %45, align 8, !tbaa !9
  %1133 = getelementptr inbounds double, ptr %1131, i64 %1132
  %1134 = load ptr, ptr %11, align 8, !tbaa !5
  %1135 = load ptr, ptr %17, align 8, !tbaa !5
  %1136 = call i32 @dlascl_(ptr noundef @.str.7, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %57, ptr noundef %50, ptr noundef %20, ptr noundef @c__1, ptr noundef %1133, ptr noundef %1134, ptr noundef %1135)
  br label %1137

1137:                                             ; preds = %1117, %1114
  br label %1138

1138:                                             ; preds = %1137, %1094
  %1139 = load i64, ptr %49, align 8, !tbaa !9
  %1140 = load i64, ptr %58, align 8, !tbaa !9
  %1141 = icmp eq i64 %1139, %1140
  br i1 %1141, label %1142, label %1165

1142:                                             ; preds = %1138
  %1143 = load ptr, ptr %11, align 8, !tbaa !5
  %1144 = load i64, ptr %1143, align 8, !tbaa !9
  %1145 = sub nsw i64 %1144, 1
  store i64 %1145, ptr %20, align 8, !tbaa !9
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %1146

1146:                                             ; preds = %1161, %1142
  %1147 = load i64, ptr %28, align 8, !tbaa !9
  %1148 = load i64, ptr %20, align 8, !tbaa !9
  %1149 = icmp sle i64 %1147, %1148
  br i1 %1149, label %1150, label %1164

1150:                                             ; preds = %1146
  %1151 = load ptr, ptr %13, align 8, !tbaa !5
  %1152 = load i64, ptr %28, align 8, !tbaa !9
  %1153 = getelementptr inbounds double, ptr %1151, i64 %1152
  %1154 = load double, ptr %1153, align 8, !tbaa !15
  %1155 = fcmp une double %1154, 0.000000e+00
  br i1 %1155, label %1156, label %1160

1156:                                             ; preds = %1150
  %1157 = load ptr, ptr %17, align 8, !tbaa !5
  %1158 = load i64, ptr %1157, align 8, !tbaa !9
  %1159 = add nsw i64 %1158, 1
  store i64 %1159, ptr %1157, align 8, !tbaa !9
  br label %1160

1160:                                             ; preds = %1156, %1150
  br label %1161

1161:                                             ; preds = %1160
  %1162 = load i64, ptr %28, align 8, !tbaa !9
  %1163 = add nsw i64 %1162, 1
  store i64 %1163, ptr %28, align 8, !tbaa !9
  br label %1146, !llvm.loop !22

1164:                                             ; preds = %1146
  store i32 0, ptr %9, align 4
  store i32 1, ptr %61, align 4
  br label %1250

1165:                                             ; preds = %1138
  br label %195

1166:                                             ; preds = %200
  %1167 = load i64, ptr %59, align 8, !tbaa !9
  %1168 = icmp eq i64 %1167, 0
  br i1 %1168, label %1169, label %1175

1169:                                             ; preds = %1166
  %1170 = load ptr, ptr %11, align 8, !tbaa !5
  %1171 = load ptr, ptr %12, align 8, !tbaa !5
  %1172 = getelementptr inbounds double, ptr %1171, i64 1
  %1173 = load ptr, ptr %17, align 8, !tbaa !5
  %1174 = call i32 @dlasrt_(ptr noundef @.str.2, ptr noundef %1170, ptr noundef %1172, ptr noundef %1173)
  br label %1249

1175:                                             ; preds = %1166
  %1176 = load ptr, ptr %11, align 8, !tbaa !5
  %1177 = load i64, ptr %1176, align 8, !tbaa !9
  store i64 %1177, ptr %20, align 8, !tbaa !9
  store i64 2, ptr %37, align 8, !tbaa !9
  br label %1178

1178:                                             ; preds = %1245, %1175
  %1179 = load i64, ptr %37, align 8, !tbaa !9
  %1180 = load i64, ptr %20, align 8, !tbaa !9
  %1181 = icmp sle i64 %1179, %1180
  br i1 %1181, label %1182, label %1248

1182:                                             ; preds = %1178
  %1183 = load i64, ptr %37, align 8, !tbaa !9
  %1184 = sub nsw i64 %1183, 1
  store i64 %1184, ptr %28, align 8, !tbaa !9
  %1185 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %1185, ptr %30, align 8, !tbaa !9
  %1186 = load ptr, ptr %12, align 8, !tbaa !5
  %1187 = load i64, ptr %28, align 8, !tbaa !9
  %1188 = getelementptr inbounds double, ptr %1186, i64 %1187
  %1189 = load double, ptr %1188, align 8, !tbaa !15
  store double %1189, ptr %33, align 8, !tbaa !15
  %1190 = load ptr, ptr %11, align 8, !tbaa !5
  %1191 = load i64, ptr %1190, align 8, !tbaa !9
  store i64 %1191, ptr %21, align 8, !tbaa !9
  %1192 = load i64, ptr %37, align 8, !tbaa !9
  store i64 %1192, ptr %29, align 8, !tbaa !9
  br label %1193

1193:                                             ; preds = %1211, %1182
  %1194 = load i64, ptr %29, align 8, !tbaa !9
  %1195 = load i64, ptr %21, align 8, !tbaa !9
  %1196 = icmp sle i64 %1194, %1195
  br i1 %1196, label %1197, label %1214

1197:                                             ; preds = %1193
  %1198 = load ptr, ptr %12, align 8, !tbaa !5
  %1199 = load i64, ptr %29, align 8, !tbaa !9
  %1200 = getelementptr inbounds double, ptr %1198, i64 %1199
  %1201 = load double, ptr %1200, align 8, !tbaa !15
  %1202 = load double, ptr %33, align 8, !tbaa !15
  %1203 = fcmp olt double %1201, %1202
  br i1 %1203, label %1204, label %1210

1204:                                             ; preds = %1197
  %1205 = load i64, ptr %29, align 8, !tbaa !9
  store i64 %1205, ptr %30, align 8, !tbaa !9
  %1206 = load ptr, ptr %12, align 8, !tbaa !5
  %1207 = load i64, ptr %29, align 8, !tbaa !9
  %1208 = getelementptr inbounds double, ptr %1206, i64 %1207
  %1209 = load double, ptr %1208, align 8, !tbaa !15
  store double %1209, ptr %33, align 8, !tbaa !15
  br label %1210

1210:                                             ; preds = %1204, %1197
  br label %1211

1211:                                             ; preds = %1210
  %1212 = load i64, ptr %29, align 8, !tbaa !9
  %1213 = add nsw i64 %1212, 1
  store i64 %1213, ptr %29, align 8, !tbaa !9
  br label %1193, !llvm.loop !23

1214:                                             ; preds = %1193
  %1215 = load i64, ptr %30, align 8, !tbaa !9
  %1216 = load i64, ptr %28, align 8, !tbaa !9
  %1217 = icmp ne i64 %1215, %1216
  br i1 %1217, label %1218, label %1244

1218:                                             ; preds = %1214
  %1219 = load ptr, ptr %12, align 8, !tbaa !5
  %1220 = load i64, ptr %28, align 8, !tbaa !9
  %1221 = getelementptr inbounds double, ptr %1219, i64 %1220
  %1222 = load double, ptr %1221, align 8, !tbaa !15
  %1223 = load ptr, ptr %12, align 8, !tbaa !5
  %1224 = load i64, ptr %30, align 8, !tbaa !9
  %1225 = getelementptr inbounds double, ptr %1223, i64 %1224
  store double %1222, ptr %1225, align 8, !tbaa !15
  %1226 = load double, ptr %33, align 8, !tbaa !15
  %1227 = load ptr, ptr %12, align 8, !tbaa !5
  %1228 = load i64, ptr %28, align 8, !tbaa !9
  %1229 = getelementptr inbounds double, ptr %1227, i64 %1228
  store double %1226, ptr %1229, align 8, !tbaa !15
  %1230 = load ptr, ptr %11, align 8, !tbaa !5
  %1231 = load ptr, ptr %14, align 8, !tbaa !5
  %1232 = load i64, ptr %28, align 8, !tbaa !9
  %1233 = load i64, ptr %18, align 8, !tbaa !9
  %1234 = mul nsw i64 %1232, %1233
  %1235 = add nsw i64 %1234, 1
  %1236 = getelementptr inbounds %struct.doublecomplex, ptr %1231, i64 %1235
  %1237 = load ptr, ptr %14, align 8, !tbaa !5
  %1238 = load i64, ptr %30, align 8, !tbaa !9
  %1239 = load i64, ptr %18, align 8, !tbaa !9
  %1240 = mul nsw i64 %1238, %1239
  %1241 = add nsw i64 %1240, 1
  %1242 = getelementptr inbounds %struct.doublecomplex, ptr %1237, i64 %1241
  %1243 = call i32 @f2c_zswap(ptr noundef %1230, ptr noundef %1236, ptr noundef @c__1, ptr noundef %1242, ptr noundef @c__1)
  br label %1244

1244:                                             ; preds = %1218, %1214
  br label %1245

1245:                                             ; preds = %1244
  %1246 = load i64, ptr %37, align 8, !tbaa !9
  %1247 = add nsw i64 %1246, 1
  store i64 %1247, ptr %37, align 8, !tbaa !9
  br label %1178, !llvm.loop !24

1248:                                             ; preds = %1178
  br label %1249

1249:                                             ; preds = %1248, %1169
  store i32 0, ptr %9, align 4
  store i32 1, ptr %61, align 4
  br label %1250

1250:                                             ; preds = %1249, %1164, %161, %142, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  %1251 = load i32, ptr %9, align 4
  ret i32 %1251
}

; 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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

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

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

declare i32 @dlascl_(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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

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

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

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

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

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

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

declare i32 @f2c_zswap(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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{!13, !13, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !17}


; 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 [7 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 [5 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@c__1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i64, align 8
@c_b41 = external hidden global double, align 8
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1

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

28:                                               ; preds = %8
  %29 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not522 = icmp eq i64 %29, 0
  br i1 %.not522, label %30, label %.thread

30:                                               ; preds = %28
  %31 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not523 = icmp eq i64 %31, 0
  br i1 %.not523, label %.thread547.sink.split, label %.thread

.thread:                                          ; preds = %28, %8, %30
  %32 = phi i1 [ true, %30 ], [ false, %8 ], [ false, %28 ]
  %33 = load i64, ptr %1, align 8, !tbaa !5
  %34 = icmp slt i64 %33, 0
  br i1 %34, label %.thread547.sink.split, label %35

35:                                               ; preds = %.thread
  %36 = load i64, ptr %5, align 8, !tbaa !5
  %37 = icmp slt i64 %36, 1
  %38 = icmp ugt i64 %33, %36
  %or.cond = and i1 %.not.not, %38
  %or.cond765 = or i1 %37, %or.cond
  br i1 %or.cond765, label %.thread547.sink.split, label %39

39:                                               ; preds = %35
  %.pr = load i64, ptr %7, align 8, !tbaa !5
  %.not524 = icmp eq i64 %.pr, 0
  br i1 %.not524, label %43, label %.thread547

.thread547.sink.split:                            ; preds = %35, %.thread, %30
  %.sink = phi i64 [ -1, %30 ], [ -2, %.thread ], [ -6, %35 ]
  store i64 %.sink, ptr %7, align 8, !tbaa !5
  br label %.thread547

.thread547:                                       ; preds = %.thread547.sink.split, %39
  %40 = phi i64 [ %.pr, %39 ], [ %.sink, %.thread547.sink.split ]
  %41 = sub nsw i64 0, %40
  store i64 %41, ptr %9, align 8, !tbaa !5
  %42 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9) #5
  br label %.loopexit

43:                                               ; preds = %39
  switch i64 %33, label %46 [
    i64 0, label %.loopexit
    i64 1, label %44
  ]

44:                                               ; preds = %43
  br i1 %32, label %45, label %.loopexit

45:                                               ; preds = %44
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %4, align 8, !tbaa !9
  br label %.loopexit

46:                                               ; preds = %43
  %47 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #5
  %48 = fmul double %47, %47
  %49 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #5
  %50 = fdiv double 1.000000e+00, %49
  %51 = tail call double @sqrt(double noundef %50) #5
  %52 = fdiv double %51, 3.000000e+00
  store double %52, ptr %20, align 8, !tbaa !9
  %53 = tail call double @sqrt(double noundef %49) #5
  %54 = fdiv double %53, %48
  store double %54, ptr %19, align 8, !tbaa !9
  br i1 %32, label %55, label %57

55:                                               ; preds = %46
  %56 = tail call i32 @zlaset_(ptr noundef nonnull @.str.6, ptr noundef nonnull %1, ptr noundef nonnull %1, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %4, ptr noundef nonnull %5) #5
  br label %57

57:                                               ; preds = %55, %46
  %58 = load i64, ptr %1, align 8, !tbaa !5
  %59 = mul i64 %58, 30
  %60 = add nsw i64 %58, -1
  %invariant.gep = getelementptr i8, ptr %3, i64 -16
  %invariant.gep618 = getelementptr i8, ptr %6, i64 -16
  %invariant.gep620 = getelementptr i8, ptr %25, i64 16
  br label %.outer566

.outer566:                                        ; preds = %398, %57
  %.0495.ph = phi i64 [ %94, %398 ], [ 1, %57 ]
  %.0483.ph = phi i64 [ %.3, %398 ], [ 0, %57 ]
  %61 = load i64, ptr %1, align 8, !tbaa !5
  %62 = icmp sgt i64 %.0495.ph, %61
  br i1 %62, label %.outer566._crit_edge, label %.lr.ph605

.lr.ph605:                                        ; preds = %.outer566, %.backedge
  %63 = phi i64 [ %96, %.backedge ], [ %61, %.outer566 ]
  %.0495602 = phi i64 [ %94, %.backedge ], [ %.0495.ph, %.outer566 ]
  %64 = icmp sgt i64 %.0495602, 1
  br i1 %64, label %65, label %66

65:                                               ; preds = %.lr.ph605
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0495602
  store double 0.000000e+00, ptr %gep, align 8, !tbaa !9
  br label %66

66:                                               ; preds = %65, %.lr.ph605
  %.not525.not = icmp slt i64 %.0495602, %58
  br i1 %.not525.not, label %.lr.ph.preheader, label %.loopexit565

.lr.ph.preheader:                                 ; preds = %66
  store i64 %60, ptr %9, align 8, !tbaa !5
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %91
  %.0500601 = phi i64 [ %92, %91 ], [ %.0495602, %.lr.ph.preheader ]
  %67 = getelementptr inbounds double, ptr %22, i64 %.0500601
  %68 = load double, ptr %67, align 8, !tbaa !9
  %69 = fcmp oeq double %68, 0.000000e+00
  br i1 %69, label %.loopexit565, label %70

70:                                               ; preds = %.lr.ph
  %71 = fcmp oge double %68, 0.000000e+00
  %72 = fneg double %68
  %73 = select i1 %71, double %68, double %72
  %74 = getelementptr inbounds double, ptr %21, i64 %.0500601
  %75 = load double, ptr %74, align 8, !tbaa !9
  %76 = fcmp oge double %75, 0.000000e+00
  %77 = fneg double %75
  %78 = select i1 %76, double %75, double %77
  %79 = call double @sqrt(double noundef %78) #5
  %80 = getelementptr double, ptr %2, i64 %.0500601
  %81 = load double, ptr %80, align 8, !tbaa !9
  %82 = fcmp oge double %81, 0.000000e+00
  %83 = fneg double %81
  %84 = select i1 %82, double %81, double %83
  %85 = call double @sqrt(double noundef %84) #5
  %86 = fmul double %79, %85
  %87 = fmul double %47, %86
  %88 = fcmp ugt double %73, %87
  br i1 %88, label %91, label %89

89:                                               ; preds = %70
  %90 = getelementptr inbounds double, ptr %22, i64 %.0500601
  store double 0.000000e+00, ptr %90, align 8, !tbaa !9
  br label %.loopexit565

91:                                               ; preds = %70
  %92 = add nsw i64 %.0500601, 1
  %93 = load i64, ptr %9, align 8, !tbaa !5
  %.not526.not = icmp slt i64 %.0500601, %93
  br i1 %.not526.not, label %.lr.ph, label %.loopexit564.loopexit, !llvm.loop !11

.loopexit564.loopexit:                            ; preds = %91
  %.pre = load i64, ptr %1, align 8, !tbaa !5
  br label %.loopexit565

.loopexit565:                                     ; preds = %.lr.ph, %66, %.loopexit564.loopexit, %89
  %.1501 = phi i64 [ %.0500601, %89 ], [ %.pre, %.loopexit564.loopexit ], [ %63, %66 ], [ %.0500601, %.lr.ph ]
  %94 = add nsw i64 %.1501, 1
  %95 = icmp eq i64 %.1501, %.0495602
  br i1 %95, label %.backedge, label %97

.backedge:                                        ; preds = %.loopexit565, %97
  %96 = load i64, ptr %1, align 8, !tbaa !5
  %.not670 = icmp slt i64 %.1501, %96
  br i1 %.not670, label %.lr.ph605, label %.outer566._crit_edge

97:                                               ; preds = %.loopexit565
  %98 = sub nsw i64 %.1501, %.0495602
  %99 = add nsw i64 %98, 1
  store i64 %99, ptr %9, align 8, !tbaa !5
  %100 = getelementptr inbounds double, ptr %21, i64 %.0495602
  %101 = getelementptr inbounds double, ptr %22, i64 %.0495602
  %102 = call double @dlanst_(ptr noundef nonnull @.str.2, ptr noundef nonnull %9, ptr noundef nonnull %100, ptr noundef nonnull %101) #5
  store double %102, ptr %18, align 8, !tbaa !9
  %103 = fcmp oeq double %102, 0.000000e+00
  br i1 %103, label %.backedge, label %104

104:                                              ; preds = %97
  %105 = load double, ptr %20, align 8, !tbaa !9
  %106 = fcmp ule double %102, %105
  br i1 %106, label %107, label %.sink.split

107:                                              ; preds = %104
  %108 = load double, ptr %19, align 8, !tbaa !9
  %109 = fcmp olt double %102, %108
  br i1 %109, label %.sink.split, label %112

.sink.split:                                      ; preds = %107, %104
  %.sink804 = phi ptr [ %20, %104 ], [ %19, %107 ]
  store i64 %99, ptr %9, align 8, !tbaa !5
  %110 = call i32 @dlascl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %18, ptr noundef nonnull %.sink804, ptr noundef nonnull %9, ptr noundef nonnull @c__1, ptr noundef nonnull %100, ptr noundef nonnull %1, ptr noundef nonnull %7) #5
  store i64 %98, ptr %9, align 8, !tbaa !5
  %111 = call i32 @dlascl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %18, ptr noundef nonnull %.sink804, ptr noundef nonnull %9, ptr noundef nonnull @c__1, ptr noundef nonnull %101, ptr noundef nonnull %1, ptr noundef nonnull %7) #5
  br label %112

112:                                              ; preds = %.sink.split, %107
  %113 = phi i1 [ false, %107 ], [ %106, %.sink.split ]
  %114 = getelementptr inbounds double, ptr %21, i64 %.1501
  %115 = load double, ptr %114, align 8, !tbaa !9
  %116 = fcmp oge double %115, 0.000000e+00
  %117 = fneg double %115
  %118 = select i1 %116, double %115, double %117
  %119 = load double, ptr %100, align 8, !tbaa !9
  %120 = fcmp oge double %119, 0.000000e+00
  %121 = fneg double %119
  %122 = select i1 %120, double %119, double %121
  %123 = fcmp olt double %118, %122
  %.0491 = select i1 %123, i64 %.1501, i64 %.0495602
  %.0484 = select i1 %123, i64 %.0495602, i64 %.1501
  %124 = icmp sgt i64 %.0484, %.0491
  br i1 %124, label %.preheader, label %.preheader560

.preheader560:                                    ; preds = %112
  %125 = add nsw i64 %.0484, 1
  br label %.outer562

.preheader:                                       ; preds = %112
  %126 = add nsw i64 %.0484, -1
  br label %.outer

.outer:                                           ; preds = %.outer.backedge, %.preheader
  %.1492.ph = phi i64 [ %.0491, %.preheader ], [ %.1492.ph.be, %.outer.backedge ]
  %.1.ph = phi i64 [ %.0483.ph, %.preheader ], [ %.1, %.outer.backedge ]
  %.not533 = icmp eq i64 %.1492.ph, %.0484
  %127 = getelementptr inbounds double, ptr %21, i64 %.1492.ph
  %invariant.gep641 = getelementptr double, ptr %invariant.gep618, i64 %.1492.ph
  %.not534.not626 = icmp slt i64 %.1492.ph, %.0484
  %128 = add nsw i64 %.1492.ph, 1
  %129 = getelementptr double, ptr %2, i64 %.1492.ph
  %130 = getelementptr inbounds double, ptr %22, i64 %.1492.ph
  %131 = getelementptr inbounds double, ptr %26, i64 %.1492.ph
  %132 = mul nsw i64 %.1492.ph, %23
  %gep644 = getelementptr %struct.doublecomplex, ptr %invariant.gep620, i64 %132
  br label %133

133:                                              ; preds = %.outer, %257
  %.1 = phi i64 [ %178, %257 ], [ %.1.ph, %.outer ]
  br i1 %.not533, label %.thread550, label %134

134:                                              ; preds = %133
  store i64 %126, ptr %9, align 8, !tbaa !5
  br i1 %.not534.not626, label %.lr.ph629, label %.thread550.thread

.lr.ph629:                                        ; preds = %134, %154
  %.2502627 = phi i64 [ %155, %154 ], [ %.1492.ph, %134 ]
  %135 = getelementptr inbounds double, ptr %22, i64 %.2502627
  %136 = load double, ptr %135, align 8, !tbaa !9
  %137 = fcmp oge double %136, 0.000000e+00
  %138 = fneg double %136
  %139 = select i1 %137, double %136, double %138
  %140 = fmul double %139, %139
  %141 = getelementptr inbounds double, ptr %21, i64 %.2502627
  %142 = load double, ptr %141, align 8, !tbaa !9
  %143 = fcmp oge double %142, 0.000000e+00
  %144 = fneg double %142
  %145 = select i1 %143, double %142, double %144
  %146 = fmul double %48, %145
  %147 = getelementptr double, ptr %2, i64 %.2502627
  %148 = load double, ptr %147, align 8, !tbaa !9
  %149 = fcmp oge double %148, 0.000000e+00
  %150 = fneg double %148
  %151 = select i1 %149, double %148, double %150
  %152 = call double @llvm.fmuladd.f64(double %146, double %151, double %49)
  %153 = fcmp ugt double %140, %152
  br i1 %153, label %154, label %156

154:                                              ; preds = %.lr.ph629
  %155 = add i64 %.2502627, 1
  %exitcond.not = icmp eq i64 %155, %.0484
  br i1 %exitcond.not, label %.thread550, label %.lr.ph629, !llvm.loop !13

156:                                              ; preds = %.lr.ph629
  %157 = getelementptr inbounds double, ptr %22, i64 %.2502627
  store double 0.000000e+00, ptr %157, align 8, !tbaa !9
  br label %.thread550

.thread550:                                       ; preds = %154, %133, %156
  %.3503552 = phi i64 [ %.2502627, %156 ], [ %.0484, %133 ], [ %.0484, %154 ]
  %158 = icmp eq i64 %.3503552, %.1492.ph
  br i1 %158, label %261, label %.thread550.thread

.thread550.thread:                                ; preds = %134, %.thread550
  %.3503552719 = phi i64 [ %.3503552, %.thread550 ], [ %.0484, %134 ]
  %159 = load double, ptr %127, align 8, !tbaa !9
  %160 = icmp eq i64 %.3503552719, %128
  br i1 %160, label %161, label %175

161:                                              ; preds = %.thread550.thread
  br i1 %.not.not, label %162, label %169

162:                                              ; preds = %161
  %163 = call i32 @dlaev2_(ptr noundef nonnull %127, ptr noundef nonnull %130, ptr noundef %129, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %10, ptr noundef nonnull %14) #5
  %164 = load double, ptr %10, align 8, !tbaa !9
  store double %164, ptr %131, align 8, !tbaa !9
  %165 = load double, ptr %14, align 8, !tbaa !9
  %166 = load i64, ptr %1, align 8, !tbaa !5
  %gep646 = getelementptr double, ptr %invariant.gep618, i64 %166
  %167 = getelementptr double, ptr %gep646, i64 %.1492.ph
  store double %165, ptr %167, align 8, !tbaa !9
  %168 = call i32 @zlasr_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.9, ptr noundef nonnull %1, ptr noundef nonnull @c__2, ptr noundef nonnull %131, ptr noundef nonnull %167, ptr noundef %gep644, ptr noundef nonnull %5) #5
  br label %171

169:                                              ; preds = %161
  %170 = call i32 @dlae2_(ptr noundef nonnull %127, ptr noundef nonnull %130, ptr noundef %129, ptr noundef nonnull %16, ptr noundef nonnull %17) #5
  br label %171

171:                                              ; preds = %169, %162
  %172 = load double, ptr %16, align 8, !tbaa !9
  store double %172, ptr %127, align 8, !tbaa !9
  %173 = load double, ptr %17, align 8, !tbaa !9
  store double %173, ptr %129, align 8, !tbaa !9
  store double 0.000000e+00, ptr %130, align 8, !tbaa !9
  %174 = add nsw i64 %.1492.ph, 2
  %.not537 = icmp sgt i64 %174, %.0484
  br i1 %.not537, label %.loopexit558, label %.outer.backedge

175:                                              ; preds = %.thread550.thread
  %176 = icmp eq i64 %.1, %59
  br i1 %176, label %.loopexit558, label %177

177:                                              ; preds = %175
  %178 = add nsw i64 %.1, 1
  %179 = load double, ptr %129, align 8, !tbaa !9
  %180 = fsub double %179, %159
  %181 = load double, ptr %130, align 8, !tbaa !9
  %182 = fmul double %181, 2.000000e+00
  %183 = fdiv double %180, %182
  store double %183, ptr %12, align 8, !tbaa !9
  %184 = call double @dlapy2_(ptr noundef nonnull %12, ptr noundef nonnull @c_b41) #5
  store double %184, ptr %13, align 8, !tbaa !9
  %185 = getelementptr inbounds double, ptr %21, i64 %.3503552719
  %186 = load double, ptr %185, align 8, !tbaa !9
  %187 = fsub double %186, %159
  %188 = load double, ptr %130, align 8, !tbaa !9
  %189 = load double, ptr %12, align 8, !tbaa !9
  %190 = call double @d_sign(ptr noundef nonnull %13, ptr noundef nonnull %12) #5
  %191 = fadd double %189, %190
  %192 = fdiv double %188, %191
  %193 = fadd double %187, %192
  store double %193, ptr %12, align 8, !tbaa !9
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  store double 1.000000e+00, ptr %10, align 8, !tbaa !9
  %194 = add nsw i64 %.3503552719, -1
  store i64 %.1492.ph, ptr %9, align 8, !tbaa !5
  %.not535632.not = icmp sgt i64 %.3503552719, %.1492.ph
  br i1 %.not535632.not, label %195, label %._crit_edge637

195:                                              ; preds = %177
  %196 = getelementptr inbounds double, ptr %22, i64 %194
  %197 = load double, ptr %196, align 8, !tbaa !9
  store double %197, ptr %11, align 8, !tbaa !9
  %198 = call i32 @dlartg_(ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %14, ptr noundef nonnull %13) #5
  %.phi.trans.insert714 = getelementptr inbounds double, ptr %21, i64 %194
  %.pre715 = load double, ptr %.phi.trans.insert714, align 8, !tbaa !9
  %.phi.trans.insert712 = getelementptr double, ptr %2, i64 %194
  %.pre713 = load double, ptr %.phi.trans.insert712, align 8, !tbaa !9
  %199 = getelementptr double, ptr %2, i64 %194
  %200 = fsub double %.pre715, %.pre713
  %201 = load double, ptr %14, align 8, !tbaa !9
  %202 = load double, ptr %10, align 8, !tbaa !9
  %203 = fmul double %202, 2.000000e+00
  %204 = fmul double %197, %203
  %205 = call double @llvm.fmuladd.f64(double %200, double %201, double %204)
  store double %205, ptr %13, align 8, !tbaa !9
  %206 = fmul double %201, %205
  %207 = fadd double %.pre713, %206
  store double %207, ptr %199, align 8, !tbaa !9
  %208 = fneg double %197
  %209 = call double @llvm.fmuladd.f64(double %202, double %205, double %208)
  store double %209, ptr %12, align 8, !tbaa !9
  br i1 %.not.not, label %210, label %215

210:                                              ; preds = %195
  %211 = getelementptr inbounds double, ptr %26, i64 %194
  store double %202, ptr %211, align 8, !tbaa !9
  %212 = fneg double %201
  %213 = load i64, ptr %1, align 8, !tbaa !5
  %gep631.peel = getelementptr double, ptr %invariant.gep618, i64 %213
  %214 = getelementptr double, ptr %gep631.peel, i64 %194
  store double %212, ptr %214, align 8, !tbaa !9
  br label %215

215:                                              ; preds = %210, %195
  %216 = load i64, ptr %9, align 8, !tbaa !5
  %.not535.not.peel = icmp sgt i64 %194, %216
  br i1 %.not535.not.peel, label %.lr.ph636.peel.next, label %._crit_edge637

.lr.ph636.peel.next:                              ; preds = %215
  %217 = add nsw i64 %.3503552719, -2
  br label %.lr.ph636

.lr.ph636:                                        ; preds = %.lr.ph636.peel.next, %249
  %218 = phi double [ %236, %249 ], [ %202, %.lr.ph636.peel.next ]
  %219 = phi double [ %235, %249 ], [ %201, %.lr.ph636.peel.next ]
  %.0485634 = phi i64 [ %250, %249 ], [ %217, %.lr.ph636.peel.next ]
  %.0496633 = phi double [ %240, %249 ], [ %206, %.lr.ph636.peel.next ]
  %220 = getelementptr inbounds double, ptr %22, i64 %.0485634
  %221 = load double, ptr %220, align 8, !tbaa !9
  %222 = fmul double %219, %221
  store double %222, ptr %11, align 8, !tbaa !9
  %223 = fmul double %221, %218
  %224 = call i32 @dlartg_(ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %14, ptr noundef nonnull %13) #5
  %.not536 = icmp eq i64 %.0485634, %194
  br i1 %.not536, label %228, label %225

225:                                              ; preds = %.lr.ph636
  %226 = load double, ptr %13, align 8, !tbaa !9
  %227 = getelementptr double, ptr %3, i64 %.0485634
  store double %226, ptr %227, align 8, !tbaa !9
  br label %228

228:                                              ; preds = %225, %.lr.ph636
  %229 = getelementptr double, ptr %2, i64 %.0485634
  %230 = load double, ptr %229, align 8, !tbaa !9
  %231 = fsub double %230, %.0496633
  %232 = getelementptr inbounds double, ptr %21, i64 %.0485634
  %233 = load double, ptr %232, align 8, !tbaa !9
  %234 = fsub double %233, %231
  %235 = load double, ptr %14, align 8, !tbaa !9
  %236 = load double, ptr %10, align 8, !tbaa !9
  %237 = fmul double %236, 2.000000e+00
  %238 = fmul double %223, %237
  %239 = call double @llvm.fmuladd.f64(double %234, double %235, double %238)
  store double %239, ptr %13, align 8, !tbaa !9
  %240 = fmul double %235, %239
  %241 = fadd double %231, %240
  store double %241, ptr %229, align 8, !tbaa !9
  %242 = fneg double %223
  %243 = call double @llvm.fmuladd.f64(double %236, double %239, double %242)
  store double %243, ptr %12, align 8, !tbaa !9
  br i1 %.not.not, label %244, label %249

244:                                              ; preds = %228
  %245 = getelementptr inbounds double, ptr %26, i64 %.0485634
  store double %236, ptr %245, align 8, !tbaa !9
  %246 = fneg double %235
  %247 = load i64, ptr %1, align 8, !tbaa !5
  %gep631 = getelementptr double, ptr %invariant.gep618, i64 %247
  %248 = getelementptr double, ptr %gep631, i64 %.0485634
  store double %246, ptr %248, align 8, !tbaa !9
  br label %249

249:                                              ; preds = %228, %244
  %250 = add nsw i64 %.0485634, -1
  %251 = load i64, ptr %9, align 8, !tbaa !5
  %.not535.not = icmp sgt i64 %.0485634, %251
  br i1 %.not535.not, label %.lr.ph636, label %._crit_edge637, !llvm.loop !14

._crit_edge637:                                   ; preds = %249, %215, %177
  %252 = phi double [ %193, %177 ], [ %209, %215 ], [ %243, %249 ]
  %.0496.lcssa = phi double [ 0.000000e+00, %177 ], [ %206, %215 ], [ %240, %249 ]
  br i1 %.not.not, label %253, label %257

253:                                              ; preds = %._crit_edge637
  %reass.sub = sub i64 %.3503552719, %.1492.ph
  %254 = add i64 %reass.sub, 1
  store i64 %254, ptr %15, align 8, !tbaa !5
  %255 = load i64, ptr %1, align 8, !tbaa !5
  %gep642 = getelementptr double, ptr %invariant.gep641, i64 %255
  %256 = call i32 @zlasr_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.9, ptr noundef nonnull %1, ptr noundef nonnull %15, ptr noundef nonnull %131, ptr noundef %gep642, ptr noundef %gep644, ptr noundef nonnull %5) #5
  %.pre716 = load double, ptr %12, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %253, %._crit_edge637
  %258 = phi double [ %.pre716, %253 ], [ %252, %._crit_edge637 ]
  %259 = load double, ptr %127, align 8, !tbaa !9
  %260 = fsub double %259, %.0496.lcssa
  store double %260, ptr %127, align 8, !tbaa !9
  store double %258, ptr %130, align 8, !tbaa !9
  br label %133

261:                                              ; preds = %.thread550
  br i1 %.not534.not626, label %.outer.backedge, label %.loopexit558

.outer.backedge:                                  ; preds = %261, %171
  %.1492.ph.be = phi i64 [ %174, %171 ], [ %128, %261 ]
  br label %.outer

262:                                              ; preds = %.outer562, %391
  %.2 = phi i64 [ %315, %391 ], [ %.2.ph, %.outer562 ]
  br i1 %.not527, label %.thread554, label %263

263:                                              ; preds = %262
  store i64 %125, ptr %9, align 8, !tbaa !5
  br label %264

264:                                              ; preds = %265, %263
  %.4 = phi i64 [ %.2493.ph, %263 ], [ %266, %265 ]
  %.not528.not = icmp sgt i64 %.4, %.0484
  br i1 %.not528.not, label %265, label %.thread554

265:                                              ; preds = %264
  %266 = add nsw i64 %.4, -1
  %267 = getelementptr inbounds double, ptr %22, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !9
  %269 = fcmp oge double %268, 0.000000e+00
  %270 = fneg double %268
  %271 = select i1 %269, double %268, double %270
  %272 = fmul double %271, %271
  %273 = getelementptr inbounds double, ptr %21, i64 %.4
  %274 = load double, ptr %273, align 8, !tbaa !9
  %275 = fcmp oge double %274, 0.000000e+00
  %276 = fneg double %274
  %277 = select i1 %275, double %274, double %276
  %278 = fmul double %48, %277
  %279 = getelementptr inbounds double, ptr %21, i64 %266
  %280 = load double, ptr %279, align 8, !tbaa !9
  %281 = fcmp oge double %280, 0.000000e+00
  %282 = fneg double %280
  %283 = select i1 %281, double %280, double %282
  %284 = call double @llvm.fmuladd.f64(double %278, double %283, double %49)
  %285 = fcmp ugt double %272, %284
  br i1 %285, label %264, label %286, !llvm.loop !16

286:                                              ; preds = %265
  %gep617 = getelementptr double, ptr %invariant.gep, i64 %.4
  store double 0.000000e+00, ptr %gep617, align 8, !tbaa !9
  br label %.thread554

.thread554:                                       ; preds = %264, %262, %286
  %.5556 = phi i64 [ %.4, %286 ], [ %.0484, %262 ], [ %.0484, %264 ]
  %287 = load double, ptr %307, align 8, !tbaa !9
  %288 = icmp eq i64 %.5556, %.2493.ph
  br i1 %288, label %395, label %289

289:                                              ; preds = %.thread554
  %290 = icmp eq i64 %.5556, %308
  br i1 %290, label %291, label %312

291:                                              ; preds = %289
  br i1 %.not.not, label %292, label %301

292:                                              ; preds = %291
  %293 = call i32 @dlaev2_(ptr noundef nonnull %309, ptr noundef nonnull %310, ptr noundef nonnull %307, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %10, ptr noundef nonnull %14) #5
  %294 = load double, ptr %10, align 8, !tbaa !9
  %295 = getelementptr inbounds double, ptr %26, i64 %308
  store double %294, ptr %295, align 8, !tbaa !9
  %296 = load double, ptr %14, align 8, !tbaa !9
  %297 = load i64, ptr %1, align 8, !tbaa !5
  %gep623 = getelementptr double, ptr %invariant.gep618, i64 %297
  %298 = getelementptr double, ptr %gep623, i64 %308
  store double %296, ptr %298, align 8, !tbaa !9
  %299 = mul nsw i64 %308, %23
  %gep625 = getelementptr %struct.doublecomplex, ptr %invariant.gep620, i64 %299
  %300 = call i32 @zlasr_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.10, ptr noundef nonnull %1, ptr noundef nonnull @c__2, ptr noundef nonnull %295, ptr noundef nonnull %298, ptr noundef %gep625, ptr noundef nonnull %5) #5
  br label %303

301:                                              ; preds = %291
  %302 = call i32 @dlae2_(ptr noundef nonnull %309, ptr noundef nonnull %310, ptr noundef nonnull %307, ptr noundef nonnull %16, ptr noundef nonnull %17) #5
  br label %303

303:                                              ; preds = %301, %292
  %304 = load double, ptr %16, align 8, !tbaa !9
  store double %304, ptr %309, align 8, !tbaa !9
  %305 = load double, ptr %17, align 8, !tbaa !9
  store double %305, ptr %307, align 8, !tbaa !9
  store double 0.000000e+00, ptr %310, align 8, !tbaa !9
  %306 = add nsw i64 %.2493.ph, -2
  %.not531 = icmp slt i64 %306, %.0484
  br i1 %.not531, label %.loopexit558, label %.outer562.backedge

.outer562:                                        ; preds = %.outer562.backedge, %.preheader560
  %.2493.ph = phi i64 [ %.0491, %.preheader560 ], [ %.2493.ph.be, %.outer562.backedge ]
  %.2.ph = phi i64 [ %.0483.ph, %.preheader560 ], [ %.2, %.outer562.backedge ]
  %.not527 = icmp eq i64 %.2493.ph, %.0484
  %307 = getelementptr inbounds double, ptr %21, i64 %.2493.ph
  %308 = add nsw i64 %.2493.ph, -1
  %309 = getelementptr inbounds double, ptr %21, i64 %308
  %310 = getelementptr inbounds double, ptr %22, i64 %308
  %311 = add i64 %.2493.ph, 1
  br label %262

312:                                              ; preds = %289
  %313 = icmp eq i64 %.2, %59
  br i1 %313, label %.loopexit558, label %314

314:                                              ; preds = %312
  %315 = add nsw i64 %.2, 1
  %316 = load double, ptr %309, align 8, !tbaa !9
  %317 = fsub double %316, %287
  %318 = load double, ptr %310, align 8, !tbaa !9
  %319 = fmul double %318, 2.000000e+00
  %320 = fdiv double %317, %319
  store double %320, ptr %12, align 8, !tbaa !9
  %321 = call double @dlapy2_(ptr noundef nonnull %12, ptr noundef nonnull @c_b41) #5
  store double %321, ptr %13, align 8, !tbaa !9
  %322 = getelementptr inbounds double, ptr %21, i64 %.5556
  %323 = load double, ptr %322, align 8, !tbaa !9
  %324 = fsub double %323, %287
  %325 = load double, ptr %310, align 8, !tbaa !9
  %326 = load double, ptr %12, align 8, !tbaa !9
  %327 = call double @d_sign(ptr noundef nonnull %13, ptr noundef nonnull %12) #5
  %328 = fadd double %326, %327
  %329 = fdiv double %325, %328
  %330 = fadd double %324, %329
  store double %330, ptr %12, align 8, !tbaa !9
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  store double 1.000000e+00, ptr %10, align 8, !tbaa !9
  store i64 %308, ptr %9, align 8, !tbaa !5
  %.not529609.not = icmp slt i64 %.5556, %.2493.ph
  br i1 %.not529609.not, label %331, label %._crit_edge614

331:                                              ; preds = %314
  %332 = getelementptr inbounds double, ptr %22, i64 %.5556
  %333 = load double, ptr %332, align 8, !tbaa !9
  store double %333, ptr %11, align 8, !tbaa !9
  %334 = call i32 @dlartg_(ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %14, ptr noundef nonnull %13) #5
  %.phi.trans.insert = getelementptr double, ptr %2, i64 %.5556
  %.pre710 = load double, ptr %.phi.trans.insert, align 8, !tbaa !9
  %.pre709 = load double, ptr %322, align 8, !tbaa !9
  %335 = fsub double %.pre710, %.pre709
  %336 = load double, ptr %14, align 8, !tbaa !9
  %337 = load double, ptr %10, align 8, !tbaa !9
  %338 = fmul double %337, 2.000000e+00
  %339 = fmul double %333, %338
  %340 = call double @llvm.fmuladd.f64(double %335, double %336, double %339)
  store double %340, ptr %13, align 8, !tbaa !9
  %341 = fmul double %336, %340
  %342 = fadd double %.pre709, %341
  store double %342, ptr %322, align 8, !tbaa !9
  %343 = fneg double %333
  %344 = call double @llvm.fmuladd.f64(double %337, double %340, double %343)
  store double %344, ptr %12, align 8, !tbaa !9
  br i1 %.not.not, label %345, label %349

345:                                              ; preds = %331
  %346 = getelementptr inbounds double, ptr %26, i64 %.5556
  store double %337, ptr %346, align 8, !tbaa !9
  %347 = load i64, ptr %1, align 8, !tbaa !5
  %gep608.peel = getelementptr double, ptr %invariant.gep618, i64 %347
  %348 = getelementptr double, ptr %gep608.peel, i64 %.5556
  store double %336, ptr %348, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %345, %331
  %350 = load i64, ptr %9, align 8, !tbaa !5
  %.not529.not.peel = icmp slt i64 %.5556, %350
  br i1 %.not529.not.peel, label %.lr.ph613, label %._crit_edge614

.lr.ph613:                                        ; preds = %349, %381
  %351 = phi double [ %369, %381 ], [ %337, %349 ]
  %352 = phi double [ %368, %381 ], [ %336, %349 ]
  %.1486611.in = phi i64 [ %.1486611, %381 ], [ %.5556, %349 ]
  %.1497610 = phi double [ %373, %381 ], [ %341, %349 ]
  %.1486611 = add nsw i64 %.1486611.in, 1
  %353 = getelementptr double, ptr %3, i64 %.1486611.in
  %354 = load double, ptr %353, align 8, !tbaa !9
  %355 = fmul double %352, %354
  store double %355, ptr %11, align 8, !tbaa !9
  %356 = fmul double %354, %351
  %357 = call i32 @dlartg_(ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %14, ptr noundef nonnull %13) #5
  %.not530 = icmp eq i64 %.1486611, %.5556
  br i1 %.not530, label %361, label %358

358:                                              ; preds = %.lr.ph613
  %359 = load double, ptr %13, align 8, !tbaa !9
  %360 = getelementptr i8, ptr %353, i64 -8
  store double %359, ptr %360, align 8, !tbaa !9
  br label %361

361:                                              ; preds = %358, %.lr.ph613
  %362 = getelementptr double, ptr %2, i64 %.1486611.in
  %363 = load double, ptr %362, align 8, !tbaa !9
  %364 = fsub double %363, %.1497610
  %365 = getelementptr double, ptr %2, i64 %.1486611
  %366 = load double, ptr %365, align 8, !tbaa !9
  %367 = fsub double %366, %364
  %368 = load double, ptr %14, align 8, !tbaa !9
  %369 = load double, ptr %10, align 8, !tbaa !9
  %370 = fmul double %369, 2.000000e+00
  %371 = fmul double %356, %370
  %372 = call double @llvm.fmuladd.f64(double %367, double %368, double %371)
  store double %372, ptr %13, align 8, !tbaa !9
  %373 = fmul double %368, %372
  %374 = fadd double %364, %373
  store double %374, ptr %362, align 8, !tbaa !9
  %375 = fneg double %356
  %376 = call double @llvm.fmuladd.f64(double %369, double %372, double %375)
  store double %376, ptr %12, align 8, !tbaa !9
  br i1 %.not.not, label %377, label %381

377:                                              ; preds = %361
  %378 = getelementptr double, ptr %6, i64 %.1486611.in
  store double %369, ptr %378, align 8, !tbaa !9
  %379 = load i64, ptr %1, align 8, !tbaa !5
  %gep608 = getelementptr double, ptr %invariant.gep618, i64 %379
  %380 = getelementptr double, ptr %gep608, i64 %.1486611
  store double %368, ptr %380, align 8, !tbaa !9
  br label %381

381:                                              ; preds = %361, %377
  %382 = load i64, ptr %9, align 8, !tbaa !5
  %.not529.not = icmp slt i64 %.1486611, %382
  br i1 %.not529.not, label %.lr.ph613, label %._crit_edge614, !llvm.loop !17

._crit_edge614:                                   ; preds = %381, %349, %314
  %383 = phi double [ %330, %314 ], [ %344, %349 ], [ %376, %381 ]
  %.1497.lcssa = phi double [ 0.000000e+00, %314 ], [ %341, %349 ], [ %373, %381 ]
  br i1 %.not.not, label %384, label %391

384:                                              ; preds = %._crit_edge614
  %385 = sub i64 %311, %.5556
  store i64 %385, ptr %15, align 8, !tbaa !5
  %386 = getelementptr inbounds double, ptr %26, i64 %.5556
  %387 = load i64, ptr %1, align 8, !tbaa !5
  %gep619 = getelementptr double, ptr %invariant.gep618, i64 %387
  %388 = getelementptr double, ptr %gep619, i64 %.5556
  %389 = mul nsw i64 %.5556, %23
  %gep621 = getelementptr %struct.doublecomplex, ptr %invariant.gep620, i64 %389
  %390 = call i32 @zlasr_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.10, ptr noundef nonnull %1, ptr noundef nonnull %15, ptr noundef nonnull %386, ptr noundef %388, ptr noundef %gep621, ptr noundef nonnull %5) #5
  %.pre711 = load double, ptr %12, align 8, !tbaa !9
  br label %391

391:                                              ; preds = %384, %._crit_edge614
  %392 = phi double [ %.pre711, %384 ], [ %383, %._crit_edge614 ]
  %393 = load double, ptr %307, align 8, !tbaa !9
  %394 = fsub double %393, %.1497.lcssa
  store double %394, ptr %307, align 8, !tbaa !9
  store double %392, ptr %310, align 8, !tbaa !9
  br label %262

395:                                              ; preds = %.thread554
  %.not532.not = icmp sgt i64 %.2493.ph, %.0484
  br i1 %.not532.not, label %.outer562.backedge, label %.loopexit558

.outer562.backedge:                               ; preds = %395, %303
  %.2493.ph.be = phi i64 [ %306, %303 ], [ %308, %395 ]
  br label %.outer562

.loopexit558:                                     ; preds = %395, %303, %261, %171, %312, %175
  %.3 = phi i64 [ %59, %175 ], [ %59, %312 ], [ %.1, %171 ], [ %.1, %261 ], [ %.2, %303 ], [ %.2, %395 ]
  %.not = xor i1 %106, true
  %brmerge = or i1 %.not, %113
  %.mux = select i1 %.not, ptr %20, ptr %19
  br i1 %brmerge, label %.sink.split768, label %398

.sink.split768:                                   ; preds = %.loopexit558
  store i64 %99, ptr %9, align 8, !tbaa !5
  %396 = call i32 @dlascl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %.mux, ptr noundef nonnull %18, ptr noundef nonnull %9, ptr noundef nonnull @c__1, ptr noundef nonnull %100, ptr noundef nonnull %1, ptr noundef nonnull %7) #5
  store i64 %98, ptr %9, align 8, !tbaa !5
  %397 = call i32 @dlascl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %.mux, ptr noundef nonnull %18, ptr noundef nonnull %9, ptr noundef nonnull @c__1, ptr noundef nonnull %101, ptr noundef nonnull %1, ptr noundef nonnull %7) #5
  br label %398

398:                                              ; preds = %.loopexit558, %.sink.split768
  %399 = icmp eq i64 %.3, %59
  br i1 %399, label %400, label %.outer566

400:                                              ; preds = %398
  %401 = load i64, ptr %1, align 8, !tbaa !5
  %.not539.not649 = icmp sgt i64 %401, 1
  br i1 %.not539.not649, label %.lr.ph652.preheader, label %.loopexit

.lr.ph652.preheader:                              ; preds = %400
  %402 = add nsw i64 %401, -1
  %xtraiter = and i64 %402, 1
  %403 = icmp eq i64 %401, 2
  br i1 %403, label %.loopexit.loopexit806.unr-lcssa, label %.lr.ph652.preheader.new

.lr.ph652.preheader.new:                          ; preds = %.lr.ph652.preheader
  %unroll_iter = and i64 %402, -2
  br label %.lr.ph652

.lr.ph652:                                        ; preds = %416, %.lr.ph652.preheader.new
  %.2487650 = phi i64 [ 1, %.lr.ph652.preheader.new ], [ %417, %416 ]
  %niter = phi i64 [ 0, %.lr.ph652.preheader.new ], [ %niter.next.1, %416 ]
  %404 = getelementptr inbounds double, ptr %22, i64 %.2487650
  %405 = load double, ptr %404, align 8, !tbaa !9
  %406 = fcmp une double %405, 0.000000e+00
  br i1 %406, label %407, label %.lr.ph652.1

407:                                              ; preds = %.lr.ph652
  %408 = load i64, ptr %7, align 8, !tbaa !5
  %409 = add nsw i64 %408, 1
  store i64 %409, ptr %7, align 8, !tbaa !5
  br label %.lr.ph652.1

.lr.ph652.1:                                      ; preds = %.lr.ph652, %407
  %410 = getelementptr double, ptr %3, i64 %.2487650
  %411 = load double, ptr %410, align 8, !tbaa !9
  %412 = fcmp une double %411, 0.000000e+00
  br i1 %412, label %413, label %416

413:                                              ; preds = %.lr.ph652.1
  %414 = load i64, ptr %7, align 8, !tbaa !5
  %415 = add nsw i64 %414, 1
  store i64 %415, ptr %7, align 8, !tbaa !5
  br label %416

416:                                              ; preds = %413, %.lr.ph652.1
  %417 = add nuw nsw i64 %.2487650, 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 %.loopexit.loopexit806.unr-lcssa, label %.lr.ph652, !llvm.loop !18

.outer566._crit_edge:                             ; preds = %.outer566, %.backedge
  %.lcssa = phi i64 [ %96, %.backedge ], [ %61, %.outer566 ]
  br i1 %.not.not, label %420, label %418

418:                                              ; preds = %.outer566._crit_edge
  %419 = call i32 @dlasrt_(ptr noundef nonnull @.str.2, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %7) #5
  br label %.loopexit

420:                                              ; preds = %.outer566._crit_edge
  store i64 %.lcssa, ptr %9, align 8, !tbaa !5
  %.not666 = icmp slt i64 %.lcssa, 2
  br i1 %.not666, label %.loopexit, label %.lr.ph669

.lr.ph669:                                        ; preds = %420, %._crit_edge659.thread
  %421 = phi i64 [ %435, %._crit_edge659.thread ], [ %.lcssa, %420 ]
  %.0494667 = phi i64 [ %436, %._crit_edge659.thread ], [ 2, %420 ]
  %422 = add nsw i64 %.0494667, -1
  %423 = getelementptr inbounds double, ptr %21, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !9
  %425 = load i64, ptr %1, align 8, !tbaa !5
  %.not540653 = icmp sgt i64 %.0494667, %425
  br i1 %.not540653, label %._crit_edge659.thread, label %.lr.ph658

.lr.ph658:                                        ; preds = %.lr.ph669, %.lr.ph658
  %.0488656 = phi i64 [ %429, %.lr.ph658 ], [ %.0494667, %.lr.ph669 ]
  %.0489655 = phi i64 [ %.1490, %.lr.ph658 ], [ %422, %.lr.ph669 ]
  %.2498654 = phi double [ %.3499, %.lr.ph658 ], [ %424, %.lr.ph669 ]
  %426 = getelementptr inbounds double, ptr %21, i64 %.0488656
  %427 = load double, ptr %426, align 8, !tbaa !9
  %428 = fcmp olt double %427, %.2498654
  %.3499 = select i1 %428, double %427, double %.2498654
  %.1490 = select i1 %428, i64 %.0488656, i64 %.0489655
  %429 = add nuw nsw i64 %.0488656, 1
  %.not540.not = icmp slt i64 %.0488656, %425
  br i1 %.not540.not, label %.lr.ph658, label %._crit_edge659, !llvm.loop !19

._crit_edge659:                                   ; preds = %.lr.ph658
  %.not541 = icmp eq i64 %.1490, %422
  br i1 %.not541, label %._crit_edge659.thread, label %430

430:                                              ; preds = %._crit_edge659
  %431 = getelementptr inbounds double, ptr %21, i64 %.1490
  store double %424, ptr %431, align 8, !tbaa !9
  store double %.3499, ptr %423, align 8, !tbaa !9
  %432 = mul nsw i64 %422, %23
  %gep663 = getelementptr %struct.doublecomplex, ptr %invariant.gep620, i64 %432
  %433 = mul nsw i64 %.1490, %23
  %gep665 = getelementptr %struct.doublecomplex, ptr %invariant.gep620, i64 %433
  %434 = call i32 @f2c_zswap(ptr noundef nonnull %1, ptr noundef %gep663, ptr noundef nonnull @c__1, ptr noundef %gep665, ptr noundef nonnull @c__1) #5
  %.pre717 = load i64, ptr %9, align 8, !tbaa !5
  br label %._crit_edge659.thread

._crit_edge659.thread:                            ; preds = %.lr.ph669, %._crit_edge659, %430
  %435 = phi i64 [ %421, %._crit_edge659 ], [ %.pre717, %430 ], [ %421, %.lr.ph669 ]
  %436 = add nuw nsw i64 %.0494667, 1
  %.not.not671 = icmp slt i64 %.0494667, %435
  br i1 %.not.not671, label %.lr.ph669, label %.loopexit, !llvm.loop !20

.loopexit.loopexit806.unr-lcssa:                  ; preds = %416, %.lr.ph652.preheader
  %.2487650.unr = phi i64 [ 1, %.lr.ph652.preheader ], [ %417, %416 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.lr.ph652.epil

.lr.ph652.epil:                                   ; preds = %.loopexit.loopexit806.unr-lcssa
  %437 = getelementptr inbounds double, ptr %22, i64 %.2487650.unr
  %438 = load double, ptr %437, align 8, !tbaa !9
  %439 = fcmp une double %438, 0.000000e+00
  br i1 %439, label %440, label %.loopexit

440:                                              ; preds = %.lr.ph652.epil
  %441 = load i64, ptr %7, align 8, !tbaa !5
  %442 = add nsw i64 %441, 1
  store i64 %442, ptr %7, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit806.unr-lcssa, %440, %.lr.ph652.epil, %._crit_edge659.thread, %400, %420, %418, %44, %45, %43, %.thread547
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #3

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

declare double @dlanst_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @dlascl_(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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

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

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

declare double @dlapy2_(ptr noundef, ptr noundef) local_unnamed_addr #2

declare double @d_sign(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @dlasrt_(ptr noundef, ptr noundef, 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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = distinct !{!14, !12, !15}
!15 = !{!"llvm.loop.peeled.count", i32 1}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12, !15}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}


; Effective O3 passes: ADCEPass,BDCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass