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

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

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

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

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

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

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

76:                                               ; preds = %70
  br label %80

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

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

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

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

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

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

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

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

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

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

110:                                              ; preds = %102, %101
  %111 = load i64, ptr %36, align 8, !tbaa !9
  %112 = sitofp i64 %111 to double
  %113 = load ptr, ptr %15, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.doublecomplex, ptr %113, i64 1
  %115 = getelementptr inbounds %struct.doublecomplex, ptr %114, i32 0, i32 0
  store double %112, ptr %115, align 8, !tbaa !11
  %116 = load ptr, ptr %15, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.doublecomplex, ptr %116, i64 1
  %118 = getelementptr inbounds %struct.doublecomplex, ptr %117, i32 0, i32 1
  store double 0.000000e+00, ptr %118, align 8, !tbaa !14
  %119 = load ptr, ptr %16, align 8, !tbaa !5
  %120 = load i64, ptr %119, align 8, !tbaa !9
  %121 = load ptr, ptr %10, align 8, !tbaa !5
  %122 = load i64, ptr %121, align 8, !tbaa !9
  %123 = icmp sge i64 1, %122
  br i1 %123, label %124, label %125

124:                                              ; preds = %110
  br label %128

125:                                              ; preds = %110
  %126 = load ptr, ptr %10, align 8, !tbaa !5
  %127 = load i64, ptr %126, align 8, !tbaa !9
  br label %128

128:                                              ; preds = %125, %124
  %129 = phi i64 [ 1, %124 ], [ %127, %125 ]
  %130 = icmp slt i64 %120, %129
  br i1 %130, label %131, label %136

131:                                              ; preds = %128
  %132 = load i64, ptr %37, align 8, !tbaa !9
  %133 = icmp ne i64 %132, 0
  br i1 %133, label %136, label %134

134:                                              ; preds = %131
  %135 = load ptr, ptr %17, align 8, !tbaa !5
  store i64 -7, ptr %135, align 8, !tbaa !9
  br label %136

136:                                              ; preds = %134, %131, %128
  br label %137

137:                                              ; preds = %136, %87
  %138 = load ptr, ptr %17, align 8, !tbaa !5
  %139 = load i64, ptr %138, align 8, !tbaa !9
  %140 = icmp ne i64 %139, 0
  br i1 %140, label %141, label %146

141:                                              ; preds = %137
  %142 = load ptr, ptr %17, align 8, !tbaa !5
  %143 = load i64, ptr %142, align 8, !tbaa !9
  %144 = sub nsw i64 0, %143
  store i64 %144, ptr %20, align 8, !tbaa !9
  %145 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %20)
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %458

146:                                              ; preds = %137
  %147 = load i64, ptr %37, align 8, !tbaa !9
  %148 = icmp ne i64 %147, 0
  br i1 %148, label %149, label %150

149:                                              ; preds = %146
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %458

150:                                              ; preds = %146
  br label %151

151:                                              ; preds = %150
  %152 = load ptr, ptr %10, align 8, !tbaa !5
  %153 = load i64, ptr %152, align 8, !tbaa !9
  %154 = icmp eq i64 %153, 0
  br i1 %154, label %155, label %156

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

156:                                              ; preds = %151
  %157 = load ptr, ptr %10, align 8, !tbaa !5
  %158 = load i64, ptr %157, align 8, !tbaa !9
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = icmp eq i64 %158, %160
  br i1 %161, label %162, label %183

162:                                              ; preds = %156
  %163 = load ptr, ptr %11, align 8, !tbaa !5
  %164 = load i64, ptr %163, align 8, !tbaa !9
  store i64 %164, ptr %20, align 8, !tbaa !9
  store i64 1, ptr %25, align 8, !tbaa !9
  br label %165

165:                                              ; preds = %179, %162
  %166 = load i64, ptr %25, align 8, !tbaa !9
  %167 = load i64, ptr %20, align 8, !tbaa !9
  %168 = icmp sle i64 %166, %167
  br i1 %168, label %169, label %182

