; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (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 i32, align 4
@.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 i32, align 4
@c__3 = external hidden global i32, align 4
@c__2 = external hidden global i32, align 4
@.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 void @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 ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  %39 = load ptr, ptr %14, align 8, !tbaa !5
  %40 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %40, ptr %19, align 4, !tbaa !9
  %41 = load i32, ptr %19, align 4, !tbaa !9
  %42 = mul nsw i32 %41, 1
  %43 = add nsw i32 1, %42
  store i32 %43, ptr %20, align 4, !tbaa !9
  %44 = load i32, ptr %20, align 4, !tbaa !9
  %45 = load ptr, ptr %13, align 8, !tbaa !5
  %46 = sext i32 %44 to i64
  %47 = sub i64 0, %46
  %48 = getelementptr inbounds double, ptr %45, i64 %47
  store ptr %48, ptr %13, align 8, !tbaa !5
  %49 = load ptr, ptr %15, align 8, !tbaa !5
  %50 = getelementptr inbounds double, ptr %49, i32 -1
  store ptr %50, ptr %15, align 8, !tbaa !5
  %51 = load ptr, ptr %16, align 8, !tbaa !5
  %52 = getelementptr inbounds double, ptr %51, i32 -1
  store ptr %52, ptr %16, align 8, !tbaa !5
  %53 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %53, align 4, !tbaa !9
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = load ptr, ptr %11, align 8, !tbaa !5
  %56 = load ptr, ptr %12, align 8, !tbaa !5
  %57 = call i32 @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, i32 noundef 6, i32 noundef 1)
  store i32 %57, ptr %30, align 4, !tbaa !9
  %58 = load ptr, ptr %11, align 8, !tbaa !5
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = icmp sge i32 1, %59
  br i1 %60, label %61, label %62

61:                                               ; preds = %9
  br label %65

62:                                               ; preds = %9
  %63 = load ptr, ptr %11, align 8, !tbaa !5
  %64 = load i32, ptr %63, align 4, !tbaa !9
  br label %65

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

80:                                               ; preds = %65
  %81 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -1, ptr %81, align 4, !tbaa !9
  br label %143

82:                                               ; preds = %65
  %83 = load ptr, ptr %11, align 8, !tbaa !5
  %84 = load i32, ptr %83, align 4, !tbaa !9
  %85 = icmp slt i32 %84, 0
  br i1 %85, label %92, label %86

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

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

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

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

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

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

112:                                              ; preds = %106
  br label %116

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

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

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

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

127:                                              ; preds = %121
  br label %131

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

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

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

137:                                              ; preds = %134
  %138 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -8, ptr %138, align 4, !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 %18, align 8, !tbaa !5
  %145 = load i32, ptr %144, align 4, !tbaa !9
  %146 = icmp ne i32 %145, 0
  br i1 %146, label %147, label %152

147:                                              ; preds = %143
  %148 = load ptr, ptr %18, align 8, !tbaa !5
  %149 = load i32, ptr %148, align 4, !tbaa !9
  %150 = sub nsw i32 0, %149
  store i32 %150, ptr %21, align 4, !tbaa !9
  %151 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %21, i32 noundef 6)
  store i32 1, ptr %38, align 4
  br label %496

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

155:                                              ; preds = %152
  store i32 1, ptr %38, align 4
  br label %496

156:                                              ; preds = %152
  br label %157

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

161:                                              ; preds = %157
  %162 = load ptr, ptr %16, 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 1, ptr %38, align 4
  br label %496

164:                                              ; preds = %157
  store i32 2, ptr %27, align 4, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !9
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = load i32, ptr %165, align 4, !tbaa !9
  store i32 %166, ptr %37, align 4, !tbaa !9
  %167 = load i32, ptr %30, align 4, !tbaa !9
  %168 = icmp sgt i32 %167, 1
  br i1 %168, label %169, label %222

169:                                              ; preds = %164
  %170 = load i32, ptr %30, align 4, !tbaa !9
  %171 = load ptr, ptr %12, align 8, !tbaa !5
  %172 = load i32, ptr %171, align 4, !tbaa !9
  %173 = icmp slt i32 %170, %172
  br i1 %173, label %174, label %222

174:                                              ; preds = %169
  store i32 0, ptr %21, align 4, !tbaa !9
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  %178 = call i32 @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, i32 noundef 6, i32 noundef 1)
  store i32 %178, ptr %22, align 4, !tbaa !9
  %179 = load i32, ptr %21, align 4, !tbaa !9
  %180 = load i32, ptr %22, align 4, !tbaa !9
  %181 = icmp sge i32 %179, %180
  br i1 %181, label %182, label %184

