; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK/VARIANTS/qr/LL (dgeqrf)

; 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"

@c__1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_n1 = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1

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

62:                                               ; preds = %8
  %63 = load ptr, ptr %10, align 8, !tbaa !5
  %64 = load i64, ptr %63, align 8, !tbaa !9
  br label %68

65:                                               ; preds = %8
  %66 = load ptr, ptr %11, align 8, !tbaa !5
  %67 = load i64, ptr %66, align 8, !tbaa !9
  br label %68

68:                                               ; preds = %65, %62
  %69 = phi i64 [ %64, %62 ], [ %67, %65 ]
  store i64 %69, ptr %29, align 8, !tbaa !9
  %70 = load ptr, ptr %10, align 8, !tbaa !5
  %71 = load ptr, ptr %11, align 8, !tbaa !5
  %72 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %70, ptr noundef %71, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %72, ptr %31, align 8, !tbaa !9
  %73 = load i64, ptr %31, align 8, !tbaa !9
  %74 = icmp sgt i64 %73, 1
  br i1 %74, label %75, label %92

75:                                               ; preds = %68
  %76 = load i64, ptr %31, align 8, !tbaa !9
  %77 = load i64, ptr %29, align 8, !tbaa !9
  %78 = icmp slt i64 %76, %77
  br i1 %78, label %79, label %92

79:                                               ; preds = %75
  store i64 0, ptr %20, align 8, !tbaa !9
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %80, ptr noundef %81, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %82, ptr %21, align 8, !tbaa !9
  %83 = load i64, ptr %20, align 8, !tbaa !9
  %84 = load i64, ptr %21, align 8, !tbaa !9
  %85 = icmp sge i64 %83, %84
  br i1 %85, label %86, label %88

86:                                               ; preds = %79
  %87 = load i64, ptr %20, align 8, !tbaa !9
  br label %90

88:                                               ; preds = %79
  %89 = load i64, ptr %21, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %88, %86
  %91 = phi i64 [ %87, %86 ], [ %89, %88 ]
  store i64 %91, ptr %33, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %90, %75, %68
  %93 = load i64, ptr %29, align 8, !tbaa !9
  %94 = load i64, ptr %33, align 8, !tbaa !9
  %95 = sub nsw i64 %93, %94
  %96 = sitofp i64 %95 to float
  %97 = load i64, ptr %31, align 8, !tbaa !9
  %98 = sitofp i64 %97 to float
  %99 = fdiv float %96, %98
  store float %99, ptr %26, align 4, !tbaa !11
  %100 = load i64, ptr %29, align 8, !tbaa !9
  %101 = sitofp i64 %100 to double
  %102 = call double @sceil_(ptr noundef %26)
  %103 = load i64, ptr %31, align 8, !tbaa !9
  %104 = sitofp i64 %103 to double
  %105 = fneg double %102
  %106 = call double @llvm.fmuladd.f64(double %105, double %104, double %101)
  %107 = fptosi double %106 to i64
  store i64 %107, ptr %32, align 8, !tbaa !9
  %108 = load ptr, ptr %11, align 8, !tbaa !5
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = load ptr, ptr %10, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = sub nsw i64 %109, %111
  %113 = load i64, ptr %29, align 8, !tbaa !9
  %114 = mul nsw i64 %112, %113
  store i64 %114, ptr %22, align 8, !tbaa !9
  %115 = load ptr, ptr %11, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = load i64, ptr %117, align 8, !tbaa !9
  %119 = sub nsw i64 %116, %118
  %120 = load i64, ptr %31, align 8, !tbaa !9
  %121 = mul nsw i64 %119, %120
  store i64 %121, ptr %23, align 8, !tbaa !9
  %122 = load i64, ptr %29, align 8, !tbaa !9
  %123 = load i64, ptr %31, align 8, !tbaa !9
  %124 = mul nsw i64 %122, %123
  store i64 %124, ptr %24, align 8, !tbaa !9
  %125 = load i64, ptr %31, align 8, !tbaa !9
  %126 = load i64, ptr %31, align 8, !tbaa !9
  %127 = mul nsw i64 %125, %126
  store i64 %127, ptr %25, align 8, !tbaa !9
  %128 = load i64, ptr %22, align 8, !tbaa !9
  %129 = load i64, ptr %23, align 8, !tbaa !9
  %130 = icmp sge i64 %128, %129
  br i1 %130, label %131, label %133

131:                                              ; preds = %92
  %132 = load i64, ptr %22, align 8, !tbaa !9
  br label %135

133:                                              ; preds = %92
  %134 = load i64, ptr %23, align 8, !tbaa !9
  br label %135

135:                                              ; preds = %133, %131
  %136 = phi i64 [ %132, %131 ], [ %134, %133 ]
  store i64 %136, ptr %20, align 8, !tbaa !9
  %137 = load i64, ptr %24, align 8, !tbaa !9
  %138 = load i64, ptr %25, align 8, !tbaa !9
  %139 = icmp sge i64 %137, %138
  br i1 %139, label %140, label %142

140:                                              ; preds = %135
  %141 = load i64, ptr %24, align 8, !tbaa !9
  br label %144

142:                                              ; preds = %135
  %143 = load i64, ptr %25, align 8, !tbaa !9
  br label %144

144:                                              ; preds = %142, %140
  %145 = phi i64 [ %141, %140 ], [ %143, %142 ]
  store i64 %145, ptr %21, align 8, !tbaa !9
  %146 = load i64, ptr %20, align 8, !tbaa !9
  %147 = load i64, ptr %21, align 8, !tbaa !9
  %148 = icmp sge i64 %146, %147
  br i1 %148, label %149, label %151

149:                                              ; preds = %144
  %150 = load i64, ptr %20, align 8, !tbaa !9
  br label %153

151:                                              ; preds = %144
  %152 = load i64, ptr %21, align 8, !tbaa !9
  br label %153

153:                                              ; preds = %151, %149
  %154 = phi i64 [ %150, %149 ], [ %152, %151 ]
  store i64 %154, ptr %38, align 8, !tbaa !9
  %155 = load i64, ptr %38, align 8, !tbaa !9
  %156 = sitofp i64 %155 to float
  %157 = load i64, ptr %31, align 8, !tbaa !9
  %158 = sitofp i64 %157 to float
  %159 = fdiv float %156, %158
  store float %159, ptr %26, align 4, !tbaa !11
  %160 = call double @sceil_(ptr noundef %26)
  %161 = fptosi double %160 to i64
  store i64 %161, ptr %38, align 8, !tbaa !9
  %162 = load i64, ptr %32, align 8, !tbaa !9
  %163 = load i64, ptr %31, align 8, !tbaa !9
  %164 = icmp sgt i64 %162, %163
  br i1 %164, label %165, label %182

165:                                              ; preds = %153
  %166 = load i64, ptr %29, align 8, !tbaa !9
  %167 = load i64, ptr %32, align 8, !tbaa !9
  %168 = sub nsw i64 %166, %167
  store i64 %168, ptr %37, align 8, !tbaa !9
  %169 = load i64, ptr %37, align 8, !tbaa !9
  %170 = load i64, ptr %38, align 8, !tbaa !9
  %171 = add nsw i64 %169, %170
  %172 = load i64, ptr %31, align 8, !tbaa !9
  %173 = mul nsw i64 %171, %172
  store i64 %173, ptr %39, align 8, !tbaa !9
  %174 = load i64, ptr %39, align 8, !tbaa !9
  %175 = load i64, ptr %32, align 8, !tbaa !9
  %176 = load i64, ptr %32, align 8, !tbaa !9
  %177 = mul nsw i64 %175, %176
  %178 = add nsw i64 %174, %177
  %179 = sitofp i64 %178 to double
  %180 = load ptr, ptr %15, align 8, !tbaa !5
  %181 = getelementptr inbounds double, ptr %180, i64 1
  store double %179, ptr %181, align 8, !tbaa !13
  br label %204

182:                                              ; preds = %153
  %183 = load i64, ptr %29, align 8, !tbaa !9
  %184 = sitofp i64 %183 to float
  %185 = load i64, ptr %31, align 8, !tbaa !9
  %186 = sitofp i64 %185 to float
  %187 = fdiv float %184, %186
  store float %187, ptr %26, align 4, !tbaa !11
  %188 = call double @sceil_(ptr noundef %26)
  %189 = load i64, ptr %31, align 8, !tbaa !9
  %190 = sitofp i64 %189 to double
  %191 = fmul double %188, %190
  %192 = fptosi double %191 to i64
  store i64 %192, ptr %37, align 8, !tbaa !9
  %193 = load i64, ptr %37, align 8, !tbaa !9
  %194 = load i64, ptr %38, align 8, !tbaa !9
  %195 = add nsw i64 %193, %194
  %196 = load i64, ptr %31, align 8, !tbaa !9
  %197 = sub nsw i64 %195, %196
  %198 = load i64, ptr %31, align 8, !tbaa !9
  %199 = mul nsw i64 %197, %198
  store i64 %199, ptr %39, align 8, !tbaa !9
  %200 = load i64, ptr %39, align 8, !tbaa !9
  %201 = sitofp i64 %200 to double
  %202 = load ptr, ptr %15, align 8, !tbaa !5
  %203 = getelementptr inbounds double, ptr %202, i64 1
  store double %201, ptr %203, align 8, !tbaa !13
  br label %204

204:                                              ; preds = %182, %165
  %205 = load ptr, ptr %16, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = icmp eq i64 %206, -1
  %208 = zext i1 %207 to i32
  %209 = sext i32 %208 to i64
  store i64 %209, ptr %40, align 8, !tbaa !9
  %210 = load ptr, ptr %10, align 8, !tbaa !5
  %211 = load i64, ptr %210, align 8, !tbaa !9
  %212 = icmp slt i64 %211, 0
  br i1 %212, label %213, label %215

213:                                              ; preds = %204
  %214 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -1, ptr %214, align 8, !tbaa !9
  br label %257

215:                                              ; preds = %204
  %216 = load ptr, ptr %11, align 8, !tbaa !5
  %217 = load i64, ptr %216, align 8, !tbaa !9
  %218 = icmp slt i64 %217, 0
  br i1 %218, label %219, label %221

219:                                              ; preds = %215
  %220 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -2, ptr %220, align 8, !tbaa !9
  br label %256

221:                                              ; preds = %215
  %222 = load ptr, ptr %13, align 8, !tbaa !5
  %223 = load i64, ptr %222, align 8, !tbaa !9
  %224 = load ptr, ptr %10, align 8, !tbaa !5
  %225 = load i64, ptr %224, align 8, !tbaa !9
  %226 = icmp sge i64 1, %225
  br i1 %226, label %227, label %228

227:                                              ; preds = %221
  br label %231

228:                                              ; preds = %221
  %229 = load ptr, ptr %10, align 8, !tbaa !5
  %230 = load i64, ptr %229, align 8, !tbaa !9
  br label %231

