; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (dgeqlf)

; 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 [9 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 [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dgeqlf_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) #0 {
  %9 = alloca ptr, align 8
  %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 i32, align 4
  %18 = alloca i32, align 4
  %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 %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  store ptr %7, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  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 %12, align 8, !tbaa !5
  %40 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %40, ptr %17, align 4, !tbaa !9
  %41 = load i32, ptr %17, align 4, !tbaa !9
  %42 = mul nsw i32 %41, 1
  %43 = add nsw i32 1, %42
  store i32 %43, ptr %18, align 4, !tbaa !9
  %44 = load i32, ptr %18, align 4, !tbaa !9
  %45 = load ptr, ptr %11, 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 %11, align 8, !tbaa !5
  %49 = load ptr, ptr %13, align 8, !tbaa !5
  %50 = getelementptr inbounds double, ptr %49, i32 -1
  store ptr %50, ptr %13, align 8, !tbaa !5
  %51 = load ptr, ptr %14, align 8, !tbaa !5
  %52 = getelementptr inbounds double, ptr %51, i32 -1
  store ptr %52, ptr %14, align 8, !tbaa !5
  %53 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 0, ptr %53, align 4, !tbaa !9
  %54 = load ptr, ptr %15, align 8, !tbaa !5
  %55 = load i32, ptr %54, align 4, !tbaa !9
  %56 = icmp eq i32 %55, -1
  %57 = zext i1 %56 to i32
  store i32 %57, ptr %36, align 4, !tbaa !9
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = icmp slt i32 %59, 0
  br i1 %60, label %61, label %63

61:                                               ; preds = %8
  %62 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -1, ptr %62, align 4, !tbaa !9
  br label %86

63:                                               ; preds = %8
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  %65 = load i32, ptr %64, align 4, !tbaa !9
  %66 = icmp slt i32 %65, 0
  br i1 %66, label %67, label %69

67:                                               ; preds = %63
  %68 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -2, ptr %68, align 4, !tbaa !9
  br label %85

69:                                               ; preds = %63
  %70 = load ptr, ptr %12, align 8, !tbaa !5
  %71 = load i32, ptr %70, align 4, !tbaa !9
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = load i32, ptr %72, align 4, !tbaa !9
  %74 = icmp sge i32 1, %73
  br i1 %74, label %75, label %76

75:                                               ; preds = %69
  br label %79

76:                                               ; preds = %69
  %77 = load ptr, ptr %9, align 8, !tbaa !5
  %78 = load i32, ptr %77, align 4, !tbaa !9
  br label %79

79:                                               ; preds = %76, %75
  %80 = phi i32 [ 1, %75 ], [ %78, %76 ]
  %81 = icmp slt i32 %71, %80
  br i1 %81, label %82, label %84

82:                                               ; preds = %79
  %83 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -4, ptr %83, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %82, %79
  br label %85

85:                                               ; preds = %84, %67
  br label %86

86:                                               ; preds = %85, %61
  %87 = load ptr, ptr %16, align 8, !tbaa !5
  %88 = load i32, ptr %87, align 4, !tbaa !9
  %89 = icmp eq i32 %88, 0
  br i1 %89, label %90, label %138

90:                                               ; preds = %86
  %91 = load ptr, ptr %9, align 8, !tbaa !5
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = load ptr, ptr %10, align 8, !tbaa !5
  %94 = load i32, ptr %93, align 4, !tbaa !9
  %95 = icmp sle i32 %92, %94
  br i1 %95, label %96, label %99

96:                                               ; preds = %90
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = load i32, ptr %97, align 4, !tbaa !9
  br label %102

99:                                               ; preds = %90
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  %101 = load i32, ptr %100, align 4, !tbaa !9
  br label %102

102:                                              ; preds = %99, %96
  %103 = phi i32 [ %98, %96 ], [ %101, %99 ]
  store i32 %103, ptr %24, align 4, !tbaa !9
  %104 = load i32, ptr %24, align 4, !tbaa !9
  %105 = icmp eq i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %102
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %115

107:                                              ; preds = %102
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %108, ptr noundef %109, ptr noundef @c_n1, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  store i32 %110, ptr %28, align 4, !tbaa !9
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = load i32, ptr %28, align 4, !tbaa !9
  %114 = mul nsw i32 %112, %113
  store i32 %114, ptr %35, align 4, !tbaa !9
  br label %115

115:                                              ; preds = %107, %106
  %116 = load i32, ptr %35, align 4, !tbaa !9
  %117 = sitofp i32 %116 to double
  %118 = load ptr, ptr %14, align 8, !tbaa !5
  %119 = getelementptr inbounds double, ptr %118, i64 1
  store double %117, ptr %119, align 8, !tbaa !11
  %120 = load ptr, ptr %15, align 8, !tbaa !5
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = load i32, ptr %122, align 4, !tbaa !9
  %124 = icmp sge i32 1, %123
  br i1 %124, label %125, label %126

125:                                              ; preds = %115
  br label %129

126:                                              ; preds = %115
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %126, %125
  %130 = phi i32 [ 1, %125 ], [ %128, %126 ]
  %131 = icmp slt i32 %121, %130
  br i1 %131, label %132, label %137

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

135:                                              ; preds = %132
  %136 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -7, ptr %136, align 4, !tbaa !9
  br label %137

137:                                              ; preds = %135, %132, %129
  br label %138

138:                                              ; preds = %137, %86
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %147

142:                                              ; preds = %138
  %143 = load ptr, ptr %16, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = sub nsw i32 0, %144
  store i32 %145, ptr %19, align 4, !tbaa !9
  %146 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %19, i32 noundef 6)
  store i32 1, ptr %38, align 4
  br label %441

