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

; 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"

%struct.doublecomplex = type { double, double }

@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
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8

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

70:                                               ; preds = %10
  %71 = load ptr, ptr %21, align 8, !tbaa !5
  store i64 -1, ptr %71, align 8, !tbaa !9
  br label %95

72:                                               ; preds = %10
  %73 = load ptr, ptr %13, align 8, !tbaa !5
  %74 = load i64, ptr %73, align 8, !tbaa !9
  %75 = icmp slt i64 %74, 0
  br i1 %75, label %76, label %78

76:                                               ; preds = %72
  %77 = load ptr, ptr %21, align 8, !tbaa !5
  store i64 -2, ptr %77, align 8, !tbaa !9
  br label %94

78:                                               ; preds = %72
  %79 = load ptr, ptr %15, align 8, !tbaa !5
  %80 = load i64, ptr %79, align 8, !tbaa !9
  %81 = load ptr, ptr %12, align 8, !tbaa !5
  %82 = load i64, ptr %81, align 8, !tbaa !9
  %83 = icmp sge i64 1, %82
  br i1 %83, label %84, label %85

84:                                               ; preds = %78
  br label %88

85:                                               ; preds = %78
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = load i64, ptr %86, align 8, !tbaa !9
  br label %88

88:                                               ; preds = %85, %84
  %89 = phi i64 [ 1, %84 ], [ %87, %85 ]
  %90 = icmp slt i64 %80, %89
  br i1 %90, label %91, label %93

91:                                               ; preds = %88
  %92 = load ptr, ptr %21, align 8, !tbaa !5
  store i64 -4, ptr %92, align 8, !tbaa !9
  br label %93

93:                                               ; preds = %91, %88
  br label %94

94:                                               ; preds = %93, %76
  br label %95

95:                                               ; preds = %94, %70
  %96 = load ptr, ptr %21, align 8, !tbaa !5
  %97 = load i64, ptr %96, align 8, !tbaa !9
  %98 = icmp eq i64 %97, 0
  br i1 %98, label %99, label %147

99:                                               ; preds = %95
  %100 = load ptr, ptr %12, align 8, !tbaa !5
  %101 = load i64, ptr %100, align 8, !tbaa !9
  %102 = load ptr, ptr %13, align 8, !tbaa !5
  %103 = load i64, ptr %102, align 8, !tbaa !9
  %104 = icmp sle i64 %101, %103
  br i1 %104, label %105, label %108

105:                                              ; preds = %99
  %106 = load ptr, ptr %12, align 8, !tbaa !5
  %107 = load i64, ptr %106, align 8, !tbaa !9
  br label %111

108:                                              ; preds = %99
  %109 = load ptr, ptr %13, align 8, !tbaa !5
  %110 = load i64, ptr %109, align 8, !tbaa !9
  br label %111

111:                                              ; preds = %108, %105
  %112 = phi i64 [ %107, %105 ], [ %110, %108 ]
  store i64 %112, ptr %38, align 8, !tbaa !9
  %113 = load i64, ptr %38, align 8, !tbaa !9
  %114 = icmp eq i64 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %111
  store i64 1, ptr %35, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %128

116:                                              ; preds = %111
  %117 = load ptr, ptr %13, align 8, !tbaa !5
  %118 = load i64, ptr %117, align 8, !tbaa !9
  %119 = add nsw i64 %118, 1
  store i64 %119, ptr %35, align 8, !tbaa !9
  %120 = load ptr, ptr %12, align 8, !tbaa !5
  %121 = load ptr, ptr %13, align 8, !tbaa !5
  %122 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %120, ptr noundef %121, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %122, ptr %30, align 8, !tbaa !9
  %123 = load ptr, ptr %13, align 8, !tbaa !5
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = add nsw i64 %124, 1
  %126 = load i64, ptr %30, align 8, !tbaa !9
  %127 = mul nsw i64 %125, %126
  store i64 %127, ptr %42, align 8, !tbaa !9
  br label %128

128:                                              ; preds = %116, %115
  %129 = load i64, ptr %42, align 8, !tbaa !9
  %130 = sitofp i64 %129 to double
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.doublecomplex, ptr %131, i64 1
  %133 = getelementptr inbounds %struct.doublecomplex, ptr %132, i32 0, i32 0
  store double %130, ptr %133, align 8, !tbaa !11
  %134 = load ptr, ptr %18, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.doublecomplex, ptr %134, i64 1
  %136 = getelementptr inbounds %struct.doublecomplex, ptr %135, i32 0, i32 1
  store double 0.000000e+00, ptr %136, align 8, !tbaa !14
  %137 = load ptr, ptr %19, align 8, !tbaa !5
  %138 = load i64, ptr %137, align 8, !tbaa !9
  %139 = load i64, ptr %35, align 8, !tbaa !9
  %140 = icmp slt i64 %138, %139
  br i1 %140, label %141, label %146

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

144:                                              ; preds = %141
  %145 = load ptr, ptr %21, align 8, !tbaa !5
  store i64 -8, ptr %145, align 8, !tbaa !9
  br label %146

146:                                              ; preds = %144, %141, %128
  br label %147

147:                                              ; preds = %146, %95
  %148 = load ptr, ptr %21, align 8, !tbaa !5
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %156

151:                                              ; preds = %147
  %152 = load ptr, ptr %21, align 8, !tbaa !5
  %153 = load i64, ptr %152, align 8, !tbaa !9
  %154 = sub nsw i64 0, %153
  store i64 %154, ptr %24, align 8, !tbaa !9
  %155 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %24)
  store i32 0, ptr %11, align 4
  store i32 1, ptr %44, align 4
  br label %556

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

159:                                              ; preds = %156
  store i32 0, ptr %11, align 4
  store i32 1, ptr %44, align 4
  br label %556

160:                                              ; preds = %156
  br label %161

161:                                              ; preds = %160
  %162 = load i64, ptr %38, align 8, !tbaa !9
  %163 = icmp eq i64 %162, 0
  br i1 %163, label %164, label %165

164:                                              ; preds = %161
  store i32 0, ptr %11, align 4
  store i32 1, ptr %44, align 4
  br label %556

165:                                              ; preds = %161
  store i64 1, ptr %36, align 8, !tbaa !9
  %166 = load ptr, ptr %13, align 8, !tbaa !5
  %167 = load i64, ptr %166, align 8, !tbaa !9
  store i64 %167, ptr %24, align 8, !tbaa !9
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %168