231:                                              ; preds = %228, %227
  %232 = phi i64 [ 1, %227 ], [ %230, %228 ]
  %233 = icmp slt i64 %223, %232
  br i1 %233, label %234, label %236

234:                                              ; preds = %231
  %235 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -4, ptr %235, align 8, !tbaa !9
  br label %255

236:                                              ; preds = %231
  %237 = load ptr, ptr %16, align 8, !tbaa !5
  %238 = load i64, ptr %237, align 8, !tbaa !9
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = load i64, ptr %239, align 8, !tbaa !9
  %241 = icmp sge i64 1, %240
  br i1 %241, label %242, label %243

242:                                              ; preds = %236
  br label %246

243:                                              ; preds = %236
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = load i64, ptr %244, align 8, !tbaa !9
  br label %246

246:                                              ; preds = %243, %242
  %247 = phi i64 [ 1, %242 ], [ %245, %243 ]
  %248 = icmp slt i64 %238, %247
  br i1 %248, label %249, label %254

249:                                              ; preds = %246
  %250 = load i64, ptr %40, align 8, !tbaa !9
  %251 = icmp ne i64 %250, 0
  br i1 %251, label %254, label %252

252:                                              ; preds = %249
  %253 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -7, ptr %253, align 8, !tbaa !9
  br label %254

254:                                              ; preds = %252, %249, %246
  br label %255

255:                                              ; preds = %254, %234
  br label %256

256:                                              ; preds = %255, %219
  br label %257

257:                                              ; preds = %256, %213
  %258 = load ptr, ptr %17, align 8, !tbaa !5
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = icmp ne i64 %259, 0
  br i1 %260, label %261, label %266

261:                                              ; preds = %257
  %262 = load ptr, ptr %17, align 8, !tbaa !5
  %263 = load i64, ptr %262, align 8, !tbaa !9
  %264 = sub nsw i64 0, %263
  store i64 %264, ptr %20, align 8, !tbaa !9
  %265 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %20)
  store i32 0, ptr %9, align 4
  store i32 1, ptr %41, align 4
  br label %926

266:                                              ; preds = %257
  %267 = load i64, ptr %40, align 8, !tbaa !9
  %268 = icmp ne i64 %267, 0
  br i1 %268, label %269, label %270

269:                                              ; preds = %266
  store i32 0, ptr %9, align 4
  store i32 1, ptr %41, align 4
  br label %926

270:                                              ; preds = %266
  br label %271

271:                                              ; preds = %270
  %272 = load i64, ptr %29, align 8, !tbaa !9
  %273 = icmp eq i64 %272, 0
  br i1 %273, label %274, label %277

274:                                              ; preds = %271
  %275 = load ptr, ptr %15, align 8, !tbaa !5
  %276 = getelementptr inbounds double, ptr %275, i64 1
  store double 1.000000e+00, ptr %276, align 8, !tbaa !13
  store i32 0, ptr %9, align 4
  store i32 1, ptr %41, align 4
  br label %926

277:                                              ; preds = %271
  %278 = load i64, ptr %31, align 8, !tbaa !9
  %279 = icmp sgt i64 %278, 1
  br i1 %279, label %280, label %354

280:                                              ; preds = %277
  %281 = load i64, ptr %31, align 8, !tbaa !9
  %282 = load i64, ptr %29, align 8, !tbaa !9
  %283 = icmp slt i64 %281, %282
  br i1 %283, label %284, label %354

284:                                              ; preds = %280
  %285 = load i64, ptr %33, align 8, !tbaa !9
  %286 = load i64, ptr %29, align 8, !tbaa !9
  %287 = icmp slt i64 %285, %286
  br i1 %287, label %288, label %353

288:                                              ; preds = %284
  %289 = load i64, ptr %32, align 8, !tbaa !9
  %290 = load i64, ptr %31, align 8, !tbaa !9
  %291 = icmp sle i64 %289, %290
  br i1 %291, label %292, label %300

292:                                              ; preds = %288
  %293 = load i64, ptr %37, align 8, !tbaa !9
  %294 = load i64, ptr %38, align 8, !tbaa !9
  %295 = add nsw i64 %293, %294
  %296 = load i64, ptr %31, align 8, !tbaa !9
  %297 = sub nsw i64 %295, %296
  %298 = load i64, ptr %31, align 8, !tbaa !9
  %299 = mul nsw i64 %297, %298
  store i64 %299, ptr %34, align 8, !tbaa !9
  br label %310

300:                                              ; preds = %288
  %301 = load i64, ptr %37, align 8, !tbaa !9
  %302 = load i64, ptr %38, align 8, !tbaa !9
  %303 = add nsw i64 %301, %302
  %304 = load i64, ptr %31, align 8, !tbaa !9
  %305 = mul nsw i64 %303, %304
  %306 = load i64, ptr %32, align 8, !tbaa !9
  %307 = load i64, ptr %32, align 8, !tbaa !9
  %308 = mul nsw i64 %306, %307
  %309 = add nsw i64 %305, %308
  store i64 %309, ptr %34, align 8, !tbaa !9
  br label %310

310:                                              ; preds = %300, %292
  %311 = load ptr, ptr %16, align 8, !tbaa !5
  %312 = load i64, ptr %311, align 8, !tbaa !9
  %313 = load i64, ptr %34, align 8, !tbaa !9
  %314 = icmp slt i64 %312, %313
  br i1 %314, label %315, label %352

315:                                              ; preds = %310
  %316 = load i64, ptr %32, align 8, !tbaa !9
  %317 = load i64, ptr %31, align 8, !tbaa !9
  %318 = icmp sle i64 %316, %317
  br i1 %318, label %319, label %328

319:                                              ; preds = %315
  %320 = load ptr, ptr %16, align 8, !tbaa !5
  %321 = load i64, ptr %320, align 8, !tbaa !9
  %322 = load i64, ptr %38, align 8, !tbaa !9
  %323 = load i64, ptr %37, align 8, !tbaa !9
  %324 = load i64, ptr %31, align 8, !tbaa !9
  %325 = sub nsw i64 %323, %324
  %326 = add nsw i64 %322, %325
  %327 = sdiv i64 %321, %326
  store i64 %327, ptr %31, align 8, !tbaa !9
  br label %339

328:                                              ; preds = %315
  %329 = load ptr, ptr %16, align 8, !tbaa !5
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = load i64, ptr %32, align 8, !tbaa !9
  %332 = load i64, ptr %32, align 8, !tbaa !9
  %333 = mul nsw i64 %331, %332
  %334 = sub nsw i64 %330, %333
  %335 = load i64, ptr %37, align 8, !tbaa !9
  %336 = load i64, ptr %38, align 8, !tbaa !9
  %337 = add nsw i64 %335, %336
  %338 = sdiv i64 %334, %337
  store i64 %338, ptr %31, align 8, !tbaa !9
  br label %339

339:                                              ; preds = %328, %319
  store i64 2, ptr %20, align 8, !tbaa !9
  %340 = load ptr, ptr %10, align 8, !tbaa !5
  %341 = load ptr, ptr %11, align 8, !tbaa !5
  %342 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %340, ptr noundef %341, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %342, ptr %21, align 8, !tbaa !9
  %343 = load i64, ptr %20, align 8, !tbaa !9
  %344 = load i64, ptr %21, align 8, !tbaa !9
  %345 = icmp sge i64 %343, %344
  br i1 %345, label %346, label %348

346:                                              ; preds = %339
  %347 = load i64, ptr %20, align 8, !tbaa !9
  br label %350

348:                                              ; preds = %339
  %349 = load i64, ptr %21, align 8, !tbaa !9
  br label %350

350:                                              ; preds = %348, %346
  %351 = phi i64 [ %347, %346 ], [ %349, %348 ]
  store i64 %351, ptr %35, align 8, !tbaa !9
  br label %352

352:                                              ; preds = %350, %310
  br label %353

353:                                              ; preds = %352, %284
  br label %354

354:                                              ; preds = %353, %280, %277
  %355 = load i64, ptr %31, align 8, !tbaa !9
  %356 = load i64, ptr %35, align 8, !tbaa !9
  %357 = icmp sge i64 %355, %356
  br i1 %357, label %358, label %522

358:                                              ; preds = %354
  %359 = load i64, ptr %31, align 8, !tbaa !9
  %360 = load i64, ptr %29, align 8, !tbaa !9
  %361 = icmp slt i64 %359, %360
  br i1 %361, label %362, label %522

362:                                              ; preds = %358
  %363 = load i64, ptr %33, align 8, !tbaa !9
  %364 = load i64, ptr %29, align 8, !tbaa !9
  %365 = icmp slt i64 %363, %364
  br i1 %365, label %366, label %522

366:                                              ; preds = %362
  %367 = load i64, ptr %29, align 8, !tbaa !9
  %368 = load i64, ptr %33, align 8, !tbaa !9
  %369 = sub nsw i64 %367, %368
  store i64 %369, ptr %20, align 8, !tbaa !9
  %370 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %370, ptr %21, align 8, !tbaa !9
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %371

371:                                              ; preds = %517, %366
  %372 = load i64, ptr %21, align 8, !tbaa !9
  %373 = icmp slt i64 %372, 0
  br i1 %373, label %374, label %379

374:                                              ; preds = %371
  %375 = load i64, ptr %27, align 8, !tbaa !9
  %376 = load i64, ptr %20, align 8, !tbaa !9
  %377 = icmp sge i64 %375, %376
  %378 = zext i1 %377 to i32
  br label %384

379:                                              ; preds = %371
  %380 = load i64, ptr %27, align 8, !tbaa !9
  %381 = load i64, ptr %20, align 8, !tbaa !9
  %382 = icmp sle i64 %380, %381
  %383 = zext i1 %382 to i32
  br label %384

384:                                              ; preds = %379, %374
  %385 = phi i32 [ %378, %374 ], [ %383, %379 ]
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %387, label %521

387:                                              ; preds = %384
  %388 = load i64, ptr %29, align 8, !tbaa !9
  %389 = load i64, ptr %27, align 8, !tbaa !9
  %390 = sub nsw i64 %388, %389
  %391 = add nsw i64 %390, 1
  store i64 %391, ptr %22, align 8, !tbaa !9
  %392 = load i64, ptr %22, align 8, !tbaa !9
  %393 = load i64, ptr %31, align 8, !tbaa !9
  %394 = icmp sle i64 %392, %393
  br i1 %394, label %395, label %397

395:                                              ; preds = %387
  %396 = load i64, ptr %22, align 8, !tbaa !9
  br label %399

397:                                              ; preds = %387
  %398 = load i64, ptr %31, align 8, !tbaa !9
  br label %399