147:                                              ; preds = %138
  %148 = load i32, ptr %36, align 4, !tbaa !9
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %150, label %151

150:                                              ; preds = %147
  store i32 1, ptr %38, align 4
  br label %441

151:                                              ; preds = %147
  br label %152

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

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

156:                                              ; preds = %152
  store i32 2, ptr %25, align 4, !tbaa !9
  store i32 1, ptr %33, align 4, !tbaa !9
  %157 = load ptr, ptr %10, align 8, !tbaa !5
  %158 = load i32, ptr %157, align 4, !tbaa !9
  store i32 %158, ptr %37, align 4, !tbaa !9
  %159 = load i32, ptr %28, align 4, !tbaa !9
  %160 = icmp sgt i32 %159, 1
  br i1 %160, label %161, label %210

161:                                              ; preds = %156
  %162 = load i32, ptr %28, align 4, !tbaa !9
  %163 = load i32, ptr %24, align 4, !tbaa !9
  %164 = icmp slt i32 %162, %163
  br i1 %164, label %165, label %210

165:                                              ; preds = %161
  store i32 0, ptr %19, align 4, !tbaa !9
  %166 = load ptr, ptr %9, align 8, !tbaa !5
  %167 = load ptr, ptr %10, align 8, !tbaa !5
  %168 = call i32 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %166, ptr noundef %167, ptr noundef @c_n1, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  store i32 %168, ptr %20, align 4, !tbaa !9
  %169 = load i32, ptr %19, align 4, !tbaa !9
  %170 = load i32, ptr %20, align 4, !tbaa !9
  %171 = icmp sge i32 %169, %170
  br i1 %171, label %172, label %174

172:                                              ; preds = %165
  %173 = load i32, ptr %19, align 4, !tbaa !9
  br label %176

174:                                              ; preds = %165
  %175 = load i32, ptr %20, align 4, !tbaa !9
  br label %176

176:                                              ; preds = %174, %172
  %177 = phi i32 [ %173, %172 ], [ %175, %174 ]
  store i32 %177, ptr %33, align 4, !tbaa !9
  %178 = load i32, ptr %33, align 4, !tbaa !9
  %179 = load i32, ptr %24, align 4, !tbaa !9
  %180 = icmp slt i32 %178, %179
  br i1 %180, label %181, label %209

181:                                              ; preds = %176
  %182 = load ptr, ptr %10, align 8, !tbaa !5
  %183 = load i32, ptr %182, align 4, !tbaa !9
  store i32 %183, ptr %34, align 4, !tbaa !9
  %184 = load i32, ptr %34, align 4, !tbaa !9
  %185 = load i32, ptr %28, align 4, !tbaa !9
  %186 = mul nsw i32 %184, %185
  store i32 %186, ptr %37, align 4, !tbaa !9
  %187 = load ptr, ptr %15, align 8, !tbaa !5
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = load i32, ptr %37, align 4, !tbaa !9
  %190 = icmp slt i32 %188, %189
  br i1 %190, label %191, label %208

