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

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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i32, align 4
@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@c_n1 = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4
@c__4 = external hidden global i32, align 4
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8

; Function Attrs: nounwind uwtable
define dso_local void @zhetrd_hb2st_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) #0 {
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca float, align 4
  %37 = alloca %struct.doublecomplex, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca double, align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca %struct.doublecomplex, align 8
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca { double, double }, align 8
  %88 = alloca { double, double }, align 8
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store ptr %2, ptr %17, align 8, !tbaa !5
  store ptr %3, ptr %18, align 8, !tbaa !5
  store ptr %4, ptr %19, align 8, !tbaa !5
  store ptr %5, ptr %20, align 8, !tbaa !5
  store ptr %6, ptr %21, align 8, !tbaa !5
  store ptr %7, ptr %22, align 8, !tbaa !5
  store ptr %8, ptr %23, align 8, !tbaa !5
  store ptr %9, ptr %24, align 8, !tbaa !5
  store ptr %10, ptr %25, align 8, !tbaa !5
  store ptr %11, ptr %26, align 8, !tbaa !5
  store ptr %12, ptr %27, align 8, !tbaa !5
  store ptr %13, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %80) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #6
  %89 = load ptr, ptr %21, align 8, !tbaa !5
  %90 = load i32, ptr %89, align 4, !tbaa !9
  store i32 %90, ptr %29, align 4, !tbaa !9
  %91 = load i32, ptr %29, align 4, !tbaa !9
  %92 = mul nsw i32 %91, 1
  %93 = add nsw i32 1, %92
  store i32 %93, ptr %30, align 4, !tbaa !9
  %94 = load i32, ptr %30, align 4, !tbaa !9
  %95 = load ptr, ptr %20, align 8, !tbaa !5
  %96 = sext i32 %94 to i64
  %97 = sub i64 0, %96
  %98 = getelementptr inbounds %struct.doublecomplex, ptr %95, i64 %97
  store ptr %98, ptr %20, align 8, !tbaa !5
  %99 = load ptr, ptr %22, align 8, !tbaa !5
  %100 = getelementptr inbounds double, ptr %99, i32 -1
  store ptr %100, ptr %22, align 8, !tbaa !5
  %101 = load ptr, ptr %23, align 8, !tbaa !5
  %102 = getelementptr inbounds double, ptr %101, i32 -1
  store ptr %102, ptr %23, align 8, !tbaa !5
  %103 = load ptr, ptr %24, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.doublecomplex, ptr %103, i32 -1
  store ptr %104, ptr %24, align 8, !tbaa !5
  %105 = load ptr, ptr %26, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.doublecomplex, ptr %105, i32 -1
  store ptr %106, ptr %26, align 8, !tbaa !5
  store i32 0, ptr %51, align 4, !tbaa !9
  %107 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 0, ptr %107, align 4, !tbaa !9
  %108 = load ptr, ptr %15, align 8, !tbaa !5
  %109 = call i32 @lsame_(ptr noundef %108, ptr noundef @.str)
  store i32 %109, ptr %76, align 4, !tbaa !9
  %110 = load ptr, ptr %16, align 8, !tbaa !5
  %111 = call i32 @lsame_(ptr noundef %110, ptr noundef @.str.1)
  store i32 %111, ptr %59, align 4, !tbaa !9
  %112 = load ptr, ptr %17, align 8, !tbaa !5
  %113 = call i32 @lsame_(ptr noundef %112, ptr noundef @.str.2)
  store i32 %113, ptr %60, align 4, !tbaa !9
  %114 = load ptr, ptr %27, align 8, !tbaa !5
  %115 = load i32, ptr %114, align 4, !tbaa !9
  %116 = icmp eq i32 %115, -1
  br i1 %116, label %121, label %117

117:                                              ; preds = %14
  %118 = load ptr, ptr %25, align 8, !tbaa !5
  %119 = load i32, ptr %118, align 4, !tbaa !9
  %120 = icmp eq i32 %119, -1
  br label %121

121:                                              ; preds = %117, %14
  %122 = phi i1 [ true, %14 ], [ %120, %117 ]
  %123 = zext i1 %122 to i32
  store i32 %123, ptr %75, align 4, !tbaa !9
  %124 = load ptr, ptr %16, align 8, !tbaa !5
  %125 = load ptr, ptr %18, align 8, !tbaa !5
  %126 = load ptr, ptr %19, align 8, !tbaa !5
  %127 = call i32 @ilaenv2stage_(ptr noundef @c__2, ptr noundef @.str.3, ptr noundef %124, ptr noundef %125, ptr noundef %126, ptr noundef @c_n1, ptr noundef @c_n1)
  store i32 %127, ptr %66, align 4, !tbaa !9
  %128 = load ptr, ptr %16, align 8, !tbaa !5
  %129 = load ptr, ptr %18, align 8, !tbaa !5
  %130 = load ptr, ptr %19, align 8, !tbaa !5
  %131 = call i32 @ilaenv2stage_(ptr noundef @c__3, ptr noundef @.str.3, ptr noundef %128, ptr noundef %129, ptr noundef %130, ptr noundef %66, ptr noundef @c_n1)
  store i32 %131, ptr %52, align 4, !tbaa !9
  %132 = load ptr, ptr %16, align 8, !tbaa !5
  %133 = load ptr, ptr %18, align 8, !tbaa !5
  %134 = load ptr, ptr %19, align 8, !tbaa !5
  %135 = call i32 @ilaenv2stage_(ptr noundef @c__4, ptr noundef @.str.3, ptr noundef %132, ptr noundef %133, ptr noundef %134, ptr noundef %66, ptr noundef @c_n1)
  store i32 %135, ptr %57, align 4, !tbaa !9
  %136 = load i32, ptr %76, align 4, !tbaa !9
  %137 = icmp ne i32 %136, 0
  br i1 %137, label %144, label %138

138:                                              ; preds = %121
  %139 = load ptr, ptr %15, align 8, !tbaa !5
  %140 = call i32 @lsame_(ptr noundef %139, ptr noundef @.str.4)
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %144, label %142

142:                                              ; preds = %138
  %143 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -1, ptr %143, align 4, !tbaa !9
  br label %207

144:                                              ; preds = %138, %121
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  %146 = call i32 @lsame_(ptr noundef %145, ptr noundef @.str.4)
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %150, label %148

148:                                              ; preds = %144
  %149 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -2, ptr %149, align 4, !tbaa !9
  br label %206

150:                                              ; preds = %144
  %151 = load i32, ptr %60, align 4, !tbaa !9
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %159, label %153

153:                                              ; preds = %150
  %154 = load ptr, ptr %17, align 8, !tbaa !5
  %155 = call i32 @lsame_(ptr noundef %154, ptr noundef @.str.5)
  %156 = icmp ne i32 %155, 0
  br i1 %156, label %159, label %157

157:                                              ; preds = %153
  %158 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -3, ptr %158, align 4, !tbaa !9
  br label %205

159:                                              ; preds = %153, %150
  %160 = load ptr, ptr %18, align 8, !tbaa !5
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = icmp slt i32 %161, 0
  br i1 %162, label %163, label %165

163:                                              ; preds = %159
  %164 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -4, ptr %164, align 4, !tbaa !9
  br label %204

165:                                              ; preds = %159
  %166 = load ptr, ptr %19, align 8, !tbaa !5
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = icmp slt i32 %167, 0
  br i1 %168, label %169, label %171

169:                                              ; preds = %165
  %170 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -5, ptr %170, align 4, !tbaa !9
  br label %203

171:                                              ; preds = %165
  %172 = load ptr, ptr %21, align 8, !tbaa !5
  %173 = load i32, ptr %172, align 4, !tbaa !9
  %174 = load ptr, ptr %19, align 8, !tbaa !5
  %175 = load i32, ptr %174, align 4, !tbaa !9
  %176 = add nsw i32 %175, 1
  %177 = icmp slt i32 %173, %176
  br i1 %177, label %178, label %180

178:                                              ; preds = %171
  %179 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -7, ptr %179, align 4, !tbaa !9
  br label %202

180:                                              ; preds = %171
  %181 = load ptr, ptr %25, align 8, !tbaa !5
  %182 = load i32, ptr %181, align 4, !tbaa !9
  %183 = load i32, ptr %52, align 4, !tbaa !9
  %184 = icmp slt i32 %182, %183
  br i1 %184, label %185, label %190

185:                                              ; preds = %180
  %186 = load i32, ptr %75, align 4, !tbaa !9
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %190, label %188

188:                                              ; preds = %185
  %189 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -11, ptr %189, align 4, !tbaa !9
  br label %201

190:                                              ; preds = %185, %180
  %191 = load ptr, ptr %27, align 8, !tbaa !5
  %192 = load i32, ptr %191, align 4, !tbaa !9
  %193 = load i32, ptr %57, align 4, !tbaa !9
  %194 = icmp slt i32 %192, %193
  br i1 %194, label %195, label %200

195:                                              ; preds = %190
  %196 = load i32, ptr %75, align 4, !tbaa !9
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %200, label %198

198:                                              ; preds = %195
  %199 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -13, ptr %199, align 4, !tbaa !9
  br label %200

200:                                              ; preds = %198, %195, %190
  br label %201

201:                                              ; preds = %200, %188
  br label %202

202:                                              ; preds = %201, %178
  br label %203

203:                                              ; preds = %202, %169
  br label %204

204:                                              ; preds = %203, %163
  br label %205

205:                                              ; preds = %204, %157
  br label %206

206:                                              ; preds = %205, %148
  br label %207

207:                                              ; preds = %206, %142
  %208 = load ptr, ptr %28, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %228

211:                                              ; preds = %207
  %212 = load i32, ptr %52, align 4, !tbaa !9
  %213 = sitofp i32 %212 to double
  %214 = load ptr, ptr %24, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.doublecomplex, ptr %214, i64 1
  %216 = getelementptr inbounds %struct.doublecomplex, ptr %215, i32 0, i32 0
  store double %213, ptr %216, align 8, !tbaa !11
  %217 = load ptr, ptr %24, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.doublecomplex, ptr %217, i64 1
  %219 = getelementptr inbounds %struct.doublecomplex, ptr %218, i32 0, i32 1
  store double 0.000000e+00, ptr %219, align 8, !tbaa !14
  %220 = load i32, ptr %57, align 4, !tbaa !9
  %221 = sitofp i32 %220 to double
  %222 = load ptr, ptr %26, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.doublecomplex, ptr %222, i64 1
  %224 = getelementptr inbounds %struct.doublecomplex, ptr %223, i32 0, i32 0
  store double %221, ptr %224, align 8, !tbaa !11
  %225 = load ptr, ptr %26, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.doublecomplex, ptr %225, i64 1
  %227 = getelementptr inbounds %struct.doublecomplex, ptr %226, i32 0, i32 1
  store double 0.000000e+00, ptr %227, align 8, !tbaa !14
  br label %228

228:                                              ; preds = %211, %207
  %229 = load ptr, ptr %28, align 8, !tbaa !5
  %230 = load i32, ptr %229, align 4, !tbaa !9
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %232, label %237

232:                                              ; preds = %228
  %233 = load ptr, ptr %28, align 8, !tbaa !5
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = sub nsw i32 0, %234
  store i32 %235, ptr %31, align 4, !tbaa !9
  %236 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %31, i32 noundef 12)
  store i32 1, ptr %86, align 4
  br label %1140

237:                                              ; preds = %228
  %238 = load i32, ptr %75, align 4, !tbaa !9
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %241

240:                                              ; preds = %237
  store i32 1, ptr %86, align 4
  br label %1140

241:                                              ; preds = %237
  br label %242

242:                                              ; preds = %241
  %243 = load ptr, ptr %18, align 8, !tbaa !5
  %244 = load i32, ptr %243, align 4, !tbaa !9
  %245 = icmp eq i32 %244, 0
  br i1 %245, label %246, label %259

246:                                              ; preds = %242
  %247 = load ptr, ptr %24, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %247, i64 1
  %249 = getelementptr inbounds %struct.doublecomplex, ptr %248, i32 0, i32 0
  store double 1.000000e+00, ptr %249, align 8, !tbaa !11
  %250 = load ptr, ptr %24, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.doublecomplex, ptr %250, i64 1
  %252 = getelementptr inbounds %struct.doublecomplex, ptr %251, i32 0, i32 1
  store double 0.000000e+00, ptr %252, align 8, !tbaa !14
  %253 = load ptr, ptr %26, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.doublecomplex, ptr %253, i64 1
  %255 = getelementptr inbounds %struct.doublecomplex, ptr %254, i32 0, i32 0
  store double 1.000000e+00, ptr %255, align 8, !tbaa !11
  %256 = load ptr, ptr %26, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.doublecomplex, ptr %256, i64 1
  %258 = getelementptr inbounds %struct.doublecomplex, ptr %257, i32 0, i32 1
  store double 0.000000e+00, ptr %258, align 8, !tbaa !14
  store i32 1, ptr %86, align 4
  br label %1140

259:                                              ; preds = %242
  %260 = load ptr, ptr %19, align 8, !tbaa !5
  %261 = load i32, ptr %260, align 4, !tbaa !9
  %262 = load i32, ptr %66, align 4, !tbaa !9
  %263 = add nsw i32 %261, %262
  store i32 %263, ptr %79, align 4, !tbaa !9
  %264 = load ptr, ptr %18, align 8, !tbaa !5
  %265 = load i32, ptr %264, align 4, !tbaa !9
  %266 = shl i32 %265, 1
  store i32 %266, ptr %84, align 4, !tbaa !9
  %267 = load ptr, ptr %18, align 8, !tbaa !5
  %268 = load i32, ptr %267, align 4, !tbaa !9
  %269 = shl i32 %268, 1
  store i32 %269, ptr %62, align 4, !tbaa !9
  store i32 1, ptr %71, align 4, !tbaa !9
  %270 = load i32, ptr %71, align 4, !tbaa !9
  %271 = load i32, ptr %84, align 4, !tbaa !9
  %272 = add nsw i32 %270, %271
  store i32 %272, ptr %44, align 4, !tbaa !9
  %273 = load ptr, ptr %19, align 8, !tbaa !5
  %274 = load i32, ptr %273, align 4, !tbaa !9
  %275 = shl i32 %274, 1
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %77, align 4, !tbaa !9
  %277 = load i32, ptr %77, align 4, !tbaa !9
  %278 = load ptr, ptr %18, align 8, !tbaa !5
  %279 = load i32, ptr %278, align 4, !tbaa !9
  %280 = mul nsw i32 %277, %279
  store i32 %280, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %38, align 4, !tbaa !9
  %281 = load i32, ptr %38, align 4, !tbaa !9
  %282 = load i32, ptr %53, align 4, !tbaa !9
  %283 = add nsw i32 %281, %282
  store i32 %283, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  store i32 0, ptr %78, align 4, !tbaa !9
  %284 = load i32, ptr %60, align 4, !tbaa !9
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %303

