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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

60:                                               ; preds = %8
  %61 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -1, ptr %61, align 8, !tbaa !9
  br label %87

62:                                               ; preds = %8
  %63 = load ptr, ptr %11, align 8, !tbaa !5
  %64 = load i64, ptr %63, align 8, !tbaa !9
  %65 = load ptr, ptr %10, align 8, !tbaa !5
  %66 = load i64, ptr %65, align 8, !tbaa !9
  %67 = icmp slt i64 %64, %66
  br i1 %67, label %68, label %70

68:                                               ; preds = %62
  %69 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -2, ptr %69, align 8, !tbaa !9
  br label %86

70:                                               ; preds = %62
  %71 = load ptr, ptr %13, align 8, !tbaa !5
  %72 = load i64, ptr %71, align 8, !tbaa !9
  %73 = load ptr, ptr %10, align 8, !tbaa !5
  %74 = load i64, ptr %73, align 8, !tbaa !9
  %75 = icmp sge i64 1, %74
  br i1 %75, label %76, label %77

76:                                               ; preds = %70
  br label %80

77:                                               ; preds = %70
  %78 = load ptr, ptr %10, align 8, !tbaa !5
  %79 = load i64, ptr %78, align 8, !tbaa !9
  br label %80

80:                                               ; preds = %77, %76
  %81 = phi i64 [ 1, %76 ], [ %79, %77 ]
  %82 = icmp slt i64 %72, %81
  br i1 %82, label %83, label %85

83:                                               ; preds = %80
  %84 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -4, ptr %84, align 8, !tbaa !9
  br label %85

85:                                               ; preds = %83, %80
  br label %86

86:                                               ; preds = %85, %68
  br label %87

87:                                               ; preds = %86, %60
  %88 = load ptr, ptr %17, align 8, !tbaa !5
  %89 = load i64, ptr %88, align 8, !tbaa !9
  %90 = icmp eq i64 %89, 0
  br i1 %90, label %91, label %133

91:                                               ; preds = %87
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = load i64, ptr %92, align 8, !tbaa !9
  %94 = icmp eq i64 %93, 0
  br i1 %94, label %101, label %95

95:                                               ; preds = %91
  %96 = load ptr, ptr %10, align 8, !tbaa !5
  %97 = load i64, ptr %96, align 8, !tbaa !9
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  %99 = load i64, ptr %98, align 8, !tbaa !9
  %100 = icmp eq i64 %97, %99
  br i1 %100, label %101, label %102

101:                                              ; preds = %95, %91
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %110

102:                                              ; preds = %95
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %103, ptr noundef %104, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %105, ptr %28, align 8, !tbaa !9
  %106 = load ptr, ptr %10, align 8, !tbaa !5
  %107 = load i64, ptr %106, align 8, !tbaa !9
  %108 = load i64, ptr %28, align 8, !tbaa !9
  %109 = mul nsw i64 %107, %108
  store i64 %109, ptr %36, align 8, !tbaa !9
  br label %110

110:                                              ; preds = %102, %101
  %111 = load i64, ptr %36, align 8, !tbaa !9
  %112 = sitofp i64 %111 to double
  %113 = load ptr, ptr %15, align 8, !tbaa !5
  %114 = getelementptr inbounds double, ptr %113, i64 1
  store double %112, ptr %114, align 8, !tbaa !11
  %115 = load ptr, ptr %16, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = load i64, ptr %117, align 8, !tbaa !9
  %119 = icmp sge i64 1, %118
  br i1 %119, label %120, label %121

120:                                              ; preds = %110
  br label %124

121:                                              ; preds = %110
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = load i64, ptr %122, align 8, !tbaa !9
  br label %124

124:                                              ; preds = %121, %120
  %125 = phi i64 [ 1, %120 ], [ %123, %121 ]
  %126 = icmp slt i64 %116, %125
  br i1 %126, label %127, label %132

127:                                              ; preds = %124
  %128 = load i64, ptr %37, align 8, !tbaa !9
  %129 = icmp ne i64 %128, 0
  br i1 %129, label %132, label %130

130:                                              ; preds = %127
  %131 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -7, ptr %131, align 8, !tbaa !9
  br label %132

132:                                              ; preds = %130, %127, %124
  br label %133

133:                                              ; preds = %132, %87
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = icmp ne i64 %135, 0
  br i1 %136, label %137, label %142