191:                                              ; preds = %181
  %192 = load ptr, ptr %15, align 8, !tbaa !5
  %193 = load i32, ptr %192, align 4, !tbaa !9
  %194 = load i32, ptr %34, align 4, !tbaa !9
  %195 = sdiv i32 %193, %194
  store i32 %195, ptr %28, align 4, !tbaa !9
  store i32 2, ptr %19, align 4, !tbaa !9
  %196 = load ptr, ptr %9, align 8, !tbaa !5
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = call i32 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %196, ptr noundef %197, ptr noundef @c_n1, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  store i32 %198, ptr %20, align 4, !tbaa !9
  %199 = load i32, ptr %19, align 4, !tbaa !9
  %200 = load i32, ptr %20, align 4, !tbaa !9
  %201 = icmp sge i32 %199, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %191
  %203 = load i32, ptr %19, align 4, !tbaa !9
  br label %206

204:                                              ; preds = %191
  %205 = load i32, ptr %20, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %204, %202
  %207 = phi i32 [ %203, %202 ], [ %205, %204 ]
  store i32 %207, ptr %25, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %206, %181
  br label %209

209:                                              ; preds = %208, %176
  br label %210

210:                                              ; preds = %209, %161, %156
  %211 = load i32, ptr %28, align 4, !tbaa !9
  %212 = load i32, ptr %25, align 4, !tbaa !9
  %213 = icmp sge i32 %211, %212
  br i1 %213, label %214, label %415

214:                                              ; preds = %210
  %215 = load i32, ptr %28, align 4, !tbaa !9
  %216 = load i32, ptr %24, align 4, !tbaa !9
  %217 = icmp slt i32 %215, %216
  br i1 %217, label %218, label %415

218:                                              ; preds = %214
  %219 = load i32, ptr %33, align 4, !tbaa !9
  %220 = load i32, ptr %24, align 4, !tbaa !9
  %221 = icmp slt i32 %219, %220
  br i1 %221, label %222, label %415

222:                                              ; preds = %218
  %223 = load i32, ptr %24, align 4, !tbaa !9
  %224 = load i32, ptr %33, align 4, !tbaa !9
  %225 = sub nsw i32 %223, %224
  %226 = sub nsw i32 %225, 1
  %227 = load i32, ptr %28, align 4, !tbaa !9
  %228 = sdiv i32 %226, %227
  %229 = load i32, ptr %28, align 4, !tbaa !9
  %230 = mul nsw i32 %228, %229
  store i32 %230, ptr %29, align 4, !tbaa !9
  %231 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %231, ptr %19, align 4, !tbaa !9
  %232 = load i32, ptr %29, align 4, !tbaa !9
  %233 = load i32, ptr %28, align 4, !tbaa !9
  %234 = add nsw i32 %232, %233
  store i32 %234, ptr %20, align 4, !tbaa !9
  %235 = load i32, ptr %19, align 4, !tbaa !9
  %236 = load i32, ptr %20, align 4, !tbaa !9
  %237 = icmp sle i32 %235, %236
  br i1 %237, label %238, label %240

238:                                              ; preds = %222
  %239 = load i32, ptr %19, align 4, !tbaa !9
  br label %242

240:                                              ; preds = %222
  %241 = load i32, ptr %20, align 4, !tbaa !9
  br label %242

242:                                              ; preds = %240, %238
  %243 = phi i32 [ %239, %238 ], [ %241, %240 ]
  store i32 %243, ptr %30, align 4, !tbaa !9
  %244 = load i32, ptr %24, align 4, !tbaa !9
  %245 = load i32, ptr %30, align 4, !tbaa !9
  %246 = sub nsw i32 %244, %245
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %19, align 4, !tbaa !9
  %248 = load i32, ptr %28, align 4, !tbaa !9
  %249 = sub nsw i32 0, %248
  store i32 %249, ptr %20, align 4, !tbaa !9
  %250 = load i32, ptr %24, align 4, !tbaa !9
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = sub nsw i32 %250, %251
  %253 = load i32, ptr %29, align 4, !tbaa !9
  %254 = add nsw i32 %252, %253
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %23, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %392, %242
  %257 = load i32, ptr %20, align 4, !tbaa !9
  %258 = icmp slt i32 %257, 0
  br i1 %258, label %259, label %264

259:                                              ; preds = %256
  %260 = load i32, ptr %23, align 4, !tbaa !9
  %261 = load i32, ptr %19, align 4, !tbaa !9
  %262 = icmp sge i32 %260, %261
  %263 = zext i1 %262 to i32
  br label %269