286:                                              ; preds = %259
  %287 = load i32, ptr %38, align 4, !tbaa !9
  %288 = load ptr, ptr %19, align 8, !tbaa !5
  %289 = load i32, ptr %288, align 4, !tbaa !9
  %290 = add nsw i32 %287, %289
  store i32 %290, ptr %42, align 4, !tbaa !9
  %291 = load i32, ptr %38, align 4, !tbaa !9
  store i32 %291, ptr %58, align 4, !tbaa !9
  %292 = load i32, ptr %42, align 4, !tbaa !9
  %293 = load ptr, ptr %19, align 8, !tbaa !5
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = add nsw i32 %292, %294
  store i32 %295, ptr %43, align 4, !tbaa !9
  %296 = load i32, ptr %43, align 4, !tbaa !9
  %297 = sub nsw i32 %296, 1
  store i32 %297, ptr %73, align 4, !tbaa !9
  %298 = load ptr, ptr %19, align 8, !tbaa !5
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = add nsw i32 %299, 1
  store i32 %300, ptr %68, align 4, !tbaa !9
  %301 = load ptr, ptr %19, align 8, !tbaa !5
  %302 = load i32, ptr %301, align 4, !tbaa !9
  store i32 %302, ptr %45, align 4, !tbaa !9
  br label %313

303:                                              ; preds = %259
  %304 = load i32, ptr %38, align 4, !tbaa !9
  store i32 %304, ptr %42, align 4, !tbaa !9
  %305 = load i32, ptr %38, align 4, !tbaa !9
  %306 = load ptr, ptr %19, align 8, !tbaa !5
  %307 = load i32, ptr %306, align 4, !tbaa !9
  %308 = add nsw i32 %305, %307
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %58, align 4, !tbaa !9
  %310 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %310, ptr %43, align 4, !tbaa !9
  %311 = load i32, ptr %43, align 4, !tbaa !9
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %73, align 4, !tbaa !9
  store i32 1, ptr %68, align 4, !tbaa !9
  store i32 2, ptr %45, align 4, !tbaa !9
  br label %313

313:                                              ; preds = %303, %286
  %314 = load ptr, ptr %19, align 8, !tbaa !5
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = icmp eq i32 %315, 0
  br i1 %316, label %317, label %372

317:                                              ; preds = %313
  %318 = load ptr, ptr %18, align 8, !tbaa !5
  %319 = load i32, ptr %318, align 4, !tbaa !9
  store i32 %319, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %320

320:                                              ; preds = %340, %317
  %321 = load i32, ptr %47, align 4, !tbaa !9
  %322 = load i32, ptr %31, align 4, !tbaa !9
  %323 = icmp sle i32 %321, %322
  br i1 %323, label %324, label %343

324:                                              ; preds = %320
  %325 = load i32, ptr %68, align 4, !tbaa !9
  %326 = load i32, ptr %47, align 4, !tbaa !9
  %327 = load i32, ptr %29, align 4, !tbaa !9
  %328 = mul nsw i32 %326, %327
  %329 = add nsw i32 %325, %328
  store i32 %329, ptr %32, align 4, !tbaa !9
  %330 = load ptr, ptr %20, align 8, !tbaa !5
  %331 = load i32, ptr %32, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds %struct.doublecomplex, ptr %330, i64 %332
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %333, i32 0, i32 0
  %335 = load double, ptr %334, align 8, !tbaa !11
  %336 = load ptr, ptr %22, align 8, !tbaa !5
  %337 = load i32, ptr %47, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds double, ptr %336, i64 %338
  store double %335, ptr %339, align 8, !tbaa !15
  br label %340

340:                                              ; preds = %324
  %341 = load i32, ptr %47, align 4, !tbaa !9
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %47, align 4, !tbaa !9
  br label %320, !llvm.loop !16

343:                                              ; preds = %320
  %344 = load ptr, ptr %18, align 8, !tbaa !5
  %345 = load i32, ptr %344, align 4, !tbaa !9
  %346 = sub nsw i32 %345, 1
  store i32 %346, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %347

347:                                              ; preds = %356, %343
  %348 = load i32, ptr %47, align 4, !tbaa !9
  %349 = load i32, ptr %31, align 4, !tbaa !9
  %350 = icmp sle i32 %348, %349
  br i1 %350, label %351, label %359

351:                                              ; preds = %347
  %352 = load ptr, ptr %23, align 8, !tbaa !5
  %353 = load i32, ptr %47, align 4, !tbaa !9
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %352, i64 %354
  store double 0.000000e+00, ptr %355, align 8, !tbaa !15
  br label %356

356:                                              ; preds = %351
  %357 = load i32, ptr %47, align 4, !tbaa !9
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %47, align 4, !tbaa !9
  br label %347, !llvm.loop !18

359:                                              ; preds = %347
  %360 = load ptr, ptr %24, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %360, i64 1
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %361, i32 0, i32 0
  store double 1.000000e+00, ptr %362, align 8, !tbaa !11
  %363 = load ptr, ptr %24, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.doublecomplex, ptr %363, i64 1
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %364, i32 0, i32 1
  store double 0.000000e+00, ptr %365, align 8, !tbaa !14
  %366 = load ptr, ptr %26, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %366, i64 1
  %368 = getelementptr inbounds %struct.doublecomplex, ptr %367, i32 0, i32 0
  store double 1.000000e+00, ptr %368, align 8, !tbaa !11
  %369 = load ptr, ptr %26, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.doublecomplex, ptr %369, i64 1
  %371 = getelementptr inbounds %struct.doublecomplex, ptr %370, i32 0, i32 1
  store double 0.000000e+00, ptr %371, align 8, !tbaa !14
  store i32 1, ptr %86, align 4
  br label %1140

372:                                              ; preds = %313
  %373 = load ptr, ptr %19, align 8, !tbaa !5
  %374 = load i32, ptr %373, align 4, !tbaa !9
  %375 = icmp eq i32 %374, 1
  br i1 %375, label %376, label %736

376:                                              ; preds = %372
  %377 = load ptr, ptr %18, align 8, !tbaa !5
  %378 = load i32, ptr %377, align 4, !tbaa !9
  store i32 %378, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %379

379:                                              ; preds = %399, %376
  %380 = load i32, ptr %47, align 4, !tbaa !9
  %381 = load i32, ptr %31, align 4, !tbaa !9
  %382 = icmp sle i32 %380, %381
  br i1 %382, label %383, label %402

383:                                              ; preds = %379
  %384 = load i32, ptr %68, align 4, !tbaa !9
  %385 = load i32, ptr %47, align 4, !tbaa !9
  %386 = load i32, ptr %29, align 4, !tbaa !9
  %387 = mul nsw i32 %385, %386
  %388 = add nsw i32 %384, %387
  store i32 %388, ptr %32, align 4, !tbaa !9
  %389 = load ptr, ptr %20, align 8, !tbaa !5
  %390 = load i32, ptr %32, align 4, !tbaa !9
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds %struct.doublecomplex, ptr %389, i64 %391
  %393 = getelementptr inbounds %struct.doublecomplex, ptr %392, i32 0, i32 0
  %394 = load double, ptr %393, align 8, !tbaa !11
  %395 = load ptr, ptr %22, align 8, !tbaa !5
  %396 = load i32, ptr %47, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds double, ptr %395, i64 %397
  store double %394, ptr %398, align 8, !tbaa !15
  br label %399

399:                                              ; preds = %383
  %400 = load i32, ptr %47, align 4, !tbaa !9
  %401 = add nsw i32 %400, 1
  store i32 %401, ptr %47, align 4, !tbaa !9
  br label %379, !llvm.loop !19

402:                                              ; preds = %379
  %403 = load i32, ptr %60, align 4, !tbaa !9
  %404 = icmp ne i32 %403, 0
  br i1 %404, label %405, label %565

405:                                              ; preds = %402
  %406 = load ptr, ptr %18, align 8, !tbaa !5
  %407 = load i32, ptr %406, align 4, !tbaa !9
  %408 = sub nsw i32 %407, 1
  store i32 %408, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %561, %405
  %410 = load i32, ptr %47, align 4, !tbaa !9
  %411 = load i32, ptr %31, align 4, !tbaa !9
  %412 = icmp sle i32 %410, %411
  br i1 %412, label %413, label %564

413:                                              ; preds = %409
  %414 = load i32, ptr %45, align 4, !tbaa !9
  %415 = load i32, ptr %47, align 4, !tbaa !9
  %416 = add nsw i32 %415, 1
  %417 = load i32, ptr %29, align 4, !tbaa !9
  %418 = mul nsw i32 %416, %417
  %419 = add nsw i32 %414, %418
  store i32 %419, ptr %32, align 4, !tbaa !9
  %420 = load ptr, ptr %20, align 8, !tbaa !5
  %421 = load i32, ptr %32, align 4, !tbaa !9
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds %struct.doublecomplex, ptr %420, i64 %422
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %423, i32 0, i32 0
  %425 = load double, ptr %424, align 8, !tbaa !11
  %426 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  store double %425, ptr %426, align 8, !tbaa !11
  %427 = load ptr, ptr %20, align 8, !tbaa !5
  %428 = load i32, ptr %32, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds %struct.doublecomplex, ptr %427, i64 %429
  %431 = getelementptr inbounds %struct.doublecomplex, ptr %430, i32 0, i32 1
  %432 = load double, ptr %431, align 8, !tbaa !14
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  store double %432, ptr %433, align 8, !tbaa !14
  %434 = call { double, double } @Cd(ptr noundef %80)
  %435 = extractvalue { double, double } %434, 0
  %436 = extractvalue { double, double } %434, 1
  %437 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %438 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  store double %435, ptr %437, align 8
  store double %436, ptr %438, align 8
  %439 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %440 = load double, ptr %439, align 8
  %441 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %442 = load double, ptr %441, align 8
  %443 = call double @cabs(double noundef %440, double noundef %442) #6
  store double %443, ptr %72, align 8, !tbaa !15
  %444 = load i32, ptr %45, align 4, !tbaa !9
  %445 = load i32, ptr %47, align 4, !tbaa !9
  %446 = add nsw i32 %445, 1
  %447 = load i32, ptr %29, align 4, !tbaa !9
  %448 = mul nsw i32 %446, %447
  %449 = add nsw i32 %444, %448
  store i32 %449, ptr %32, align 4, !tbaa !9
  %450 = load double, ptr %72, align 8, !tbaa !15
  %451 = load ptr, ptr %20, align 8, !tbaa !5
  %452 = load i32, ptr %32, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %451, i64 %453
  %455 = getelementptr inbounds %struct.doublecomplex, ptr %454, i32 0, i32 0
  store double %450, ptr %455, align 8, !tbaa !11
  %456 = load ptr, ptr %20, align 8, !tbaa !5
  %457 = load i32, ptr %32, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds %struct.doublecomplex, ptr %456, i64 %458
  %460 = getelementptr inbounds %struct.doublecomplex, ptr %459, i32 0, i32 1
  store double 0.000000e+00, ptr %460, align 8, !tbaa !14
  %461 = load double, ptr %72, align 8, !tbaa !15
  %462 = load ptr, ptr %23, align 8, !tbaa !5
  %463 = load i32, ptr %47, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds double, ptr %462, i64 %464
  store double %461, ptr %465, align 8, !tbaa !15
  %466 = load double, ptr %72, align 8, !tbaa !15
  %467 = fcmp une double %466, 0.000000e+00
  br i1 %467, label %468, label %485

468:                                              ; preds = %413
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  %470 = load double, ptr %469, align 8, !tbaa !11
  %471 = load double, ptr %72, align 8, !tbaa !15
  %472 = fdiv double %470, %471
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %472, ptr %473, align 8, !tbaa !11
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  %475 = load double, ptr %474, align 8, !tbaa !14
  %476 = load double, ptr %72, align 8, !tbaa !15
  %477 = fdiv double %475, %476
  %478 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %477, ptr %478, align 8, !tbaa !14
  %479 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %480 = load double, ptr %479, align 8, !tbaa !11
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  store double %480, ptr %481, align 8, !tbaa !11
  %482 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %483 = load double, ptr %482, align 8, !tbaa !14
  %484 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  store double %483, ptr %484, align 8, !tbaa !14
  br label %488

485:                                              ; preds = %413
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  store double 1.000000e+00, ptr %486, align 8, !tbaa !11
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  store double 0.000000e+00, ptr %487, align 8, !tbaa !14
  br label %488

488:                                              ; preds = %485, %468
  %489 = load i32, ptr %47, align 4, !tbaa !9
  %490 = load ptr, ptr %18, align 8, !tbaa !5
  %491 = load i32, ptr %490, align 4, !tbaa !9
  %492 = sub nsw i32 %491, 1
  %493 = icmp slt i32 %489, %492
  br i1 %493, label %494, label %560

494:                                              ; preds = %488
  %495 = load i32, ptr %45, align 4, !tbaa !9
  %496 = load i32, ptr %47, align 4, !tbaa !9
  %497 = add nsw i32 %496, 2
  %498 = load i32, ptr %29, align 4, !tbaa !9
  %499 = mul nsw i32 %497, %498
  %500 = add nsw i32 %495, %499
  store i32 %500, ptr %32, align 4, !tbaa !9
  %501 = load i32, ptr %45, align 4, !tbaa !9
  %502 = load i32, ptr %47, align 4, !tbaa !9
  %503 = add nsw i32 %502, 2
  %504 = load i32, ptr %29, align 4, !tbaa !9
  %505 = mul nsw i32 %503, %504
  %506 = add nsw i32 %501, %505
  store i32 %506, ptr %33, align 4, !tbaa !9
  %507 = load ptr, ptr %20, align 8, !tbaa !5
  %508 = load i32, ptr %33, align 4, !tbaa !9
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds %struct.doublecomplex, ptr %507, i64 %509
  %511 = getelementptr inbounds %struct.doublecomplex, ptr %510, i32 0, i32 0
  %512 = load double, ptr %511, align 8, !tbaa !11
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  %514 = load double, ptr %513, align 8, !tbaa !11
  %515 = load ptr, ptr %20, align 8, !tbaa !5
  %516 = load i32, ptr %33, align 4, !tbaa !9
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds %struct.doublecomplex, ptr %515, i64 %517
  %519 = getelementptr inbounds %struct.doublecomplex, ptr %518, i32 0, i32 1
  %520 = load double, ptr %519, align 8, !tbaa !14
  %521 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  %522 = load double, ptr %521, align 8, !tbaa !14
  %523 = fmul double %520, %522
  %524 = fneg double %523
  %525 = call double @llvm.fmuladd.f64(double %512, double %514, double %524)
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %525, ptr %526, align 8, !tbaa !11
  %527 = load ptr, ptr %20, align 8, !tbaa !5
  %528 = load i32, ptr %33, align 4, !tbaa !9
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds %struct.doublecomplex, ptr %527, i64 %529
  %531 = getelementptr inbounds %struct.doublecomplex, ptr %530, i32 0, i32 0
  %532 = load double, ptr %531, align 8, !tbaa !11
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  %534 = load double, ptr %533, align 8, !tbaa !14
  %535 = load ptr, ptr %20, align 8, !tbaa !5
  %536 = load i32, ptr %33, align 4, !tbaa !9
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds %struct.doublecomplex, ptr %535, i64 %537
  %539 = getelementptr inbounds %struct.doublecomplex, ptr %538, i32 0, i32 1
  %540 = load double, ptr %539, align 8, !tbaa !14
  %541 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  %542 = load double, ptr %541, align 8, !tbaa !11
  %543 = fmul double %540, %542
  %544 = call double @llvm.fmuladd.f64(double %532, double %534, double %543)
  %545 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %544, ptr %545, align 8, !tbaa !14
  %546 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %547 = load double, ptr %546, align 8, !tbaa !11
  %548 = load ptr, ptr %20, align 8, !tbaa !5
  %549 = load i32, ptr %32, align 4, !tbaa !9
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %548, i64 %550
  %552 = getelementptr inbounds %struct.doublecomplex, ptr %551, i32 0, i32 0
  store double %547, ptr %552, align 8, !tbaa !11
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %554 = load double, ptr %553, align 8, !tbaa !14
  %555 = load ptr, ptr %20, align 8, !tbaa !5
  %556 = load i32, ptr %32, align 4, !tbaa !9
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %555, i64 %557
  %559 = getelementptr inbounds %struct.doublecomplex, ptr %558, i32 0, i32 1
  store double %554, ptr %559, align 8, !tbaa !14
  br label %560

