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

; 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 [8 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1

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

60:                                               ; preds = %9
  br label %64

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

64:                                               ; preds = %61, %60
  %65 = phi i64 [ 1, %60 ], [ %63, %61 ]
  %66 = load i64, ptr %29, align 8, !tbaa !9
  %67 = mul nsw i64 %65, %66
  store i64 %67, ptr %37, align 8, !tbaa !9
  %68 = load i64, ptr %37, align 8, !tbaa !9
  %69 = sitofp i64 %68 to double
  %70 = load ptr, ptr %17, align 8, !tbaa !5
  %71 = getelementptr inbounds double, ptr %70, i64 1
  store double %69, ptr %71, align 8, !tbaa !11
  %72 = load ptr, ptr %18, align 8, !tbaa !5
  %73 = load i64, ptr %72, align 8, !tbaa !9
  %74 = icmp eq i64 %73, -1
  %75 = zext i1 %74 to i32
  %76 = sext i32 %75 to i64
  store i64 %76, ptr %38, align 8, !tbaa !9
  %77 = load ptr, ptr %11, align 8, !tbaa !5
  %78 = load i64, ptr %77, align 8, !tbaa !9
  %79 = icmp slt i64 %78, 0
  br i1 %79, label %80, label %82

80:                                               ; preds = %64
  %81 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -1, ptr %81, align 8, !tbaa !9
  br label %143

82:                                               ; preds = %64
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  %84 = load i64, ptr %83, align 8, !tbaa !9
  %85 = icmp slt i64 %84, 0
  br i1 %85, label %92, label %86

86:                                               ; preds = %82
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = load i64, ptr %87, align 8, !tbaa !9
  %89 = load ptr, ptr %11, align 8, !tbaa !5
  %90 = load i64, ptr %89, align 8, !tbaa !9
  %91 = icmp sgt i64 %88, %90
  br i1 %91, label %92, label %94

92:                                               ; preds = %86, %82
  %93 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -2, ptr %93, align 8, !tbaa !9
  br label %142

94:                                               ; preds = %86
  %95 = load ptr, ptr %13, align 8, !tbaa !5
  %96 = load i64, ptr %95, align 8, !tbaa !9
  %97 = icmp slt i64 %96, 0
  br i1 %97, label %104, label %98

98:                                               ; preds = %94
  %99 = load ptr, ptr %13, align 8, !tbaa !5
  %100 = load i64, ptr %99, align 8, !tbaa !9
  %101 = load ptr, ptr %12, align 8, !tbaa !5
  %102 = load i64, ptr %101, align 8, !tbaa !9
  %103 = icmp sgt i64 %100, %102
  br i1 %103, label %104, label %106

104:                                              ; preds = %98, %94
  %105 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -3, ptr %105, align 8, !tbaa !9
  br label %141

106:                                              ; preds = %98
  %107 = load ptr, ptr %15, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  %109 = load ptr, ptr %11, align 8, !tbaa !5
  %110 = load i64, ptr %109, align 8, !tbaa !9
  %111 = icmp sge i64 1, %110
  br i1 %111, label %112, label %113

112:                                              ; preds = %106
  br label %116

113:                                              ; preds = %106
  %114 = load ptr, ptr %11, align 8, !tbaa !5
  %115 = load i64, ptr %114, align 8, !tbaa !9
  br label %116

116:                                              ; preds = %113, %112
  %117 = phi i64 [ 1, %112 ], [ %115, %113 ]
  %118 = icmp slt i64 %108, %117
  br i1 %118, label %119, label %121

119:                                              ; preds = %116
  %120 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -5, ptr %120, align 8, !tbaa !9
  br label %140

121:                                              ; preds = %116
  %122 = load ptr, ptr %18, align 8, !tbaa !5
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = load ptr, ptr %12, align 8, !tbaa !5
  %125 = load i64, ptr %124, align 8, !tbaa !9
  %126 = icmp sge i64 1, %125
  br i1 %126, label %127, label %128

127:                                              ; preds = %121
  br label %131

128:                                              ; preds = %121
  %129 = load ptr, ptr %12, align 8, !tbaa !5
  %130 = load i64, ptr %129, align 8, !tbaa !9
  br label %131

131:                                              ; preds = %128, %127
  %132 = phi i64 [ 1, %127 ], [ %130, %128 ]
  %133 = icmp slt i64 %123, %132
  br i1 %133, label %134, label %139

134:                                              ; preds = %131
  %135 = load i64, ptr %38, align 8, !tbaa !9
  %136 = icmp ne i64 %135, 0
  br i1 %136, label %139, label %137

137:                                              ; preds = %134
  %138 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -8, ptr %138, align 8, !tbaa !9
  br label %139

139:                                              ; preds = %137, %134, %131
  br label %140

140:                                              ; preds = %139, %119
  br label %141

141:                                              ; preds = %140, %104
  br label %142

142:                                              ; preds = %141, %92
  br label %143

143:                                              ; preds = %142, %80
  %144 = load ptr, ptr %19, align 8, !tbaa !5
  %145 = load i64, ptr %144, align 8, !tbaa !9
  %146 = icmp ne i64 %145, 0
  br i1 %146, label %147, label %152

147:                                              ; preds = %143
  %148 = load ptr, ptr %19, align 8, !tbaa !5
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = sub nsw i64 0, %149
  store i64 %150, ptr %22, align 8, !tbaa !9
  %151 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %22)
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %489

152:                                              ; preds = %143
  %153 = load i64, ptr %38, align 8, !tbaa !9
  %154 = icmp ne i64 %153, 0
  br i1 %154, label %155, label %156

155:                                              ; preds = %152
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %489

156:                                              ; preds = %152
  br label %157