264:                                              ; preds = %256
  %265 = load i32, ptr %23, align 4, !tbaa !9
  %266 = load i32, ptr %19, align 4, !tbaa !9
  %267 = icmp sle i32 %265, %266
  %268 = zext i1 %267 to i32
  br label %269

269:                                              ; preds = %264, %259
  %270 = phi i32 [ %263, %259 ], [ %268, %264 ]
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %396

272:                                              ; preds = %269
  %273 = load i32, ptr %24, align 4, !tbaa !9
  %274 = load i32, ptr %23, align 4, !tbaa !9
  %275 = sub nsw i32 %273, %274
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %21, align 4, !tbaa !9
  %277 = load i32, ptr %21, align 4, !tbaa !9
  %278 = load i32, ptr %28, align 4, !tbaa !9
  %279 = icmp sle i32 %277, %278
  br i1 %279, label %280, label %282

280:                                              ; preds = %272
  %281 = load i32, ptr %21, align 4, !tbaa !9
  br label %284

282:                                              ; preds = %272
  %283 = load i32, ptr %28, align 4, !tbaa !9
  br label %284

284:                                              ; preds = %282, %280
  %285 = phi i32 [ %281, %280 ], [ %283, %282 ]
  store i32 %285, ptr %27, align 4, !tbaa !9
  %286 = load ptr, ptr %9, align 8, !tbaa !5
  %287 = load i32, ptr %286, align 4, !tbaa !9
  %288 = load i32, ptr %24, align 4, !tbaa !9
  %289 = sub nsw i32 %287, %288
  %290 = load i32, ptr %23, align 4, !tbaa !9
  %291 = add nsw i32 %289, %290
  %292 = load i32, ptr %27, align 4, !tbaa !9
  %293 = add nsw i32 %291, %292
  %294 = sub nsw i32 %293, 1
  store i32 %294, ptr %21, align 4, !tbaa !9
  %295 = load ptr, ptr %11, align 8, !tbaa !5
  %296 = load ptr, ptr %10, align 8, !tbaa !5
  %297 = load i32, ptr %296, align 4, !tbaa !9
  %298 = load i32, ptr %24, align 4, !tbaa !9
  %299 = sub nsw i32 %297, %298
  %300 = load i32, ptr %23, align 4, !tbaa !9
  %301 = add nsw i32 %299, %300
  %302 = load i32, ptr %17, align 4, !tbaa !9
  %303 = mul nsw i32 %301, %302
  %304 = add nsw i32 %303, 1
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds double, ptr %295, i64 %305
  %307 = load ptr, ptr %12, align 8, !tbaa !5
  %308 = load ptr, ptr %13, align 8, !tbaa !5
  %309 = load i32, ptr %23, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds double, ptr %308, i64 %310
  %312 = load ptr, ptr %14, align 8, !tbaa !5
  %313 = getelementptr inbounds double, ptr %312, i64 1
  call void @dgeql2_(ptr noundef %21, ptr noundef %27, ptr noundef %306, ptr noundef %307, ptr noundef %311, ptr noundef %313, ptr noundef %26)
  %314 = load ptr, ptr %10, align 8, !tbaa !5
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = load i32, ptr %24, align 4, !tbaa !9
  %317 = sub nsw i32 %315, %316
  %318 = load i32, ptr %23, align 4, !tbaa !9
  %319 = add nsw i32 %317, %318
  %320 = icmp sgt i32 %319, 1
  br i1 %320, label %321, label %391