137:                                              ; preds = %133
  %138 = load ptr, ptr %17, align 8, !tbaa !5
  %139 = load i64, ptr %138, align 8, !tbaa !9
  %140 = sub nsw i64 0, %139
  store i64 %140, ptr %20, align 8, !tbaa !9
  %141 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %20)
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %444

142:                                              ; preds = %133
  %143 = load i64, ptr %37, align 8, !tbaa !9
  %144 = icmp ne i64 %143, 0
  br i1 %144, label %145, label %146

145:                                              ; preds = %142
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %444

146:                                              ; preds = %142
  br label %147

147:                                              ; preds = %146
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = icmp eq i64 %149, 0
  br i1 %150, label %151, label %152

151:                                              ; preds = %147
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %444

152:                                              ; preds = %147
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = load i64, ptr %153, align 8, !tbaa !9
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = load i64, ptr %155, align 8, !tbaa !9
  %157 = icmp eq i64 %154, %156
  br i1 %157, label %158, label %173

158:                                              ; preds = %152
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  store i64 %160, ptr %20, align 8, !tbaa !9
  store i64 1, ptr %25, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %169, %158
  %162 = load i64, ptr %25, align 8, !tbaa !9
  %163 = load i64, ptr %20, align 8, !tbaa !9
  %164 = icmp sle i64 %162, %163
  br i1 %164, label %165, label %172

165:                                              ; preds = %161
  %166 = load ptr, ptr %14, align 8, !tbaa !5
  %167 = load i64, ptr %25, align 8, !tbaa !9
  %168 = getelementptr inbounds double, ptr %166, i64 %167
  store double 0.000000e+00, ptr %168, align 8, !tbaa !11
  br label %169

169:                                              ; preds = %165
  %170 = load i64, ptr %25, align 8, !tbaa !9
  %171 = add nsw i64 %170, 1
  store i64 %171, ptr %25, align 8, !tbaa !9
  br label %161, !llvm.loop !13

172:                                              ; preds = %161
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %444

173:                                              ; preds = %152
  br label %174

174:                                              ; preds = %173
  store i64 2, ptr %34, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = load i64, ptr %175, align 8, !tbaa !9
  store i64 %176, ptr %33, align 8, !tbaa !9
  %177 = load i64, ptr %28, align 8, !tbaa !9
  %178 = icmp sgt i64 %177, 1
  br i1 %178, label %179, label %230

179:                                              ; preds = %174
  %180 = load i64, ptr %28, align 8, !tbaa !9
  %181 = load ptr, ptr %10, align 8, !tbaa !5
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = icmp slt i64 %180, %182
  br i1 %183, label %184, label %230

184:                                              ; preds = %179
  store i64 0, ptr %20, align 8, !tbaa !9
  %185 = load ptr, ptr %10, align 8, !tbaa !5
  %186 = load ptr, ptr %11, align 8, !tbaa !5
  %187 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %185, ptr noundef %186, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %187, ptr %21, align 8, !tbaa !9
  %188 = load i64, ptr %20, align 8, !tbaa !9
  %189 = load i64, ptr %21, align 8, !tbaa !9
  %190 = icmp sge i64 %188, %189
  br i1 %190, label %191, label %193

191:                                              ; preds = %184
  %192 = load i64, ptr %20, align 8, !tbaa !9
  br label %195

193:                                              ; preds = %184
  %194 = load i64, ptr %21, align 8, !tbaa !9
  br label %195

195:                                              ; preds = %193, %191
  %196 = phi i64 [ %192, %191 ], [ %194, %193 ]
  store i64 %196, ptr %32, align 8, !tbaa !9
  %197 = load i64, ptr %32, align 8, !tbaa !9
  %198 = load ptr, ptr %10, align 8, !tbaa !5
  %199 = load i64, ptr %198, align 8, !tbaa !9
  %200 = icmp slt i64 %197, %199
  br i1 %200, label %201, label %229

201:                                              ; preds = %195
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = load i64, ptr %202, align 8, !tbaa !9
  store i64 %203, ptr %35, align 8, !tbaa !9
  %204 = load i64, ptr %35, align 8, !tbaa !9
  %205 = load i64, ptr %28, align 8, !tbaa !9
  %206 = mul nsw i64 %204, %205
  store i64 %206, ptr %33, align 8, !tbaa !9
  %207 = load ptr, ptr %16, align 8, !tbaa !5
  %208 = load i64, ptr %207, align 8, !tbaa !9
  %209 = load i64, ptr %33, align 8, !tbaa !9
  %210 = icmp slt i64 %208, %209
  br i1 %210, label %211, label %228

