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

; 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
@c__65 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@c_b25 = external hidden global double, align 8
@c_b26 = external hidden global double, align 8
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [11 x i8], align 1

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

61:                                               ; preds = %9
  %62 = load i64, ptr %22, align 8, !tbaa !9
  br label %65

63:                                               ; preds = %9
  %64 = load i64, ptr %23, align 8, !tbaa !9
  br label %65

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

83:                                               ; preds = %65
  %84 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -1, ptr %84, align 8, !tbaa !9
  br label %166

85:                                               ; preds = %65
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = load i64, ptr %86, align 8, !tbaa !9
  %88 = icmp slt i64 %87, 1
  br i1 %88, label %102, label %89

89:                                               ; preds = %85
  %90 = load ptr, ptr %12, align 8, !tbaa !5
  %91 = load i64, ptr %90, align 8, !tbaa !9
  %92 = load ptr, ptr %11, align 8, !tbaa !5
  %93 = load i64, ptr %92, align 8, !tbaa !9
  %94 = icmp sge i64 1, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %89
  br label %99

96:                                               ; preds = %89
  %97 = load ptr, ptr %11, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  br label %99

99:                                               ; preds = %96, %95
  %100 = phi i64 [ 1, %95 ], [ %98, %96 ]
  %101 = icmp sgt i64 %91, %100
  br i1 %101, label %102, label %104

102:                                              ; preds = %99, %85
  %103 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -2, ptr %103, align 8, !tbaa !9
  br label %165

104:                                              ; preds = %99
  %105 = load ptr, ptr %13, align 8, !tbaa !5
  %106 = load i64, ptr %105, align 8, !tbaa !9
  %107 = load ptr, ptr %12, 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 sle i64 %108, %110
  br i1 %111, label %112, label %115

112:                                              ; preds = %104
  %113 = load ptr, ptr %12, align 8, !tbaa !5
  %114 = load i64, ptr %113, align 8, !tbaa !9
  br label %118

115:                                              ; preds = %104
  %116 = load ptr, ptr %11, align 8, !tbaa !5
  %117 = load i64, ptr %116, align 8, !tbaa !9
  br label %118

118:                                              ; preds = %115, %112
  %119 = phi i64 [ %114, %112 ], [ %117, %115 ]
  %120 = icmp slt i64 %106, %119
  br i1 %120, label %127, label %121

121:                                              ; preds = %118
  %122 = load ptr, ptr %13, align 8, !tbaa !5
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = load ptr, ptr %11, align 8, !tbaa !5
  %125 = load i64, ptr %124, align 8, !tbaa !9
  %126 = icmp sgt i64 %123, %125
  br i1 %126, label %127, label %129

127:                                              ; preds = %121, %118
  %128 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -3, ptr %128, align 8, !tbaa !9
  br label %164

129:                                              ; preds = %121
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = load i64, ptr %130, align 8, !tbaa !9
  %132 = load ptr, ptr %11, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !9
  %134 = icmp sge i64 1, %133
  br i1 %134, label %135, label %136

135:                                              ; preds = %129
  br label %139

136:                                              ; preds = %129
  %137 = load ptr, ptr %11, align 8, !tbaa !5
  %138 = load i64, ptr %137, align 8, !tbaa !9
  br label %139

139:                                              ; preds = %136, %135
  %140 = phi i64 [ 1, %135 ], [ %138, %136 ]
  %141 = icmp slt i64 %131, %140
  br i1 %141, label %142, label %144

142:                                              ; preds = %139
  %143 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -5, ptr %143, align 8, !tbaa !9
  br label %163

144:                                              ; preds = %139
  %145 = load ptr, ptr %18, align 8, !tbaa !5
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = load ptr, ptr %11, align 8, !tbaa !5
  %148 = load i64, ptr %147, align 8, !tbaa !9
  %149 = icmp sge i64 1, %148
  br i1 %149, label %150, label %151

150:                                              ; preds = %144
  br label %154

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

154:                                              ; preds = %151, %150
  %155 = phi i64 [ 1, %150 ], [ %153, %151 ]
  %156 = icmp slt i64 %146, %155
  br i1 %156, label %157, label %162

157:                                              ; preds = %154
  %158 = load i64, ptr %39, align 8, !tbaa !9
  %159 = icmp ne i64 %158, 0
  br i1 %159, label %162, label %160

160:                                              ; preds = %157
  %161 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -8, ptr %161, align 8, !tbaa !9
  br label %162

162:                                              ; preds = %160, %157, %154
  br label %163

163:                                              ; preds = %162, %142
  br label %164

164:                                              ; preds = %163, %127
  br label %165

165:                                              ; preds = %164, %102
  br label %166

166:                                              ; preds = %165, %83
  %167 = load ptr, ptr %19, align 8, !tbaa !5
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = icmp ne i64 %168, 0
  br i1 %169, label %170, label %175

170:                                              ; preds = %166
  %171 = load ptr, ptr %19, align 8, !tbaa !5
  %172 = load i64, ptr %171, align 8, !tbaa !9
  %173 = sub nsw i64 0, %172
  store i64 %173, ptr %22, align 8, !tbaa !9
  %174 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %22)
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %542

175:                                              ; preds = %166
  %176 = load i64, ptr %39, align 8, !tbaa !9
  %177 = icmp ne i64 %176, 0
  br i1 %177, label %178, label %179

178:                                              ; preds = %175
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %542

179:                                              ; preds = %175
  br label %180

180:                                              ; preds = %179
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = sub nsw i64 %182, 1
  store i64 %183, ptr %22, align 8, !tbaa !9
  store i64 1, ptr %26, align 8, !tbaa !9
  br label %184