169:                                              ; preds = %165
  %170 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %170, ptr %21, align 8, !tbaa !9
  %171 = load ptr, ptr %14, align 8, !tbaa !5
  %172 = load i64, ptr %21, align 8, !tbaa !9
  %173 = getelementptr inbounds %struct.doublecomplex, ptr %171, i64 %172
  %174 = getelementptr inbounds %struct.doublecomplex, ptr %173, i32 0, i32 0
  store double 0.000000e+00, ptr %174, align 8, !tbaa !11
  %175 = load ptr, ptr %14, align 8, !tbaa !5
  %176 = load i64, ptr %21, align 8, !tbaa !9
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %175, i64 %176
  %178 = getelementptr inbounds %struct.doublecomplex, ptr %177, i32 0, i32 1
  store double 0.000000e+00, ptr %178, align 8, !tbaa !14
  br label %179

179:                                              ; preds = %169
  %180 = load i64, ptr %25, align 8, !tbaa !9
  %181 = add nsw i64 %180, 1
  store i64 %181, ptr %25, align 8, !tbaa !9
  br label %165, !llvm.loop !15

182:                                              ; preds = %165
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %458

183:                                              ; preds = %156
  br label %184

184:                                              ; preds = %183
  store i64 2, ptr %34, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  %185 = load ptr, ptr %10, align 8, !tbaa !5
  %186 = load i64, ptr %185, align 8, !tbaa !9
  store i64 %186, ptr %33, align 8, !tbaa !9
  %187 = load i64, ptr %28, align 8, !tbaa !9
  %188 = icmp sgt i64 %187, 1
  br i1 %188, label %189, label %240

189:                                              ; preds = %184
  %190 = load i64, ptr %28, align 8, !tbaa !9
  %191 = load ptr, ptr %10, align 8, !tbaa !5
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = icmp slt i64 %190, %192
  br i1 %193, label %194, label %240

194:                                              ; preds = %189
  store i64 0, ptr %20, align 8, !tbaa !9
  %195 = load ptr, ptr %10, align 8, !tbaa !5
  %196 = load ptr, ptr %11, align 8, !tbaa !5
  %197 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %195, ptr noundef %196, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %197, ptr %21, align 8, !tbaa !9
  %198 = load i64, ptr %20, align 8, !tbaa !9
  %199 = load i64, ptr %21, align 8, !tbaa !9
  %200 = icmp sge i64 %198, %199
  br i1 %200, label %201, label %203

201:                                              ; preds = %194
  %202 = load i64, ptr %20, align 8, !tbaa !9
  br label %205

203:                                              ; preds = %194
  %204 = load i64, ptr %21, align 8, !tbaa !9
  br label %205

205:                                              ; preds = %203, %201
  %206 = phi i64 [ %202, %201 ], [ %204, %203 ]
  store i64 %206, ptr %32, align 8, !tbaa !9
  %207 = load i64, ptr %32, align 8, !tbaa !9
  %208 = load ptr, ptr %10, align 8, !tbaa !5
  %209 = load i64, ptr %208, align 8, !tbaa !9
  %210 = icmp slt i64 %207, %209
  br i1 %210, label %211, label %239

211:                                              ; preds = %205
  %212 = load ptr, ptr %10, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  store i64 %213, ptr %35, align 8, !tbaa !9
  %214 = load i64, ptr %35, align 8, !tbaa !9
  %215 = load i64, ptr %28, align 8, !tbaa !9
  %216 = mul nsw i64 %214, %215
  store i64 %216, ptr %33, align 8, !tbaa !9
  %217 = load ptr, ptr %16, align 8, !tbaa !5
  %218 = load i64, ptr %217, align 8, !tbaa !9
  %219 = load i64, ptr %33, align 8, !tbaa !9
  %220 = icmp slt i64 %218, %219
  br i1 %220, label %221, label %238

221:                                              ; preds = %211
  %222 = load ptr, ptr %16, align 8, !tbaa !5
  %223 = load i64, ptr %222, align 8, !tbaa !9
  %224 = load i64, ptr %35, align 8, !tbaa !9
  %225 = sdiv i64 %223, %224
  store i64 %225, ptr %28, align 8, !tbaa !9
  store i64 2, ptr %20, align 8, !tbaa !9
  %226 = load ptr, ptr %10, align 8, !tbaa !5
  %227 = load ptr, ptr %11, align 8, !tbaa !5
  %228 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %226, ptr noundef %227, ptr noundef @c_n1, ptr noundef @c_n1)
  store i64 %228, ptr %21, align 8, !tbaa !9
  %229 = load i64, ptr %20, align 8, !tbaa !9
  %230 = load i64, ptr %21, align 8, !tbaa !9
  %231 = icmp sge i64 %229, %230
  br i1 %231, label %232, label %234