211:                                              ; preds = %201
  %212 = load ptr, ptr %16, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = load i64, ptr %35, align 8, !tbaa !9
  %215 = sdiv i64 %213, %214
  store i64 %215, ptr %28, align 8, !tbaa !9
  store i64 2, ptr %20, align 8, !tbaa !9
  %216 = load ptr, ptr %10, align 8, !tbaa !5
  %217 = load ptr, ptr %11, align 8, !tbaa !5
  %218 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %216, ptr noundef %217, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %218, ptr %21, align 8, !tbaa !9
  %219 = load i64, ptr %20, align 8, !tbaa !9
  %220 = load i64, ptr %21, align 8, !tbaa !9
  %221 = icmp sge i64 %219, %220
  br i1 %221, label %222, label %224

222:                                              ; preds = %211
  %223 = load i64, ptr %20, align 8, !tbaa !9
  br label %226

224:                                              ; preds = %211
  %225 = load i64, ptr %21, align 8, !tbaa !9
  br label %226

226:                                              ; preds = %224, %222
  %227 = phi i64 [ %223, %222 ], [ %225, %224 ]
  store i64 %227, ptr %34, align 8, !tbaa !9
  br label %228

228:                                              ; preds = %226, %201
  br label %229

229:                                              ; preds = %228, %195
  br label %230

230:                                              ; preds = %229, %179, %174
  %231 = load i64, ptr %28, align 8, !tbaa !9
  %232 = load i64, ptr %34, align 8, !tbaa !9
  %233 = icmp sge i64 %231, %232
  br i1 %233, label %234, label %417

234:                                              ; preds = %230
  %235 = load i64, ptr %28, align 8, !tbaa !9
  %236 = load ptr, ptr %10, align 8, !tbaa !5
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = icmp slt i64 %235, %237
  br i1 %238, label %239, label %417

239:                                              ; preds = %234
  %240 = load i64, ptr %32, align 8, !tbaa !9
  %241 = load ptr, ptr %10, align 8, !tbaa !5
  %242 = load i64, ptr %241, align 8, !tbaa !9
  %243 = icmp slt i64 %240, %242
  br i1 %243, label %244, label %417

244:                                              ; preds = %239
  %245 = load ptr, ptr %10, align 8, !tbaa !5
  %246 = load i64, ptr %245, align 8, !tbaa !9
  %247 = add nsw i64 %246, 1
  store i64 %247, ptr %20, align 8, !tbaa !9
  %248 = load i64, ptr %20, align 8, !tbaa !9
  %249 = load ptr, ptr %11, align 8, !tbaa !5
  %250 = load i64, ptr %249, align 8, !tbaa !9
  %251 = icmp sle i64 %248, %250
  br i1 %251, label %252, label %254

252:                                              ; preds = %244
  %253 = load i64, ptr %20, align 8, !tbaa !9
  br label %257

254:                                              ; preds = %244
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  %256 = load i64, ptr %255, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %254, %252
  %258 = phi i64 [ %253, %252 ], [ %256, %254 ]
  store i64 %258, ptr %26, align 8, !tbaa !9
  %259 = load ptr, ptr %10, align 8, !tbaa !5
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = load i64, ptr %32, align 8, !tbaa !9
  %262 = sub nsw i64 %260, %261
  %263 = sub nsw i64 %262, 1
  %264 = load i64, ptr %28, align 8, !tbaa !9
  %265 = sdiv i64 %263, %264
  %266 = load i64, ptr %28, align 8, !tbaa !9
  %267 = mul nsw i64 %265, %266
  store i64 %267, ptr %29, align 8, !tbaa !9
  %268 = load ptr, ptr %10, align 8, !tbaa !5
  %269 = load i64, ptr %268, align 8, !tbaa !9
  store i64 %269, ptr %20, align 8, !tbaa !9
  %270 = load i64, ptr %29, align 8, !tbaa !9
  %271 = load i64, ptr %28, align 8, !tbaa !9
  %272 = add nsw i64 %270, %271
  store i64 %272, ptr %21, align 8, !tbaa !9
  %273 = load i64, ptr %20, align 8, !tbaa !9
  %274 = load i64, ptr %21, align 8, !tbaa !9
  %275 = icmp sle i64 %273, %274
  br i1 %275, label %276, label %278

276:                                              ; preds = %257
  %277 = load i64, ptr %20, align 8, !tbaa !9
  br label %280

278:                                              ; preds = %257
  %279 = load i64, ptr %21, align 8, !tbaa !9
  br label %280