157:                                              ; preds = %156
  %158 = load ptr, ptr %12, align 8, !tbaa !5
  %159 = load i64, ptr %158, align 8, !tbaa !9
  %160 = icmp sle i64 %159, 0
  br i1 %160, label %161, label %164

161:                                              ; preds = %157
  %162 = load ptr, ptr %17, align 8, !tbaa !5
  %163 = getelementptr inbounds double, ptr %162, i64 1
  store double 1.000000e+00, ptr %163, align 8, !tbaa !11
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %489

164:                                              ; preds = %157
  store i64 2, ptr %34, align 8, !tbaa !9
  store i64 0, ptr %32, align 8, !tbaa !9
  %165 = load ptr, ptr %12, align 8, !tbaa !5
  %166 = load i64, ptr %165, align 8, !tbaa !9
  store i64 %166, ptr %33, align 8, !tbaa !9
  %167 = load i64, ptr %29, align 8, !tbaa !9
  %168 = icmp sgt i64 %167, 1
  br i1 %168, label %169, label %222

169:                                              ; preds = %164
  %170 = load i64, ptr %29, align 8, !tbaa !9
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = load i64, ptr %171, align 8, !tbaa !9
  %173 = icmp slt i64 %170, %172
  br i1 %173, label %174, label %222

174:                                              ; preds = %169
  store i64 0, ptr %22, align 8, !tbaa !9
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = load ptr, ptr %13, align 8, !tbaa !5
  %178 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %175, ptr noundef %176, ptr noundef %177, ptr noundef @c_n1)
  store i64 %178, ptr %23, align 8, !tbaa !9
  %179 = load i64, ptr %22, align 8, !tbaa !9
  %180 = load i64, ptr %23, align 8, !tbaa !9
  %181 = icmp sge i64 %179, %180
  br i1 %181, label %182, label %184

182:                                              ; preds = %174
  %183 = load i64, ptr %22, align 8, !tbaa !9
  br label %186

184:                                              ; preds = %174
  %185 = load i64, ptr %23, align 8, !tbaa !9
  br label %186

186:                                              ; preds = %184, %182
  %187 = phi i64 [ %183, %182 ], [ %185, %184 ]
  store i64 %187, ptr %32, align 8, !tbaa !9
  %188 = load i64, ptr %32, align 8, !tbaa !9
  %189 = load ptr, ptr %13, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = icmp slt i64 %188, %190
  br i1 %191, label %192, label %221

192:                                              ; preds = %186
  %193 = load ptr, ptr %12, align 8, !tbaa !5
  %194 = load i64, ptr %193, align 8, !tbaa !9
  store i64 %194, ptr %36, align 8, !tbaa !9
  %195 = load i64, ptr %36, align 8, !tbaa !9
  %196 = load i64, ptr %29, align 8, !tbaa !9
  %197 = mul nsw i64 %195, %196
  store i64 %197, ptr %33, align 8, !tbaa !9
  %198 = load ptr, ptr %18, align 8, !tbaa !5
  %199 = load i64, ptr %198, align 8, !tbaa !9
  %200 = load i64, ptr %33, align 8, !tbaa !9
  %201 = icmp slt i64 %199, %200
  br i1 %201, label %202, label %220

202:                                              ; preds = %192
  %203 = load ptr, ptr %18, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = load i64, ptr %36, align 8, !tbaa !9
  %206 = sdiv i64 %204, %205
  store i64 %206, ptr %29, align 8, !tbaa !9
  store i64 2, ptr %22, align 8, !tbaa !9
  %207 = load ptr, ptr %11, align 8, !tbaa !5
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = load ptr, ptr %13, align 8, !tbaa !5
  %210 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %207, ptr noundef %208, ptr noundef %209, ptr noundef @c_n1)
  store i64 %210, ptr %23, align 8, !tbaa !9
  %211 = load i64, ptr %22, align 8, !tbaa !9
  %212 = load i64, ptr %23, align 8, !tbaa !9
  %213 = icmp sge i64 %211, %212
  br i1 %213, label %214, label %216

214:                                              ; preds = %202
  %215 = load i64, ptr %22, align 8, !tbaa !9
  br label %218

216:                                              ; preds = %202
  %217 = load i64, ptr %23, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %216, %214
  %219 = phi i64 [ %215, %214 ], [ %217, %216 ]
  store i64 %219, ptr %34, align 8, !tbaa !9
  br label %220

220:                                              ; preds = %218, %192
  br label %221

221:                                              ; preds = %220, %186
  br label %222

222:                                              ; preds = %221, %169, %164
  %223 = load i64, ptr %29, align 8, !tbaa !9
  %224 = load i64, ptr %34, align 8, !tbaa !9
  %225 = icmp sge i64 %223, %224
  br i1 %225, label %226, label %290

226:                                              ; preds = %222
  %227 = load i64, ptr %29, align 8, !tbaa !9
  %228 = load ptr, ptr %13, align 8, !tbaa !5
  %229 = load i64, ptr %228, align 8, !tbaa !9
  %230 = icmp slt i64 %227, %229
  br i1 %230, label %231, label %290

231:                                              ; preds = %226
  %232 = load i64, ptr %32, align 8, !tbaa !9
  %233 = load ptr, ptr %13, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = icmp slt i64 %232, %234
  br i1 %235, label %236, label %290