182:                                              ; preds = %174
  %183 = load i32, ptr %21, align 4, !tbaa !9
  br label %186

184:                                              ; preds = %174
  %185 = load i32, ptr %22, align 4, !tbaa !9
  br label %186

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

192:                                              ; preds = %186
  %193 = load ptr, ptr %11, align 8, !tbaa !5
  %194 = load i32, ptr %193, align 4, !tbaa !9
  store i32 %194, ptr %34, align 4, !tbaa !9
  %195 = load i32, ptr %34, align 4, !tbaa !9
  %196 = load i32, ptr %30, align 4, !tbaa !9
  %197 = mul nsw i32 %195, %196
  store i32 %197, ptr %37, align 4, !tbaa !9
  %198 = load ptr, ptr %17, align 8, !tbaa !5
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = load i32, ptr %37, align 4, !tbaa !9
  %201 = icmp slt i32 %199, %200
  br i1 %201, label %202, label %220

202:                                              ; preds = %192
  %203 = load ptr, ptr %17, align 8, !tbaa !5
  %204 = load i32, ptr %203, align 4, !tbaa !9
  %205 = load i32, ptr %34, align 4, !tbaa !9
  %206 = sdiv i32 %204, %205
  store i32 %206, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %21, align 4, !tbaa !9
  %207 = load ptr, ptr %10, align 8, !tbaa !5
  %208 = load ptr, ptr %11, align 8, !tbaa !5
  %209 = load ptr, ptr %12, align 8, !tbaa !5
  %210 = call i32 @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, i32 noundef 6, i32 noundef 1)
  store i32 %210, ptr %22, align 4, !tbaa !9
  %211 = load i32, ptr %21, align 4, !tbaa !9
  %212 = load i32, ptr %22, align 4, !tbaa !9
  %213 = icmp sge i32 %211, %212
  br i1 %213, label %214, label %216

214:                                              ; preds = %202
  %215 = load i32, ptr %21, align 4, !tbaa !9
  br label %218

216:                                              ; preds = %202
  %217 = load i32, ptr %22, align 4, !tbaa !9
  br label %218

218:                                              ; preds = %216, %214
  %219 = phi i32 [ %215, %214 ], [ %217, %216 ]
  store i32 %219, ptr %27, align 4, !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 i32, ptr %30, align 4, !tbaa !9
  %224 = load i32, ptr %27, align 4, !tbaa !9
  %225 = icmp sge i32 %223, %224
  br i1 %225, label %226, label %291

226:                                              ; preds = %222
  %227 = load i32, ptr %30, align 4, !tbaa !9
  %228 = load ptr, ptr %12, align 8, !tbaa !5
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = icmp slt i32 %227, %229
  br i1 %230, label %231, label %291

231:                                              ; preds = %226
  %232 = load i32, ptr %33, align 4, !tbaa !9
  %233 = load ptr, ptr %12, align 8, !tbaa !5
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = icmp slt i32 %232, %234
  br i1 %235, label %236, label %291

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

254:                                              ; preds = %236
  %255 = load i32, ptr %21, align 4, !tbaa !9
  br label %258

256:                                              ; preds = %236
  %257 = load i32, ptr %22, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %256, %254
  %259 = phi i32 [ %255, %254 ], [ %257, %256 ]
  store i32 %259, ptr %32, align 4, !tbaa !9
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  %261 = load i32, ptr %260, align 4, !tbaa !9
  store i32 %261, ptr %21, align 4, !tbaa !9
  %262 = load i32, ptr %32, align 4, !tbaa !9
  %263 = add nsw i32 %262, 1
  store i32 %263, ptr %25, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %287, %258
  %265 = load i32, ptr %25, align 4, !tbaa !9
  %266 = load i32, ptr %21, align 4, !tbaa !9
  %267 = icmp sle i32 %265, %266
  br i1 %267, label %268, label %290

268:                                              ; preds = %264
  %269 = load i32, ptr %32, align 4, !tbaa !9
  store i32 %269, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %283, %268
  %271 = load i32, ptr %24, align 4, !tbaa !9
  %272 = load i32, ptr %22, align 4, !tbaa !9
  %273 = icmp sle i32 %271, %272
  br i1 %273, label %274, label %286

274:                                              ; preds = %270
  %275 = load ptr, ptr %13, align 8, !tbaa !5
  %276 = load i32, ptr %24, align 4, !tbaa !9
  %277 = load i32, ptr %25, align 4, !tbaa !9
  %278 = load i32, ptr %19, align 4, !tbaa !9
  %279 = mul nsw i32 %277, %278
  %280 = add nsw i32 %276, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds double, ptr %275, i64 %281
  store double 0.000000e+00, ptr %282, align 8, !tbaa !11
  br label %283