280:                                              ; preds = %278, %276
  %281 = phi i64 [ %277, %276 ], [ %279, %278 ]
  store i64 %281, ptr %30, align 8, !tbaa !9
  %282 = load ptr, ptr %10, align 8, !tbaa !5
  %283 = load i64, ptr %282, align 8, !tbaa !9
  %284 = load i64, ptr %30, align 8, !tbaa !9
  %285 = sub nsw i64 %283, %284
  %286 = add nsw i64 %285, 1
  store i64 %286, ptr %20, align 8, !tbaa !9
  %287 = load i64, ptr %28, align 8, !tbaa !9
  %288 = sub nsw i64 0, %287
  store i64 %288, ptr %21, align 8, !tbaa !9
  %289 = load ptr, ptr %10, align 8, !tbaa !5
  %290 = load i64, ptr %289, align 8, !tbaa !9
  %291 = load i64, ptr %30, align 8, !tbaa !9
  %292 = sub nsw i64 %290, %291
  %293 = load i64, ptr %29, align 8, !tbaa !9
  %294 = add nsw i64 %292, %293
  %295 = add nsw i64 %294, 1
  store i64 %295, ptr %25, align 8, !tbaa !9
  br label %296

296:                                              ; preds = %408, %280
  %297 = load i64, ptr %21, align 8, !tbaa !9
  %298 = icmp slt i64 %297, 0
  br i1 %298, label %299, label %304

299:                                              ; preds = %296
  %300 = load i64, ptr %25, align 8, !tbaa !9
  %301 = load i64, ptr %20, align 8, !tbaa !9
  %302 = icmp sge i64 %300, %301
  %303 = zext i1 %302 to i32
  br label %309

304:                                              ; preds = %296
  %305 = load i64, ptr %25, align 8, !tbaa !9
  %306 = load i64, ptr %20, align 8, !tbaa !9
  %307 = icmp sle i64 %305, %306
  %308 = zext i1 %307 to i32
  br label %309

309:                                              ; preds = %304, %299
  %310 = phi i32 [ %303, %299 ], [ %308, %304 ]
  %311 = icmp ne i32 %310, 0
  br i1 %311, label %312, label %412

312:                                              ; preds = %309
  %313 = load ptr, ptr %10, align 8, !tbaa !5
  %314 = load i64, ptr %313, align 8, !tbaa !9
  %315 = load i64, ptr %25, align 8, !tbaa !9
  %316 = sub nsw i64 %314, %315
  %317 = add nsw i64 %316, 1
  store i64 %317, ptr %22, align 8, !tbaa !9
  %318 = load i64, ptr %22, align 8, !tbaa !9
  %319 = load i64, ptr %28, align 8, !tbaa !9
  %320 = icmp sle i64 %318, %319
  br i1 %320, label %321, label %323

321:                                              ; preds = %312
  %322 = load i64, ptr %22, align 8, !tbaa !9
  br label %325

323:                                              ; preds = %312
  %324 = load i64, ptr %28, align 8, !tbaa !9
  br label %325

325:                                              ; preds = %323, %321
  %326 = phi i64 [ %322, %321 ], [ %324, %323 ]
  store i64 %326, ptr %27, align 8, !tbaa !9
  %327 = load ptr, ptr %11, align 8, !tbaa !5
  %328 = load i64, ptr %327, align 8, !tbaa !9
  %329 = load i64, ptr %25, align 8, !tbaa !9
  %330 = sub nsw i64 %328, %329
  %331 = add nsw i64 %330, 1
  store i64 %331, ptr %22, align 8, !tbaa !9
  %332 = load ptr, ptr %11, align 8, !tbaa !5
  %333 = load i64, ptr %332, align 8, !tbaa !9
  %334 = load ptr, ptr %10, align 8, !tbaa !5
  %335 = load i64, ptr %334, align 8, !tbaa !9
  %336 = sub nsw i64 %333, %335
  store i64 %336, ptr %23, align 8, !tbaa !9
  %337 = load ptr, ptr %12, align 8, !tbaa !5
  %338 = load i64, ptr %25, align 8, !tbaa !9
  %339 = load i64, ptr %25, align 8, !tbaa !9
  %340 = load i64, ptr %18, align 8, !tbaa !9
  %341 = mul nsw i64 %339, %340
  %342 = add nsw i64 %338, %341
  %343 = getelementptr inbounds double, ptr %337, i64 %342
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %345 = load ptr, ptr %14, align 8, !tbaa !5
  %346 = load i64, ptr %25, align 8, !tbaa !9
  %347 = getelementptr inbounds double, ptr %345, i64 %346
  %348 = load ptr, ptr %15, align 8, !tbaa !5
  %349 = getelementptr inbounds double, ptr %348, i64 1
  %350 = call i32 @dlatrz_(ptr noundef %27, ptr noundef %22, ptr noundef %23, ptr noundef %343, ptr noundef %344, ptr noundef %347, ptr noundef %349)
  %351 = load i64, ptr %25, align 8, !tbaa !9
  %352 = icmp sgt i64 %351, 1
  br i1 %352, label %353, label %407