184:                                              ; preds = %192, %180
  %185 = load i64, ptr %26, align 8, !tbaa !9
  %186 = load i64, ptr %22, align 8, !tbaa !9
  %187 = icmp sle i64 %185, %186
  br i1 %187, label %188, label %195

188:                                              ; preds = %184
  %189 = load ptr, ptr %16, align 8, !tbaa !5
  %190 = load i64, ptr %26, align 8, !tbaa !9
  %191 = getelementptr inbounds double, ptr %189, i64 %190
  store double 0.000000e+00, ptr %191, align 8, !tbaa !11
  br label %192

192:                                              ; preds = %188
  %193 = load i64, ptr %26, align 8, !tbaa !9
  %194 = add nsw i64 %193, 1
  store i64 %194, ptr %26, align 8, !tbaa !9
  br label %184, !llvm.loop !13

195:                                              ; preds = %184
  %196 = load ptr, ptr %11, align 8, !tbaa !5
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = sub nsw i64 %197, 1
  store i64 %198, ptr %22, align 8, !tbaa !9
  %199 = load ptr, ptr %13, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = icmp sge i64 1, %200
  br i1 %201, label %202, label %203

202:                                              ; preds = %195
  br label %206

203:                                              ; preds = %195
  %204 = load ptr, ptr %13, align 8, !tbaa !5
  %205 = load i64, ptr %204, align 8, !tbaa !9
  br label %206

206:                                              ; preds = %203, %202
  %207 = phi i64 [ 1, %202 ], [ %205, %203 ]
  store i64 %207, ptr %26, align 8, !tbaa !9
  br label %208

208:                                              ; preds = %216, %206
  %209 = load i64, ptr %26, align 8, !tbaa !9
  %210 = load i64, ptr %22, align 8, !tbaa !9
  %211 = icmp sle i64 %209, %210
  br i1 %211, label %212, label %219

212:                                              ; preds = %208
  %213 = load ptr, ptr %16, align 8, !tbaa !5
  %214 = load i64, ptr %26, align 8, !tbaa !9
  %215 = getelementptr inbounds double, ptr %213, i64 %214
  store double 0.000000e+00, ptr %215, align 8, !tbaa !11
  br label %216

216:                                              ; preds = %212
  %217 = load i64, ptr %26, align 8, !tbaa !9
  %218 = add nsw i64 %217, 1
  store i64 %218, ptr %26, align 8, !tbaa !9
  br label %208, !llvm.loop !15

219:                                              ; preds = %208
  %220 = load ptr, ptr %13, align 8, !tbaa !5
  %221 = load i64, ptr %220, align 8, !tbaa !9
  %222 = load ptr, ptr %12, align 8, !tbaa !5
  %223 = load i64, ptr %222, align 8, !tbaa !9
  %224 = sub nsw i64 %221, %223
  %225 = add nsw i64 %224, 1
  store i64 %225, ptr %32, align 8, !tbaa !9
  %226 = load i64, ptr %32, align 8, !tbaa !9
  %227 = icmp sle i64 %226, 1
  br i1 %227, label %228, label %231

228:                                              ; preds = %219
  %229 = load ptr, ptr %17, align 8, !tbaa !5
  %230 = getelementptr inbounds double, ptr %229, i64 1
  store double 1.000000e+00, ptr %230, align 8, !tbaa !11
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %542

231:                                              ; preds = %219
  store i64 64, ptr %22, align 8, !tbaa !9
  %232 = load ptr, ptr %11, align 8, !tbaa !5
  %233 = load ptr, ptr %12, align 8, !tbaa !5
  %234 = load ptr, ptr %13, align 8, !tbaa !5
  %235 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %232, ptr noundef %233, ptr noundef %234, ptr noundef @c_n1)
  store i64 %235, ptr %23, align 8, !tbaa !9
  %236 = load i64, ptr %22, align 8, !tbaa !9
  %237 = load i64, ptr %23, align 8, !tbaa !9
  %238 = icmp sle i64 %236, %237
  br i1 %238, label %239, label %241

239:                                              ; preds = %231
  %240 = load i64, ptr %22, align 8, !tbaa !9
  br label %243

241:                                              ; preds = %231
  %242 = load i64, ptr %23, align 8, !tbaa !9
  br label %243

243:                                              ; preds = %241, %239
  %244 = phi i64 [ %240, %239 ], [ %242, %241 ]
  store i64 %244, ptr %31, align 8, !tbaa !9
  store i64 2, ptr %35, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  %245 = load i64, ptr %31, align 8, !tbaa !9
  %246 = icmp sgt i64 %245, 1
  br i1 %246, label %247, label %309

247:                                              ; preds = %243
  %248 = load i64, ptr %31, align 8, !tbaa !9
  %249 = load i64, ptr %32, align 8, !tbaa !9
  %250 = icmp slt i64 %248, %249
  br i1 %250, label %251, label %309

251:                                              ; preds = %247
  %252 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %252, ptr %22, align 8, !tbaa !9
  %253 = load ptr, ptr %11, align 8, !tbaa !5
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = load ptr, ptr %13, align 8, !tbaa !5
  %256 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef @c_n1)
  store i64 %256, ptr %23, align 8, !tbaa !9
  %257 = load i64, ptr %22, align 8, !tbaa !9
  %258 = load i64, ptr %23, align 8, !tbaa !9
  %259 = icmp sge i64 %257, %258
  br i1 %259, label %260, label %262

260:                                              ; preds = %251
  %261 = load i64, ptr %22, align 8, !tbaa !9
  br label %264

262:                                              ; preds = %251
  %263 = load i64, ptr %23, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %262, %260
  %265 = phi i64 [ %261, %260 ], [ %263, %262 ]
  store i64 %265, ptr %33, align 8, !tbaa !9
  %266 = load i64, ptr %33, align 8, !tbaa !9
  %267 = load i64, ptr %32, align 8, !tbaa !9
  %268 = icmp slt i64 %266, %267
  br i1 %268, label %269, label %308