168:                                              ; preds = %222, %165
  %169 = load i64, ptr %27, align 8, !tbaa !9
  %170 = load i64, ptr %24, align 8, !tbaa !9
  %171 = icmp sle i64 %169, %170
  br i1 %171, label %172, label %225

172:                                              ; preds = %168
  %173 = load ptr, ptr %16, align 8, !tbaa !5
  %174 = load i64, ptr %27, align 8, !tbaa !9
  %175 = getelementptr inbounds i64, ptr %173, i64 %174
  %176 = load i64, ptr %175, align 8, !tbaa !9
  %177 = icmp ne i64 %176, 0
  br i1 %177, label %178, label %216

178:                                              ; preds = %172
  %179 = load i64, ptr %27, align 8, !tbaa !9
  %180 = load i64, ptr %36, align 8, !tbaa !9
  %181 = icmp ne i64 %179, %180
  br i1 %181, label %182, label %208

182:                                              ; preds = %178
  %183 = load ptr, ptr %12, align 8, !tbaa !5
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  %185 = load i64, ptr %27, align 8, !tbaa !9
  %186 = load i64, ptr %22, align 8, !tbaa !9
  %187 = mul nsw i64 %185, %186
  %188 = add nsw i64 %187, 1
  %189 = getelementptr inbounds %struct.doublecomplex, ptr %184, i64 %188
  %190 = load ptr, ptr %14, align 8, !tbaa !5
  %191 = load i64, ptr %36, align 8, !tbaa !9
  %192 = load i64, ptr %22, align 8, !tbaa !9
  %193 = mul nsw i64 %191, %192
  %194 = add nsw i64 %193, 1
  %195 = getelementptr inbounds %struct.doublecomplex, ptr %190, i64 %194
  %196 = call i32 @f2c_zswap(ptr noundef %183, ptr noundef %189, ptr noundef @c__1, ptr noundef %195, ptr noundef @c__1)
  %197 = load ptr, ptr %16, align 8, !tbaa !5
  %198 = load i64, ptr %36, align 8, !tbaa !9
  %199 = getelementptr inbounds i64, ptr %197, i64 %198
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = load ptr, ptr %16, align 8, !tbaa !5
  %202 = load i64, ptr %27, align 8, !tbaa !9
  %203 = getelementptr inbounds i64, ptr %201, i64 %202
  store i64 %200, ptr %203, align 8, !tbaa !9
  %204 = load i64, ptr %27, align 8, !tbaa !9
  %205 = load ptr, ptr %16, align 8, !tbaa !5
  %206 = load i64, ptr %36, align 8, !tbaa !9
  %207 = getelementptr inbounds i64, ptr %205, i64 %206
  store i64 %204, ptr %207, align 8, !tbaa !9
  br label %213

208:                                              ; preds = %178
  %209 = load i64, ptr %27, align 8, !tbaa !9
  %210 = load ptr, ptr %16, align 8, !tbaa !5
  %211 = load i64, ptr %27, align 8, !tbaa !9
  %212 = getelementptr inbounds i64, ptr %210, i64 %211
  store i64 %209, ptr %212, align 8, !tbaa !9
  br label %213

213:                                              ; preds = %208, %182
  %214 = load i64, ptr %36, align 8, !tbaa !9
  %215 = add nsw i64 %214, 1
  store i64 %215, ptr %36, align 8, !tbaa !9
  br label %221

216:                                              ; preds = %172
  %217 = load i64, ptr %27, align 8, !tbaa !9
  %218 = load ptr, ptr %16, align 8, !tbaa !5
  %219 = load i64, ptr %27, align 8, !tbaa !9
  %220 = getelementptr inbounds i64, ptr %218, i64 %219
  store i64 %217, ptr %220, align 8, !tbaa !9
  br label %221

221:                                              ; preds = %216, %213
  br label %222

222:                                              ; preds = %221
  %223 = load i64, ptr %27, align 8, !tbaa !9
  %224 = add nsw i64 %223, 1
  store i64 %224, ptr %27, align 8, !tbaa !9
  br label %168, !llvm.loop !15

225:                                              ; preds = %168
  %226 = load i64, ptr %36, align 8, !tbaa !9
  %227 = add nsw i64 %226, -1
  store i64 %227, ptr %36, align 8, !tbaa !9
  %228 = load i64, ptr %36, align 8, !tbaa !9
  %229 = icmp sgt i64 %228, 0
  br i1 %229, label %230, label %314

230:                                              ; preds = %225
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = load i64, ptr %231, align 8, !tbaa !9
  %233 = load i64, ptr %36, align 8, !tbaa !9
  %234 = icmp sle i64 %232, %233
  br i1 %234, label %235, label %238

235:                                              ; preds = %230
  %236 = load ptr, ptr %12, align 8, !tbaa !5
  %237 = load i64, ptr %236, align 8, !tbaa !9
  br label %240

238:                                              ; preds = %230
  %239 = load i64, ptr %36, align 8, !tbaa !9
  br label %240

240:                                              ; preds = %238, %235
  %241 = phi i64 [ %237, %235 ], [ %239, %238 ]
  store i64 %241, ptr %29, align 8, !tbaa !9
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = load ptr, ptr %14, align 8, !tbaa !5
  %244 = load i64, ptr %23, align 8, !tbaa !9
  %245 = getelementptr inbounds %struct.doublecomplex, ptr %243, i64 %244
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  %247 = load ptr, ptr %17, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %247, i64 1
  %249 = load ptr, ptr %18, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.doublecomplex, ptr %249, i64 1
  %251 = load ptr, ptr %19, align 8, !tbaa !5
  %252 = load ptr, ptr %21, align 8, !tbaa !5
  %253 = call i32 @zgeqrf_(ptr noundef %242, ptr noundef %29, ptr noundef %245, ptr noundef %246, ptr noundef %248, ptr noundef %250, ptr noundef %251, ptr noundef %252)
  %254 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %254, ptr %24, align 8, !tbaa !9
  %255 = load ptr, ptr %18, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.doublecomplex, ptr %255, i64 1
  %257 = getelementptr inbounds %struct.doublecomplex, ptr %256, i32 0, i32 0
  %258 = load double, ptr %257, align 8, !tbaa !11
  %259 = fptosi double %258 to i64
  store i64 %259, ptr %25, align 8, !tbaa !9
  %260 = load i64, ptr %24, align 8, !tbaa !9
  %261 = load i64, ptr %25, align 8, !tbaa !9
  %262 = icmp sge i64 %260, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %240
  %264 = load i64, ptr %24, align 8, !tbaa !9
  br label %267