353:                                              ; preds = %325
  %354 = load ptr, ptr %11, align 8, !tbaa !5
  %355 = load i64, ptr %354, align 8, !tbaa !9
  %356 = load ptr, ptr %10, align 8, !tbaa !5
  %357 = load i64, ptr %356, align 8, !tbaa !9
  %358 = sub nsw i64 %355, %357
  store i64 %358, ptr %22, align 8, !tbaa !9
  %359 = load ptr, ptr %12, align 8, !tbaa !5
  %360 = load i64, ptr %25, align 8, !tbaa !9
  %361 = load i64, ptr %26, align 8, !tbaa !9
  %362 = load i64, ptr %18, align 8, !tbaa !9
  %363 = mul nsw i64 %361, %362
  %364 = add nsw i64 %360, %363
  %365 = getelementptr inbounds double, ptr %359, i64 %364
  %366 = load ptr, ptr %13, align 8, !tbaa !5
  %367 = load ptr, ptr %14, align 8, !tbaa !5
  %368 = load i64, ptr %25, align 8, !tbaa !9
  %369 = getelementptr inbounds double, ptr %367, i64 %368
  %370 = load ptr, ptr %15, align 8, !tbaa !5
  %371 = getelementptr inbounds double, ptr %370, i64 1
  %372 = call i32 @dlarzt_(ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %22, ptr noundef %27, ptr noundef %365, ptr noundef %366, ptr noundef %369, ptr noundef %371, ptr noundef %35)
  %373 = load i64, ptr %25, align 8, !tbaa !9
  %374 = sub nsw i64 %373, 1
  store i64 %374, ptr %22, align 8, !tbaa !9
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = load i64, ptr %375, align 8, !tbaa !9
  %377 = load i64, ptr %25, align 8, !tbaa !9
  %378 = sub nsw i64 %376, %377
  %379 = add nsw i64 %378, 1
  store i64 %379, ptr %23, align 8, !tbaa !9
  %380 = load ptr, ptr %11, align 8, !tbaa !5
  %381 = load i64, ptr %380, align 8, !tbaa !9
  %382 = load ptr, ptr %10, align 8, !tbaa !5
  %383 = load i64, ptr %382, align 8, !tbaa !9
  %384 = sub nsw i64 %381, %383
  store i64 %384, ptr %24, align 8, !tbaa !9
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = load i64, ptr %25, align 8, !tbaa !9
  %387 = load i64, ptr %26, align 8, !tbaa !9
  %388 = load i64, ptr %18, align 8, !tbaa !9
  %389 = mul nsw i64 %387, %388
  %390 = add nsw i64 %386, %389
  %391 = getelementptr inbounds double, ptr %385, i64 %390
  %392 = load ptr, ptr %13, align 8, !tbaa !5
  %393 = load ptr, ptr %15, align 8, !tbaa !5
  %394 = getelementptr inbounds double, ptr %393, i64 1
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = load i64, ptr %25, align 8, !tbaa !9
  %397 = load i64, ptr %18, align 8, !tbaa !9
  %398 = mul nsw i64 %396, %397
  %399 = add nsw i64 %398, 1
  %400 = getelementptr inbounds double, ptr %395, i64 %399
  %401 = load ptr, ptr %13, align 8, !tbaa !5
  %402 = load ptr, ptr %15, align 8, !tbaa !5
  %403 = load i64, ptr %27, align 8, !tbaa !9
  %404 = add nsw i64 %403, 1
  %405 = getelementptr inbounds double, ptr %402, i64 %404
  %406 = call i32 @dlarzb_(ptr noundef @.str.5, ptr noundef @.str.6, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %22, ptr noundef %23, ptr noundef %27, ptr noundef %24, ptr noundef %391, ptr noundef %392, ptr noundef %394, ptr noundef %35, ptr noundef %400, ptr noundef %401, ptr noundef %405, ptr noundef %35)
  br label %407