560:                                              ; preds = %494, %488
  br label %561

561:                                              ; preds = %560
  %562 = load i32, ptr %47, align 4, !tbaa !9
  %563 = add nsw i32 %562, 1
  store i32 %563, ptr %47, align 4, !tbaa !9
  br label %409, !llvm.loop !20

564:                                              ; preds = %409
  br label %723

565:                                              ; preds = %402
  %566 = load ptr, ptr %18, align 8, !tbaa !5
  %567 = load i32, ptr %566, align 4, !tbaa !9
  %568 = sub nsw i32 %567, 1
  store i32 %568, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %569

569:                                              ; preds = %719, %565
  %570 = load i32, ptr %47, align 4, !tbaa !9
  %571 = load i32, ptr %31, align 4, !tbaa !9
  %572 = icmp sle i32 %570, %571
  br i1 %572, label %573, label %722

573:                                              ; preds = %569
  %574 = load i32, ptr %45, align 4, !tbaa !9
  %575 = load i32, ptr %47, align 4, !tbaa !9
  %576 = load i32, ptr %29, align 4, !tbaa !9
  %577 = mul nsw i32 %575, %576
  %578 = add nsw i32 %574, %577
  store i32 %578, ptr %32, align 4, !tbaa !9
  %579 = load ptr, ptr %20, align 8, !tbaa !5
  %580 = load i32, ptr %32, align 4, !tbaa !9
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds %struct.doublecomplex, ptr %579, i64 %581
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %582, i32 0, i32 0
  %584 = load double, ptr %583, align 8, !tbaa !11
  %585 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  store double %584, ptr %585, align 8, !tbaa !11
  %586 = load ptr, ptr %20, align 8, !tbaa !5
  %587 = load i32, ptr %32, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct.doublecomplex, ptr %586, i64 %588
  %590 = getelementptr inbounds %struct.doublecomplex, ptr %589, i32 0, i32 1
  %591 = load double, ptr %590, align 8, !tbaa !14
  %592 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  store double %591, ptr %592, align 8, !tbaa !14
  %593 = call { double, double } @Cd(ptr noundef %80)
  %594 = extractvalue { double, double } %593, 0
  %595 = extractvalue { double, double } %593, 1
  %596 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %597 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  store double %594, ptr %596, align 8
  store double %595, ptr %597, align 8
  %598 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %599 = load double, ptr %598, align 8
  %600 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  %601 = load double, ptr %600, align 8
  %602 = call double @cabs(double noundef %599, double noundef %601) #6
  store double %602, ptr %72, align 8, !tbaa !15
  %603 = load i32, ptr %45, align 4, !tbaa !9
  %604 = load i32, ptr %47, align 4, !tbaa !9
  %605 = load i32, ptr %29, align 4, !tbaa !9
  %606 = mul nsw i32 %604, %605
  %607 = add nsw i32 %603, %606
  store i32 %607, ptr %32, align 4, !tbaa !9
  %608 = load double, ptr %72, align 8, !tbaa !15
  %609 = load ptr, ptr %20, align 8, !tbaa !5
  %610 = load i32, ptr %32, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %609, i64 %611
  %613 = getelementptr inbounds %struct.doublecomplex, ptr %612, i32 0, i32 0
  store double %608, ptr %613, align 8, !tbaa !11
  %614 = load ptr, ptr %20, align 8, !tbaa !5
  %615 = load i32, ptr %32, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %616
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %617, i32 0, i32 1
  store double 0.000000e+00, ptr %618, align 8, !tbaa !14
  %619 = load double, ptr %72, align 8, !tbaa !15
  %620 = load ptr, ptr %23, align 8, !tbaa !5
  %621 = load i32, ptr %47, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds double, ptr %620, i64 %622
  store double %619, ptr %623, align 8, !tbaa !15
  %624 = load double, ptr %72, align 8, !tbaa !15
  %625 = fcmp une double %624, 0.000000e+00
  br i1 %625, label %626, label %643

626:                                              ; preds = %573
  %627 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  %628 = load double, ptr %627, align 8, !tbaa !11
  %629 = load double, ptr %72, align 8, !tbaa !15
  %630 = fdiv double %628, %629
  %631 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %630, ptr %631, align 8, !tbaa !11
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  %633 = load double, ptr %632, align 8, !tbaa !14
  %634 = load double, ptr %72, align 8, !tbaa !15
  %635 = fdiv double %633, %634
  %636 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %635, ptr %636, align 8, !tbaa !14
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %638 = load double, ptr %637, align 8, !tbaa !11
  %639 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  store double %638, ptr %639, align 8, !tbaa !11
  %640 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %641 = load double, ptr %640, align 8, !tbaa !14
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  store double %641, ptr %642, align 8, !tbaa !14
  br label %646

643:                                              ; preds = %573
  %644 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  store double 1.000000e+00, ptr %644, align 8, !tbaa !11
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  store double 0.000000e+00, ptr %645, align 8, !tbaa !14
  br label %646

646:                                              ; preds = %643, %626
  %647 = load i32, ptr %47, align 4, !tbaa !9
  %648 = load ptr, ptr %18, align 8, !tbaa !5
  %649 = load i32, ptr %648, align 4, !tbaa !9
  %650 = sub nsw i32 %649, 1
  %651 = icmp slt i32 %647, %650
  br i1 %651, label %652, label %718

652:                                              ; preds = %646
  %653 = load i32, ptr %45, align 4, !tbaa !9
  %654 = load i32, ptr %47, align 4, !tbaa !9
  %655 = add nsw i32 %654, 1
  %656 = load i32, ptr %29, align 4, !tbaa !9
  %657 = mul nsw i32 %655, %656
  %658 = add nsw i32 %653, %657
  store i32 %658, ptr %32, align 4, !tbaa !9
  %659 = load i32, ptr %45, align 4, !tbaa !9
  %660 = load i32, ptr %47, align 4, !tbaa !9
  %661 = add nsw i32 %660, 1
  %662 = load i32, ptr %29, align 4, !tbaa !9
  %663 = mul nsw i32 %661, %662
  %664 = add nsw i32 %659, %663
  store i32 %664, ptr %33, align 4, !tbaa !9
  %665 = load ptr, ptr %20, align 8, !tbaa !5
  %666 = load i32, ptr %33, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds %struct.doublecomplex, ptr %665, i64 %667
  %669 = getelementptr inbounds %struct.doublecomplex, ptr %668, i32 0, i32 0
  %670 = load double, ptr %669, align 8, !tbaa !11
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  %672 = load double, ptr %671, align 8, !tbaa !11
  %673 = load ptr, ptr %20, align 8, !tbaa !5
  %674 = load i32, ptr %33, align 4, !tbaa !9
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds %struct.doublecomplex, ptr %673, i64 %675
  %677 = getelementptr inbounds %struct.doublecomplex, ptr %676, i32 0, i32 1
  %678 = load double, ptr %677, align 8, !tbaa !14
  %679 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  %680 = load double, ptr %679, align 8, !tbaa !14
  %681 = fmul double %678, %680
  %682 = fneg double %681
  %683 = call double @llvm.fmuladd.f64(double %670, double %672, double %682)
  %684 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %683, ptr %684, align 8, !tbaa !11
  %685 = load ptr, ptr %20, align 8, !tbaa !5
  %686 = load i32, ptr %33, align 4, !tbaa !9
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds %struct.doublecomplex, ptr %685, i64 %687
  %689 = getelementptr inbounds %struct.doublecomplex, ptr %688, i32 0, i32 0
  %690 = load double, ptr %689, align 8, !tbaa !11
  %691 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 1
  %692 = load double, ptr %691, align 8, !tbaa !14
  %693 = load ptr, ptr %20, align 8, !tbaa !5
  %694 = load i32, ptr %33, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds %struct.doublecomplex, ptr %693, i64 %695
  %697 = getelementptr inbounds %struct.doublecomplex, ptr %696, i32 0, i32 1
  %698 = load double, ptr %697, align 8, !tbaa !14
  %699 = getelementptr inbounds %struct.doublecomplex, ptr %80, i32 0, i32 0
  %700 = load double, ptr %699, align 8, !tbaa !11
  %701 = fmul double %698, %700
  %702 = call double @llvm.fmuladd.f64(double %690, double %692, double %701)
  %703 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %702, ptr %703, align 8, !tbaa !14
  %704 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %705 = load double, ptr %704, align 8, !tbaa !11
  %706 = load ptr, ptr %20, align 8, !tbaa !5
  %707 = load i32, ptr %32, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds %struct.doublecomplex, ptr %706, i64 %708
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %709, i32 0, i32 0
  store double %705, ptr %710, align 8, !tbaa !11
  %711 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %712 = load double, ptr %711, align 8, !tbaa !14
  %713 = load ptr, ptr %20, align 8, !tbaa !5
  %714 = load i32, ptr %32, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %715
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %716, i32 0, i32 1
  store double %712, ptr %717, align 8, !tbaa !14
  br label %718

718:                                              ; preds = %652, %646
  br label %719

719:                                              ; preds = %718
  %720 = load i32, ptr %47, align 4, !tbaa !9
  %721 = add nsw i32 %720, 1
  store i32 %721, ptr %47, align 4, !tbaa !9
  br label %569, !llvm.loop !21

722:                                              ; preds = %569
  br label %723

723:                                              ; preds = %722, %564
  %724 = load ptr, ptr %24, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.doublecomplex, ptr %724, i64 1
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %725, i32 0, i32 0
  store double 1.000000e+00, ptr %726, align 8, !tbaa !11
  %727 = load ptr, ptr %24, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %727, i64 1
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %728, i32 0, i32 1
  store double 0.000000e+00, ptr %729, align 8, !tbaa !14
  %730 = load ptr, ptr %26, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %730, i64 1
  %732 = getelementptr inbounds %struct.doublecomplex, ptr %731, i32 0, i32 0
  store double 1.000000e+00, ptr %732, align 8, !tbaa !11
  %733 = load ptr, ptr %26, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %733, i64 1
  %735 = getelementptr inbounds %struct.doublecomplex, ptr %734, i32 0, i32 1
  store double 0.000000e+00, ptr %735, align 8, !tbaa !14
  store i32 1, ptr %86, align 4
  br label %1140

736:                                              ; preds = %372
  %737 = load ptr, ptr %18, align 8, !tbaa !5
  %738 = load i32, ptr %737, align 4, !tbaa !9
  store i32 %738, ptr %85, align 4, !tbaa !9
  store i32 1, ptr %61, align 4, !tbaa !9
  store i32 3, ptr %54, align 4, !tbaa !9
  %739 = load ptr, ptr %18, align 8, !tbaa !5
  %740 = load i32, ptr %739, align 4, !tbaa !9
  %741 = sitofp i32 %740 to float
  %742 = load ptr, ptr %19, align 8, !tbaa !5
  %743 = load i32, ptr %742, align 4, !tbaa !9
  %744 = sitofp i32 %743 to float
  %745 = fdiv float %741, %744
  %746 = fadd float %745, 5.000000e-01
  store float %746, ptr %36, align 4, !tbaa !22
  %747 = load float, ptr %36, align 4, !tbaa !22
  %748 = fcmp ogt float %747, 0.000000e+00
  br i1 %748, label %749, label %753

749:                                              ; preds = %736
  %750 = load float, ptr %36, align 4, !tbaa !22
  %751 = fpext float %750 to double
  %752 = call double @llvm.floor.f64(double %751)
  br label %759

753:                                              ; preds = %736
  %754 = load float, ptr %36, align 4, !tbaa !22
  %755 = fneg float %754
  %756 = fpext float %755 to double
  %757 = call double @llvm.floor.f64(double %756)
  %758 = fneg double %757
  br label %759

759:                                              ; preds = %753, %749
  %760 = phi double [ %752, %749 ], [ %758, %753 ]
  %761 = fptosi double %760 to i32
  store i32 %761, ptr %83, align 4, !tbaa !9
  %762 = load i32, ptr %54, align 4, !tbaa !9
  %763 = sitofp i32 %762 to float
  %764 = load i32, ptr %61, align 4, !tbaa !9
  %765 = sitofp i32 %764 to float
  %766 = fdiv float %763, %765
  %767 = fadd float %766, 5.000000e-01
  store float %767, ptr %36, align 4, !tbaa !22
  %768 = load float, ptr %36, align 4, !tbaa !22
  %769 = fcmp ogt float %768, 0.000000e+00
  br i1 %769, label %770, label %774

770:                                              ; preds = %759
  %771 = load float, ptr %36, align 4, !tbaa !22
  %772 = fpext float %771 to double
  %773 = call double @llvm.floor.f64(double %772)
  br label %780

774:                                              ; preds = %759
  %775 = load float, ptr %36, align 4, !tbaa !22
  %776 = fneg float %775
  %777 = fpext float %776 to double
  %778 = call double @llvm.floor.f64(double %777)
  %779 = fneg double %778
  br label %780

780:                                              ; preds = %774, %770
  %781 = phi double [ %773, %770 ], [ %779, %774 ]
  %782 = fptosi double %781 to i32
  store i32 %782, ptr %64, align 4, !tbaa !9
  %783 = load ptr, ptr %18, align 8, !tbaa !5
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = sub nsw i32 %784, 1
  %786 = sitofp i32 %785 to float
  %787 = load i32, ptr %85, align 4, !tbaa !9
  %788 = sitofp i32 %787 to float
  %789 = fdiv float %786, %788
  %790 = fadd float %789, 5.000000e-01
  store float %790, ptr %36, align 4, !tbaa !22
  %791 = load float, ptr %36, align 4, !tbaa !22
  %792 = fcmp ogt float %791, 0.000000e+00
  br i1 %792, label %793, label %797

793:                                              ; preds = %780
  %794 = load float, ptr %36, align 4, !tbaa !22
  %795 = fpext float %794 to double
  %796 = call double @llvm.floor.f64(double %795)
  br label %803

797:                                              ; preds = %780
  %798 = load float, ptr %36, align 4, !tbaa !22
  %799 = fneg float %798
  %800 = fpext float %799 to double
  %801 = call double @llvm.floor.f64(double %800)
  %802 = fneg double %801
  br label %803