283:                                              ; preds = %274
  %284 = load i32, ptr %24, align 4, !tbaa !9
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %24, align 4, !tbaa !9
  br label %270, !llvm.loop !13

286:                                              ; preds = %270
  br label %287

287:                                              ; preds = %286
  %288 = load i32, ptr %25, align 4, !tbaa !9
  %289 = add nsw i32 %288, 1
  store i32 %289, ptr %25, align 4, !tbaa !9
  br label %264, !llvm.loop !15

290:                                              ; preds = %264
  br label %292

291:                                              ; preds = %231, %226, %222
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %292

292:                                              ; preds = %291, %290
  %293 = load i32, ptr %32, align 4, !tbaa !9
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = load i32, ptr %294, align 4, !tbaa !9
  %296 = icmp slt i32 %293, %295
  br i1 %296, label %297, label %328

297:                                              ; preds = %292
  %298 = load ptr, ptr %10, align 8, !tbaa !5
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = load i32, ptr %32, align 4, !tbaa !9
  %301 = sub nsw i32 %299, %300
  store i32 %301, ptr %21, align 4, !tbaa !9
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = load i32, ptr %32, align 4, !tbaa !9
  %305 = sub nsw i32 %303, %304
  store i32 %305, ptr %22, align 4, !tbaa !9
  %306 = load ptr, ptr %12, align 8, !tbaa !5
  %307 = load i32, ptr %306, align 4, !tbaa !9
  %308 = load i32, ptr %32, align 4, !tbaa !9
  %309 = sub nsw i32 %307, %308
  store i32 %309, ptr %23, align 4, !tbaa !9
  %310 = load ptr, ptr %13, align 8, !tbaa !5
  %311 = load i32, ptr %32, align 4, !tbaa !9
  %312 = add nsw i32 %311, 1
  %313 = load i32, ptr %32, align 4, !tbaa !9
  %314 = add nsw i32 %313, 1
  %315 = load i32, ptr %19, align 4, !tbaa !9
  %316 = mul nsw i32 %314, %315
  %317 = add nsw i32 %312, %316
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds double, ptr %310, i64 %318
  %320 = load ptr, ptr %14, align 8, !tbaa !5
  %321 = load ptr, ptr %15, align 8, !tbaa !5
  %322 = load i32, ptr %32, align 4, !tbaa !9
  %323 = add nsw i32 %322, 1
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds double, ptr %321, i64 %324
  %326 = load ptr, ptr %16, align 8, !tbaa !5
  %327 = getelementptr inbounds double, ptr %326, i64 1
  call void @dorg2r_(ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %319, ptr noundef %320, ptr noundef %325, ptr noundef %327, ptr noundef %28)
  br label %328

328:                                              ; preds = %297, %292
  %329 = load i32, ptr %32, align 4, !tbaa !9
  %330 = icmp sgt i32 %329, 0
  br i1 %330, label %331, label %491

331:                                              ; preds = %328
  %332 = load i32, ptr %30, align 4, !tbaa !9
  %333 = sub nsw i32 0, %332
  store i32 %333, ptr %21, align 4, !tbaa !9
  %334 = load i32, ptr %31, align 4, !tbaa !9
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %24, align 4, !tbaa !9
  br label %336

336:                                              ; preds = %486, %331
  %337 = load i32, ptr %21, align 4, !tbaa !9
  %338 = icmp slt i32 %337, 0
  br i1 %338, label %339, label %343

339:                                              ; preds = %336
  %340 = load i32, ptr %24, align 4, !tbaa !9
  %341 = icmp sge i32 %340, 1
  %342 = zext i1 %341 to i32
  br label %347

343:                                              ; preds = %336
  %344 = load i32, ptr %24, align 4, !tbaa !9
  %345 = icmp sle i32 %344, 1
  %346 = zext i1 %345 to i32
  br label %347

347:                                              ; preds = %343, %339
  %348 = phi i32 [ %342, %339 ], [ %346, %343 ]
  %349 = icmp ne i32 %348, 0
  br i1 %349, label %350, label %490

350:                                              ; preds = %347
  %351 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %351, ptr %22, align 4, !tbaa !9
  %352 = load ptr, ptr %12, align 8, !tbaa !5
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %354 = load i32, ptr %24, align 4, !tbaa !9
  %355 = sub nsw i32 %353, %354
  %356 = add nsw i32 %355, 1
  store i32 %356, ptr %23, align 4, !tbaa !9
  %357 = load i32, ptr %22, align 4, !tbaa !9
  %358 = load i32, ptr %23, align 4, !tbaa !9
  %359 = icmp sle i32 %357, %358
  br i1 %359, label %360, label %362