407:                                              ; preds = %353, %325
  br label %408

408:                                              ; preds = %407
  %409 = load i64, ptr %21, align 8, !tbaa !9
  %410 = load i64, ptr %25, align 8, !tbaa !9
  %411 = add nsw i64 %410, %409
  store i64 %411, ptr %25, align 8, !tbaa !9
  br label %296, !llvm.loop !15

412:                                              ; preds = %309
  %413 = load i64, ptr %25, align 8, !tbaa !9
  %414 = load i64, ptr %28, align 8, !tbaa !9
  %415 = add nsw i64 %413, %414
  %416 = sub nsw i64 %415, 1
  store i64 %416, ptr %31, align 8, !tbaa !9
  br label %420

417:                                              ; preds = %239, %234, %230
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = load i64, ptr %418, align 8, !tbaa !9
  store i64 %419, ptr %31, align 8, !tbaa !9
  br label %420

420:                                              ; preds = %417, %412
  %421 = load i64, ptr %31, align 8, !tbaa !9
  %422 = icmp sgt i64 %421, 0
  br i1 %422, label %423, label %439

423:                                              ; preds = %420
  %424 = load ptr, ptr %11, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = load ptr, ptr %10, align 8, !tbaa !5
  %427 = load i64, ptr %426, align 8, !tbaa !9
  %428 = sub nsw i64 %425, %427
  store i64 %428, ptr %21, align 8, !tbaa !9
  %429 = load ptr, ptr %11, align 8, !tbaa !5
  %430 = load ptr, ptr %12, align 8, !tbaa !5
  %431 = load i64, ptr %19, align 8, !tbaa !9
  %432 = getelementptr inbounds double, ptr %430, i64 %431
  %433 = load ptr, ptr %13, align 8, !tbaa !5
  %434 = load ptr, ptr %14, align 8, !tbaa !5
  %435 = getelementptr inbounds double, ptr %434, i64 1
  %436 = load ptr, ptr %15, align 8, !tbaa !5
  %437 = getelementptr inbounds double, ptr %436, i64 1
  %438 = call i32 @dlatrz_(ptr noundef %31, ptr noundef %429, ptr noundef %21, ptr noundef %432, ptr noundef %433, ptr noundef %435, ptr noundef %437)
  br label %439

439:                                              ; preds = %423, %420
  %440 = load i64, ptr %36, align 8, !tbaa !9
  %441 = sitofp i64 %440 to double
  %442 = load ptr, ptr %15, align 8, !tbaa !5
  %443 = getelementptr inbounds double, ptr %442, i64 1
  store double %441, ptr %443, align 8, !tbaa !11
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %444

444:                                              ; preds = %439, %172, %151, %145, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  %445 = load i32, ptr %9, align 4
  ret i32 %445
}

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

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

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

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

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

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

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

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

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

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


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

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

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

25:                                               ; preds = %8
  %26 = load i64, ptr %1, align 8, !tbaa !5
  %27 = icmp slt i64 %26, %23
  br i1 %27, label %.thread174.sink.split, label %28

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

31:                                               ; preds = %28
  %32 = icmp eq i64 %23, 0
  br i1 %32, label %40, label %33

33:                                               ; preds = %31
  %34 = icmp eq i64 %23, %26
  br i1 %34, label %40, label %35

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

40:                                               ; preds = %31, %33, %35
  %.pre200202 = phi i64 [ %37, %35 ], [ %23, %33 ], [ 0, %31 ]
  %41 = phi i64 [ %.pre, %35 ], [ %21, %33 ], [ %21, %31 ]
  %.0143 = phi i64 [ %36, %35 ], [ undef, %33 ], [ undef, %31 ]
  %.0140 = phi double [ %39, %35 ], [ 1.000000e+00, %33 ], [ 1.000000e+00, %31 ]
  store double %.0140, ptr %5, align 8, !tbaa !9
  %spec.select166 = tail call i64 @llvm.smax.i64(i64 %.pre200202, i64 1)
  %42 = icmp sge i64 %41, %spec.select166
  %or.cond = select i1 %42, i1 true, i1 %22
  br i1 %or.cond, label %.thread, label %.thread174.sink.split

.thread:                                          ; preds = %40
  %.pr170.pr = load i64, ptr %7, align 8, !tbaa !5
  %.not = icmp eq i64 %.pr170.pr, 0
  br i1 %.not, label %46, label %.thread174

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