232:                                              ; preds = %221
  %233 = load i64, ptr %20, align 8, !tbaa !9
  br label %236

234:                                              ; preds = %221
  %235 = load i64, ptr %21, align 8, !tbaa !9
  br label %236

236:                                              ; preds = %234, %232
  %237 = phi i64 [ %233, %232 ], [ %235, %234 ]
  store i64 %237, ptr %34, align 8, !tbaa !9
  br label %238

238:                                              ; preds = %236, %211
  br label %239

239:                                              ; preds = %238, %205
  br label %240

240:                                              ; preds = %239, %189, %184
  %241 = load i64, ptr %28, align 8, !tbaa !9
  %242 = load i64, ptr %34, align 8, !tbaa !9
  %243 = icmp sge i64 %241, %242
  br i1 %243, label %244, label %427

244:                                              ; preds = %240
  %245 = load i64, ptr %28, align 8, !tbaa !9
  %246 = load ptr, ptr %10, align 8, !tbaa !5
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = icmp slt i64 %245, %247
  br i1 %248, label %249, label %427

249:                                              ; preds = %244
  %250 = load i64, ptr %32, align 8, !tbaa !9
  %251 = load ptr, ptr %10, align 8, !tbaa !5
  %252 = load i64, ptr %251, align 8, !tbaa !9
  %253 = icmp slt i64 %250, %252
  br i1 %253, label %254, label %427

254:                                              ; preds = %249
  %255 = load ptr, ptr %10, align 8, !tbaa !5
  %256 = load i64, ptr %255, align 8, !tbaa !9
  %257 = add nsw i64 %256, 1
  store i64 %257, ptr %20, align 8, !tbaa !9
  %258 = load i64, ptr %20, align 8, !tbaa !9
  %259 = load ptr, ptr %11, align 8, !tbaa !5
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = icmp sle i64 %258, %260
  br i1 %261, label %262, label %264

262:                                              ; preds = %254
  %263 = load i64, ptr %20, align 8, !tbaa !9
  br label %267

264:                                              ; preds = %254
  %265 = load ptr, ptr %11, align 8, !tbaa !5
  %266 = load i64, ptr %265, align 8, !tbaa !9
  br label %267

267:                                              ; preds = %264, %262
  %268 = phi i64 [ %263, %262 ], [ %266, %264 ]
  store i64 %268, ptr %26, align 8, !tbaa !9
  %269 = load ptr, ptr %10, align 8, !tbaa !5
  %270 = load i64, ptr %269, align 8, !tbaa !9
  %271 = load i64, ptr %32, align 8, !tbaa !9
  %272 = sub nsw i64 %270, %271
  %273 = sub nsw i64 %272, 1
  %274 = load i64, ptr %28, align 8, !tbaa !9
  %275 = sdiv i64 %273, %274
  %276 = load i64, ptr %28, align 8, !tbaa !9
  %277 = mul nsw i64 %275, %276
  store i64 %277, ptr %29, align 8, !tbaa !9
  %278 = load ptr, ptr %10, align 8, !tbaa !5
  %279 = load i64, ptr %278, align 8, !tbaa !9
  store i64 %279, ptr %20, align 8, !tbaa !9
  %280 = load i64, ptr %29, align 8, !tbaa !9
  %281 = load i64, ptr %28, align 8, !tbaa !9
  %282 = add nsw i64 %280, %281
  store i64 %282, ptr %21, align 8, !tbaa !9
  %283 = load i64, ptr %20, align 8, !tbaa !9
  %284 = load i64, ptr %21, align 8, !tbaa !9
  %285 = icmp sle i64 %283, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %267
  %287 = load i64, ptr %20, align 8, !tbaa !9
  br label %290

288:                                              ; preds = %267
  %289 = load i64, ptr %21, align 8, !tbaa !9
  br label %290