803:                                              ; preds = %797, %793
  %804 = phi double [ %796, %793 ], [ %802, %797 ]
  %805 = fptosi double %804 to i32
  store i32 %805, ptr %70, align 4, !tbaa !9
  %806 = load ptr, ptr %19, align 8, !tbaa !5
  %807 = load i32, ptr %806, align 4, !tbaa !9
  %808 = add nsw i32 %807, 1
  store i32 %808, ptr %31, align 4, !tbaa !9
  %809 = load ptr, ptr %18, align 8, !tbaa !5
  %810 = load ptr, ptr %20, align 8, !tbaa !5
  %811 = load i32, ptr %30, align 4, !tbaa !9
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %810, i64 %812
  %814 = load ptr, ptr %21, align 8, !tbaa !5
  %815 = load ptr, ptr %26, align 8, !tbaa !5
  %816 = load i32, ptr %42, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds %struct.doublecomplex, ptr %815, i64 %817
  call void @zlacpy_(ptr noundef @.str.6, ptr noundef %31, ptr noundef %809, ptr noundef %813, ptr noundef %814, ptr noundef %818, ptr noundef %77)
  %819 = load ptr, ptr %19, align 8, !tbaa !5
  %820 = load ptr, ptr %18, align 8, !tbaa !5
  %821 = load ptr, ptr %26, align 8, !tbaa !5
  %822 = load i32, ptr %58, align 4, !tbaa !9
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds %struct.doublecomplex, ptr %821, i64 %823
  call void @zlaset_(ptr noundef @.str.6, ptr noundef %819, ptr noundef %820, ptr noundef @c_b1, ptr noundef @c_b1, ptr noundef %824, ptr noundef %77)
  %825 = load i32, ptr %70, align 4, !tbaa !9
  store i32 %825, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %69, align 4, !tbaa !9
  br label %826

826:                                              ; preds = %1033, %803
  %827 = load i32, ptr %69, align 4, !tbaa !9
  %828 = load i32, ptr %31, align 4, !tbaa !9
  %829 = icmp sle i32 %827, %828
  br i1 %829, label %830, label %1036

830:                                              ; preds = %826
  %831 = load i32, ptr %69, align 4, !tbaa !9
  %832 = sub nsw i32 %831, 1
  %833 = load i32, ptr %85, align 4, !tbaa !9
  %834 = mul nsw i32 %832, %833
  %835 = add nsw i32 %834, 1
  store i32 %835, ptr %81, align 4, !tbaa !9
  %836 = load i32, ptr %81, align 4, !tbaa !9
  %837 = load i32, ptr %85, align 4, !tbaa !9
  %838 = add nsw i32 %836, %837
  %839 = sub nsw i32 %838, 1
  store i32 %839, ptr %32, align 4, !tbaa !9
  %840 = load ptr, ptr %18, align 8, !tbaa !5
  %841 = load i32, ptr %840, align 4, !tbaa !9
  %842 = sub nsw i32 %841, 1
  store i32 %842, ptr %33, align 4, !tbaa !9
  %843 = load i32, ptr %32, align 4, !tbaa !9
  %844 = load i32, ptr %33, align 4, !tbaa !9
  %845 = icmp sle i32 %843, %844
  br i1 %845, label %846, label %848

846:                                              ; preds = %830
  %847 = load i32, ptr %32, align 4, !tbaa !9
  br label %850

848:                                              ; preds = %830
  %849 = load i32, ptr %33, align 4, !tbaa !9
  br label %850

850:                                              ; preds = %848, %846
  %851 = phi i32 [ %847, %846 ], [ %849, %848 ]
  store i32 %851, ptr %39, align 4, !tbaa !9
  %852 = load ptr, ptr %18, align 8, !tbaa !5
  %853 = load i32, ptr %852, align 4, !tbaa !9
  %854 = sub nsw i32 %853, 1
  store i32 %854, ptr %32, align 4, !tbaa !9
  %855 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %855, ptr %47, align 4, !tbaa !9
  br label %856

856:                                              ; preds = %1029, %850
  %857 = load i32, ptr %47, align 4, !tbaa !9
  %858 = load i32, ptr %32, align 4, !tbaa !9
  %859 = icmp sle i32 %857, %858
  br i1 %859, label %860, label %1032

860:                                              ; preds = %856
  %861 = load i32, ptr %47, align 4, !tbaa !9
  %862 = load i32, ptr %39, align 4, !tbaa !9
  %863 = icmp sle i32 %861, %862
  br i1 %863, label %864, label %866

864:                                              ; preds = %860
  %865 = load i32, ptr %47, align 4, !tbaa !9
  br label %868

866:                                              ; preds = %860
  %867 = load i32, ptr %39, align 4, !tbaa !9
  br label %868

868:                                              ; preds = %866, %864
  %869 = phi i32 [ %865, %864 ], [ %867, %866 ]
  store i32 %869, ptr %65, align 4, !tbaa !9
  %870 = load i32, ptr %81, align 4, !tbaa !9
  %871 = load i32, ptr %65, align 4, !tbaa !9
  %872 = icmp sgt i32 %870, %871
  br i1 %872, label %873, label %874

873:                                              ; preds = %868
  br label %1032

874:                                              ; preds = %868
  %875 = load i32, ptr %64, align 4, !tbaa !9
  store i32 %875, ptr %33, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %876

876:                                              ; preds = %1025, %874
  %877 = load i32, ptr %49, align 4, !tbaa !9
  %878 = load i32, ptr %33, align 4, !tbaa !9
  %879 = icmp sle i32 %877, %878
  br i1 %879, label %880, label %1028

880:                                              ; preds = %876
  %881 = load i32, ptr %81, align 4, !tbaa !9
  store i32 %881, ptr %67, align 4, !tbaa !9
  %882 = load i32, ptr %65, align 4, !tbaa !9
  store i32 %882, ptr %34, align 4, !tbaa !9
  %883 = load i32, ptr %67, align 4, !tbaa !9
  store i32 %883, ptr %82, align 4, !tbaa !9
  br label %884

884:                                              ; preds = %1021, %880
  %885 = load i32, ptr %82, align 4, !tbaa !9
  %886 = load i32, ptr %34, align 4, !tbaa !9
  %887 = icmp sle i32 %885, %886
  br i1 %887, label %888, label %1024

888:                                              ; preds = %884
  %889 = load i32, ptr %61, align 4, !tbaa !9
  store i32 %889, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %890

890:                                              ; preds = %1017, %888
  %891 = load i32, ptr %48, align 4, !tbaa !9
  %892 = load i32, ptr %35, align 4, !tbaa !9
  %893 = icmp sle i32 %891, %892
  br i1 %893, label %894, label %1020

894:                                              ; preds = %890
  %895 = load i32, ptr %47, align 4, !tbaa !9
  %896 = load i32, ptr %82, align 4, !tbaa !9
  %897 = sub nsw i32 %895, %896
  %898 = load i32, ptr %64, align 4, !tbaa !9
  %899 = load i32, ptr %61, align 4, !tbaa !9
  %900 = mul nsw i32 %898, %899
  %901 = mul nsw i32 %897, %900
  %902 = load i32, ptr %49, align 4, !tbaa !9
  %903 = sub nsw i32 %902, 1
  %904 = load i32, ptr %61, align 4, !tbaa !9
  %905 = mul nsw i32 %903, %904
  %906 = add nsw i32 %901, %905
  %907 = load i32, ptr %48, align 4, !tbaa !9
  %908 = add nsw i32 %906, %907
  store i32 %908, ptr %40, align 4, !tbaa !9
  %909 = load i32, ptr %40, align 4, !tbaa !9
  %910 = icmp eq i32 %909, 1
  br i1 %910, label %911, label %912

911:                                              ; preds = %894
  store i32 1, ptr %63, align 4, !tbaa !9
  br label %916

912:                                              ; preds = %894
  %913 = load i32, ptr %40, align 4, !tbaa !9
  %914 = srem i32 %913, 2
  %915 = add nsw i32 %914, 2
  store i32 %915, ptr %63, align 4, !tbaa !9
  br label %916

916:                                              ; preds = %912, %911
  %917 = load i32, ptr %63, align 4, !tbaa !9
  %918 = icmp eq i32 %917, 2
  br i1 %918, label %919, label %944

919:                                              ; preds = %916
  %920 = load i32, ptr %40, align 4, !tbaa !9
  %921 = sdiv i32 %920, 2
  %922 = load ptr, ptr %19, align 8, !tbaa !5
  %923 = load i32, ptr %922, align 4, !tbaa !9
  %924 = mul nsw i32 %921, %923
  %925 = load i32, ptr %82, align 4, !tbaa !9
  %926 = add nsw i32 %924, %925
  store i32 %926, ptr %56, align 4, !tbaa !9
  %927 = load i32, ptr %56, align 4, !tbaa !9
  %928 = load ptr, ptr %19, align 8, !tbaa !5
  %929 = load i32, ptr %928, align 4, !tbaa !9
  %930 = sub nsw i32 %927, %929
  %931 = add nsw i32 %930, 1
  store i32 %931, ptr %55, align 4, !tbaa !9
  %932 = load i32, ptr %56, align 4, !tbaa !9
  %933 = load ptr, ptr %18, align 8, !tbaa !5
  %934 = load i32, ptr %933, align 4, !tbaa !9
  %935 = icmp sle i32 %932, %934
  br i1 %935, label %936, label %938

936:                                              ; preds = %919
  %937 = load i32, ptr %56, align 4, !tbaa !9
  br label %941

938:                                              ; preds = %919
  %939 = load ptr, ptr %18, align 8, !tbaa !5
  %940 = load i32, ptr %939, align 4, !tbaa !9
  br label %941

941:                                              ; preds = %938, %936
  %942 = phi i32 [ %937, %936 ], [ %940, %938 ]
  store i32 %942, ptr %50, align 4, !tbaa !9
  %943 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %943, ptr %74, align 4, !tbaa !9
  br label %983

944:                                              ; preds = %916
  %945 = load i32, ptr %40, align 4, !tbaa !9
  %946 = add nsw i32 %945, 1
  %947 = sdiv i32 %946, 2
  %948 = load ptr, ptr %19, align 8, !tbaa !5
  %949 = load i32, ptr %948, align 4, !tbaa !9
  %950 = mul nsw i32 %947, %949
  %951 = load i32, ptr %82, align 4, !tbaa !9
  %952 = add nsw i32 %950, %951
  store i32 %952, ptr %56, align 4, !tbaa !9
  %953 = load i32, ptr %56, align 4, !tbaa !9
  %954 = load ptr, ptr %19, align 8, !tbaa !5
  %955 = load i32, ptr %954, align 4, !tbaa !9
  %956 = sub nsw i32 %953, %955
  %957 = add nsw i32 %956, 1
  store i32 %957, ptr %55, align 4, !tbaa !9
  %958 = load i32, ptr %56, align 4, !tbaa !9
  %959 = load ptr, ptr %18, align 8, !tbaa !5
  %960 = load i32, ptr %959, align 4, !tbaa !9
  %961 = icmp sle i32 %958, %960
  br i1 %961, label %962, label %964

962:                                              ; preds = %944
  %963 = load i32, ptr %56, align 4, !tbaa !9
  br label %967

964:                                              ; preds = %944
  %965 = load ptr, ptr %18, align 8, !tbaa !5
  %966 = load i32, ptr %965, align 4, !tbaa !9
  br label %967

967:                                              ; preds = %964, %962
  %968 = phi i32 [ %963, %962 ], [ %966, %964 ]
  store i32 %968, ptr %50, align 4, !tbaa !9
  %969 = load i32, ptr %55, align 4, !tbaa !9
  %970 = load i32, ptr %50, align 4, !tbaa !9
  %971 = sub nsw i32 %970, 1
  %972 = icmp sge i32 %969, %971
  br i1 %972, label %973, label %981

973:                                              ; preds = %967
  %974 = load i32, ptr %50, align 4, !tbaa !9
  %975 = load ptr, ptr %18, align 8, !tbaa !5
  %976 = load i32, ptr %975, align 4, !tbaa !9
  %977 = icmp eq i32 %974, %976
  br i1 %977, label %978, label %981

978:                                              ; preds = %973
  %979 = load ptr, ptr %18, align 8, !tbaa !5
  %980 = load i32, ptr %979, align 4, !tbaa !9
  store i32 %980, ptr %74, align 4, !tbaa !9
  br label %982

981:                                              ; preds = %973, %967
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %982

982:                                              ; preds = %981, %978
  br label %983

983:                                              ; preds = %982, %941
  %984 = load ptr, ptr %17, align 8, !tbaa !5
  %985 = load ptr, ptr %18, align 8, !tbaa !5
  %986 = load ptr, ptr %19, align 8, !tbaa !5
  %987 = load ptr, ptr %26, align 8, !tbaa !5
  %988 = load i32, ptr %38, align 4, !tbaa !9
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds %struct.doublecomplex, ptr %987, i64 %989
  %991 = load ptr, ptr %24, align 8, !tbaa !5
  %992 = load i32, ptr %44, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds %struct.doublecomplex, ptr %991, i64 %993
  %995 = load ptr, ptr %24, align 8, !tbaa !5
  %996 = load i32, ptr %71, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds %struct.doublecomplex, ptr %995, i64 %997
  %999 = load ptr, ptr %26, align 8, !tbaa !5
  %1000 = load i32, ptr %41, align 4, !tbaa !9
  %1001 = load i32, ptr %78, align 4, !tbaa !9
  %1002 = load ptr, ptr %19, align 8, !tbaa !5
  %1003 = load i32, ptr %1002, align 4, !tbaa !9
  %1004 = mul nsw i32 %1001, %1003
  %1005 = add nsw i32 %1000, %1004
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds %struct.doublecomplex, ptr %999, i64 %1006
  call void @zhb2st_kernels_(ptr noundef %984, ptr noundef %59, ptr noundef %63, ptr noundef %55, ptr noundef %50, ptr noundef %82, ptr noundef %985, ptr noundef %986, ptr noundef %66, ptr noundef %990, ptr noundef %77, ptr noundef %994, ptr noundef %998, ptr noundef %79, ptr noundef %1007)
  %1008 = load i32, ptr %74, align 4, !tbaa !9
  %1009 = load ptr, ptr %18, align 8, !tbaa !5
  %1010 = load i32, ptr %1009, align 4, !tbaa !9
  %1011 = sub nsw i32 %1010, 1
  %1012 = icmp sge i32 %1008, %1011
  br i1 %1012, label %1013, label %1016

1013:                                             ; preds = %983
  %1014 = load i32, ptr %81, align 4, !tbaa !9
  %1015 = add nsw i32 %1014, 1
  store i32 %1015, ptr %81, align 4, !tbaa !9
  br label %1020

1016:                                             ; preds = %983
  br label %1017

1017:                                             ; preds = %1016
  %1018 = load i32, ptr %48, align 4, !tbaa !9
  %1019 = add nsw i32 %1018, 1
  store i32 %1019, ptr %48, align 4, !tbaa !9
  br label %890, !llvm.loop !24

1020:                                             ; preds = %1013, %890
  br label %1021

1021:                                             ; preds = %1020
  %1022 = load i32, ptr %82, align 4, !tbaa !9
  %1023 = add nsw i32 %1022, 1
  store i32 %1023, ptr %82, align 4, !tbaa !9
  br label %884, !llvm.loop !25

1024:                                             ; preds = %884
  br label %1025

1025:                                             ; preds = %1024
  %1026 = load i32, ptr %49, align 4, !tbaa !9
  %1027 = add nsw i32 %1026, 1
  store i32 %1027, ptr %49, align 4, !tbaa !9
  br label %876, !llvm.loop !26

1028:                                             ; preds = %876
  br label %1029