269:                                              ; preds = %264
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = load i64, ptr %270, align 8, !tbaa !9
  %272 = load i64, ptr %31, align 8, !tbaa !9
  %273 = mul nsw i64 %271, %272
  store i64 %273, ptr %34, align 8, !tbaa !9
  %274 = load ptr, ptr %18, align 8, !tbaa !5
  %275 = load i64, ptr %274, align 8, !tbaa !9
  %276 = load i64, ptr %34, align 8, !tbaa !9
  %277 = icmp slt i64 %275, %276
  br i1 %277, label %278, label %307

278:                                              ; preds = %269
  store i64 2, ptr %22, align 8, !tbaa !9
  %279 = load ptr, ptr %11, align 8, !tbaa !5
  %280 = load ptr, ptr %12, align 8, !tbaa !5
  %281 = load ptr, ptr %13, align 8, !tbaa !5
  %282 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %279, ptr noundef %280, ptr noundef %281, ptr noundef @c_n1)
  store i64 %282, ptr %23, align 8, !tbaa !9
  %283 = load i64, ptr %22, align 8, !tbaa !9
  %284 = load i64, ptr %23, align 8, !tbaa !9
  %285 = icmp sge i64 %283, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %278
  %287 = load i64, ptr %22, align 8, !tbaa !9
  br label %290

288:                                              ; preds = %278
  %289 = load i64, ptr %23, align 8, !tbaa !9
  br label %290

290:                                              ; preds = %288, %286
  %291 = phi i64 [ %287, %286 ], [ %289, %288 ]
  store i64 %291, ptr %35, align 8, !tbaa !9
  %292 = load ptr, ptr %18, align 8, !tbaa !5
  %293 = load i64, ptr %292, align 8, !tbaa !9
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = load i64, ptr %294, align 8, !tbaa !9
  %296 = load i64, ptr %35, align 8, !tbaa !9
  %297 = mul nsw i64 %295, %296
  %298 = icmp sge i64 %293, %297
  br i1 %298, label %299, label %305

299:                                              ; preds = %290
  %300 = load ptr, ptr %18, align 8, !tbaa !5
  %301 = load i64, ptr %300, align 8, !tbaa !9
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = load i64, ptr %302, align 8, !tbaa !9
  %304 = sdiv i64 %301, %303
  store i64 %304, ptr %31, align 8, !tbaa !9
  br label %306

305:                                              ; preds = %290
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %306

306:                                              ; preds = %305, %299
  br label %307

307:                                              ; preds = %306, %269
  br label %308

308:                                              ; preds = %307, %264
  br label %309

309:                                              ; preds = %308, %247, %243
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  %311 = load i64, ptr %310, align 8, !tbaa !9
  store i64 %311, ptr %37, align 8, !tbaa !9
  %312 = load i64, ptr %31, align 8, !tbaa !9
  %313 = load i64, ptr %35, align 8, !tbaa !9
  %314 = icmp slt i64 %312, %313
  br i1 %314, label %319, label %315

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

319:                                              ; preds = %315, %309
  %320 = load ptr, ptr %12, align 8, !tbaa !5
  %321 = load i64, ptr %320, align 8, !tbaa !9
  store i64 %321, ptr %26, align 8, !tbaa !9
  br label %526

322:                                              ; preds = %315
  %323 = load ptr, ptr %13, align 8, !tbaa !5
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = sub nsw i64 %324, 1
  %326 = load i64, ptr %33, align 8, !tbaa !9
  %327 = sub nsw i64 %325, %326
  store i64 %327, ptr %22, align 8, !tbaa !9
  %328 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %328, ptr %23, align 8, !tbaa !9
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = load i64, ptr %329, align 8, !tbaa !9
  store i64 %330, ptr %26, align 8, !tbaa !9
  br label %331

331:                                              ; preds = %521, %322
  %332 = load i64, ptr %23, align 8, !tbaa !9
  %333 = icmp slt i64 %332, 0
  br i1 %333, label %334, label %339

334:                                              ; preds = %331
  %335 = load i64, ptr %26, align 8, !tbaa !9
  %336 = load i64, ptr %22, align 8, !tbaa !9
  %337 = icmp sge i64 %335, %336
  %338 = zext i1 %337 to i32
  br label %344

339:                                              ; preds = %331
  %340 = load i64, ptr %26, align 8, !tbaa !9
  %341 = load i64, ptr %22, align 8, !tbaa !9
  %342 = icmp sle i64 %340, %341
  %343 = zext i1 %342 to i32
  br label %344

344:                                              ; preds = %339, %334
  %345 = phi i32 [ %338, %334 ], [ %343, %339 ]
  %346 = icmp ne i32 %345, 0
  br i1 %346, label %347, label %525

347:                                              ; preds = %344
  %348 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %348, ptr %24, align 8, !tbaa !9
  %349 = load ptr, ptr %13, align 8, !tbaa !5
  %350 = load i64, ptr %349, align 8, !tbaa !9
  %351 = load i64, ptr %26, align 8, !tbaa !9
  %352 = sub nsw i64 %350, %351
  store i64 %352, ptr %25, align 8, !tbaa !9
  %353 = load i64, ptr %24, align 8, !tbaa !9
  %354 = load i64, ptr %25, align 8, !tbaa !9
  %355 = icmp sle i64 %353, %354
  br i1 %355, label %356, label %358

356:                                              ; preds = %347
  %357 = load i64, ptr %24, align 8, !tbaa !9
  br label %360