.thread174:                                       ; preds = %.thread174.sink.split, %.thread
  %43 = phi i64 [ %.pr170.pr, %.thread ], [ %.sink, %.thread174.sink.split ]
  %44 = sub nsw i64 0, %43
  store i64 %44, ptr %9, align 8, !tbaa !5
  %45 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %9) #5
  br label %.loopexit

46:                                               ; preds = %.thread
  %47 = icmp eq i64 %.pre200202, 0
  %or.cond203 = or i1 %22, %47
  br i1 %or.cond203, label %.loopexit, label %48

48:                                               ; preds = %46
  %49 = load i64, ptr %1, align 8, !tbaa !5
  %50 = icmp eq i64 %.pre200202, %49
  br i1 %50, label %51, label %53

51:                                               ; preds = %48
  %.not165194 = icmp slt i64 %.pre200202, 1
  br i1 %.not165194, label %.loopexit, label %.lr.ph197.preheader

.lr.ph197.preheader:                              ; preds = %51
  %52 = shl nuw i64 %.pre200202, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %4, i8 0, i64 %52, i1 false), !tbaa !9
  br label %.loopexit

53:                                               ; preds = %48
  %54 = icmp sgt i64 %.0143, 1
  %55 = icmp slt i64 %.0143, %.pre200202
  %or.cond167 = and i1 %54, %55
  br i1 %or.cond167, label %56, label %69

56:                                               ; preds = %53
  %57 = tail call i64 @ilaenv_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #5
  %58 = tail call i64 @llvm.smax.i64(i64 %57, i64 0)
  %59 = load i64, ptr %0, align 8, !tbaa !5
  %60 = icmp slt i64 %58, %59
  br i1 %60, label %61, label %.thread179

61:                                               ; preds = %56
  store i64 %59, ptr %16, align 8, !tbaa !5
  %62 = mul nsw i64 %59, %.0143
  %63 = load i64, ptr %6, align 8, !tbaa !5
  %64 = icmp slt i64 %63, %62
  br i1 %64, label %65, label %.thread179

65:                                               ; preds = %61
  %66 = sdiv i64 %63, %59
  %67 = tail call i64 @ilaenv_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #5
  %68 = tail call i64 @llvm.smax.i64(i64 %67, i64 2)
  %.pre200.pre = load i64, ptr %0, align 8, !tbaa !5
  br label %69

69:                                               ; preds = %65, %53
  %.pre200 = phi i64 [ %.pre200.pre, %65 ], [ %.pre200202, %53 ]
  %.2 = phi i64 [ %66, %65 ], [ %.0143, %53 ]
  %.0142 = phi i64 [ %58, %65 ], [ 1, %53 ]
  %.0141 = phi i64 [ %68, %65 ], [ 2, %53 ]
  %.not161 = icmp slt i64 %.2, %.0141
  br i1 %.not161, label %121, label %.thread179

.thread179:                                       ; preds = %69, %56, %61
  %70 = phi i64 [ %59, %61 ], [ %59, %56 ], [ %.pre200, %69 ]
  %.0142185 = phi i64 [ %58, %61 ], [ %58, %56 ], [ %.0142, %69 ]
  %.2184 = phi i64 [ %.0143, %61 ], [ %.0143, %56 ], [ %.2, %69 ]
  %71 = icmp slt i64 %.2184, %70
  %72 = icmp slt i64 %.0142185, %70
  %or.cond168 = and i1 %71, %72
  br i1 %or.cond168, label %73, label %121

73:                                               ; preds = %.thread179
  %74 = load i64, ptr %1, align 8, !tbaa !5
  %75 = xor i64 %.0142185, -1
  %76 = add nsw i64 %70, %75
  %.fr = freeze i64 %76
  %77 = srem i64 %.fr, %.2184
  %78 = sub nsw i64 %.fr, %77
  %79 = add nsw i64 %78, %.2184
  store i64 %79, ptr %10, align 8, !tbaa !5
  %80 = tail call i64 @llvm.smin.i64(i64 %70, i64 %79)
  %81 = sub nsw i64 %70, %80
  %82 = add i64 %81, 1
  %83 = add i64 %82, %78
  %invariant.gep = getelementptr i8, ptr %19, i64 8
  %.not204 = icmp slt i64 %83, %82
  br i1 %.not204, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %73
  %84 = add nuw nsw i64 %70, 1
  %.not162.not = icmp slt i64 %70, %74
  %. = select i1 %.not162.not, i64 %84, i64 %74
  %85 = mul nsw i64 %., %17
  %86 = icmp sgt i64 %.2184, 0
  br label %87