1029:                                             ; preds = %1028
  %1030 = load i32, ptr %47, align 4, !tbaa !9
  %1031 = add nsw i32 %1030, 1
  store i32 %1031, ptr %47, align 4, !tbaa !9
  br label %856, !llvm.loop !27

1032:                                             ; preds = %873, %856
  br label %1033

1033:                                             ; preds = %1032
  %1034 = load i32, ptr %69, align 4, !tbaa !9
  %1035 = add nsw i32 %1034, 1
  store i32 %1035, ptr %69, align 4, !tbaa !9
  br label %826, !llvm.loop !28

1036:                                             ; preds = %826
  %1037 = load ptr, ptr %18, align 8, !tbaa !5
  %1038 = load i32, ptr %1037, align 4, !tbaa !9
  store i32 %1038, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %1039

1039:                                             ; preds = %1060, %1036
  %1040 = load i32, ptr %47, align 4, !tbaa !9
  %1041 = load i32, ptr %31, align 4, !tbaa !9
  %1042 = icmp sle i32 %1040, %1041
  br i1 %1042, label %1043, label %1063

1043:                                             ; preds = %1039
  %1044 = load i32, ptr %43, align 4, !tbaa !9
  %1045 = load i32, ptr %47, align 4, !tbaa !9
  %1046 = sub nsw i32 %1045, 1
  %1047 = load i32, ptr %77, align 4, !tbaa !9
  %1048 = mul nsw i32 %1046, %1047
  %1049 = add nsw i32 %1044, %1048
  store i32 %1049, ptr %32, align 4, !tbaa !9
  %1050 = load ptr, ptr %26, align 8, !tbaa !5
  %1051 = load i32, ptr %32, align 4, !tbaa !9
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds %struct.doublecomplex, ptr %1050, i64 %1052
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %1053, i32 0, i32 0
  %1055 = load double, ptr %1054, align 8, !tbaa !11
  %1056 = load ptr, ptr %22, align 8, !tbaa !5
  %1057 = load i32, ptr %47, align 4, !tbaa !9
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds double, ptr %1056, i64 %1058
  store double %1055, ptr %1059, align 8, !tbaa !15
  br label %1060

1060:                                             ; preds = %1043
  %1061 = load i32, ptr %47, align 4, !tbaa !9
  %1062 = add nsw i32 %1061, 1
  store i32 %1062, ptr %47, align 4, !tbaa !9
  br label %1039, !llvm.loop !29

1063:                                             ; preds = %1039
  %1064 = load i32, ptr %60, align 4, !tbaa !9
  %1065 = icmp ne i32 %1064, 0
  br i1 %1065, label %1066, label %1094

1066:                                             ; preds = %1063
  %1067 = load ptr, ptr %18, align 8, !tbaa !5
  %1068 = load i32, ptr %1067, align 4, !tbaa !9
  %1069 = sub nsw i32 %1068, 1
  store i32 %1069, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %1070

1070:                                             ; preds = %1090, %1066
  %1071 = load i32, ptr %47, align 4, !tbaa !9
  %1072 = load i32, ptr %31, align 4, !tbaa !9
  %1073 = icmp sle i32 %1071, %1072
  br i1 %1073, label %1074, label %1093

1074:                                             ; preds = %1070
  %1075 = load i32, ptr %73, align 4, !tbaa !9
  %1076 = load i32, ptr %47, align 4, !tbaa !9
  %1077 = load i32, ptr %77, align 4, !tbaa !9
  %1078 = mul nsw i32 %1076, %1077
  %1079 = add nsw i32 %1075, %1078
  store i32 %1079, ptr %32, align 4, !tbaa !9
  %1080 = load ptr, ptr %26, align 8, !tbaa !5
  %1081 = load i32, ptr %32, align 4, !tbaa !9
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds %struct.doublecomplex, ptr %1080, i64 %1082
  %1084 = getelementptr inbounds %struct.doublecomplex, ptr %1083, i32 0, i32 0
  %1085 = load double, ptr %1084, align 8, !tbaa !11
  %1086 = load ptr, ptr %23, align 8, !tbaa !5
  %1087 = load i32, ptr %47, align 4, !tbaa !9
  %1088 = sext i32 %1087 to i64
  %1089 = getelementptr inbounds double, ptr %1086, i64 %1088
  store double %1085, ptr %1089, align 8, !tbaa !15
  br label %1090

1090:                                             ; preds = %1074
  %1091 = load i32, ptr %47, align 4, !tbaa !9
  %1092 = add nsw i32 %1091, 1
  store i32 %1092, ptr %47, align 4, !tbaa !9
  br label %1070, !llvm.loop !30

1093:                                             ; preds = %1070
  br label %1123

1094:                                             ; preds = %1063
  %1095 = load ptr, ptr %18, align 8, !tbaa !5
  %1096 = load i32, ptr %1095, align 4, !tbaa !9
  %1097 = sub nsw i32 %1096, 1
  store i32 %1097, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %1098

1098:                                             ; preds = %1119, %1094
  %1099 = load i32, ptr %47, align 4, !tbaa !9
  %1100 = load i32, ptr %31, align 4, !tbaa !9
  %1101 = icmp sle i32 %1099, %1100
  br i1 %1101, label %1102, label %1122

1102:                                             ; preds = %1098
  %1103 = load i32, ptr %73, align 4, !tbaa !9
  %1104 = load i32, ptr %47, align 4, !tbaa !9
  %1105 = sub nsw i32 %1104, 1
  %1106 = load i32, ptr %77, align 4, !tbaa !9
  %1107 = mul nsw i32 %1105, %1106
  %1108 = add nsw i32 %1103, %1107
  store i32 %1108, ptr %32, align 4, !tbaa !9
  %1109 = load ptr, ptr %26, align 8, !tbaa !5
  %1110 = load i32, ptr %32, align 4, !tbaa !9
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds %struct.doublecomplex, ptr %1109, i64 %1111
  %1113 = getelementptr inbounds %struct.doublecomplex, ptr %1112, i32 0, i32 0
  %1114 = load double, ptr %1113, align 8, !tbaa !11
  %1115 = load ptr, ptr %23, align 8, !tbaa !5
  %1116 = load i32, ptr %47, align 4, !tbaa !9
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds double, ptr %1115, i64 %1117
  store double %1114, ptr %1118, align 8, !tbaa !15
  br label %1119

1119:                                             ; preds = %1102
  %1120 = load i32, ptr %47, align 4, !tbaa !9
  %1121 = add nsw i32 %1120, 1
  store i32 %1121, ptr %47, align 4, !tbaa !9
  br label %1098, !llvm.loop !31

1122:                                             ; preds = %1098
  br label %1123

1123:                                             ; preds = %1122, %1093
  %1124 = load i32, ptr %52, align 4, !tbaa !9
  %1125 = sitofp i32 %1124 to double
  %1126 = load ptr, ptr %24, align 8, !tbaa !5
  %1127 = getelementptr inbounds %struct.doublecomplex, ptr %1126, i64 1
  %1128 = getelementptr inbounds %struct.doublecomplex, ptr %1127, i32 0, i32 0
  store double %1125, ptr %1128, align 8, !tbaa !11
  %1129 = load ptr, ptr %24, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %1129, i64 1
  %1131 = getelementptr inbounds %struct.doublecomplex, ptr %1130, i32 0, i32 1
  store double 0.000000e+00, ptr %1131, align 8, !tbaa !14
  %1132 = load i32, ptr %57, align 4, !tbaa !9
  %1133 = sitofp i32 %1132 to double
  %1134 = load ptr, ptr %26, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %1134, i64 1
  %1136 = getelementptr inbounds %struct.doublecomplex, ptr %1135, i32 0, i32 0
  store double %1133, ptr %1136, align 8, !tbaa !11
  %1137 = load ptr, ptr %26, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.doublecomplex, ptr %1137, i64 1
  %1139 = getelementptr inbounds %struct.doublecomplex, ptr %1138, i32 0, i32 1
  store double 0.000000e+00, ptr %1139, align 8, !tbaa !14
  store i32 1, ptr %86, align 4
  br label %1140

1140:                                             ; preds = %1123, %723, %359, %246, %240, %232
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %80) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  ret void
}

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

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

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

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

; Function Attrs: nounwind
declare double @cabs(double noundef, double noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.floor.f64(double) #5

declare void @zlacpy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @zlaset_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @zhb2st_kernels_(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 "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 #4 = { inlinehint 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{!13, !13, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !7, i64 0}
!24 = distinct !{!24, !17}
!25 = distinct !{!25, !17}
!26 = distinct !{!26, !17}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}


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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@c__2 = external hidden global i32, align 4
@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@c_n1 = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4
@c__4 = external hidden global i32, align 4
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8

; Function Attrs: nounwind uwtable
define dso_local void @zhetrd_hb2st_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef writeonly %7, ptr nocapture noundef writeonly %8, ptr noundef %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr nocapture noundef readonly %12, ptr nocapture noundef %13) local_unnamed_addr #0 {
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca %struct.doublecomplex, align 16
  %24 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  %25 = load i32, ptr %6, align 4, !tbaa !5
  %narrow = xor i32 %25, -1
  %26 = sext i32 %narrow to i64
  %27 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %26
  %28 = getelementptr inbounds i8, ptr %7, i64 -8
  %29 = getelementptr inbounds i8, ptr %8, i64 -8
  %30 = getelementptr inbounds i8, ptr %9, i64 -16
  %31 = getelementptr inbounds i8, ptr %11, i64 -16
  store i32 0, ptr %13, align 4, !tbaa !5
  %32 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #7
  %33 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #7
  store i32 %33, ptr %18, align 4, !tbaa !5
  %34 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.2) #7
  %35 = load i32, ptr %12, align 4, !tbaa !5
  %36 = icmp eq i32 %35, -1
  br i1 %36, label %40, label %37

37:                                               ; preds = %14
  %38 = load i32, ptr %10, align 4, !tbaa !5
  %39 = icmp eq i32 %38, -1
  br label %40

40:                                               ; preds = %37, %14
  %41 = phi i1 [ true, %14 ], [ %39, %37 ]
  %42 = tail call i32 @ilaenv2stage_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str.3, ptr noundef %1, ptr noundef %3, ptr noundef %4, ptr noundef nonnull @c_n1, ptr noundef nonnull @c_n1) #7
  store i32 %42, ptr %20, align 4, !tbaa !5
  %43 = call i32 @ilaenv2stage_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str.3, ptr noundef %1, ptr noundef %3, ptr noundef %4, ptr noundef nonnull %20, ptr noundef nonnull @c_n1) #7
  %44 = call i32 @ilaenv2stage_(ptr noundef nonnull @c__4, ptr noundef nonnull @.str.3, ptr noundef %1, ptr noundef %3, ptr noundef %4, ptr noundef nonnull %20, ptr noundef nonnull @c_n1) #7
  %.not = icmp eq i32 %32, 0
  br i1 %.not, label %45, label %47

45:                                               ; preds = %40
  %46 = call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.4) #7
  %.not389 = icmp eq i32 %46, 0
  br i1 %.not389, label %.thread.sink.split, label %47

47:                                               ; preds = %45, %40
  %48 = call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #7
  %.not390 = icmp eq i32 %48, 0
  br i1 %.not390, label %.thread.sink.split, label %49

49:                                               ; preds = %47
  %.not391 = icmp eq i32 %34, 0
  br i1 %.not391, label %50, label %52

50:                                               ; preds = %49
  %51 = call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #7
  %.not392 = icmp eq i32 %51, 0
  br i1 %.not392, label %.thread.sink.split, label %52

52:                                               ; preds = %50, %49
  %53 = load i32, ptr %3, align 4, !tbaa !5
  %54 = icmp slt i32 %53, 0
  br i1 %54, label %.thread.sink.split, label %55

55:                                               ; preds = %52
  %56 = load i32, ptr %4, align 4, !tbaa !5
  %57 = icmp slt i32 %56, 0
  br i1 %57, label %.thread.sink.split, label %58

58:                                               ; preds = %55
  %59 = load i32, ptr %6, align 4, !tbaa !5
  %.not393 = icmp sgt i32 %59, %56
  br i1 %.not393, label %60, label %.thread.sink.split

60:                                               ; preds = %58
  %61 = load i32, ptr %10, align 4, !tbaa !5
  %62 = icmp sge i32 %61, %43
  %or.cond = select i1 %62, i1 true, i1 %41
  br i1 %or.cond, label %63, label %.thread.sink.split

63:                                               ; preds = %60
  %64 = load i32, ptr %12, align 4, !tbaa !5
  %65 = icmp sge i32 %64, %44
  %or.cond3 = select i1 %65, i1 true, i1 %41
  br i1 %or.cond3, label %66, label %.thread.sink.split

66:                                               ; preds = %63
  %.pr = load i32, ptr %13, align 4, !tbaa !5
  %67 = icmp eq i32 %.pr, 0
  br i1 %67, label %70, label %.thread

.thread.sink.split:                               ; preds = %63, %60, %58, %55, %52, %50, %47, %45
  %.sink = phi i32 [ -1, %45 ], [ -2, %47 ], [ -3, %50 ], [ -4, %52 ], [ -5, %55 ], [ -7, %58 ], [ -11, %60 ], [ -13, %63 ]
  store i32 %.sink, ptr %13, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %66
  %.ph421 = phi i32 [ %.pr, %66 ], [ %.sink, %.thread.sink.split ]
  %68 = sub nsw i32 0, %.ph421
  store i32 %68, ptr %15, align 4, !tbaa !5
  %69 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %15, i32 noundef 12) #7
  br label %414

70:                                               ; preds = %66
  %71 = sitofp i32 %43 to double
  store double %71, ptr %9, align 8, !tbaa !9
  %72 = getelementptr inbounds i8, ptr %9, i64 8
  store double 0.000000e+00, ptr %72, align 8, !tbaa !12
  %73 = sitofp i32 %44 to double
  store double %73, ptr %11, align 8, !tbaa !9
  %74 = getelementptr inbounds i8, ptr %11, i64 8
  store double 0.000000e+00, ptr %74, align 8, !tbaa !12
  br i1 %41, label %414, label %75

75:                                               ; preds = %70
  %76 = icmp eq i32 %53, 0
  br i1 %76, label %77, label %78

77:                                               ; preds = %75
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %9, align 8, !tbaa !13
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %11, align 8, !tbaa !13
  br label %414

78:                                               ; preds = %75
  %79 = load i32, ptr %20, align 4, !tbaa !5
  %80 = add nsw i32 %79, %56
  store i32 %80, ptr %22, align 4, !tbaa !5
  %81 = shl nuw i32 %53, 1
  %82 = or disjoint i32 %81, 1
  %83 = shl nuw i32 %56, 1
  %84 = or disjoint i32 %83, 1
  store i32 %84, ptr %21, align 4, !tbaa !5
  %85 = mul nsw i32 %84, %53
  br i1 %.not391, label %89, label %86

86:                                               ; preds = %78
  %87 = add nuw nsw i32 %56, 1
  %88 = add nuw nsw i32 %87, %56
  br label %91

89:                                               ; preds = %78
  %90 = add nuw nsw i32 %56, 2
  br label %91