399:                                              ; preds = %397, %395
  %400 = phi i64 [ %396, %395 ], [ %398, %397 ]
  store i64 %400, ptr %30, align 8, !tbaa !9
  %401 = load i64, ptr %27, align 8, !tbaa !9
  %402 = load i64, ptr %31, align 8, !tbaa !9
  %403 = sub nsw i64 %401, %402
  store i64 %403, ptr %22, align 8, !tbaa !9
  %404 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %404, ptr %23, align 8, !tbaa !9
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %405

405:                                              ; preds = %457, %399
  %406 = load i64, ptr %23, align 8, !tbaa !9
  %407 = icmp slt i64 %406, 0
  br i1 %407, label %408, label %413

408:                                              ; preds = %405
  %409 = load i64, ptr %28, align 8, !tbaa !9
  %410 = load i64, ptr %22, align 8, !tbaa !9
  %411 = icmp sge i64 %409, %410
  %412 = zext i1 %411 to i32
  br label %418

413:                                              ; preds = %405
  %414 = load i64, ptr %28, align 8, !tbaa !9
  %415 = load i64, ptr %22, align 8, !tbaa !9
  %416 = icmp sle i64 %414, %415
  %417 = zext i1 %416 to i32
  br label %418

418:                                              ; preds = %413, %408
  %419 = phi i32 [ %412, %408 ], [ %417, %413 ]
  %420 = icmp ne i32 %419, 0
  br i1 %420, label %421, label %461

421:                                              ; preds = %418
  %422 = load ptr, ptr %10, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = load i64, ptr %28, align 8, !tbaa !9
  %425 = sub nsw i64 %423, %424
  %426 = add nsw i64 %425, 1
  store i64 %426, ptr %24, align 8, !tbaa !9
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = load i64, ptr %28, align 8, !tbaa !9
  %429 = load i64, ptr %28, align 8, !tbaa !9
  %430 = load i64, ptr %18, align 8, !tbaa !9
  %431 = mul nsw i64 %429, %430
  %432 = add nsw i64 %428, %431
  %433 = getelementptr inbounds double, ptr %427, i64 %432
  %434 = load ptr, ptr %13, align 8, !tbaa !5
  %435 = load ptr, ptr %15, align 8, !tbaa !5
  %436 = load i64, ptr %28, align 8, !tbaa !9
  %437 = getelementptr inbounds double, ptr %435, i64 %436
  %438 = load ptr, ptr %12, align 8, !tbaa !5
  %439 = load i64, ptr %28, align 8, !tbaa !9
  %440 = load i64, ptr %27, align 8, !tbaa !9
  %441 = load i64, ptr %18, align 8, !tbaa !9
  %442 = mul nsw i64 %440, %441
  %443 = add nsw i64 %439, %442
  %444 = getelementptr inbounds double, ptr %438, i64 %443
  %445 = load ptr, ptr %13, align 8, !tbaa !5
  %446 = load ptr, ptr %15, align 8, !tbaa !5
  %447 = load i64, ptr %37, align 8, !tbaa !9
  %448 = load i64, ptr %31, align 8, !tbaa !9
  %449 = mul nsw i64 %447, %448
  %450 = load i64, ptr %32, align 8, !tbaa !9
  %451 = load i64, ptr %32, align 8, !tbaa !9
  %452 = mul nsw i64 %450, %451
  %453 = add nsw i64 %449, %452
  %454 = add nsw i64 %453, 1
  %455 = getelementptr inbounds double, ptr %446, i64 %454
  %456 = call i32 @dlarfb_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %24, ptr noundef %30, ptr noundef %31, ptr noundef %433, ptr noundef %434, ptr noundef %437, ptr noundef %37, ptr noundef %444, ptr noundef %445, ptr noundef %455, ptr noundef %30)
  br label %457

457:                                              ; preds = %421
  %458 = load i64, ptr %23, align 8, !tbaa !9
  %459 = load i64, ptr %28, align 8, !tbaa !9
  %460 = add nsw i64 %459, %458
  store i64 %460, ptr %28, align 8, !tbaa !9
  br label %405, !llvm.loop !15

461:                                              ; preds = %418
  %462 = load ptr, ptr %10, align 8, !tbaa !5
  %463 = load i64, ptr %462, align 8, !tbaa !9
  %464 = load i64, ptr %27, align 8, !tbaa !9
  %465 = sub nsw i64 %463, %464
  %466 = add nsw i64 %465, 1
  store i64 %466, ptr %23, align 8, !tbaa !9
  %467 = load ptr, ptr %12, align 8, !tbaa !5
  %468 = load i64, ptr %27, align 8, !tbaa !9
  %469 = load i64, ptr %27, align 8, !tbaa !9
  %470 = load i64, ptr %18, align 8, !tbaa !9
  %471 = mul nsw i64 %469, %470
  %472 = add nsw i64 %468, %471
  %473 = getelementptr inbounds double, ptr %467, i64 %472
  %474 = load ptr, ptr %13, align 8, !tbaa !5
  %475 = load ptr, ptr %14, align 8, !tbaa !5
  %476 = load i64, ptr %27, align 8, !tbaa !9
  %477 = getelementptr inbounds double, ptr %475, i64 %476
  %478 = load ptr, ptr %15, align 8, !tbaa !5
  %479 = load i64, ptr %37, align 8, !tbaa !9
  %480 = load i64, ptr %31, align 8, !tbaa !9
  %481 = mul nsw i64 %479, %480
  %482 = load i64, ptr %32, align 8, !tbaa !9
  %483 = load i64, ptr %32, align 8, !tbaa !9
  %484 = mul nsw i64 %482, %483
  %485 = add nsw i64 %481, %484
  %486 = add nsw i64 %485, 1
  %487 = getelementptr inbounds double, ptr %478, i64 %486
  %488 = call i32 @dgeqr2_(ptr noundef %23, ptr noundef %30, ptr noundef %473, ptr noundef %474, ptr noundef %477, ptr noundef %487, ptr noundef %36)
  %489 = load i64, ptr %27, align 8, !tbaa !9
  %490 = load i64, ptr %30, align 8, !tbaa !9
  %491 = add nsw i64 %489, %490
  %492 = load ptr, ptr %11, align 8, !tbaa !5
  %493 = load i64, ptr %492, align 8, !tbaa !9
  %494 = icmp sle i64 %491, %493
  br i1 %494, label %495, label %516

495:                                              ; preds = %461
  %496 = load ptr, ptr %10, align 8, !tbaa !5
  %497 = load i64, ptr %496, align 8, !tbaa !9
  %498 = load i64, ptr %27, align 8, !tbaa !9
  %499 = sub nsw i64 %497, %498
  %500 = add nsw i64 %499, 1
  store i64 %500, ptr %23, align 8, !tbaa !9
  %501 = load ptr, ptr %12, align 8, !tbaa !5
  %502 = load i64, ptr %27, align 8, !tbaa !9
  %503 = load i64, ptr %27, align 8, !tbaa !9
  %504 = load i64, ptr %18, align 8, !tbaa !9
  %505 = mul nsw i64 %503, %504
  %506 = add nsw i64 %502, %505
  %507 = getelementptr inbounds double, ptr %501, i64 %506
  %508 = load ptr, ptr %13, align 8, !tbaa !5
  %509 = load ptr, ptr %14, align 8, !tbaa !5
  %510 = load i64, ptr %27, align 8, !tbaa !9
  %511 = getelementptr inbounds double, ptr %509, i64 %510
  %512 = load ptr, ptr %15, align 8, !tbaa !5
  %513 = load i64, ptr %27, align 8, !tbaa !9
  %514 = getelementptr inbounds double, ptr %512, i64 %513
  %515 = call i32 @dlarft_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %23, ptr noundef %30, ptr noundef %507, ptr noundef %508, ptr noundef %511, ptr noundef %514, ptr noundef %37)
  br label %516

516:                                              ; preds = %495, %461
  br label %517

517:                                              ; preds = %516
  %518 = load i64, ptr %21, align 8, !tbaa !9
  %519 = load i64, ptr %27, align 8, !tbaa !9
  %520 = add nsw i64 %519, %518
  store i64 %520, ptr %27, align 8, !tbaa !9
  br label %371, !llvm.loop !17

521:                                              ; preds = %384
  br label %523

522:                                              ; preds = %362, %358, %354
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %523

523:                                              ; preds = %522, %521
  %524 = load i64, ptr %27, align 8, !tbaa !9
  %525 = load i64, ptr %29, align 8, !tbaa !9
  %526 = icmp sle i64 %524, %525
  br i1 %526, label %527, label %657

527:                                              ; preds = %523
  %528 = load i64, ptr %27, align 8, !tbaa !9
  %529 = icmp ne i64 %528, 1
  br i1 %529, label %530, label %631

530:                                              ; preds = %527
  %531 = load i64, ptr %27, align 8, !tbaa !9
  %532 = load i64, ptr %31, align 8, !tbaa !9
  %533 = sub nsw i64 %531, %532
  store i64 %533, ptr %21, align 8, !tbaa !9
  %534 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %534, ptr %20, align 8, !tbaa !9
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %535

535:                                              ; preds = %595, %530
  %536 = load i64, ptr %20, align 8, !tbaa !9
  %537 = icmp slt i64 %536, 0
  br i1 %537, label %538, label %543

538:                                              ; preds = %535
  %539 = load i64, ptr %28, align 8, !tbaa !9
  %540 = load i64, ptr %21, align 8, !tbaa !9
  %541 = icmp sge i64 %539, %540
  %542 = zext i1 %541 to i32
  br label %548

543:                                              ; preds = %535
  %544 = load i64, ptr %28, align 8, !tbaa !9
  %545 = load i64, ptr %21, align 8, !tbaa !9
  %546 = icmp sle i64 %544, %545
  %547 = zext i1 %546 to i32
  br label %548

548:                                              ; preds = %543, %538
  %549 = phi i32 [ %542, %538 ], [ %547, %543 ]
  %550 = icmp ne i32 %549, 0
  br i1 %550, label %551, label %599