236:                                              ; preds = %231
  %237 = load ptr, ptr %13, align 8, !tbaa !5
  %238 = load i64, ptr %237, align 8, !tbaa !9
  %239 = load i64, ptr %32, align 8, !tbaa !9
  %240 = sub nsw i64 %238, %239
  %241 = sub nsw i64 %240, 1
  %242 = load i64, ptr %29, align 8, !tbaa !9
  %243 = sdiv i64 %241, %242
  %244 = load i64, ptr %29, align 8, !tbaa !9
  %245 = mul nsw i64 %243, %244
  store i64 %245, ptr %30, align 8, !tbaa !9
  %246 = load ptr, ptr %13, align 8, !tbaa !5
  %247 = load i64, ptr %246, align 8, !tbaa !9
  store i64 %247, ptr %22, align 8, !tbaa !9
  %248 = load i64, ptr %30, align 8, !tbaa !9
  %249 = load i64, ptr %29, align 8, !tbaa !9
  %250 = add nsw i64 %248, %249
  store i64 %250, ptr %23, align 8, !tbaa !9
  %251 = load i64, ptr %22, align 8, !tbaa !9
  %252 = load i64, ptr %23, align 8, !tbaa !9
  %253 = icmp sle i64 %251, %252
  br i1 %253, label %254, label %256

254:                                              ; preds = %236
  %255 = load i64, ptr %22, align 8, !tbaa !9
  br label %258

256:                                              ; preds = %236
  %257 = load i64, ptr %23, align 8, !tbaa !9
  br label %258

258:                                              ; preds = %256, %254
  %259 = phi i64 [ %255, %254 ], [ %257, %256 ]
  store i64 %259, ptr %31, align 8, !tbaa !9
  %260 = load ptr, ptr %12, align 8, !tbaa !5
  %261 = load i64, ptr %260, align 8, !tbaa !9
  store i64 %261, ptr %22, align 8, !tbaa !9
  %262 = load i64, ptr %31, align 8, !tbaa !9
  %263 = add nsw i64 %262, 1
  store i64 %263, ptr %26, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %286, %258
  %265 = load i64, ptr %26, align 8, !tbaa !9
  %266 = load i64, ptr %22, align 8, !tbaa !9
  %267 = icmp sle i64 %265, %266
  br i1 %267, label %268, label %289

268:                                              ; preds = %264
  %269 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %269, ptr %23, align 8, !tbaa !9
  store i64 1, ptr %25, align 8, !tbaa !9
  br label %270

270:                                              ; preds = %282, %268
  %271 = load i64, ptr %25, align 8, !tbaa !9
  %272 = load i64, ptr %23, align 8, !tbaa !9
  %273 = icmp sle i64 %271, %272
  br i1 %273, label %274, label %285

274:                                              ; preds = %270
  %275 = load ptr, ptr %14, align 8, !tbaa !5
  %276 = load i64, ptr %25, align 8, !tbaa !9
  %277 = load i64, ptr %26, align 8, !tbaa !9
  %278 = load i64, ptr %20, align 8, !tbaa !9
  %279 = mul nsw i64 %277, %278
  %280 = add nsw i64 %276, %279
  %281 = getelementptr inbounds double, ptr %275, i64 %280
  store double 0.000000e+00, ptr %281, align 8, !tbaa !11
  br label %282

282:                                              ; preds = %274
  %283 = load i64, ptr %25, align 8, !tbaa !9
  %284 = add nsw i64 %283, 1
  store i64 %284, ptr %25, align 8, !tbaa !9
  br label %270, !llvm.loop !13

285:                                              ; preds = %270
  br label %286

286:                                              ; preds = %285
  %287 = load i64, ptr %26, align 8, !tbaa !9
  %288 = add nsw i64 %287, 1
  store i64 %288, ptr %26, align 8, !tbaa !9
  br label %264, !llvm.loop !15

289:                                              ; preds = %264
  br label %291

290:                                              ; preds = %231, %226, %222
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %291

291:                                              ; preds = %290, %289
  %292 = load i64, ptr %31, align 8, !tbaa !9
  %293 = load ptr, ptr %12, align 8, !tbaa !5
  %294 = load i64, ptr %293, align 8, !tbaa !9
  %295 = icmp slt i64 %292, %294
  br i1 %295, label %296, label %326

296:                                              ; preds = %291
  %297 = load ptr, ptr %11, align 8, !tbaa !5
  %298 = load i64, ptr %297, align 8, !tbaa !9
  %299 = load i64, ptr %31, align 8, !tbaa !9
  %300 = sub nsw i64 %298, %299
  store i64 %300, ptr %22, align 8, !tbaa !9
  %301 = load ptr, ptr %12, align 8, !tbaa !5
  %302 = load i64, ptr %301, align 8, !tbaa !9
  %303 = load i64, ptr %31, align 8, !tbaa !9
  %304 = sub nsw i64 %302, %303
  store i64 %304, ptr %23, align 8, !tbaa !9
  %305 = load ptr, ptr %13, align 8, !tbaa !5
  %306 = load i64, ptr %305, align 8, !tbaa !9
  %307 = load i64, ptr %31, align 8, !tbaa !9
  %308 = sub nsw i64 %306, %307
  store i64 %308, ptr %24, align 8, !tbaa !9
  %309 = load ptr, ptr %14, align 8, !tbaa !5
  %310 = load i64, ptr %31, align 8, !tbaa !9
  %311 = add nsw i64 %310, 1
  %312 = load i64, ptr %31, align 8, !tbaa !9
  %313 = add nsw i64 %312, 1
  %314 = load i64, ptr %20, align 8, !tbaa !9
  %315 = mul nsw i64 %313, %314
  %316 = add nsw i64 %311, %315
  %317 = getelementptr inbounds double, ptr %309, i64 %316
  %318 = load ptr, ptr %15, align 8, !tbaa !5
  %319 = load ptr, ptr %16, align 8, !tbaa !5
  %320 = load i64, ptr %31, align 8, !tbaa !9
  %321 = add nsw i64 %320, 1
  %322 = getelementptr inbounds double, ptr %319, i64 %321
  %323 = load ptr, ptr %17, align 8, !tbaa !5
  %324 = getelementptr inbounds double, ptr %323, i64 1
  %325 = call i32 @dorg2r_(ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %317, ptr noundef %318, ptr noundef %322, ptr noundef %324, ptr noundef %35)
  br label %326