358:                                              ; preds = %347
  %359 = load i64, ptr %25, align 8, !tbaa !9
  br label %360

360:                                              ; preds = %358, %356
  %361 = phi i64 [ %357, %356 ], [ %359, %358 ]
  store i64 %361, ptr %29, align 8, !tbaa !9
  %362 = load ptr, ptr %13, align 8, !tbaa !5
  %363 = load ptr, ptr %14, align 8, !tbaa !5
  %364 = load i64, ptr %26, align 8, !tbaa !9
  %365 = load i64, ptr %20, align 8, !tbaa !9
  %366 = mul nsw i64 %364, %365
  %367 = add nsw i64 %366, 1
  %368 = getelementptr inbounds double, ptr %363, i64 %367
  %369 = load ptr, ptr %15, align 8, !tbaa !5
  %370 = load ptr, ptr %16, align 8, !tbaa !5
  %371 = load i64, ptr %26, align 8, !tbaa !9
  %372 = getelementptr inbounds double, ptr %370, i64 %371
  %373 = getelementptr inbounds [4160 x double], ptr %28, i64 0, i64 0
  %374 = load ptr, ptr %17, align 8, !tbaa !5
  %375 = getelementptr inbounds double, ptr %374, i64 1
  %376 = call i32 @dlahr2_(ptr noundef %362, ptr noundef %26, ptr noundef %29, ptr noundef %368, ptr noundef %369, ptr noundef %372, ptr noundef %373, ptr noundef @c__65, ptr noundef %375, ptr noundef %37)
  %377 = load ptr, ptr %14, align 8, !tbaa !5
  %378 = load i64, ptr %26, align 8, !tbaa !9
  %379 = load i64, ptr %29, align 8, !tbaa !9
  %380 = add nsw i64 %378, %379
  %381 = load i64, ptr %26, align 8, !tbaa !9
  %382 = load i64, ptr %29, align 8, !tbaa !9
  %383 = add nsw i64 %381, %382
  %384 = sub nsw i64 %383, 1
  %385 = load i64, ptr %20, align 8, !tbaa !9
  %386 = mul nsw i64 %384, %385
  %387 = add nsw i64 %380, %386
  %388 = getelementptr inbounds double, ptr %377, i64 %387
  %389 = load double, ptr %388, align 8, !tbaa !11
  store double %389, ptr %30, align 8, !tbaa !11
  %390 = load ptr, ptr %14, align 8, !tbaa !5
  %391 = load i64, ptr %26, align 8, !tbaa !9
  %392 = load i64, ptr %29, align 8, !tbaa !9
  %393 = add nsw i64 %391, %392
  %394 = load i64, ptr %26, align 8, !tbaa !9
  %395 = load i64, ptr %29, align 8, !tbaa !9
  %396 = add nsw i64 %394, %395
  %397 = sub nsw i64 %396, 1
  %398 = load i64, ptr %20, align 8, !tbaa !9
  %399 = mul nsw i64 %397, %398
  %400 = add nsw i64 %393, %399
  %401 = getelementptr inbounds double, ptr %390, i64 %400
  store double 1.000000e+00, ptr %401, align 8, !tbaa !11
  %402 = load ptr, ptr %13, align 8, !tbaa !5
  %403 = load i64, ptr %402, align 8, !tbaa !9
  %404 = load i64, ptr %26, align 8, !tbaa !9
  %405 = sub nsw i64 %403, %404
  %406 = load i64, ptr %29, align 8, !tbaa !9
  %407 = sub nsw i64 %405, %406
  %408 = add nsw i64 %407, 1
  store i64 %408, ptr %24, align 8, !tbaa !9
  %409 = load ptr, ptr %13, 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 %26, align 8, !tbaa !9
  %414 = load i64, ptr %29, align 8, !tbaa !9
  %415 = add nsw i64 %413, %414
  %416 = load i64, ptr %26, align 8, !tbaa !9
  %417 = load i64, ptr %20, align 8, !tbaa !9
  %418 = mul nsw i64 %416, %417
  %419 = add nsw i64 %415, %418
  %420 = getelementptr inbounds double, ptr %412, i64 %419
  %421 = load ptr, ptr %15, align 8, !tbaa !5
  %422 = load ptr, ptr %14, align 8, !tbaa !5
  %423 = load i64, ptr %26, align 8, !tbaa !9
  %424 = load i64, ptr %29, align 8, !tbaa !9
  %425 = add nsw i64 %423, %424
  %426 = load i64, ptr %20, align 8, !tbaa !9
  %427 = mul nsw i64 %425, %426
  %428 = add nsw i64 %427, 1
  %429 = getelementptr inbounds double, ptr %422, i64 %428
  %430 = load ptr, ptr %15, align 8, !tbaa !5
  %431 = call i32 @f2c_dgemm(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %409, ptr noundef %24, ptr noundef %29, ptr noundef @c_b25, ptr noundef %411, ptr noundef %37, ptr noundef %420, ptr noundef %421, ptr noundef @c_b26, ptr noundef %429, ptr noundef %430)
  %432 = load double, ptr %30, align 8, !tbaa !11
  %433 = load ptr, ptr %14, align 8, !tbaa !5
  %434 = load i64, ptr %26, align 8, !tbaa !9
  %435 = load i64, ptr %29, align 8, !tbaa !9
  %436 = add nsw i64 %434, %435
  %437 = load i64, ptr %26, align 8, !tbaa !9
  %438 = load i64, ptr %29, align 8, !tbaa !9
  %439 = add nsw i64 %437, %438
  %440 = sub nsw i64 %439, 1
  %441 = load i64, ptr %20, align 8, !tbaa !9
  %442 = mul nsw i64 %440, %441
  %443 = add nsw i64 %436, %442
  %444 = getelementptr inbounds double, ptr %433, i64 %443
  store double %432, ptr %444, align 8, !tbaa !11
  %445 = load i64, ptr %29, align 8, !tbaa !9
  %446 = sub nsw i64 %445, 1
  store i64 %446, ptr %24, align 8, !tbaa !9
  %447 = load ptr, ptr %14, align 8, !tbaa !5
  %448 = load i64, ptr %26, align 8, !tbaa !9
  %449 = add nsw i64 %448, 1
  %450 = load i64, ptr %26, align 8, !tbaa !9
  %451 = load i64, ptr %20, align 8, !tbaa !9
  %452 = mul nsw i64 %450, %451
  %453 = add nsw i64 %449, %452
  %454 = getelementptr inbounds double, ptr %447, i64 %453
  %455 = load ptr, ptr %15, align 8, !tbaa !5
  %456 = load ptr, ptr %17, align 8, !tbaa !5
  %457 = getelementptr inbounds double, ptr %456, i64 1
  %458 = call i32 @f2c_dtrmm(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef @.str.3, ptr noundef @.str.6, ptr noundef %26, ptr noundef %24, ptr noundef @c_b26, ptr noundef %454, ptr noundef %455, ptr noundef %457, ptr noundef %37)
  %459 = load i64, ptr %29, align 8, !tbaa !9
  %460 = sub nsw i64 %459, 2
  store i64 %460, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %27, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %482, %360
  %462 = load i64, ptr %27, align 8, !tbaa !9
  %463 = load i64, ptr %24, align 8, !tbaa !9
  %464 = icmp sle i64 %462, %463
  br i1 %464, label %465, label %485