551:                                              ; preds = %548
  %552 = load ptr, ptr %10, align 8, !tbaa !5
  %553 = load i64, ptr %552, align 8, !tbaa !9
  %554 = load i64, ptr %28, align 8, !tbaa !9
  %555 = sub nsw i64 %553, %554
  %556 = add nsw i64 %555, 1
  store i64 %556, ptr %23, align 8, !tbaa !9
  %557 = load i64, ptr %29, align 8, !tbaa !9
  %558 = load i64, ptr %27, align 8, !tbaa !9
  %559 = sub nsw i64 %557, %558
  %560 = add nsw i64 %559, 1
  store i64 %560, ptr %22, align 8, !tbaa !9
  %561 = load i64, ptr %29, align 8, !tbaa !9
  %562 = load i64, ptr %27, align 8, !tbaa !9
  %563 = sub nsw i64 %561, %562
  %564 = add nsw i64 %563, 1
  store i64 %564, ptr %24, align 8, !tbaa !9
  %565 = load ptr, ptr %12, align 8, !tbaa !5
  %566 = load i64, ptr %28, align 8, !tbaa !9
  %567 = load i64, ptr %28, align 8, !tbaa !9
  %568 = load i64, ptr %18, align 8, !tbaa !9
  %569 = mul nsw i64 %567, %568
  %570 = add nsw i64 %566, %569
  %571 = getelementptr inbounds double, ptr %565, i64 %570
  %572 = load ptr, ptr %13, align 8, !tbaa !5
  %573 = load ptr, ptr %15, align 8, !tbaa !5
  %574 = load i64, ptr %28, align 8, !tbaa !9
  %575 = getelementptr inbounds double, ptr %573, i64 %574
  %576 = load ptr, ptr %12, align 8, !tbaa !5
  %577 = load i64, ptr %28, align 8, !tbaa !9
  %578 = load i64, ptr %27, align 8, !tbaa !9
  %579 = load i64, ptr %18, align 8, !tbaa !9
  %580 = mul nsw i64 %578, %579
  %581 = add nsw i64 %577, %580
  %582 = getelementptr inbounds double, ptr %576, i64 %581
  %583 = load ptr, ptr %13, align 8, !tbaa !5
  %584 = load ptr, ptr %15, align 8, !tbaa !5
  %585 = load i64, ptr %37, align 8, !tbaa !9
  %586 = load i64, ptr %31, align 8, !tbaa !9
  %587 = mul nsw i64 %585, %586
  %588 = load i64, ptr %32, align 8, !tbaa !9
  %589 = load i64, ptr %32, align 8, !tbaa !9
  %590 = mul nsw i64 %588, %589
  %591 = add nsw i64 %587, %590
  %592 = add nsw i64 %591, 1
  %593 = getelementptr inbounds double, ptr %584, i64 %592
  %594 = call i32 @dlarfb_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %23, ptr noundef %22, ptr noundef %31, ptr noundef %571, ptr noundef %572, ptr noundef %575, ptr noundef %37, ptr noundef %582, ptr noundef %583, ptr noundef %593, ptr noundef %24)
  br label %595

595:                                              ; preds = %551
  %596 = load i64, ptr %20, align 8, !tbaa !9
  %597 = load i64, ptr %28, align 8, !tbaa !9
  %598 = add nsw i64 %597, %596
  store i64 %598, ptr %28, align 8, !tbaa !9
  br label %535, !llvm.loop !18

599:                                              ; preds = %548
  %600 = load ptr, ptr %10, align 8, !tbaa !5
  %601 = load i64, ptr %600, align 8, !tbaa !9
  %602 = load i64, ptr %27, align 8, !tbaa !9
  %603 = sub nsw i64 %601, %602
  %604 = add nsw i64 %603, 1
  store i64 %604, ptr %20, align 8, !tbaa !9
  %605 = load i64, ptr %29, align 8, !tbaa !9
  %606 = load i64, ptr %27, align 8, !tbaa !9
  %607 = sub nsw i64 %605, %606
  %608 = add nsw i64 %607, 1
  store i64 %608, ptr %21, align 8, !tbaa !9
  %609 = load ptr, ptr %12, align 8, !tbaa !5
  %610 = load i64, ptr %27, align 8, !tbaa !9
  %611 = load i64, ptr %27, align 8, !tbaa !9
  %612 = load i64, ptr %18, align 8, !tbaa !9
  %613 = mul nsw i64 %611, %612
  %614 = add nsw i64 %610, %613
  %615 = getelementptr inbounds double, ptr %609, i64 %614
  %616 = load ptr, ptr %13, align 8, !tbaa !5
  %617 = load ptr, ptr %14, align 8, !tbaa !5
  %618 = load i64, ptr %27, align 8, !tbaa !9
  %619 = getelementptr inbounds double, ptr %617, i64 %618
  %620 = load ptr, ptr %15, align 8, !tbaa !5
  %621 = load i64, ptr %37, align 8, !tbaa !9
  %622 = load i64, ptr %31, align 8, !tbaa !9
  %623 = mul nsw i64 %621, %622
  %624 = load i64, ptr %32, align 8, !tbaa !9
  %625 = load i64, ptr %32, align 8, !tbaa !9
  %626 = mul nsw i64 %624, %625
  %627 = add nsw i64 %623, %626
  %628 = add nsw i64 %627, 1
  %629 = getelementptr inbounds double, ptr %620, i64 %628
  %630 = call i32 @dgeqr2_(ptr noundef %20, ptr noundef %21, ptr noundef %615, ptr noundef %616, ptr noundef %619, ptr noundef %629, ptr noundef %36)
  br label %656

631:                                              ; preds = %527
  %632 = load ptr, ptr %10, align 8, !tbaa !5
  %633 = load i64, ptr %632, align 8, !tbaa !9
  %634 = load i64, ptr %27, align 8, !tbaa !9
  %635 = sub nsw i64 %633, %634
  %636 = add nsw i64 %635, 1
  store i64 %636, ptr %20, align 8, !tbaa !9
  %637 = load ptr, ptr %11, align 8, !tbaa !5
  %638 = load i64, ptr %637, align 8, !tbaa !9
  %639 = load i64, ptr %27, align 8, !tbaa !9
  %640 = sub nsw i64 %638, %639
  %641 = add nsw i64 %640, 1
  store i64 %641, ptr %21, align 8, !tbaa !9
  %642 = load ptr, ptr %12, align 8, !tbaa !5
  %643 = load i64, ptr %27, align 8, !tbaa !9
  %644 = load i64, ptr %27, align 8, !tbaa !9
  %645 = load i64, ptr %18, align 8, !tbaa !9
  %646 = mul nsw i64 %644, %645
  %647 = add nsw i64 %643, %646
  %648 = getelementptr inbounds double, ptr %642, i64 %647
  %649 = load ptr, ptr %13, align 8, !tbaa !5
  %650 = load ptr, ptr %14, align 8, !tbaa !5
  %651 = load i64, ptr %27, align 8, !tbaa !9
  %652 = getelementptr inbounds double, ptr %650, i64 %651
  %653 = load ptr, ptr %15, align 8, !tbaa !5
  %654 = getelementptr inbounds double, ptr %653, i64 1
  %655 = call i32 @dgeqr2_(ptr noundef %20, ptr noundef %21, ptr noundef %648, ptr noundef %649, ptr noundef %652, ptr noundef %654, ptr noundef %36)
  br label %656

656:                                              ; preds = %631, %599
  br label %657

657:                                              ; preds = %656, %523
  %658 = load ptr, ptr %10, align 8, !tbaa !5
  %659 = load i64, ptr %658, align 8, !tbaa !9
  %660 = load ptr, ptr %11, align 8, !tbaa !5
  %661 = load i64, ptr %660, align 8, !tbaa !9
  %662 = icmp slt i64 %659, %661
  br i1 %662, label %663, label %921

663:                                              ; preds = %657
  %664 = load i64, ptr %27, align 8, !tbaa !9
  %665 = icmp ne i64 %664, 1
  br i1 %665, label %666, label %921

666:                                              ; preds = %663
  %667 = load i64, ptr %32, align 8, !tbaa !9
  %668 = load i64, ptr %31, align 8, !tbaa !9
  %669 = icmp sle i64 %667, %668
  br i1 %669, label %670, label %695

670:                                              ; preds = %666
  %671 = load ptr, ptr %10, align 8, !tbaa !5
  %672 = load i64, ptr %671, align 8, !tbaa !9
  %673 = load i64, ptr %27, align 8, !tbaa !9
  %674 = sub nsw i64 %672, %673
  %675 = add nsw i64 %674, 1
  store i64 %675, ptr %20, align 8, !tbaa !9
  %676 = load i64, ptr %29, align 8, !tbaa !9
  %677 = load i64, ptr %27, align 8, !tbaa !9
  %678 = sub nsw i64 %676, %677
  %679 = add nsw i64 %678, 1
  store i64 %679, ptr %21, align 8, !tbaa !9
  %680 = load ptr, ptr %12, align 8, !tbaa !5
  %681 = load i64, ptr %27, align 8, !tbaa !9
  %682 = load i64, ptr %27, align 8, !tbaa !9
  %683 = load i64, ptr %18, align 8, !tbaa !9
  %684 = mul nsw i64 %682, %683
  %685 = add nsw i64 %681, %684
  %686 = getelementptr inbounds double, ptr %680, i64 %685
  %687 = load ptr, ptr %13, align 8, !tbaa !5
  %688 = load ptr, ptr %14, align 8, !tbaa !5
  %689 = load i64, ptr %27, align 8, !tbaa !9
  %690 = getelementptr inbounds double, ptr %688, i64 %689
  %691 = load ptr, ptr %15, align 8, !tbaa !5
  %692 = load i64, ptr %27, align 8, !tbaa !9
  %693 = getelementptr inbounds double, ptr %691, i64 %692
  %694 = call i32 @dlarft_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %20, ptr noundef %21, ptr noundef %686, ptr noundef %687, ptr noundef %690, ptr noundef %693, ptr noundef %37)
  br label %723

695:                                              ; preds = %666
  %696 = load ptr, ptr %10, align 8, !tbaa !5
  %697 = load i64, ptr %696, align 8, !tbaa !9
  %698 = load i64, ptr %27, align 8, !tbaa !9
  %699 = sub nsw i64 %697, %698
  %700 = add nsw i64 %699, 1
  store i64 %700, ptr %20, align 8, !tbaa !9
  %701 = load i64, ptr %29, align 8, !tbaa !9
  %702 = load i64, ptr %27, align 8, !tbaa !9
  %703 = sub nsw i64 %701, %702
  %704 = add nsw i64 %703, 1
  store i64 %704, ptr %21, align 8, !tbaa !9
  %705 = load ptr, ptr %12, align 8, !tbaa !5
  %706 = load i64, ptr %27, align 8, !tbaa !9
  %707 = load i64, ptr %27, align 8, !tbaa !9
  %708 = load i64, ptr %18, align 8, !tbaa !9
  %709 = mul nsw i64 %707, %708
  %710 = add nsw i64 %706, %709
  %711 = getelementptr inbounds double, ptr %705, i64 %710
  %712 = load ptr, ptr %13, align 8, !tbaa !5
  %713 = load ptr, ptr %14, align 8, !tbaa !5
  %714 = load i64, ptr %27, align 8, !tbaa !9
  %715 = getelementptr inbounds double, ptr %713, i64 %714
  %716 = load ptr, ptr %15, align 8, !tbaa !5
  %717 = load i64, ptr %37, align 8, !tbaa !9
  %718 = load i64, ptr %31, align 8, !tbaa !9
  %719 = mul nsw i64 %717, %718
  %720 = add nsw i64 %719, 1
  %721 = getelementptr inbounds double, ptr %716, i64 %720
  %722 = call i32 @dlarft_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %20, ptr noundef %21, ptr noundef %711, ptr noundef %712, ptr noundef %715, ptr noundef %721, ptr noundef %32)
  br label %723