326:                                              ; preds = %296, %291
  %327 = load i64, ptr %31, align 8, !tbaa !9
  %328 = icmp sgt i64 %327, 0
  br i1 %328, label %329, label %484

329:                                              ; preds = %326
  %330 = load i64, ptr %29, align 8, !tbaa !9
  %331 = sub nsw i64 0, %330
  store i64 %331, ptr %22, align 8, !tbaa !9
  %332 = load i64, ptr %30, align 8, !tbaa !9
  %333 = add nsw i64 %332, 1
  store i64 %333, ptr %25, align 8, !tbaa !9
  br label %334

334:                                              ; preds = %479, %329
  %335 = load i64, ptr %22, align 8, !tbaa !9
  %336 = icmp slt i64 %335, 0
  br i1 %336, label %337, label %341

337:                                              ; preds = %334
  %338 = load i64, ptr %25, align 8, !tbaa !9
  %339 = icmp sge i64 %338, 1
  %340 = zext i1 %339 to i32
  br label %345

341:                                              ; preds = %334
  %342 = load i64, ptr %25, align 8, !tbaa !9
  %343 = icmp sle i64 %342, 1
  %344 = zext i1 %343 to i32
  br label %345

345:                                              ; preds = %341, %337
  %346 = phi i32 [ %340, %337 ], [ %344, %341 ]
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %348, label %483

348:                                              ; preds = %345
  %349 = load i64, ptr %29, align 8, !tbaa !9
  store i64 %349, ptr %23, align 8, !tbaa !9
  %350 = load ptr, ptr %13, align 8, !tbaa !5
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = load i64, ptr %25, align 8, !tbaa !9
  %353 = sub nsw i64 %351, %352
  %354 = add nsw i64 %353, 1
  store i64 %354, ptr %24, align 8, !tbaa !9
  %355 = load i64, ptr %23, align 8, !tbaa !9
  %356 = load i64, ptr %24, align 8, !tbaa !9
  %357 = icmp sle i64 %355, %356
  br i1 %357, label %358, label %360

358:                                              ; preds = %348
  %359 = load i64, ptr %23, align 8, !tbaa !9
  br label %362

360:                                              ; preds = %348
  %361 = load i64, ptr %24, align 8, !tbaa !9
  br label %362

362:                                              ; preds = %360, %358
  %363 = phi i64 [ %359, %358 ], [ %361, %360 ]
  store i64 %363, ptr %28, align 8, !tbaa !9
  %364 = load i64, ptr %25, align 8, !tbaa !9
  %365 = load i64, ptr %28, align 8, !tbaa !9
  %366 = add nsw i64 %364, %365
  %367 = load ptr, ptr %12, align 8, !tbaa !5
  %368 = load i64, ptr %367, align 8, !tbaa !9
  %369 = icmp sle i64 %366, %368
  br i1 %369, label %370, label %427

370:                                              ; preds = %362
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = load i64, ptr %371, align 8, !tbaa !9
  %373 = load i64, ptr %25, align 8, !tbaa !9
  %374 = sub nsw i64 %372, %373
  %375 = add nsw i64 %374, 1
  store i64 %375, ptr %23, align 8, !tbaa !9
  %376 = load ptr, ptr %14, align 8, !tbaa !5
  %377 = load i64, ptr %25, align 8, !tbaa !9
  %378 = load i64, ptr %25, align 8, !tbaa !9
  %379 = load i64, ptr %20, align 8, !tbaa !9
  %380 = mul nsw i64 %378, %379
  %381 = add nsw i64 %377, %380
  %382 = getelementptr inbounds double, ptr %376, i64 %381
  %383 = load ptr, ptr %15, align 8, !tbaa !5
  %384 = load ptr, ptr %16, align 8, !tbaa !5
  %385 = load i64, ptr %25, align 8, !tbaa !9
  %386 = getelementptr inbounds double, ptr %384, i64 %385
  %387 = load ptr, ptr %17, align 8, !tbaa !5
  %388 = getelementptr inbounds double, ptr %387, i64 1
  %389 = call i32 @dlarft_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %23, ptr noundef %28, ptr noundef %382, ptr noundef %383, ptr noundef %386, ptr noundef %388, ptr noundef %36)
  %390 = load ptr, ptr %11, align 8, !tbaa !5
  %391 = load i64, ptr %390, align 8, !tbaa !9
  %392 = load i64, ptr %25, align 8, !tbaa !9
  %393 = sub nsw i64 %391, %392
  %394 = add nsw i64 %393, 1
  store i64 %394, ptr %23, align 8, !tbaa !9
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = load i64, ptr %25, align 8, !tbaa !9
  %398 = sub nsw i64 %396, %397
  %399 = load i64, ptr %28, align 8, !tbaa !9
  %400 = sub nsw i64 %398, %399
  %401 = add nsw i64 %400, 1
  store i64 %401, ptr %24, align 8, !tbaa !9
  %402 = load ptr, ptr %14, align 8, !tbaa !5
  %403 = load i64, ptr %25, align 8, !tbaa !9
  %404 = load i64, ptr %25, align 8, !tbaa !9
  %405 = load i64, ptr %20, align 8, !tbaa !9
  %406 = mul nsw i64 %404, %405
  %407 = add nsw i64 %403, %406
  %408 = getelementptr inbounds double, ptr %402, i64 %407
  %409 = load ptr, ptr %15, align 8, !tbaa !5
  %410 = load ptr, ptr %17, align 8, !tbaa !5
  %411 = getelementptr inbounds double, ptr %410, i64 1
  %412 = load ptr, ptr %14, align 8, !tbaa !5
  %413 = load i64, ptr %25, align 8, !tbaa !9
  %414 = load i64, ptr %25, align 8, !tbaa !9
  %415 = load i64, ptr %28, align 8, !tbaa !9
  %416 = add nsw i64 %414, %415
  %417 = load i64, ptr %20, align 8, !tbaa !9
  %418 = mul nsw i64 %416, %417
  %419 = add nsw i64 %413, %418
  %420 = getelementptr inbounds double, ptr %412, i64 %419
  %421 = load ptr, ptr %15, align 8, !tbaa !5
  %422 = load ptr, ptr %17, align 8, !tbaa !5
  %423 = load i64, ptr %28, align 8, !tbaa !9
  %424 = add nsw i64 %423, 1
  %425 = getelementptr inbounds double, ptr %422, i64 %424
  %426 = call i32 @dlarfb_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %23, ptr noundef %24, ptr noundef %28, ptr noundef %408, ptr noundef %409, ptr noundef %411, ptr noundef %36, ptr noundef %420, ptr noundef %421, ptr noundef %425, ptr noundef %36)
  br label %427