360:                                              ; preds = %350
  %361 = load i32, ptr %22, align 4, !tbaa !9
  br label %364

362:                                              ; preds = %350
  %363 = load i32, ptr %23, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %362, %360
  %365 = phi i32 [ %361, %360 ], [ %363, %362 ]
  store i32 %365, ptr %29, align 4, !tbaa !9
  %366 = load i32, ptr %24, align 4, !tbaa !9
  %367 = load i32, ptr %29, align 4, !tbaa !9
  %368 = add nsw i32 %366, %367
  %369 = load ptr, ptr %11, align 8, !tbaa !5
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = icmp sle i32 %368, %370
  br i1 %371, label %372, label %432

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

432:                                              ; preds = %372, %364
  %433 = load ptr, ptr %10, align 8, !tbaa !5
  %434 = load i32, ptr %433, align 4, !tbaa !9
  %435 = load i32, ptr %24, align 4, !tbaa !9
  %436 = sub nsw i32 %434, %435
  %437 = add nsw i32 %436, 1
  store i32 %437, ptr %22, align 4, !tbaa !9
  %438 = load ptr, ptr %13, align 8, !tbaa !5
  %439 = load i32, ptr %24, align 4, !tbaa !9
  %440 = load i32, ptr %24, align 4, !tbaa !9
  %441 = load i32, ptr %19, align 4, !tbaa !9
  %442 = mul nsw i32 %440, %441
  %443 = add nsw i32 %439, %442
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds double, ptr %438, i64 %444
  %446 = load ptr, ptr %14, align 8, !tbaa !5
  %447 = load ptr, ptr %15, align 8, !tbaa !5
  %448 = load i32, ptr %24, align 4, !tbaa !9
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %447, i64 %449
  %451 = load ptr, ptr %16, align 8, !tbaa !5
  %452 = getelementptr inbounds double, ptr %451, i64 1
  call void @dorg2r_(ptr noundef %22, ptr noundef %29, ptr noundef %29, ptr noundef %445, ptr noundef %446, ptr noundef %450, ptr noundef %452, ptr noundef %28)
  %453 = load i32, ptr %24, align 4, !tbaa !9
  %454 = load i32, ptr %29, align 4, !tbaa !9
  %455 = add nsw i32 %453, %454
  %456 = sub nsw i32 %455, 1
  store i32 %456, ptr %22, align 4, !tbaa !9
  %457 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %457, ptr %25, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %482, %432
  %459 = load i32, ptr %25, align 4, !tbaa !9
  %460 = load i32, ptr %22, align 4, !tbaa !9
  %461 = icmp sle i32 %459, %460
  br i1 %461, label %462, label %485

462:                                              ; preds = %458
  %463 = load i32, ptr %24, align 4, !tbaa !9
  %464 = sub nsw i32 %463, 1
  store i32 %464, ptr %23, align 4, !tbaa !9
  store i32 1, ptr %26, align 4, !tbaa !9
  br label %465

465:                                              ; preds = %478, %462
  %466 = load i32, ptr %26, align 4, !tbaa !9
  %467 = load i32, ptr %23, align 4, !tbaa !9
  %468 = icmp sle i32 %466, %467
  br i1 %468, label %469, label %481

469:                                              ; preds = %465
  %470 = load ptr, ptr %13, align 8, !tbaa !5
  %471 = load i32, ptr %26, align 4, !tbaa !9
  %472 = load i32, ptr %25, align 4, !tbaa !9
  %473 = load i32, ptr %19, align 4, !tbaa !9
  %474 = mul nsw i32 %472, %473
  %475 = add nsw i32 %471, %474
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds double, ptr %470, i64 %476
  store double 0.000000e+00, ptr %477, align 8, !tbaa !11
  br label %478

478:                                              ; preds = %469
  %479 = load i32, ptr %26, align 4, !tbaa !9
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %26, align 4, !tbaa !9
  br label %465, !llvm.loop !16

481:                                              ; preds = %465
  br label %482

482:                                              ; preds = %481
  %483 = load i32, ptr %25, align 4, !tbaa !9
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %25, align 4, !tbaa !9
  br label %458, !llvm.loop !17

485:                                              ; preds = %458
  br label %486

486:                                              ; preds = %485
  %487 = load i32, ptr %21, align 4, !tbaa !9
  %488 = load i32, ptr %24, align 4, !tbaa !9
  %489 = add nsw i32 %488, %487
  store i32 %489, ptr %24, align 4, !tbaa !9
  br label %336, !llvm.loop !18