723:                                              ; preds = %695, %670
  %724 = load i64, ptr %29, align 8, !tbaa !9
  %725 = load i64, ptr %33, align 8, !tbaa !9
  %726 = sub nsw i64 %724, %725
  store i64 %726, ptr %20, align 8, !tbaa !9
  %727 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %727, ptr %21, align 8, !tbaa !9
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %728

728:                                              ; preds = %805, %723
  %729 = load i64, ptr %21, align 8, !tbaa !9
  %730 = icmp slt i64 %729, 0
  br i1 %730, label %731, label %736

731:                                              ; preds = %728
  %732 = load i64, ptr %28, align 8, !tbaa !9
  %733 = load i64, ptr %20, align 8, !tbaa !9
  %734 = icmp sge i64 %732, %733
  %735 = zext i1 %734 to i32
  br label %741

736:                                              ; preds = %728
  %737 = load i64, ptr %28, align 8, !tbaa !9
  %738 = load i64, ptr %20, align 8, !tbaa !9
  %739 = icmp sle i64 %737, %738
  %740 = zext i1 %739 to i32
  br label %741

741:                                              ; preds = %736, %731
  %742 = phi i32 [ %735, %731 ], [ %740, %736 ]
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %744, label %809

744:                                              ; preds = %741
  %745 = load i64, ptr %29, align 8, !tbaa !9
  %746 = load i64, ptr %28, align 8, !tbaa !9
  %747 = sub nsw i64 %745, %746
  %748 = add nsw i64 %747, 1
  store i64 %748, ptr %23, align 8, !tbaa !9
  %749 = load i64, ptr %23, align 8, !tbaa !9
  %750 = load i64, ptr %31, align 8, !tbaa !9
  %751 = icmp sle i64 %749, %750
  br i1 %751, label %752, label %754

752:                                              ; preds = %744
  %753 = load i64, ptr %23, align 8, !tbaa !9
  br label %756

754:                                              ; preds = %744
  %755 = load i64, ptr %31, align 8, !tbaa !9
  br label %756

756:                                              ; preds = %754, %752
  %757 = phi i64 [ %753, %752 ], [ %755, %754 ]
  store i64 %757, ptr %30, align 8, !tbaa !9
  %758 = load ptr, ptr %10, align 8, !tbaa !5
  %759 = load i64, ptr %758, align 8, !tbaa !9
  %760 = load i64, ptr %28, align 8, !tbaa !9
  %761 = sub nsw i64 %759, %760
  %762 = add nsw i64 %761, 1
  store i64 %762, ptr %23, align 8, !tbaa !9
  %763 = load ptr, ptr %11, align 8, !tbaa !5
  %764 = load i64, ptr %763, align 8, !tbaa !9
  %765 = load ptr, ptr %10, align 8, !tbaa !5
  %766 = load i64, ptr %765, align 8, !tbaa !9
  %767 = sub nsw i64 %764, %766
  store i64 %767, ptr %22, align 8, !tbaa !9
  %768 = load ptr, ptr %11, align 8, !tbaa !5
  %769 = load i64, ptr %768, align 8, !tbaa !9
  %770 = load ptr, ptr %10, align 8, !tbaa !5
  %771 = load i64, ptr %770, align 8, !tbaa !9
  %772 = sub nsw i64 %769, %771
  store i64 %772, ptr %24, align 8, !tbaa !9
  %773 = load ptr, ptr %12, align 8, !tbaa !5
  %774 = load i64, ptr %28, align 8, !tbaa !9
  %775 = load i64, ptr %28, align 8, !tbaa !9
  %776 = load i64, ptr %18, align 8, !tbaa !9
  %777 = mul nsw i64 %775, %776
  %778 = add nsw i64 %774, %777
  %779 = getelementptr inbounds double, ptr %773, i64 %778
  %780 = load ptr, ptr %13, align 8, !tbaa !5
  %781 = load ptr, ptr %15, align 8, !tbaa !5
  %782 = load i64, ptr %28, align 8, !tbaa !9
  %783 = getelementptr inbounds double, ptr %781, i64 %782
  %784 = load ptr, ptr %12, align 8, !tbaa !5
  %785 = load i64, ptr %28, align 8, !tbaa !9
  %786 = load ptr, ptr %10, align 8, !tbaa !5
  %787 = load i64, ptr %786, align 8, !tbaa !9
  %788 = add nsw i64 %787, 1
  %789 = load i64, ptr %18, align 8, !tbaa !9
  %790 = mul nsw i64 %788, %789
  %791 = add nsw i64 %785, %790
  %792 = getelementptr inbounds double, ptr %784, i64 %791
  %793 = load ptr, ptr %13, align 8, !tbaa !5
  %794 = load ptr, ptr %15, align 8, !tbaa !5
  %795 = load i64, ptr %37, align 8, !tbaa !9
  %796 = load i64, ptr %31, align 8, !tbaa !9
  %797 = mul nsw i64 %795, %796
  %798 = load i64, ptr %32, align 8, !tbaa !9
  %799 = load i64, ptr %32, align 8, !tbaa !9
  %800 = mul nsw i64 %798, %799
  %801 = add nsw i64 %797, %800
  %802 = add nsw i64 %801, 1
  %803 = getelementptr inbounds double, ptr %794, i64 %802
  %804 = call i32 @dlarfb_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %23, ptr noundef %22, ptr noundef %30, ptr noundef %779, ptr noundef %780, ptr noundef %783, ptr noundef %37, ptr noundef %792, ptr noundef %793, ptr noundef %803, ptr noundef %24)
  br label %805

805:                                              ; preds = %756
  %806 = load i64, ptr %21, align 8, !tbaa !9
  %807 = load i64, ptr %28, align 8, !tbaa !9
  %808 = add nsw i64 %807, %806
  store i64 %808, ptr %28, align 8, !tbaa !9
  br label %728, !llvm.loop !19

809:                                              ; preds = %741
  %810 = load i64, ptr %32, align 8, !tbaa !9
  %811 = load i64, ptr %31, align 8, !tbaa !9
  %812 = icmp sle i64 %810, %811
  br i1 %812, label %813, label %865

813:                                              ; preds = %809
  %814 = load ptr, ptr %10, align 8, !tbaa !5
  %815 = load i64, ptr %814, align 8, !tbaa !9
  %816 = load i64, ptr %28, align 8, !tbaa !9
  %817 = sub nsw i64 %815, %816
  %818 = add nsw i64 %817, 1
  store i64 %818, ptr %21, align 8, !tbaa !9
  %819 = load ptr, ptr %11, align 8, !tbaa !5
  %820 = load i64, ptr %819, align 8, !tbaa !9
  %821 = load ptr, ptr %10, align 8, !tbaa !5
  %822 = load i64, ptr %821, align 8, !tbaa !9
  %823 = sub nsw i64 %820, %822
  store i64 %823, ptr %20, align 8, !tbaa !9
  %824 = load i64, ptr %29, align 8, !tbaa !9
  %825 = load i64, ptr %28, align 8, !tbaa !9
  %826 = sub nsw i64 %824, %825
  %827 = add nsw i64 %826, 1
  store i64 %827, ptr %23, align 8, !tbaa !9
  %828 = load ptr, ptr %11, align 8, !tbaa !5
  %829 = load i64, ptr %828, align 8, !tbaa !9
  %830 = load ptr, ptr %10, align 8, !tbaa !5
  %831 = load i64, ptr %830, align 8, !tbaa !9
  %832 = sub nsw i64 %829, %831
  store i64 %832, ptr %22, align 8, !tbaa !9
  %833 = load ptr, ptr %12, align 8, !tbaa !5
  %834 = load i64, ptr %28, align 8, !tbaa !9
  %835 = load i64, ptr %28, align 8, !tbaa !9
  %836 = load i64, ptr %18, align 8, !tbaa !9
  %837 = mul nsw i64 %835, %836
  %838 = add nsw i64 %834, %837
  %839 = getelementptr inbounds double, ptr %833, i64 %838
  %840 = load ptr, ptr %13, align 8, !tbaa !5
  %841 = load ptr, ptr %15, align 8, !tbaa !5
  %842 = load i64, ptr %28, align 8, !tbaa !9
  %843 = getelementptr inbounds double, ptr %841, i64 %842
  %844 = load ptr, ptr %12, align 8, !tbaa !5
  %845 = load i64, ptr %28, align 8, !tbaa !9
  %846 = load ptr, ptr %10, align 8, !tbaa !5
  %847 = load i64, ptr %846, align 8, !tbaa !9
  %848 = add nsw i64 %847, 1
  %849 = load i64, ptr %18, align 8, !tbaa !9
  %850 = mul nsw i64 %848, %849
  %851 = add nsw i64 %845, %850
  %852 = getelementptr inbounds double, ptr %844, i64 %851
  %853 = load ptr, ptr %13, align 8, !tbaa !5
  %854 = load ptr, ptr %15, align 8, !tbaa !5
  %855 = load i64, ptr %37, align 8, !tbaa !9
  %856 = load i64, ptr %31, align 8, !tbaa !9
  %857 = mul nsw i64 %855, %856
  %858 = load i64, ptr %32, align 8, !tbaa !9
  %859 = load i64, ptr %32, align 8, !tbaa !9
  %860 = mul nsw i64 %858, %859
  %861 = add nsw i64 %857, %860
  %862 = add nsw i64 %861, 1
  %863 = getelementptr inbounds double, ptr %854, i64 %862
  %864 = call i32 @dlarfb_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %21, ptr noundef %20, ptr noundef %23, ptr noundef %839, ptr noundef %840, ptr noundef %843, ptr noundef %37, ptr noundef %852, ptr noundef %853, ptr noundef %863, ptr noundef %22)
  br label %920