427:                                              ; preds = %370, %362
  %428 = load ptr, ptr %11, align 8, !tbaa !5
  %429 = load i64, ptr %428, align 8, !tbaa !9
  %430 = load i64, ptr %25, align 8, !tbaa !9
  %431 = sub nsw i64 %429, %430
  %432 = add nsw i64 %431, 1
  store i64 %432, ptr %23, align 8, !tbaa !9
  %433 = load ptr, ptr %14, align 8, !tbaa !5
  %434 = load i64, ptr %25, align 8, !tbaa !9
  %435 = load i64, ptr %25, align 8, !tbaa !9
  %436 = load i64, ptr %20, align 8, !tbaa !9
  %437 = mul nsw i64 %435, %436
  %438 = add nsw i64 %434, %437
  %439 = getelementptr inbounds double, ptr %433, i64 %438
  %440 = load ptr, ptr %15, align 8, !tbaa !5
  %441 = load ptr, ptr %16, align 8, !tbaa !5
  %442 = load i64, ptr %25, align 8, !tbaa !9
  %443 = getelementptr inbounds double, ptr %441, i64 %442
  %444 = load ptr, ptr %17, align 8, !tbaa !5
  %445 = getelementptr inbounds double, ptr %444, i64 1
  %446 = call i32 @dorg2r_(ptr noundef %23, ptr noundef %28, ptr noundef %28, ptr noundef %439, ptr noundef %440, ptr noundef %443, ptr noundef %445, ptr noundef %35)
  %447 = load i64, ptr %25, align 8, !tbaa !9
  %448 = load i64, ptr %28, align 8, !tbaa !9
  %449 = add nsw i64 %447, %448
  %450 = sub nsw i64 %449, 1
  store i64 %450, ptr %23, align 8, !tbaa !9
  %451 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %451, ptr %26, align 8, !tbaa !9
  br label %452

452:                                              ; preds = %475, %427
  %453 = load i64, ptr %26, align 8, !tbaa !9
  %454 = load i64, ptr %23, align 8, !tbaa !9
  %455 = icmp sle i64 %453, %454
  br i1 %455, label %456, label %478

456:                                              ; preds = %452
  %457 = load i64, ptr %25, align 8, !tbaa !9
  %458 = sub nsw i64 %457, 1
  store i64 %458, ptr %24, align 8, !tbaa !9
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %459

459:                                              ; preds = %471, %456
  %460 = load i64, ptr %27, align 8, !tbaa !9
  %461 = load i64, ptr %24, align 8, !tbaa !9
  %462 = icmp sle i64 %460, %461
  br i1 %462, label %463, label %474

463:                                              ; preds = %459
  %464 = load ptr, ptr %14, align 8, !tbaa !5
  %465 = load i64, ptr %27, align 8, !tbaa !9
  %466 = load i64, ptr %26, align 8, !tbaa !9
  %467 = load i64, ptr %20, align 8, !tbaa !9
  %468 = mul nsw i64 %466, %467
  %469 = add nsw i64 %465, %468
  %470 = getelementptr inbounds double, ptr %464, i64 %469
  store double 0.000000e+00, ptr %470, align 8, !tbaa !11
  br label %471

471:                                              ; preds = %463
  %472 = load i64, ptr %27, align 8, !tbaa !9
  %473 = add nsw i64 %472, 1
  store i64 %473, ptr %27, align 8, !tbaa !9
  br label %459, !llvm.loop !16

474:                                              ; preds = %459
  br label %475

475:                                              ; preds = %474
  %476 = load i64, ptr %26, align 8, !tbaa !9
  %477 = add nsw i64 %476, 1
  store i64 %477, ptr %26, align 8, !tbaa !9
  br label %452, !llvm.loop !17

478:                                              ; preds = %452
  br label %479

479:                                              ; preds = %478
  %480 = load i64, ptr %22, align 8, !tbaa !9
  %481 = load i64, ptr %25, align 8, !tbaa !9
  %482 = add nsw i64 %481, %480
  store i64 %482, ptr %25, align 8, !tbaa !9
  br label %334, !llvm.loop !18

483:                                              ; preds = %345
  br label %484

484:                                              ; preds = %483, %326
  %485 = load i64, ptr %33, align 8, !tbaa !9
  %486 = sitofp i64 %485 to double
  %487 = load ptr, ptr %17, align 8, !tbaa !5
  %488 = getelementptr inbounds double, ptr %487, i64 1
  store double %486, ptr %488, align 8, !tbaa !11
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %489

489:                                              ; preds = %484, %161, %155, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  %490 = load i32, ptr %10, align 4
  ret i32 %490
}

; 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 i32 @xerbla_(ptr noundef, ptr noundef) #2

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

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

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

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

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

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


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