290:                                              ; preds = %288, %286
  %291 = phi i64 [ %287, %286 ], [ %289, %288 ]
  store i64 %291, ptr %30, align 8, !tbaa !9
  %292 = load ptr, ptr %10, align 8, !tbaa !5
  %293 = load i64, ptr %292, align 8, !tbaa !9
  %294 = load i64, ptr %30, align 8, !tbaa !9
  %295 = sub nsw i64 %293, %294
  %296 = add nsw i64 %295, 1
  store i64 %296, ptr %20, align 8, !tbaa !9
  %297 = load i64, ptr %28, align 8, !tbaa !9
  %298 = sub nsw i64 0, %297
  store i64 %298, ptr %21, align 8, !tbaa !9
  %299 = load ptr, ptr %10, align 8, !tbaa !5
  %300 = load i64, ptr %299, align 8, !tbaa !9
  %301 = load i64, ptr %30, align 8, !tbaa !9
  %302 = sub nsw i64 %300, %301
  %303 = load i64, ptr %29, align 8, !tbaa !9
  %304 = add nsw i64 %302, %303
  %305 = add nsw i64 %304, 1
  store i64 %305, ptr %25, align 8, !tbaa !9
  br label %306

306:                                              ; preds = %418, %290
  %307 = load i64, ptr %21, align 8, !tbaa !9
  %308 = icmp slt i64 %307, 0
  br i1 %308, label %309, label %314

309:                                              ; preds = %306
  %310 = load i64, ptr %25, align 8, !tbaa !9
  %311 = load i64, ptr %20, align 8, !tbaa !9
  %312 = icmp sge i64 %310, %311
  %313 = zext i1 %312 to i32
  br label %319

314:                                              ; preds = %306
  %315 = load i64, ptr %25, align 8, !tbaa !9
  %316 = load i64, ptr %20, align 8, !tbaa !9
  %317 = icmp sle i64 %315, %316
  %318 = zext i1 %317 to i32
  br label %319

319:                                              ; preds = %314, %309
  %320 = phi i32 [ %313, %309 ], [ %318, %314 ]
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %322, label %422

322:                                              ; preds = %319
  %323 = load ptr, ptr %10, align 8, !tbaa !5
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = load i64, ptr %25, align 8, !tbaa !9
  %326 = sub nsw i64 %324, %325
  %327 = add nsw i64 %326, 1
  store i64 %327, ptr %22, align 8, !tbaa !9
  %328 = load i64, ptr %22, align 8, !tbaa !9
  %329 = load i64, ptr %28, align 8, !tbaa !9
  %330 = icmp sle i64 %328, %329
  br i1 %330, label %331, label %333

331:                                              ; preds = %322
  %332 = load i64, ptr %22, align 8, !tbaa !9
  br label %335

333:                                              ; preds = %322
  %334 = load i64, ptr %28, align 8, !tbaa !9
  br label %335

335:                                              ; preds = %333, %331
  %336 = phi i64 [ %332, %331 ], [ %334, %333 ]
  store i64 %336, ptr %27, align 8, !tbaa !9
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = load i64, ptr %337, align 8, !tbaa !9
  %339 = load i64, ptr %25, align 8, !tbaa !9
  %340 = sub nsw i64 %338, %339
  %341 = add nsw i64 %340, 1
  store i64 %341, ptr %22, align 8, !tbaa !9
  %342 = load ptr, ptr %11, align 8, !tbaa !5
  %343 = load i64, ptr %342, align 8, !tbaa !9
  %344 = load ptr, ptr %10, align 8, !tbaa !5
  %345 = load i64, ptr %344, align 8, !tbaa !9
  %346 = sub nsw i64 %343, %345
  store i64 %346, ptr %23, align 8, !tbaa !9
  %347 = load ptr, ptr %12, align 8, !tbaa !5
  %348 = load i64, ptr %25, align 8, !tbaa !9
  %349 = load i64, ptr %25, align 8, !tbaa !9
  %350 = load i64, ptr %18, align 8, !tbaa !9
  %351 = mul nsw i64 %349, %350
  %352 = add nsw i64 %348, %351
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %347, i64 %352
  %354 = load ptr, ptr %13, align 8, !tbaa !5
  %355 = load ptr, ptr %14, align 8, !tbaa !5
  %356 = load i64, ptr %25, align 8, !tbaa !9
  %357 = getelementptr inbounds %struct.doublecomplex, ptr %355, i64 %356
  %358 = load ptr, ptr %15, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.doublecomplex, ptr %358, i64 1
  %360 = call i32 @zlatrz_(ptr noundef %27, ptr noundef %22, ptr noundef %23, ptr noundef %353, ptr noundef %354, ptr noundef %357, ptr noundef %359)
  %361 = load i64, ptr %25, align 8, !tbaa !9
  %362 = icmp sgt i64 %361, 1
  br i1 %362, label %363, label %417