865:                                              ; preds = %809
  %866 = load ptr, ptr %10, align 8, !tbaa !5
  %867 = load i64, ptr %866, align 8, !tbaa !9
  %868 = load i64, ptr %28, align 8, !tbaa !9
  %869 = sub nsw i64 %867, %868
  %870 = add nsw i64 %869, 1
  store i64 %870, ptr %21, align 8, !tbaa !9
  %871 = load ptr, ptr %11, align 8, !tbaa !5
  %872 = load i64, ptr %871, align 8, !tbaa !9
  %873 = load ptr, ptr %10, align 8, !tbaa !5
  %874 = load i64, ptr %873, align 8, !tbaa !9
  %875 = sub nsw i64 %872, %874
  store i64 %875, ptr %20, align 8, !tbaa !9
  %876 = load i64, ptr %29, align 8, !tbaa !9
  %877 = load i64, ptr %28, align 8, !tbaa !9
  %878 = sub nsw i64 %876, %877
  %879 = add nsw i64 %878, 1
  store i64 %879, ptr %23, align 8, !tbaa !9
  %880 = load ptr, ptr %11, align 8, !tbaa !5
  %881 = load i64, ptr %880, align 8, !tbaa !9
  %882 = load ptr, ptr %10, align 8, !tbaa !5
  %883 = load i64, ptr %882, align 8, !tbaa !9
  %884 = sub nsw i64 %881, %883
  store i64 %884, ptr %22, align 8, !tbaa !9
  %885 = load ptr, ptr %12, align 8, !tbaa !5
  %886 = load i64, ptr %28, align 8, !tbaa !9
  %887 = load i64, ptr %28, align 8, !tbaa !9
  %888 = load i64, ptr %18, align 8, !tbaa !9
  %889 = mul nsw i64 %887, %888
  %890 = add nsw i64 %886, %889
  %891 = getelementptr inbounds double, ptr %885, i64 %890
  %892 = load ptr, ptr %13, align 8, !tbaa !5
  %893 = load ptr, ptr %15, align 8, !tbaa !5
  %894 = load i64, ptr %37, align 8, !tbaa !9
  %895 = load i64, ptr %31, align 8, !tbaa !9
  %896 = mul nsw i64 %894, %895
  %897 = add nsw i64 %896, 1
  %898 = getelementptr inbounds double, ptr %893, i64 %897
  %899 = load ptr, ptr %12, align 8, !tbaa !5
  %900 = load i64, ptr %28, align 8, !tbaa !9
  %901 = load ptr, ptr %10, align 8, !tbaa !5
  %902 = load i64, ptr %901, align 8, !tbaa !9
  %903 = add nsw i64 %902, 1
  %904 = load i64, ptr %18, align 8, !tbaa !9
  %905 = mul nsw i64 %903, %904
  %906 = add nsw i64 %900, %905
  %907 = getelementptr inbounds double, ptr %899, i64 %906
  %908 = load ptr, ptr %13, align 8, !tbaa !5
  %909 = load ptr, ptr %15, align 8, !tbaa !5
  %910 = load i64, ptr %37, align 8, !tbaa !9
  %911 = load i64, ptr %31, align 8, !tbaa !9
  %912 = mul nsw i64 %910, %911
  %913 = load i64, ptr %32, align 8, !tbaa !9
  %914 = load i64, ptr %32, align 8, !tbaa !9
  %915 = mul nsw i64 %913, %914
  %916 = add nsw i64 %912, %915
  %917 = add nsw i64 %916, 1
  %918 = getelementptr inbounds double, ptr %909, i64 %917
  %919 = call i32 @dlarfb_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef %21, ptr noundef %20, ptr noundef %23, ptr noundef %891, ptr noundef %892, ptr noundef %898, ptr noundef %32, ptr noundef %907, ptr noundef %908, ptr noundef %918, ptr noundef %22)
  br label %920

920:                                              ; preds = %865, %813
  br label %921

921:                                              ; preds = %920, %663, %657
  %922 = load i64, ptr %34, align 8, !tbaa !9
  %923 = sitofp i64 %922 to double
  %924 = load ptr, ptr %15, align 8, !tbaa !5
  %925 = getelementptr inbounds double, ptr %924, i64 1
  store double %923, ptr %925, align 8, !tbaa !13
  store i32 0, ptr %9, align 4
  store i32 1, ptr %41, align 4
  br label %926

926:                                              ; preds = %921, %274, %269, %261
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  %927 = load i32, ptr %9, align 4
  ret i32 %927
}

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

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

declare double @sceil_(ptr noundef) #2

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

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

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

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

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

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

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

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

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


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

@c__1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_n1 = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @dgeqrf_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr nocapture noundef %7) local_unnamed_addr #0 {
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca float, align 4
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, 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 4, 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
  %20 = load i64, ptr %3, align 8, !tbaa !5
  %21 = xor i64 %20, -1
  %22 = getelementptr inbounds double, ptr %2, i64 %21
  %23 = getelementptr inbounds i8, ptr %4, i64 -8
  %24 = getelementptr inbounds i8, ptr %5, i64 -8
  store i64 0, ptr %7, align 8, !tbaa !5
  %25 = load i64, ptr %1, align 8, !tbaa !5
  %26 = load i64, ptr %0, align 8, !tbaa !5
  %. = tail call i64 @llvm.smin.i64(i64 %26, i64 %25)
  %27 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #5
  store i64 %27, ptr %16, align 8, !tbaa !5
  %28 = icmp sgt i64 %27, 1
  %29 = icmp slt i64 %27, %.
  %or.cond314 = select i1 %28, i1 %29, i1 false
  br i1 %or.cond314, label %30, label %33

30:                                               ; preds = %8
  store i64 0, ptr %9, align 8, !tbaa !5
  %31 = tail call i64 @ilaenv_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #5
  store i64 %31, ptr %10, align 8, !tbaa !5
  %32 = tail call i64 @llvm.smax.i64(i64 %31, i64 0)
  br label %33

33:                                               ; preds = %30, %8
  %.0274 = phi i64 [ %32, %30 ], [ 0, %8 ]
  %34 = sub nsw i64 %., %.0274
  %35 = sitofp i64 %34 to float
  %36 = sitofp i64 %27 to float
  %37 = fdiv float %35, %36
  store float %37, ptr %14, align 4, !tbaa !9
  %38 = sitofp i64 %. to double
  %39 = call double @sceil_(ptr noundef nonnull %14) #5
  %40 = sitofp i64 %27 to double
  %41 = fneg double %39
  %42 = call double @llvm.fmuladd.f64(double %41, double %40, double %38)
  %43 = fptosi double %42 to i64
  store i64 %43, ptr %17, align 8, !tbaa !5
  %44 = load i64, ptr %1, align 8, !tbaa !5
  %45 = load i64, ptr %0, align 8, !tbaa !5
  %46 = sub nsw i64 %44, %45
  %47 = mul nsw i64 %46, %.
  store i64 %47, ptr %11, align 8, !tbaa !5
  %48 = mul nsw i64 %46, %27
  store i64 %48, ptr %12, align 8, !tbaa !5
  %49 = mul nsw i64 %27, %.
  store i64 %49, ptr %13, align 8, !tbaa !5
  %50 = mul nsw i64 %27, %27
  %51 = call i64 @llvm.smax.i64(i64 %47, i64 %48)
  store i64 %51, ptr %9, align 8, !tbaa !5
  %52 = call i64 @llvm.smax.i64(i64 %49, i64 %50)
  %53 = call i64 @llvm.smax.i64(i64 %51, i64 %52)
  %54 = uitofp nneg i64 %53 to float
  %55 = fdiv float %54, %36
  store float %55, ptr %14, align 4, !tbaa !9
  %56 = call double @sceil_(ptr noundef nonnull %14) #5
  %57 = fptosi double %56 to i64
  %58 = icmp slt i64 %27, %43
  br i1 %58, label %59, label %65

59:                                               ; preds = %33
  %60 = sub nsw i64 %., %43
  %61 = add nsw i64 %60, %57
  %62 = mul nsw i64 %61, %27
  %63 = mul nsw i64 %43, %43
  %64 = add nsw i64 %62, %63
  br label %74

65:                                               ; preds = %33
  %66 = sitofp i64 %. to float
  %67 = fdiv float %66, %36
  store float %67, ptr %14, align 4, !tbaa !9
  %68 = call double @sceil_(ptr noundef nonnull %14) #5
  %69 = fmul double %68, %40
  %70 = fptosi double %69 to i64
  %71 = sub i64 %57, %27
  %72 = add i64 %71, %70
  %73 = mul nsw i64 %72, %27
  br label %74

74:                                               ; preds = %65, %59
  %75 = phi i64 [ %60, %59 ], [ %70, %65 ]
  %storemerge.in = phi i64 [ %64, %59 ], [ %73, %65 ]
  store i64 %75, ptr %19, align 8
  %storemerge = sitofp i64 %storemerge.in to double
  store double %storemerge, ptr %5, align 8, !tbaa !11
  %76 = load i64, ptr %6, align 8, !tbaa !5
  %77 = icmp eq i64 %76, -1
  %78 = load i64, ptr %0, align 8, !tbaa !5
  %79 = icmp slt i64 %78, 0
  br i1 %79, label %.thread.sink.split, label %80

80:                                               ; preds = %74
  %81 = load i64, ptr %1, align 8, !tbaa !5
  %82 = icmp slt i64 %81, 0
  br i1 %82, label %.thread.sink.split, label %83

83:                                               ; preds = %80
  %84 = load i64, ptr %3, align 8, !tbaa !5
  %spec.select = call i64 @llvm.umax.i64(i64 %78, i64 1)
  %85 = icmp slt i64 %84, %spec.select
  br i1 %85, label %.thread.sink.split, label %86

86:                                               ; preds = %83
  %spec.select315 = call i64 @llvm.umax.i64(i64 %81, i64 1)
  %87 = icmp sge i64 %76, %spec.select315
  %or.cond = or i1 %77, %87
  br i1 %or.cond, label %88, label %.thread.sink.split

88:                                               ; preds = %86
  %.pr = load i64, ptr %7, align 8, !tbaa !5
  %.not298 = icmp eq i64 %.pr, 0
  br i1 %.not298, label %92, label %.thread

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

.thread:                                          ; preds = %.thread.sink.split, %88
  %89 = phi i64 [ %.pr, %88 ], [ %.sink, %.thread.sink.split ]
  %90 = sub nsw i64 0, %89
  store i64 %90, ptr %9, align 8, !tbaa !5
  %91 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %9) #5
  br label %313

92:                                               ; preds = %88
  br i1 %77, label %313, label %93

93:                                               ; preds = %92
  %94 = icmp eq i64 %., 0
  br i1 %94, label %95, label %96

95:                                               ; preds = %93
  store double 1.000000e+00, ptr %5, align 8, !tbaa !11
  br label %313

96:                                               ; preds = %93
  %97 = icmp slt i64 %.0274, %.
  %or.cond317 = select i1 %or.cond314, i1 %97, i1 false
  br i1 %or.cond317, label %98, label %117

98:                                               ; preds = %96
  br i1 %58, label %99, label %.thread321

99:                                               ; preds = %98
  %100 = add nsw i64 %75, %57
  %101 = mul nsw i64 %100, %27
  %102 = mul nsw i64 %43, %43
  %103 = add nsw i64 %101, %102
  %104 = icmp slt i64 %76, %103
  br i1 %104, label %110, label %117

.thread321:                                       ; preds = %98
  %105 = sub i64 %57, %27
  %106 = add i64 %105, %75
  %107 = mul nsw i64 %106, %27
  %108 = icmp slt i64 %76, %107
  br i1 %108, label %.thread324, label %117

.thread324:                                       ; preds = %.thread321
  %109 = sdiv i64 %76, %106
  br label %113