91:                                               ; preds = %89, %86
  %.0371 = phi i32 [ 1, %86 ], [ %90, %89 ]
  %.0364 = phi i32 [ %56, %86 ], [ 2, %89 ]
  %.0361 = phi i32 [ %88, %86 ], [ 1, %89 ]
  %.0360 = phi i32 [ %87, %86 ], [ 1, %89 ]
  %.0359 = phi i32 [ %83, %86 ], [ 2, %89 ]
  switch i32 %56, label %215 [
    i32 0, label %.lr.ph443.preheader
    i32 1, label %.lr.ph.preheader
  ]

.lr.ph443.preheader:                              ; preds = %91
  %92 = sext i32 %25 to i64
  %93 = zext nneg i32 %.0360 to i64
  %invariant.gep532 = getelementptr %struct.doublecomplex, ptr %27, i64 %93
  %94 = zext nneg i32 %53 to i64
  %xtraiter559 = and i64 %94, 3
  %95 = icmp ult i32 %53, 4
  br i1 %95, label %._crit_edge444.unr-lcssa, label %.lr.ph443.preheader.new

.lr.ph443.preheader.new:                          ; preds = %.lr.ph443.preheader
  %unroll_iter562 = and i64 %94, 2147483644
  br label %.lr.ph443

.lr.ph443:                                        ; preds = %.lr.ph443, %.lr.ph443.preheader.new
  %indvars.iv491 = phi i64 [ 1, %.lr.ph443.preheader.new ], [ %indvars.iv.next492.3, %.lr.ph443 ]
  %niter563 = phi i64 [ 0, %.lr.ph443.preheader.new ], [ %niter563.next.3, %.lr.ph443 ]
  %96 = mul nsw i64 %indvars.iv491, %92
  %gep533 = getelementptr %struct.doublecomplex, ptr %invariant.gep532, i64 %96
  %97 = load double, ptr %gep533, align 8, !tbaa !9
  %98 = getelementptr inbounds double, ptr %28, i64 %indvars.iv491
  store double %97, ptr %98, align 8, !tbaa !13
  %indvars.iv.next492 = add nuw nsw i64 %indvars.iv491, 1
  %99 = mul nsw i64 %indvars.iv.next492, %92
  %gep533.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep532, i64 %99
  %100 = load double, ptr %gep533.1, align 8, !tbaa !9
  %101 = getelementptr double, ptr %7, i64 %indvars.iv491
  store double %100, ptr %101, align 8, !tbaa !13
  %indvars.iv.next492.1 = add nuw nsw i64 %indvars.iv491, 2
  %102 = mul nsw i64 %indvars.iv.next492.1, %92
  %gep533.2 = getelementptr %struct.doublecomplex, ptr %invariant.gep532, i64 %102
  %103 = load double, ptr %gep533.2, align 8, !tbaa !9
  %104 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next492.1
  store double %103, ptr %104, align 8, !tbaa !13
  %indvars.iv.next492.2 = add nuw nsw i64 %indvars.iv491, 3
  %105 = mul nsw i64 %indvars.iv.next492.2, %92
  %gep533.3 = getelementptr %struct.doublecomplex, ptr %invariant.gep532, i64 %105
  %106 = load double, ptr %gep533.3, align 8, !tbaa !9
  %107 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next492.2
  store double %106, ptr %107, align 8, !tbaa !13
  %indvars.iv.next492.3 = add nuw nsw i64 %indvars.iv491, 4
  %niter563.next.3 = add nuw i64 %niter563, 4
  %niter563.ncmp.3 = icmp eq i64 %niter563.next.3, %unroll_iter562
  br i1 %niter563.ncmp.3, label %._crit_edge444.unr-lcssa, label %.lr.ph443, !llvm.loop !14

._crit_edge444.unr-lcssa:                         ; preds = %.lr.ph443, %.lr.ph443.preheader
  %indvars.iv491.unr = phi i64 [ 1, %.lr.ph443.preheader ], [ %indvars.iv.next492.3, %.lr.ph443 ]
  %lcmp.mod561.not = icmp eq i64 %xtraiter559, 0
  br i1 %lcmp.mod561.not, label %._crit_edge444, label %.lr.ph443.epil

.lr.ph443.epil:                                   ; preds = %._crit_edge444.unr-lcssa, %.lr.ph443.epil
  %indvars.iv491.epil = phi i64 [ %indvars.iv.next492.epil, %.lr.ph443.epil ], [ %indvars.iv491.unr, %._crit_edge444.unr-lcssa ]
  %epil.iter560 = phi i64 [ %epil.iter560.next, %.lr.ph443.epil ], [ 0, %._crit_edge444.unr-lcssa ]
  %108 = mul nsw i64 %indvars.iv491.epil, %92
  %gep533.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep532, i64 %108
  %109 = load double, ptr %gep533.epil, align 8, !tbaa !9
  %110 = getelementptr inbounds double, ptr %28, i64 %indvars.iv491.epil
  store double %109, ptr %110, align 8, !tbaa !13
  %indvars.iv.next492.epil = add nuw nsw i64 %indvars.iv491.epil, 1
  %epil.iter560.next = add i64 %epil.iter560, 1
  %epil.iter560.cmp.not = icmp eq i64 %epil.iter560.next, %xtraiter559
  br i1 %epil.iter560.cmp.not, label %._crit_edge444, label %.lr.ph443.epil, !llvm.loop !16

._crit_edge444:                                   ; preds = %.lr.ph443.epil, %._crit_edge444.unr-lcssa
  %.not417.not445 = icmp sgt i32 %53, 1
  br i1 %.not417.not445, label %.lr.ph448.preheader, label %._crit_edge449

.lr.ph448.preheader:                              ; preds = %._crit_edge444
  %111 = add nsw i32 %53, -1
  %112 = zext nneg i32 %111 to i64
  %113 = shl nuw nsw i64 %112, 3
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 %113, i1 false), !tbaa !13
  br label %._crit_edge449

._crit_edge449:                                   ; preds = %.lr.ph448.preheader, %._crit_edge444
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %9, align 8, !tbaa !13
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %11, align 8, !tbaa !13
  br label %414

.lr.ph.preheader:                                 ; preds = %91
  %114 = sext i32 %25 to i64
  %115 = zext nneg i32 %.0360 to i64
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %27, i64 %115
  %116 = zext nneg i32 %53 to i64
  %xtraiter = and i64 %116, 3
  %117 = icmp ult i32 %53, 4
  br i1 %117, label %._crit_edge.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %116, 2147483644
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %118 = mul nsw i64 %indvars.iv, %114
  %gep523 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %118
  %119 = load double, ptr %gep523, align 8, !tbaa !9
  %120 = getelementptr inbounds double, ptr %28, i64 %indvars.iv
  store double %119, ptr %120, align 8, !tbaa !13
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %121 = mul nsw i64 %indvars.iv.next, %114
  %gep523.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %121
  %122 = load double, ptr %gep523.1, align 8, !tbaa !9
  %123 = getelementptr double, ptr %7, i64 %indvars.iv
  store double %122, ptr %123, align 8, !tbaa !13
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %124 = mul nsw i64 %indvars.iv.next.1, %114
  %gep523.2 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %124
  %125 = load double, ptr %gep523.2, align 8, !tbaa !9
  %126 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next.1
  store double %125, ptr %126, align 8, !tbaa !13
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %127 = mul nsw i64 %indvars.iv.next.2, %114
  %gep523.3 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %127
  %128 = load double, ptr %gep523.3, align 8, !tbaa !9
  %129 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next.2
  store double %128, ptr %129, align 8, !tbaa !13
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add nuw i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.unr-lcssa, label %.lr.ph, !llvm.loop !18

._crit_edge.unr-lcssa:                            ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.unr-lcssa ]
  %130 = mul nsw i64 %indvars.iv.epil, %114
  %gep523.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %130
  %131 = load double, ptr %gep523.epil, align 8, !tbaa !9
  %132 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.epil
  store double %131, ptr %132, align 8, !tbaa !13
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.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 %._crit_edge, label %.lr.ph.epil, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.unr-lcssa
  %133 = add nsw i32 %53, -1
  store i32 %133, ptr %15, align 4, !tbaa !5
  %.not410436 = icmp slt i32 %53, 2
  br i1 %.not391, label %175, label %134

134:                                              ; preds = %._crit_edge
  br i1 %.not410436, label %.loopexit428, label %.lr.ph435

.lr.ph435:                                        ; preds = %134
  %135 = sext i32 %25 to i64
  %136 = zext nneg i32 %.0364 to i64
  %invariant.gep524 = getelementptr %struct.doublecomplex, ptr %27, i64 %136
  %invariant.gep526 = getelementptr %struct.doublecomplex, ptr %27, i64 %136
  br label %137

137:                                              ; preds = %.lr.ph435, %172
  %indvars.iv485 = phi i64 [ 1, %.lr.ph435 ], [ %indvars.iv.next486, %172 ]
  %indvars.iv.next486 = add nuw nsw i64 %indvars.iv485, 1
  %138 = mul nsw i64 %indvars.iv.next486, %135
  %gep525 = getelementptr %struct.doublecomplex, ptr %invariant.gep524, i64 %138
  %139 = getelementptr inbounds i8, ptr %gep525, i64 8
  %140 = load <2 x double>, ptr %gep525, align 8, !tbaa !13
  store <2 x double> %140, ptr %23, align 16, !tbaa !13
  %141 = call { double, double } @Cd(ptr noundef nonnull %23)
  %142 = extractvalue { double, double } %141, 0
  %143 = extractvalue { double, double } %141, 1
  %144 = call double @cabs(double noundef %142, double noundef %143) #7
  store double %144, ptr %gep525, align 8, !tbaa !9
  store double 0.000000e+00, ptr %139, align 8, !tbaa !12
  %145 = getelementptr inbounds double, ptr %29, i64 %indvars.iv485
  store double %144, ptr %145, align 8, !tbaa !13
  %146 = fcmp une double %144, 0.000000e+00
  %147 = load <2 x double>, ptr %23, align 16
  %148 = insertelement <2 x double> poison, double %144, i64 0
  %149 = shufflevector <2 x double> %148, <2 x double> poison, <2 x i32> zeroinitializer
  %150 = fdiv <2 x double> %147, %149
  %151 = insertelement <2 x i1> poison, i1 %146, i64 0
  %152 = shufflevector <2 x i1> %151, <2 x i1> poison, <2 x i32> zeroinitializer
  %153 = select <2 x i1> %152, <2 x double> %150, <2 x double> <double 1.000000e+00, double 0.000000e+00>
  store <2 x double> %153, ptr %23, align 16, !tbaa !13
  %154 = load i32, ptr %3, align 4, !tbaa !5
  %155 = add nsw i32 %154, -1
  %156 = sext i32 %155 to i64
  %157 = icmp slt i64 %indvars.iv485, %156
  br i1 %157, label %158, label %172

158:                                              ; preds = %137
  %159 = add nuw nsw i64 %indvars.iv485, 2
  %160 = mul nsw i64 %159, %135
  %gep527 = getelementptr %struct.doublecomplex, ptr %invariant.gep526, i64 %160
  %161 = load double, ptr %gep527, align 8, !tbaa !9
  %162 = getelementptr inbounds i8, ptr %gep527, i64 8
  %163 = load double, ptr %162, align 8, !tbaa !12
  %164 = fneg double %163
  %165 = insertelement <2 x double> poison, double %163, i64 0
  %166 = insertelement <2 x double> %165, double %164, i64 1
  %167 = fmul <2 x double> %153, %166
  %168 = shufflevector <2 x double> %167, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %169 = insertelement <2 x double> poison, double %161, i64 0
  %170 = shufflevector <2 x double> %169, <2 x double> poison, <2 x i32> zeroinitializer
  %171 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %170, <2 x double> %153, <2 x double> %168)
  store <2 x double> %171, ptr %gep527, align 8, !tbaa !13
  br label %172

172:                                              ; preds = %137, %158
  %173 = load i32, ptr %15, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %.not413.not = icmp slt i64 %indvars.iv485, %174
  br i1 %.not413.not, label %137, label %.loopexit428, !llvm.loop !20

175:                                              ; preds = %._crit_edge
  br i1 %.not410436, label %.loopexit428, label %.lr.ph439

.lr.ph439:                                        ; preds = %175
  %176 = sext i32 %25 to i64
  %177 = zext nneg i32 %.0364 to i64
  %invariant.gep528 = getelementptr %struct.doublecomplex, ptr %27, i64 %177
  %invariant.gep530 = getelementptr %struct.doublecomplex, ptr %27, i64 %177
  br label %178

178:                                              ; preds = %.lr.ph439, %._crit_edge517
  %indvars.iv488 = phi i64 [ 1, %.lr.ph439 ], [ %199, %._crit_edge517 ]
  %179 = mul nsw i64 %indvars.iv488, %176
  %gep529 = getelementptr %struct.doublecomplex, ptr %invariant.gep528, i64 %179
  %180 = getelementptr inbounds i8, ptr %gep529, i64 8
  %181 = load <2 x double>, ptr %gep529, align 8, !tbaa !13
  store <2 x double> %181, ptr %23, align 16, !tbaa !13
  %182 = call { double, double } @Cd(ptr noundef nonnull %23)
  %183 = extractvalue { double, double } %182, 0
  %184 = extractvalue { double, double } %182, 1
  %185 = call double @cabs(double noundef %183, double noundef %184) #7
  store double %185, ptr %gep529, align 8, !tbaa !9
  store double 0.000000e+00, ptr %180, align 8, !tbaa !12
  %186 = getelementptr inbounds double, ptr %29, i64 %indvars.iv488
  store double %185, ptr %186, align 8, !tbaa !13
  %187 = fcmp une double %185, 0.000000e+00
  %188 = load <2 x double>, ptr %23, align 16
  %189 = insertelement <2 x double> poison, double %185, i64 0
  %190 = shufflevector <2 x double> %189, <2 x double> poison, <2 x i32> zeroinitializer
  %191 = fdiv <2 x double> %188, %190
  %192 = insertelement <2 x i1> poison, i1 %187, i64 0
  %193 = shufflevector <2 x i1> %192, <2 x i1> poison, <2 x i32> zeroinitializer
  %194 = select <2 x i1> %193, <2 x double> %191, <2 x double> <double 1.000000e+00, double 0.000000e+00>
  store <2 x double> %194, ptr %23, align 16, !tbaa !13
  %195 = load i32, ptr %3, align 4, !tbaa !5
  %196 = add nsw i32 %195, -1
  %197 = sext i32 %196 to i64
  %198 = icmp slt i64 %indvars.iv488, %197
  %199 = add nuw nsw i64 %indvars.iv488, 1
  br i1 %198, label %200, label %._crit_edge517

200:                                              ; preds = %178
  %201 = mul nsw i64 %199, %176
  %gep531 = getelementptr %struct.doublecomplex, ptr %invariant.gep530, i64 %201
  %202 = load double, ptr %gep531, align 8, !tbaa !9
  %203 = getelementptr inbounds i8, ptr %gep531, i64 8
  %204 = load double, ptr %203, align 8, !tbaa !12
  %205 = fneg double %204
  %206 = insertelement <2 x double> poison, double %204, i64 0
  %207 = insertelement <2 x double> %206, double %205, i64 1
  %208 = fmul <2 x double> %194, %207
  %209 = shufflevector <2 x double> %208, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %210 = insertelement <2 x double> poison, double %202, i64 0
  %211 = shufflevector <2 x double> %210, <2 x double> poison, <2 x i32> zeroinitializer
  %212 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %211, <2 x double> %194, <2 x double> %209)
  store <2 x double> %212, ptr %gep531, align 8, !tbaa !13
  br label %._crit_edge517