321:                                              ; preds = %284
  %322 = load ptr, ptr %9, align 8, !tbaa !5
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = load i32, ptr %24, align 4, !tbaa !9
  %325 = sub nsw i32 %323, %324
  %326 = load i32, ptr %23, align 4, !tbaa !9
  %327 = add nsw i32 %325, %326
  %328 = load i32, ptr %27, align 4, !tbaa !9
  %329 = add nsw i32 %327, %328
  %330 = sub nsw i32 %329, 1
  store i32 %330, ptr %21, align 4, !tbaa !9
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = load ptr, ptr %10, align 8, !tbaa !5
  %333 = load i32, ptr %332, align 4, !tbaa !9
  %334 = load i32, ptr %24, align 4, !tbaa !9
  %335 = sub nsw i32 %333, %334
  %336 = load i32, ptr %23, align 4, !tbaa !9
  %337 = add nsw i32 %335, %336
  %338 = load i32, ptr %17, align 4, !tbaa !9
  %339 = mul nsw i32 %337, %338
  %340 = add nsw i32 %339, 1
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds double, ptr %331, i64 %341
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %345 = load i32, ptr %23, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds double, ptr %344, i64 %346
  %348 = load ptr, ptr %14, align 8, !tbaa !5
  %349 = getelementptr inbounds double, ptr %348, i64 1
  call void @dlarft_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %21, ptr noundef %27, ptr noundef %342, ptr noundef %343, ptr noundef %347, ptr noundef %349, ptr noundef %34)
  %350 = load ptr, ptr %9, align 8, !tbaa !5
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = load i32, ptr %24, align 4, !tbaa !9
  %353 = sub nsw i32 %351, %352
  %354 = load i32, ptr %23, align 4, !tbaa !9
  %355 = add nsw i32 %353, %354
  %356 = load i32, ptr %27, align 4, !tbaa !9
  %357 = add nsw i32 %355, %356
  %358 = sub nsw i32 %357, 1
  store i32 %358, ptr %21, align 4, !tbaa !9
  %359 = load ptr, ptr %10, align 8, !tbaa !5
  %360 = load i32, ptr %359, align 4, !tbaa !9
  %361 = load i32, ptr %24, align 4, !tbaa !9
  %362 = sub nsw i32 %360, %361
  %363 = load i32, ptr %23, align 4, !tbaa !9
  %364 = add nsw i32 %362, %363
  %365 = sub nsw i32 %364, 1
  store i32 %365, ptr %22, align 4, !tbaa !9
  %366 = load ptr, ptr %11, align 8, !tbaa !5
  %367 = load ptr, ptr %10, align 8, !tbaa !5
  %368 = load i32, ptr %367, align 4, !tbaa !9
  %369 = load i32, ptr %24, align 4, !tbaa !9
  %370 = sub nsw i32 %368, %369
  %371 = load i32, ptr %23, align 4, !tbaa !9
  %372 = add nsw i32 %370, %371
  %373 = load i32, ptr %17, align 4, !tbaa !9
  %374 = mul nsw i32 %372, %373
  %375 = add nsw i32 %374, 1
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds double, ptr %366, i64 %376
  %378 = load ptr, ptr %12, align 8, !tbaa !5
  %379 = load ptr, ptr %14, align 8, !tbaa !5
  %380 = getelementptr inbounds double, ptr %379, i64 1
  %381 = load ptr, ptr %11, align 8, !tbaa !5
  %382 = load i32, ptr %18, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds double, ptr %381, i64 %383
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = load ptr, ptr %14, align 8, !tbaa !5
  %387 = load i32, ptr %27, align 4, !tbaa !9
  %388 = add nsw i32 %387, 1
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds double, ptr %386, i64 %389
  call void @dlarfb_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %21, ptr noundef %22, ptr noundef %27, ptr noundef %377, ptr noundef %378, ptr noundef %380, ptr noundef %34, ptr noundef %384, ptr noundef %385, ptr noundef %390, ptr noundef %34)
  br label %391

391:                                              ; preds = %321, %284
  br label %392

392:                                              ; preds = %391
  %393 = load i32, ptr %20, align 4, !tbaa !9
  %394 = load i32, ptr %23, align 4, !tbaa !9
  %395 = add nsw i32 %394, %393
  store i32 %395, ptr %23, align 4, !tbaa !9
  br label %256, !llvm.loop !13

396:                                              ; preds = %269
  %397 = load ptr, ptr %9, align 8, !tbaa !5
  %398 = load i32, ptr %397, align 4, !tbaa !9
  %399 = load i32, ptr %24, align 4, !tbaa !9
  %400 = sub nsw i32 %398, %399
  %401 = load i32, ptr %23, align 4, !tbaa !9
  %402 = add nsw i32 %400, %401
  %403 = load i32, ptr %28, align 4, !tbaa !9
  %404 = add nsw i32 %402, %403
  %405 = sub nsw i32 %404, 1
  store i32 %405, ptr %31, align 4, !tbaa !9
  %406 = load ptr, ptr %10, align 8, !tbaa !5
  %407 = load i32, ptr %406, align 4, !tbaa !9
  %408 = load i32, ptr %24, align 4, !tbaa !9
  %409 = sub nsw i32 %407, %408
  %410 = load i32, ptr %23, align 4, !tbaa !9
  %411 = add nsw i32 %409, %410
  %412 = load i32, ptr %28, align 4, !tbaa !9
  %413 = add nsw i32 %411, %412
  %414 = sub nsw i32 %413, 1
  store i32 %414, ptr %32, align 4, !tbaa !9
  br label %420