265:                                              ; preds = %240
  %266 = load i64, ptr %25, align 8, !tbaa !9
  br label %267

267:                                              ; preds = %265, %263
  %268 = phi i64 [ %264, %263 ], [ %266, %265 ]
  store i64 %268, ptr %35, align 8, !tbaa !9
  %269 = load i64, ptr %29, align 8, !tbaa !9
  %270 = load ptr, ptr %13, align 8, !tbaa !5
  %271 = load i64, ptr %270, align 8, !tbaa !9
  %272 = icmp slt i64 %269, %271
  br i1 %272, label %273, label %313

273:                                              ; preds = %267
  %274 = load ptr, ptr %13, align 8, !tbaa !5
  %275 = load i64, ptr %274, align 8, !tbaa !9
  %276 = load i64, ptr %29, align 8, !tbaa !9
  %277 = sub nsw i64 %275, %276
  store i64 %277, ptr %24, align 8, !tbaa !9
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  %279 = load ptr, ptr %14, align 8, !tbaa !5
  %280 = load i64, ptr %23, align 8, !tbaa !9
  %281 = getelementptr inbounds %struct.doublecomplex, ptr %279, i64 %280
  %282 = load ptr, ptr %15, align 8, !tbaa !5
  %283 = load ptr, ptr %17, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.doublecomplex, ptr %283, i64 1
  %285 = load ptr, ptr %14, align 8, !tbaa !5
  %286 = load i64, ptr %29, align 8, !tbaa !9
  %287 = add nsw i64 %286, 1
  %288 = load i64, ptr %22, align 8, !tbaa !9
  %289 = mul nsw i64 %287, %288
  %290 = add nsw i64 %289, 1
  %291 = getelementptr inbounds %struct.doublecomplex, ptr %285, i64 %290
  %292 = load ptr, ptr %15, align 8, !tbaa !5
  %293 = load ptr, ptr %18, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.doublecomplex, ptr %293, i64 1
  %295 = load ptr, ptr %19, align 8, !tbaa !5
  %296 = load ptr, ptr %21, align 8, !tbaa !5
  %297 = call i32 @zunmqr_(ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %278, ptr noundef %24, ptr noundef %29, ptr noundef %281, ptr noundef %282, ptr noundef %284, ptr noundef %291, ptr noundef %292, ptr noundef %294, ptr noundef %295, ptr noundef %296)
  %298 = load i64, ptr %35, align 8, !tbaa !9
  store i64 %298, ptr %24, align 8, !tbaa !9
  %299 = load ptr, ptr %18, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.doublecomplex, ptr %299, i64 1
  %301 = getelementptr inbounds %struct.doublecomplex, ptr %300, i32 0, i32 0
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = fptosi double %302 to i64
  store i64 %303, ptr %25, align 8, !tbaa !9
  %304 = load i64, ptr %24, align 8, !tbaa !9
  %305 = load i64, ptr %25, align 8, !tbaa !9
  %306 = icmp sge i64 %304, %305
  br i1 %306, label %307, label %309

307:                                              ; preds = %273
  %308 = load i64, ptr %24, align 8, !tbaa !9
  br label %311

309:                                              ; preds = %273
  %310 = load i64, ptr %25, align 8, !tbaa !9
  br label %311

311:                                              ; preds = %309, %307
  %312 = phi i64 [ %308, %307 ], [ %310, %309 ]
  store i64 %312, ptr %35, align 8, !tbaa !9
  br label %313

313:                                              ; preds = %311, %267
  br label %314

314:                                              ; preds = %313, %225
  %315 = load i64, ptr %36, align 8, !tbaa !9
  %316 = load i64, ptr %38, align 8, !tbaa !9
  %317 = icmp slt i64 %315, %316
  br i1 %317, label %318, label %547

318:                                              ; preds = %314
  %319 = load ptr, ptr %12, align 8, !tbaa !5
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = load i64, ptr %36, align 8, !tbaa !9
  %322 = sub nsw i64 %320, %321
  store i64 %322, ptr %31, align 8, !tbaa !9
  %323 = load ptr, ptr %13, align 8, !tbaa !5
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = load i64, ptr %36, align 8, !tbaa !9
  %326 = sub nsw i64 %324, %325
  store i64 %326, ptr %32, align 8, !tbaa !9
  %327 = load i64, ptr %38, align 8, !tbaa !9
  %328 = load i64, ptr %36, align 8, !tbaa !9
  %329 = sub nsw i64 %327, %328
  store i64 %329, ptr %41, align 8, !tbaa !9
  %330 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %31, ptr noundef %32, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %330, ptr %30, align 8, !tbaa !9
  store i64 2, ptr %37, align 8, !tbaa !9
  store i64 0, ptr %33, align 8, !tbaa !9
  %331 = load i64, ptr %30, align 8, !tbaa !9
  %332 = icmp sgt i64 %331, 1
  br i1 %332, label %333, label %387

333:                                              ; preds = %318
  %334 = load i64, ptr %30, align 8, !tbaa !9
  %335 = load i64, ptr %41, align 8, !tbaa !9
  %336 = icmp slt i64 %334, %335
  br i1 %336, label %337, label %387

337:                                              ; preds = %333
  store i64 0, ptr %24, align 8, !tbaa !9
  %338 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %31, ptr noundef %32, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %338, ptr %25, align 8, !tbaa !9
  %339 = load i64, ptr %24, align 8, !tbaa !9
  %340 = load i64, ptr %25, align 8, !tbaa !9
  %341 = icmp sge i64 %339, %340
  br i1 %341, label %342, label %344

342:                                              ; preds = %337
  %343 = load i64, ptr %24, align 8, !tbaa !9
  br label %346

344:                                              ; preds = %337
  %345 = load i64, ptr %25, align 8, !tbaa !9
  br label %346