@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 [8 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1

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

28:                                               ; preds = %9
  %or.cond192 = icmp ugt i64 %21, %26
  br i1 %or.cond192, label %.thread.sink.split, label %29

29:                                               ; preds = %28
  %30 = load i64, ptr %2, align 8, !tbaa !5
  %31 = icmp slt i64 %30, 0
  %32 = icmp sgt i64 %30, %21
  %or.cond193 = or i1 %31, %32
  br i1 %or.cond193, label %.thread.sink.split, label %33

33:                                               ; preds = %29
  %34 = load i64, ptr %4, align 8, !tbaa !5
  %spec.select194 = tail call i64 @llvm.umax.i64(i64 %26, i64 1)
  %35 = icmp slt i64 %34, %spec.select194
  br i1 %35, label %.thread.sink.split, label %36

36:                                               ; preds = %33
  %37 = icmp sge i64 %24, %spec.select
  %or.cond = or i1 %37, %25
  br i1 %or.cond, label %38, label %.thread.sink.split

38:                                               ; preds = %36
  %.pr = load i64, ptr %8, align 8, !tbaa !5
  %.not = icmp eq i64 %.pr, 0
  br i1 %.not, label %42, label %.thread

.thread.sink.split:                               ; preds = %36, %33, %29, %28, %9
  %.sink = phi i64 [ -1, %9 ], [ -2, %28 ], [ -3, %29 ], [ -5, %33 ], [ -8, %36 ]
  store i64 %.sink, ptr %8, align 8, !tbaa !5
  br label %.thread

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

42:                                               ; preds = %38
  br i1 %25, label %161, label %43

43:                                               ; preds = %42
  %44 = icmp eq i64 %21, 0
  br i1 %44, label %45, label %46

45:                                               ; preds = %43
  store double 1.000000e+00, ptr %6, align 8, !tbaa !9
  br label %161

46:                                               ; preds = %43
  %47 = icmp sgt i64 %20, 1
  br i1 %47, label %48, label %.thread210

48:                                               ; preds = %46
  %49 = icmp ult i64 %20, %30
  br i1 %49, label %50, label %.thread199

50:                                               ; preds = %48
  %51 = 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 %2, ptr noundef nonnull @c_n1) #5
  %52 = tail call i64 @llvm.smax.i64(i64 %51, i64 0)
  %53 = load i64, ptr %2, align 8, !tbaa !5
  %54 = icmp slt i64 %52, %53
  %.pre247.pre250 = load i64, ptr %1, align 8, !tbaa !5
  br i1 %54, label %55, label %.thread199

55:                                               ; preds = %50
  store i64 %.pre247.pre250, ptr %15, align 8, !tbaa !5
  %56 = mul nsw i64 %.pre247.pre250, %20
  %57 = load i64, ptr %7, align 8, !tbaa !5
  %58 = icmp slt i64 %57, %56
  br i1 %58, label %59, label %.thread199

59:                                               ; preds = %55
  %60 = sdiv i64 %57, %.pre247.pre250
  %61 = tail 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 %2, ptr noundef nonnull @c_n1) #5
  %62 = tail call i64 @llvm.smax.i64(i64 %61, i64 2)
  %.not184 = icmp slt i64 %60, %62
  br i1 %.not184, label %..thread210_crit_edge, label %..thread199_crit_edge

..thread210_crit_edge:                            ; preds = %59
  %.pre246 = load i64, ptr %1, align 8, !tbaa !5
  br label %.thread210

..thread199_crit_edge:                            ; preds = %59
  %.pre = load i64, ptr %2, align 8, !tbaa !5
  %.pre247.pre = load i64, ptr %1, align 8, !tbaa !5
  br label %.thread199

.thread199:                                       ; preds = %..thread199_crit_edge, %48, %50, %55
  %.pre247 = phi i64 [ %.pre247.pre, %..thread199_crit_edge ], [ %21, %48 ], [ %.pre247.pre250, %50 ], [ %.pre247.pre250, %55 ]
  %63 = phi i64 [ %.pre, %..thread199_crit_edge ], [ %30, %48 ], [ %53, %50 ], [ %53, %55 ]
  %.0159208 = phi i64 [ %56, %..thread199_crit_edge ], [ %21, %48 ], [ %21, %50 ], [ %56, %55 ]
  %.0160207 = phi i64 [ %52, %..thread199_crit_edge ], [ 0, %48 ], [ %52, %50 ], [ %52, %55 ]
  %.0163205 = phi i64 [ %60, %..thread199_crit_edge ], [ %20, %48 ], [ %20, %50 ], [ %20, %55 ]
  %64 = icmp slt i64 %.0163205, %63
  %65 = icmp slt i64 %.0160207, %63
  %or.cond196 = and i1 %64, %65
  br i1 %or.cond196, label %66, label %.thread210