415:                                              ; preds = %218, %214, %210
  %416 = load ptr, ptr %9, align 8, !tbaa !5
  %417 = load i32, ptr %416, align 4, !tbaa !9
  store i32 %417, ptr %31, align 4, !tbaa !9
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = load i32, ptr %418, align 4, !tbaa !9
  store i32 %419, ptr %32, align 4, !tbaa !9
  br label %420

420:                                              ; preds = %415, %396
  %421 = load i32, ptr %31, align 4, !tbaa !9
  %422 = icmp sgt i32 %421, 0
  br i1 %422, label %423, label %436

423:                                              ; preds = %420
  %424 = load i32, ptr %32, align 4, !tbaa !9
  %425 = icmp sgt i32 %424, 0
  br i1 %425, label %426, label %436

426:                                              ; preds = %423
  %427 = load ptr, ptr %11, align 8, !tbaa !5
  %428 = load i32, ptr %18, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds double, ptr %427, i64 %429
  %431 = load ptr, ptr %12, align 8, !tbaa !5
  %432 = load ptr, ptr %13, align 8, !tbaa !5
  %433 = getelementptr inbounds double, ptr %432, i64 1
  %434 = load ptr, ptr %14, align 8, !tbaa !5
  %435 = getelementptr inbounds double, ptr %434, i64 1
  call void @dgeql2_(ptr noundef %31, ptr noundef %32, ptr noundef %430, ptr noundef %431, ptr noundef %433, ptr noundef %435, ptr noundef %26)
  br label %436

436:                                              ; preds = %426, %423, %420
  %437 = load i32, ptr %37, align 4, !tbaa !9
  %438 = sitofp i32 %437 to double
  %439 = load ptr, ptr %14, align 8, !tbaa !5
  %440 = getelementptr inbounds double, ptr %439, i64 1
  store double %438, ptr %440, align 8, !tbaa !11
  store i32 1, ptr %38, align 4
  br label %441

441:                                              ; preds = %436, %155, %150, %142
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #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 @dgeql2_(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"}


; 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 [9 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 [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dgeqlf_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr nocapture noundef %7) local_unnamed_addr #0 {
  %9 = alloca i32, align 4
  %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
  %16 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #4
  %17 = load i32, ptr %3, align 4, !tbaa !5
  %narrow = xor i32 %17, -1
  %18 = sext i32 %narrow to i64
  %19 = getelementptr inbounds double, ptr %2, i64 %18
  %20 = getelementptr inbounds i8, ptr %4, i64 -8
  store i32 0, ptr %7, align 4, !tbaa !5
  %21 = load i32, ptr %6, align 4, !tbaa !5
  %22 = icmp eq i32 %21, -1
  %23 = load i32, ptr %0, align 4, !tbaa !5
  %24 = icmp slt i32 %23, 0
  br i1 %24, label %.thread181.sink.split, label %25

25:                                               ; preds = %8
  %26 = load i32, ptr %1, align 4, !tbaa !5
  %27 = icmp slt i32 %26, 0
  br i1 %27, label %.thread181.sink.split, label %28

28:                                               ; preds = %25
  %29 = load i32, ptr %3, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %23, i32 1)
  %30 = icmp slt i32 %29, %spec.select
  br i1 %30, label %.thread181.sink.split, label %31

31:                                               ; preds = %28
  %32 = tail call i32 @llvm.umin.i32(i32 %23, i32 %26)
  %33 = icmp eq i32 %32, 0
  br i1 %33, label %39, label %34

34:                                               ; preds = %31
  %35 = tail call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #4
  %36 = load i32, ptr %1, align 4, !tbaa !5
  %37 = mul nsw i32 %36, %35
  %38 = sitofp i32 %37 to double
  %.pre = load i32, ptr %6, align 4, !tbaa !5
  br label %39

39:                                               ; preds = %31, %34
  %40 = phi i32 [ %36, %34 ], [ %26, %31 ]
  %41 = phi i32 [ %.pre, %34 ], [ %21, %31 ]
  %.0151 = phi i32 [ %35, %34 ], [ undef, %31 ]
  %.0149 = phi double [ %38, %34 ], [ 1.000000e+00, %31 ]
  store double %.0149, ptr %5, align 8, !tbaa !9
  %spec.select171 = tail call i32 @llvm.smax.i32(i32 %40, i32 1)
  %42 = icmp sge i32 %41, %spec.select171
  %or.cond = select i1 %42, i1 true, i1 %22
  br i1 %or.cond, label %.thread, label %.thread181.sink.split