346:                                              ; preds = %344, %342
  %347 = phi i64 [ %343, %342 ], [ %345, %344 ]
  store i64 %347, ptr %33, align 8, !tbaa !9
  %348 = load i64, ptr %33, align 8, !tbaa !9
  %349 = load i64, ptr %41, align 8, !tbaa !9
  %350 = icmp slt i64 %348, %349
  br i1 %350, label %351, label %386

351:                                              ; preds = %346
  %352 = load i64, ptr %32, align 8, !tbaa !9
  %353 = add nsw i64 %352, 1
  %354 = load i64, ptr %30, align 8, !tbaa !9
  %355 = mul nsw i64 %353, %354
  store i64 %355, ptr %39, align 8, !tbaa !9
  %356 = load i64, ptr %35, align 8, !tbaa !9
  %357 = load i64, ptr %39, align 8, !tbaa !9
  %358 = icmp sge i64 %356, %357
  br i1 %358, label %359, label %361

359:                                              ; preds = %351
  %360 = load i64, ptr %35, align 8, !tbaa !9
  br label %363

361:                                              ; preds = %351
  %362 = load i64, ptr %39, align 8, !tbaa !9
  br label %363

363:                                              ; preds = %361, %359
  %364 = phi i64 [ %360, %359 ], [ %362, %361 ]
  store i64 %364, ptr %35, align 8, !tbaa !9
  %365 = load ptr, ptr %19, align 8, !tbaa !5
  %366 = load i64, ptr %365, align 8, !tbaa !9
  %367 = load i64, ptr %39, align 8, !tbaa !9
  %368 = icmp slt i64 %366, %367
  br i1 %368, label %369, label %385

369:                                              ; preds = %363
  %370 = load ptr, ptr %19, align 8, !tbaa !5
  %371 = load i64, ptr %370, align 8, !tbaa !9
  %372 = load i64, ptr %32, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  %374 = sdiv i64 %371, %373
  store i64 %374, ptr %30, align 8, !tbaa !9
  store i64 2, ptr %24, align 8, !tbaa !9
  %375 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %31, ptr noundef %32, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %375, ptr %25, align 8, !tbaa !9
  %376 = load i64, ptr %24, align 8, !tbaa !9
  %377 = load i64, ptr %25, align 8, !tbaa !9
  %378 = icmp sge i64 %376, %377
  br i1 %378, label %379, label %381

379:                                              ; preds = %369
  %380 = load i64, ptr %24, align 8, !tbaa !9
  br label %383

381:                                              ; preds = %369
  %382 = load i64, ptr %25, align 8, !tbaa !9
  br label %383

383:                                              ; preds = %381, %379
  %384 = phi i64 [ %380, %379 ], [ %382, %381 ]
  store i64 %384, ptr %37, align 8, !tbaa !9
  br label %385

385:                                              ; preds = %383, %363
  br label %386

386:                                              ; preds = %385, %346
  br label %387

387:                                              ; preds = %386, %333, %318
  %388 = load ptr, ptr %13, align 8, !tbaa !5
  %389 = load i64, ptr %388, align 8, !tbaa !9
  store i64 %389, ptr %24, align 8, !tbaa !9
  %390 = load i64, ptr %36, align 8, !tbaa !9
  %391 = add nsw i64 %390, 1
  store i64 %391, ptr %27, align 8, !tbaa !9
  br label %392

392:                                              ; preds = %419, %387
  %393 = load i64, ptr %27, align 8, !tbaa !9
  %394 = load i64, ptr %24, align 8, !tbaa !9
  %395 = icmp sle i64 %393, %394
  br i1 %395, label %396, label %422

396:                                              ; preds = %392
  %397 = load ptr, ptr %14, align 8, !tbaa !5
  %398 = load i64, ptr %36, align 8, !tbaa !9
  %399 = add nsw i64 %398, 1
  %400 = load i64, ptr %27, align 8, !tbaa !9
  %401 = load i64, ptr %22, align 8, !tbaa !9
  %402 = mul nsw i64 %400, %401
  %403 = add nsw i64 %399, %402
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %397, i64 %403
  %405 = call double @f2c_dznrm2(ptr noundef %31, ptr noundef %404, ptr noundef @c__1)
  %406 = load ptr, ptr %20, align 8, !tbaa !5
  %407 = load i64, ptr %27, align 8, !tbaa !9
  %408 = getelementptr inbounds double, ptr %406, i64 %407
  store double %405, ptr %408, align 8, !tbaa !17
  %409 = load ptr, ptr %20, align 8, !tbaa !5
  %410 = load i64, ptr %27, align 8, !tbaa !9
  %411 = getelementptr inbounds double, ptr %409, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !17
  %413 = load ptr, ptr %20, align 8, !tbaa !5
  %414 = load ptr, ptr %13, align 8, !tbaa !5
  %415 = load i64, ptr %414, align 8, !tbaa !9
  %416 = load i64, ptr %27, align 8, !tbaa !9
  %417 = add nsw i64 %415, %416
  %418 = getelementptr inbounds double, ptr %413, i64 %417
  store double %412, ptr %418, align 8, !tbaa !17
  br label %419

419:                                              ; preds = %396
  %420 = load i64, ptr %27, align 8, !tbaa !9
  %421 = add nsw i64 %420, 1
  store i64 %421, ptr %27, align 8, !tbaa !9
  br label %392, !llvm.loop !18

422:                                              ; preds = %392
  %423 = load i64, ptr %30, align 8, !tbaa !9
  %424 = load i64, ptr %37, align 8, !tbaa !9
  %425 = icmp sge i64 %423, %424
  br i1 %425, label %426, label %505

426:                                              ; preds = %422
  %427 = load i64, ptr %30, align 8, !tbaa !9
  %428 = load i64, ptr %41, align 8, !tbaa !9
  %429 = icmp slt i64 %427, %428
  br i1 %429, label %430, label %505

430:                                              ; preds = %426
  %431 = load i64, ptr %33, align 8, !tbaa !9
  %432 = load i64, ptr %41, align 8, !tbaa !9
  %433 = icmp slt i64 %431, %432
  br i1 %433, label %434, label %505

434:                                              ; preds = %430
  %435 = load i64, ptr %36, align 8, !tbaa !9
  %436 = add nsw i64 %435, 1
  store i64 %436, ptr %27, align 8, !tbaa !9
  %437 = load i64, ptr %38, align 8, !tbaa !9
  %438 = load i64, ptr %33, align 8, !tbaa !9
  %439 = sub nsw i64 %437, %438
  store i64 %439, ptr %40, align 8, !tbaa !9
  br label %440