87:                                               ; preds = %.lr.ph, %115
  %.1146192 = phi i64 [ %83, %.lr.ph ], [ %116, %115 ]
  %88 = load i64, ptr %0, align 8, !tbaa !5
  %89 = sub nsw i64 %88, %.1146192
  %90 = add nsw i64 %89, 1
  %91 = call i64 @llvm.smin.i64(i64 %90, i64 %.2184)
  store i64 %91, ptr %14, align 8, !tbaa !5
  %92 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub = sub i64 %92, %.1146192
  %93 = add i64 %reass.sub, 1
  store i64 %93, ptr %11, align 8, !tbaa !5
  %94 = sub nsw i64 %92, %88
  store i64 %94, ptr %12, align 8, !tbaa !5
  %95 = mul nsw i64 %.1146192, %17
  %96 = getelementptr double, ptr %19, i64 %.1146192
  %97 = getelementptr double, ptr %96, i64 %95
  %98 = getelementptr inbounds double, ptr %20, i64 %.1146192
  %99 = call i32 @dlatrz_(ptr noundef nonnull %14, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %97, ptr noundef nonnull %3, ptr noundef nonnull %98, ptr noundef nonnull %5) #5
  %100 = icmp sgt i64 %.1146192, 1
  br i1 %100, label %101, label %115

101:                                              ; preds = %87
  %102 = load i64, ptr %1, align 8, !tbaa !5
  %103 = load i64, ptr %0, align 8, !tbaa !5
  %104 = sub nsw i64 %102, %103
  store i64 %104, ptr %11, align 8, !tbaa !5
  %105 = getelementptr double, ptr %96, i64 %85
  %106 = call i32 @dlarzt_(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef %105, ptr noundef nonnull %3, ptr noundef nonnull %98, ptr noundef nonnull %5, ptr noundef nonnull %16) #5
  %107 = add nsw i64 %.1146192, -1
  store i64 %107, ptr %11, align 8, !tbaa !5
  %108 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub198 = sub i64 %108, %.1146192
  %109 = add i64 %reass.sub198, 1
  store i64 %109, ptr %12, align 8, !tbaa !5
  %110 = load i64, ptr %0, align 8, !tbaa !5
  %111 = sub nsw i64 %108, %110
  store i64 %111, ptr %13, align 8, !tbaa !5
  %gep = getelementptr double, ptr %invariant.gep, i64 %95
  %112 = load i64, ptr %14, align 8, !tbaa !5
  %113 = getelementptr double, ptr %5, i64 %112
  %114 = call i32 @dlarzb_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef nonnull %13, ptr noundef %105, ptr noundef nonnull %3, ptr noundef nonnull %5, ptr noundef nonnull %16, ptr noundef %gep, ptr noundef nonnull %3, ptr noundef %113, ptr noundef nonnull %16) #5
  br label %115

115:                                              ; preds = %87, %101
  %116 = sub i64 %.1146192, %.2184
  %117 = icmp sge i64 %116, %82
  %118 = icmp sle i64 %116, %82
  %.in = select i1 %86, i1 %117, i1 %118
  br i1 %.in, label %87, label %._crit_edge, !llvm.loop !11

._crit_edge:                                      ; preds = %115, %73
  %.1146.lcssa = phi i64 [ %83, %73 ], [ %116, %115 ]
  %119 = add i64 %.2184, -1
  %120 = add i64 %119, %.1146.lcssa
  br label %121

121:                                              ; preds = %69, %.thread179, %._crit_edge
  %storemerge = phi i64 [ %120, %._crit_edge ], [ %70, %.thread179 ], [ %.pre200, %69 ]
  store i64 %storemerge, ptr %15, align 8, !tbaa !5
  %122 = icmp sgt i64 %storemerge, 0
  br i1 %122, label %123, label %128

123:                                              ; preds = %121
  %124 = load i64, ptr %1, align 8, !tbaa !5
  %125 = load i64, ptr %0, align 8, !tbaa !5
  %126 = sub nsw i64 %124, %125
  store i64 %126, ptr %10, align 8, !tbaa !5
  %127 = call i32 @dlatrz_(ptr noundef nonnull %15, ptr noundef nonnull %1, ptr noundef nonnull %10, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5) #5
  br label %128

128:                                              ; preds = %123, %121
  store double %.0140, ptr %5, align 8, !tbaa !9
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph197.preheader, %51, %46, %128, %.thread174
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  ret i32 0
}

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

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

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

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

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

declare i32 @dlarzb_(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, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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


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