66:                                               ; preds = %.thread199
  %67 = xor i64 %.0160207, -1
  %68 = add nsw i64 %63, %67
  %.fr = freeze i64 %68
  %69 = srem i64 %.fr, %.0163205
  %70 = sub nsw i64 %.fr, %69
  %71 = add nsw i64 %70, %.0163205
  store i64 %71, ptr %11, align 8, !tbaa !5
  %72 = tail call i64 @llvm.smin.i64(i64 %63, i64 %71)
  store i64 %.pre247, ptr %10, align 8, !tbaa !5
  %.not186.not220 = icmp sge i64 %72, %.pre247
  %.not191217 = icmp slt i64 %72, 1
  %or.cond253 = or i1 %.not186.not220, %.not191217
  br i1 %or.cond253, label %.thread210.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %66
  %73 = mul i64 %16, %72
  %74 = shl i64 %73, 3
  %75 = shl i64 %16, 3
  %76 = shl nuw i64 %72, 3
  %77 = sub i64 %.pre247, %72
  %78 = getelementptr i8, ptr %3, i64 %74
  %xtraiter = and i64 %77, 7
  %79 = sub i64 %72, %.pre247
  %80 = icmp ugt i64 %79, -8
  br i1 %80, label %.thread210.loopexit.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %77, -8
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvar = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvar.next.7, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.7, %.lr.ph ]
  %81 = mul i64 %75, %indvar
  %scevgep = getelementptr i8, ptr %78, i64 %81
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next = or disjoint i64 %indvar, 1
  %82 = mul i64 %75, %indvar.next
  %scevgep.1 = getelementptr i8, ptr %78, i64 %82
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %83 = mul i64 %75, %indvar.next.1
  %scevgep.2 = getelementptr i8, ptr %78, i64 %83
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %84 = mul i64 %75, %indvar.next.2
  %scevgep.3 = getelementptr i8, ptr %78, i64 %84
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %85 = mul i64 %75, %indvar.next.3
  %scevgep.4 = getelementptr i8, ptr %78, i64 %85
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.4, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %86 = mul i64 %75, %indvar.next.4
  %scevgep.5 = getelementptr i8, ptr %78, i64 %86
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.5, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %87 = mul i64 %75, %indvar.next.5
  %scevgep.6 = getelementptr i8, ptr %78, i64 %87
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.6, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %88 = mul i64 %75, %indvar.next.6
  %scevgep.7 = getelementptr i8, ptr %78, i64 %88
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.7, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.7 = add i64 %indvar, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.thread210.loopexit.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !11

.thread210.loopexit.loopexit.unr-lcssa:           ; preds = %.lr.ph, %.lr.ph.preheader
  %indvar.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvar.next.7, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.thread210.loopexit, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.thread210.loopexit.loopexit.unr-lcssa, %.lr.ph.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.lr.ph.epil ], [ %indvar.unr, %.thread210.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %.thread210.loopexit.loopexit.unr-lcssa ]
  %89 = mul i64 %75, %indvar.epil
  %scevgep.epil = getelementptr i8, ptr %78, i64 %89
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.epil, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next.epil = add i64 %indvar.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.thread210.loopexit, label %.lr.ph.epil, !llvm.loop !13

.thread210.loopexit:                              ; preds = %.thread210.loopexit.loopexit.unr-lcssa, %.lr.ph.epil, %66
  %90 = add nsw i64 %70, 1
  br label %.thread210

.thread210:                                       ; preds = %..thread210_crit_edge, %.thread210.loopexit, %46, %.thread199
  %91 = phi i64 [ %.pre247, %.thread199 ], [ %.pre246, %..thread210_crit_edge ], [ %21, %46 ], [ %.pre247, %.thread210.loopexit ]
  %.0159209 = phi i64 [ %.0159208, %.thread199 ], [ %56, %..thread210_crit_edge ], [ %21, %46 ], [ %.0159208, %.thread210.loopexit ]
  %.0163206 = phi i64 [ %.0163205, %.thread199 ], [ %60, %..thread210_crit_edge ], [ %20, %46 ], [ %.0163205, %.thread210.loopexit ]
  %.0162 = phi i64 [ undef, %.thread199 ], [ undef, %..thread210_crit_edge ], [ undef, %46 ], [ %90, %.thread210.loopexit ]
  %.0161 = phi i64 [ 0, %.thread199 ], [ 0, %..thread210_crit_edge ], [ 0, %46 ], [ %72, %.thread210.loopexit ]
  %92 = icmp slt i64 %.0161, %91
  br i1 %92, label %93, label %105

93:                                               ; preds = %.thread210
  %94 = load i64, ptr %0, align 8, !tbaa !5
  %95 = sub nsw i64 %94, %.0161
  store i64 %95, ptr %10, align 8, !tbaa !5
  %96 = sub nsw i64 %91, %.0161
  store i64 %96, ptr %11, align 8, !tbaa !5
  %97 = load i64, ptr %2, align 8, !tbaa !5
  %98 = sub nsw i64 %97, %.0161
  store i64 %98, ptr %12, align 8, !tbaa !5
  %99 = add nsw i64 %.0161, 1
  %100 = add i64 %16, 1
  %101 = mul i64 %99, %100
  %102 = getelementptr inbounds double, ptr %18, i64 %101
  %103 = getelementptr double, ptr %5, i64 %.0161
  %104 = call i32 @dorg2r_(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %102, ptr noundef nonnull %4, ptr noundef %103, ptr noundef nonnull %6, ptr noundef nonnull %14) #5
  br label %105

105:                                              ; preds = %93, %.thread210
  %106 = icmp sgt i64 %.0161, 0
  br i1 %106, label %107, label %.loopexit

107:                                              ; preds = %105
  %108 = sub nsw i64 0, %.0163206
  store i64 %108, ptr %10, align 8, !tbaa !5
  %109 = icmp sgt i64 %.0163206, 0
  %110 = icmp sgt i64 %.0162, 0
  %111 = icmp slt i64 %.0162, 2
  %.in234 = select i1 %109, i1 %110, i1 %111
  br i1 %.in234, label %.lr.ph238, label %.loopexit

.lr.ph238:                                        ; preds = %107
  %112 = add i64 %16, 1
  %113 = shl i64 %16, 3
  br label %114