465:                                              ; preds = %461
  %466 = load ptr, ptr %17, align 8, !tbaa !5
  %467 = load i64, ptr %37, align 8, !tbaa !9
  %468 = load i64, ptr %27, align 8, !tbaa !9
  %469 = mul nsw i64 %467, %468
  %470 = add nsw i64 %469, 1
  %471 = getelementptr inbounds double, ptr %466, i64 %470
  %472 = load ptr, ptr %14, align 8, !tbaa !5
  %473 = load i64, ptr %26, align 8, !tbaa !9
  %474 = load i64, ptr %27, align 8, !tbaa !9
  %475 = add nsw i64 %473, %474
  %476 = add nsw i64 %475, 1
  %477 = load i64, ptr %20, align 8, !tbaa !9
  %478 = mul nsw i64 %476, %477
  %479 = add nsw i64 %478, 1
  %480 = getelementptr inbounds double, ptr %472, i64 %479
  %481 = call i32 @f2c_daxpy(ptr noundef %26, ptr noundef @c_b25, ptr noundef %471, ptr noundef @c__1, ptr noundef %480, ptr noundef @c__1)
  br label %482

482:                                              ; preds = %465
  %483 = load i64, ptr %27, align 8, !tbaa !9
  %484 = add nsw i64 %483, 1
  store i64 %484, ptr %27, align 8, !tbaa !9
  br label %461, !llvm.loop !16

485:                                              ; preds = %461
  %486 = load ptr, ptr %13, align 8, !tbaa !5
  %487 = load i64, ptr %486, align 8, !tbaa !9
  %488 = load i64, ptr %26, align 8, !tbaa !9
  %489 = sub nsw i64 %487, %488
  store i64 %489, ptr %24, align 8, !tbaa !9
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  %491 = load i64, ptr %490, align 8, !tbaa !9
  %492 = load i64, ptr %26, align 8, !tbaa !9
  %493 = sub nsw i64 %491, %492
  %494 = load i64, ptr %29, align 8, !tbaa !9
  %495 = sub nsw i64 %493, %494
  %496 = add nsw i64 %495, 1
  store i64 %496, ptr %25, align 8, !tbaa !9
  %497 = load ptr, ptr %14, align 8, !tbaa !5
  %498 = load i64, ptr %26, align 8, !tbaa !9
  %499 = add nsw i64 %498, 1
  %500 = load i64, ptr %26, align 8, !tbaa !9
  %501 = load i64, ptr %20, align 8, !tbaa !9
  %502 = mul nsw i64 %500, %501
  %503 = add nsw i64 %499, %502
  %504 = getelementptr inbounds double, ptr %497, i64 %503
  %505 = load ptr, ptr %15, align 8, !tbaa !5
  %506 = getelementptr inbounds [4160 x double], ptr %28, i64 0, i64 0
  %507 = load ptr, ptr %14, align 8, !tbaa !5
  %508 = load i64, ptr %26, align 8, !tbaa !9
  %509 = add nsw i64 %508, 1
  %510 = load i64, ptr %26, align 8, !tbaa !9
  %511 = load i64, ptr %29, align 8, !tbaa !9
  %512 = add nsw i64 %510, %511
  %513 = load i64, ptr %20, align 8, !tbaa !9
  %514 = mul nsw i64 %512, %513
  %515 = add nsw i64 %509, %514
  %516 = getelementptr inbounds double, ptr %507, i64 %515
  %517 = load ptr, ptr %15, align 8, !tbaa !5
  %518 = load ptr, ptr %17, align 8, !tbaa !5
  %519 = getelementptr inbounds double, ptr %518, i64 1
  %520 = call i32 @dlarfb_(ptr noundef @.str.7, ptr noundef @.str.3, ptr noundef @.str.8, ptr noundef @.str.9, ptr noundef %24, ptr noundef %25, ptr noundef %29, ptr noundef %504, ptr noundef %505, ptr noundef %506, ptr noundef @c__65, ptr noundef %516, ptr noundef %517, ptr noundef %519, ptr noundef %37)
  br label %521