363:                                              ; preds = %335
  %364 = load ptr, ptr %11, align 8, !tbaa !5
  %365 = load i64, ptr %364, align 8, !tbaa !9
  %366 = load ptr, ptr %10, align 8, !tbaa !5
  %367 = load i64, ptr %366, align 8, !tbaa !9
  %368 = sub nsw i64 %365, %367
  store i64 %368, ptr %22, align 8, !tbaa !9
  %369 = load ptr, ptr %12, align 8, !tbaa !5
  %370 = load i64, ptr %25, align 8, !tbaa !9
  %371 = load i64, ptr %26, align 8, !tbaa !9
  %372 = load i64, ptr %18, align 8, !tbaa !9
  %373 = mul nsw i64 %371, %372
  %374 = add nsw i64 %370, %373
  %375 = getelementptr inbounds %struct.doublecomplex, ptr %369, i64 %374
  %376 = load ptr, ptr %13, align 8, !tbaa !5
  %377 = load ptr, ptr %14, align 8, !tbaa !5
  %378 = load i64, ptr %25, align 8, !tbaa !9
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %377, i64 %378
  %380 = load ptr, ptr %15, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.doublecomplex, ptr %380, i64 1
  %382 = call i32 @zlarzt_(ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %22, ptr noundef %27, ptr noundef %375, ptr noundef %376, ptr noundef %379, ptr noundef %381, ptr noundef %35)
  %383 = load i64, ptr %25, align 8, !tbaa !9
  %384 = sub nsw i64 %383, 1
  store i64 %384, ptr %22, align 8, !tbaa !9
  %385 = load ptr, ptr %11, align 8, !tbaa !5
  %386 = load i64, ptr %385, align 8, !tbaa !9
  %387 = load i64, ptr %25, align 8, !tbaa !9
  %388 = sub nsw i64 %386, %387
  %389 = add nsw i64 %388, 1
  store i64 %389, ptr %23, align 8, !tbaa !9
  %390 = load ptr, ptr %11, align 8, !tbaa !5
  %391 = load i64, ptr %390, align 8, !tbaa !9
  %392 = load ptr, ptr %10, align 8, !tbaa !5
  %393 = load i64, ptr %392, align 8, !tbaa !9
  %394 = sub nsw i64 %391, %393
  store i64 %394, ptr %24, align 8, !tbaa !9
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = load i64, ptr %25, align 8, !tbaa !9
  %397 = load i64, ptr %26, align 8, !tbaa !9
  %398 = load i64, ptr %18, align 8, !tbaa !9
  %399 = mul nsw i64 %397, %398
  %400 = add nsw i64 %396, %399
  %401 = getelementptr inbounds %struct.doublecomplex, ptr %395, i64 %400
  %402 = load ptr, ptr %13, align 8, !tbaa !5
  %403 = load ptr, ptr %15, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %403, i64 1
  %405 = load ptr, ptr %12, align 8, !tbaa !5
  %406 = load i64, ptr %25, align 8, !tbaa !9
  %407 = load i64, ptr %18, align 8, !tbaa !9
  %408 = mul nsw i64 %406, %407
  %409 = add nsw i64 %408, 1
  %410 = getelementptr inbounds %struct.doublecomplex, ptr %405, i64 %409
  %411 = load ptr, ptr %13, align 8, !tbaa !5
  %412 = load ptr, ptr %15, align 8, !tbaa !5
  %413 = load i64, ptr %27, align 8, !tbaa !9
  %414 = add nsw i64 %413, 1
  %415 = getelementptr inbounds %struct.doublecomplex, ptr %412, i64 %414
  %416 = call i32 @zlarzb_(ptr noundef @.str.5, ptr noundef @.str.6, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %22, ptr noundef %23, ptr noundef %27, ptr noundef %24, ptr noundef %401, ptr noundef %402, ptr noundef %404, ptr noundef %35, ptr noundef %410, ptr noundef %411, ptr noundef %415, ptr noundef %35)
  br label %417

417:                                              ; preds = %363, %335
  br label %418