490:                                              ; preds = %347
  br label %491

491:                                              ; preds = %490, %328
  %492 = load i32, ptr %37, align 4, !tbaa !9
  %493 = sitofp i32 %492 to double
  %494 = load ptr, ptr %16, align 8, !tbaa !5
  %495 = getelementptr inbounds double, ptr %494, i64 1
  store double %493, ptr %495, align 8, !tbaa !11
  store i32 1, ptr %38, align 4
  br label %496

496:                                              ; preds = %491, %161, %155, %147
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  ret void
}

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

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

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

declare void @dorg2r_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare void @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 = !{!"int", !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 i32, align 4
@.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 i32, align 4
@c__3 = external hidden global i32, align 4
@c__2 = external hidden global i32, align 4
@.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 void @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 i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #5
  %16 = load i32, ptr %4, align 4, !tbaa !5
  %narrow = xor i32 %16, -1
  %17 = sext i32 %narrow to i64
  %18 = getelementptr inbounds double, ptr %3, i64 %17
  %19 = getelementptr inbounds i8, ptr %5, i64 -8
  store i32 0, ptr %8, align 4, !tbaa !5
  %20 = tail call i32 @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, i32 noundef 6, i32 noundef 1) #5
  %21 = load i32, ptr %1, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.smax.i32(i32 %21, i32 1)
  %22 = mul nsw i32 %spec.select, %20
  %23 = sitofp i32 %22 to double
  store double %23, ptr %6, align 8, !tbaa !9
  %24 = load i32, ptr %7, align 4, !tbaa !5
  %25 = icmp eq i32 %24, -1
  %26 = load i32, ptr %0, align 4, !tbaa !5
  %27 = icmp slt i32 %26, 0
  br i1 %27, label %.thread.sink.split, label %28

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

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

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

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

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

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

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

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

43:                                               ; preds = %42
  %44 = icmp eq i32 %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 %176

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

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

50:                                               ; preds = %48
  %51 = tail call i32 @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, i32 noundef 6, i32 noundef 1) #5
  %52 = tail call i32 @llvm.smax.i32(i32 %51, i32 0)
  %53 = load i32, ptr %2, align 4, !tbaa !5
  %54 = icmp slt i32 %52, %53
  %.pre248.pre251 = load i32, ptr %1, align 4, !tbaa !5
  br i1 %54, label %55, label %.thread198

55:                                               ; preds = %50
  store i32 %.pre248.pre251, ptr %15, align 4, !tbaa !5
  %56 = mul nsw i32 %.pre248.pre251, %20
  %57 = load i32, ptr %7, align 4, !tbaa !5
  %58 = icmp slt i32 %57, %56
  br i1 %58, label %59, label %.thread198

59:                                               ; preds = %55
  %60 = sdiv i32 %57, %.pre248.pre251
  %61 = tail call i32 @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, i32 noundef 6, i32 noundef 1) #5
  %62 = tail call i32 @llvm.smax.i32(i32 %61, i32 2)
  %.not183 = icmp slt i32 %60, %62
  br i1 %.not183, label %..thread209_crit_edge, label %..thread198_crit_edge

..thread209_crit_edge:                            ; preds = %59
  %.pre247 = load i32, ptr %1, align 4, !tbaa !5
  br label %.thread209

..thread198_crit_edge:                            ; preds = %59
  %.pre = load i32, ptr %2, align 4, !tbaa !5
  %.pre248.pre = load i32, ptr %1, align 4, !tbaa !5
  br label %.thread198

.thread198:                                       ; preds = %..thread198_crit_edge, %48, %50, %55
  %.pre248 = phi i32 [ %.pre248.pre, %..thread198_crit_edge ], [ %21, %48 ], [ %.pre248.pre251, %50 ], [ %.pre248.pre251, %55 ]
  %63 = phi i32 [ %.pre, %..thread198_crit_edge ], [ %30, %48 ], [ %53, %50 ], [ %53, %55 ]
  %.0207 = phi i32 [ %56, %..thread198_crit_edge ], [ %21, %48 ], [ %21, %50 ], [ %56, %55 ]
  %.0157206 = phi i32 [ %52, %..thread198_crit_edge ], [ 0, %48 ], [ %52, %50 ], [ %52, %55 ]
  %.0160204 = phi i32 [ %60, %..thread198_crit_edge ], [ %20, %48 ], [ %20, %50 ], [ %20, %55 ]
  %64 = icmp slt i32 %.0160204, %63
  %65 = icmp slt i32 %.0157206, %63
  %or.cond195 = and i1 %64, %65
  br i1 %or.cond195, label %66, label %.thread209