110:                                              ; preds = %99
  %111 = sub nsw i64 %76, %102
  %112 = sdiv i64 %111, %100
  br label %113

113:                                              ; preds = %110, %.thread324
  %.0273323326 = phi i64 [ %103, %110 ], [ %107, %.thread324 ]
  %storemerge301 = phi i64 [ %112, %110 ], [ %109, %.thread324 ]
  store i64 %storemerge301, ptr %16, align 8, !tbaa !5
  store i64 2, ptr %9, align 8, !tbaa !5
  %114 = call i64 @ilaenv_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #5
  %115 = load i64, ptr %9, align 8
  %116 = call i64 @llvm.smax.i64(i64 %115, i64 %114)
  br label %117

117:                                              ; preds = %.thread321, %113, %99, %96
  %118 = phi i64 [ %storemerge301, %113 ], [ %27, %99 ], [ %27, %96 ], [ %27, %.thread321 ]
  %.1 = phi i64 [ %.0273323326, %113 ], [ %103, %99 ], [ %25, %96 ], [ %107, %.thread321 ]
  %.0272 = phi i64 [ %116, %113 ], [ 2, %99 ], [ 2, %96 ], [ 2, %.thread321 ]
  %.not303 = icmp sge i64 %118, %.0272
  %119 = icmp slt i64 %118, %.
  %or.cond318 = select i1 %.not303, i1 %119, i1 false
  %or.cond319 = select i1 %or.cond318, i1 %97, i1 false
  br i1 %or.cond319, label %120, label %.thread328

120:                                              ; preds = %117
  store i64 %34, ptr %9, align 8, !tbaa !5
  store i64 %118, ptr %10, align 8, !tbaa !5
  %121 = icmp slt i64 %118, 0
  %122 = icmp slt i64 %34, 2
  %123 = icmp sgt i64 %34, 0
  %.in344 = select i1 %121, i1 %122, i1 %123
  br i1 %.in344, label %.lr.ph348, label %.thread333

.lr.ph348:                                        ; preds = %120
  %124 = add i64 %20, 1
  %.pre372 = mul nsw i64 %43, %43
  %125 = mul nsw i64 %43, %43
  %invariant.gep396 = getelementptr double, ptr %5, i64 %125
  br label %126

126:                                              ; preds = %.lr.ph348, %171
  %.0277.neg346 = phi i64 [ -1, %.lr.ph348 ], [ %.0277.neg, %171 ]
  %.0277345 = phi i64 [ 1, %.lr.ph348 ], [ %173, %171 ]
  %127 = sub nsw i64 %., %.0277345
  %128 = add nsw i64 %127, 1
  %129 = load i64, ptr %16, align 8
  %130 = call i64 @llvm.smin.i64(i64 %128, i64 %129)
  store i64 %130, ptr %15, align 8, !tbaa !5
  %131 = sub nsw i64 %.0277345, %129
  store i64 %131, ptr %11, align 8, !tbaa !5
  store i64 %129, ptr %12, align 8, !tbaa !5
  %132 = icmp slt i64 %129, 0
  %133 = icmp slt i64 %131, 2
  %134 = icmp sgt i64 %131, 0
  %.in312342 = select i1 %132, i1 %133, i1 %134
  br i1 %.in312342, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %126
  %135 = mul nsw i64 %.0277345, %20
  %invariant.gep = getelementptr double, ptr %22, i64 %135
  br label %136

136:                                              ; preds = %.lr.ph, %136
  %.0275343 = phi i64 [ 1, %.lr.ph ], [ %147, %136 ]
  %137 = load i64, ptr %0, align 8, !tbaa !5
  %reass.sub = sub i64 %137, %.0275343
  %138 = add i64 %reass.sub, 1
  store i64 %138, ptr %13, align 8, !tbaa !5
  %139 = mul i64 %.0275343, %124
  %140 = getelementptr inbounds double, ptr %22, i64 %139
  %141 = getelementptr inbounds double, ptr %24, i64 %.0275343
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0275343
  %142 = load i64, ptr %19, align 8, !tbaa !5
  %143 = load i64, ptr %16, align 8, !tbaa !5
  %144 = mul nsw i64 %143, %142
  %gep397 = getelementptr double, ptr %invariant.gep396, i64 %144
  %145 = call i32 @dlarfb_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %13, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef %140, ptr noundef nonnull %3, ptr noundef nonnull %141, ptr noundef nonnull %19, ptr noundef %gep, ptr noundef nonnull %3, ptr noundef %gep397, ptr noundef nonnull %15) #5
  %146 = load i64, ptr %12, align 8, !tbaa !5
  %147 = add nsw i64 %146, %.0275343
  %148 = icmp slt i64 %146, 0
  %149 = icmp sge i64 %147, %131
  %150 = icmp sle i64 %147, %131
  %.in312 = select i1 %148, i1 %149, i1 %150
  br i1 %.in312, label %136, label %._crit_edge.loopexit, !llvm.loop !13

._crit_edge.loopexit:                             ; preds = %136
  %.pre = load i64, ptr %16, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %126, %._crit_edge.loopexit
  %.pre-phi = phi i64 [ %125, %._crit_edge.loopexit ], [ %.pre372, %126 ]
  %151 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ %129, %126 ]
  %152 = load i64, ptr %0, align 8, !tbaa !5
  %153 = add i64 %.0277.neg346, 1
  %154 = add i64 %153, %152
  store i64 %154, ptr %12, align 8, !tbaa !5
  %155 = mul i64 %.0277345, %124
  %156 = getelementptr inbounds double, ptr %22, i64 %155
  %157 = getelementptr inbounds double, ptr %23, i64 %.0277345
  %158 = load i64, ptr %19, align 8, !tbaa !5
  %159 = mul nsw i64 %151, %158
  %160 = getelementptr double, ptr %5, i64 %159
  %161 = getelementptr double, ptr %160, i64 %.pre-phi
  %162 = call i32 @dgeqr2_(ptr noundef nonnull %12, ptr noundef nonnull %15, ptr noundef %156, ptr noundef nonnull %3, ptr noundef nonnull %157, ptr noundef %161, ptr noundef nonnull %18) #5
  %163 = load i64, ptr %15, align 8, !tbaa !5
  %164 = add nsw i64 %163, %.0277345
  %165 = load i64, ptr %1, align 8, !tbaa !5
  %.not313 = icmp sgt i64 %164, %165
  br i1 %.not313, label %171, label %166

166:                                              ; preds = %._crit_edge
  %167 = load i64, ptr %0, align 8, !tbaa !5
  %168 = add i64 %153, %167
  store i64 %168, ptr %12, align 8, !tbaa !5
  %169 = getelementptr inbounds double, ptr %24, i64 %.0277345
  %170 = call i32 @dlarft_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %12, ptr noundef nonnull %15, ptr noundef %156, ptr noundef nonnull %3, ptr noundef nonnull %157, ptr noundef nonnull %169, ptr noundef nonnull %19) #5
  br label %171

171:                                              ; preds = %._crit_edge, %166
  %172 = load i64, ptr %10, align 8, !tbaa !5
  %173 = add nsw i64 %172, %.0277345
  %.0277.neg = sub i64 0, %173
  %174 = icmp slt i64 %172, 0
  %175 = load i64, ptr %9, align 8
  %176 = icmp sge i64 %173, %175
  %177 = icmp sle i64 %173, %175
  %.in = select i1 %174, i1 %176, i1 %177
  br i1 %.in, label %126, label %._crit_edge349, !llvm.loop !15

._crit_edge349:                                   ; preds = %171
  %.not304 = icmp sgt i64 %173, %.
  br i1 %.not304, label %222, label %178

.thread328:                                       ; preds = %117
  %.not304330 = icmp slt i64 %., 1
  br i1 %.not304330, label %.thread338, label %.thread333

178:                                              ; preds = %._crit_edge349
  %.not305 = icmp eq i64 %173, 1
  br i1 %.not305, label %.thread333, label %179

179:                                              ; preds = %178
  %180 = load i64, ptr %16, align 8, !tbaa !5
  %181 = sub nsw i64 %173, %180
  store i64 %181, ptr %10, align 8, !tbaa !5
  store i64 %180, ptr %9, align 8, !tbaa !5
  %182 = icmp slt i64 %180, 0
  %183 = icmp slt i64 %181, 2
  %184 = icmp sgt i64 %181, 0
  %.in306351 = select i1 %182, i1 %183, i1 %184
  br i1 %.in306351, label %.lr.ph354, label %.._crit_edge355_crit_edge

.._crit_edge355_crit_edge:                        ; preds = %179
  %.pre373 = add i64 %20, 1
  %.pre375 = mul nsw i64 %43, %43
  br label %._crit_edge355

.lr.ph354:                                        ; preds = %179
  %185 = sub nsw i64 %., %173
  %186 = add nsw i64 %185, 1
  %187 = add i64 %20, 1
  %188 = mul nsw i64 %173, %20
  %invariant.gep356 = getelementptr double, ptr %22, i64 %188
  %189 = mul nsw i64 %43, %43
  %invariant.gep398 = getelementptr double, ptr %5, i64 %189
  br label %190

190:                                              ; preds = %.lr.ph354, %190
  %.1276352 = phi i64 [ 1, %.lr.ph354 ], [ %201, %190 ]
  %191 = load i64, ptr %0, align 8, !tbaa !5
  %reass.sub366 = sub i64 %191, %.1276352
  %192 = add i64 %reass.sub366, 1
  store i64 %192, ptr %12, align 8, !tbaa !5
  store i64 %186, ptr %11, align 8, !tbaa !5
  store i64 %186, ptr %13, align 8, !tbaa !5
  %193 = mul i64 %.1276352, %187
  %194 = getelementptr inbounds double, ptr %22, i64 %193
  %195 = getelementptr inbounds double, ptr %24, i64 %.1276352
  %gep357 = getelementptr double, ptr %invariant.gep356, i64 %.1276352
  %196 = load i64, ptr %19, align 8, !tbaa !5
  %197 = load i64, ptr %16, align 8, !tbaa !5
  %198 = mul nsw i64 %197, %196
  %gep399 = getelementptr double, ptr %invariant.gep398, i64 %198
  %199 = call i32 @dlarfb_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %16, ptr noundef %194, ptr noundef nonnull %3, ptr noundef nonnull %195, ptr noundef nonnull %19, ptr noundef %gep357, ptr noundef nonnull %3, ptr noundef %gep399, ptr noundef nonnull %13) #5
  %200 = load i64, ptr %9, align 8, !tbaa !5
  %201 = add nsw i64 %200, %.1276352
  %202 = icmp slt i64 %200, 0
  %203 = load i64, ptr %10, align 8
  %204 = icmp sge i64 %201, %203
  %205 = icmp sle i64 %201, %203
  %.in306 = select i1 %202, i1 %204, i1 %205
  br i1 %.in306, label %190, label %._crit_edge355.loopexit, !llvm.loop !16