418:                                              ; preds = %417
  %419 = load i64, ptr %21, align 8, !tbaa !9
  %420 = load i64, ptr %25, align 8, !tbaa !9
  %421 = add nsw i64 %420, %419
  store i64 %421, ptr %25, align 8, !tbaa !9
  br label %306, !llvm.loop !17

422:                                              ; preds = %319
  %423 = load i64, ptr %25, align 8, !tbaa !9
  %424 = load i64, ptr %28, align 8, !tbaa !9
  %425 = add nsw i64 %423, %424
  %426 = sub nsw i64 %425, 1
  store i64 %426, ptr %31, align 8, !tbaa !9
  br label %430

427:                                              ; preds = %249, %244, %240
  %428 = load ptr, ptr %10, align 8, !tbaa !5
  %429 = load i64, ptr %428, align 8, !tbaa !9
  store i64 %429, ptr %31, align 8, !tbaa !9
  br label %430

430:                                              ; preds = %427, %422
  %431 = load i64, ptr %31, align 8, !tbaa !9
  %432 = icmp sgt i64 %431, 0
  br i1 %432, label %433, label %449

433:                                              ; preds = %430
  %434 = load ptr, ptr %11, align 8, !tbaa !5
  %435 = load i64, ptr %434, align 8, !tbaa !9
  %436 = load ptr, ptr %10, align 8, !tbaa !5
  %437 = load i64, ptr %436, align 8, !tbaa !9
  %438 = sub nsw i64 %435, %437
  store i64 %438, ptr %21, align 8, !tbaa !9
  %439 = load ptr, ptr %11, align 8, !tbaa !5
  %440 = load ptr, ptr %12, align 8, !tbaa !5
  %441 = load i64, ptr %19, align 8, !tbaa !9
  %442 = getelementptr inbounds %struct.doublecomplex, ptr %440, i64 %441
  %443 = load ptr, ptr %13, align 8, !tbaa !5
  %444 = load ptr, ptr %14, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.doublecomplex, ptr %444, i64 1
  %446 = load ptr, ptr %15, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.doublecomplex, ptr %446, i64 1
  %448 = call i32 @zlatrz_(ptr noundef %31, ptr noundef %439, ptr noundef %21, ptr noundef %442, ptr noundef %443, ptr noundef %445, ptr noundef %447)
  br label %449

449:                                              ; preds = %433, %430
  %450 = load i64, ptr %36, align 8, !tbaa !9
  %451 = sitofp i64 %450 to double
  %452 = load ptr, ptr %15, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.doublecomplex, ptr %452, i64 1
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %453, i32 0, i32 0
  store double %451, ptr %454, align 8, !tbaa !11
  %455 = load ptr, ptr %15, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.doublecomplex, ptr %455, i64 1
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %456, i32 0, i32 1
  store double 0.000000e+00, ptr %457, align 8, !tbaa !14
  store i32 0, ptr %9, align 4
  store i32 1, ptr %38, align 4
  br label %458