440:                                              ; preds = %457, %434
  %441 = load i64, ptr %27, align 8, !tbaa !9
  %442 = load i64, ptr %40, align 8, !tbaa !9
  %443 = icmp sle i64 %441, %442
  br i1 %443, label %444, label %504

444:                                              ; preds = %440
  %445 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %445, ptr %24, align 8, !tbaa !9
  %446 = load i64, ptr %40, align 8, !tbaa !9
  %447 = load i64, ptr %27, align 8, !tbaa !9
  %448 = sub nsw i64 %446, %447
  %449 = add nsw i64 %448, 1
  store i64 %449, ptr %25, align 8, !tbaa !9
  %450 = load i64, ptr %24, align 8, !tbaa !9
  %451 = load i64, ptr %25, align 8, !tbaa !9
  %452 = icmp sle i64 %450, %451
  br i1 %452, label %453, label %455

453:                                              ; preds = %444
  %454 = load i64, ptr %24, align 8, !tbaa !9
  br label %457

455:                                              ; preds = %444
  %456 = load i64, ptr %25, align 8, !tbaa !9
  br label %457

457:                                              ; preds = %455, %453
  %458 = phi i64 [ %454, %453 ], [ %456, %455 ]
  store i64 %458, ptr %28, align 8, !tbaa !9
  %459 = load ptr, ptr %13, align 8, !tbaa !5
  %460 = load i64, ptr %459, align 8, !tbaa !9
  %461 = load i64, ptr %27, align 8, !tbaa !9
  %462 = sub nsw i64 %460, %461
  %463 = add nsw i64 %462, 1
  store i64 %463, ptr %24, align 8, !tbaa !9
  %464 = load i64, ptr %27, align 8, !tbaa !9
  %465 = sub nsw i64 %464, 1
  store i64 %465, ptr %25, align 8, !tbaa !9
  %466 = load ptr, ptr %13, align 8, !tbaa !5
  %467 = load i64, ptr %466, align 8, !tbaa !9
  %468 = load i64, ptr %27, align 8, !tbaa !9
  %469 = sub nsw i64 %467, %468
  %470 = add nsw i64 %469, 1
  store i64 %470, ptr %26, align 8, !tbaa !9
  %471 = load ptr, ptr %12, align 8, !tbaa !5
  %472 = load ptr, ptr %14, align 8, !tbaa !5
  %473 = load i64, ptr %27, align 8, !tbaa !9
  %474 = load i64, ptr %22, align 8, !tbaa !9
  %475 = mul nsw i64 %473, %474
  %476 = add nsw i64 %475, 1
  %477 = getelementptr inbounds %struct.doublecomplex, ptr %472, i64 %476
  %478 = load ptr, ptr %15, align 8, !tbaa !5
  %479 = load ptr, ptr %16, align 8, !tbaa !5
  %480 = load i64, ptr %27, align 8, !tbaa !9
  %481 = getelementptr inbounds i64, ptr %479, i64 %480
  %482 = load ptr, ptr %17, align 8, !tbaa !5
  %483 = load i64, ptr %27, align 8, !tbaa !9
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %482, i64 %483
  %485 = load ptr, ptr %20, align 8, !tbaa !5
  %486 = load i64, ptr %27, align 8, !tbaa !9
  %487 = getelementptr inbounds double, ptr %485, i64 %486
  %488 = load ptr, ptr %20, align 8, !tbaa !5
  %489 = load ptr, ptr %13, align 8, !tbaa !5
  %490 = load i64, ptr %489, align 8, !tbaa !9
  %491 = load i64, ptr %27, align 8, !tbaa !9
  %492 = add nsw i64 %490, %491
  %493 = getelementptr inbounds double, ptr %488, i64 %492
  %494 = load ptr, ptr %18, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.doublecomplex, ptr %494, i64 1
  %496 = load ptr, ptr %18, align 8, !tbaa !5
  %497 = load i64, ptr %28, align 8, !tbaa !9
  %498 = add nsw i64 %497, 1
  %499 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 %498
  %500 = call i32 @zlaqps_(ptr noundef %471, ptr noundef %24, ptr noundef %25, ptr noundef %28, ptr noundef %34, ptr noundef %477, ptr noundef %478, ptr noundef %481, ptr noundef %484, ptr noundef %487, ptr noundef %493, ptr noundef %495, ptr noundef %499, ptr noundef %26)
  %501 = load i64, ptr %34, align 8, !tbaa !9
  %502 = load i64, ptr %27, align 8, !tbaa !9
  %503 = add nsw i64 %502, %501
  store i64 %503, ptr %27, align 8, !tbaa !9
  br label %440

504:                                              ; preds = %440
  br label %508

505:                                              ; preds = %430, %426, %422
  %506 = load i64, ptr %36, align 8, !tbaa !9
  %507 = add nsw i64 %506, 1
  store i64 %507, ptr %27, align 8, !tbaa !9
  br label %508

508:                                              ; preds = %505, %504
  %509 = load i64, ptr %27, align 8, !tbaa !9
  %510 = load i64, ptr %38, align 8, !tbaa !9
  %511 = icmp sle i64 %509, %510
  br i1 %511, label %512, label %546