521:                                              ; preds = %485
  %522 = load i64, ptr %23, align 8, !tbaa !9
  %523 = load i64, ptr %26, align 8, !tbaa !9
  %524 = add nsw i64 %523, %522
  store i64 %524, ptr %26, align 8, !tbaa !9
  br label %331, !llvm.loop !17

525:                                              ; preds = %344
  br label %526

526:                                              ; preds = %525, %319
  %527 = load ptr, ptr %11, align 8, !tbaa !5
  %528 = load ptr, ptr %13, align 8, !tbaa !5
  %529 = load ptr, ptr %14, align 8, !tbaa !5
  %530 = load i64, ptr %21, align 8, !tbaa !9
  %531 = getelementptr inbounds double, ptr %529, i64 %530
  %532 = load ptr, ptr %15, align 8, !tbaa !5
  %533 = load ptr, ptr %16, align 8, !tbaa !5
  %534 = getelementptr inbounds double, ptr %533, i64 1
  %535 = load ptr, ptr %17, align 8, !tbaa !5
  %536 = getelementptr inbounds double, ptr %535, i64 1
  %537 = call i32 @dgehd2_(ptr noundef %527, ptr noundef %26, ptr noundef %528, ptr noundef %531, ptr noundef %532, ptr noundef %534, ptr noundef %536, ptr noundef %36)
  %538 = load i64, ptr %34, align 8, !tbaa !9
  %539 = sitofp i64 %538 to double
  %540 = load ptr, ptr %17, align 8, !tbaa !5
  %541 = getelementptr inbounds double, ptr %540, i64 1
  store double %539, ptr %541, align 8, !tbaa !11
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %542

542:                                              ; preds = %526, %228, %178, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 33280, 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
  %543 = load i32, ptr %10, align 4
  ret i32 %543
}

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