114:                                              ; preds = %.lr.ph238, %._crit_edge232
  %.1167235 = phi i64 [ %.0162, %.lr.ph238 ], [ %156, %._crit_edge232 ]
  %115 = load i64, ptr %2, align 8, !tbaa !5
  %116 = sub nsw i64 %115, %.1167235
  %117 = add nsw i64 %116, 1
  store i64 %117, ptr %12, align 8, !tbaa !5
  %118 = call i64 @llvm.smin.i64(i64 %.0163206, i64 %117)
  store i64 %118, ptr %13, align 8, !tbaa !5
  %119 = add nsw i64 %118, %.1167235
  %120 = load i64, ptr %1, align 8, !tbaa !5
  %.not188 = icmp sgt i64 %119, %120
  %.pre249 = load i64, ptr %0, align 8, !tbaa !5
  br i1 %.not188, label %._crit_edge, label %121

._crit_edge:                                      ; preds = %114
  %.pre252 = mul i64 %.1167235, %112
  br label %139

121:                                              ; preds = %114
  %reass.sub = sub i64 %.pre249, %.1167235
  %122 = add i64 %reass.sub, 1
  store i64 %122, ptr %11, align 8, !tbaa !5
  %123 = mul i64 %.1167235, %112
  %124 = getelementptr inbounds double, ptr %18, i64 %123
  %125 = getelementptr inbounds double, ptr %19, i64 %.1167235
  %126 = call i32 @dlarft_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef %124, ptr noundef nonnull %4, ptr noundef nonnull %125, ptr noundef nonnull %6, ptr noundef nonnull %15) #5
  %127 = load i64, ptr %0, align 8, !tbaa !5
  %reass.sub239 = sub i64 %127, %.1167235
  %128 = add i64 %reass.sub239, 1
  store i64 %128, ptr %11, align 8, !tbaa !5
  %129 = load i64, ptr %1, align 8, !tbaa !5
  %130 = load i64, ptr %13, align 8, !tbaa !5
  %131 = add i64 %130, %.1167235
  %132 = add i64 %129, 1
  %133 = sub i64 %132, %131
  store i64 %133, ptr %12, align 8, !tbaa !5
  %134 = mul nsw i64 %131, %16
  %135 = getelementptr double, ptr %18, i64 %.1167235
  %136 = getelementptr double, ptr %135, i64 %134
  %137 = getelementptr double, ptr %6, i64 %130
  %138 = call i32 @dlarfb_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %124, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %15, ptr noundef %136, ptr noundef nonnull %4, ptr noundef %137, ptr noundef nonnull %15) #5
  %.pre248 = load i64, ptr %0, align 8, !tbaa !5
  br label %139

139:                                              ; preds = %._crit_edge, %121
  %.pre-phi = phi i64 [ %.pre252, %._crit_edge ], [ %123, %121 ]
  %140 = phi i64 [ %.pre249, %._crit_edge ], [ %.pre248, %121 ]
  %reass.sub240 = sub i64 %140, %.1167235
  %141 = add i64 %reass.sub240, 1
  store i64 %141, ptr %11, align 8, !tbaa !5
  %142 = getelementptr inbounds double, ptr %18, i64 %.pre-phi
  %143 = getelementptr inbounds double, ptr %19, i64 %.1167235
  %144 = call i32 @dorg2r_(ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef nonnull %13, ptr noundef %142, ptr noundef nonnull %4, ptr noundef nonnull %143, ptr noundef nonnull %6, ptr noundef nonnull %14) #5
  %145 = load i64, ptr %13, align 8, !tbaa !5
  %146 = add nsw i64 %145, %.1167235
  %147 = add nsw i64 %146, -1
  store i64 %147, ptr %11, align 8, !tbaa !5
  %.not189.not228 = icmp sgt i64 %145, 0
  br i1 %.not189.not228, label %.lr.ph231, label %._crit_edge232

.lr.ph231:                                        ; preds = %139
  %148 = add nsw i64 %.1167235, -1
  store i64 %148, ptr %12, align 8, !tbaa !5
  %.not190.not223 = icmp sgt i64 %.1167235, 1
  br i1 %.not190.not223, label %.lr.ph225.us.preheader, label %._crit_edge232

.lr.ph225.us.preheader:                           ; preds = %.lr.ph231
  %149 = shl i64 %.1167235, 3
  %150 = add i64 %149, -8
  %151 = mul i64 %16, %150
  %152 = getelementptr i8, ptr %3, i64 %151
  br label %.lr.ph225.us

.lr.ph225.us:                                     ; preds = %.lr.ph225.us.preheader, %.lr.ph225.us
  %indvar243 = phi i64 [ 0, %.lr.ph225.us.preheader ], [ %indvar.next244, %.lr.ph225.us ]
  %.1229.us = phi i64 [ %.1167235, %.lr.ph225.us.preheader ], [ %154, %.lr.ph225.us ]
  %153 = mul i64 %113, %indvar243
  %scevgep245 = getelementptr i8, ptr %152, i64 %153
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep245, i8 0, i64 %150, i1 false), !tbaa !9
  %154 = add nuw nsw i64 %.1229.us, 1
  %.not189.not.us = icmp slt i64 %154, %146
  %indvar.next244 = add i64 %indvar243, 1
  br i1 %.not189.not.us, label %.lr.ph225.us, label %._crit_edge232, !llvm.loop !15

._crit_edge232:                                   ; preds = %.lr.ph225.us, %.lr.ph231, %139
  %155 = load i64, ptr %10, align 8, !tbaa !5
  %156 = add nsw i64 %155, %.1167235
  %157 = icmp slt i64 %155, 0
  %158 = icmp sgt i64 %156, 0
  %159 = icmp slt i64 %156, 2
  %.in = select i1 %157, i1 %158, i1 %159
  br i1 %.in, label %114, label %.loopexit, !llvm.loop !16

.loopexit:                                        ; preds = %._crit_edge232, %107, %105
  %160 = sitofp i64 %.0159209 to double
  store double %160, ptr %6, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %42, %.loopexit, %45, %.thread
  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
  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 i32 @xerbla_(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; 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) #3

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

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

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

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

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

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


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