66:                                               ; preds = %.thread198
  %67 = xor i32 %.0157206, -1
  %68 = add nsw i32 %63, %67
  %.fr = freeze i32 %68
  %69 = srem i32 %.fr, %.0160204
  %70 = sub nsw i32 %.fr, %69
  %71 = add nsw i32 %70, %.0160204
  store i32 %71, ptr %11, align 4, !tbaa !5
  %72 = tail call i32 @llvm.smin.i32(i32 %63, i32 %71)
  store i32 %.pre248, ptr %10, align 4, !tbaa !5
  %.not185.not219 = icmp sge i32 %72, %.pre248
  %.not190216 = icmp slt i32 %72, 1
  %or.cond258 = or i1 %.not185.not219, %.not190216
  br i1 %or.cond258, label %.thread209.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %66
  %.0163218 = add nuw nsw i32 %72, 1
  %73 = shl nsw i64 %17, 3
  %scevgep = getelementptr i8, ptr %3, i64 %73
  %74 = mul i32 %16, %.0163218
  %75 = add i32 %74, 1
  %76 = zext nneg i32 %72 to i64
  %77 = shl nuw nsw i64 %76, 3
  %78 = sub i32 %.pre248, %72
  %xtraiter = and i32 %78, 3
  %79 = sub i32 %72, %.pre248
  %80 = icmp ugt i32 %79, -4
  br i1 %80, label %.thread209.loopexit.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i32 %78, -4
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvar = phi i32 [ 0, %.lr.ph.preheader.new ], [ %indvar.next.3, %.lr.ph ]
  %niter = phi i32 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %81 = mul i32 %16, %indvar
  %82 = add i32 %75, %81
  %83 = sext i32 %82 to i64
  %84 = shl nsw i64 %83, 3
  %scevgep240 = getelementptr i8, ptr %scevgep, i64 %84
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep240, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next = or disjoint i32 %indvar, 1
  %85 = mul i32 %16, %indvar.next
  %86 = add i32 %75, %85
  %87 = sext i32 %86 to i64
  %88 = shl nsw i64 %87, 3
  %scevgep240.1 = getelementptr i8, ptr %scevgep, i64 %88
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep240.1, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i32 %indvar, 2
  %89 = mul i32 %16, %indvar.next.1
  %90 = add i32 %75, %89
  %91 = sext i32 %90 to i64
  %92 = shl nsw i64 %91, 3
  %scevgep240.2 = getelementptr i8, ptr %scevgep, i64 %92
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep240.2, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i32 %indvar, 3
  %93 = mul i32 %16, %indvar.next.2
  %94 = add i32 %75, %93
  %95 = sext i32 %94 to i64
  %96 = shl nsw i64 %95, 3
  %scevgep240.3 = getelementptr i8, ptr %scevgep, i64 %96
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep240.3, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.3 = add i32 %indvar, 4
  %niter.next.3 = add i32 %niter, 4
  %niter.ncmp.3 = icmp eq i32 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.thread209.loopexit.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !11

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

.lr.ph.epil:                                      ; preds = %.thread209.loopexit.loopexit.unr-lcssa, %.lr.ph.epil
  %indvar.epil = phi i32 [ %indvar.next.epil, %.lr.ph.epil ], [ %indvar.unr, %.thread209.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i32 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %.thread209.loopexit.loopexit.unr-lcssa ]
  %97 = mul i32 %16, %indvar.epil
  %98 = add i32 %75, %97
  %99 = sext i32 %98 to i64
  %100 = shl nsw i64 %99, 3
  %scevgep240.epil = getelementptr i8, ptr %scevgep, i64 %100
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep240.epil, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.epil = add i32 %indvar.epil, 1
  %epil.iter.next = add i32 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i32 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.thread209.loopexit, label %.lr.ph.epil, !llvm.loop !13

.thread209.loopexit:                              ; preds = %.thread209.loopexit.loopexit.unr-lcssa, %.lr.ph.epil, %66
  %101 = add nsw i32 %70, 1
  br label %.thread209