._crit_edge355.loopexit:                          ; preds = %190
  %.pre370 = load i64, ptr %16, align 8, !tbaa !5
  br label %._crit_edge355

._crit_edge355:                                   ; preds = %.._crit_edge355_crit_edge, %._crit_edge355.loopexit
  %.pre-phi376 = phi i64 [ %.pre375, %.._crit_edge355_crit_edge ], [ %189, %._crit_edge355.loopexit ]
  %.pre-phi374 = phi i64 [ %.pre373, %.._crit_edge355_crit_edge ], [ %187, %._crit_edge355.loopexit ]
  %206 = phi i64 [ %180, %.._crit_edge355_crit_edge ], [ %.pre370, %._crit_edge355.loopexit ]
  %207 = load i64, ptr %0, align 8, !tbaa !5
  %reass.sub400 = sub i64 %207, %173
  %208 = add i64 %reass.sub400, 1
  store i64 %208, ptr %9, align 8, !tbaa !5
  %209 = add i64 %., 1
  %210 = sub i64 %209, %173
  store i64 %210, ptr %10, align 8, !tbaa !5
  %211 = mul i64 %173, %.pre-phi374
  %212 = getelementptr inbounds double, ptr %22, i64 %211
  %213 = getelementptr inbounds double, ptr %23, i64 %173
  %214 = load i64, ptr %19, align 8, !tbaa !5
  %215 = mul nsw i64 %206, %214
  %216 = getelementptr double, ptr %5, i64 %215
  %217 = getelementptr double, ptr %216, i64 %.pre-phi376
  %218 = call i32 @dgeqr2_(ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %212, ptr noundef nonnull %3, ptr noundef nonnull %213, ptr noundef %217, ptr noundef nonnull %18) #5
  br label %222

.thread333:                                       ; preds = %120, %.thread328, %178
  %219 = load i64, ptr %0, align 8, !tbaa !5
  store i64 %219, ptr %9, align 8, !tbaa !5
  %220 = load i64, ptr %1, align 8, !tbaa !5
  store i64 %220, ptr %10, align 8, !tbaa !5
  %221 = call i32 @dgeqr2_(ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %18) #5
  br label %.thread338

222:                                              ; preds = %._crit_edge355, %._crit_edge349
  %223 = load i64, ptr %0, align 8, !tbaa !5
  %224 = load i64, ptr %1, align 8, !tbaa !5
  %225 = icmp slt i64 %223, %224
  %226 = icmp ne i64 %173, 1
  %or.cond3 = and i1 %226, %225
  br i1 %or.cond3, label %227, label %.thread338

227:                                              ; preds = %222
  %228 = load i64, ptr %16, align 8, !tbaa !5
  %.not307 = icmp slt i64 %228, %43
  %reass.sub401 = sub i64 %223, %173
  %229 = add i64 %reass.sub401, 1
  store i64 %229, ptr %9, align 8, !tbaa !5
  %230 = add i64 %., 1
  %231 = sub i64 %230, %173
  store i64 %231, ptr %10, align 8, !tbaa !5
  %232 = add i64 %20, 1
  %233 = mul i64 %173, %232
  %234 = getelementptr inbounds double, ptr %22, i64 %233
  %235 = getelementptr inbounds double, ptr %23, i64 %173
  br i1 %.not307, label %239, label %236

236:                                              ; preds = %227
  %237 = getelementptr inbounds double, ptr %24, i64 %173
  %238 = call i32 @dlarft_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %234, ptr noundef nonnull %3, ptr noundef nonnull %235, ptr noundef nonnull %237, ptr noundef nonnull %19) #5
  br label %244

239:                                              ; preds = %227
  %240 = load i64, ptr %19, align 8, !tbaa !5
  %241 = mul nsw i64 %240, %228
  %242 = getelementptr double, ptr %5, i64 %241
  %243 = call i32 @dlarft_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %234, ptr noundef nonnull %3, ptr noundef nonnull %235, ptr noundef %242, ptr noundef nonnull %17) #5
  br label %244

244:                                              ; preds = %239, %236
  store i64 %34, ptr %9, align 8, !tbaa !5
  %245 = load i64, ptr %16, align 8, !tbaa !5
  store i64 %245, ptr %10, align 8, !tbaa !5
  %246 = icmp slt i64 %245, 0
  %.in308358 = select i1 %246, i1 %122, i1 %123
  br i1 %.in308358, label %.lr.ph362, label %._crit_edge363

.lr.ph362:                                        ; preds = %244
  %247 = add i64 %20, 1
  br label %248

248:                                              ; preds = %.lr.ph362, %248
  %.2.neg360 = phi i64 [ -1, %.lr.ph362 ], [ %.2.neg, %248 ]
  %.2359 = phi i64 [ 1, %.lr.ph362 ], [ %273, %248 ]
  %249 = sub nsw i64 %., %.2359
  %250 = add nsw i64 %249, 1
  %251 = load i64, ptr %16, align 8
  %252 = call i64 @llvm.smin.i64(i64 %250, i64 %251)
  store i64 %252, ptr %15, align 8, !tbaa !5
  %253 = load i64, ptr %0, align 8, !tbaa !5
  %254 = add i64 %.2.neg360, 1
  %255 = add i64 %254, %253
  store i64 %255, ptr %12, align 8, !tbaa !5
  %256 = load i64, ptr %1, align 8, !tbaa !5
  %257 = sub nsw i64 %256, %253
  store i64 %257, ptr %11, align 8, !tbaa !5
  store i64 %257, ptr %13, align 8, !tbaa !5
  %258 = mul i64 %.2359, %247
  %259 = getelementptr inbounds double, ptr %22, i64 %258
  %260 = getelementptr inbounds double, ptr %24, i64 %.2359
  %261 = add nsw i64 %253, 1
  %262 = mul nsw i64 %261, %20
  %263 = getelementptr double, ptr %22, i64 %.2359
  %264 = getelementptr double, ptr %263, i64 %262
  %265 = load i64, ptr %19, align 8, !tbaa !5
  %266 = mul nsw i64 %265, %251
  %267 = load i64, ptr %17, align 8, !tbaa !5
  %268 = mul nsw i64 %267, %267
  %269 = getelementptr double, ptr %5, i64 %266
  %270 = getelementptr double, ptr %269, i64 %268
  %271 = call i32 @dlarfb_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %15, ptr noundef %259, ptr noundef nonnull %3, ptr noundef nonnull %260, ptr noundef nonnull %19, ptr noundef %264, ptr noundef nonnull %3, ptr noundef %270, ptr noundef nonnull %13) #5
  %272 = load i64, ptr %10, align 8, !tbaa !5
  %273 = add nsw i64 %272, %.2359
  %.2.neg = sub i64 0, %273
  %274 = icmp slt i64 %272, 0
  %275 = load i64, ptr %9, align 8
  %276 = icmp sge i64 %273, %275
  %277 = icmp sle i64 %273, %275
  %.in308 = select i1 %274, i1 %276, i1 %277
  br i1 %.in308, label %248, label %._crit_edge363.loopexit, !llvm.loop !17

._crit_edge363.loopexit:                          ; preds = %248
  %.pre371 = load i64, ptr %16, align 8, !tbaa !5
  br label %._crit_edge363

._crit_edge363:                                   ; preds = %._crit_edge363.loopexit, %244
  %278 = phi i64 [ %245, %244 ], [ %.pre371, %._crit_edge363.loopexit ]
  %.2.lcssa = phi i64 [ 1, %244 ], [ %273, %._crit_edge363.loopexit ]
  %.2.neg.lcssa = phi i64 [ -1, %244 ], [ %.2.neg, %._crit_edge363.loopexit ]
  %279 = load i64, ptr %17, align 8, !tbaa !5
  %.not309 = icmp sgt i64 %279, %278
  %280 = load i64, ptr %0, align 8, !tbaa !5
  %281 = add i64 %.2.neg.lcssa, 1
  %282 = add i64 %281, %280
  store i64 %282, ptr %10, align 8, !tbaa !5
  %283 = load i64, ptr %1, align 8, !tbaa !5
  %284 = sub nsw i64 %283, %280
  store i64 %284, ptr %9, align 8, !tbaa !5
  %285 = add i64 %., 1
  %286 = add i64 %285, %.2.neg.lcssa
  store i64 %286, ptr %12, align 8, !tbaa !5
  store i64 %284, ptr %11, align 8, !tbaa !5
  %287 = add i64 %20, 1
  %288 = mul i64 %.2.lcssa, %287
  %289 = getelementptr inbounds double, ptr %22, i64 %288
  %290 = mul nsw i64 %279, %279
  br i1 %.not309, label %302, label %291

291:                                              ; preds = %._crit_edge363
  %292 = getelementptr inbounds double, ptr %24, i64 %.2.lcssa
  %293 = add nsw i64 %280, 1
  %294 = mul nsw i64 %293, %20
  %295 = getelementptr double, ptr %22, i64 %.2.lcssa
  %296 = getelementptr double, ptr %295, i64 %294
  %297 = load i64, ptr %19, align 8, !tbaa !5
  %298 = mul nsw i64 %297, %278
  %299 = getelementptr double, ptr %5, i64 %298
  %300 = getelementptr double, ptr %299, i64 %290
  %301 = call i32 @dlarfb_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %10, ptr noundef nonnull %9, ptr noundef nonnull %12, ptr noundef %289, ptr noundef nonnull %3, ptr noundef nonnull %292, ptr noundef nonnull %19, ptr noundef %296, ptr noundef nonnull %3, ptr noundef %300, ptr noundef nonnull %11) #5
  br label %.thread338

302:                                              ; preds = %._crit_edge363
  %303 = load i64, ptr %19, align 8, !tbaa !5
  %304 = mul nsw i64 %303, %278
  %305 = getelementptr double, ptr %5, i64 %304
  %306 = add nsw i64 %280, 1
  %307 = mul nsw i64 %306, %20
  %308 = getelementptr double, ptr %22, i64 %.2.lcssa
  %309 = getelementptr double, ptr %308, i64 %307
  %310 = getelementptr double, ptr %305, i64 %290
  %311 = call i32 @dlarfb_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull %10, ptr noundef nonnull %9, ptr noundef nonnull %12, ptr noundef %289, ptr noundef nonnull %3, ptr noundef %305, ptr noundef nonnull %17, ptr noundef %309, ptr noundef nonnull %3, ptr noundef %310, ptr noundef nonnull %11) #5
  br label %.thread338

.thread338:                                       ; preds = %.thread333, %.thread328, %291, %302, %222
  %312 = sitofp i64 %.1 to double
  store double %312, ptr %5, align 8, !tbaa !11
  br label %313

313:                                              ; preds = %92, %.thread338, %95, %.thread
  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 4, 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 @ilaenv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare double @sceil_(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) #3

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

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

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}


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