458:                                              ; preds = %449, %182, %155, %149, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  %459 = load i32, ptr %9, align 4
  ret i32 %459
}

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !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 = distinct !{!17, !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
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

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

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

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

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

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

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

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

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

47:                                               ; preds = %.thread
  %48 = icmp eq i64 %.pre205207, 0
  %or.cond208 = or i1 %22, %48
  br i1 %or.cond208, label %.loopexit, label %49

49:                                               ; preds = %47
  %50 = load i64, ptr %1, align 8, !tbaa !5
  %51 = icmp eq i64 %.pre205207, %50
  br i1 %51, label %52, label %54

52:                                               ; preds = %49
  %.not168198 = icmp slt i64 %.pre205207, 1
  br i1 %.not168198, label %.loopexit, label %.lr.ph201.preheader

.lr.ph201.preheader:                              ; preds = %52
  %53 = shl nuw i64 %.pre205207, 4
  tail call void @llvm.memset.p0.i64(ptr align 8 %4, i8 0, i64 %53, i1 false), !tbaa !13
  br label %.loopexit

54:                                               ; preds = %49
  %55 = icmp sgt i64 %.0146, 1
  %56 = icmp slt i64 %.0146, %.pre205207
  %or.cond170 = and i1 %55, %56
  br i1 %or.cond170, label %57, label %70

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

62:                                               ; preds = %57
  store i64 %60, ptr %16, align 8, !tbaa !5
  %63 = mul nsw i64 %60, %.0146
  %64 = load i64, ptr %6, align 8, !tbaa !5
  %65 = icmp slt i64 %64, %63
  br i1 %65, label %66, label %.thread182

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

70:                                               ; preds = %66, %54
  %.pre205 = phi i64 [ %.pre205.pre, %66 ], [ %.pre205207, %54 ]
  %.2 = phi i64 [ %67, %66 ], [ %.0146, %54 ]
  %.0145 = phi i64 [ %59, %66 ], [ 1, %54 ]
  %.0144 = phi i64 [ %69, %66 ], [ 2, %54 ]
  %.not164 = icmp slt i64 %.2, %.0144
  br i1 %.not164, label %122, label %.thread182

.thread182:                                       ; preds = %70, %57, %62
  %71 = phi i64 [ %60, %62 ], [ %60, %57 ], [ %.pre205, %70 ]
  %.0145188 = phi i64 [ %59, %62 ], [ %59, %57 ], [ %.0145, %70 ]
  %.2187 = phi i64 [ %.0146, %62 ], [ %.0146, %57 ], [ %.2, %70 ]
  %72 = icmp slt i64 %.2187, %71
  %73 = icmp slt i64 %.0145188, %71
  %or.cond171 = and i1 %72, %73
  br i1 %or.cond171, label %74, label %122

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

.lr.ph:                                           ; preds = %74
  %85 = add nuw nsw i64 %71, 1
  %.not165.not = icmp slt i64 %71, %75
  %. = select i1 %.not165.not, i64 %85, i64 %75
  %86 = mul nsw i64 %., %17
  %87 = icmp sgt i64 %.2187, 0
  br label %88

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

102:                                              ; preds = %88
  %103 = load i64, ptr %1, align 8, !tbaa !5
  %104 = load i64, ptr %0, align 8, !tbaa !5
  %105 = sub nsw i64 %103, %104
  store i64 %105, ptr %11, align 8, !tbaa !5
  %106 = getelementptr %struct.doublecomplex, ptr %97, i64 %86
  %107 = call i32 @zlarzt_(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef %106, ptr noundef nonnull %3, ptr noundef nonnull %99, ptr noundef nonnull %5, ptr noundef nonnull %16) #5
  %108 = add nsw i64 %.1149195, -1
  store i64 %108, ptr %11, align 8, !tbaa !5
  %109 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub203 = sub i64 %109, %.1149195
  %110 = add i64 %reass.sub203, 1
  store i64 %110, ptr %12, align 8, !tbaa !5
  %111 = load i64, ptr %0, align 8, !tbaa !5
  %112 = sub nsw i64 %109, %111
  store i64 %112, ptr %13, align 8, !tbaa !5
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %96
  %113 = load i64, ptr %14, align 8, !tbaa !5
  %114 = getelementptr %struct.doublecomplex, ptr %5, i64 %113
  %115 = call i32 @zlarzb_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef nonnull %13, ptr noundef %106, ptr noundef nonnull %3, ptr noundef nonnull %5, ptr noundef nonnull %16, ptr noundef %gep, ptr noundef nonnull %3, ptr noundef %114, ptr noundef nonnull %16) #5
  br label %116

116:                                              ; preds = %88, %102
  %117 = sub i64 %.1149195, %.2187
  %118 = icmp sge i64 %117, %83
  %119 = icmp sle i64 %117, %83
  %.in = select i1 %87, i1 %118, i1 %119
  br i1 %.in, label %88, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %116, %74
  %.1149.lcssa = phi i64 [ %84, %74 ], [ %117, %116 ]
  %120 = add i64 %.2187, -1
  %121 = add i64 %120, %.1149.lcssa
  br label %122

122:                                              ; preds = %70, %.thread182, %._crit_edge
  %storemerge = phi i64 [ %121, %._crit_edge ], [ %71, %.thread182 ], [ %.pre205, %70 ]
  store i64 %storemerge, ptr %15, align 8, !tbaa !5
  %123 = icmp sgt i64 %storemerge, 0
  br i1 %123, label %124, label %129

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

129:                                              ; preds = %124, %122
  store double %.0143, ptr %5, align 8, !tbaa !9
  store double 0.000000e+00, ptr %42, align 8, !tbaa !12
  br label %.loopexit

.loopexit:                                        ; preds = %52, %.lr.ph201.preheader, %47, %129, %.thread177
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  ret i32 0
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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