._crit_edge517:                                   ; preds = %178, %200
  %213 = load i32, ptr %15, align 4, !tbaa !5
  %214 = sext i32 %213 to i64
  %.not410.not = icmp slt i64 %indvars.iv488, %214
  br i1 %.not410.not, label %178, label %.loopexit428, !llvm.loop !21

.loopexit428:                                     ; preds = %172, %._crit_edge517, %134, %175
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %9, align 8, !tbaa !13
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %11, align 8, !tbaa !13
  br label %414

215:                                              ; preds = %91
  %216 = uitofp nneg i32 %53 to float
  %217 = add nsw i32 %53, -1
  %218 = uitofp nneg i32 %217 to float
  %219 = fdiv float %218, %216
  %220 = fadd float %219, 5.000000e-01
  %221 = fcmp ogt float %220, 0.000000e+00
  br i1 %221, label %222, label %225

222:                                              ; preds = %215
  %223 = call float @llvm.floor.f32(float %220)
  %224 = fpext float %223 to double
  br label %230

225:                                              ; preds = %215
  %226 = fneg float %220
  %227 = call float @llvm.floor.f32(float %226)
  %228 = fpext float %227 to double
  %229 = fneg double %228
  br label %230

230:                                              ; preds = %225, %222
  %231 = phi double [ %224, %222 ], [ %229, %225 ]
  %232 = fptosi double %231 to i32
  %233 = add nuw nsw i32 %56, 1
  store i32 %233, ptr %15, align 4, !tbaa !5
  %234 = zext nneg i32 %.0360 to i64
  %235 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %234
  call void @zlacpy_(ptr noundef nonnull @.str.6, ptr noundef nonnull %15, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %235, ptr noundef nonnull %21) #7
  %236 = zext nneg i32 %.0371 to i64
  %237 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %236
  call void @zlaset_(ptr noundef nonnull @.str.6, ptr noundef nonnull %4, ptr noundef nonnull %3, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b1, ptr noundef nonnull %237, ptr noundef nonnull %21) #7
  store i32 %232, ptr %15, align 4, !tbaa !5
  %.not396464 = icmp slt i32 %232, 1
  %.pre516 = load i32, ptr %3, align 4, !tbaa !5
  br i1 %.not396464, label %._crit_edge468, label %.lr.ph467

.lr.ph467:                                        ; preds = %230
  %238 = sext i32 %82 to i64
  %239 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %238
  %240 = sext i32 %85 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %11, i64 %240
  br label %241

241:                                              ; preds = %.lr.ph467, %._crit_edge462
  %242 = phi i32 [ %232, %.lr.ph467 ], [ %351, %._crit_edge462 ]
  %243 = phi i32 [ %.pre516, %.lr.ph467 ], [ %352, %._crit_edge462 ]
  %244 = phi i32 [ %.pre516, %.lr.ph467 ], [ %353, %._crit_edge462 ]
  %.0362465 = phi i32 [ 1, %.lr.ph467 ], [ %354, %._crit_edge462 ]
  %245 = add nsw i32 %.0362465, -1
  %246 = mul nsw i32 %245, %53
  %247 = add nsw i32 %246, 1
  %248 = mul i32 %.0362465, %53
  %249 = add nsw i32 %244, -1
  %250 = call i32 @llvm.smin.i32(i32 %248, i32 %249)
  %.not401.not457 = icmp slt i32 %247, %244
  br i1 %.not401.not457, label %.lr.ph461.preheader, label %._crit_edge462

.lr.ph461.preheader:                              ; preds = %241
  %.not550 = icmp sgt i32 %250, %246
  br i1 %.not550, label %.lr.ph453.preheader.lr.ph, label %._crit_edge462.loopexit

.lr.ph453.preheader.lr.ph:                        ; preds = %.lr.ph461.preheader
  %251 = call i32 @llvm.smin.i32(i32 %247, i32 %250)
  br label %.lr.ph453.preheader

.lr.ph453.preheader:                              ; preds = %._crit_edge454.2, %.lr.ph453.preheader.lr.ph
  %252 = phi i32 [ %251, %.lr.ph453.preheader.lr.ph ], [ %347, %._crit_edge454.2 ]
  %.5458546 = phi i32 [ %247, %.lr.ph453.preheader.lr.ph ], [ %346, %._crit_edge454.2 ]
  %.0459545 = phi i32 [ %247, %.lr.ph453.preheader.lr.ph ], [ %.2.lcssa.2, %._crit_edge454.2 ]
  %253 = phi i32 [ %243, %.lr.ph453.preheader.lr.ph ], [ %345, %._crit_edge454.2 ]
  store i32 %.0459545, ptr %24, align 4, !tbaa !5
  br label %.lr.ph453

.lr.ph453:                                        ; preds = %.lr.ph453.preheader, %.critedge
  %254 = phi i32 [ %279, %.critedge ], [ %253, %.lr.ph453.preheader ]
  %.2452 = phi i32 [ %.3, %.critedge ], [ %.0459545, %.lr.ph453.preheader ]
  %storemerge451 = phi i32 [ %283, %.critedge ], [ %.0459545, %.lr.ph453.preheader ]
  %255 = sub nsw i32 %.5458546, %storemerge451
  %256 = mul nsw i32 %255, 3
  %257 = add i32 %256, 1
  %258 = icmp eq i32 %.5458546, %storemerge451
  br i1 %258, label %.thread423, label %259

.thread423:                                       ; preds = %.lr.ph453
  store i32 1, ptr %19, align 4, !tbaa !5
  br label %269

259:                                              ; preds = %.lr.ph453
  %260 = srem i32 %257, 2
  %261 = sdiv i32 %257, 2
  %262 = add nsw i32 %260, 2
  store i32 %262, ptr %19, align 4, !tbaa !5
  %263 = icmp eq i32 %260, 0
  br i1 %263, label %264, label %269

264:                                              ; preds = %259
  %265 = load i32, ptr %4, align 4, !tbaa !5
  %266 = mul nsw i32 %265, %261
  %267 = add nsw i32 %266, %storemerge451
  %reass.sub = sub i32 %267, %265
  %268 = add i32 %reass.sub, 1
  store i32 %268, ptr %17, align 4, !tbaa !5
  %. = call i32 @llvm.smin.i32(i32 %267, i32 %254)
  store i32 %., ptr %16, align 4, !tbaa !5
  br label %.critedge

269:                                              ; preds = %.thread423, %259
  %270 = add i32 %256, 2
  %271 = sdiv i32 %270, 2
  %272 = load i32, ptr %4, align 4, !tbaa !5
  %273 = mul nsw i32 %272, %271
  %274 = add nsw i32 %273, %storemerge451
  %275 = sub nsw i32 %274, %272
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %17, align 4, !tbaa !5
  %.418 = call i32 @llvm.smin.i32(i32 %274, i32 %254)
  store i32 %.418, ptr %16, align 4, !tbaa !5
  %277 = add nsw i32 %.418, -1
  %.not406 = icmp sge i32 %276, %277
  %278 = icmp sle i32 %254, %274
  %or.cond425 = and i1 %278, %.not406
  %spec.select = select i1 %or.cond425, i32 %254, i32 0
  br label %.critedge

.critedge:                                        ; preds = %269, %264
  %.0358 = phi i32 [ %267, %264 ], [ %spec.select, %269 ]
  call void @zhb2st_kernels_(ptr noundef %2, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %17, ptr noundef nonnull %16, ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %20, ptr noundef nonnull %11, ptr noundef nonnull %21, ptr noundef nonnull %239, ptr noundef nonnull %9, ptr noundef nonnull %22, ptr noundef %gep) #7
  %279 = load i32, ptr %3, align 4, !tbaa !5
  %280 = add nsw i32 %279, -1
  %.not408 = icmp sge i32 %.0358, %280
  %281 = zext i1 %.not408 to i32
  %.3 = add nsw i32 %.2452, %281
  %282 = load i32, ptr %24, align 4, !tbaa !5
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %24, align 4, !tbaa !5
  %.not403.not = icmp slt i32 %282, %252
  br i1 %.not403.not, label %.lr.ph453, label %._crit_edge454, !llvm.loop !22

._crit_edge454:                                   ; preds = %.critedge
  store i32 %.3, ptr %24, align 4, !tbaa !5
  %.not403450.1 = icmp sgt i32 %.3, %252
  br i1 %.not403450.1, label %._crit_edge454.1, label %.lr.ph453.1

.lr.ph453.1:                                      ; preds = %._crit_edge454, %.critedge.1
  %284 = phi i32 [ %309, %.critedge.1 ], [ %279, %._crit_edge454 ]
  %.2452.1 = phi i32 [ %.3.1, %.critedge.1 ], [ %.3, %._crit_edge454 ]
  %storemerge451.1 = phi i32 [ %313, %.critedge.1 ], [ %.3, %._crit_edge454 ]
  %285 = sub nsw i32 %.5458546, %storemerge451.1
  %286 = mul nsw i32 %285, 3
  %287 = add i32 %286, 2
  %288 = icmp eq i32 %287, 1
  br i1 %288, label %.thread423.1, label %289

289:                                              ; preds = %.lr.ph453.1
  %290 = srem i32 %287, 2
  %291 = sdiv i32 %287, 2
  %292 = add nsw i32 %290, 2
  store i32 %292, ptr %19, align 4, !tbaa !5
  %293 = icmp eq i32 %290, 0
  br i1 %293, label %294, label %299

294:                                              ; preds = %289
  %295 = load i32, ptr %4, align 4, !tbaa !5
  %296 = mul nsw i32 %295, %291
  %297 = add nsw i32 %296, %storemerge451.1
  %reass.sub.1 = sub i32 %297, %295
  %298 = add i32 %reass.sub.1, 1
  store i32 %298, ptr %17, align 4, !tbaa !5
  %..1 = call i32 @llvm.smin.i32(i32 %297, i32 %284)
  store i32 %..1, ptr %16, align 4, !tbaa !5
  br label %.critedge.1

.thread423.1:                                     ; preds = %.lr.ph453.1
  store i32 1, ptr %19, align 4, !tbaa !5
  br label %299

299:                                              ; preds = %.thread423.1, %289
  %300 = add i32 %286, 3
  %301 = sdiv i32 %300, 2
  %302 = load i32, ptr %4, align 4, !tbaa !5
  %303 = mul nsw i32 %302, %301
  %304 = add nsw i32 %303, %storemerge451.1
  %305 = sub nsw i32 %304, %302
  %306 = add nsw i32 %305, 1
  store i32 %306, ptr %17, align 4, !tbaa !5
  %.418.1 = call i32 @llvm.smin.i32(i32 %304, i32 %284)
  store i32 %.418.1, ptr %16, align 4, !tbaa !5
  %307 = add nsw i32 %.418.1, -1
  %.not406.1 = icmp sge i32 %306, %307
  %308 = icmp sle i32 %284, %304
  %or.cond425.1 = and i1 %308, %.not406.1
  %spec.select.1 = select i1 %or.cond425.1, i32 %284, i32 0
  br label %.critedge.1

.critedge.1:                                      ; preds = %299, %294
  %.0358.1 = phi i32 [ %297, %294 ], [ %spec.select.1, %299 ]
  call void @zhb2st_kernels_(ptr noundef %2, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %17, ptr noundef nonnull %16, ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %20, ptr noundef nonnull %11, ptr noundef nonnull %21, ptr noundef nonnull %239, ptr noundef nonnull %9, ptr noundef nonnull %22, ptr noundef %gep) #7
  %309 = load i32, ptr %3, align 4, !tbaa !5
  %310 = add nsw i32 %309, -1
  %.not408.1 = icmp sge i32 %.0358.1, %310
  %311 = zext i1 %.not408.1 to i32
  %.3.1 = add nsw i32 %.2452.1, %311
  %312 = load i32, ptr %24, align 4, !tbaa !5
  %313 = add nsw i32 %312, 1
  store i32 %313, ptr %24, align 4, !tbaa !5
  %.not403.not.1 = icmp slt i32 %312, %252
  br i1 %.not403.not.1, label %.lr.ph453.1, label %._crit_edge454.1, !llvm.loop !22

._crit_edge454.1:                                 ; preds = %.critedge.1, %._crit_edge454
  %314 = phi i32 [ %279, %._crit_edge454 ], [ %309, %.critedge.1 ]
  %.2.lcssa.1 = phi i32 [ %.3, %._crit_edge454 ], [ %.3.1, %.critedge.1 ]
  store i32 %.2.lcssa.1, ptr %24, align 4, !tbaa !5
  %.not403450.2 = icmp sgt i32 %.2.lcssa.1, %252
  br i1 %.not403450.2, label %._crit_edge454.2, label %.lr.ph453.2

.lr.ph453.2:                                      ; preds = %._crit_edge454.1, %.critedge.2
  %315 = phi i32 [ %340, %.critedge.2 ], [ %314, %._crit_edge454.1 ]
  %.2452.2 = phi i32 [ %.3.2, %.critedge.2 ], [ %.2.lcssa.1, %._crit_edge454.1 ]
  %storemerge451.2 = phi i32 [ %344, %.critedge.2 ], [ %.2.lcssa.1, %._crit_edge454.1 ]
  %316 = sub nsw i32 %.5458546, %storemerge451.2
  %317 = mul nsw i32 %316, 3
  %318 = add i32 %317, 3
  %319 = icmp eq i32 %318, 1
  br i1 %319, label %.thread423.2, label %320

320:                                              ; preds = %.lr.ph453.2
  %321 = srem i32 %318, 2
  %322 = sdiv i32 %318, 2
  %323 = add nsw i32 %321, 2
  store i32 %323, ptr %19, align 4, !tbaa !5
  %324 = icmp eq i32 %321, 0
  br i1 %324, label %325, label %330

325:                                              ; preds = %320
  %326 = load i32, ptr %4, align 4, !tbaa !5
  %327 = mul nsw i32 %326, %322
  %328 = add nsw i32 %327, %storemerge451.2
  %reass.sub.2 = sub i32 %328, %326
  %329 = add i32 %reass.sub.2, 1
  store i32 %329, ptr %17, align 4, !tbaa !5
  %..2 = call i32 @llvm.smin.i32(i32 %328, i32 %315)
  store i32 %..2, ptr %16, align 4, !tbaa !5
  br label %.critedge.2

.thread423.2:                                     ; preds = %.lr.ph453.2
  store i32 1, ptr %19, align 4, !tbaa !5
  br label %330

330:                                              ; preds = %.thread423.2, %320
  %331 = add i32 %317, 4
  %332 = sdiv i32 %331, 2
  %333 = load i32, ptr %4, align 4, !tbaa !5
  %334 = mul nsw i32 %333, %332
  %335 = add nsw i32 %334, %storemerge451.2
  %336 = sub nsw i32 %335, %333
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %17, align 4, !tbaa !5
  %.418.2 = call i32 @llvm.smin.i32(i32 %335, i32 %315)
  store i32 %.418.2, ptr %16, align 4, !tbaa !5
  %338 = add nsw i32 %.418.2, -1
  %.not406.2 = icmp sge i32 %337, %338
  %339 = icmp sle i32 %315, %335
  %or.cond425.2 = and i1 %339, %.not406.2
  %spec.select.2 = select i1 %or.cond425.2, i32 %315, i32 0
  br label %.critedge.2