.thread:                                          ; preds = %39
  %.pr177.pr = load i32, ptr %7, align 4, !tbaa !5
  %.not165 = icmp eq i32 %.pr177.pr, 0
  br i1 %.not165, label %46, label %.thread181

.thread181.sink.split:                            ; preds = %39, %28, %25, %8
  %.sink = phi i32 [ -1, %8 ], [ -2, %25 ], [ -4, %28 ], [ -7, %39 ]
  store i32 %.sink, ptr %7, align 4, !tbaa !5
  br label %.thread181

.thread181:                                       ; preds = %.thread181.sink.split, %.thread
  %43 = phi i32 [ %.pr177.pr, %.thread ], [ %.sink, %.thread181.sink.split ]
  %44 = sub nsw i32 0, %43
  store i32 %44, ptr %9, align 4, !tbaa !5
  %45 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %9, i32 noundef 6) #4
  br label %131

46:                                               ; preds = %.thread
  %or.cond175 = or i1 %22, %33
  br i1 %or.cond175, label %131, label %47

47:                                               ; preds = %46
  %48 = icmp sgt i32 %.0151, 1
  %49 = icmp slt i32 %.0151, %32
  %or.cond172 = and i1 %48, %49
  br i1 %or.cond172, label %50, label %63

50:                                               ; preds = %47
  %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 @c_n1, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #4
  %52 = tail call i32 @llvm.smax.i32(i32 %51, i32 0)
  %53 = icmp ult i32 %52, %32
  br i1 %53, label %54, label %63

54:                                               ; preds = %50
  %55 = load i32, ptr %1, align 4, !tbaa !5
  store i32 %55, ptr %16, align 4, !tbaa !5
  %56 = mul nsw i32 %55, %.0151
  %57 = load i32, ptr %6, align 4, !tbaa !5
  %58 = icmp slt i32 %57, %56
  br i1 %58, label %59, label %63

59:                                               ; preds = %54
  %60 = sdiv i32 %57, %55
  %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 @c_n1, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #4
  %62 = tail call i32 @llvm.smax.i32(i32 %61, i32 2)
  br label %63

63:                                               ; preds = %50, %59, %54, %47
  %.0152 = phi i32 [ %62, %59 ], [ 2, %54 ], [ 2, %50 ], [ 2, %47 ]
  %.2 = phi i32 [ %60, %59 ], [ %.0151, %54 ], [ %.0151, %50 ], [ %.0151, %47 ]
  %.0150 = phi i32 [ %52, %59 ], [ %52, %54 ], [ %52, %50 ], [ 1, %47 ]
  %.0 = phi i32 [ %56, %59 ], [ %56, %54 ], [ %40, %50 ], [ %40, %47 ]
  %.not168 = icmp sge i32 %.2, %.0152
  %64 = icmp slt i32 %.2, %32
  %or.cond173 = and i1 %.not168, %64
  %65 = icmp ult i32 %.0150, %32
  %or.cond174 = and i1 %or.cond173, %65
  br i1 %or.cond174, label %66, label %121

66:                                               ; preds = %63
  %67 = xor i32 %.0150, -1
  %68 = add nsw i32 %32, %67
  %.fr = freeze i32 %68
  %69 = srem i32 %.fr, %.2
  %70 = sub nsw i32 %.fr, %69
  %71 = add nsw i32 %70, %.2
  %72 = tail call i32 @llvm.smin.i32(i32 %32, i32 %71)
  %73 = sub nsw i32 %32, %72
  %74 = add i32 %73, 1
  %75 = add i32 %74, %70
  %invariant.gep = getelementptr i8, ptr %19, i64 8
  %.not = icmp slt i32 %75, %74
  %76 = xor i32 %32, -1
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %66, %113
  %.0154196 = phi i32 [ %114, %113 ], [ %75, %66 ]
  %77 = sub nsw i32 %32, %.0154196
  %78 = add nsw i32 %77, 1
  %79 = call i32 @llvm.smin.i32(i32 %78, i32 %.2)
  store i32 %79, ptr %13, align 4, !tbaa !5
  %80 = load i32, ptr %0, align 4, !tbaa !5
  %81 = add i32 %.0154196, %76
  %82 = add i32 %81, %79
  %83 = add i32 %82, %80
  store i32 %83, ptr %10, align 4, !tbaa !5
  %84 = load i32, ptr %1, align 4, !tbaa !5
  %85 = sub i32 %.0154196, %32
  %86 = add i32 %85, %84
  %87 = mul nsw i32 %86, %17
  %88 = sext i32 %87 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %88
  %89 = sext i32 %.0154196 to i64
  %90 = getelementptr inbounds double, ptr %20, i64 %89
  call void @dgeql2_(ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef %gep, ptr noundef nonnull %3, ptr noundef nonnull %90, ptr noundef nonnull %5, ptr noundef nonnull %12) #4
  %91 = load i32, ptr %1, align 4, !tbaa !5
  %92 = sub nsw i32 %91, %32
  %93 = add nsw i32 %92, %.0154196
  %94 = icmp sgt i32 %93, 1
  br i1 %94, label %95, label %113