.thread209:                                       ; preds = %..thread209_crit_edge, %.thread209.loopexit, %46, %.thread198
  %102 = phi i32 [ %.pre248, %.thread198 ], [ %.pre247, %..thread209_crit_edge ], [ %21, %46 ], [ %.pre248, %.thread209.loopexit ]
  %.0208 = phi i32 [ %.0207, %.thread198 ], [ %56, %..thread209_crit_edge ], [ %21, %46 ], [ %.0207, %.thread209.loopexit ]
  %.0160205 = phi i32 [ %.0160204, %.thread198 ], [ %60, %..thread209_crit_edge ], [ %20, %46 ], [ %.0160204, %.thread209.loopexit ]
  %.0159 = phi i32 [ undef, %.thread198 ], [ undef, %..thread209_crit_edge ], [ undef, %46 ], [ %101, %.thread209.loopexit ]
  %.0158 = phi i32 [ 0, %.thread198 ], [ 0, %..thread209_crit_edge ], [ 0, %46 ], [ %72, %.thread209.loopexit ]
  %103 = icmp slt i32 %.0158, %102
  br i1 %103, label %104, label %117

104:                                              ; preds = %.thread209
  %105 = load i32, ptr %0, align 4, !tbaa !5
  %106 = sub nsw i32 %105, %.0158
  store i32 %106, ptr %10, align 4, !tbaa !5
  %107 = sub nsw i32 %102, %.0158
  store i32 %107, ptr %11, align 4, !tbaa !5
  %108 = load i32, ptr %2, align 4, !tbaa !5
  %109 = sub nsw i32 %108, %.0158
  store i32 %109, ptr %12, align 4, !tbaa !5
  %110 = add nsw i32 %.0158, 1
  %111 = add i32 %16, 1
  %112 = mul i32 %110, %111
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds double, ptr %18, i64 %113
  %115 = sext i32 %110 to i64
  %116 = getelementptr inbounds double, ptr %19, i64 %115
  call void @dorg2r_(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %114, ptr noundef nonnull %4, ptr noundef nonnull %116, ptr noundef nonnull %6, ptr noundef nonnull %13) #5
  br label %117

117:                                              ; preds = %104, %.thread209
  %118 = icmp sgt i32 %.0158, 0
  br i1 %118, label %119, label %.loopexit

119:                                              ; preds = %117
  %120 = sub nsw i32 0, %.0160205
  store i32 %120, ptr %10, align 4, !tbaa !5
  %121 = icmp sgt i32 %.0160205, 0
  %122 = icmp sgt i32 %.0159, 0
  %123 = icmp slt i32 %.0159, 2
  %.in231 = select i1 %121, i1 %122, i1 %123
  br i1 %.in231, label %.lr.ph235, label %.loopexit

.lr.ph235:                                        ; preds = %119
  %124 = add i32 %16, 1
  %125 = shl nsw i64 %17, 3
  %scevgep242 = getelementptr i8, ptr %3, i64 %125
  br label %126

126:                                              ; preds = %.lr.ph235, %._crit_edge229
  %.1165232 = phi i32 [ %.0159, %.lr.ph235 ], [ %171, %._crit_edge229 ]
  %127 = load i32, ptr %2, align 4, !tbaa !5
  %128 = sub nsw i32 %127, %.1165232
  %129 = add nsw i32 %128, 1
  store i32 %129, ptr %12, align 4, !tbaa !5
  %130 = call i32 @llvm.smin.i32(i32 %.0160205, i32 %129)
  store i32 %130, ptr %14, align 4, !tbaa !5
  %131 = add nsw i32 %130, %.1165232
  %132 = load i32, ptr %1, align 4, !tbaa !5
  %.not187 = icmp sgt i32 %131, %132
  %.pre250 = load i32, ptr %0, align 4, !tbaa !5
  br i1 %.not187, label %._crit_edge, label %133

._crit_edge:                                      ; preds = %126
  %.pre253 = mul i32 %.1165232, %124
  %.pre254 = sext i32 %.pre253 to i64
  %.pre256 = sext i32 %.1165232 to i64
  br label %152

133:                                              ; preds = %126
  %reass.sub = sub i32 %.pre250, %.1165232
  %134 = add i32 %reass.sub, 1
  store i32 %134, ptr %11, align 4, !tbaa !5
  %135 = mul i32 %.1165232, %124
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds double, ptr %18, i64 %136
  %138 = sext i32 %.1165232 to i64
  %139 = getelementptr inbounds double, ptr %19, i64 %138
  call void @dlarft_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef %137, ptr noundef nonnull %4, ptr noundef nonnull %139, ptr noundef nonnull %6, ptr noundef nonnull %15) #5
  %140 = load i32, ptr %0, align 4, !tbaa !5
  %reass.sub236 = sub i32 %140, %.1165232
  %141 = add i32 %reass.sub236, 1
  store i32 %141, ptr %11, align 4, !tbaa !5
  %142 = load i32, ptr %1, align 4, !tbaa !5
  %143 = load i32, ptr %14, align 4, !tbaa !5
  %144 = add i32 %143, %.1165232
  %145 = add i32 %142, 1
  %146 = sub i32 %145, %144
  store i32 %146, ptr %12, align 4, !tbaa !5
  %147 = mul nsw i32 %144, %16
  %148 = add nsw i32 %147, %.1165232
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds double, ptr %18, i64 %149
  %151 = sext i32 %143 to i64
  %gep = getelementptr double, ptr %6, i64 %151
  call void @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 %14, ptr noundef %137, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %15, ptr noundef %150, ptr noundef nonnull %4, ptr noundef %gep, ptr noundef nonnull %15) #5
  %.pre249 = load i32, ptr %0, align 4, !tbaa !5
  br label %152