.critedge.2:                                      ; preds = %330, %325
  %.0358.2 = phi i32 [ %328, %325 ], [ %spec.select.2, %330 ]
  call void @zhb2st_kernels_(ptr noundef %2, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %17, ptr noundef nonnull %16, ptr noundef nonnull %24, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %20, ptr noundef nonnull %11, ptr noundef nonnull %21, ptr noundef nonnull %239, ptr noundef nonnull %9, ptr noundef nonnull %22, ptr noundef %gep) #7
  %340 = load i32, ptr %3, align 4, !tbaa !5
  %341 = add nsw i32 %340, -1
  %.not408.2 = icmp sge i32 %.0358.2, %341
  %342 = zext i1 %.not408.2 to i32
  %.3.2 = add nsw i32 %.2452.2, %342
  %343 = load i32, ptr %24, align 4, !tbaa !5
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %24, align 4, !tbaa !5
  %.not403.not.2 = icmp slt i32 %343, %252
  br i1 %.not403.not.2, label %.lr.ph453.2, label %._crit_edge454.2, !llvm.loop !22

._crit_edge454.2:                                 ; preds = %.critedge.2, %._crit_edge454.1
  %345 = phi i32 [ %314, %._crit_edge454.1 ], [ %340, %.critedge.2 ]
  %.2.lcssa.2 = phi i32 [ %.2.lcssa.1, %._crit_edge454.1 ], [ %.3.2, %.critedge.2 ]
  %346 = add nsw i32 %.5458546, 1
  %.not401.not = icmp sge i32 %346, %244
  %347 = call i32 @llvm.smin.i32(i32 %346, i32 %250)
  %348 = icmp sgt i32 %.2.lcssa.2, %347
  %or.cond552 = select i1 %.not401.not, i1 true, i1 %348
  br i1 %or.cond552, label %._crit_edge462.loopexit, label %.lr.ph453.preheader, !llvm.loop !23

._crit_edge462.loopexit:                          ; preds = %._crit_edge454.2, %.lr.ph461.preheader
  %349 = phi i32 [ %243, %.lr.ph461.preheader ], [ %345, %._crit_edge454.2 ]
  %350 = phi i32 [ %244, %.lr.ph461.preheader ], [ %345, %._crit_edge454.2 ]
  %.pre515 = load i32, ptr %15, align 4, !tbaa !5
  br label %._crit_edge462

._crit_edge462:                                   ; preds = %._crit_edge462.loopexit, %241
  %351 = phi i32 [ %.pre515, %._crit_edge462.loopexit ], [ %242, %241 ]
  %352 = phi i32 [ %349, %._crit_edge462.loopexit ], [ %243, %241 ]
  %353 = phi i32 [ %350, %._crit_edge462.loopexit ], [ %244, %241 ]
  %354 = add nuw nsw i32 %.0362465, 1
  %.not396.not = icmp slt i32 %.0362465, %351
  br i1 %.not396.not, label %241, label %._crit_edge468, !llvm.loop !24

._crit_edge468:                                   ; preds = %._crit_edge462, %230
  %355 = phi i32 [ %.pre516, %230 ], [ %352, %._crit_edge462 ]
  %.not397469 = icmp slt i32 %355, 1
  br i1 %.not397469, label %._crit_edge473, label %.lr.ph472

.lr.ph472:                                        ; preds = %._crit_edge468
  %356 = load i32, ptr %21, align 4, !tbaa !5
  %357 = sext i32 %356 to i64
  %358 = sext i32 %.0361 to i64
  %invariant.gep534 = getelementptr %struct.doublecomplex, ptr %31, i64 %358
  %359 = zext nneg i32 %355 to i64
  %xtraiter564 = and i64 %359, 1
  %360 = icmp eq i32 %355, 1
  br i1 %360, label %._crit_edge473.loopexit.unr-lcssa, label %.lr.ph472.new

.lr.ph472.new:                                    ; preds = %.lr.ph472
  %unroll_iter567 = and i64 %359, 2147483646
  br label %361

361:                                              ; preds = %361, %.lr.ph472.new
  %indvars.iv500 = phi i64 [ 1, %.lr.ph472.new ], [ %indvars.iv.next501.1, %361 ]
  %niter568 = phi i64 [ 0, %.lr.ph472.new ], [ %niter568.next.1, %361 ]
  %362 = add nsw i64 %indvars.iv500, -1
  %363 = mul nsw i64 %362, %357
  %gep535 = getelementptr %struct.doublecomplex, ptr %invariant.gep534, i64 %363
  %364 = load double, ptr %gep535, align 8, !tbaa !9
  %365 = getelementptr inbounds double, ptr %28, i64 %indvars.iv500
  store double %364, ptr %365, align 8, !tbaa !13
  %366 = mul nsw i64 %indvars.iv500, %357
  %gep535.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep534, i64 %366
  %367 = load double, ptr %gep535.1, align 8, !tbaa !9
  %368 = getelementptr double, ptr %7, i64 %indvars.iv500
  store double %367, ptr %368, align 8, !tbaa !13
  %indvars.iv.next501.1 = add nuw nsw i64 %indvars.iv500, 2
  %niter568.next.1 = add i64 %niter568, 2
  %niter568.ncmp.1 = icmp eq i64 %niter568.next.1, %unroll_iter567
  br i1 %niter568.ncmp.1, label %._crit_edge473.loopexit.unr-lcssa, label %361, !llvm.loop !25

._crit_edge473.loopexit.unr-lcssa:                ; preds = %361, %.lr.ph472
  %indvars.iv500.unr = phi i64 [ 1, %.lr.ph472 ], [ %indvars.iv.next501.1, %361 ]
  %lcmp.mod566.not = icmp eq i64 %xtraiter564, 0
  br i1 %lcmp.mod566.not, label %._crit_edge473, label %._crit_edge473.loopexit.epilog-lcssa

._crit_edge473.loopexit.epilog-lcssa:             ; preds = %._crit_edge473.loopexit.unr-lcssa
  %369 = add nsw i64 %indvars.iv500.unr, -1
  %370 = mul nsw i64 %369, %357
  %gep535.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep534, i64 %370
  %371 = load double, ptr %gep535.epil, align 8, !tbaa !9
  %372 = getelementptr inbounds double, ptr %28, i64 %indvars.iv500.unr
  store double %371, ptr %372, align 8, !tbaa !13
  br label %._crit_edge473

._crit_edge473:                                   ; preds = %._crit_edge473.loopexit.epilog-lcssa, %._crit_edge473.loopexit.unr-lcssa, %._crit_edge468
  %.not398.not478 = icmp sgt i32 %355, 1
  br i1 %.not391, label %393, label %373

373:                                              ; preds = %._crit_edge473
  br i1 %.not398.not478, label %.lr.ph477, label %.loopexit

.lr.ph477:                                        ; preds = %373
  %374 = load i32, ptr %21, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = sext i32 %.0359 to i64
  %wide.trip.count508 = zext nneg i32 %355 to i64
  %invariant.gep536 = getelementptr %struct.doublecomplex, ptr %31, i64 %376
  %377 = add nsw i64 %wide.trip.count508, -1
  %378 = add nsw i64 %wide.trip.count508, -2
  %xtraiter570 = and i64 %377, 3
  %379 = icmp ult i64 %378, 3
  br i1 %379, label %.loopexit.loopexit553.unr-lcssa, label %.lr.ph477.new

.lr.ph477.new:                                    ; preds = %.lr.ph477
  %unroll_iter573 = and i64 %377, -4
  br label %380

380:                                              ; preds = %380, %.lr.ph477.new
  %indvars.iv505 = phi i64 [ 1, %.lr.ph477.new ], [ %indvars.iv.next506.3, %380 ]
  %niter574 = phi i64 [ 0, %.lr.ph477.new ], [ %niter574.next.3, %380 ]
  %381 = mul nsw i64 %indvars.iv505, %375
  %gep537 = getelementptr %struct.doublecomplex, ptr %invariant.gep536, i64 %381
  %382 = load double, ptr %gep537, align 8, !tbaa !9
  %383 = getelementptr inbounds double, ptr %29, i64 %indvars.iv505
  store double %382, ptr %383, align 8, !tbaa !13
  %indvars.iv.next506 = add nuw nsw i64 %indvars.iv505, 1
  %384 = mul nsw i64 %indvars.iv.next506, %375
  %gep537.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep536, i64 %384
  %385 = load double, ptr %gep537.1, align 8, !tbaa !9
  %386 = getelementptr double, ptr %8, i64 %indvars.iv505
  store double %385, ptr %386, align 8, !tbaa !13
  %indvars.iv.next506.1 = add nuw nsw i64 %indvars.iv505, 2
  %387 = mul nsw i64 %indvars.iv.next506.1, %375
  %gep537.2 = getelementptr %struct.doublecomplex, ptr %invariant.gep536, i64 %387
  %388 = load double, ptr %gep537.2, align 8, !tbaa !9
  %389 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next506.1
  store double %388, ptr %389, align 8, !tbaa !13
  %indvars.iv.next506.2 = add nuw nsw i64 %indvars.iv505, 3
  %390 = mul nsw i64 %indvars.iv.next506.2, %375
  %gep537.3 = getelementptr %struct.doublecomplex, ptr %invariant.gep536, i64 %390
  %391 = load double, ptr %gep537.3, align 8, !tbaa !9
  %392 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next506.2
  store double %391, ptr %392, align 8, !tbaa !13
  %indvars.iv.next506.3 = add nuw nsw i64 %indvars.iv505, 4
  %niter574.next.3 = add nuw i64 %niter574, 4
  %niter574.ncmp.3 = icmp eq i64 %niter574.next.3, %unroll_iter573
  br i1 %niter574.ncmp.3, label %.loopexit.loopexit553.unr-lcssa, label %380, !llvm.loop !26

393:                                              ; preds = %._crit_edge473
  br i1 %.not398.not478, label %.lr.ph481, label %.loopexit

.lr.ph481:                                        ; preds = %393
  %394 = load i32, ptr %21, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = sext i32 %.0359 to i64
  %wide.trip.count513 = zext nneg i32 %355 to i64
  %invariant.gep538 = getelementptr %struct.doublecomplex, ptr %31, i64 %396
  %397 = add nsw i64 %wide.trip.count513, -1
  %xtraiter576 = and i64 %397, 1
  %398 = icmp eq i32 %355, 2
  br i1 %398, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph481.new

.lr.ph481.new:                                    ; preds = %.lr.ph481
  %unroll_iter579 = and i64 %397, -2
  br label %399

399:                                              ; preds = %399, %.lr.ph481.new
  %indvars.iv510 = phi i64 [ 1, %.lr.ph481.new ], [ %indvars.iv.next511.1, %399 ]
  %niter580 = phi i64 [ 0, %.lr.ph481.new ], [ %niter580.next.1, %399 ]
  %400 = add nsw i64 %indvars.iv510, -1
  %401 = mul nsw i64 %400, %395
  %gep539 = getelementptr %struct.doublecomplex, ptr %invariant.gep538, i64 %401
  %402 = load double, ptr %gep539, align 8, !tbaa !9
  %403 = getelementptr inbounds double, ptr %29, i64 %indvars.iv510
  store double %402, ptr %403, align 8, !tbaa !13
  %404 = mul nsw i64 %indvars.iv510, %395
  %gep539.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep538, i64 %404
  %405 = load double, ptr %gep539.1, align 8, !tbaa !9
  %406 = getelementptr double, ptr %8, i64 %indvars.iv510
  store double %405, ptr %406, align 8, !tbaa !13
  %indvars.iv.next511.1 = add nuw nsw i64 %indvars.iv510, 2
  %niter580.next.1 = add i64 %niter580, 2
  %niter580.ncmp.1 = icmp eq i64 %niter580.next.1, %unroll_iter579
  br i1 %niter580.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %399, !llvm.loop !27

.loopexit.loopexit.unr-lcssa:                     ; preds = %399, %.lr.ph481
  %indvars.iv510.unr = phi i64 [ 1, %.lr.ph481 ], [ %indvars.iv.next511.1, %399 ]
  %lcmp.mod578.not = icmp eq i64 %xtraiter576, 0
  br i1 %lcmp.mod578.not, label %.loopexit, label %.loopexit.loopexit.epilog-lcssa

.loopexit.loopexit.epilog-lcssa:                  ; preds = %.loopexit.loopexit.unr-lcssa
  %407 = add nsw i64 %indvars.iv510.unr, -1
  %408 = mul nsw i64 %407, %395
  %gep539.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep538, i64 %408
  %409 = load double, ptr %gep539.epil, align 8, !tbaa !9
  %410 = getelementptr inbounds double, ptr %29, i64 %indvars.iv510.unr
  store double %409, ptr %410, align 8, !tbaa !13
  br label %.loopexit

.loopexit.loopexit553.unr-lcssa:                  ; preds = %380, %.lr.ph477
  %indvars.iv505.unr = phi i64 [ 1, %.lr.ph477 ], [ %indvars.iv.next506.3, %380 ]
  %lcmp.mod572.not = icmp eq i64 %xtraiter570, 0
  br i1 %lcmp.mod572.not, label %.loopexit, label %.epil.preheader569

.epil.preheader569:                               ; preds = %.loopexit.loopexit553.unr-lcssa, %.epil.preheader569
  %indvars.iv505.epil = phi i64 [ %indvars.iv.next506.epil, %.epil.preheader569 ], [ %indvars.iv505.unr, %.loopexit.loopexit553.unr-lcssa ]
  %epil.iter571 = phi i64 [ %epil.iter571.next, %.epil.preheader569 ], [ 0, %.loopexit.loopexit553.unr-lcssa ]
  %411 = mul nsw i64 %indvars.iv505.epil, %375
  %gep537.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep536, i64 %411
  %412 = load double, ptr %gep537.epil, align 8, !tbaa !9
  %413 = getelementptr inbounds double, ptr %29, i64 %indvars.iv505.epil
  store double %412, ptr %413, align 8, !tbaa !13
  %indvars.iv.next506.epil = add nuw nsw i64 %indvars.iv505.epil, 1
  %epil.iter571.next = add i64 %epil.iter571, 1
  %epil.iter571.cmp.not = icmp eq i64 %epil.iter571.next, %xtraiter570
  br i1 %epil.iter571.cmp.not, label %.loopexit, label %.epil.preheader569, !llvm.loop !28

.loopexit:                                        ; preds = %.loopexit.loopexit553.unr-lcssa, %.epil.preheader569, %.loopexit.loopexit.epilog-lcssa, %.loopexit.loopexit.unr-lcssa, %373, %393
  store double %71, ptr %9, align 8, !tbaa !9
  store double 0.000000e+00, ptr %72, align 8, !tbaa !12
  store double %73, ptr %11, align 8, !tbaa !9
  store double 0.000000e+00, ptr %74, align 8, !tbaa !12
  br label %414

414:                                              ; preds = %70, %.loopexit, %.loopexit428, %._crit_edge449, %77, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  ret void
}

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

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

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

; Function Attrs: nofree nounwind
declare double @cabs(double noundef, double noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) local_unnamed_addr #4

declare void @zlacpy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @zlaset_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @zhb2st_kernels_(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 float @llvm.floor.f32(float) #5

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #5

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 = { nofree nounwind "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 #4 = { inlinehint 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !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"}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.unroll.disable"}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = distinct !{!28, !17}


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