512:                                              ; preds = %508
  %513 = load ptr, ptr %13, align 8, !tbaa !5
  %514 = load i64, ptr %513, align 8, !tbaa !9
  %515 = load i64, ptr %27, align 8, !tbaa !9
  %516 = sub nsw i64 %514, %515
  %517 = add nsw i64 %516, 1
  store i64 %517, ptr %24, align 8, !tbaa !9
  %518 = load i64, ptr %27, align 8, !tbaa !9
  %519 = sub nsw i64 %518, 1
  store i64 %519, ptr %25, align 8, !tbaa !9
  %520 = load ptr, ptr %12, align 8, !tbaa !5
  %521 = load ptr, ptr %14, align 8, !tbaa !5
  %522 = load i64, ptr %27, align 8, !tbaa !9
  %523 = load i64, ptr %22, align 8, !tbaa !9
  %524 = mul nsw i64 %522, %523
  %525 = add nsw i64 %524, 1
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %521, i64 %525
  %527 = load ptr, ptr %15, align 8, !tbaa !5
  %528 = load ptr, ptr %16, align 8, !tbaa !5
  %529 = load i64, ptr %27, align 8, !tbaa !9
  %530 = getelementptr inbounds i64, ptr %528, i64 %529
  %531 = load ptr, ptr %17, align 8, !tbaa !5
  %532 = load i64, ptr %27, align 8, !tbaa !9
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %531, i64 %532
  %534 = load ptr, ptr %20, align 8, !tbaa !5
  %535 = load i64, ptr %27, align 8, !tbaa !9
  %536 = getelementptr inbounds double, ptr %534, i64 %535
  %537 = load ptr, ptr %20, align 8, !tbaa !5
  %538 = load ptr, ptr %13, align 8, !tbaa !5
  %539 = load i64, ptr %538, align 8, !tbaa !9
  %540 = load i64, ptr %27, align 8, !tbaa !9
  %541 = add nsw i64 %539, %540
  %542 = getelementptr inbounds double, ptr %537, i64 %541
  %543 = load ptr, ptr %18, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.doublecomplex, ptr %543, i64 1
  %545 = call i32 @zlaqp2_(ptr noundef %520, ptr noundef %24, ptr noundef %25, ptr noundef %526, ptr noundef %527, ptr noundef %530, ptr noundef %533, ptr noundef %536, ptr noundef %542, ptr noundef %544)
  br label %546

546:                                              ; preds = %512, %508
  br label %547

547:                                              ; preds = %546, %314
  %548 = load i64, ptr %35, align 8, !tbaa !9
  %549 = sitofp i64 %548 to double
  %550 = load ptr, ptr %18, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %550, i64 1
  %552 = getelementptr inbounds %struct.doublecomplex, ptr %551, i32 0, i32 0
  store double %549, ptr %552, align 8, !tbaa !11
  %553 = load ptr, ptr %18, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.doublecomplex, ptr %553, i64 1
  %555 = getelementptr inbounds %struct.doublecomplex, ptr %554, i32 0, i32 1
  store double 0.000000e+00, ptr %555, align 8, !tbaa !14
  store i32 0, ptr %11, align 4
  store i32 1, ptr %44, align 4
  br label %556

556:                                              ; preds = %547, %164, %159, %151
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 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
  %557 = load i32, ptr %11, align 4
  ret i32 %557
}

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

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

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

declare double @f2c_dznrm2(ptr noundef, ptr noundef, ptr noundef) #2

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

declare i32 @zlaqp2_(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, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!13, !13, i64 0}
!18 = distinct !{!18, !16}


; 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"

%struct.doublecomplex = type { double, double }

@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
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8

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

29:                                               ; preds = %10
  %30 = load i64, ptr %1, align 8, !tbaa !5
  %31 = icmp slt i64 %30, 0
  br i1 %31, label %.thread250.sink.split, label %32

32:                                               ; preds = %29
  %33 = load i64, ptr %3, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %27, i64 1)
  %34 = icmp slt i64 %33, %spec.select
  br i1 %34, label %.thread250.sink.split, label %35

35:                                               ; preds = %32
  %36 = tail call i64 @llvm.umin.i64(i64 %27, i64 %30)
  %37 = icmp eq i64 %36, 0
  br i1 %37, label %45, label %38

38:                                               ; preds = %35
  %39 = add nuw nsw i64 %30, 1
  %40 = 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) #4
  %41 = load i64, ptr %1, align 8, !tbaa !5
  %42 = add nsw i64 %41, 1
  %43 = mul nsw i64 %42, %40
  %44 = sitofp i64 %43 to double
  %.pre = load i64, ptr %7, align 8, !tbaa !5
  br label %45

45:                                               ; preds = %35, %38
  %46 = phi i64 [ %41, %38 ], [ %30, %35 ]
  %47 = phi i64 [ %.pre, %38 ], [ %25, %35 ]
  %.0200 = phi i64 [ %39, %38 ], [ 1, %35 ]
  %.0196 = phi double [ %44, %38 ], [ 1.000000e+00, %35 ]
  store double %.0196, ptr %6, align 8, !tbaa !9
  %48 = getelementptr inbounds i8, ptr %6, i64 8
  store double 0.000000e+00, ptr %48, align 8, !tbaa !12
  %49 = icmp sge i64 %47, %.0200
  %or.cond = select i1 %49, i1 true, i1 %26
  br i1 %or.cond, label %.thread, label %.thread250.sink.split

.thread:                                          ; preds = %45
  %.pr246.pr = load i64, ptr %9, align 8, !tbaa !5
  %.not224 = icmp eq i64 %.pr246.pr, 0
  br i1 %.not224, label %53, label %.thread250

.thread250.sink.split:                            ; preds = %45, %32, %29, %10
  %.sink = phi i64 [ -1, %10 ], [ -2, %29 ], [ -4, %32 ], [ -8, %45 ]
  store i64 %.sink, ptr %9, align 8, !tbaa !5
  br label %.thread250

.thread250:                                       ; preds = %.thread250.sink.split, %.thread
  %50 = phi i64 [ %.pr246.pr, %.thread ], [ %.sink, %.thread250.sink.split ]
  %51 = sub nsw i64 0, %50
  store i64 %51, ptr %11, align 8, !tbaa !5
  %52 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %11) #4
  br label %168

53:                                               ; preds = %.thread
  %or.cond244 = or i1 %26, %37
  br i1 %or.cond244, label %168, label %54

54:                                               ; preds = %53
  store i64 %46, ptr %11, align 8, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %21, i64 16
  %.not225260 = icmp slt i64 %46, 1
  br i1 %.not225260, label %._crit_edge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %54, %68
  %.0199263 = phi i64 [ %.1, %68 ], [ 1, %54 ]
  %.0204261 = phi i64 [ %69, %68 ], [ 1, %54 ]
  %55 = getelementptr inbounds i64, ptr %22, i64 %.0204261
  %56 = load i64, ptr %55, align 8, !tbaa !5
  %.not238 = icmp eq i64 %56, 0
  br i1 %.not238, label %67, label %57

57:                                               ; preds = %.lr.ph
  %.not239 = icmp eq i64 %.0204261, %.0199263
  br i1 %.not239, label %64, label %58