152:                                              ; preds = %._crit_edge, %133
  %.pre-phi257 = phi i64 [ %.pre256, %._crit_edge ], [ %138, %133 ]
  %.pre-phi255 = phi i64 [ %.pre254, %._crit_edge ], [ %136, %133 ]
  %153 = phi i32 [ %.pre250, %._crit_edge ], [ %.pre249, %133 ]
  %reass.sub237 = sub i32 %153, %.1165232
  %154 = add i32 %reass.sub237, 1
  store i32 %154, ptr %11, align 4, !tbaa !5
  %155 = getelementptr inbounds double, ptr %18, i64 %.pre-phi255
  %156 = getelementptr inbounds double, ptr %19, i64 %.pre-phi257
  call void @dorg2r_(ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef nonnull %14, ptr noundef %155, ptr noundef nonnull %4, ptr noundef nonnull %156, ptr noundef nonnull %6, ptr noundef nonnull %13) #5
  %157 = load i32, ptr %14, align 4, !tbaa !5
  %158 = add nsw i32 %157, %.1165232
  %159 = add nsw i32 %158, -1
  store i32 %159, ptr %11, align 4, !tbaa !5
  %.not188.not225 = icmp sgt i32 %157, 0
  br i1 %.not188.not225, label %.lr.ph228, label %._crit_edge229

.lr.ph228:                                        ; preds = %152
  %160 = add nsw i32 %.1165232, -1
  store i32 %160, ptr %12, align 4, !tbaa !5
  %.not189.not222 = icmp sgt i32 %.1165232, 1
  br i1 %.not189.not222, label %.lr.ph224.us.preheader, label %._crit_edge229

.lr.ph224.us.preheader:                           ; preds = %.lr.ph228
  %161 = mul i32 %16, %.1165232
  %162 = add i32 %161, 1
  %163 = zext nneg i32 %160 to i64
  %164 = shl nuw nsw i64 %163, 3
  br label %.lr.ph224.us

.lr.ph224.us:                                     ; preds = %.lr.ph224.us.preheader, %.lr.ph224.us
  %indvar243 = phi i32 [ 0, %.lr.ph224.us.preheader ], [ %indvar.next244, %.lr.ph224.us ]
  %.1226.us = phi i32 [ %.1165232, %.lr.ph224.us.preheader ], [ %169, %.lr.ph224.us ]
  %165 = mul i32 %16, %indvar243
  %166 = add i32 %162, %165
  %167 = sext i32 %166 to i64
  %168 = shl nsw i64 %167, 3
  %scevgep245 = getelementptr i8, ptr %scevgep242, i64 %168
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep245, i8 0, i64 %164, i1 false), !tbaa !9
  %169 = add nuw nsw i32 %.1226.us, 1
  %.not188.not.us = icmp slt i32 %169, %158
  %indvar.next244 = add i32 %indvar243, 1
  br i1 %.not188.not.us, label %.lr.ph224.us, label %._crit_edge229, !llvm.loop !15

._crit_edge229:                                   ; preds = %.lr.ph224.us, %.lr.ph228, %152
  %170 = load i32, ptr %10, align 4, !tbaa !5
  %171 = add nsw i32 %170, %.1165232
  %172 = icmp slt i32 %170, 0
  %173 = icmp sgt i32 %171, 0
  %174 = icmp slt i32 %171, 2
  %.in = select i1 %172, i1 %173, i1 %174
  br i1 %.in, label %126, label %.loopexit, !llvm.loop !16

.loopexit:                                        ; preds = %._crit_edge229, %119, %117
  %175 = sitofp i32 %.0208 to double
  store double %175, ptr %6, align 8, !tbaa !9
  br label %176

176:                                              ; preds = %42, %.loopexit, %45, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #5
  ret void
}

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

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

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

declare void @dorg2r_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare void @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 i32 @llvm.smax.i32(i32, i32) #3

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #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 = !{!"int", !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: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass