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

; 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.complex = type { float, float }

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

; Function Attrs: nounwind uwtable
define dso_local i32 @cunglq_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #0 {
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca 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 i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store ptr %8, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 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
  %41 = load ptr, ptr %15, align 8, !tbaa !5
  %42 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %42, ptr %20, align 8, !tbaa !9
  %43 = load i64, ptr %20, align 8, !tbaa !9
  %44 = add nsw i64 1, %43
  store i64 %44, ptr %21, align 8, !tbaa !9
  %45 = load i64, ptr %21, align 8, !tbaa !9
  %46 = load ptr, ptr %14, align 8, !tbaa !5
  %47 = sub i64 0, %45
  %48 = getelementptr inbounds %struct.complex, ptr %46, i64 %47
  store ptr %48, ptr %14, align 8, !tbaa !5
  %49 = load ptr, ptr %16, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.complex, ptr %49, i32 -1
  store ptr %50, ptr %16, align 8, !tbaa !5
  %51 = load ptr, ptr %17, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.complex, ptr %51, i32 -1
  store ptr %52, ptr %17, align 8, !tbaa !5
  %53 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 0, ptr %53, align 8, !tbaa !9
  %54 = load ptr, ptr %11, align 8, !tbaa !5
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  %56 = load ptr, ptr %13, align 8, !tbaa !5
  %57 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %54, ptr noundef %55, ptr noundef %56, ptr noundef @c_n1)
  store i64 %57, ptr %30, align 8, !tbaa !9
  %58 = load ptr, ptr %11, align 8, !tbaa !5
  %59 = load i64, ptr %58, align 8, !tbaa !9
  %60 = icmp sge i64 1, %59
  br i1 %60, label %61, label %62

61:                                               ; preds = %9
  br label %65

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

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

85:                                               ; preds = %65
  %86 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -1, ptr %86, align 8, !tbaa !9
  br label %144

87:                                               ; preds = %65
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = load i64, ptr %88, align 8, !tbaa !9
  %90 = load ptr, ptr %11, align 8, !tbaa !5
  %91 = load i64, ptr %90, align 8, !tbaa !9
  %92 = icmp slt i64 %89, %91
  br i1 %92, label %93, label %95

93:                                               ; preds = %87
  %94 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -2, ptr %94, align 8, !tbaa !9
  br label %143

95:                                               ; preds = %87
  %96 = load ptr, ptr %13, align 8, !tbaa !5
  %97 = load i64, ptr %96, align 8, !tbaa !9
  %98 = icmp slt i64 %97, 0
  br i1 %98, label %105, label %99

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

105:                                              ; preds = %99, %95
  %106 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -3, ptr %106, align 8, !tbaa !9
  br label %142

107:                                              ; preds = %99
  %108 = load ptr, ptr %15, align 8, !tbaa !5
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = icmp sge i64 1, %111
  br i1 %112, label %113, label %114

113:                                              ; preds = %107
  br label %117

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

117:                                              ; preds = %114, %113
  %118 = phi i64 [ 1, %113 ], [ %116, %114 ]
  %119 = icmp slt i64 %109, %118
  br i1 %119, label %120, label %122

120:                                              ; preds = %117
  %121 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -5, ptr %121, align 8, !tbaa !9
  br label %141

122:                                              ; preds = %117
  %123 = load ptr, ptr %18, align 8, !tbaa !5
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = load ptr, ptr %11, align 8, !tbaa !5
  %126 = load i64, ptr %125, align 8, !tbaa !9
  %127 = icmp sge i64 1, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %122
  br label %132

129:                                              ; preds = %122
  %130 = load ptr, ptr %11, align 8, !tbaa !5
  %131 = load i64, ptr %130, align 8, !tbaa !9
  br label %132

132:                                              ; preds = %129, %128
  %133 = phi i64 [ 1, %128 ], [ %131, %129 ]
  %134 = icmp slt i64 %124, %133
  br i1 %134, label %135, label %140

135:                                              ; preds = %132
  %136 = load i64, ptr %39, align 8, !tbaa !9
  %137 = icmp ne i64 %136, 0
  br i1 %137, label %140, label %138

138:                                              ; preds = %135
  %139 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -8, ptr %139, align 8, !tbaa !9
  br label %140

140:                                              ; preds = %138, %135, %132
  br label %141

141:                                              ; preds = %140, %120
  br label %142

142:                                              ; preds = %141, %105
  br label %143

143:                                              ; preds = %142, %93
  br label %144

144:                                              ; preds = %143, %85
  %145 = load ptr, ptr %19, align 8, !tbaa !5
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = icmp ne i64 %146, 0
  br i1 %147, label %148, label %153

148:                                              ; preds = %144
  %149 = load ptr, ptr %19, align 8, !tbaa !5
  %150 = load i64, ptr %149, align 8, !tbaa !9
  %151 = sub nsw i64 0, %150
  store i64 %151, ptr %22, align 8, !tbaa !9
  %152 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %22)
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %510

153:                                              ; preds = %144
  %154 = load i64, ptr %39, align 8, !tbaa !9
  %155 = icmp ne i64 %154, 0
  br i1 %155, label %156, label %157

156:                                              ; preds = %153
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %510

157:                                              ; preds = %153
  br label %158

158:                                              ; preds = %157
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = icmp sle i64 %160, 0
  br i1 %161, label %162, label %169

162:                                              ; preds = %158
  %163 = load ptr, ptr %17, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.complex, ptr %163, i64 1
  %165 = getelementptr inbounds %struct.complex, ptr %164, i32 0, i32 0
  store float 1.000000e+00, ptr %165, align 4, !tbaa !11
  %166 = load ptr, ptr %17, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.complex, ptr %166, i64 1
  %168 = getelementptr inbounds %struct.complex, ptr %167, i32 0, i32 1
  store float 0.000000e+00, ptr %168, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %510

169:                                              ; preds = %158
  store i64 2, ptr %35, align 8, !tbaa !9
  store i64 0, ptr %33, align 8, !tbaa !9
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = load i64, ptr %170, align 8, !tbaa !9
  store i64 %171, ptr %34, align 8, !tbaa !9
  %172 = load i64, ptr %30, align 8, !tbaa !9
  %173 = icmp sgt i64 %172, 1
  br i1 %173, label %174, label %227

174:                                              ; preds = %169
  %175 = load i64, ptr %30, align 8, !tbaa !9
  %176 = load ptr, ptr %13, align 8, !tbaa !5
  %177 = load i64, ptr %176, align 8, !tbaa !9
  %178 = icmp slt i64 %175, %177
  br i1 %178, label %179, label %227

179:                                              ; preds = %174
  store i64 0, ptr %22, align 8, !tbaa !9
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = load ptr, ptr %13, align 8, !tbaa !5
  %183 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %180, ptr noundef %181, ptr noundef %182, ptr noundef @c_n1)
  store i64 %183, ptr %23, align 8, !tbaa !9
  %184 = load i64, ptr %22, align 8, !tbaa !9
  %185 = load i64, ptr %23, align 8, !tbaa !9
  %186 = icmp sge i64 %184, %185
  br i1 %186, label %187, label %189

187:                                              ; preds = %179
  %188 = load i64, ptr %22, align 8, !tbaa !9
  br label %191

189:                                              ; preds = %179
  %190 = load i64, ptr %23, align 8, !tbaa !9
  br label %191

191:                                              ; preds = %189, %187
  %192 = phi i64 [ %188, %187 ], [ %190, %189 ]
  store i64 %192, ptr %33, align 8, !tbaa !9
  %193 = load i64, ptr %33, align 8, !tbaa !9
  %194 = load ptr, ptr %13, align 8, !tbaa !5
  %195 = load i64, ptr %194, align 8, !tbaa !9
  %196 = icmp slt i64 %193, %195
  br i1 %196, label %197, label %226

197:                                              ; preds = %191
  %198 = load ptr, ptr %11, align 8, !tbaa !5
  %199 = load i64, ptr %198, align 8, !tbaa !9
  store i64 %199, ptr %37, align 8, !tbaa !9
  %200 = load i64, ptr %37, align 8, !tbaa !9
  %201 = load i64, ptr %30, align 8, !tbaa !9
  %202 = mul nsw i64 %200, %201
  store i64 %202, ptr %34, align 8, !tbaa !9
  %203 = load ptr, ptr %18, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = load i64, ptr %34, align 8, !tbaa !9
  %206 = icmp slt i64 %204, %205
  br i1 %206, label %207, label %225

207:                                              ; preds = %197
  %208 = load ptr, ptr %18, align 8, !tbaa !5
  %209 = load i64, ptr %208, align 8, !tbaa !9
  %210 = load i64, ptr %37, align 8, !tbaa !9
  %211 = sdiv i64 %209, %210
  store i64 %211, ptr %30, align 8, !tbaa !9
  store i64 2, ptr %22, align 8, !tbaa !9
  %212 = load ptr, ptr %11, align 8, !tbaa !5
  %213 = load ptr, ptr %12, align 8, !tbaa !5
  %214 = load ptr, ptr %13, align 8, !tbaa !5
  %215 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %212, ptr noundef %213, ptr noundef %214, ptr noundef @c_n1)
  store i64 %215, ptr %23, align 8, !tbaa !9
  %216 = load i64, ptr %22, align 8, !tbaa !9
  %217 = load i64, ptr %23, align 8, !tbaa !9
  %218 = icmp sge i64 %216, %217
  br i1 %218, label %219, label %221

219:                                              ; preds = %207
  %220 = load i64, ptr %22, align 8, !tbaa !9
  br label %223

221:                                              ; preds = %207
  %222 = load i64, ptr %23, align 8, !tbaa !9
  br label %223

223:                                              ; preds = %221, %219
  %224 = phi i64 [ %220, %219 ], [ %222, %221 ]
  store i64 %224, ptr %35, align 8, !tbaa !9
  br label %225

225:                                              ; preds = %223, %197
  br label %226

226:                                              ; preds = %225, %191
  br label %227

227:                                              ; preds = %226, %174, %169
  %228 = load i64, ptr %30, align 8, !tbaa !9
  %229 = load i64, ptr %35, align 8, !tbaa !9
  %230 = icmp sge i64 %228, %229
  br i1 %230, label %231, label %301

231:                                              ; preds = %227
  %232 = load i64, ptr %30, align 8, !tbaa !9
  %233 = load ptr, ptr %13, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = icmp slt i64 %232, %234
  br i1 %235, label %236, label %301

236:                                              ; preds = %231
  %237 = load i64, ptr %33, align 8, !tbaa !9
  %238 = load ptr, ptr %13, align 8, !tbaa !5
  %239 = load i64, ptr %238, align 8, !tbaa !9
  %240 = icmp slt i64 %237, %239
  br i1 %240, label %241, label %301

241:                                              ; preds = %236
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  %243 = load i64, ptr %242, align 8, !tbaa !9
  %244 = load i64, ptr %33, align 8, !tbaa !9
  %245 = sub nsw i64 %243, %244
  %246 = sub nsw i64 %245, 1
  %247 = load i64, ptr %30, align 8, !tbaa !9
  %248 = sdiv i64 %246, %247
  %249 = load i64, ptr %30, align 8, !tbaa !9
  %250 = mul nsw i64 %248, %249
  store i64 %250, ptr %31, align 8, !tbaa !9
  %251 = load ptr, ptr %13, align 8, !tbaa !5
  %252 = load i64, ptr %251, align 8, !tbaa !9
  store i64 %252, ptr %22, align 8, !tbaa !9
  %253 = load i64, ptr %31, align 8, !tbaa !9
  %254 = load i64, ptr %30, align 8, !tbaa !9
  %255 = add nsw i64 %253, %254
  store i64 %255, ptr %23, align 8, !tbaa !9
  %256 = load i64, ptr %22, align 8, !tbaa !9
  %257 = load i64, ptr %23, align 8, !tbaa !9
  %258 = icmp sle i64 %256, %257
  br i1 %258, label %259, label %261

259:                                              ; preds = %241
  %260 = load i64, ptr %22, align 8, !tbaa !9
  br label %263

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

263:                                              ; preds = %261, %259
  %264 = phi i64 [ %260, %259 ], [ %262, %261 ]
  store i64 %264, ptr %32, align 8, !tbaa !9
  %265 = load i64, ptr %32, align 8, !tbaa !9
  store i64 %265, ptr %22, align 8, !tbaa !9
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %266

266:                                              ; preds = %297, %263
  %267 = load i64, ptr %27, align 8, !tbaa !9
  %268 = load i64, ptr %22, align 8, !tbaa !9
  %269 = icmp sle i64 %267, %268
  br i1 %269, label %270, label %300

270:                                              ; preds = %266
  %271 = load ptr, ptr %11, align 8, !tbaa !5
  %272 = load i64, ptr %271, align 8, !tbaa !9
  store i64 %272, ptr %23, align 8, !tbaa !9
  %273 = load i64, ptr %32, align 8, !tbaa !9
  %274 = add nsw i64 %273, 1
  store i64 %274, ptr %26, align 8, !tbaa !9
  br label %275

275:                                              ; preds = %293, %270
  %276 = load i64, ptr %26, align 8, !tbaa !9
  %277 = load i64, ptr %23, align 8, !tbaa !9
  %278 = icmp sle i64 %276, %277
  br i1 %278, label %279, label %296

279:                                              ; preds = %275
  %280 = load i64, ptr %26, align 8, !tbaa !9
  %281 = load i64, ptr %27, align 8, !tbaa !9
  %282 = load i64, ptr %20, align 8, !tbaa !9
  %283 = mul nsw i64 %281, %282
  %284 = add nsw i64 %280, %283
  store i64 %284, ptr %24, align 8, !tbaa !9
  %285 = load ptr, ptr %14, align 8, !tbaa !5
  %286 = load i64, ptr %24, align 8, !tbaa !9
  %287 = getelementptr inbounds %struct.complex, ptr %285, i64 %286
  %288 = getelementptr inbounds %struct.complex, ptr %287, i32 0, i32 0
  store float 0.000000e+00, ptr %288, align 4, !tbaa !11
  %289 = load ptr, ptr %14, align 8, !tbaa !5
  %290 = load i64, ptr %24, align 8, !tbaa !9
  %291 = getelementptr inbounds %struct.complex, ptr %289, i64 %290
  %292 = getelementptr inbounds %struct.complex, ptr %291, i32 0, i32 1
  store float 0.000000e+00, ptr %292, align 4, !tbaa !14
  br label %293

293:                                              ; preds = %279
  %294 = load i64, ptr %26, align 8, !tbaa !9
  %295 = add nsw i64 %294, 1
  store i64 %295, ptr %26, align 8, !tbaa !9
  br label %275, !llvm.loop !15

296:                                              ; preds = %275
  br label %297

297:                                              ; preds = %296
  %298 = load i64, ptr %27, align 8, !tbaa !9
  %299 = add nsw i64 %298, 1
  store i64 %299, ptr %27, align 8, !tbaa !9
  br label %266, !llvm.loop !17

300:                                              ; preds = %266
  br label %302

301:                                              ; preds = %236, %231, %227
  store i64 0, ptr %32, align 8, !tbaa !9
  br label %302

302:                                              ; preds = %301, %300
  %303 = load i64, ptr %32, align 8, !tbaa !9
  %304 = load ptr, ptr %11, align 8, !tbaa !5
  %305 = load i64, ptr %304, align 8, !tbaa !9
  %306 = icmp slt i64 %303, %305
  br i1 %306, label %307, label %337

307:                                              ; preds = %302
  %308 = load ptr, ptr %11, align 8, !tbaa !5
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = load i64, ptr %32, align 8, !tbaa !9
  %311 = sub nsw i64 %309, %310
  store i64 %311, ptr %22, align 8, !tbaa !9
  %312 = load ptr, ptr %12, align 8, !tbaa !5
  %313 = load i64, ptr %312, align 8, !tbaa !9
  %314 = load i64, ptr %32, align 8, !tbaa !9
  %315 = sub nsw i64 %313, %314
  store i64 %315, ptr %23, align 8, !tbaa !9
  %316 = load ptr, ptr %13, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !9
  %318 = load i64, ptr %32, align 8, !tbaa !9
  %319 = sub nsw i64 %317, %318
  store i64 %319, ptr %24, align 8, !tbaa !9
  %320 = load ptr, ptr %14, align 8, !tbaa !5
  %321 = load i64, ptr %32, align 8, !tbaa !9
  %322 = add nsw i64 %321, 1
  %323 = load i64, ptr %32, align 8, !tbaa !9
  %324 = add nsw i64 %323, 1
  %325 = load i64, ptr %20, align 8, !tbaa !9
  %326 = mul nsw i64 %324, %325
  %327 = add nsw i64 %322, %326
  %328 = getelementptr inbounds %struct.complex, ptr %320, i64 %327
  %329 = load ptr, ptr %15, align 8, !tbaa !5
  %330 = load ptr, ptr %16, align 8, !tbaa !5
  %331 = load i64, ptr %32, align 8, !tbaa !9
  %332 = add nsw i64 %331, 1
  %333 = getelementptr inbounds %struct.complex, ptr %330, i64 %332
  %334 = load ptr, ptr %17, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.complex, ptr %334, i64 1
  %336 = call i32 @cungl2_(ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %328, ptr noundef %329, ptr noundef %333, ptr noundef %335, ptr noundef %36)
  br label %337

337:                                              ; preds = %307, %302
  %338 = load i64, ptr %32, align 8, !tbaa !9
  %339 = icmp sgt i64 %338, 0
  br i1 %339, label %340, label %501

340:                                              ; preds = %337
  %341 = load i64, ptr %30, align 8, !tbaa !9
  %342 = sub nsw i64 0, %341
  store i64 %342, ptr %22, align 8, !tbaa !9
  %343 = load i64, ptr %31, align 8, !tbaa !9
  %344 = add nsw i64 %343, 1
  store i64 %344, ptr %26, align 8, !tbaa !9
  br label %345

345:                                              ; preds = %496, %340
  %346 = load i64, ptr %22, align 8, !tbaa !9
  %347 = icmp slt i64 %346, 0
  br i1 %347, label %348, label %352

348:                                              ; preds = %345
  %349 = load i64, ptr %26, align 8, !tbaa !9
  %350 = icmp sge i64 %349, 1
  %351 = zext i1 %350 to i32
  br label %356

352:                                              ; preds = %345
  %353 = load i64, ptr %26, align 8, !tbaa !9
  %354 = icmp sle i64 %353, 1
  %355 = zext i1 %354 to i32
  br label %356

356:                                              ; preds = %352, %348
  %357 = phi i32 [ %351, %348 ], [ %355, %352 ]
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %359, label %500

359:                                              ; preds = %356
  %360 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %360, ptr %23, align 8, !tbaa !9
  %361 = load ptr, ptr %13, align 8, !tbaa !5
  %362 = load i64, ptr %361, align 8, !tbaa !9
  %363 = load i64, ptr %26, align 8, !tbaa !9
  %364 = sub nsw i64 %362, %363
  %365 = add nsw i64 %364, 1
  store i64 %365, ptr %24, align 8, !tbaa !9
  %366 = load i64, ptr %23, align 8, !tbaa !9
  %367 = load i64, ptr %24, align 8, !tbaa !9
  %368 = icmp sle i64 %366, %367
  br i1 %368, label %369, label %371

369:                                              ; preds = %359
  %370 = load i64, ptr %23, align 8, !tbaa !9
  br label %373

371:                                              ; preds = %359
  %372 = load i64, ptr %24, align 8, !tbaa !9
  br label %373

373:                                              ; preds = %371, %369
  %374 = phi i64 [ %370, %369 ], [ %372, %371 ]
  store i64 %374, ptr %29, align 8, !tbaa !9
  %375 = load i64, ptr %26, align 8, !tbaa !9
  %376 = load i64, ptr %29, align 8, !tbaa !9
  %377 = add nsw i64 %375, %376
  %378 = load ptr, ptr %11, align 8, !tbaa !5
  %379 = load i64, ptr %378, align 8, !tbaa !9
  %380 = icmp sle i64 %377, %379
  br i1 %380, label %381, label %438

381:                                              ; preds = %373
  %382 = load ptr, ptr %12, align 8, !tbaa !5
  %383 = load i64, ptr %382, align 8, !tbaa !9
  %384 = load i64, ptr %26, align 8, !tbaa !9
  %385 = sub nsw i64 %383, %384
  %386 = add nsw i64 %385, 1
  store i64 %386, ptr %23, align 8, !tbaa !9
  %387 = load ptr, ptr %14, align 8, !tbaa !5
  %388 = load i64, ptr %26, align 8, !tbaa !9
  %389 = load i64, ptr %26, align 8, !tbaa !9
  %390 = load i64, ptr %20, align 8, !tbaa !9
  %391 = mul nsw i64 %389, %390
  %392 = add nsw i64 %388, %391
  %393 = getelementptr inbounds %struct.complex, ptr %387, i64 %392
  %394 = load ptr, ptr %15, align 8, !tbaa !5
  %395 = load ptr, ptr %16, align 8, !tbaa !5
  %396 = load i64, ptr %26, align 8, !tbaa !9
  %397 = getelementptr inbounds %struct.complex, ptr %395, i64 %396
  %398 = load ptr, ptr %17, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.complex, ptr %398, i64 1
  %400 = call i32 @clarft_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %23, ptr noundef %29, ptr noundef %393, ptr noundef %394, ptr noundef %397, ptr noundef %399, ptr noundef %37)
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = load i64, ptr %401, align 8, !tbaa !9
  %403 = load i64, ptr %26, align 8, !tbaa !9
  %404 = sub nsw i64 %402, %403
  %405 = load i64, ptr %29, align 8, !tbaa !9
  %406 = sub nsw i64 %404, %405
  %407 = add nsw i64 %406, 1
  store i64 %407, ptr %23, align 8, !tbaa !9
  %408 = load ptr, ptr %12, align 8, !tbaa !5
  %409 = load i64, ptr %408, align 8, !tbaa !9
  %410 = load i64, ptr %26, align 8, !tbaa !9
  %411 = sub nsw i64 %409, %410
  %412 = add nsw i64 %411, 1
  store i64 %412, ptr %24, align 8, !tbaa !9
  %413 = load ptr, ptr %14, align 8, !tbaa !5
  %414 = load i64, ptr %26, align 8, !tbaa !9
  %415 = load i64, ptr %26, align 8, !tbaa !9
  %416 = load i64, ptr %20, align 8, !tbaa !9
  %417 = mul nsw i64 %415, %416
  %418 = add nsw i64 %414, %417
  %419 = getelementptr inbounds %struct.complex, ptr %413, i64 %418
  %420 = load ptr, ptr %15, align 8, !tbaa !5
  %421 = load ptr, ptr %17, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.complex, ptr %421, i64 1
  %423 = load ptr, ptr %14, align 8, !tbaa !5
  %424 = load i64, ptr %26, align 8, !tbaa !9
  %425 = load i64, ptr %29, align 8, !tbaa !9
  %426 = add nsw i64 %424, %425
  %427 = load i64, ptr %26, align 8, !tbaa !9
  %428 = load i64, ptr %20, align 8, !tbaa !9
  %429 = mul nsw i64 %427, %428
  %430 = add nsw i64 %426, %429
  %431 = getelementptr inbounds %struct.complex, ptr %423, i64 %430
  %432 = load ptr, ptr %15, align 8, !tbaa !5
  %433 = load ptr, ptr %17, align 8, !tbaa !5
  %434 = load i64, ptr %29, align 8, !tbaa !9
  %435 = add nsw i64 %434, 1
  %436 = getelementptr inbounds %struct.complex, ptr %433, i64 %435
  %437 = call i32 @clarfb_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %23, ptr noundef %24, ptr noundef %29, ptr noundef %419, ptr noundef %420, ptr noundef %422, ptr noundef %37, ptr noundef %431, ptr noundef %432, ptr noundef %436, ptr noundef %37)
  br label %438

438:                                              ; preds = %381, %373
  %439 = load ptr, ptr %12, align 8, !tbaa !5
  %440 = load i64, ptr %439, align 8, !tbaa !9
  %441 = load i64, ptr %26, align 8, !tbaa !9
  %442 = sub nsw i64 %440, %441
  %443 = add nsw i64 %442, 1
  store i64 %443, ptr %23, align 8, !tbaa !9
  %444 = load ptr, ptr %14, align 8, !tbaa !5
  %445 = load i64, ptr %26, align 8, !tbaa !9
  %446 = load i64, ptr %26, align 8, !tbaa !9
  %447 = load i64, ptr %20, align 8, !tbaa !9
  %448 = mul nsw i64 %446, %447
  %449 = add nsw i64 %445, %448
  %450 = getelementptr inbounds %struct.complex, ptr %444, i64 %449
  %451 = load ptr, ptr %15, align 8, !tbaa !5
  %452 = load ptr, ptr %16, align 8, !tbaa !5
  %453 = load i64, ptr %26, align 8, !tbaa !9
  %454 = getelementptr inbounds %struct.complex, ptr %452, i64 %453
  %455 = load ptr, ptr %17, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.complex, ptr %455, i64 1
  %457 = call i32 @cungl2_(ptr noundef %29, ptr noundef %23, ptr noundef %29, ptr noundef %450, ptr noundef %451, ptr noundef %454, ptr noundef %456, ptr noundef %36)
  %458 = load i64, ptr %26, align 8, !tbaa !9
  %459 = sub nsw i64 %458, 1
  store i64 %459, ptr %23, align 8, !tbaa !9
  store i64 1, ptr %27, align 8, !tbaa !9
  br label %460

460:                                              ; preds = %492, %438
  %461 = load i64, ptr %27, align 8, !tbaa !9
  %462 = load i64, ptr %23, align 8, !tbaa !9
  %463 = icmp sle i64 %461, %462
  br i1 %463, label %464, label %495

464:                                              ; preds = %460
  %465 = load i64, ptr %26, align 8, !tbaa !9
  %466 = load i64, ptr %29, align 8, !tbaa !9
  %467 = add nsw i64 %465, %466
  %468 = sub nsw i64 %467, 1
  store i64 %468, ptr %24, align 8, !tbaa !9
  %469 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %469, ptr %28, align 8, !tbaa !9
  br label %470

470:                                              ; preds = %488, %464
  %471 = load i64, ptr %28, align 8, !tbaa !9
  %472 = load i64, ptr %24, align 8, !tbaa !9
  %473 = icmp sle i64 %471, %472
  br i1 %473, label %474, label %491

474:                                              ; preds = %470
  %475 = load i64, ptr %28, align 8, !tbaa !9
  %476 = load i64, ptr %27, align 8, !tbaa !9
  %477 = load i64, ptr %20, align 8, !tbaa !9
  %478 = mul nsw i64 %476, %477
  %479 = add nsw i64 %475, %478
  store i64 %479, ptr %25, align 8, !tbaa !9
  %480 = load ptr, ptr %14, align 8, !tbaa !5
  %481 = load i64, ptr %25, align 8, !tbaa !9
  %482 = getelementptr inbounds %struct.complex, ptr %480, i64 %481
  %483 = getelementptr inbounds %struct.complex, ptr %482, i32 0, i32 0
  store float 0.000000e+00, ptr %483, align 4, !tbaa !11
  %484 = load ptr, ptr %14, align 8, !tbaa !5
  %485 = load i64, ptr %25, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.complex, ptr %484, i64 %485
  %487 = getelementptr inbounds %struct.complex, ptr %486, i32 0, i32 1
  store float 0.000000e+00, ptr %487, align 4, !tbaa !14
  br label %488

488:                                              ; preds = %474
  %489 = load i64, ptr %28, align 8, !tbaa !9
  %490 = add nsw i64 %489, 1
  store i64 %490, ptr %28, align 8, !tbaa !9
  br label %470, !llvm.loop !18

491:                                              ; preds = %470
  br label %492

492:                                              ; preds = %491
  %493 = load i64, ptr %27, align 8, !tbaa !9
  %494 = add nsw i64 %493, 1
  store i64 %494, ptr %27, align 8, !tbaa !9
  br label %460, !llvm.loop !19

495:                                              ; preds = %460
  br label %496

496:                                              ; preds = %495
  %497 = load i64, ptr %22, align 8, !tbaa !9
  %498 = load i64, ptr %26, align 8, !tbaa !9
  %499 = add nsw i64 %498, %497
  store i64 %499, ptr %26, align 8, !tbaa !9
  br label %345, !llvm.loop !20

500:                                              ; preds = %356
  br label %501

501:                                              ; preds = %500, %337
  %502 = load i64, ptr %34, align 8, !tbaa !9
  %503 = sitofp i64 %502 to float
  %504 = load ptr, ptr %17, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.complex, ptr %504, i64 1
  %506 = getelementptr inbounds %struct.complex, ptr %505, i32 0, i32 0
  store float %503, ptr %506, align 4, !tbaa !11
  %507 = load ptr, ptr %17, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.complex, ptr %507, i64 1
  %509 = getelementptr inbounds %struct.complex, ptr %508, i32 0, i32 1
  store float 0.000000e+00, ptr %509, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  store i32 1, ptr %40, align 4
  br label %510

510:                                              ; preds = %501, %162, %156, %148
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  %511 = load i32, ptr %10, align 4
  ret i32 %511
}

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

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

declare i32 @clarfb_(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, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 4}
!13 = !{!"float", !7, i64 0}
!14 = !{!12, !13, i64 4}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !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.complex = type { float, float }

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @cunglq_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef readonly %7, ptr nocapture noundef %8) local_unnamed_addr #0 {
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %16 = load i64, ptr %4, align 8, !tbaa !5
  %17 = xor i64 %16, -1
  %18 = getelementptr inbounds %struct.complex, ptr %3, i64 %17
  %19 = getelementptr inbounds i8, ptr %5, i64 -8
  store i64 0, ptr %8, align 8, !tbaa !5
  %20 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull @c_n1) #5
  %21 = load i64, ptr %0, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.smax.i64(i64 %21, i64 1)
  %22 = mul nsw i64 %spec.select, %20
  %23 = sitofp i64 %22 to float
  store float %23, ptr %6, align 4, !tbaa !9
  %24 = getelementptr inbounds i8, ptr %6, i64 4
  store float 0.000000e+00, ptr %24, align 4, !tbaa !12
  %25 = load i64, ptr %7, align 8, !tbaa !5
  %26 = icmp eq i64 %25, -1
  %27 = icmp slt i64 %21, 0
  br i1 %27, label %.thread.sink.split, label %28

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

31:                                               ; preds = %28
  %32 = load i64, ptr %2, align 8, !tbaa !5
  %or.cond198 = icmp ugt i64 %32, %21
  br i1 %or.cond198, label %.thread.sink.split, label %33

33:                                               ; preds = %31
  %34 = load i64, ptr %4, align 8, !tbaa !5
  %35 = icmp slt i64 %34, %spec.select
  br i1 %35, label %.thread.sink.split, label %36

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

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

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

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

42:                                               ; preds = %38
  br i1 %26, label %173, label %43

43:                                               ; preds = %42
  %44 = icmp eq i64 %21, 0
  br i1 %44, label %45, label %46

45:                                               ; preds = %43
  store float 1.000000e+00, ptr %6, align 4, !tbaa !9
  br label %173

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

48:                                               ; preds = %46
  %49 = icmp ult i64 %20, %32
  br i1 %49, label %50, label %.thread204

50:                                               ; preds = %48
  %51 = tail call i64 @ilaenv_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #5
  %52 = tail call i64 @llvm.smax.i64(i64 %51, i64 0)
  %53 = load i64, ptr %2, align 8, !tbaa !5
  %54 = icmp slt i64 %52, %53
  br i1 %54, label %55, label %.thread204

55:                                               ; preds = %50
  %56 = load i64, ptr %0, align 8, !tbaa !5
  store i64 %56, ptr %15, align 8, !tbaa !5
  %57 = mul nsw i64 %56, %20
  %58 = load i64, ptr %7, align 8, !tbaa !5
  %59 = icmp slt i64 %58, %57
  br i1 %59, label %60, label %.thread204

60:                                               ; preds = %55
  %61 = sdiv i64 %58, %56
  %62 = tail call i64 @ilaenv_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #5
  %63 = tail call i64 @llvm.smax.i64(i64 %62, i64 2)
  %.not190 = icmp slt i64 %61, %63
  br i1 %.not190, label %.thread215, label %..thread204_crit_edge

..thread204_crit_edge:                            ; preds = %60
  %.pre = load i64, ptr %2, align 8, !tbaa !5
  br label %.thread204

.thread204:                                       ; preds = %..thread204_crit_edge, %48, %50, %55
  %64 = phi i64 [ %.pre, %..thread204_crit_edge ], [ %32, %48 ], [ %53, %50 ], [ %53, %55 ]
  %.0165213 = phi i64 [ %57, %..thread204_crit_edge ], [ %21, %48 ], [ %21, %50 ], [ %57, %55 ]
  %.0166212 = phi i64 [ %52, %..thread204_crit_edge ], [ 0, %48 ], [ %52, %50 ], [ %52, %55 ]
  %.0169210 = phi i64 [ %61, %..thread204_crit_edge ], [ %20, %48 ], [ %20, %50 ], [ %20, %55 ]
  %65 = icmp slt i64 %.0169210, %64
  %66 = icmp slt i64 %.0166212, %64
  %or.cond201 = and i1 %65, %66
  br i1 %or.cond201, label %67, label %.thread215

67:                                               ; preds = %.thread204
  %68 = xor i64 %.0166212, -1
  %69 = add nsw i64 %64, %68
  %.fr = freeze i64 %69
  %70 = srem i64 %.fr, %.0169210
  %71 = sub nsw i64 %.fr, %70
  %72 = add nsw i64 %71, %.0169210
  store i64 %72, ptr %11, align 8, !tbaa !5
  %73 = tail call i64 @llvm.smin.i64(i64 %64, i64 %72)
  store i64 %73, ptr %10, align 8, !tbaa !5
  %.not192228 = icmp slt i64 %73, 1
  br i1 %.not192228, label %.thread215.loopexit, label %.lr.ph232

.lr.ph232:                                        ; preds = %67
  %74 = load i64, ptr %0, align 8, !tbaa !5
  %.not197.not222 = icmp slt i64 %73, %74
  br i1 %.not197.not222, label %.lr.ph.us.preheader, label %.thread215.loopexit

.lr.ph.us.preheader:                              ; preds = %.lr.ph232
  %75 = shl i64 %73, 3
  %76 = shl i64 %16, 3
  %77 = sub nsw i64 %74, %73
  %78 = shl i64 %77, 3
  %79 = mul i64 %16, %73
  %80 = getelementptr i8, ptr %3, i64 %75
  %xtraiter = and i64 %73, 7
  %81 = icmp ult i64 %73, 8
  br i1 %81, label %.thread215.loopexit.loopexit.unr-lcssa, label %.lr.ph.us.preheader.new

.lr.ph.us.preheader.new:                          ; preds = %.lr.ph.us.preheader
  %unroll_iter = and i64 %73, 9223372036854775800
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us, %.lr.ph.us.preheader.new
  %indvar = phi i64 [ 0, %.lr.ph.us.preheader.new ], [ %indvar.next.7, %.lr.ph.us ]
  %niter = phi i64 [ 0, %.lr.ph.us.preheader.new ], [ %niter.next.7, %.lr.ph.us ]
  %82 = mul i64 %76, %indvar
  %scevgep = getelementptr i8, ptr %80, i64 %82
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next = or disjoint i64 %indvar, 1
  %83 = mul i64 %76, %indvar.next
  %scevgep.1 = getelementptr i8, ptr %80, i64 %83
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.1, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %84 = mul i64 %76, %indvar.next.1
  %scevgep.2 = getelementptr i8, ptr %80, i64 %84
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.2, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %85 = mul i64 %76, %indvar.next.2
  %scevgep.3 = getelementptr i8, ptr %80, i64 %85
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.3, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %86 = mul i64 %76, %indvar.next.3
  %scevgep.4 = getelementptr i8, ptr %80, i64 %86
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.4, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %87 = mul i64 %76, %indvar.next.4
  %scevgep.5 = getelementptr i8, ptr %80, i64 %87
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.5, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %88 = mul i64 %76, %indvar.next.5
  %scevgep.6 = getelementptr i8, ptr %80, i64 %88
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.6, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %89 = mul i64 %76, %indvar.next.6
  %scevgep.7 = getelementptr i8, ptr %80, i64 %89
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.7, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.7 = add nuw nsw i64 %indvar, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.thread215.loopexit.loopexit.unr-lcssa, label %.lr.ph.us, !llvm.loop !14

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

.lr.ph.us.epil:                                   ; preds = %.thread215.loopexit.loopexit.unr-lcssa, %.lr.ph.us.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.lr.ph.us.epil ], [ %indvar.unr, %.thread215.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.us.epil ], [ 0, %.thread215.loopexit.loopexit.unr-lcssa ]
  %90 = mul i64 %76, %indvar.epil
  %scevgep.epil = getelementptr i8, ptr %80, i64 %90
  tail call void @llvm.memset.p0.i64(ptr align 4 %scevgep.epil, i8 0, i64 %78, i1 false), !tbaa !13
  %indvar.next.epil = add nuw nsw i64 %indvar.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.thread215.loopexit.loopexit, label %.lr.ph.us.epil, !llvm.loop !16

.thread215.loopexit.loopexit:                     ; preds = %.lr.ph.us.epil, %.thread215.loopexit.loopexit.unr-lcssa
  %91 = add i64 %74, %79
  br label %.thread215.loopexit

.thread215.loopexit:                              ; preds = %.lr.ph232, %.thread215.loopexit.loopexit, %67
  %.lcssa227.lcssa = phi i64 [ undef, %67 ], [ %91, %.thread215.loopexit.loopexit ], [ undef, %.lr.ph232 ]
  store i64 %.lcssa227.lcssa, ptr %12, align 8, !tbaa !5
  %92 = add nsw i64 %71, 1
  br label %.thread215

.thread215:                                       ; preds = %.thread215.loopexit, %46, %60, %.thread204
  %.0165214 = phi i64 [ %.0165213, %.thread204 ], [ %57, %60 ], [ %21, %46 ], [ %.0165213, %.thread215.loopexit ]
  %.0169211 = phi i64 [ %.0169210, %.thread204 ], [ %61, %60 ], [ %20, %46 ], [ %.0169210, %.thread215.loopexit ]
  %.0168 = phi i64 [ undef, %.thread204 ], [ undef, %60 ], [ undef, %46 ], [ %92, %.thread215.loopexit ]
  %.0167 = phi i64 [ 0, %.thread204 ], [ 0, %60 ], [ 0, %46 ], [ %73, %.thread215.loopexit ]
  %93 = load i64, ptr %0, align 8, !tbaa !5
  %94 = icmp slt i64 %.0167, %93
  br i1 %94, label %95, label %107

95:                                               ; preds = %.thread215
  %96 = sub nsw i64 %93, %.0167
  store i64 %96, ptr %10, align 8, !tbaa !5
  %97 = load i64, ptr %1, align 8, !tbaa !5
  %98 = sub nsw i64 %97, %.0167
  store i64 %98, ptr %11, align 8, !tbaa !5
  %99 = load i64, ptr %2, align 8, !tbaa !5
  %100 = sub nsw i64 %99, %.0167
  store i64 %100, ptr %12, align 8, !tbaa !5
  %101 = add nsw i64 %.0167, 1
  %102 = add i64 %16, 1
  %103 = mul i64 %101, %102
  %104 = getelementptr inbounds %struct.complex, ptr %18, i64 %103
  %105 = getelementptr %struct.complex, ptr %5, i64 %.0167
  %106 = call i32 @cungl2_(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %104, ptr noundef nonnull %4, ptr noundef %105, ptr noundef nonnull %6, ptr noundef nonnull %14) #5
  br label %107

107:                                              ; preds = %95, %.thread215
  %108 = icmp sgt i64 %.0167, 0
  br i1 %108, label %109, label %.loopexit

109:                                              ; preds = %107
  %110 = sub nsw i64 0, %.0169211
  store i64 %110, ptr %10, align 8, !tbaa !5
  %111 = icmp sgt i64 %.0169211, 0
  %112 = icmp sgt i64 %.0168, 0
  %113 = icmp slt i64 %.0168, 2
  %.in246 = select i1 %111, i1 %112, i1 %113
  br i1 %.in246, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %109
  %114 = add i64 %16, 1
  %115 = shl i64 %16, 3
  %invariant.gep = getelementptr i8, ptr %3, i64 -8
  br label %116

116:                                              ; preds = %.lr.ph, %._crit_edge242
  %.1173247 = phi i64 [ %.0168, %.lr.ph ], [ %168, %._crit_edge242 ]
  %117 = load i64, ptr %2, align 8, !tbaa !5
  %118 = sub nsw i64 %117, %.1173247
  %119 = add nsw i64 %118, 1
  store i64 %119, ptr %12, align 8, !tbaa !5
  %120 = call i64 @llvm.smin.i64(i64 %.0169211, i64 %119)
  store i64 %120, ptr %13, align 8, !tbaa !5
  %121 = add nsw i64 %120, %.1173247
  %122 = load i64, ptr %0, align 8, !tbaa !5
  %.not194 = icmp sgt i64 %121, %122
  %.pre260 = load i64, ptr %1, align 8, !tbaa !5
  br i1 %.not194, label %141, label %123

123:                                              ; preds = %116
  %reass.sub = sub i64 %.pre260, %.1173247
  %124 = add i64 %reass.sub, 1
  store i64 %124, ptr %11, align 8, !tbaa !5
  %125 = mul nsw i64 %.1173247, %16
  %126 = getelementptr %struct.complex, ptr %18, i64 %.1173247
  %127 = getelementptr %struct.complex, ptr %126, i64 %125
  %128 = getelementptr inbounds %struct.complex, ptr %19, i64 %.1173247
  %129 = call i32 @clarft_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef %127, ptr noundef nonnull %4, ptr noundef nonnull %128, ptr noundef nonnull %6, ptr noundef nonnull %15) #5
  %130 = load i64, ptr %0, align 8, !tbaa !5
  %131 = load i64, ptr %13, align 8, !tbaa !5
  %132 = add i64 %130, 1
  %133 = add i64 %.1173247, %131
  %134 = sub i64 %132, %133
  store i64 %134, ptr %11, align 8, !tbaa !5
  %135 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub251 = sub i64 %135, %.1173247
  %136 = add i64 %reass.sub251, 1
  store i64 %136, ptr %12, align 8, !tbaa !5
  %137 = getelementptr %struct.complex, ptr %126, i64 %131
  %138 = getelementptr %struct.complex, ptr %137, i64 %125
  %139 = getelementptr %struct.complex, ptr %6, i64 %131
  %140 = call i32 @clarfb_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %127, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %15, ptr noundef %138, ptr noundef nonnull %4, ptr noundef %139, ptr noundef nonnull %15) #5
  %.pre259 = load i64, ptr %1, align 8, !tbaa !5
  br label %141

141:                                              ; preds = %123, %116
  %142 = phi i64 [ %.pre259, %123 ], [ %.pre260, %116 ]
  %reass.sub252 = sub i64 %142, %.1173247
  %143 = add i64 %reass.sub252, 1
  store i64 %143, ptr %11, align 8, !tbaa !5
  %144 = mul i64 %.1173247, %114
  %145 = getelementptr inbounds %struct.complex, ptr %18, i64 %144
  %146 = getelementptr inbounds %struct.complex, ptr %19, i64 %.1173247
  %147 = call i32 @cungl2_(ptr noundef nonnull %13, ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef %145, ptr noundef nonnull %4, ptr noundef nonnull %146, ptr noundef nonnull %6, ptr noundef nonnull %14) #5
  %148 = add i64 %.1173247, -1
  store i64 %148, ptr %11, align 8, !tbaa !5
  %.not195.not238 = icmp sgt i64 %.1173247, 1
  br i1 %.not195.not238, label %.lr.ph241, label %._crit_edge242

.lr.ph241:                                        ; preds = %141
  %149 = load i64, ptr %13, align 8, !tbaa !5
  %150 = add i64 %149, %.1173247
  %151 = add nsw i64 %150, -1
  store i64 %151, ptr %12, align 8, !tbaa !5
  %.not196.not236 = icmp sgt i64 %149, 0
  br i1 %.not196.not236, label %.lr.ph.us243.preheader, label %._crit_edge242

.lr.ph.us243.preheader:                           ; preds = %.lr.ph241
  %152 = shl i64 %.1173247, 3
  %153 = add nuw i64 %.1173247, 1
  %smax = call i64 @llvm.smax.i64(i64 %150, i64 %153)
  %154 = sub i64 %smax, %.1173247
  %155 = shl i64 %154, 3
  %gep = getelementptr i8, ptr %invariant.gep, i64 %152
  %156 = add nsw i64 %.1173247, -2
  %xtraiter261 = and i64 %148, 7
  %157 = icmp ult i64 %156, 7
  br i1 %157, label %._crit_edge242.loopexit.unr-lcssa, label %.lr.ph.us243.preheader.new

.lr.ph.us243.preheader.new:                       ; preds = %.lr.ph.us243.preheader
  %unroll_iter264 = and i64 %148, -8
  br label %.lr.ph.us243

.lr.ph.us243:                                     ; preds = %.lr.ph.us243, %.lr.ph.us243.preheader.new
  %indvar255 = phi i64 [ 0, %.lr.ph.us243.preheader.new ], [ %indvar.next256.7, %.lr.ph.us243 ]
  %niter265 = phi i64 [ 0, %.lr.ph.us243.preheader.new ], [ %niter265.next.7, %.lr.ph.us243 ]
  %158 = mul i64 %115, %indvar255
  %scevgep257 = getelementptr i8, ptr %gep, i64 %158
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256 = or disjoint i64 %indvar255, 1
  %159 = mul i64 %115, %indvar.next256
  %scevgep257.1 = getelementptr i8, ptr %gep, i64 %159
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.1, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.1 = or disjoint i64 %indvar255, 2
  %160 = mul i64 %115, %indvar.next256.1
  %scevgep257.2 = getelementptr i8, ptr %gep, i64 %160
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.2, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.2 = or disjoint i64 %indvar255, 3
  %161 = mul i64 %115, %indvar.next256.2
  %scevgep257.3 = getelementptr i8, ptr %gep, i64 %161
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.3, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.3 = or disjoint i64 %indvar255, 4
  %162 = mul i64 %115, %indvar.next256.3
  %scevgep257.4 = getelementptr i8, ptr %gep, i64 %162
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.4, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.4 = or disjoint i64 %indvar255, 5
  %163 = mul i64 %115, %indvar.next256.4
  %scevgep257.5 = getelementptr i8, ptr %gep, i64 %163
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.5, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.5 = or disjoint i64 %indvar255, 6
  %164 = mul i64 %115, %indvar.next256.5
  %scevgep257.6 = getelementptr i8, ptr %gep, i64 %164
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.6, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.6 = or disjoint i64 %indvar255, 7
  %165 = mul i64 %115, %indvar.next256.6
  %scevgep257.7 = getelementptr i8, ptr %gep, i64 %165
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.7, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.7 = add nuw nsw i64 %indvar255, 8
  %niter265.next.7 = add i64 %niter265, 8
  %niter265.ncmp.7 = icmp eq i64 %niter265.next.7, %unroll_iter264
  br i1 %niter265.ncmp.7, label %._crit_edge242.loopexit.unr-lcssa, label %.lr.ph.us243, !llvm.loop !18

._crit_edge242.loopexit.unr-lcssa:                ; preds = %.lr.ph.us243, %.lr.ph.us243.preheader
  %indvar255.unr = phi i64 [ 0, %.lr.ph.us243.preheader ], [ %indvar.next256.7, %.lr.ph.us243 ]
  %lcmp.mod263.not = icmp eq i64 %xtraiter261, 0
  br i1 %lcmp.mod263.not, label %._crit_edge242, label %.lr.ph.us243.epil

.lr.ph.us243.epil:                                ; preds = %._crit_edge242.loopexit.unr-lcssa, %.lr.ph.us243.epil
  %indvar255.epil = phi i64 [ %indvar.next256.epil, %.lr.ph.us243.epil ], [ %indvar255.unr, %._crit_edge242.loopexit.unr-lcssa ]
  %epil.iter262 = phi i64 [ %epil.iter262.next, %.lr.ph.us243.epil ], [ 0, %._crit_edge242.loopexit.unr-lcssa ]
  %166 = mul i64 %115, %indvar255.epil
  %scevgep257.epil = getelementptr i8, ptr %gep, i64 %166
  call void @llvm.memset.p0.i64(ptr align 4 %scevgep257.epil, i8 0, i64 %155, i1 false), !tbaa !13
  %indvar.next256.epil = add nuw nsw i64 %indvar255.epil, 1
  %epil.iter262.next = add i64 %epil.iter262, 1
  %epil.iter262.cmp.not = icmp eq i64 %epil.iter262.next, %xtraiter261
  br i1 %epil.iter262.cmp.not, label %._crit_edge242, label %.lr.ph.us243.epil, !llvm.loop !19

._crit_edge242:                                   ; preds = %._crit_edge242.loopexit.unr-lcssa, %.lr.ph.us243.epil, %.lr.ph241, %141
  %167 = load i64, ptr %10, align 8, !tbaa !5
  %168 = add nsw i64 %167, %.1173247
  %169 = icmp slt i64 %167, 0
  %170 = icmp sgt i64 %168, 0
  %171 = icmp slt i64 %168, 2
  %.in = select i1 %169, i1 %170, i1 %171
  br i1 %.in, label %116, label %.loopexit, !llvm.loop !20

.loopexit:                                        ; preds = %._crit_edge242, %109, %107
  %172 = sitofp i64 %.0165214 to float
  store float %172, ptr %6, align 4, !tbaa !9
  store float 0.000000e+00, ptr %24, align 4, !tbaa !12
  br label %173

173:                                              ; preds = %42, %.loopexit, %45, %.thread
  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
  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 @cungl2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @clarfb_(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 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, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 4}
!11 = !{!"float", !7, i64 0}
!12 = !{!10, !11, i64 4}
!13 = !{!11, !11, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.unroll.disable"}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !15}


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