58:                                               ; preds = %57
  %59 = mul nsw i64 %.0204261, %19
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %59
  %60 = mul nsw i64 %.0199263, %19
  %gep259 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %60
  %61 = tail call i32 @f2c_zswap(ptr noundef nonnull %0, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef %gep259, ptr noundef nonnull @c__1) #4
  %62 = getelementptr inbounds i64, ptr %22, i64 %.0199263
  %63 = load i64, ptr %62, align 8, !tbaa !5
  store i64 %63, ptr %55, align 8, !tbaa !5
  store i64 %.0204261, ptr %62, align 8, !tbaa !5
  br label %65

64:                                               ; preds = %57
  store i64 %.0199263, ptr %55, align 8, !tbaa !5
  br label %65

65:                                               ; preds = %64, %58
  %66 = add nsw i64 %.0199263, 1
  br label %68

67:                                               ; preds = %.lr.ph
  store i64 %.0204261, ptr %55, align 8, !tbaa !5
  br label %68

68:                                               ; preds = %65, %67
  %.1 = phi i64 [ %66, %65 ], [ %.0199263, %67 ]
  %69 = add nuw i64 %.0204261, 1
  %exitcond.not = icmp eq i64 %.0204261, %46
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !13

._crit_edge:                                      ; preds = %68
  %70 = add nsw i64 %.1, -1
  %71 = icmp sgt i64 %.1, 1
  br i1 %71, label %72, label %._crit_edge.thread

72:                                               ; preds = %._crit_edge
  %73 = load i64, ptr %0, align 8, !tbaa !5
  %.not226.not = icmp slt i64 %73, %.1
  %.240 = select i1 %.not226.not, i64 %73, i64 %70
  store i64 %.240, ptr %15, align 8, !tbaa !5
  %74 = call i32 @zgeqrf_(ptr noundef nonnull %0, ptr noundef nonnull %15, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %9) #4
  store i64 %.0200, ptr %11, align 8, !tbaa !5
  %75 = load double, ptr %6, align 8, !tbaa !9
  %76 = fptosi double %75 to i64
  %77 = call i64 @llvm.smax.i64(i64 %.0200, i64 %76)
  %78 = load i64, ptr %15, align 8, !tbaa !5
  %79 = load i64, ptr %1, align 8, !tbaa !5
  %80 = icmp slt i64 %78, %79
  br i1 %80, label %81, label %._crit_edge.thread

81:                                               ; preds = %72
  %82 = sub nsw i64 %79, %78
  store i64 %82, ptr %11, align 8, !tbaa !5
  %83 = add nsw i64 %78, 1
  %84 = mul nsw i64 %83, %19
  %85 = getelementptr %struct.doublecomplex, ptr %21, i64 %84
  %86 = getelementptr i8, ptr %85, i64 16
  %87 = call i32 @zunmqr_(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %0, ptr noundef nonnull %11, ptr noundef nonnull %15, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %86, ptr noundef nonnull %3, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %9) #4
  store i64 %77, ptr %11, align 8, !tbaa !5
  %88 = load double, ptr %6, align 8, !tbaa !9
  %89 = fptosi double %88 to i64
  store i64 %89, ptr %12, align 8, !tbaa !5
  %90 = call i64 @llvm.smax.i64(i64 %77, i64 %89)
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %54, %72, %81, %._crit_edge
  %91 = phi i64 [ %70, %81 ], [ %70, %72 ], [ %70, %._crit_edge ], [ 0, %54 ]
  %.0199.lcssa277 = phi i64 [ %.1, %81 ], [ %.1, %72 ], [ %.1, %._crit_edge ], [ 1, %54 ]
  %.2 = phi i64 [ %90, %81 ], [ %77, %72 ], [ %.0200, %._crit_edge ], [ %.0200, %54 ]
  %.not229 = icmp sgt i64 %.0199.lcssa277, %36
  br i1 %.not229, label %166, label %92

92:                                               ; preds = %._crit_edge.thread
  %93 = load i64, ptr %0, align 8, !tbaa !5
  %94 = sub nsw i64 %93, %91
  store i64 %94, ptr %16, align 8, !tbaa !5
  %95 = load i64, ptr %1, align 8, !tbaa !5
  %96 = sub nsw i64 %95, %91
  store i64 %96, ptr %17, align 8, !tbaa !5
  %97 = sub nsw i64 %36, %91
  %98 = call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #4
  %99 = icmp sgt i64 %98, 1
  %100 = icmp slt i64 %98, %97
  %or.cond241 = select i1 %99, i1 %100, i1 false
  br i1 %or.cond241, label %101, label %118

101:                                              ; preds = %92
  store i64 0, ptr %11, align 8, !tbaa !5
  %102 = call i64 @ilaenv_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #4
  %103 = load i64, ptr %11, align 8
  %104 = call i64 @llvm.smax.i64(i64 %103, i64 %102)
  %105 = icmp slt i64 %104, %97
  br i1 %105, label %106, label %118

106:                                              ; preds = %101
  %107 = load i64, ptr %17, align 8, !tbaa !5
  %108 = add nsw i64 %107, 1
  %109 = mul nsw i64 %108, %98
  %110 = call i64 @llvm.smax.i64(i64 %.2, i64 %109)
  %111 = load i64, ptr %7, align 8, !tbaa !5
  %112 = icmp slt i64 %111, %109
  br i1 %112, label %113, label %118

113:                                              ; preds = %106
  %114 = sdiv i64 %111, %108
  store i64 2, ptr %11, align 8, !tbaa !5
  %115 = call i64 @ilaenv_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #4
  %116 = load i64, ptr %11, align 8
  %117 = call i64 @llvm.smax.i64(i64 %116, i64 %115)
  br label %118

118:                                              ; preds = %101, %113, %106, %92
  %.0203 = phi i64 [ %114, %113 ], [ %98, %106 ], [ %98, %101 ], [ %98, %92 ]
  %.0202 = phi i64 [ %104, %113 ], [ %104, %106 ], [ %104, %101 ], [ 0, %92 ]
  %.3 = phi i64 [ %110, %113 ], [ %110, %106 ], [ %.2, %101 ], [ %.2, %92 ]
  %.0198 = phi i64 [ %117, %113 ], [ 2, %106 ], [ 2, %101 ], [ 2, %92 ]
  %119 = load i64, ptr %1, align 8, !tbaa !5
  store i64 %119, ptr %11, align 8, !tbaa !5
  %.not233264 = icmp sgt i64 %.0199.lcssa277, %119
  br i1 %.not233264, label %._crit_edge268, label %.lr.ph267