95:                                               ; preds = %.lr.ph
  %96 = load i32, ptr %0, align 4, !tbaa !5
  %97 = load i32, ptr %13, align 4, !tbaa !5
  %98 = add i32 %81, %96
  %99 = add i32 %98, %97
  store i32 %99, ptr %10, align 4, !tbaa !5
  %100 = mul nsw i32 %93, %17
  %101 = sext i32 %100 to i64
  %gep190 = getelementptr double, ptr %invariant.gep, i64 %101
  call void @dlarft_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef %gep190, ptr noundef nonnull %3, ptr noundef nonnull %90, ptr noundef nonnull %5, ptr noundef nonnull %16) #4
  %102 = load i32, ptr %0, align 4, !tbaa !5
  %103 = load i32, ptr %13, align 4, !tbaa !5
  %104 = add i32 %81, %102
  %105 = add i32 %104, %103
  store i32 %105, ptr %10, align 4, !tbaa !5
  %106 = load i32, ptr %1, align 4, !tbaa !5
  %107 = sub nsw i32 %106, %32
  %108 = add nsw i32 %107, %.0154196
  %109 = add nsw i32 %108, -1
  store i32 %109, ptr %11, align 4, !tbaa !5
  %110 = mul nsw i32 %108, %17
  %111 = sext i32 %110 to i64
  %gep192 = getelementptr double, ptr %invariant.gep, i64 %111
  %112 = sext i32 %103 to i64
  %gep194 = getelementptr double, ptr %5, i64 %112
  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 %10, ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef %gep192, ptr noundef nonnull %3, ptr noundef nonnull %5, ptr noundef nonnull %16, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %gep194, ptr noundef nonnull %16) #4
  br label %113

113:                                              ; preds = %.lr.ph, %95
  %114 = sub i32 %.0154196, %.2
  %.not198 = icmp slt i32 %114, %74
  br i1 %.not198, label %._crit_edge, label %.lr.ph, !llvm.loop !11

._crit_edge:                                      ; preds = %113, %66
  %.0154.lcssa = phi i32 [ %75, %66 ], [ %114, %113 ]
  %115 = load i32, ptr %0, align 4, !tbaa !5
  %116 = add i32 %.2, %76
  %117 = add i32 %116, %.0154.lcssa
  %118 = add i32 %117, %115
  store i32 %118, ptr %14, align 4, !tbaa !5
  %119 = load i32, ptr %1, align 4, !tbaa !5
  %120 = add i32 %117, %119
  br label %124

121:                                              ; preds = %63
  %122 = load i32, ptr %0, align 4, !tbaa !5
  store i32 %122, ptr %14, align 4, !tbaa !5
  %123 = load i32, ptr %1, align 4, !tbaa !5
  br label %124

124:                                              ; preds = %121, %._crit_edge
  %125 = phi i32 [ %122, %121 ], [ %118, %._crit_edge ]
  %storemerge = phi i32 [ %123, %121 ], [ %120, %._crit_edge ]
  store i32 %storemerge, ptr %15, align 4, !tbaa !5
  %126 = icmp sgt i32 %125, 0
  %127 = icmp sgt i32 %storemerge, 0
  %or.cond3 = select i1 %126, i1 %127, i1 false
  br i1 %or.cond3, label %128, label %129

128:                                              ; preds = %124
  call void @dgeql2_(ptr noundef nonnull %14, ptr noundef nonnull %15, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %12) #4
  br label %129

129:                                              ; preds = %128, %124
  %130 = sitofp i32 %.0 to double
  store double %130, ptr %5, align 8, !tbaa !9
  br label %131

131:                                              ; preds = %46, %129, %.thread181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  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 @dgeql2_(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 nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #3

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 = { 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"}


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