declare i32 @f2c_dgemm(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 @f2c_dtrmm(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 @f2c_daxpy(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

declare i32 @dgehd2_(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}


; 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
@c__65 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@c_b25 = external hidden global double, align 8
@c_b26 = external hidden global double, align 8
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @dgehrd_(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 [4160 x double], align 16
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = 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 33280, 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
  %18 = load i64, ptr %4, align 8, !tbaa !5
  %19 = xor i64 %18, -1
  %20 = getelementptr inbounds double, ptr %3, i64 %19
  %21 = getelementptr inbounds i8, ptr %5, i64 -8
  store i64 0, ptr %8, align 8, !tbaa !5
  %22 = 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
  %23 = tail call i64 @llvm.smin.i64(i64 %22, i64 64)
  %24 = load i64, ptr %0, align 8, !tbaa !5
  %25 = mul nsw i64 %24, %23
  %26 = sitofp i64 %25 to double
  store double %26, ptr %6, align 8, !tbaa !9
  %27 = load i64, ptr %7, align 8, !tbaa !5
  %28 = icmp eq i64 %27, -1
  %29 = icmp slt i64 %24, 0
  br i1 %29, label %.thread.sink.split, label %30

30:                                               ; preds = %9
  %31 = load i64, ptr %1, align 8, !tbaa !5
  %32 = icmp slt i64 %31, 1
  br i1 %32, label %.thread.sink.split, label %33

33:                                               ; preds = %30
  %spec.select = tail call i64 @llvm.umax.i64(i64 %24, i64 1)
  %34 = icmp ugt i64 %31, %spec.select
  br i1 %34, label %.thread.sink.split, label %35

35:                                               ; preds = %33
  %36 = load i64, ptr %2, align 8, !tbaa !5
  %. = tail call i64 @llvm.umin.i64(i64 %31, i64 %24)
  %37 = icmp slt i64 %36, %.
  %38 = icmp ugt i64 %36, %24
  %or.cond191 = or i1 %37, %38
  br i1 %or.cond191, label %.thread.sink.split, label %39

39:                                               ; preds = %35
  %40 = load i64, ptr %4, align 8, !tbaa !5
  %41 = icmp slt i64 %40, %spec.select
  br i1 %41, label %.thread.sink.split, label %42

42:                                               ; preds = %39
  %43 = icmp sge i64 %27, %spec.select
  %or.cond = or i1 %43, %28
  br i1 %or.cond, label %44, label %.thread.sink.split

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

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

.thread:                                          ; preds = %.thread.sink.split, %44
  %45 = phi i64 [ %.pr, %44 ], [ %.sink, %.thread.sink.split ]
  %46 = sub nsw i64 0, %45
  store i64 %46, ptr %10, align 8, !tbaa !5
  %47 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %10) #5
  br label %148

48:                                               ; preds = %44
  br i1 %28, label %148, label %49

49:                                               ; preds = %48
  %.not172.not194.not = icmp eq i64 %31, 1
  br i1 %.not172.not194.not, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %49
  %50 = shl i64 %31, 3
  %51 = add i64 %50, -8
  tail call void @llvm.memset.p0.i64(ptr align 8 %5, i8 0, i64 %51, i1 false), !tbaa !9
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %49
  store i64 %31, ptr %13, align 8, !tbaa !5
  %52 = tail call i64 @llvm.umax.i64(i64 %36, i64 1)
  %.not174.not196 = icmp ult i64 %52, %24
  br i1 %.not174.not196, label %.lr.ph199.preheader, label %._crit_edge200

.lr.ph199.preheader:                              ; preds = %._crit_edge
  %53 = shl i64 %52, 3
  %54 = getelementptr i8, ptr %5, i64 %53
  %scevgep = getelementptr i8, ptr %54, i64 -8
  %55 = sub nsw i64 %24, %52
  %56 = shl i64 %55, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %56, i1 false), !tbaa !9
  br label %._crit_edge200

._crit_edge200:                                   ; preds = %.lr.ph199.preheader, %._crit_edge
  %57 = sub nsw i64 %36, %31
  %58 = icmp slt i64 %57, 1
  br i1 %58, label %59, label %60

59:                                               ; preds = %._crit_edge200
  store double 1.000000e+00, ptr %6, align 8, !tbaa !9
  br label %148

60:                                               ; preds = %._crit_edge200
  %61 = 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 %2, ptr noundef nonnull @c_n1) #5
  %62 = tail call i64 @llvm.smin.i64(i64 %61, i64 64)
  %63 = icmp slt i64 %61, 2
  %.not176 = icmp sgt i64 %62, %57
  %or.cond188 = or i1 %63, %.not176
  br i1 %or.cond188, label %._crit_edge216, label %64

._crit_edge216:                                   ; preds = %60
  %.pre = load i64, ptr %0, align 8, !tbaa !5
  br label %79

64:                                               ; preds = %60
  %65 = 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
  %66 = tail call i64 @llvm.smax.i64(i64 %62, i64 %65)
  %.not178 = icmp sgt i64 %65, %57
  %.pre217 = load i64, ptr %0, align 8, !tbaa !5
  br i1 %.not178, label %79, label %67

67:                                               ; preds = %64
  %68 = mul nsw i64 %.pre217, %62
  %69 = load i64, ptr %7, align 8, !tbaa !5
  %70 = icmp slt i64 %69, %68
  br i1 %70, label %71, label %79

71:                                               ; preds = %67
  %72 = 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
  %73 = tail call i64 @llvm.smax.i64(i64 %72, i64 2)
  %74 = load i64, ptr %7, align 8, !tbaa !5
  %75 = load i64, ptr %0, align 8, !tbaa !5
  %76 = mul nsw i64 %75, %73
  %.not180 = icmp slt i64 %74, %76
  br i1 %.not180, label %.thread219, label %77

.thread219:                                       ; preds = %71
  store i64 %75, ptr %17, align 8, !tbaa !5
  br label %82

77:                                               ; preds = %71
  %78 = sdiv i64 %74, %75
  br label %79

79:                                               ; preds = %._crit_edge216, %64, %77, %67
  %80 = phi i64 [ %75, %77 ], [ %.pre217, %67 ], [ %.pre217, %64 ], [ %.pre, %._crit_edge216 ]
  %.0153 = phi i64 [ %78, %77 ], [ %62, %67 ], [ %62, %64 ], [ %62, %._crit_edge216 ]
  %.0152 = phi i64 [ %66, %77 ], [ %66, %67 ], [ %66, %64 ], [ undef, %._crit_edge216 ]
  %.0151 = phi i64 [ %68, %77 ], [ %68, %67 ], [ 1, %64 ], [ 1, %._crit_edge216 ]
  %.0150 = phi i64 [ %73, %77 ], [ 2, %67 ], [ 2, %64 ], [ 2, %._crit_edge216 ]
  store i64 %80, ptr %17, align 8, !tbaa !5
  %81 = icmp slt i64 %.0153, %.0150
  %.not181.not = icmp sgt i64 %.0153, %57
  %or.cond189 = or i1 %.not181.not, %81
  br i1 %or.cond189, label %82, label %84

82:                                               ; preds = %.thread219, %79
  %.0151227 = phi i64 [ %68, %.thread219 ], [ %.0151, %79 ]
  %83 = load i64, ptr %1, align 8, !tbaa !5
  store i64 %83, ptr %13, align 8, !tbaa !5
  br label %.loopexit

84:                                               ; preds = %79
  %85 = load i64, ptr %2, align 8, !tbaa !5
  %86 = xor i64 %.0152, -1
  %87 = add i64 %85, %86
  %88 = load i64, ptr %1, align 8, !tbaa !5
  %invariant.gep207 = getelementptr i8, ptr %20, i64 8
  store i64 %88, ptr %13, align 8, !tbaa !5
  %.not228 = icmp sgt i64 %88, %87
  br i1 %.not228, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %84, %._crit_edge206
  %storemerge182229 = phi i64 [ %145, %._crit_edge206 ], [ %88, %84 ]
  store i64 %.0153, ptr %11, align 8, !tbaa !5
  %89 = load i64, ptr %2, align 8, !tbaa !5
  %90 = sub nsw i64 %89, %storemerge182229
  store i64 %90, ptr %12, align 8, !tbaa !5
  %91 = call i64 @llvm.smin.i64(i64 %.0153, i64 %90)
  store i64 %91, ptr %15, align 8, !tbaa !5
  %92 = mul nsw i64 %storemerge182229, %18
  %gep208 = getelementptr double, ptr %invariant.gep207, i64 %92
  %93 = getelementptr inbounds double, ptr %21, i64 %storemerge182229
  %94 = call i32 @dlahr2_(ptr noundef nonnull %2, ptr noundef nonnull %13, ptr noundef nonnull %15, ptr noundef %gep208, ptr noundef nonnull %4, ptr noundef nonnull %93, ptr noundef nonnull %14, ptr noundef nonnull @c__65, ptr noundef nonnull %6, ptr noundef nonnull %17) #5
  %95 = load i64, ptr %13, align 8, !tbaa !5
  %96 = load i64, ptr %15, align 8, !tbaa !5
  %97 = add nsw i64 %96, %95
  %98 = add nsw i64 %97, -1
  %99 = mul nsw i64 %98, %18
  %100 = getelementptr double, ptr %20, i64 %97
  %101 = getelementptr double, ptr %100, i64 %99
  %102 = load double, ptr %101, align 8, !tbaa !9
  store double 1.000000e+00, ptr %101, align 8, !tbaa !9
  %103 = load i64, ptr %2, align 8, !tbaa !5
  %reass.sub = sub i64 %103, %97
  %104 = add i64 %reass.sub, 1
  store i64 %104, ptr %11, align 8, !tbaa !5
  %105 = mul nsw i64 %95, %18
  %106 = getelementptr double, ptr %100, i64 %105
  %107 = mul nsw i64 %97, %18
  %gep210 = getelementptr double, ptr %invariant.gep207, i64 %107
  %108 = call i32 @f2c_dgemm(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull %11, ptr noundef nonnull %15, ptr noundef nonnull @c_b25, ptr noundef nonnull %6, ptr noundef nonnull %17, ptr noundef %106, ptr noundef nonnull %4, ptr noundef nonnull @c_b26, ptr noundef %gep210, ptr noundef nonnull %4) #5
  %109 = load i64, ptr %13, align 8, !tbaa !5
  %110 = load i64, ptr %15, align 8, !tbaa !5
  %111 = add nsw i64 %110, %109
  %112 = add nsw i64 %111, -1
  %113 = mul nsw i64 %112, %18
  %114 = getelementptr double, ptr %20, i64 %111
  %115 = getelementptr double, ptr %114, i64 %113
  store double %102, ptr %115, align 8, !tbaa !9
  %116 = add nsw i64 %110, -1
  store i64 %116, ptr %11, align 8, !tbaa !5
  %117 = mul nsw i64 %109, %18
  %gep212 = getelementptr double, ptr %invariant.gep207, i64 %109
  %118 = getelementptr double, ptr %gep212, i64 %117
  %119 = call i32 @f2c_dtrmm(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.6, ptr noundef nonnull %13, ptr noundef nonnull %11, ptr noundef nonnull @c_b26, ptr noundef %118, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %17) #5
  %120 = load i64, ptr %15, align 8, !tbaa !5
  %121 = add nsw i64 %120, -2
  store i64 %121, ptr %11, align 8, !tbaa !5
  %.not184202 = icmp slt i64 %120, 2
  br i1 %.not184202, label %._crit_edge206, label %.lr.ph205

.lr.ph205:                                        ; preds = %.lr.ph, %.lr.ph205
  %.0154203 = phi i64 [ %126, %.lr.ph205 ], [ 0, %.lr.ph ]
  %122 = load i64, ptr %17, align 8, !tbaa !5
  %123 = mul nsw i64 %122, %.0154203
  %124 = getelementptr double, ptr %6, i64 %123
  %125 = load i64, ptr %13, align 8, !tbaa !5
  %126 = add nuw i64 %.0154203, 1
  %127 = add i64 %126, %125
  %128 = mul nsw i64 %127, %18
  %gep = getelementptr double, ptr %invariant.gep207, i64 %128
  %129 = call i32 @f2c_daxpy(ptr noundef nonnull %13, ptr noundef nonnull @c_b25, ptr noundef %124, ptr noundef nonnull @c__1, ptr noundef %gep, ptr noundef nonnull @c__1) #5
  %130 = load i64, ptr %11, align 8, !tbaa !5
  %.not184.not = icmp slt i64 %.0154203, %130
  br i1 %.not184.not, label %.lr.ph205, label %._crit_edge206.loopexit, !llvm.loop !11

._crit_edge206.loopexit:                          ; preds = %.lr.ph205
  %.pre218 = load i64, ptr %15, align 8, !tbaa !5
  br label %._crit_edge206

._crit_edge206:                                   ; preds = %._crit_edge206.loopexit, %.lr.ph
  %131 = phi i64 [ %.pre218, %._crit_edge206.loopexit ], [ %120, %.lr.ph ]
  %132 = load i64, ptr %2, align 8, !tbaa !5
  %133 = load i64, ptr %13, align 8, !tbaa !5
  %134 = sub nsw i64 %132, %133
  store i64 %134, ptr %11, align 8, !tbaa !5
  %135 = load i64, ptr %0, align 8, !tbaa !5
  %136 = add i64 %131, %133
  %137 = add i64 %135, 1
  %138 = sub i64 %137, %136
  store i64 %138, ptr %12, align 8, !tbaa !5
  %139 = mul nsw i64 %133, %18
  %gep214 = getelementptr double, ptr %invariant.gep207, i64 %133
  %140 = getelementptr double, ptr %gep214, i64 %139
  %141 = mul nsw i64 %136, %18
  %142 = getelementptr double, ptr %gep214, i64 %141
  %143 = call i32 @dlarfb_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %15, ptr noundef %140, ptr noundef nonnull %4, ptr noundef nonnull %14, ptr noundef nonnull @c__65, ptr noundef %142, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %17) #5
  %144 = load i64, ptr %13, align 8, !tbaa !5
  %145 = add nsw i64 %144, %.0153
  store i64 %145, ptr %13, align 8, !tbaa !5
  %.not = icmp sgt i64 %145, %87
  br i1 %.not, label %.loopexit, label %.lr.ph, !llvm.loop !13

.loopexit:                                        ; preds = %._crit_edge206, %84, %82
  %.0151226 = phi i64 [ %.0151227, %82 ], [ %.0151, %84 ], [ %.0151, %._crit_edge206 ]
  %146 = call i32 @dgehd2_(ptr noundef nonnull %0, ptr noundef nonnull %13, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %16) #5
  %147 = sitofp i64 %.0151226 to double
  store double %147, ptr %6, align 8, !tbaa !9
  br label %148

148:                                              ; preds = %48, %.loopexit, %59, %.thread
  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 33280, 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 @dlahr2_(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 @f2c_dgemm(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 @f2c_dtrmm(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 @f2c_daxpy(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

declare i32 @dgehd2_(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.smin.i64(i64, i64) #3

; 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.umax.i64(i64, i64) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.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, !12}


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