.lr.ph267:                                        ; preds = %118
  %120 = getelementptr %struct.doublecomplex, ptr %21, i64 %.0199.lcssa277
  br label %121

121:                                              ; preds = %.lr.ph267, %121
  %.1205265 = phi i64 [ %.0199.lcssa277, %.lr.ph267 ], [ %129, %121 ]
  %122 = mul nsw i64 %.1205265, %19
  %123 = getelementptr %struct.doublecomplex, ptr %120, i64 %122
  %124 = call double @f2c_dznrm2(ptr noundef nonnull %16, ptr noundef %123, ptr noundef nonnull @c__1) #4
  %125 = getelementptr inbounds double, ptr %24, i64 %.1205265
  store double %124, ptr %125, align 8, !tbaa !15
  %126 = load i64, ptr %1, align 8, !tbaa !5
  %127 = getelementptr double, ptr %24, i64 %126
  %128 = getelementptr double, ptr %127, i64 %.1205265
  store double %124, ptr %128, align 8, !tbaa !15
  %129 = add nsw i64 %.1205265, 1
  %130 = load i64, ptr %11, align 8, !tbaa !5
  %.not233.not = icmp slt i64 %.1205265, %130
  br i1 %.not233.not, label %121, label %._crit_edge268, !llvm.loop !16

._crit_edge268:                                   ; preds = %121, %118
  %.not234 = icmp sge i64 %.0203, %.0198
  %131 = icmp slt i64 %.0203, %97
  %132 = icmp slt i64 %.0202, %97
  %133 = and i1 %131, %132
  %or.cond243 = select i1 %.not234, i1 %133, i1 false
  br i1 %or.cond243, label %134, label %.loopexit

134:                                              ; preds = %._crit_edge268
  %135 = sub nsw i64 %36, %.0202
  %.not235271 = icmp sgt i64 %.0199.lcssa277, %135
  br i1 %.not235271, label %.loopexit, label %.lr.ph274

.lr.ph274:                                        ; preds = %134, %.lr.ph274
  %.2206272 = phi i64 [ %152, %.lr.ph274 ], [ %.0199.lcssa277, %134 ]
  %136 = sub nsw i64 %135, %.2206272
  %137 = add nsw i64 %136, 1
  %138 = call i64 @llvm.smin.i64(i64 %.0203, i64 %137)
  store i64 %138, ptr %14, align 8, !tbaa !5
  %139 = load i64, ptr %1, align 8, !tbaa !5
  %140 = sub nsw i64 %139, %.2206272
  %141 = add nsw i64 %140, 1
  store i64 %141, ptr %11, align 8, !tbaa !5
  %142 = add nsw i64 %.2206272, -1
  store i64 %142, ptr %12, align 8, !tbaa !5
  store i64 %141, ptr %13, align 8, !tbaa !5
  %143 = mul nsw i64 %.2206272, %19
  %gep270 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %143
  %144 = getelementptr inbounds i64, ptr %22, i64 %.2206272
  %145 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %.2206272
  %146 = getelementptr inbounds double, ptr %24, i64 %.2206272
  %147 = getelementptr double, ptr %24, i64 %139
  %148 = getelementptr double, ptr %147, i64 %.2206272
  %149 = getelementptr %struct.doublecomplex, ptr %6, i64 %138
  %150 = call i32 @zlaqps_(ptr noundef nonnull %0, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef nonnull %18, ptr noundef %gep270, ptr noundef nonnull %3, ptr noundef nonnull %144, ptr noundef nonnull %145, ptr noundef nonnull %146, ptr noundef %148, ptr noundef nonnull %6, ptr noundef %149, ptr noundef nonnull %13) #4
  %151 = load i64, ptr %18, align 8, !tbaa !5
  %152 = add nsw i64 %151, %.2206272
  %.not235 = icmp sgt i64 %152, %135
  br i1 %.not235, label %.loopexit, label %.lr.ph274

.loopexit:                                        ; preds = %.lr.ph274, %134, %._crit_edge268
  %.3207 = phi i64 [ %.0199.lcssa277, %._crit_edge268 ], [ %.0199.lcssa277, %134 ], [ %152, %.lr.ph274 ]
  %.not236 = icmp sgt i64 %.3207, %36
  br i1 %.not236, label %166, label %153

153:                                              ; preds = %.loopexit
  %154 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub = sub i64 %154, %.3207
  %155 = add i64 %reass.sub, 1
  store i64 %155, ptr %11, align 8, !tbaa !5
  %156 = add nsw i64 %.3207, -1
  store i64 %156, ptr %12, align 8, !tbaa !5
  %157 = mul nsw i64 %.3207, %19
  %158 = getelementptr %struct.doublecomplex, ptr %21, i64 %157
  %159 = getelementptr i8, ptr %158, i64 16
  %160 = getelementptr inbounds i64, ptr %22, i64 %.3207
  %161 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %.3207
  %162 = getelementptr inbounds double, ptr %24, i64 %.3207
  %163 = getelementptr double, ptr %24, i64 %154
  %164 = getelementptr double, ptr %163, i64 %.3207
  %165 = call i32 @zlaqp2_(ptr noundef nonnull %0, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %159, ptr noundef nonnull %3, ptr noundef nonnull %160, ptr noundef nonnull %161, ptr noundef nonnull %162, ptr noundef %164, ptr noundef nonnull %6) #4
  br label %166

166:                                              ; preds = %.loopexit, %153, %._crit_edge.thread
  %.4 = phi i64 [ %.3, %153 ], [ %.3, %.loopexit ], [ %.2, %._crit_edge.thread ]
  %167 = sitofp i64 %.4 to double
  store double %167, ptr %6, align 8, !tbaa !9
  store double 0.000000e+00, ptr %48, align 8, !tbaa !12
  br label %168

168:                                              ; preds = %53, %166, %.thread250
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  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 @f2c_zswap(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare double @f2c_dznrm2(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @zlaqp2_(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 nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!11, !11, i64 0}
!16 = distinct !{!16, !14}


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