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

; 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
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c__1 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @zhbtrd_(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) #0 {
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca double, align 8
  %37 = alloca %struct.doublecomplex, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca %struct.doublecomplex, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = alloca i64, align 8
  %58 = alloca i64, align 8
  %59 = alloca double, align 8
  %60 = alloca i64, align 8
  %61 = alloca i64, align 8
  %62 = alloca %struct.doublecomplex, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i32, align 4
  store ptr %0, ptr %14, align 8, !tbaa !5
  store ptr %1, ptr %15, align 8, !tbaa !5
  store ptr %2, ptr %16, align 8, !tbaa !5
  store ptr %3, ptr %17, align 8, !tbaa !5
  store ptr %4, ptr %18, align 8, !tbaa !5
  store ptr %5, ptr %19, align 8, !tbaa !5
  store ptr %6, ptr %20, align 8, !tbaa !5
  store ptr %7, ptr %21, align 8, !tbaa !5
  store ptr %8, ptr %22, align 8, !tbaa !5
  store ptr %9, ptr %23, align 8, !tbaa !5
  store ptr %10, ptr %24, align 8, !tbaa !5
  store ptr %11, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #4
  %71 = load ptr, ptr %19, align 8, !tbaa !5
  %72 = load i64, ptr %71, align 8, !tbaa !9
  store i64 %72, ptr %26, align 8, !tbaa !9
  %73 = load i64, ptr %26, align 8, !tbaa !9
  %74 = add nsw i64 1, %73
  store i64 %74, ptr %27, align 8, !tbaa !9
  %75 = load i64, ptr %27, align 8, !tbaa !9
  %76 = load ptr, ptr %18, align 8, !tbaa !5
  %77 = sub i64 0, %75
  %78 = getelementptr inbounds %struct.doublecomplex, ptr %76, i64 %77
  store ptr %78, ptr %18, align 8, !tbaa !5
  %79 = load ptr, ptr %20, align 8, !tbaa !5
  %80 = getelementptr inbounds double, ptr %79, i32 -1
  store ptr %80, ptr %20, align 8, !tbaa !5
  %81 = load ptr, ptr %21, align 8, !tbaa !5
  %82 = getelementptr inbounds double, ptr %81, i32 -1
  store ptr %82, ptr %21, align 8, !tbaa !5
  %83 = load ptr, ptr %23, align 8, !tbaa !5
  %84 = load i64, ptr %83, align 8, !tbaa !9
  store i64 %84, ptr %28, align 8, !tbaa !9
  %85 = load i64, ptr %28, align 8, !tbaa !9
  %86 = add nsw i64 1, %85
  store i64 %86, ptr %29, align 8, !tbaa !9
  %87 = load i64, ptr %29, align 8, !tbaa !9
  %88 = load ptr, ptr %22, align 8, !tbaa !5
  %89 = sub i64 0, %87
  %90 = getelementptr inbounds %struct.doublecomplex, ptr %88, i64 %89
  store ptr %90, ptr %22, align 8, !tbaa !5
  %91 = load ptr, ptr %24, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.doublecomplex, ptr %91, i32 -1
  store ptr %92, ptr %24, align 8, !tbaa !5
  %93 = load ptr, ptr %14, align 8, !tbaa !5
  %94 = call i64 @lsame_(ptr noundef %93, ptr noundef @.str)
  store i64 %94, ptr %66, align 8, !tbaa !9
  %95 = load i64, ptr %66, align 8, !tbaa !9
  %96 = icmp ne i64 %95, 0
  br i1 %96, label %101, label %97

97:                                               ; preds = %12
  %98 = load ptr, ptr %14, align 8, !tbaa !5
  %99 = call i64 @lsame_(ptr noundef %98, ptr noundef @.str.1)
  %100 = icmp ne i64 %99, 0
  br label %101

101:                                              ; preds = %97, %12
  %102 = phi i1 [ true, %12 ], [ %100, %97 ]
  %103 = zext i1 %102 to i32
  %104 = sext i32 %103 to i64
  store i64 %104, ptr %67, align 8, !tbaa !9
  %105 = load ptr, ptr %15, align 8, !tbaa !5
  %106 = call i64 @lsame_(ptr noundef %105, ptr noundef @.str.1)
  store i64 %106, ptr %68, align 8, !tbaa !9
  %107 = load ptr, ptr %17, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  %109 = add nsw i64 %108, 1
  store i64 %109, ptr %48, align 8, !tbaa !9
  %110 = load ptr, ptr %17, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = sub nsw i64 %111, 1
  store i64 %112, ptr %54, align 8, !tbaa !9
  %113 = load ptr, ptr %19, align 8, !tbaa !5
  %114 = load i64, ptr %113, align 8, !tbaa !9
  %115 = sub nsw i64 %114, 1
  store i64 %115, ptr %60, align 8, !tbaa !9
  store i64 1, ptr %65, align 8, !tbaa !9
  %116 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 0, ptr %116, align 8, !tbaa !9
  %117 = load i64, ptr %67, align 8, !tbaa !9
  %118 = icmp ne i64 %117, 0
  br i1 %118, label %125, label %119

119:                                              ; preds = %101
  %120 = load ptr, ptr %14, align 8, !tbaa !5
  %121 = call i64 @lsame_(ptr noundef %120, ptr noundef @.str.2)
  %122 = icmp ne i64 %121, 0
  br i1 %122, label %125, label %123

123:                                              ; preds = %119
  %124 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 -1, ptr %124, align 8, !tbaa !9
  br label %176

125:                                              ; preds = %119, %101
  %126 = load i64, ptr %68, align 8, !tbaa !9
  %127 = icmp ne i64 %126, 0
  br i1 %127, label %134, label %128

128:                                              ; preds = %125
  %129 = load ptr, ptr %15, align 8, !tbaa !5
  %130 = call i64 @lsame_(ptr noundef %129, ptr noundef @.str.3)
  %131 = icmp ne i64 %130, 0
  br i1 %131, label %134, label %132

132:                                              ; preds = %128
  %133 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 -2, ptr %133, align 8, !tbaa !9
  br label %175

134:                                              ; preds = %128, %125
  %135 = load ptr, ptr %16, align 8, !tbaa !5
  %136 = load i64, ptr %135, align 8, !tbaa !9
  %137 = icmp slt i64 %136, 0
  br i1 %137, label %138, label %140

138:                                              ; preds = %134
  %139 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 -3, ptr %139, align 8, !tbaa !9
  br label %174

140:                                              ; preds = %134
  %141 = load ptr, ptr %17, align 8, !tbaa !5
  %142 = load i64, ptr %141, align 8, !tbaa !9
  %143 = icmp slt i64 %142, 0
  br i1 %143, label %144, label %146

144:                                              ; preds = %140
  %145 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 -4, ptr %145, align 8, !tbaa !9
  br label %173

146:                                              ; preds = %140
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = load i64, ptr %147, align 8, !tbaa !9
  %149 = load i64, ptr %48, align 8, !tbaa !9
  %150 = icmp slt i64 %148, %149
  br i1 %150, label %151, label %153

151:                                              ; preds = %146
  %152 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 -6, ptr %152, align 8, !tbaa !9
  br label %172

153:                                              ; preds = %146
  %154 = load ptr, ptr %23, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = load ptr, ptr %16, align 8, !tbaa !5
  %157 = load i64, ptr %156, align 8, !tbaa !9
  %158 = icmp sge i64 1, %157
  br i1 %158, label %159, label %160

159:                                              ; preds = %153
  br label %163

160:                                              ; preds = %153
  %161 = load ptr, ptr %16, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %160, %159
  %164 = phi i64 [ 1, %159 ], [ %162, %160 ]
  %165 = icmp slt i64 %155, %164
  br i1 %165, label %166, label %171

166:                                              ; preds = %163
  %167 = load i64, ptr %67, align 8, !tbaa !9
  %168 = icmp ne i64 %167, 0
  br i1 %168, label %169, label %171

169:                                              ; preds = %166
  %170 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 -10, ptr %170, align 8, !tbaa !9
  br label %171

171:                                              ; preds = %169, %166, %163
  br label %172

172:                                              ; preds = %171, %151
  br label %173

173:                                              ; preds = %172, %144
  br label %174

174:                                              ; preds = %173, %138
  br label %175

175:                                              ; preds = %174, %132
  br label %176

176:                                              ; preds = %175, %123
  %177 = load ptr, ptr %25, align 8, !tbaa !5
  %178 = load i64, ptr %177, align 8, !tbaa !9
  %179 = icmp ne i64 %178, 0
  br i1 %179, label %180, label %185

180:                                              ; preds = %176
  %181 = load ptr, ptr %25, align 8, !tbaa !5
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = sub nsw i64 0, %182
  store i64 %183, ptr %30, align 8, !tbaa !9
  %184 = call i32 @xerbla_(ptr noundef @.str.4, ptr noundef %30)
  store i32 0, ptr %13, align 4
  store i32 1, ptr %70, align 4
  br label %2296

185:                                              ; preds = %176
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = load i64, ptr %186, align 8, !tbaa !9
  %188 = icmp eq i64 %187, 0
  br i1 %188, label %189, label %190

189:                                              ; preds = %185
  store i32 0, ptr %13, align 4
  store i32 1, ptr %70, align 4
  br label %2296

190:                                              ; preds = %185
  %191 = load i64, ptr %66, align 8, !tbaa !9
  %192 = icmp ne i64 %191, 0
  br i1 %192, label %193, label %201

193:                                              ; preds = %190
  %194 = load ptr, ptr %16, align 8, !tbaa !5
  %195 = load ptr, ptr %16, align 8, !tbaa !5
  %196 = load ptr, ptr %22, align 8, !tbaa !5
  %197 = load i64, ptr %29, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.doublecomplex, ptr %196, i64 %197
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = call i32 @zlaset_(ptr noundef @.str.5, ptr noundef %194, ptr noundef %195, ptr noundef @c_b1, ptr noundef @c_b2, ptr noundef %198, ptr noundef %199)
  br label %201

201:                                              ; preds = %193, %190
  %202 = load i64, ptr %48, align 8, !tbaa !9
  %203 = load ptr, ptr %19, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = mul nsw i64 %202, %204
  store i64 %205, ptr %55, align 8, !tbaa !9
  %206 = load ptr, ptr %16, align 8, !tbaa !5
  %207 = load i64, ptr %206, align 8, !tbaa !9
  %208 = sub nsw i64 %207, 1
  store i64 %208, ptr %30, align 8, !tbaa !9
  %209 = load i64, ptr %30, align 8, !tbaa !9
  %210 = load ptr, ptr %17, align 8, !tbaa !5
  %211 = load i64, ptr %210, align 8, !tbaa !9
  %212 = icmp sle i64 %209, %211
  br i1 %212, label %213, label %215

213:                                              ; preds = %201
  %214 = load i64, ptr %30, align 8, !tbaa !9
  br label %218

215:                                              ; preds = %201
  %216 = load ptr, ptr %17, align 8, !tbaa !5
  %217 = load i64, ptr %216, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %215, %213
  %219 = phi i64 [ %214, %213 ], [ %217, %215 ]
  store i64 %219, ptr %51, align 8, !tbaa !9
  %220 = load i64, ptr %68, align 8, !tbaa !9
  %221 = icmp ne i64 %220, 0
  br i1 %221, label %222, label %1282

222:                                              ; preds = %218
  %223 = load ptr, ptr %17, align 8, !tbaa !5
  %224 = load i64, ptr %223, align 8, !tbaa !9
  %225 = icmp sgt i64 %224, 1
  br i1 %225, label %226, label %1079

226:                                              ; preds = %222
  store i64 0, ptr %47, align 8, !tbaa !9
  %227 = load i64, ptr %51, align 8, !tbaa !9
  %228 = add nsw i64 %227, 2
  store i64 %228, ptr %44, align 8, !tbaa !9
  store i64 1, ptr %45, align 8, !tbaa !9
  %229 = load i64, ptr %48, align 8, !tbaa !9
  %230 = load i64, ptr %26, align 8, !tbaa !9
  %231 = add nsw i64 %229, %230
  store i64 %231, ptr %30, align 8, !tbaa !9
  %232 = load i64, ptr %48, align 8, !tbaa !9
  %233 = load i64, ptr %26, align 8, !tbaa !9
  %234 = add nsw i64 %232, %233
  store i64 %234, ptr %31, align 8, !tbaa !9
  %235 = load ptr, ptr %18, align 8, !tbaa !5
  %236 = load i64, ptr %31, align 8, !tbaa !9
  %237 = getelementptr inbounds %struct.doublecomplex, ptr %235, i64 %236
  %238 = getelementptr inbounds %struct.doublecomplex, ptr %237, i32 0, i32 0
  %239 = load double, ptr %238, align 8, !tbaa !11
  store double %239, ptr %36, align 8, !tbaa !14
  %240 = load double, ptr %36, align 8, !tbaa !14
  %241 = load ptr, ptr %18, align 8, !tbaa !5
  %242 = load i64, ptr %30, align 8, !tbaa !9
  %243 = getelementptr inbounds %struct.doublecomplex, ptr %241, i64 %242
  %244 = getelementptr inbounds %struct.doublecomplex, ptr %243, i32 0, i32 0
  store double %240, ptr %244, align 8, !tbaa !11
  %245 = load ptr, ptr %18, align 8, !tbaa !5
  %246 = load i64, ptr %30, align 8, !tbaa !9
  %247 = getelementptr inbounds %struct.doublecomplex, ptr %245, i64 %246
  %248 = getelementptr inbounds %struct.doublecomplex, ptr %247, i32 0, i32 1
  store double 0.000000e+00, ptr %248, align 8, !tbaa !15
  %249 = load ptr, ptr %16, align 8, !tbaa !5
  %250 = load i64, ptr %249, align 8, !tbaa !9
  %251 = sub nsw i64 %250, 2
  store i64 %251, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %252

252:                                              ; preds = %1075, %226
  %253 = load i64, ptr %38, align 8, !tbaa !9
  %254 = load i64, ptr %30, align 8, !tbaa !9
  %255 = icmp sle i64 %253, %254
  br i1 %255, label %256, label %1078

256:                                              ; preds = %252
  %257 = load i64, ptr %51, align 8, !tbaa !9
  %258 = add nsw i64 %257, 1
  store i64 %258, ptr %40, align 8, !tbaa !9
  br label %259

259:                                              ; preds = %1071, %256
  %260 = load i64, ptr %40, align 8, !tbaa !9
  %261 = icmp sge i64 %260, 2
  br i1 %261, label %262, label %1074

262:                                              ; preds = %259
  %263 = load i64, ptr %51, align 8, !tbaa !9
  %264 = load i64, ptr %44, align 8, !tbaa !9
  %265 = add nsw i64 %264, %263
  store i64 %265, ptr %44, align 8, !tbaa !9
  %266 = load i64, ptr %51, align 8, !tbaa !9
  %267 = load i64, ptr %45, align 8, !tbaa !9
  %268 = add nsw i64 %267, %266
  store i64 %268, ptr %45, align 8, !tbaa !9
  %269 = load i64, ptr %47, align 8, !tbaa !9
  %270 = icmp sgt i64 %269, 0
  br i1 %270, label %271, label %381

271:                                              ; preds = %262
  %272 = load ptr, ptr %18, align 8, !tbaa !5
  %273 = load i64, ptr %44, align 8, !tbaa !9
  %274 = sub nsw i64 %273, 1
  %275 = load i64, ptr %26, align 8, !tbaa !9
  %276 = mul nsw i64 %274, %275
  %277 = add nsw i64 %276, 1
  %278 = getelementptr inbounds %struct.doublecomplex, ptr %272, i64 %277
  %279 = load ptr, ptr %24, align 8, !tbaa !5
  %280 = load i64, ptr %44, align 8, !tbaa !9
  %281 = getelementptr inbounds %struct.doublecomplex, ptr %279, i64 %280
  %282 = load ptr, ptr %20, align 8, !tbaa !5
  %283 = load i64, ptr %44, align 8, !tbaa !9
  %284 = getelementptr inbounds double, ptr %282, i64 %283
  %285 = call i32 @zlargv_(ptr noundef %47, ptr noundef %278, ptr noundef %55, ptr noundef %281, ptr noundef %48, ptr noundef %284, ptr noundef %48)
  %286 = load i64, ptr %47, align 8, !tbaa !9
  %287 = load ptr, ptr %17, align 8, !tbaa !5
  %288 = load i64, ptr %287, align 8, !tbaa !9
  %289 = shl i64 %288, 1
  %290 = sub nsw i64 %289, 1
  %291 = icmp sge i64 %286, %290
  br i1 %291, label %292, label %328

292:                                              ; preds = %271
  %293 = load ptr, ptr %17, align 8, !tbaa !5
  %294 = load i64, ptr %293, align 8, !tbaa !9
  %295 = sub nsw i64 %294, 1
  store i64 %295, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %296

296:                                              ; preds = %324, %292
  %297 = load i64, ptr %41, align 8, !tbaa !9
  %298 = load i64, ptr %31, align 8, !tbaa !9
  %299 = icmp sle i64 %297, %298
  br i1 %299, label %300, label %327

300:                                              ; preds = %296
  %301 = load ptr, ptr %18, align 8, !tbaa !5
  %302 = load i64, ptr %41, align 8, !tbaa !9
  %303 = add nsw i64 %302, 1
  %304 = load i64, ptr %44, align 8, !tbaa !9
  %305 = sub nsw i64 %304, 1
  %306 = load i64, ptr %26, align 8, !tbaa !9
  %307 = mul nsw i64 %305, %306
  %308 = add nsw i64 %303, %307
  %309 = getelementptr inbounds %struct.doublecomplex, ptr %301, i64 %308
  %310 = load ptr, ptr %18, align 8, !tbaa !5
  %311 = load i64, ptr %41, align 8, !tbaa !9
  %312 = load i64, ptr %44, align 8, !tbaa !9
  %313 = load i64, ptr %26, align 8, !tbaa !9
  %314 = mul nsw i64 %312, %313
  %315 = add nsw i64 %311, %314
  %316 = getelementptr inbounds %struct.doublecomplex, ptr %310, i64 %315
  %317 = load ptr, ptr %20, align 8, !tbaa !5
  %318 = load i64, ptr %44, align 8, !tbaa !9
  %319 = getelementptr inbounds double, ptr %317, i64 %318
  %320 = load ptr, ptr %24, align 8, !tbaa !5
  %321 = load i64, ptr %44, align 8, !tbaa !9
  %322 = getelementptr inbounds %struct.doublecomplex, ptr %320, i64 %321
  %323 = call i32 @zlartv_(ptr noundef %47, ptr noundef %309, ptr noundef %55, ptr noundef %316, ptr noundef %55, ptr noundef %319, ptr noundef %322, ptr noundef %48)
  br label %324

324:                                              ; preds = %300
  %325 = load i64, ptr %41, align 8, !tbaa !9
  %326 = add nsw i64 %325, 1
  store i64 %326, ptr %41, align 8, !tbaa !9
  br label %296, !llvm.loop !16

327:                                              ; preds = %296
  br label %380

328:                                              ; preds = %271
  %329 = load i64, ptr %44, align 8, !tbaa !9
  %330 = load i64, ptr %47, align 8, !tbaa !9
  %331 = sub nsw i64 %330, 1
  %332 = load i64, ptr %48, align 8, !tbaa !9
  %333 = mul nsw i64 %331, %332
  %334 = add nsw i64 %329, %333
  store i64 %334, ptr %56, align 8, !tbaa !9
  %335 = load i64, ptr %56, align 8, !tbaa !9
  store i64 %335, ptr %31, align 8, !tbaa !9
  %336 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %336, ptr %32, align 8, !tbaa !9
  %337 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %337, ptr %58, align 8, !tbaa !9
  br label %338

338:                                              ; preds = %375, %328
  %339 = load i64, ptr %32, align 8, !tbaa !9
  %340 = icmp slt i64 %339, 0
  br i1 %340, label %341, label %346

341:                                              ; preds = %338
  %342 = load i64, ptr %58, align 8, !tbaa !9
  %343 = load i64, ptr %31, align 8, !tbaa !9
  %344 = icmp sge i64 %342, %343
  %345 = zext i1 %344 to i32
  br label %351

346:                                              ; preds = %338
  %347 = load i64, ptr %58, align 8, !tbaa !9
  %348 = load i64, ptr %31, align 8, !tbaa !9
  %349 = icmp sle i64 %347, %348
  %350 = zext i1 %349 to i32
  br label %351

351:                                              ; preds = %346, %341
  %352 = phi i32 [ %345, %341 ], [ %350, %346 ]
  %353 = icmp ne i32 %352, 0
  br i1 %353, label %354, label %379

354:                                              ; preds = %351
  %355 = load ptr, ptr %18, align 8, !tbaa !5
  %356 = load i64, ptr %58, align 8, !tbaa !9
  %357 = sub nsw i64 %356, 1
  %358 = load i64, ptr %26, align 8, !tbaa !9
  %359 = mul nsw i64 %357, %358
  %360 = add nsw i64 %359, 2
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %355, i64 %360
  %362 = load ptr, ptr %18, align 8, !tbaa !5
  %363 = load i64, ptr %58, align 8, !tbaa !9
  %364 = load i64, ptr %26, align 8, !tbaa !9
  %365 = mul nsw i64 %363, %364
  %366 = add nsw i64 %365, 1
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %362, i64 %366
  %368 = load ptr, ptr %20, align 8, !tbaa !5
  %369 = load i64, ptr %58, align 8, !tbaa !9
  %370 = getelementptr inbounds double, ptr %368, i64 %369
  %371 = load ptr, ptr %24, align 8, !tbaa !5
  %372 = load i64, ptr %58, align 8, !tbaa !9
  %373 = getelementptr inbounds %struct.doublecomplex, ptr %371, i64 %372
  %374 = call i32 @zrot_(ptr noundef %54, ptr noundef %361, ptr noundef @c__1, ptr noundef %367, ptr noundef @c__1, ptr noundef %370, ptr noundef %373)
  br label %375

375:                                              ; preds = %354
  %376 = load i64, ptr %32, align 8, !tbaa !9
  %377 = load i64, ptr %58, align 8, !tbaa !9
  %378 = add nsw i64 %377, %376
  store i64 %378, ptr %58, align 8, !tbaa !9
  br label %338, !llvm.loop !18

379:                                              ; preds = %351
  br label %380

380:                                              ; preds = %379, %327
  br label %381

381:                                              ; preds = %380, %262
  %382 = load i64, ptr %40, align 8, !tbaa !9
  %383 = icmp sgt i64 %382, 2
  br i1 %383, label %384, label %508

384:                                              ; preds = %381
  %385 = load i64, ptr %40, align 8, !tbaa !9
  %386 = load ptr, ptr %16, align 8, !tbaa !5
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = load i64, ptr %38, align 8, !tbaa !9
  %389 = sub nsw i64 %387, %388
  %390 = add nsw i64 %389, 1
  %391 = icmp sle i64 %385, %390
  br i1 %391, label %392, label %501

392:                                              ; preds = %384
  %393 = load ptr, ptr %18, align 8, !tbaa !5
  %394 = load ptr, ptr %17, align 8, !tbaa !5
  %395 = load i64, ptr %394, align 8, !tbaa !9
  %396 = load i64, ptr %40, align 8, !tbaa !9
  %397 = sub nsw i64 %395, %396
  %398 = add nsw i64 %397, 3
  %399 = load i64, ptr %38, align 8, !tbaa !9
  %400 = load i64, ptr %40, align 8, !tbaa !9
  %401 = add nsw i64 %399, %400
  %402 = sub nsw i64 %401, 2
  %403 = load i64, ptr %26, align 8, !tbaa !9
  %404 = mul nsw i64 %402, %403
  %405 = add nsw i64 %398, %404
  %406 = getelementptr inbounds %struct.doublecomplex, ptr %393, i64 %405
  %407 = load ptr, ptr %18, align 8, !tbaa !5
  %408 = load ptr, ptr %17, align 8, !tbaa !5
  %409 = load i64, ptr %408, align 8, !tbaa !9
  %410 = load i64, ptr %40, align 8, !tbaa !9
  %411 = sub nsw i64 %409, %410
  %412 = add nsw i64 %411, 2
  %413 = load i64, ptr %38, align 8, !tbaa !9
  %414 = load i64, ptr %40, align 8, !tbaa !9
  %415 = add nsw i64 %413, %414
  %416 = sub nsw i64 %415, 1
  %417 = load i64, ptr %26, align 8, !tbaa !9
  %418 = mul nsw i64 %416, %417
  %419 = add nsw i64 %412, %418
  %420 = getelementptr inbounds %struct.doublecomplex, ptr %407, i64 %419
  %421 = load ptr, ptr %20, align 8, !tbaa !5
  %422 = load i64, ptr %38, align 8, !tbaa !9
  %423 = load i64, ptr %40, align 8, !tbaa !9
  %424 = add nsw i64 %422, %423
  %425 = sub nsw i64 %424, 1
  %426 = getelementptr inbounds double, ptr %421, i64 %425
  %427 = load ptr, ptr %24, align 8, !tbaa !5
  %428 = load i64, ptr %38, align 8, !tbaa !9
  %429 = load i64, ptr %40, align 8, !tbaa !9
  %430 = add nsw i64 %428, %429
  %431 = sub nsw i64 %430, 1
  %432 = getelementptr inbounds %struct.doublecomplex, ptr %427, i64 %431
  %433 = call i32 @zlartg_(ptr noundef %406, ptr noundef %420, ptr noundef %426, ptr noundef %432, ptr noundef %62)
  %434 = load ptr, ptr %17, align 8, !tbaa !5
  %435 = load i64, ptr %434, align 8, !tbaa !9
  %436 = load i64, ptr %40, align 8, !tbaa !9
  %437 = sub nsw i64 %435, %436
  %438 = add nsw i64 %437, 3
  %439 = load i64, ptr %38, align 8, !tbaa !9
  %440 = load i64, ptr %40, align 8, !tbaa !9
  %441 = add nsw i64 %439, %440
  %442 = sub nsw i64 %441, 2
  %443 = load i64, ptr %26, align 8, !tbaa !9
  %444 = mul nsw i64 %442, %443
  %445 = add nsw i64 %438, %444
  store i64 %445, ptr %32, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %447 = load double, ptr %446, align 8, !tbaa !11
  %448 = load ptr, ptr %18, align 8, !tbaa !5
  %449 = load i64, ptr %32, align 8, !tbaa !9
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %448, i64 %449
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %450, i32 0, i32 0
  store double %447, ptr %451, align 8, !tbaa !11
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %453 = load double, ptr %452, align 8, !tbaa !15
  %454 = load ptr, ptr %18, align 8, !tbaa !5
  %455 = load i64, ptr %32, align 8, !tbaa !9
  %456 = getelementptr inbounds %struct.doublecomplex, ptr %454, i64 %455
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %456, i32 0, i32 1
  store double %453, ptr %457, align 8, !tbaa !15
  %458 = load i64, ptr %40, align 8, !tbaa !9
  %459 = sub nsw i64 %458, 3
  store i64 %459, ptr %32, align 8, !tbaa !9
  %460 = load ptr, ptr %18, align 8, !tbaa !5
  %461 = load ptr, ptr %17, align 8, !tbaa !5
  %462 = load i64, ptr %461, align 8, !tbaa !9
  %463 = load i64, ptr %40, align 8, !tbaa !9
  %464 = sub nsw i64 %462, %463
  %465 = add nsw i64 %464, 4
  %466 = load i64, ptr %38, align 8, !tbaa !9
  %467 = load i64, ptr %40, align 8, !tbaa !9
  %468 = add nsw i64 %466, %467
  %469 = sub nsw i64 %468, 2
  %470 = load i64, ptr %26, align 8, !tbaa !9
  %471 = mul nsw i64 %469, %470
  %472 = add nsw i64 %465, %471
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %460, i64 %472
  %474 = load ptr, ptr %18, align 8, !tbaa !5
  %475 = load ptr, ptr %17, align 8, !tbaa !5
  %476 = load i64, ptr %475, align 8, !tbaa !9
  %477 = load i64, ptr %40, align 8, !tbaa !9
  %478 = sub nsw i64 %476, %477
  %479 = add nsw i64 %478, 3
  %480 = load i64, ptr %38, align 8, !tbaa !9
  %481 = load i64, ptr %40, align 8, !tbaa !9
  %482 = add nsw i64 %480, %481
  %483 = sub nsw i64 %482, 1
  %484 = load i64, ptr %26, align 8, !tbaa !9
  %485 = mul nsw i64 %483, %484
  %486 = add nsw i64 %479, %485
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %474, i64 %486
  %488 = load ptr, ptr %20, align 8, !tbaa !5
  %489 = load i64, ptr %38, align 8, !tbaa !9
  %490 = load i64, ptr %40, align 8, !tbaa !9
  %491 = add nsw i64 %489, %490
  %492 = sub nsw i64 %491, 1
  %493 = getelementptr inbounds double, ptr %488, i64 %492
  %494 = load ptr, ptr %24, align 8, !tbaa !5
  %495 = load i64, ptr %38, align 8, !tbaa !9
  %496 = load i64, ptr %40, align 8, !tbaa !9
  %497 = add nsw i64 %495, %496
  %498 = sub nsw i64 %497, 1
  %499 = getelementptr inbounds %struct.doublecomplex, ptr %494, i64 %498
  %500 = call i32 @zrot_(ptr noundef %32, ptr noundef %473, ptr noundef @c__1, ptr noundef %487, ptr noundef @c__1, ptr noundef %493, ptr noundef %499)
  br label %501

501:                                              ; preds = %392, %384
  %502 = load i64, ptr %47, align 8, !tbaa !9
  %503 = add nsw i64 %502, 1
  store i64 %503, ptr %47, align 8, !tbaa !9
  %504 = load i64, ptr %44, align 8, !tbaa !9
  %505 = load i64, ptr %51, align 8, !tbaa !9
  %506 = sub nsw i64 %504, %505
  %507 = sub nsw i64 %506, 1
  store i64 %507, ptr %44, align 8, !tbaa !9
  br label %508

508:                                              ; preds = %501, %381
  %509 = load i64, ptr %47, align 8, !tbaa !9
  %510 = icmp sgt i64 %509, 0
  br i1 %510, label %511, label %542

511:                                              ; preds = %508
  %512 = load ptr, ptr %18, align 8, !tbaa !5
  %513 = load i64, ptr %48, align 8, !tbaa !9
  %514 = load i64, ptr %44, align 8, !tbaa !9
  %515 = sub nsw i64 %514, 1
  %516 = load i64, ptr %26, align 8, !tbaa !9
  %517 = mul nsw i64 %515, %516
  %518 = add nsw i64 %513, %517
  %519 = getelementptr inbounds %struct.doublecomplex, ptr %512, i64 %518
  %520 = load ptr, ptr %18, align 8, !tbaa !5
  %521 = load i64, ptr %48, align 8, !tbaa !9
  %522 = load i64, ptr %44, align 8, !tbaa !9
  %523 = load i64, ptr %26, align 8, !tbaa !9
  %524 = mul nsw i64 %522, %523
  %525 = add nsw i64 %521, %524
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %520, i64 %525
  %527 = load ptr, ptr %18, align 8, !tbaa !5
  %528 = load ptr, ptr %17, align 8, !tbaa !5
  %529 = load i64, ptr %528, align 8, !tbaa !9
  %530 = load i64, ptr %44, align 8, !tbaa !9
  %531 = load i64, ptr %26, align 8, !tbaa !9
  %532 = mul nsw i64 %530, %531
  %533 = add nsw i64 %529, %532
  %534 = getelementptr inbounds %struct.doublecomplex, ptr %527, i64 %533
  %535 = load ptr, ptr %20, align 8, !tbaa !5
  %536 = load i64, ptr %44, align 8, !tbaa !9
  %537 = getelementptr inbounds double, ptr %535, i64 %536
  %538 = load ptr, ptr %24, align 8, !tbaa !5
  %539 = load i64, ptr %44, align 8, !tbaa !9
  %540 = getelementptr inbounds %struct.doublecomplex, ptr %538, i64 %539
  %541 = call i32 @zlar2v_(ptr noundef %47, ptr noundef %519, ptr noundef %526, ptr noundef %534, ptr noundef %55, ptr noundef %537, ptr noundef %540, ptr noundef %48)
  br label %542

542:                                              ; preds = %511, %508
  %543 = load i64, ptr %47, align 8, !tbaa !9
  %544 = icmp sgt i64 %543, 0
  br i1 %544, label %545, label %731

545:                                              ; preds = %542
  %546 = load ptr, ptr %24, align 8, !tbaa !5
  %547 = load i64, ptr %44, align 8, !tbaa !9
  %548 = getelementptr inbounds %struct.doublecomplex, ptr %546, i64 %547
  %549 = call i32 @zlacgv_(ptr noundef %47, ptr noundef %548, ptr noundef %48)
  %550 = load ptr, ptr %17, align 8, !tbaa !5
  %551 = load i64, ptr %550, align 8, !tbaa !9
  %552 = shl i64 %551, 1
  %553 = sub nsw i64 %552, 1
  %554 = load i64, ptr %47, align 8, !tbaa !9
  %555 = icmp slt i64 %553, %554
  br i1 %555, label %556, label %617

556:                                              ; preds = %545
  %557 = load ptr, ptr %17, align 8, !tbaa !5
  %558 = load i64, ptr %557, align 8, !tbaa !9
  %559 = sub nsw i64 %558, 1
  store i64 %559, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %560

560:                                              ; preds = %613, %556
  %561 = load i64, ptr %41, align 8, !tbaa !9
  %562 = load i64, ptr %32, align 8, !tbaa !9
  %563 = icmp sle i64 %561, %562
  br i1 %563, label %564, label %616

564:                                              ; preds = %560
  %565 = load i64, ptr %45, align 8, !tbaa !9
  %566 = load i64, ptr %41, align 8, !tbaa !9
  %567 = add nsw i64 %565, %566
  %568 = load ptr, ptr %16, align 8, !tbaa !5
  %569 = load i64, ptr %568, align 8, !tbaa !9
  %570 = icmp sgt i64 %567, %569
  br i1 %570, label %571, label %574

571:                                              ; preds = %564
  %572 = load i64, ptr %47, align 8, !tbaa !9
  %573 = sub nsw i64 %572, 1
  store i64 %573, ptr %53, align 8, !tbaa !9
  br label %576

574:                                              ; preds = %564
  %575 = load i64, ptr %47, align 8, !tbaa !9
  store i64 %575, ptr %53, align 8, !tbaa !9
  br label %576

576:                                              ; preds = %574, %571
  %577 = load i64, ptr %53, align 8, !tbaa !9
  %578 = icmp sgt i64 %577, 0
  br i1 %578, label %579, label %612

579:                                              ; preds = %576
  %580 = load ptr, ptr %18, align 8, !tbaa !5
  %581 = load ptr, ptr %17, align 8, !tbaa !5
  %582 = load i64, ptr %581, align 8, !tbaa !9
  %583 = load i64, ptr %41, align 8, !tbaa !9
  %584 = sub nsw i64 %582, %583
  %585 = load i64, ptr %44, align 8, !tbaa !9
  %586 = load i64, ptr %41, align 8, !tbaa !9
  %587 = add nsw i64 %585, %586
  %588 = load i64, ptr %26, align 8, !tbaa !9
  %589 = mul nsw i64 %587, %588
  %590 = add nsw i64 %584, %589
  %591 = getelementptr inbounds %struct.doublecomplex, ptr %580, i64 %590
  %592 = load ptr, ptr %18, align 8, !tbaa !5
  %593 = load ptr, ptr %17, align 8, !tbaa !5
  %594 = load i64, ptr %593, align 8, !tbaa !9
  %595 = load i64, ptr %41, align 8, !tbaa !9
  %596 = sub nsw i64 %594, %595
  %597 = add nsw i64 %596, 1
  %598 = load i64, ptr %44, align 8, !tbaa !9
  %599 = load i64, ptr %41, align 8, !tbaa !9
  %600 = add nsw i64 %598, %599
  %601 = load i64, ptr %26, align 8, !tbaa !9
  %602 = mul nsw i64 %600, %601
  %603 = add nsw i64 %597, %602
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %592, i64 %603
  %605 = load ptr, ptr %20, align 8, !tbaa !5
  %606 = load i64, ptr %44, align 8, !tbaa !9
  %607 = getelementptr inbounds double, ptr %605, i64 %606
  %608 = load ptr, ptr %24, align 8, !tbaa !5
  %609 = load i64, ptr %44, align 8, !tbaa !9
  %610 = getelementptr inbounds %struct.doublecomplex, ptr %608, i64 %609
  %611 = call i32 @zlartv_(ptr noundef %53, ptr noundef %591, ptr noundef %55, ptr noundef %604, ptr noundef %55, ptr noundef %607, ptr noundef %610, ptr noundef %48)
  br label %612

612:                                              ; preds = %579, %576
  br label %613

613:                                              ; preds = %612
  %614 = load i64, ptr %41, align 8, !tbaa !9
  %615 = add nsw i64 %614, 1
  store i64 %615, ptr %41, align 8, !tbaa !9
  br label %560, !llvm.loop !19

616:                                              ; preds = %560
  br label %730

617:                                              ; preds = %545
  %618 = load i64, ptr %44, align 8, !tbaa !9
  %619 = load i64, ptr %48, align 8, !tbaa !9
  %620 = load i64, ptr %47, align 8, !tbaa !9
  %621 = sub nsw i64 %620, 2
  %622 = mul nsw i64 %619, %621
  %623 = add nsw i64 %618, %622
  store i64 %623, ptr %63, align 8, !tbaa !9
  %624 = load i64, ptr %63, align 8, !tbaa !9
  %625 = load i64, ptr %44, align 8, !tbaa !9
  %626 = icmp sge i64 %624, %625
  br i1 %626, label %627, label %682

627:                                              ; preds = %617
  %628 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %628, ptr %32, align 8, !tbaa !9
  %629 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %629, ptr %31, align 8, !tbaa !9
  %630 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %630, ptr %52, align 8, !tbaa !9
  br label %631

631:                                              ; preds = %677, %627
  %632 = load i64, ptr %31, align 8, !tbaa !9
  %633 = icmp slt i64 %632, 0
  br i1 %633, label %634, label %639

634:                                              ; preds = %631
  %635 = load i64, ptr %52, align 8, !tbaa !9
  %636 = load i64, ptr %32, align 8, !tbaa !9
  %637 = icmp sge i64 %635, %636
  %638 = zext i1 %637 to i32
  br label %644

639:                                              ; preds = %631
  %640 = load i64, ptr %52, align 8, !tbaa !9
  %641 = load i64, ptr %32, align 8, !tbaa !9
  %642 = icmp sle i64 %640, %641
  %643 = zext i1 %642 to i32
  br label %644

644:                                              ; preds = %639, %634
  %645 = phi i32 [ %638, %634 ], [ %643, %639 ]
  %646 = icmp ne i32 %645, 0
  br i1 %646, label %647, label %681

647:                                              ; preds = %644
  %648 = load ptr, ptr %17, align 8, !tbaa !5
  %649 = load i64, ptr %648, align 8, !tbaa !9
  %650 = sub nsw i64 %649, 1
  store i64 %650, ptr %33, align 8, !tbaa !9
  %651 = load ptr, ptr %18, align 8, !tbaa !5
  %652 = load ptr, ptr %17, align 8, !tbaa !5
  %653 = load i64, ptr %652, align 8, !tbaa !9
  %654 = sub nsw i64 %653, 1
  %655 = load i64, ptr %52, align 8, !tbaa !9
  %656 = add nsw i64 %655, 1
  %657 = load i64, ptr %26, align 8, !tbaa !9
  %658 = mul nsw i64 %656, %657
  %659 = add nsw i64 %654, %658
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %651, i64 %659
  %661 = load ptr, ptr %18, align 8, !tbaa !5
  %662 = load ptr, ptr %17, align 8, !tbaa !5
  %663 = load i64, ptr %662, align 8, !tbaa !9
  %664 = load i64, ptr %52, align 8, !tbaa !9
  %665 = add nsw i64 %664, 1
  %666 = load i64, ptr %26, align 8, !tbaa !9
  %667 = mul nsw i64 %665, %666
  %668 = add nsw i64 %663, %667
  %669 = getelementptr inbounds %struct.doublecomplex, ptr %661, i64 %668
  %670 = load ptr, ptr %20, align 8, !tbaa !5
  %671 = load i64, ptr %52, align 8, !tbaa !9
  %672 = getelementptr inbounds double, ptr %670, i64 %671
  %673 = load ptr, ptr %24, align 8, !tbaa !5
  %674 = load i64, ptr %52, align 8, !tbaa !9
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %673, i64 %674
  %676 = call i32 @zrot_(ptr noundef %33, ptr noundef %660, ptr noundef %60, ptr noundef %669, ptr noundef %60, ptr noundef %672, ptr noundef %675)
  br label %677

677:                                              ; preds = %647
  %678 = load i64, ptr %31, align 8, !tbaa !9
  %679 = load i64, ptr %52, align 8, !tbaa !9
  %680 = add nsw i64 %679, %678
  store i64 %680, ptr %52, align 8, !tbaa !9
  br label %631, !llvm.loop !20

681:                                              ; preds = %644
  br label %682

682:                                              ; preds = %681, %617
  %683 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %683, ptr %31, align 8, !tbaa !9
  %684 = load ptr, ptr %16, align 8, !tbaa !5
  %685 = load i64, ptr %684, align 8, !tbaa !9
  %686 = load i64, ptr %45, align 8, !tbaa !9
  %687 = sub nsw i64 %685, %686
  store i64 %687, ptr %32, align 8, !tbaa !9
  %688 = load i64, ptr %31, align 8, !tbaa !9
  %689 = load i64, ptr %32, align 8, !tbaa !9
  %690 = icmp sle i64 %688, %689
  br i1 %690, label %691, label %693

691:                                              ; preds = %682
  %692 = load i64, ptr %31, align 8, !tbaa !9
  br label %695

693:                                              ; preds = %682
  %694 = load i64, ptr %32, align 8, !tbaa !9
  br label %695

695:                                              ; preds = %693, %691
  %696 = phi i64 [ %692, %691 ], [ %694, %693 ]
  store i64 %696, ptr %57, align 8, !tbaa !9
  %697 = load i64, ptr %63, align 8, !tbaa !9
  %698 = load i64, ptr %48, align 8, !tbaa !9
  %699 = add nsw i64 %697, %698
  store i64 %699, ptr %61, align 8, !tbaa !9
  %700 = load i64, ptr %57, align 8, !tbaa !9
  %701 = icmp sgt i64 %700, 0
  br i1 %701, label %702, label %729

702:                                              ; preds = %695
  %703 = load ptr, ptr %18, align 8, !tbaa !5
  %704 = load ptr, ptr %17, align 8, !tbaa !5
  %705 = load i64, ptr %704, align 8, !tbaa !9
  %706 = sub nsw i64 %705, 1
  %707 = load i64, ptr %61, align 8, !tbaa !9
  %708 = add nsw i64 %707, 1
  %709 = load i64, ptr %26, align 8, !tbaa !9
  %710 = mul nsw i64 %708, %709
  %711 = add nsw i64 %706, %710
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %703, i64 %711
  %713 = load ptr, ptr %18, align 8, !tbaa !5
  %714 = load ptr, ptr %17, align 8, !tbaa !5
  %715 = load i64, ptr %714, align 8, !tbaa !9
  %716 = load i64, ptr %61, align 8, !tbaa !9
  %717 = add nsw i64 %716, 1
  %718 = load i64, ptr %26, align 8, !tbaa !9
  %719 = mul nsw i64 %717, %718
  %720 = add nsw i64 %715, %719
  %721 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %720
  %722 = load ptr, ptr %20, align 8, !tbaa !5
  %723 = load i64, ptr %61, align 8, !tbaa !9
  %724 = getelementptr inbounds double, ptr %722, i64 %723
  %725 = load ptr, ptr %24, align 8, !tbaa !5
  %726 = load i64, ptr %61, align 8, !tbaa !9
  %727 = getelementptr inbounds %struct.doublecomplex, ptr %725, i64 %726
  %728 = call i32 @zrot_(ptr noundef %57, ptr noundef %712, ptr noundef %60, ptr noundef %721, ptr noundef %60, ptr noundef %724, ptr noundef %727)
  br label %729

729:                                              ; preds = %702, %695
  br label %730

730:                                              ; preds = %729, %616
  br label %731

731:                                              ; preds = %730, %542
  %732 = load i64, ptr %67, align 8, !tbaa !9
  %733 = icmp ne i64 %732, 0
  br i1 %733, label %734, label %911

734:                                              ; preds = %731
  %735 = load i64, ptr %66, align 8, !tbaa !9
  %736 = icmp ne i64 %735, 0
  br i1 %736, label %737, label %863

737:                                              ; preds = %734
  %738 = load i64, ptr %65, align 8, !tbaa !9
  %739 = load i64, ptr %45, align 8, !tbaa !9
  %740 = icmp sge i64 %738, %739
  br i1 %740, label %741, label %743

741:                                              ; preds = %737
  %742 = load i64, ptr %65, align 8, !tbaa !9
  br label %745

743:                                              ; preds = %737
  %744 = load i64, ptr %45, align 8, !tbaa !9
  br label %745

745:                                              ; preds = %743, %741
  %746 = phi i64 [ %742, %741 ], [ %744, %743 ]
  store i64 %746, ptr %65, align 8, !tbaa !9
  store i64 0, ptr %31, align 8, !tbaa !9
  %747 = load i64, ptr %40, align 8, !tbaa !9
  %748 = sub nsw i64 %747, 3
  store i64 %748, ptr %32, align 8, !tbaa !9
  %749 = load i64, ptr %31, align 8, !tbaa !9
  %750 = load i64, ptr %32, align 8, !tbaa !9
  %751 = icmp sge i64 %749, %750
  br i1 %751, label %752, label %754

752:                                              ; preds = %745
  %753 = load i64, ptr %31, align 8, !tbaa !9
  br label %756

754:                                              ; preds = %745
  %755 = load i64, ptr %32, align 8, !tbaa !9
  br label %756

756:                                              ; preds = %754, %752
  %757 = phi i64 [ %753, %752 ], [ %755, %754 ]
  store i64 %757, ptr %43, align 8, !tbaa !9
  %758 = load i64, ptr %38, align 8, !tbaa !9
  %759 = load ptr, ptr %17, align 8, !tbaa !5
  %760 = load i64, ptr %759, align 8, !tbaa !9
  %761 = mul nsw i64 %758, %760
  %762 = add nsw i64 %761, 1
  store i64 %762, ptr %69, align 8, !tbaa !9
  %763 = load i64, ptr %40, align 8, !tbaa !9
  %764 = icmp eq i64 %763, 2
  br i1 %764, label %765, label %770

765:                                              ; preds = %756
  %766 = load ptr, ptr %17, align 8, !tbaa !5
  %767 = load i64, ptr %766, align 8, !tbaa !9
  %768 = load i64, ptr %69, align 8, !tbaa !9
  %769 = add nsw i64 %768, %767
  store i64 %769, ptr %69, align 8, !tbaa !9
  br label %770

770:                                              ; preds = %765, %756
  %771 = load i64, ptr %69, align 8, !tbaa !9
  %772 = load i64, ptr %65, align 8, !tbaa !9
  %773 = icmp sle i64 %771, %772
  br i1 %773, label %774, label %776

774:                                              ; preds = %770
  %775 = load i64, ptr %69, align 8, !tbaa !9
  br label %778

776:                                              ; preds = %770
  %777 = load i64, ptr %65, align 8, !tbaa !9
  br label %778

778:                                              ; preds = %776, %774
  %779 = phi i64 [ %775, %774 ], [ %777, %776 ]
  store i64 %779, ptr %69, align 8, !tbaa !9
  %780 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %780, ptr %31, align 8, !tbaa !9
  %781 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %781, ptr %32, align 8, !tbaa !9
  %782 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %782, ptr %39, align 8, !tbaa !9
  br label %783

783:                                              ; preds = %858, %778
  %784 = load i64, ptr %32, align 8, !tbaa !9
  %785 = icmp slt i64 %784, 0
  br i1 %785, label %786, label %791

786:                                              ; preds = %783
  %787 = load i64, ptr %39, align 8, !tbaa !9
  %788 = load i64, ptr %31, align 8, !tbaa !9
  %789 = icmp sge i64 %787, %788
  %790 = zext i1 %789 to i32
  br label %796

791:                                              ; preds = %783
  %792 = load i64, ptr %39, align 8, !tbaa !9
  %793 = load i64, ptr %31, align 8, !tbaa !9
  %794 = icmp sle i64 %792, %793
  %795 = zext i1 %794 to i32
  br label %796

796:                                              ; preds = %791, %786
  %797 = phi i32 [ %790, %786 ], [ %795, %791 ]
  %798 = icmp ne i32 %797, 0
  br i1 %798, label %799, label %862

799:                                              ; preds = %796
  %800 = load i64, ptr %38, align 8, !tbaa !9
  %801 = load i64, ptr %43, align 8, !tbaa !9
  %802 = load i64, ptr %54, align 8, !tbaa !9
  %803 = sdiv i64 %801, %802
  %804 = sub nsw i64 %800, %803
  store i64 %804, ptr %49, align 8, !tbaa !9
  %805 = load i64, ptr %43, align 8, !tbaa !9
  %806 = add nsw i64 %805, 1
  store i64 %806, ptr %43, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  %807 = load i64, ptr %39, align 8, !tbaa !9
  %808 = load i64, ptr %49, align 8, !tbaa !9
  %809 = sub nsw i64 %807, %808
  store i64 %809, ptr %34, align 8, !tbaa !9
  %810 = load i64, ptr %33, align 8, !tbaa !9
  %811 = load i64, ptr %34, align 8, !tbaa !9
  %812 = icmp sge i64 %810, %811
  br i1 %812, label %813, label %815

813:                                              ; preds = %799
  %814 = load i64, ptr %33, align 8, !tbaa !9
  br label %817

815:                                              ; preds = %799
  %816 = load i64, ptr %34, align 8, !tbaa !9
  br label %817

817:                                              ; preds = %815, %813
  %818 = phi i64 [ %814, %813 ], [ %816, %815 ]
  store i64 %818, ptr %50, align 8, !tbaa !9
  %819 = load i64, ptr %69, align 8, !tbaa !9
  %820 = add nsw i64 %819, 1
  %821 = load i64, ptr %50, align 8, !tbaa !9
  %822 = sub nsw i64 %820, %821
  store i64 %822, ptr %46, align 8, !tbaa !9
  %823 = load i64, ptr %69, align 8, !tbaa !9
  %824 = load ptr, ptr %17, align 8, !tbaa !5
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = add nsw i64 %823, %825
  store i64 %826, ptr %33, align 8, !tbaa !9
  %827 = load i64, ptr %33, align 8, !tbaa !9
  %828 = load i64, ptr %65, align 8, !tbaa !9
  %829 = icmp sle i64 %827, %828
  br i1 %829, label %830, label %832

830:                                              ; preds = %817
  %831 = load i64, ptr %33, align 8, !tbaa !9
  br label %834

832:                                              ; preds = %817
  %833 = load i64, ptr %65, align 8, !tbaa !9
  br label %834

834:                                              ; preds = %832, %830
  %835 = phi i64 [ %831, %830 ], [ %833, %832 ]
  store i64 %835, ptr %69, align 8, !tbaa !9
  %836 = load ptr, ptr %24, align 8, !tbaa !5
  %837 = load i64, ptr %39, align 8, !tbaa !9
  %838 = getelementptr inbounds %struct.doublecomplex, ptr %836, i64 %837
  call void @d_cnjg(ptr noundef %37, ptr noundef %838)
  %839 = load ptr, ptr %22, align 8, !tbaa !5
  %840 = load i64, ptr %50, align 8, !tbaa !9
  %841 = load i64, ptr %39, align 8, !tbaa !9
  %842 = sub nsw i64 %841, 1
  %843 = load i64, ptr %28, align 8, !tbaa !9
  %844 = mul nsw i64 %842, %843
  %845 = add nsw i64 %840, %844
  %846 = getelementptr inbounds %struct.doublecomplex, ptr %839, i64 %845
  %847 = load ptr, ptr %22, align 8, !tbaa !5
  %848 = load i64, ptr %50, align 8, !tbaa !9
  %849 = load i64, ptr %39, align 8, !tbaa !9
  %850 = load i64, ptr %28, align 8, !tbaa !9
  %851 = mul nsw i64 %849, %850
  %852 = add nsw i64 %848, %851
  %853 = getelementptr inbounds %struct.doublecomplex, ptr %847, i64 %852
  %854 = load ptr, ptr %20, align 8, !tbaa !5
  %855 = load i64, ptr %39, align 8, !tbaa !9
  %856 = getelementptr inbounds double, ptr %854, i64 %855
  %857 = call i32 @zrot_(ptr noundef %46, ptr noundef %846, ptr noundef @c__1, ptr noundef %853, ptr noundef @c__1, ptr noundef %856, ptr noundef %37)
  br label %858

858:                                              ; preds = %834
  %859 = load i64, ptr %32, align 8, !tbaa !9
  %860 = load i64, ptr %39, align 8, !tbaa !9
  %861 = add nsw i64 %860, %859
  store i64 %861, ptr %39, align 8, !tbaa !9
  br label %783, !llvm.loop !21

862:                                              ; preds = %796
  br label %910

863:                                              ; preds = %734
  %864 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %864, ptr %32, align 8, !tbaa !9
  %865 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %865, ptr %31, align 8, !tbaa !9
  %866 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %866, ptr %39, align 8, !tbaa !9
  br label %867

867:                                              ; preds = %905, %863
  %868 = load i64, ptr %31, align 8, !tbaa !9
  %869 = icmp slt i64 %868, 0
  br i1 %869, label %870, label %875

870:                                              ; preds = %867
  %871 = load i64, ptr %39, align 8, !tbaa !9
  %872 = load i64, ptr %32, align 8, !tbaa !9
  %873 = icmp sge i64 %871, %872
  %874 = zext i1 %873 to i32
  br label %880

875:                                              ; preds = %867
  %876 = load i64, ptr %39, align 8, !tbaa !9
  %877 = load i64, ptr %32, align 8, !tbaa !9
  %878 = icmp sle i64 %876, %877
  %879 = zext i1 %878 to i32
  br label %880

880:                                              ; preds = %875, %870
  %881 = phi i32 [ %874, %870 ], [ %879, %875 ]
  %882 = icmp ne i32 %881, 0
  br i1 %882, label %883, label %909

883:                                              ; preds = %880
  %884 = load ptr, ptr %24, align 8, !tbaa !5
  %885 = load i64, ptr %39, align 8, !tbaa !9
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %884, i64 %885
  call void @d_cnjg(ptr noundef %37, ptr noundef %886)
  %887 = load ptr, ptr %16, align 8, !tbaa !5
  %888 = load ptr, ptr %22, align 8, !tbaa !5
  %889 = load i64, ptr %39, align 8, !tbaa !9
  %890 = sub nsw i64 %889, 1
  %891 = load i64, ptr %28, align 8, !tbaa !9
  %892 = mul nsw i64 %890, %891
  %893 = add nsw i64 %892, 1
  %894 = getelementptr inbounds %struct.doublecomplex, ptr %888, i64 %893
  %895 = load ptr, ptr %22, align 8, !tbaa !5
  %896 = load i64, ptr %39, align 8, !tbaa !9
  %897 = load i64, ptr %28, align 8, !tbaa !9
  %898 = mul nsw i64 %896, %897
  %899 = add nsw i64 %898, 1
  %900 = getelementptr inbounds %struct.doublecomplex, ptr %895, i64 %899
  %901 = load ptr, ptr %20, align 8, !tbaa !5
  %902 = load i64, ptr %39, align 8, !tbaa !9
  %903 = getelementptr inbounds double, ptr %901, i64 %902
  %904 = call i32 @zrot_(ptr noundef %887, ptr noundef %894, ptr noundef @c__1, ptr noundef %900, ptr noundef @c__1, ptr noundef %903, ptr noundef %37)
  br label %905

905:                                              ; preds = %883
  %906 = load i64, ptr %31, align 8, !tbaa !9
  %907 = load i64, ptr %39, align 8, !tbaa !9
  %908 = add nsw i64 %907, %906
  store i64 %908, ptr %39, align 8, !tbaa !9
  br label %867, !llvm.loop !22

909:                                              ; preds = %880
  br label %910

910:                                              ; preds = %909, %862
  br label %911

911:                                              ; preds = %910, %731
  %912 = load i64, ptr %45, align 8, !tbaa !9
  %913 = load i64, ptr %51, align 8, !tbaa !9
  %914 = add nsw i64 %912, %913
  %915 = load ptr, ptr %16, align 8, !tbaa !5
  %916 = load i64, ptr %915, align 8, !tbaa !9
  %917 = icmp sgt i64 %914, %916
  br i1 %917, label %918, label %925

918:                                              ; preds = %911
  %919 = load i64, ptr %47, align 8, !tbaa !9
  %920 = add nsw i64 %919, -1
  store i64 %920, ptr %47, align 8, !tbaa !9
  %921 = load i64, ptr %45, align 8, !tbaa !9
  %922 = load i64, ptr %51, align 8, !tbaa !9
  %923 = sub nsw i64 %921, %922
  %924 = sub nsw i64 %923, 1
  store i64 %924, ptr %45, align 8, !tbaa !9
  br label %925

925:                                              ; preds = %918, %911
  %926 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %926, ptr %31, align 8, !tbaa !9
  %927 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %927, ptr %32, align 8, !tbaa !9
  %928 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %928, ptr %39, align 8, !tbaa !9
  br label %929

929:                                              ; preds = %1066, %925
  %930 = load i64, ptr %32, align 8, !tbaa !9
  %931 = icmp slt i64 %930, 0
  br i1 %931, label %932, label %937

932:                                              ; preds = %929
  %933 = load i64, ptr %39, align 8, !tbaa !9
  %934 = load i64, ptr %31, align 8, !tbaa !9
  %935 = icmp sge i64 %933, %934
  %936 = zext i1 %935 to i32
  br label %942

937:                                              ; preds = %929
  %938 = load i64, ptr %39, align 8, !tbaa !9
  %939 = load i64, ptr %31, align 8, !tbaa !9
  %940 = icmp sle i64 %938, %939
  %941 = zext i1 %940 to i32
  br label %942

942:                                              ; preds = %937, %932
  %943 = phi i32 [ %936, %932 ], [ %941, %937 ]
  %944 = icmp ne i32 %943, 0
  br i1 %944, label %945, label %1070

945:                                              ; preds = %942
  %946 = load i64, ptr %39, align 8, !tbaa !9
  %947 = load ptr, ptr %17, align 8, !tbaa !5
  %948 = load i64, ptr %947, align 8, !tbaa !9
  %949 = add nsw i64 %946, %948
  store i64 %949, ptr %33, align 8, !tbaa !9
  %950 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %950, ptr %34, align 8, !tbaa !9
  %951 = load i64, ptr %39, align 8, !tbaa !9
  %952 = load ptr, ptr %17, align 8, !tbaa !5
  %953 = load i64, ptr %952, align 8, !tbaa !9
  %954 = add nsw i64 %951, %953
  %955 = load i64, ptr %26, align 8, !tbaa !9
  %956 = mul nsw i64 %954, %955
  %957 = add nsw i64 %956, 1
  store i64 %957, ptr %35, align 8, !tbaa !9
  %958 = load ptr, ptr %24, align 8, !tbaa !5
  %959 = load i64, ptr %34, align 8, !tbaa !9
  %960 = getelementptr inbounds %struct.doublecomplex, ptr %958, i64 %959
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %960, i32 0, i32 0
  %962 = load double, ptr %961, align 8, !tbaa !11
  %963 = load ptr, ptr %18, align 8, !tbaa !5
  %964 = load i64, ptr %35, align 8, !tbaa !9
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %963, i64 %964
  %966 = getelementptr inbounds %struct.doublecomplex, ptr %965, i32 0, i32 0
  %967 = load double, ptr %966, align 8, !tbaa !11
  %968 = load ptr, ptr %24, align 8, !tbaa !5
  %969 = load i64, ptr %34, align 8, !tbaa !9
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %968, i64 %969
  %971 = getelementptr inbounds %struct.doublecomplex, ptr %970, i32 0, i32 1
  %972 = load double, ptr %971, align 8, !tbaa !15
  %973 = load ptr, ptr %18, align 8, !tbaa !5
  %974 = load i64, ptr %35, align 8, !tbaa !9
  %975 = getelementptr inbounds %struct.doublecomplex, ptr %973, i64 %974
  %976 = getelementptr inbounds %struct.doublecomplex, ptr %975, i32 0, i32 1
  %977 = load double, ptr %976, align 8, !tbaa !15
  %978 = fmul double %972, %977
  %979 = fneg double %978
  %980 = call double @llvm.fmuladd.f64(double %962, double %967, double %979)
  %981 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %980, ptr %981, align 8, !tbaa !11
  %982 = load ptr, ptr %24, align 8, !tbaa !5
  %983 = load i64, ptr %34, align 8, !tbaa !9
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %982, i64 %983
  %985 = getelementptr inbounds %struct.doublecomplex, ptr %984, i32 0, i32 0
  %986 = load double, ptr %985, align 8, !tbaa !11
  %987 = load ptr, ptr %18, align 8, !tbaa !5
  %988 = load i64, ptr %35, align 8, !tbaa !9
  %989 = getelementptr inbounds %struct.doublecomplex, ptr %987, i64 %988
  %990 = getelementptr inbounds %struct.doublecomplex, ptr %989, i32 0, i32 1
  %991 = load double, ptr %990, align 8, !tbaa !15
  %992 = load ptr, ptr %24, align 8, !tbaa !5
  %993 = load i64, ptr %34, align 8, !tbaa !9
  %994 = getelementptr inbounds %struct.doublecomplex, ptr %992, i64 %993
  %995 = getelementptr inbounds %struct.doublecomplex, ptr %994, i32 0, i32 1
  %996 = load double, ptr %995, align 8, !tbaa !15
  %997 = load ptr, ptr %18, align 8, !tbaa !5
  %998 = load i64, ptr %35, align 8, !tbaa !9
  %999 = getelementptr inbounds %struct.doublecomplex, ptr %997, i64 %998
  %1000 = getelementptr inbounds %struct.doublecomplex, ptr %999, i32 0, i32 0
  %1001 = load double, ptr %1000, align 8, !tbaa !11
  %1002 = fmul double %996, %1001
  %1003 = call double @llvm.fmuladd.f64(double %986, double %991, double %1002)
  %1004 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %1003, ptr %1004, align 8, !tbaa !15
  %1005 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %1006 = load double, ptr %1005, align 8, !tbaa !11
  %1007 = load ptr, ptr %24, align 8, !tbaa !5
  %1008 = load i64, ptr %33, align 8, !tbaa !9
  %1009 = getelementptr inbounds %struct.doublecomplex, ptr %1007, i64 %1008
  %1010 = getelementptr inbounds %struct.doublecomplex, ptr %1009, i32 0, i32 0
  store double %1006, ptr %1010, align 8, !tbaa !11
  %1011 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %1012 = load double, ptr %1011, align 8, !tbaa !15
  %1013 = load ptr, ptr %24, align 8, !tbaa !5
  %1014 = load i64, ptr %33, align 8, !tbaa !9
  %1015 = getelementptr inbounds %struct.doublecomplex, ptr %1013, i64 %1014
  %1016 = getelementptr inbounds %struct.doublecomplex, ptr %1015, i32 0, i32 1
  store double %1012, ptr %1016, align 8, !tbaa !15
  %1017 = load i64, ptr %39, align 8, !tbaa !9
  %1018 = load ptr, ptr %17, align 8, !tbaa !5
  %1019 = load i64, ptr %1018, align 8, !tbaa !9
  %1020 = add nsw i64 %1017, %1019
  %1021 = load i64, ptr %26, align 8, !tbaa !9
  %1022 = mul nsw i64 %1020, %1021
  %1023 = add nsw i64 %1022, 1
  store i64 %1023, ptr %33, align 8, !tbaa !9
  %1024 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1024, ptr %34, align 8, !tbaa !9
  %1025 = load i64, ptr %39, align 8, !tbaa !9
  %1026 = load ptr, ptr %17, align 8, !tbaa !5
  %1027 = load i64, ptr %1026, align 8, !tbaa !9
  %1028 = add nsw i64 %1025, %1027
  %1029 = load i64, ptr %26, align 8, !tbaa !9
  %1030 = mul nsw i64 %1028, %1029
  %1031 = add nsw i64 %1030, 1
  store i64 %1031, ptr %35, align 8, !tbaa !9
  %1032 = load ptr, ptr %20, align 8, !tbaa !5
  %1033 = load i64, ptr %34, align 8, !tbaa !9
  %1034 = getelementptr inbounds double, ptr %1032, i64 %1033
  %1035 = load double, ptr %1034, align 8, !tbaa !14
  %1036 = load ptr, ptr %18, align 8, !tbaa !5
  %1037 = load i64, ptr %35, align 8, !tbaa !9
  %1038 = getelementptr inbounds %struct.doublecomplex, ptr %1036, i64 %1037
  %1039 = getelementptr inbounds %struct.doublecomplex, ptr %1038, i32 0, i32 0
  %1040 = load double, ptr %1039, align 8, !tbaa !11
  %1041 = fmul double %1035, %1040
  %1042 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %1041, ptr %1042, align 8, !tbaa !11
  %1043 = load ptr, ptr %20, align 8, !tbaa !5
  %1044 = load i64, ptr %34, align 8, !tbaa !9
  %1045 = getelementptr inbounds double, ptr %1043, i64 %1044
  %1046 = load double, ptr %1045, align 8, !tbaa !14
  %1047 = load ptr, ptr %18, align 8, !tbaa !5
  %1048 = load i64, ptr %35, align 8, !tbaa !9
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %1047, i64 %1048
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %1049, i32 0, i32 1
  %1051 = load double, ptr %1050, align 8, !tbaa !15
  %1052 = fmul double %1046, %1051
  %1053 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %1052, ptr %1053, align 8, !tbaa !15
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %1055 = load double, ptr %1054, align 8, !tbaa !11
  %1056 = load ptr, ptr %18, align 8, !tbaa !5
  %1057 = load i64, ptr %33, align 8, !tbaa !9
  %1058 = getelementptr inbounds %struct.doublecomplex, ptr %1056, i64 %1057
  %1059 = getelementptr inbounds %struct.doublecomplex, ptr %1058, i32 0, i32 0
  store double %1055, ptr %1059, align 8, !tbaa !11
  %1060 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %1061 = load double, ptr %1060, align 8, !tbaa !15
  %1062 = load ptr, ptr %18, align 8, !tbaa !5
  %1063 = load i64, ptr %33, align 8, !tbaa !9
  %1064 = getelementptr inbounds %struct.doublecomplex, ptr %1062, i64 %1063
  %1065 = getelementptr inbounds %struct.doublecomplex, ptr %1064, i32 0, i32 1
  store double %1061, ptr %1065, align 8, !tbaa !15
  br label %1066

1066:                                             ; preds = %945
  %1067 = load i64, ptr %32, align 8, !tbaa !9
  %1068 = load i64, ptr %39, align 8, !tbaa !9
  %1069 = add nsw i64 %1068, %1067
  store i64 %1069, ptr %39, align 8, !tbaa !9
  br label %929, !llvm.loop !23

1070:                                             ; preds = %942
  br label %1071

1071:                                             ; preds = %1070
  %1072 = load i64, ptr %40, align 8, !tbaa !9
  %1073 = add nsw i64 %1072, -1
  store i64 %1073, ptr %40, align 8, !tbaa !9
  br label %259, !llvm.loop !24

1074:                                             ; preds = %259
  br label %1075

1075:                                             ; preds = %1074
  %1076 = load i64, ptr %38, align 8, !tbaa !9
  %1077 = add nsw i64 %1076, 1
  store i64 %1077, ptr %38, align 8, !tbaa !9
  br label %252, !llvm.loop !25

1078:                                             ; preds = %252
  br label %1079

1079:                                             ; preds = %1078, %222
  %1080 = load ptr, ptr %17, align 8, !tbaa !5
  %1081 = load i64, ptr %1080, align 8, !tbaa !9
  %1082 = icmp sgt i64 %1081, 0
  br i1 %1082, label %1083, label %1240

1083:                                             ; preds = %1079
  %1084 = load ptr, ptr %16, align 8, !tbaa !5
  %1085 = load i64, ptr %1084, align 8, !tbaa !9
  %1086 = sub nsw i64 %1085, 1
  store i64 %1086, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %1087

1087:                                             ; preds = %1236, %1083
  %1088 = load i64, ptr %38, align 8, !tbaa !9
  %1089 = load i64, ptr %30, align 8, !tbaa !9
  %1090 = icmp sle i64 %1088, %1089
  br i1 %1090, label %1091, label %1239

1091:                                             ; preds = %1087
  %1092 = load ptr, ptr %17, align 8, !tbaa !5
  %1093 = load i64, ptr %1092, align 8, !tbaa !9
  %1094 = load i64, ptr %38, align 8, !tbaa !9
  %1095 = add nsw i64 %1094, 1
  %1096 = load i64, ptr %26, align 8, !tbaa !9
  %1097 = mul nsw i64 %1095, %1096
  %1098 = add nsw i64 %1093, %1097
  store i64 %1098, ptr %32, align 8, !tbaa !9
  %1099 = load ptr, ptr %18, align 8, !tbaa !5
  %1100 = load i64, ptr %32, align 8, !tbaa !9
  %1101 = getelementptr inbounds %struct.doublecomplex, ptr %1099, i64 %1100
  %1102 = getelementptr inbounds %struct.doublecomplex, ptr %1101, i32 0, i32 0
  %1103 = load double, ptr %1102, align 8, !tbaa !11
  %1104 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1103, ptr %1104, align 8, !tbaa !11
  %1105 = load ptr, ptr %18, align 8, !tbaa !5
  %1106 = load i64, ptr %32, align 8, !tbaa !9
  %1107 = getelementptr inbounds %struct.doublecomplex, ptr %1105, i64 %1106
  %1108 = getelementptr inbounds %struct.doublecomplex, ptr %1107, i32 0, i32 1
  %1109 = load double, ptr %1108, align 8, !tbaa !15
  %1110 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1109, ptr %1110, align 8, !tbaa !15
  %1111 = call double @z_abs(ptr noundef %42)
  store double %1111, ptr %59, align 8, !tbaa !14
  %1112 = load ptr, ptr %17, align 8, !tbaa !5
  %1113 = load i64, ptr %1112, align 8, !tbaa !9
  %1114 = load i64, ptr %38, align 8, !tbaa !9
  %1115 = add nsw i64 %1114, 1
  %1116 = load i64, ptr %26, align 8, !tbaa !9
  %1117 = mul nsw i64 %1115, %1116
  %1118 = add nsw i64 %1113, %1117
  store i64 %1118, ptr %32, align 8, !tbaa !9
  %1119 = load double, ptr %59, align 8, !tbaa !14
  %1120 = load ptr, ptr %18, align 8, !tbaa !5
  %1121 = load i64, ptr %32, align 8, !tbaa !9
  %1122 = getelementptr inbounds %struct.doublecomplex, ptr %1120, i64 %1121
  %1123 = getelementptr inbounds %struct.doublecomplex, ptr %1122, i32 0, i32 0
  store double %1119, ptr %1123, align 8, !tbaa !11
  %1124 = load ptr, ptr %18, align 8, !tbaa !5
  %1125 = load i64, ptr %32, align 8, !tbaa !9
  %1126 = getelementptr inbounds %struct.doublecomplex, ptr %1124, i64 %1125
  %1127 = getelementptr inbounds %struct.doublecomplex, ptr %1126, i32 0, i32 1
  store double 0.000000e+00, ptr %1127, align 8, !tbaa !15
  %1128 = load double, ptr %59, align 8, !tbaa !14
  %1129 = load ptr, ptr %21, align 8, !tbaa !5
  %1130 = load i64, ptr %38, align 8, !tbaa !9
  %1131 = getelementptr inbounds double, ptr %1129, i64 %1130
  store double %1128, ptr %1131, align 8, !tbaa !14
  %1132 = load double, ptr %59, align 8, !tbaa !14
  %1133 = fcmp une double %1132, 0.000000e+00
  br i1 %1133, label %1134, label %1151

1134:                                             ; preds = %1091
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1136 = load double, ptr %1135, align 8, !tbaa !11
  %1137 = load double, ptr %59, align 8, !tbaa !14
  %1138 = fdiv double %1136, %1137
  %1139 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %1138, ptr %1139, align 8, !tbaa !11
  %1140 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1141 = load double, ptr %1140, align 8, !tbaa !15
  %1142 = load double, ptr %59, align 8, !tbaa !14
  %1143 = fdiv double %1141, %1142
  %1144 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %1143, ptr %1144, align 8, !tbaa !15
  %1145 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %1146 = load double, ptr %1145, align 8, !tbaa !11
  %1147 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %1146, ptr %1147, align 8, !tbaa !11
  %1148 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %1149 = load double, ptr %1148, align 8, !tbaa !15
  %1150 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %1149, ptr %1150, align 8, !tbaa !15
  br label %1154

1151:                                             ; preds = %1091
  %1152 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double 1.000000e+00, ptr %1152, align 8, !tbaa !11
  %1153 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double 0.000000e+00, ptr %1153, align 8, !tbaa !15
  br label %1154

1154:                                             ; preds = %1151, %1134
  %1155 = load i64, ptr %38, align 8, !tbaa !9
  %1156 = load ptr, ptr %16, align 8, !tbaa !5
  %1157 = load i64, ptr %1156, align 8, !tbaa !9
  %1158 = sub nsw i64 %1157, 1
  %1159 = icmp slt i64 %1155, %1158
  br i1 %1159, label %1160, label %1222

1160:                                             ; preds = %1154
  %1161 = load ptr, ptr %17, align 8, !tbaa !5
  %1162 = load i64, ptr %1161, align 8, !tbaa !9
  %1163 = load i64, ptr %38, align 8, !tbaa !9
  %1164 = add nsw i64 %1163, 2
  %1165 = load i64, ptr %26, align 8, !tbaa !9
  %1166 = mul nsw i64 %1164, %1165
  %1167 = add nsw i64 %1162, %1166
  store i64 %1167, ptr %32, align 8, !tbaa !9
  %1168 = load ptr, ptr %17, align 8, !tbaa !5
  %1169 = load i64, ptr %1168, align 8, !tbaa !9
  %1170 = load i64, ptr %38, align 8, !tbaa !9
  %1171 = add nsw i64 %1170, 2
  %1172 = load i64, ptr %26, align 8, !tbaa !9
  %1173 = mul nsw i64 %1171, %1172
  %1174 = add nsw i64 %1169, %1173
  store i64 %1174, ptr %31, align 8, !tbaa !9
  %1175 = load ptr, ptr %18, align 8, !tbaa !5
  %1176 = load i64, ptr %31, align 8, !tbaa !9
  %1177 = getelementptr inbounds %struct.doublecomplex, ptr %1175, i64 %1176
  %1178 = getelementptr inbounds %struct.doublecomplex, ptr %1177, i32 0, i32 0
  %1179 = load double, ptr %1178, align 8, !tbaa !11
  %1180 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1181 = load double, ptr %1180, align 8, !tbaa !11
  %1182 = load ptr, ptr %18, align 8, !tbaa !5
  %1183 = load i64, ptr %31, align 8, !tbaa !9
  %1184 = getelementptr inbounds %struct.doublecomplex, ptr %1182, i64 %1183
  %1185 = getelementptr inbounds %struct.doublecomplex, ptr %1184, i32 0, i32 1
  %1186 = load double, ptr %1185, align 8, !tbaa !15
  %1187 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1188 = load double, ptr %1187, align 8, !tbaa !15
  %1189 = fmul double %1186, %1188
  %1190 = fneg double %1189
  %1191 = call double @llvm.fmuladd.f64(double %1179, double %1181, double %1190)
  %1192 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %1191, ptr %1192, align 8, !tbaa !11
  %1193 = load ptr, ptr %18, align 8, !tbaa !5
  %1194 = load i64, ptr %31, align 8, !tbaa !9
  %1195 = getelementptr inbounds %struct.doublecomplex, ptr %1193, i64 %1194
  %1196 = getelementptr inbounds %struct.doublecomplex, ptr %1195, i32 0, i32 0
  %1197 = load double, ptr %1196, align 8, !tbaa !11
  %1198 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1199 = load double, ptr %1198, align 8, !tbaa !15
  %1200 = load ptr, ptr %18, align 8, !tbaa !5
  %1201 = load i64, ptr %31, align 8, !tbaa !9
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %1200, i64 %1201
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %1202, i32 0, i32 1
  %1204 = load double, ptr %1203, align 8, !tbaa !15
  %1205 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1206 = load double, ptr %1205, align 8, !tbaa !11
  %1207 = fmul double %1204, %1206
  %1208 = call double @llvm.fmuladd.f64(double %1197, double %1199, double %1207)
  %1209 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %1208, ptr %1209, align 8, !tbaa !15
  %1210 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %1211 = load double, ptr %1210, align 8, !tbaa !11
  %1212 = load ptr, ptr %18, align 8, !tbaa !5
  %1213 = load i64, ptr %32, align 8, !tbaa !9
  %1214 = getelementptr inbounds %struct.doublecomplex, ptr %1212, i64 %1213
  %1215 = getelementptr inbounds %struct.doublecomplex, ptr %1214, i32 0, i32 0
  store double %1211, ptr %1215, align 8, !tbaa !11
  %1216 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %1217 = load double, ptr %1216, align 8, !tbaa !15
  %1218 = load ptr, ptr %18, align 8, !tbaa !5
  %1219 = load i64, ptr %32, align 8, !tbaa !9
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %1218, i64 %1219
  %1221 = getelementptr inbounds %struct.doublecomplex, ptr %1220, i32 0, i32 1
  store double %1217, ptr %1221, align 8, !tbaa !15
  br label %1222

1222:                                             ; preds = %1160, %1154
  %1223 = load i64, ptr %67, align 8, !tbaa !9
  %1224 = icmp ne i64 %1223, 0
  br i1 %1224, label %1225, label %1235

1225:                                             ; preds = %1222
  call void @d_cnjg(ptr noundef %37, ptr noundef %42)
  %1226 = load ptr, ptr %16, align 8, !tbaa !5
  %1227 = load ptr, ptr %22, align 8, !tbaa !5
  %1228 = load i64, ptr %38, align 8, !tbaa !9
  %1229 = add nsw i64 %1228, 1
  %1230 = load i64, ptr %28, align 8, !tbaa !9
  %1231 = mul nsw i64 %1229, %1230
  %1232 = add nsw i64 %1231, 1
  %1233 = getelementptr inbounds %struct.doublecomplex, ptr %1227, i64 %1232
  %1234 = call i32 @f2c_zscal(ptr noundef %1226, ptr noundef %37, ptr noundef %1233, ptr noundef @c__1)
  br label %1235

1235:                                             ; preds = %1225, %1222
  br label %1236

1236:                                             ; preds = %1235
  %1237 = load i64, ptr %38, align 8, !tbaa !9
  %1238 = add nsw i64 %1237, 1
  store i64 %1238, ptr %38, align 8, !tbaa !9
  br label %1087, !llvm.loop !26

1239:                                             ; preds = %1087
  br label %1256

1240:                                             ; preds = %1079
  %1241 = load ptr, ptr %16, align 8, !tbaa !5
  %1242 = load i64, ptr %1241, align 8, !tbaa !9
  %1243 = sub nsw i64 %1242, 1
  store i64 %1243, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %1244

1244:                                             ; preds = %1252, %1240
  %1245 = load i64, ptr %38, align 8, !tbaa !9
  %1246 = load i64, ptr %30, align 8, !tbaa !9
  %1247 = icmp sle i64 %1245, %1246
  br i1 %1247, label %1248, label %1255

1248:                                             ; preds = %1244
  %1249 = load ptr, ptr %21, align 8, !tbaa !5
  %1250 = load i64, ptr %38, align 8, !tbaa !9
  %1251 = getelementptr inbounds double, ptr %1249, i64 %1250
  store double 0.000000e+00, ptr %1251, align 8, !tbaa !14
  br label %1252

1252:                                             ; preds = %1248
  %1253 = load i64, ptr %38, align 8, !tbaa !9
  %1254 = add nsw i64 %1253, 1
  store i64 %1254, ptr %38, align 8, !tbaa !9
  br label %1244, !llvm.loop !27

1255:                                             ; preds = %1244
  br label %1256

1256:                                             ; preds = %1255, %1239
  %1257 = load ptr, ptr %16, align 8, !tbaa !5
  %1258 = load i64, ptr %1257, align 8, !tbaa !9
  store i64 %1258, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %1259

1259:                                             ; preds = %1278, %1256
  %1260 = load i64, ptr %38, align 8, !tbaa !9
  %1261 = load i64, ptr %30, align 8, !tbaa !9
  %1262 = icmp sle i64 %1260, %1261
  br i1 %1262, label %1263, label %1281

1263:                                             ; preds = %1259
  %1264 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %1264, ptr %32, align 8, !tbaa !9
  %1265 = load i64, ptr %48, align 8, !tbaa !9
  %1266 = load i64, ptr %38, align 8, !tbaa !9
  %1267 = load i64, ptr %26, align 8, !tbaa !9
  %1268 = mul nsw i64 %1266, %1267
  %1269 = add nsw i64 %1265, %1268
  store i64 %1269, ptr %31, align 8, !tbaa !9
  %1270 = load ptr, ptr %18, align 8, !tbaa !5
  %1271 = load i64, ptr %31, align 8, !tbaa !9
  %1272 = getelementptr inbounds %struct.doublecomplex, ptr %1270, i64 %1271
  %1273 = getelementptr inbounds %struct.doublecomplex, ptr %1272, i32 0, i32 0
  %1274 = load double, ptr %1273, align 8, !tbaa !11
  %1275 = load ptr, ptr %20, align 8, !tbaa !5
  %1276 = load i64, ptr %32, align 8, !tbaa !9
  %1277 = getelementptr inbounds double, ptr %1275, i64 %1276
  store double %1274, ptr %1277, align 8, !tbaa !14
  br label %1278

1278:                                             ; preds = %1263
  %1279 = load i64, ptr %38, align 8, !tbaa !9
  %1280 = add nsw i64 %1279, 1
  store i64 %1280, ptr %38, align 8, !tbaa !9
  br label %1259, !llvm.loop !28

1281:                                             ; preds = %1259
  br label %2295

1282:                                             ; preds = %218
  %1283 = load ptr, ptr %17, align 8, !tbaa !5
  %1284 = load i64, ptr %1283, align 8, !tbaa !9
  %1285 = icmp sgt i64 %1284, 1
  br i1 %1285, label %1286, label %2103

1286:                                             ; preds = %1282
  store i64 0, ptr %47, align 8, !tbaa !9
  %1287 = load i64, ptr %51, align 8, !tbaa !9
  %1288 = add nsw i64 %1287, 2
  store i64 %1288, ptr %44, align 8, !tbaa !9
  store i64 1, ptr %45, align 8, !tbaa !9
  %1289 = load i64, ptr %26, align 8, !tbaa !9
  %1290 = add nsw i64 %1289, 1
  store i64 %1290, ptr %30, align 8, !tbaa !9
  %1291 = load i64, ptr %26, align 8, !tbaa !9
  %1292 = add nsw i64 %1291, 1
  store i64 %1292, ptr %32, align 8, !tbaa !9
  %1293 = load ptr, ptr %18, align 8, !tbaa !5
  %1294 = load i64, ptr %32, align 8, !tbaa !9
  %1295 = getelementptr inbounds %struct.doublecomplex, ptr %1293, i64 %1294
  %1296 = getelementptr inbounds %struct.doublecomplex, ptr %1295, i32 0, i32 0
  %1297 = load double, ptr %1296, align 8, !tbaa !11
  store double %1297, ptr %36, align 8, !tbaa !14
  %1298 = load double, ptr %36, align 8, !tbaa !14
  %1299 = load ptr, ptr %18, align 8, !tbaa !5
  %1300 = load i64, ptr %30, align 8, !tbaa !9
  %1301 = getelementptr inbounds %struct.doublecomplex, ptr %1299, i64 %1300
  %1302 = getelementptr inbounds %struct.doublecomplex, ptr %1301, i32 0, i32 0
  store double %1298, ptr %1302, align 8, !tbaa !11
  %1303 = load ptr, ptr %18, align 8, !tbaa !5
  %1304 = load i64, ptr %30, align 8, !tbaa !9
  %1305 = getelementptr inbounds %struct.doublecomplex, ptr %1303, i64 %1304
  %1306 = getelementptr inbounds %struct.doublecomplex, ptr %1305, i32 0, i32 1
  store double 0.000000e+00, ptr %1306, align 8, !tbaa !15
  %1307 = load ptr, ptr %16, align 8, !tbaa !5
  %1308 = load i64, ptr %1307, align 8, !tbaa !9
  %1309 = sub nsw i64 %1308, 2
  store i64 %1309, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %1310

1310:                                             ; preds = %2099, %1286
  %1311 = load i64, ptr %38, align 8, !tbaa !9
  %1312 = load i64, ptr %30, align 8, !tbaa !9
  %1313 = icmp sle i64 %1311, %1312
  br i1 %1313, label %1314, label %2102

1314:                                             ; preds = %1310
  %1315 = load i64, ptr %51, align 8, !tbaa !9
  %1316 = add nsw i64 %1315, 1
  store i64 %1316, ptr %40, align 8, !tbaa !9
  br label %1317

1317:                                             ; preds = %2095, %1314
  %1318 = load i64, ptr %40, align 8, !tbaa !9
  %1319 = icmp sge i64 %1318, 2
  br i1 %1319, label %1320, label %2098

1320:                                             ; preds = %1317
  %1321 = load i64, ptr %51, align 8, !tbaa !9
  %1322 = load i64, ptr %44, align 8, !tbaa !9
  %1323 = add nsw i64 %1322, %1321
  store i64 %1323, ptr %44, align 8, !tbaa !9
  %1324 = load i64, ptr %51, align 8, !tbaa !9
  %1325 = load i64, ptr %45, align 8, !tbaa !9
  %1326 = add nsw i64 %1325, %1324
  store i64 %1326, ptr %45, align 8, !tbaa !9
  %1327 = load i64, ptr %47, align 8, !tbaa !9
  %1328 = icmp sgt i64 %1327, 0
  br i1 %1328, label %1329, label %1460

1329:                                             ; preds = %1320
  %1330 = load ptr, ptr %18, align 8, !tbaa !5
  %1331 = load i64, ptr %48, align 8, !tbaa !9
  %1332 = load i64, ptr %44, align 8, !tbaa !9
  %1333 = load i64, ptr %48, align 8, !tbaa !9
  %1334 = sub nsw i64 %1332, %1333
  %1335 = load i64, ptr %26, align 8, !tbaa !9
  %1336 = mul nsw i64 %1334, %1335
  %1337 = add nsw i64 %1331, %1336
  %1338 = getelementptr inbounds %struct.doublecomplex, ptr %1330, i64 %1337
  %1339 = load ptr, ptr %24, align 8, !tbaa !5
  %1340 = load i64, ptr %44, align 8, !tbaa !9
  %1341 = getelementptr inbounds %struct.doublecomplex, ptr %1339, i64 %1340
  %1342 = load ptr, ptr %20, align 8, !tbaa !5
  %1343 = load i64, ptr %44, align 8, !tbaa !9
  %1344 = getelementptr inbounds double, ptr %1342, i64 %1343
  %1345 = call i32 @zlargv_(ptr noundef %47, ptr noundef %1338, ptr noundef %55, ptr noundef %1341, ptr noundef %48, ptr noundef %1344, ptr noundef %48)
  %1346 = load i64, ptr %47, align 8, !tbaa !9
  %1347 = load ptr, ptr %17, align 8, !tbaa !5
  %1348 = load i64, ptr %1347, align 8, !tbaa !9
  %1349 = shl i64 %1348, 1
  %1350 = sub nsw i64 %1349, 1
  %1351 = icmp sgt i64 %1346, %1350
  br i1 %1351, label %1352, label %1399

1352:                                             ; preds = %1329
  %1353 = load ptr, ptr %17, align 8, !tbaa !5
  %1354 = load i64, ptr %1353, align 8, !tbaa !9
  %1355 = sub nsw i64 %1354, 1
  store i64 %1355, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %1356

1356:                                             ; preds = %1395, %1352
  %1357 = load i64, ptr %41, align 8, !tbaa !9
  %1358 = load i64, ptr %32, align 8, !tbaa !9
  %1359 = icmp sle i64 %1357, %1358
  br i1 %1359, label %1360, label %1398

1360:                                             ; preds = %1356
  %1361 = load ptr, ptr %18, align 8, !tbaa !5
  %1362 = load i64, ptr %48, align 8, !tbaa !9
  %1363 = load i64, ptr %41, align 8, !tbaa !9
  %1364 = sub nsw i64 %1362, %1363
  %1365 = load i64, ptr %44, align 8, !tbaa !9
  %1366 = load i64, ptr %48, align 8, !tbaa !9
  %1367 = sub nsw i64 %1365, %1366
  %1368 = load i64, ptr %41, align 8, !tbaa !9
  %1369 = add nsw i64 %1367, %1368
  %1370 = load i64, ptr %26, align 8, !tbaa !9
  %1371 = mul nsw i64 %1369, %1370
  %1372 = add nsw i64 %1364, %1371
  %1373 = getelementptr inbounds %struct.doublecomplex, ptr %1361, i64 %1372
  %1374 = load ptr, ptr %18, align 8, !tbaa !5
  %1375 = load i64, ptr %48, align 8, !tbaa !9
  %1376 = load i64, ptr %41, align 8, !tbaa !9
  %1377 = sub nsw i64 %1375, %1376
  %1378 = add nsw i64 %1377, 1
  %1379 = load i64, ptr %44, align 8, !tbaa !9
  %1380 = load i64, ptr %48, align 8, !tbaa !9
  %1381 = sub nsw i64 %1379, %1380
  %1382 = load i64, ptr %41, align 8, !tbaa !9
  %1383 = add nsw i64 %1381, %1382
  %1384 = load i64, ptr %26, align 8, !tbaa !9
  %1385 = mul nsw i64 %1383, %1384
  %1386 = add nsw i64 %1378, %1385
  %1387 = getelementptr inbounds %struct.doublecomplex, ptr %1374, i64 %1386
  %1388 = load ptr, ptr %20, align 8, !tbaa !5
  %1389 = load i64, ptr %44, align 8, !tbaa !9
  %1390 = getelementptr inbounds double, ptr %1388, i64 %1389
  %1391 = load ptr, ptr %24, align 8, !tbaa !5
  %1392 = load i64, ptr %44, align 8, !tbaa !9
  %1393 = getelementptr inbounds %struct.doublecomplex, ptr %1391, i64 %1392
  %1394 = call i32 @zlartv_(ptr noundef %47, ptr noundef %1373, ptr noundef %55, ptr noundef %1387, ptr noundef %55, ptr noundef %1390, ptr noundef %1393, ptr noundef %48)
  br label %1395

1395:                                             ; preds = %1360
  %1396 = load i64, ptr %41, align 8, !tbaa !9
  %1397 = add nsw i64 %1396, 1
  store i64 %1397, ptr %41, align 8, !tbaa !9
  br label %1356, !llvm.loop !29

1398:                                             ; preds = %1356
  br label %1459

1399:                                             ; preds = %1329
  %1400 = load i64, ptr %44, align 8, !tbaa !9
  %1401 = load i64, ptr %48, align 8, !tbaa !9
  %1402 = load i64, ptr %47, align 8, !tbaa !9
  %1403 = sub nsw i64 %1402, 1
  %1404 = mul nsw i64 %1401, %1403
  %1405 = add nsw i64 %1400, %1404
  store i64 %1405, ptr %56, align 8, !tbaa !9
  %1406 = load i64, ptr %56, align 8, !tbaa !9
  store i64 %1406, ptr %32, align 8, !tbaa !9
  %1407 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %1407, ptr %31, align 8, !tbaa !9
  %1408 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1408, ptr %58, align 8, !tbaa !9
  br label %1409

1409:                                             ; preds = %1454, %1399
  %1410 = load i64, ptr %31, align 8, !tbaa !9
  %1411 = icmp slt i64 %1410, 0
  br i1 %1411, label %1412, label %1417

1412:                                             ; preds = %1409
  %1413 = load i64, ptr %58, align 8, !tbaa !9
  %1414 = load i64, ptr %32, align 8, !tbaa !9
  %1415 = icmp sge i64 %1413, %1414
  %1416 = zext i1 %1415 to i32
  br label %1422

1417:                                             ; preds = %1409
  %1418 = load i64, ptr %58, align 8, !tbaa !9
  %1419 = load i64, ptr %32, align 8, !tbaa !9
  %1420 = icmp sle i64 %1418, %1419
  %1421 = zext i1 %1420 to i32
  br label %1422

1422:                                             ; preds = %1417, %1412
  %1423 = phi i32 [ %1416, %1412 ], [ %1421, %1417 ]
  %1424 = icmp ne i32 %1423, 0
  br i1 %1424, label %1425, label %1458

1425:                                             ; preds = %1422
  %1426 = load ptr, ptr %18, align 8, !tbaa !5
  %1427 = load ptr, ptr %17, align 8, !tbaa !5
  %1428 = load i64, ptr %1427, align 8, !tbaa !9
  %1429 = load i64, ptr %58, align 8, !tbaa !9
  %1430 = load ptr, ptr %17, align 8, !tbaa !5
  %1431 = load i64, ptr %1430, align 8, !tbaa !9
  %1432 = sub nsw i64 %1429, %1431
  %1433 = load i64, ptr %26, align 8, !tbaa !9
  %1434 = mul nsw i64 %1432, %1433
  %1435 = add nsw i64 %1428, %1434
  %1436 = getelementptr inbounds %struct.doublecomplex, ptr %1426, i64 %1435
  %1437 = load ptr, ptr %18, align 8, !tbaa !5
  %1438 = load i64, ptr %48, align 8, !tbaa !9
  %1439 = load i64, ptr %58, align 8, !tbaa !9
  %1440 = load ptr, ptr %17, align 8, !tbaa !5
  %1441 = load i64, ptr %1440, align 8, !tbaa !9
  %1442 = sub nsw i64 %1439, %1441
  %1443 = load i64, ptr %26, align 8, !tbaa !9
  %1444 = mul nsw i64 %1442, %1443
  %1445 = add nsw i64 %1438, %1444
  %1446 = getelementptr inbounds %struct.doublecomplex, ptr %1437, i64 %1445
  %1447 = load ptr, ptr %20, align 8, !tbaa !5
  %1448 = load i64, ptr %58, align 8, !tbaa !9
  %1449 = getelementptr inbounds double, ptr %1447, i64 %1448
  %1450 = load ptr, ptr %24, align 8, !tbaa !5
  %1451 = load i64, ptr %58, align 8, !tbaa !9
  %1452 = getelementptr inbounds %struct.doublecomplex, ptr %1450, i64 %1451
  %1453 = call i32 @zrot_(ptr noundef %54, ptr noundef %1436, ptr noundef %60, ptr noundef %1446, ptr noundef %60, ptr noundef %1449, ptr noundef %1452)
  br label %1454

1454:                                             ; preds = %1425
  %1455 = load i64, ptr %31, align 8, !tbaa !9
  %1456 = load i64, ptr %58, align 8, !tbaa !9
  %1457 = add nsw i64 %1456, %1455
  store i64 %1457, ptr %58, align 8, !tbaa !9
  br label %1409, !llvm.loop !30

1458:                                             ; preds = %1422
  br label %1459

1459:                                             ; preds = %1458, %1398
  br label %1460

1460:                                             ; preds = %1459, %1320
  %1461 = load i64, ptr %40, align 8, !tbaa !9
  %1462 = icmp sgt i64 %1461, 2
  br i1 %1462, label %1463, label %1564

1463:                                             ; preds = %1460
  %1464 = load i64, ptr %40, align 8, !tbaa !9
  %1465 = load ptr, ptr %16, align 8, !tbaa !5
  %1466 = load i64, ptr %1465, align 8, !tbaa !9
  %1467 = load i64, ptr %38, align 8, !tbaa !9
  %1468 = sub nsw i64 %1466, %1467
  %1469 = add nsw i64 %1468, 1
  %1470 = icmp sle i64 %1464, %1469
  br i1 %1470, label %1471, label %1557

1471:                                             ; preds = %1463
  %1472 = load ptr, ptr %18, align 8, !tbaa !5
  %1473 = load i64, ptr %40, align 8, !tbaa !9
  %1474 = sub nsw i64 %1473, 1
  %1475 = load i64, ptr %38, align 8, !tbaa !9
  %1476 = load i64, ptr %26, align 8, !tbaa !9
  %1477 = mul nsw i64 %1475, %1476
  %1478 = add nsw i64 %1474, %1477
  %1479 = getelementptr inbounds %struct.doublecomplex, ptr %1472, i64 %1478
  %1480 = load ptr, ptr %18, align 8, !tbaa !5
  %1481 = load i64, ptr %40, align 8, !tbaa !9
  %1482 = load i64, ptr %38, align 8, !tbaa !9
  %1483 = load i64, ptr %26, align 8, !tbaa !9
  %1484 = mul nsw i64 %1482, %1483
  %1485 = add nsw i64 %1481, %1484
  %1486 = getelementptr inbounds %struct.doublecomplex, ptr %1480, i64 %1485
  %1487 = load ptr, ptr %20, align 8, !tbaa !5
  %1488 = load i64, ptr %38, align 8, !tbaa !9
  %1489 = load i64, ptr %40, align 8, !tbaa !9
  %1490 = add nsw i64 %1488, %1489
  %1491 = sub nsw i64 %1490, 1
  %1492 = getelementptr inbounds double, ptr %1487, i64 %1491
  %1493 = load ptr, ptr %24, align 8, !tbaa !5
  %1494 = load i64, ptr %38, align 8, !tbaa !9
  %1495 = load i64, ptr %40, align 8, !tbaa !9
  %1496 = add nsw i64 %1494, %1495
  %1497 = sub nsw i64 %1496, 1
  %1498 = getelementptr inbounds %struct.doublecomplex, ptr %1493, i64 %1497
  %1499 = call i32 @zlartg_(ptr noundef %1479, ptr noundef %1486, ptr noundef %1492, ptr noundef %1498, ptr noundef %62)
  %1500 = load i64, ptr %40, align 8, !tbaa !9
  %1501 = sub nsw i64 %1500, 1
  %1502 = load i64, ptr %38, align 8, !tbaa !9
  %1503 = load i64, ptr %26, align 8, !tbaa !9
  %1504 = mul nsw i64 %1502, %1503
  %1505 = add nsw i64 %1501, %1504
  store i64 %1505, ptr %31, align 8, !tbaa !9
  %1506 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 0
  %1507 = load double, ptr %1506, align 8, !tbaa !11
  %1508 = load ptr, ptr %18, align 8, !tbaa !5
  %1509 = load i64, ptr %31, align 8, !tbaa !9
  %1510 = getelementptr inbounds %struct.doublecomplex, ptr %1508, i64 %1509
  %1511 = getelementptr inbounds %struct.doublecomplex, ptr %1510, i32 0, i32 0
  store double %1507, ptr %1511, align 8, !tbaa !11
  %1512 = getelementptr inbounds %struct.doublecomplex, ptr %62, i32 0, i32 1
  %1513 = load double, ptr %1512, align 8, !tbaa !15
  %1514 = load ptr, ptr %18, align 8, !tbaa !5
  %1515 = load i64, ptr %31, align 8, !tbaa !9
  %1516 = getelementptr inbounds %struct.doublecomplex, ptr %1514, i64 %1515
  %1517 = getelementptr inbounds %struct.doublecomplex, ptr %1516, i32 0, i32 1
  store double %1513, ptr %1517, align 8, !tbaa !15
  %1518 = load i64, ptr %40, align 8, !tbaa !9
  %1519 = sub nsw i64 %1518, 3
  store i64 %1519, ptr %31, align 8, !tbaa !9
  %1520 = load ptr, ptr %19, align 8, !tbaa !5
  %1521 = load i64, ptr %1520, align 8, !tbaa !9
  %1522 = sub nsw i64 %1521, 1
  store i64 %1522, ptr %32, align 8, !tbaa !9
  %1523 = load ptr, ptr %19, align 8, !tbaa !5
  %1524 = load i64, ptr %1523, align 8, !tbaa !9
  %1525 = sub nsw i64 %1524, 1
  store i64 %1525, ptr %33, align 8, !tbaa !9
  %1526 = load ptr, ptr %18, align 8, !tbaa !5
  %1527 = load i64, ptr %40, align 8, !tbaa !9
  %1528 = sub nsw i64 %1527, 2
  %1529 = load i64, ptr %38, align 8, !tbaa !9
  %1530 = add nsw i64 %1529, 1
  %1531 = load i64, ptr %26, align 8, !tbaa !9
  %1532 = mul nsw i64 %1530, %1531
  %1533 = add nsw i64 %1528, %1532
  %1534 = getelementptr inbounds %struct.doublecomplex, ptr %1526, i64 %1533
  %1535 = load ptr, ptr %18, align 8, !tbaa !5
  %1536 = load i64, ptr %40, align 8, !tbaa !9
  %1537 = sub nsw i64 %1536, 1
  %1538 = load i64, ptr %38, align 8, !tbaa !9
  %1539 = add nsw i64 %1538, 1
  %1540 = load i64, ptr %26, align 8, !tbaa !9
  %1541 = mul nsw i64 %1539, %1540
  %1542 = add nsw i64 %1537, %1541
  %1543 = getelementptr inbounds %struct.doublecomplex, ptr %1535, i64 %1542
  %1544 = load ptr, ptr %20, align 8, !tbaa !5
  %1545 = load i64, ptr %38, align 8, !tbaa !9
  %1546 = load i64, ptr %40, align 8, !tbaa !9
  %1547 = add nsw i64 %1545, %1546
  %1548 = sub nsw i64 %1547, 1
  %1549 = getelementptr inbounds double, ptr %1544, i64 %1548
  %1550 = load ptr, ptr %24, align 8, !tbaa !5
  %1551 = load i64, ptr %38, align 8, !tbaa !9
  %1552 = load i64, ptr %40, align 8, !tbaa !9
  %1553 = add nsw i64 %1551, %1552
  %1554 = sub nsw i64 %1553, 1
  %1555 = getelementptr inbounds %struct.doublecomplex, ptr %1550, i64 %1554
  %1556 = call i32 @zrot_(ptr noundef %31, ptr noundef %1534, ptr noundef %32, ptr noundef %1543, ptr noundef %33, ptr noundef %1549, ptr noundef %1555)
  br label %1557

1557:                                             ; preds = %1471, %1463
  %1558 = load i64, ptr %47, align 8, !tbaa !9
  %1559 = add nsw i64 %1558, 1
  store i64 %1559, ptr %47, align 8, !tbaa !9
  %1560 = load i64, ptr %44, align 8, !tbaa !9
  %1561 = load i64, ptr %51, align 8, !tbaa !9
  %1562 = sub nsw i64 %1560, %1561
  %1563 = sub nsw i64 %1562, 1
  store i64 %1563, ptr %44, align 8, !tbaa !9
  br label %1564

1564:                                             ; preds = %1557, %1460
  %1565 = load i64, ptr %47, align 8, !tbaa !9
  %1566 = icmp sgt i64 %1565, 0
  br i1 %1566, label %1567, label %1595

1567:                                             ; preds = %1564
  %1568 = load ptr, ptr %18, align 8, !tbaa !5
  %1569 = load i64, ptr %44, align 8, !tbaa !9
  %1570 = sub nsw i64 %1569, 1
  %1571 = load i64, ptr %26, align 8, !tbaa !9
  %1572 = mul nsw i64 %1570, %1571
  %1573 = add nsw i64 %1572, 1
  %1574 = getelementptr inbounds %struct.doublecomplex, ptr %1568, i64 %1573
  %1575 = load ptr, ptr %18, align 8, !tbaa !5
  %1576 = load i64, ptr %44, align 8, !tbaa !9
  %1577 = load i64, ptr %26, align 8, !tbaa !9
  %1578 = mul nsw i64 %1576, %1577
  %1579 = add nsw i64 %1578, 1
  %1580 = getelementptr inbounds %struct.doublecomplex, ptr %1575, i64 %1579
  %1581 = load ptr, ptr %18, align 8, !tbaa !5
  %1582 = load i64, ptr %44, align 8, !tbaa !9
  %1583 = sub nsw i64 %1582, 1
  %1584 = load i64, ptr %26, align 8, !tbaa !9
  %1585 = mul nsw i64 %1583, %1584
  %1586 = add nsw i64 %1585, 2
  %1587 = getelementptr inbounds %struct.doublecomplex, ptr %1581, i64 %1586
  %1588 = load ptr, ptr %20, align 8, !tbaa !5
  %1589 = load i64, ptr %44, align 8, !tbaa !9
  %1590 = getelementptr inbounds double, ptr %1588, i64 %1589
  %1591 = load ptr, ptr %24, align 8, !tbaa !5
  %1592 = load i64, ptr %44, align 8, !tbaa !9
  %1593 = getelementptr inbounds %struct.doublecomplex, ptr %1591, i64 %1592
  %1594 = call i32 @zlar2v_(ptr noundef %47, ptr noundef %1574, ptr noundef %1580, ptr noundef %1587, ptr noundef %55, ptr noundef %1590, ptr noundef %1593, ptr noundef %48)
  br label %1595

1595:                                             ; preds = %1567, %1564
  %1596 = load i64, ptr %47, align 8, !tbaa !9
  %1597 = icmp sgt i64 %1596, 0
  br i1 %1597, label %1598, label %1761

1598:                                             ; preds = %1595
  %1599 = load ptr, ptr %24, align 8, !tbaa !5
  %1600 = load i64, ptr %44, align 8, !tbaa !9
  %1601 = getelementptr inbounds %struct.doublecomplex, ptr %1599, i64 %1600
  %1602 = call i32 @zlacgv_(ptr noundef %47, ptr noundef %1601, ptr noundef %48)
  %1603 = load i64, ptr %47, align 8, !tbaa !9
  %1604 = load ptr, ptr %17, align 8, !tbaa !5
  %1605 = load i64, ptr %1604, align 8, !tbaa !9
  %1606 = shl i64 %1605, 1
  %1607 = sub nsw i64 %1606, 1
  %1608 = icmp sgt i64 %1603, %1607
  br i1 %1608, label %1609, label %1662

1609:                                             ; preds = %1598
  %1610 = load ptr, ptr %17, align 8, !tbaa !5
  %1611 = load i64, ptr %1610, align 8, !tbaa !9
  %1612 = sub nsw i64 %1611, 1
  store i64 %1612, ptr %31, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %1613

1613:                                             ; preds = %1658, %1609
  %1614 = load i64, ptr %41, align 8, !tbaa !9
  %1615 = load i64, ptr %31, align 8, !tbaa !9
  %1616 = icmp sle i64 %1614, %1615
  br i1 %1616, label %1617, label %1661

1617:                                             ; preds = %1613
  %1618 = load i64, ptr %45, align 8, !tbaa !9
  %1619 = load i64, ptr %41, align 8, !tbaa !9
  %1620 = add nsw i64 %1618, %1619
  %1621 = load ptr, ptr %16, align 8, !tbaa !5
  %1622 = load i64, ptr %1621, align 8, !tbaa !9
  %1623 = icmp sgt i64 %1620, %1622
  br i1 %1623, label %1624, label %1627

1624:                                             ; preds = %1617
  %1625 = load i64, ptr %47, align 8, !tbaa !9
  %1626 = sub nsw i64 %1625, 1
  store i64 %1626, ptr %53, align 8, !tbaa !9
  br label %1629

1627:                                             ; preds = %1617
  %1628 = load i64, ptr %47, align 8, !tbaa !9
  store i64 %1628, ptr %53, align 8, !tbaa !9
  br label %1629

1629:                                             ; preds = %1627, %1624
  %1630 = load i64, ptr %53, align 8, !tbaa !9
  %1631 = icmp sgt i64 %1630, 0
  br i1 %1631, label %1632, label %1657

1632:                                             ; preds = %1629
  %1633 = load ptr, ptr %18, align 8, !tbaa !5
  %1634 = load i64, ptr %41, align 8, !tbaa !9
  %1635 = add nsw i64 %1634, 2
  %1636 = load i64, ptr %44, align 8, !tbaa !9
  %1637 = sub nsw i64 %1636, 1
  %1638 = load i64, ptr %26, align 8, !tbaa !9
  %1639 = mul nsw i64 %1637, %1638
  %1640 = add nsw i64 %1635, %1639
  %1641 = getelementptr inbounds %struct.doublecomplex, ptr %1633, i64 %1640
  %1642 = load ptr, ptr %18, align 8, !tbaa !5
  %1643 = load i64, ptr %41, align 8, !tbaa !9
  %1644 = add nsw i64 %1643, 1
  %1645 = load i64, ptr %44, align 8, !tbaa !9
  %1646 = load i64, ptr %26, align 8, !tbaa !9
  %1647 = mul nsw i64 %1645, %1646
  %1648 = add nsw i64 %1644, %1647
  %1649 = getelementptr inbounds %struct.doublecomplex, ptr %1642, i64 %1648
  %1650 = load ptr, ptr %20, align 8, !tbaa !5
  %1651 = load i64, ptr %44, align 8, !tbaa !9
  %1652 = getelementptr inbounds double, ptr %1650, i64 %1651
  %1653 = load ptr, ptr %24, align 8, !tbaa !5
  %1654 = load i64, ptr %44, align 8, !tbaa !9
  %1655 = getelementptr inbounds %struct.doublecomplex, ptr %1653, i64 %1654
  %1656 = call i32 @zlartv_(ptr noundef %53, ptr noundef %1641, ptr noundef %55, ptr noundef %1649, ptr noundef %55, ptr noundef %1652, ptr noundef %1655, ptr noundef %48)
  br label %1657

1657:                                             ; preds = %1632, %1629
  br label %1658

1658:                                             ; preds = %1657
  %1659 = load i64, ptr %41, align 8, !tbaa !9
  %1660 = add nsw i64 %1659, 1
  store i64 %1660, ptr %41, align 8, !tbaa !9
  br label %1613, !llvm.loop !31

1661:                                             ; preds = %1613
  br label %1760

1662:                                             ; preds = %1598
  %1663 = load i64, ptr %44, align 8, !tbaa !9
  %1664 = load i64, ptr %48, align 8, !tbaa !9
  %1665 = load i64, ptr %47, align 8, !tbaa !9
  %1666 = sub nsw i64 %1665, 2
  %1667 = mul nsw i64 %1664, %1666
  %1668 = add nsw i64 %1663, %1667
  store i64 %1668, ptr %63, align 8, !tbaa !9
  %1669 = load i64, ptr %63, align 8, !tbaa !9
  %1670 = load i64, ptr %44, align 8, !tbaa !9
  %1671 = icmp sge i64 %1669, %1670
  br i1 %1671, label %1672, label %1718

1672:                                             ; preds = %1662
  %1673 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %1673, ptr %31, align 8, !tbaa !9
  %1674 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %1674, ptr %32, align 8, !tbaa !9
  %1675 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1675, ptr %64, align 8, !tbaa !9
  br label %1676

1676:                                             ; preds = %1713, %1672
  %1677 = load i64, ptr %32, align 8, !tbaa !9
  %1678 = icmp slt i64 %1677, 0
  br i1 %1678, label %1679, label %1684

1679:                                             ; preds = %1676
  %1680 = load i64, ptr %64, align 8, !tbaa !9
  %1681 = load i64, ptr %31, align 8, !tbaa !9
  %1682 = icmp sge i64 %1680, %1681
  %1683 = zext i1 %1682 to i32
  br label %1689

1684:                                             ; preds = %1676
  %1685 = load i64, ptr %64, align 8, !tbaa !9
  %1686 = load i64, ptr %31, align 8, !tbaa !9
  %1687 = icmp sle i64 %1685, %1686
  %1688 = zext i1 %1687 to i32
  br label %1689

1689:                                             ; preds = %1684, %1679
  %1690 = phi i32 [ %1683, %1679 ], [ %1688, %1684 ]
  %1691 = icmp ne i32 %1690, 0
  br i1 %1691, label %1692, label %1717

1692:                                             ; preds = %1689
  %1693 = load ptr, ptr %18, align 8, !tbaa !5
  %1694 = load i64, ptr %64, align 8, !tbaa !9
  %1695 = sub nsw i64 %1694, 1
  %1696 = load i64, ptr %26, align 8, !tbaa !9
  %1697 = mul nsw i64 %1695, %1696
  %1698 = add nsw i64 %1697, 3
  %1699 = getelementptr inbounds %struct.doublecomplex, ptr %1693, i64 %1698
  %1700 = load ptr, ptr %18, align 8, !tbaa !5
  %1701 = load i64, ptr %64, align 8, !tbaa !9
  %1702 = load i64, ptr %26, align 8, !tbaa !9
  %1703 = mul nsw i64 %1701, %1702
  %1704 = add nsw i64 %1703, 2
  %1705 = getelementptr inbounds %struct.doublecomplex, ptr %1700, i64 %1704
  %1706 = load ptr, ptr %20, align 8, !tbaa !5
  %1707 = load i64, ptr %64, align 8, !tbaa !9
  %1708 = getelementptr inbounds double, ptr %1706, i64 %1707
  %1709 = load ptr, ptr %24, align 8, !tbaa !5
  %1710 = load i64, ptr %64, align 8, !tbaa !9
  %1711 = getelementptr inbounds %struct.doublecomplex, ptr %1709, i64 %1710
  %1712 = call i32 @zrot_(ptr noundef %54, ptr noundef %1699, ptr noundef @c__1, ptr noundef %1705, ptr noundef @c__1, ptr noundef %1708, ptr noundef %1711)
  br label %1713

1713:                                             ; preds = %1692
  %1714 = load i64, ptr %32, align 8, !tbaa !9
  %1715 = load i64, ptr %64, align 8, !tbaa !9
  %1716 = add nsw i64 %1715, %1714
  store i64 %1716, ptr %64, align 8, !tbaa !9
  br label %1676, !llvm.loop !32

1717:                                             ; preds = %1689
  br label %1718

1718:                                             ; preds = %1717, %1662
  %1719 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %1719, ptr %32, align 8, !tbaa !9
  %1720 = load ptr, ptr %16, align 8, !tbaa !5
  %1721 = load i64, ptr %1720, align 8, !tbaa !9
  %1722 = load i64, ptr %45, align 8, !tbaa !9
  %1723 = sub nsw i64 %1721, %1722
  store i64 %1723, ptr %31, align 8, !tbaa !9
  %1724 = load i64, ptr %32, align 8, !tbaa !9
  %1725 = load i64, ptr %31, align 8, !tbaa !9
  %1726 = icmp sle i64 %1724, %1725
  br i1 %1726, label %1727, label %1729

1727:                                             ; preds = %1718
  %1728 = load i64, ptr %32, align 8, !tbaa !9
  br label %1731

1729:                                             ; preds = %1718
  %1730 = load i64, ptr %31, align 8, !tbaa !9
  br label %1731

1731:                                             ; preds = %1729, %1727
  %1732 = phi i64 [ %1728, %1727 ], [ %1730, %1729 ]
  store i64 %1732, ptr %57, align 8, !tbaa !9
  %1733 = load i64, ptr %63, align 8, !tbaa !9
  %1734 = load i64, ptr %48, align 8, !tbaa !9
  %1735 = add nsw i64 %1733, %1734
  store i64 %1735, ptr %61, align 8, !tbaa !9
  %1736 = load i64, ptr %57, align 8, !tbaa !9
  %1737 = icmp sgt i64 %1736, 0
  br i1 %1737, label %1738, label %1759

1738:                                             ; preds = %1731
  %1739 = load ptr, ptr %18, align 8, !tbaa !5
  %1740 = load i64, ptr %61, align 8, !tbaa !9
  %1741 = sub nsw i64 %1740, 1
  %1742 = load i64, ptr %26, align 8, !tbaa !9
  %1743 = mul nsw i64 %1741, %1742
  %1744 = add nsw i64 %1743, 3
  %1745 = getelementptr inbounds %struct.doublecomplex, ptr %1739, i64 %1744
  %1746 = load ptr, ptr %18, align 8, !tbaa !5
  %1747 = load i64, ptr %61, align 8, !tbaa !9
  %1748 = load i64, ptr %26, align 8, !tbaa !9
  %1749 = mul nsw i64 %1747, %1748
  %1750 = add nsw i64 %1749, 2
  %1751 = getelementptr inbounds %struct.doublecomplex, ptr %1746, i64 %1750
  %1752 = load ptr, ptr %20, align 8, !tbaa !5
  %1753 = load i64, ptr %61, align 8, !tbaa !9
  %1754 = getelementptr inbounds double, ptr %1752, i64 %1753
  %1755 = load ptr, ptr %24, align 8, !tbaa !5
  %1756 = load i64, ptr %61, align 8, !tbaa !9
  %1757 = getelementptr inbounds %struct.doublecomplex, ptr %1755, i64 %1756
  %1758 = call i32 @zrot_(ptr noundef %57, ptr noundef %1745, ptr noundef @c__1, ptr noundef %1751, ptr noundef @c__1, ptr noundef %1754, ptr noundef %1757)
  br label %1759

1759:                                             ; preds = %1738, %1731
  br label %1760

1760:                                             ; preds = %1759, %1661
  br label %1761

1761:                                             ; preds = %1760, %1595
  %1762 = load i64, ptr %67, align 8, !tbaa !9
  %1763 = icmp ne i64 %1762, 0
  br i1 %1763, label %1764, label %1941

1764:                                             ; preds = %1761
  %1765 = load i64, ptr %66, align 8, !tbaa !9
  %1766 = icmp ne i64 %1765, 0
  br i1 %1766, label %1767, label %1893

1767:                                             ; preds = %1764
  %1768 = load i64, ptr %65, align 8, !tbaa !9
  %1769 = load i64, ptr %45, align 8, !tbaa !9
  %1770 = icmp sge i64 %1768, %1769
  br i1 %1770, label %1771, label %1773

1771:                                             ; preds = %1767
  %1772 = load i64, ptr %65, align 8, !tbaa !9
  br label %1775

1773:                                             ; preds = %1767
  %1774 = load i64, ptr %45, align 8, !tbaa !9
  br label %1775

1775:                                             ; preds = %1773, %1771
  %1776 = phi i64 [ %1772, %1771 ], [ %1774, %1773 ]
  store i64 %1776, ptr %65, align 8, !tbaa !9
  store i64 0, ptr %32, align 8, !tbaa !9
  %1777 = load i64, ptr %40, align 8, !tbaa !9
  %1778 = sub nsw i64 %1777, 3
  store i64 %1778, ptr %31, align 8, !tbaa !9
  %1779 = load i64, ptr %32, align 8, !tbaa !9
  %1780 = load i64, ptr %31, align 8, !tbaa !9
  %1781 = icmp sge i64 %1779, %1780
  br i1 %1781, label %1782, label %1784

1782:                                             ; preds = %1775
  %1783 = load i64, ptr %32, align 8, !tbaa !9
  br label %1786

1784:                                             ; preds = %1775
  %1785 = load i64, ptr %31, align 8, !tbaa !9
  br label %1786

1786:                                             ; preds = %1784, %1782
  %1787 = phi i64 [ %1783, %1782 ], [ %1785, %1784 ]
  store i64 %1787, ptr %43, align 8, !tbaa !9
  %1788 = load i64, ptr %38, align 8, !tbaa !9
  %1789 = load ptr, ptr %17, align 8, !tbaa !5
  %1790 = load i64, ptr %1789, align 8, !tbaa !9
  %1791 = mul nsw i64 %1788, %1790
  %1792 = add nsw i64 %1791, 1
  store i64 %1792, ptr %69, align 8, !tbaa !9
  %1793 = load i64, ptr %40, align 8, !tbaa !9
  %1794 = icmp eq i64 %1793, 2
  br i1 %1794, label %1795, label %1800

1795:                                             ; preds = %1786
  %1796 = load ptr, ptr %17, align 8, !tbaa !5
  %1797 = load i64, ptr %1796, align 8, !tbaa !9
  %1798 = load i64, ptr %69, align 8, !tbaa !9
  %1799 = add nsw i64 %1798, %1797
  store i64 %1799, ptr %69, align 8, !tbaa !9
  br label %1800

1800:                                             ; preds = %1795, %1786
  %1801 = load i64, ptr %69, align 8, !tbaa !9
  %1802 = load i64, ptr %65, align 8, !tbaa !9
  %1803 = icmp sle i64 %1801, %1802
  br i1 %1803, label %1804, label %1806

1804:                                             ; preds = %1800
  %1805 = load i64, ptr %69, align 8, !tbaa !9
  br label %1808

1806:                                             ; preds = %1800
  %1807 = load i64, ptr %65, align 8, !tbaa !9
  br label %1808

1808:                                             ; preds = %1806, %1804
  %1809 = phi i64 [ %1805, %1804 ], [ %1807, %1806 ]
  store i64 %1809, ptr %69, align 8, !tbaa !9
  %1810 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1810, ptr %32, align 8, !tbaa !9
  %1811 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %1811, ptr %31, align 8, !tbaa !9
  %1812 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1812, ptr %39, align 8, !tbaa !9
  br label %1813

1813:                                             ; preds = %1888, %1808
  %1814 = load i64, ptr %31, align 8, !tbaa !9
  %1815 = icmp slt i64 %1814, 0
  br i1 %1815, label %1816, label %1821

1816:                                             ; preds = %1813
  %1817 = load i64, ptr %39, align 8, !tbaa !9
  %1818 = load i64, ptr %32, align 8, !tbaa !9
  %1819 = icmp sge i64 %1817, %1818
  %1820 = zext i1 %1819 to i32
  br label %1826

1821:                                             ; preds = %1813
  %1822 = load i64, ptr %39, align 8, !tbaa !9
  %1823 = load i64, ptr %32, align 8, !tbaa !9
  %1824 = icmp sle i64 %1822, %1823
  %1825 = zext i1 %1824 to i32
  br label %1826

1826:                                             ; preds = %1821, %1816
  %1827 = phi i32 [ %1820, %1816 ], [ %1825, %1821 ]
  %1828 = icmp ne i32 %1827, 0
  br i1 %1828, label %1829, label %1892

1829:                                             ; preds = %1826
  %1830 = load i64, ptr %38, align 8, !tbaa !9
  %1831 = load i64, ptr %43, align 8, !tbaa !9
  %1832 = load i64, ptr %54, align 8, !tbaa !9
  %1833 = sdiv i64 %1831, %1832
  %1834 = sub nsw i64 %1830, %1833
  store i64 %1834, ptr %49, align 8, !tbaa !9
  %1835 = load i64, ptr %43, align 8, !tbaa !9
  %1836 = add nsw i64 %1835, 1
  store i64 %1836, ptr %43, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  %1837 = load i64, ptr %39, align 8, !tbaa !9
  %1838 = load i64, ptr %49, align 8, !tbaa !9
  %1839 = sub nsw i64 %1837, %1838
  store i64 %1839, ptr %34, align 8, !tbaa !9
  %1840 = load i64, ptr %33, align 8, !tbaa !9
  %1841 = load i64, ptr %34, align 8, !tbaa !9
  %1842 = icmp sge i64 %1840, %1841
  br i1 %1842, label %1843, label %1845

1843:                                             ; preds = %1829
  %1844 = load i64, ptr %33, align 8, !tbaa !9
  br label %1847

1845:                                             ; preds = %1829
  %1846 = load i64, ptr %34, align 8, !tbaa !9
  br label %1847

1847:                                             ; preds = %1845, %1843
  %1848 = phi i64 [ %1844, %1843 ], [ %1846, %1845 ]
  store i64 %1848, ptr %50, align 8, !tbaa !9
  %1849 = load i64, ptr %69, align 8, !tbaa !9
  %1850 = add nsw i64 %1849, 1
  %1851 = load i64, ptr %50, align 8, !tbaa !9
  %1852 = sub nsw i64 %1850, %1851
  store i64 %1852, ptr %46, align 8, !tbaa !9
  %1853 = load i64, ptr %69, align 8, !tbaa !9
  %1854 = load ptr, ptr %17, align 8, !tbaa !5
  %1855 = load i64, ptr %1854, align 8, !tbaa !9
  %1856 = add nsw i64 %1853, %1855
  store i64 %1856, ptr %33, align 8, !tbaa !9
  %1857 = load i64, ptr %33, align 8, !tbaa !9
  %1858 = load i64, ptr %65, align 8, !tbaa !9
  %1859 = icmp sle i64 %1857, %1858
  br i1 %1859, label %1860, label %1862

1860:                                             ; preds = %1847
  %1861 = load i64, ptr %33, align 8, !tbaa !9
  br label %1864

1862:                                             ; preds = %1847
  %1863 = load i64, ptr %65, align 8, !tbaa !9
  br label %1864

1864:                                             ; preds = %1862, %1860
  %1865 = phi i64 [ %1861, %1860 ], [ %1863, %1862 ]
  store i64 %1865, ptr %69, align 8, !tbaa !9
  %1866 = load ptr, ptr %22, align 8, !tbaa !5
  %1867 = load i64, ptr %50, align 8, !tbaa !9
  %1868 = load i64, ptr %39, align 8, !tbaa !9
  %1869 = sub nsw i64 %1868, 1
  %1870 = load i64, ptr %28, align 8, !tbaa !9
  %1871 = mul nsw i64 %1869, %1870
  %1872 = add nsw i64 %1867, %1871
  %1873 = getelementptr inbounds %struct.doublecomplex, ptr %1866, i64 %1872
  %1874 = load ptr, ptr %22, align 8, !tbaa !5
  %1875 = load i64, ptr %50, align 8, !tbaa !9
  %1876 = load i64, ptr %39, align 8, !tbaa !9
  %1877 = load i64, ptr %28, align 8, !tbaa !9
  %1878 = mul nsw i64 %1876, %1877
  %1879 = add nsw i64 %1875, %1878
  %1880 = getelementptr inbounds %struct.doublecomplex, ptr %1874, i64 %1879
  %1881 = load ptr, ptr %20, align 8, !tbaa !5
  %1882 = load i64, ptr %39, align 8, !tbaa !9
  %1883 = getelementptr inbounds double, ptr %1881, i64 %1882
  %1884 = load ptr, ptr %24, align 8, !tbaa !5
  %1885 = load i64, ptr %39, align 8, !tbaa !9
  %1886 = getelementptr inbounds %struct.doublecomplex, ptr %1884, i64 %1885
  %1887 = call i32 @zrot_(ptr noundef %46, ptr noundef %1873, ptr noundef @c__1, ptr noundef %1880, ptr noundef @c__1, ptr noundef %1883, ptr noundef %1886)
  br label %1888

1888:                                             ; preds = %1864
  %1889 = load i64, ptr %31, align 8, !tbaa !9
  %1890 = load i64, ptr %39, align 8, !tbaa !9
  %1891 = add nsw i64 %1890, %1889
  store i64 %1891, ptr %39, align 8, !tbaa !9
  br label %1813, !llvm.loop !33

1892:                                             ; preds = %1826
  br label %1940

1893:                                             ; preds = %1764
  %1894 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1894, ptr %31, align 8, !tbaa !9
  %1895 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %1895, ptr %32, align 8, !tbaa !9
  %1896 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1896, ptr %39, align 8, !tbaa !9
  br label %1897

1897:                                             ; preds = %1935, %1893
  %1898 = load i64, ptr %32, align 8, !tbaa !9
  %1899 = icmp slt i64 %1898, 0
  br i1 %1899, label %1900, label %1905

1900:                                             ; preds = %1897
  %1901 = load i64, ptr %39, align 8, !tbaa !9
  %1902 = load i64, ptr %31, align 8, !tbaa !9
  %1903 = icmp sge i64 %1901, %1902
  %1904 = zext i1 %1903 to i32
  br label %1910

1905:                                             ; preds = %1897
  %1906 = load i64, ptr %39, align 8, !tbaa !9
  %1907 = load i64, ptr %31, align 8, !tbaa !9
  %1908 = icmp sle i64 %1906, %1907
  %1909 = zext i1 %1908 to i32
  br label %1910

1910:                                             ; preds = %1905, %1900
  %1911 = phi i32 [ %1904, %1900 ], [ %1909, %1905 ]
  %1912 = icmp ne i32 %1911, 0
  br i1 %1912, label %1913, label %1939

1913:                                             ; preds = %1910
  %1914 = load ptr, ptr %16, align 8, !tbaa !5
  %1915 = load ptr, ptr %22, align 8, !tbaa !5
  %1916 = load i64, ptr %39, align 8, !tbaa !9
  %1917 = sub nsw i64 %1916, 1
  %1918 = load i64, ptr %28, align 8, !tbaa !9
  %1919 = mul nsw i64 %1917, %1918
  %1920 = add nsw i64 %1919, 1
  %1921 = getelementptr inbounds %struct.doublecomplex, ptr %1915, i64 %1920
  %1922 = load ptr, ptr %22, align 8, !tbaa !5
  %1923 = load i64, ptr %39, align 8, !tbaa !9
  %1924 = load i64, ptr %28, align 8, !tbaa !9
  %1925 = mul nsw i64 %1923, %1924
  %1926 = add nsw i64 %1925, 1
  %1927 = getelementptr inbounds %struct.doublecomplex, ptr %1922, i64 %1926
  %1928 = load ptr, ptr %20, align 8, !tbaa !5
  %1929 = load i64, ptr %39, align 8, !tbaa !9
  %1930 = getelementptr inbounds double, ptr %1928, i64 %1929
  %1931 = load ptr, ptr %24, align 8, !tbaa !5
  %1932 = load i64, ptr %39, align 8, !tbaa !9
  %1933 = getelementptr inbounds %struct.doublecomplex, ptr %1931, i64 %1932
  %1934 = call i32 @zrot_(ptr noundef %1914, ptr noundef %1921, ptr noundef @c__1, ptr noundef %1927, ptr noundef @c__1, ptr noundef %1930, ptr noundef %1933)
  br label %1935

1935:                                             ; preds = %1913
  %1936 = load i64, ptr %32, align 8, !tbaa !9
  %1937 = load i64, ptr %39, align 8, !tbaa !9
  %1938 = add nsw i64 %1937, %1936
  store i64 %1938, ptr %39, align 8, !tbaa !9
  br label %1897, !llvm.loop !34

1939:                                             ; preds = %1910
  br label %1940

1940:                                             ; preds = %1939, %1892
  br label %1941

1941:                                             ; preds = %1940, %1761
  %1942 = load i64, ptr %45, align 8, !tbaa !9
  %1943 = load i64, ptr %51, align 8, !tbaa !9
  %1944 = add nsw i64 %1942, %1943
  %1945 = load ptr, ptr %16, align 8, !tbaa !5
  %1946 = load i64, ptr %1945, align 8, !tbaa !9
  %1947 = icmp sgt i64 %1944, %1946
  br i1 %1947, label %1948, label %1955

1948:                                             ; preds = %1941
  %1949 = load i64, ptr %47, align 8, !tbaa !9
  %1950 = add nsw i64 %1949, -1
  store i64 %1950, ptr %47, align 8, !tbaa !9
  %1951 = load i64, ptr %45, align 8, !tbaa !9
  %1952 = load i64, ptr %51, align 8, !tbaa !9
  %1953 = sub nsw i64 %1951, %1952
  %1954 = sub nsw i64 %1953, 1
  store i64 %1954, ptr %45, align 8, !tbaa !9
  br label %1955

1955:                                             ; preds = %1948, %1941
  %1956 = load i64, ptr %45, align 8, !tbaa !9
  store i64 %1956, ptr %32, align 8, !tbaa !9
  %1957 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %1957, ptr %31, align 8, !tbaa !9
  %1958 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %1958, ptr %39, align 8, !tbaa !9
  br label %1959

1959:                                             ; preds = %2090, %1955
  %1960 = load i64, ptr %31, align 8, !tbaa !9
  %1961 = icmp slt i64 %1960, 0
  br i1 %1961, label %1962, label %1967

1962:                                             ; preds = %1959
  %1963 = load i64, ptr %39, align 8, !tbaa !9
  %1964 = load i64, ptr %32, align 8, !tbaa !9
  %1965 = icmp sge i64 %1963, %1964
  %1966 = zext i1 %1965 to i32
  br label %1972

1967:                                             ; preds = %1959
  %1968 = load i64, ptr %39, align 8, !tbaa !9
  %1969 = load i64, ptr %32, align 8, !tbaa !9
  %1970 = icmp sle i64 %1968, %1969
  %1971 = zext i1 %1970 to i32
  br label %1972

1972:                                             ; preds = %1967, %1962
  %1973 = phi i32 [ %1966, %1962 ], [ %1971, %1967 ]
  %1974 = icmp ne i32 %1973, 0
  br i1 %1974, label %1975, label %2094

1975:                                             ; preds = %1972
  %1976 = load i64, ptr %39, align 8, !tbaa !9
  %1977 = load ptr, ptr %17, align 8, !tbaa !5
  %1978 = load i64, ptr %1977, align 8, !tbaa !9
  %1979 = add nsw i64 %1976, %1978
  store i64 %1979, ptr %33, align 8, !tbaa !9
  %1980 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1980, ptr %34, align 8, !tbaa !9
  %1981 = load i64, ptr %48, align 8, !tbaa !9
  %1982 = load i64, ptr %39, align 8, !tbaa !9
  %1983 = load i64, ptr %26, align 8, !tbaa !9
  %1984 = mul nsw i64 %1982, %1983
  %1985 = add nsw i64 %1981, %1984
  store i64 %1985, ptr %35, align 8, !tbaa !9
  %1986 = load ptr, ptr %24, align 8, !tbaa !5
  %1987 = load i64, ptr %34, align 8, !tbaa !9
  %1988 = getelementptr inbounds %struct.doublecomplex, ptr %1986, i64 %1987
  %1989 = getelementptr inbounds %struct.doublecomplex, ptr %1988, i32 0, i32 0
  %1990 = load double, ptr %1989, align 8, !tbaa !11
  %1991 = load ptr, ptr %18, align 8, !tbaa !5
  %1992 = load i64, ptr %35, align 8, !tbaa !9
  %1993 = getelementptr inbounds %struct.doublecomplex, ptr %1991, i64 %1992
  %1994 = getelementptr inbounds %struct.doublecomplex, ptr %1993, i32 0, i32 0
  %1995 = load double, ptr %1994, align 8, !tbaa !11
  %1996 = load ptr, ptr %24, align 8, !tbaa !5
  %1997 = load i64, ptr %34, align 8, !tbaa !9
  %1998 = getelementptr inbounds %struct.doublecomplex, ptr %1996, i64 %1997
  %1999 = getelementptr inbounds %struct.doublecomplex, ptr %1998, i32 0, i32 1
  %2000 = load double, ptr %1999, align 8, !tbaa !15
  %2001 = load ptr, ptr %18, align 8, !tbaa !5
  %2002 = load i64, ptr %35, align 8, !tbaa !9
  %2003 = getelementptr inbounds %struct.doublecomplex, ptr %2001, i64 %2002
  %2004 = getelementptr inbounds %struct.doublecomplex, ptr %2003, i32 0, i32 1
  %2005 = load double, ptr %2004, align 8, !tbaa !15
  %2006 = fmul double %2000, %2005
  %2007 = fneg double %2006
  %2008 = call double @llvm.fmuladd.f64(double %1990, double %1995, double %2007)
  %2009 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %2008, ptr %2009, align 8, !tbaa !11
  %2010 = load ptr, ptr %24, align 8, !tbaa !5
  %2011 = load i64, ptr %34, align 8, !tbaa !9
  %2012 = getelementptr inbounds %struct.doublecomplex, ptr %2010, i64 %2011
  %2013 = getelementptr inbounds %struct.doublecomplex, ptr %2012, i32 0, i32 0
  %2014 = load double, ptr %2013, align 8, !tbaa !11
  %2015 = load ptr, ptr %18, align 8, !tbaa !5
  %2016 = load i64, ptr %35, align 8, !tbaa !9
  %2017 = getelementptr inbounds %struct.doublecomplex, ptr %2015, i64 %2016
  %2018 = getelementptr inbounds %struct.doublecomplex, ptr %2017, i32 0, i32 1
  %2019 = load double, ptr %2018, align 8, !tbaa !15
  %2020 = load ptr, ptr %24, align 8, !tbaa !5
  %2021 = load i64, ptr %34, align 8, !tbaa !9
  %2022 = getelementptr inbounds %struct.doublecomplex, ptr %2020, i64 %2021
  %2023 = getelementptr inbounds %struct.doublecomplex, ptr %2022, i32 0, i32 1
  %2024 = load double, ptr %2023, align 8, !tbaa !15
  %2025 = load ptr, ptr %18, align 8, !tbaa !5
  %2026 = load i64, ptr %35, align 8, !tbaa !9
  %2027 = getelementptr inbounds %struct.doublecomplex, ptr %2025, i64 %2026
  %2028 = getelementptr inbounds %struct.doublecomplex, ptr %2027, i32 0, i32 0
  %2029 = load double, ptr %2028, align 8, !tbaa !11
  %2030 = fmul double %2024, %2029
  %2031 = call double @llvm.fmuladd.f64(double %2014, double %2019, double %2030)
  %2032 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %2031, ptr %2032, align 8, !tbaa !15
  %2033 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2034 = load double, ptr %2033, align 8, !tbaa !11
  %2035 = load ptr, ptr %24, align 8, !tbaa !5
  %2036 = load i64, ptr %33, align 8, !tbaa !9
  %2037 = getelementptr inbounds %struct.doublecomplex, ptr %2035, i64 %2036
  %2038 = getelementptr inbounds %struct.doublecomplex, ptr %2037, i32 0, i32 0
  store double %2034, ptr %2038, align 8, !tbaa !11
  %2039 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2040 = load double, ptr %2039, align 8, !tbaa !15
  %2041 = load ptr, ptr %24, align 8, !tbaa !5
  %2042 = load i64, ptr %33, align 8, !tbaa !9
  %2043 = getelementptr inbounds %struct.doublecomplex, ptr %2041, i64 %2042
  %2044 = getelementptr inbounds %struct.doublecomplex, ptr %2043, i32 0, i32 1
  store double %2040, ptr %2044, align 8, !tbaa !15
  %2045 = load i64, ptr %48, align 8, !tbaa !9
  %2046 = load i64, ptr %39, align 8, !tbaa !9
  %2047 = load i64, ptr %26, align 8, !tbaa !9
  %2048 = mul nsw i64 %2046, %2047
  %2049 = add nsw i64 %2045, %2048
  store i64 %2049, ptr %33, align 8, !tbaa !9
  %2050 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %2050, ptr %34, align 8, !tbaa !9
  %2051 = load i64, ptr %48, align 8, !tbaa !9
  %2052 = load i64, ptr %39, align 8, !tbaa !9
  %2053 = load i64, ptr %26, align 8, !tbaa !9
  %2054 = mul nsw i64 %2052, %2053
  %2055 = add nsw i64 %2051, %2054
  store i64 %2055, ptr %35, align 8, !tbaa !9
  %2056 = load ptr, ptr %20, align 8, !tbaa !5
  %2057 = load i64, ptr %34, align 8, !tbaa !9
  %2058 = getelementptr inbounds double, ptr %2056, i64 %2057
  %2059 = load double, ptr %2058, align 8, !tbaa !14
  %2060 = load ptr, ptr %18, align 8, !tbaa !5
  %2061 = load i64, ptr %35, align 8, !tbaa !9
  %2062 = getelementptr inbounds %struct.doublecomplex, ptr %2060, i64 %2061
  %2063 = getelementptr inbounds %struct.doublecomplex, ptr %2062, i32 0, i32 0
  %2064 = load double, ptr %2063, align 8, !tbaa !11
  %2065 = fmul double %2059, %2064
  %2066 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %2065, ptr %2066, align 8, !tbaa !11
  %2067 = load ptr, ptr %20, align 8, !tbaa !5
  %2068 = load i64, ptr %34, align 8, !tbaa !9
  %2069 = getelementptr inbounds double, ptr %2067, i64 %2068
  %2070 = load double, ptr %2069, align 8, !tbaa !14
  %2071 = load ptr, ptr %18, align 8, !tbaa !5
  %2072 = load i64, ptr %35, align 8, !tbaa !9
  %2073 = getelementptr inbounds %struct.doublecomplex, ptr %2071, i64 %2072
  %2074 = getelementptr inbounds %struct.doublecomplex, ptr %2073, i32 0, i32 1
  %2075 = load double, ptr %2074, align 8, !tbaa !15
  %2076 = fmul double %2070, %2075
  %2077 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %2076, ptr %2077, align 8, !tbaa !15
  %2078 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2079 = load double, ptr %2078, align 8, !tbaa !11
  %2080 = load ptr, ptr %18, align 8, !tbaa !5
  %2081 = load i64, ptr %33, align 8, !tbaa !9
  %2082 = getelementptr inbounds %struct.doublecomplex, ptr %2080, i64 %2081
  %2083 = getelementptr inbounds %struct.doublecomplex, ptr %2082, i32 0, i32 0
  store double %2079, ptr %2083, align 8, !tbaa !11
  %2084 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2085 = load double, ptr %2084, align 8, !tbaa !15
  %2086 = load ptr, ptr %18, align 8, !tbaa !5
  %2087 = load i64, ptr %33, align 8, !tbaa !9
  %2088 = getelementptr inbounds %struct.doublecomplex, ptr %2086, i64 %2087
  %2089 = getelementptr inbounds %struct.doublecomplex, ptr %2088, i32 0, i32 1
  store double %2085, ptr %2089, align 8, !tbaa !15
  br label %2090

2090:                                             ; preds = %1975
  %2091 = load i64, ptr %31, align 8, !tbaa !9
  %2092 = load i64, ptr %39, align 8, !tbaa !9
  %2093 = add nsw i64 %2092, %2091
  store i64 %2093, ptr %39, align 8, !tbaa !9
  br label %1959, !llvm.loop !35

2094:                                             ; preds = %1972
  br label %2095

2095:                                             ; preds = %2094
  %2096 = load i64, ptr %40, align 8, !tbaa !9
  %2097 = add nsw i64 %2096, -1
  store i64 %2097, ptr %40, align 8, !tbaa !9
  br label %1317, !llvm.loop !36

2098:                                             ; preds = %1317
  br label %2099

2099:                                             ; preds = %2098
  %2100 = load i64, ptr %38, align 8, !tbaa !9
  %2101 = add nsw i64 %2100, 1
  store i64 %2101, ptr %38, align 8, !tbaa !9
  br label %1310, !llvm.loop !37

2102:                                             ; preds = %1310
  br label %2103

2103:                                             ; preds = %2102, %1282
  %2104 = load ptr, ptr %17, align 8, !tbaa !5
  %2105 = load i64, ptr %2104, align 8, !tbaa !9
  %2106 = icmp sgt i64 %2105, 0
  br i1 %2106, label %2107, label %2254

2107:                                             ; preds = %2103
  %2108 = load ptr, ptr %16, align 8, !tbaa !5
  %2109 = load i64, ptr %2108, align 8, !tbaa !9
  %2110 = sub nsw i64 %2109, 1
  store i64 %2110, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %2111

2111:                                             ; preds = %2250, %2107
  %2112 = load i64, ptr %38, align 8, !tbaa !9
  %2113 = load i64, ptr %30, align 8, !tbaa !9
  %2114 = icmp sle i64 %2112, %2113
  br i1 %2114, label %2115, label %2253

2115:                                             ; preds = %2111
  %2116 = load i64, ptr %38, align 8, !tbaa !9
  %2117 = load i64, ptr %26, align 8, !tbaa !9
  %2118 = mul nsw i64 %2116, %2117
  %2119 = add nsw i64 %2118, 2
  store i64 %2119, ptr %31, align 8, !tbaa !9
  %2120 = load ptr, ptr %18, align 8, !tbaa !5
  %2121 = load i64, ptr %31, align 8, !tbaa !9
  %2122 = getelementptr inbounds %struct.doublecomplex, ptr %2120, i64 %2121
  %2123 = getelementptr inbounds %struct.doublecomplex, ptr %2122, i32 0, i32 0
  %2124 = load double, ptr %2123, align 8, !tbaa !11
  %2125 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2124, ptr %2125, align 8, !tbaa !11
  %2126 = load ptr, ptr %18, align 8, !tbaa !5
  %2127 = load i64, ptr %31, align 8, !tbaa !9
  %2128 = getelementptr inbounds %struct.doublecomplex, ptr %2126, i64 %2127
  %2129 = getelementptr inbounds %struct.doublecomplex, ptr %2128, i32 0, i32 1
  %2130 = load double, ptr %2129, align 8, !tbaa !15
  %2131 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2130, ptr %2131, align 8, !tbaa !15
  %2132 = call double @z_abs(ptr noundef %42)
  store double %2132, ptr %59, align 8, !tbaa !14
  %2133 = load i64, ptr %38, align 8, !tbaa !9
  %2134 = load i64, ptr %26, align 8, !tbaa !9
  %2135 = mul nsw i64 %2133, %2134
  %2136 = add nsw i64 %2135, 2
  store i64 %2136, ptr %31, align 8, !tbaa !9
  %2137 = load double, ptr %59, align 8, !tbaa !14
  %2138 = load ptr, ptr %18, align 8, !tbaa !5
  %2139 = load i64, ptr %31, align 8, !tbaa !9
  %2140 = getelementptr inbounds %struct.doublecomplex, ptr %2138, i64 %2139
  %2141 = getelementptr inbounds %struct.doublecomplex, ptr %2140, i32 0, i32 0
  store double %2137, ptr %2141, align 8, !tbaa !11
  %2142 = load ptr, ptr %18, align 8, !tbaa !5
  %2143 = load i64, ptr %31, align 8, !tbaa !9
  %2144 = getelementptr inbounds %struct.doublecomplex, ptr %2142, i64 %2143
  %2145 = getelementptr inbounds %struct.doublecomplex, ptr %2144, i32 0, i32 1
  store double 0.000000e+00, ptr %2145, align 8, !tbaa !15
  %2146 = load double, ptr %59, align 8, !tbaa !14
  %2147 = load ptr, ptr %21, align 8, !tbaa !5
  %2148 = load i64, ptr %38, align 8, !tbaa !9
  %2149 = getelementptr inbounds double, ptr %2147, i64 %2148
  store double %2146, ptr %2149, align 8, !tbaa !14
  %2150 = load double, ptr %59, align 8, !tbaa !14
  %2151 = fcmp une double %2150, 0.000000e+00
  br i1 %2151, label %2152, label %2169

2152:                                             ; preds = %2115
  %2153 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2154 = load double, ptr %2153, align 8, !tbaa !11
  %2155 = load double, ptr %59, align 8, !tbaa !14
  %2156 = fdiv double %2154, %2155
  %2157 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %2156, ptr %2157, align 8, !tbaa !11
  %2158 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2159 = load double, ptr %2158, align 8, !tbaa !15
  %2160 = load double, ptr %59, align 8, !tbaa !14
  %2161 = fdiv double %2159, %2160
  %2162 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %2161, ptr %2162, align 8, !tbaa !15
  %2163 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2164 = load double, ptr %2163, align 8, !tbaa !11
  %2165 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2164, ptr %2165, align 8, !tbaa !11
  %2166 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2167 = load double, ptr %2166, align 8, !tbaa !15
  %2168 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2167, ptr %2168, align 8, !tbaa !15
  br label %2172

2169:                                             ; preds = %2115
  %2170 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double 1.000000e+00, ptr %2170, align 8, !tbaa !11
  %2171 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double 0.000000e+00, ptr %2171, align 8, !tbaa !15
  br label %2172

2172:                                             ; preds = %2169, %2152
  %2173 = load i64, ptr %38, align 8, !tbaa !9
  %2174 = load ptr, ptr %16, align 8, !tbaa !5
  %2175 = load i64, ptr %2174, align 8, !tbaa !9
  %2176 = sub nsw i64 %2175, 1
  %2177 = icmp slt i64 %2173, %2176
  br i1 %2177, label %2178, label %2236

2178:                                             ; preds = %2172
  %2179 = load i64, ptr %38, align 8, !tbaa !9
  %2180 = add nsw i64 %2179, 1
  %2181 = load i64, ptr %26, align 8, !tbaa !9
  %2182 = mul nsw i64 %2180, %2181
  %2183 = add nsw i64 %2182, 2
  store i64 %2183, ptr %31, align 8, !tbaa !9
  %2184 = load i64, ptr %38, align 8, !tbaa !9
  %2185 = add nsw i64 %2184, 1
  %2186 = load i64, ptr %26, align 8, !tbaa !9
  %2187 = mul nsw i64 %2185, %2186
  %2188 = add nsw i64 %2187, 2
  store i64 %2188, ptr %32, align 8, !tbaa !9
  %2189 = load ptr, ptr %18, align 8, !tbaa !5
  %2190 = load i64, ptr %32, align 8, !tbaa !9
  %2191 = getelementptr inbounds %struct.doublecomplex, ptr %2189, i64 %2190
  %2192 = getelementptr inbounds %struct.doublecomplex, ptr %2191, i32 0, i32 0
  %2193 = load double, ptr %2192, align 8, !tbaa !11
  %2194 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2195 = load double, ptr %2194, align 8, !tbaa !11
  %2196 = load ptr, ptr %18, align 8, !tbaa !5
  %2197 = load i64, ptr %32, align 8, !tbaa !9
  %2198 = getelementptr inbounds %struct.doublecomplex, ptr %2196, i64 %2197
  %2199 = getelementptr inbounds %struct.doublecomplex, ptr %2198, i32 0, i32 1
  %2200 = load double, ptr %2199, align 8, !tbaa !15
  %2201 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2202 = load double, ptr %2201, align 8, !tbaa !15
  %2203 = fmul double %2200, %2202
  %2204 = fneg double %2203
  %2205 = call double @llvm.fmuladd.f64(double %2193, double %2195, double %2204)
  %2206 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %2205, ptr %2206, align 8, !tbaa !11
  %2207 = load ptr, ptr %18, align 8, !tbaa !5
  %2208 = load i64, ptr %32, align 8, !tbaa !9
  %2209 = getelementptr inbounds %struct.doublecomplex, ptr %2207, i64 %2208
  %2210 = getelementptr inbounds %struct.doublecomplex, ptr %2209, i32 0, i32 0
  %2211 = load double, ptr %2210, align 8, !tbaa !11
  %2212 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2213 = load double, ptr %2212, align 8, !tbaa !15
  %2214 = load ptr, ptr %18, align 8, !tbaa !5
  %2215 = load i64, ptr %32, align 8, !tbaa !9
  %2216 = getelementptr inbounds %struct.doublecomplex, ptr %2214, i64 %2215
  %2217 = getelementptr inbounds %struct.doublecomplex, ptr %2216, i32 0, i32 1
  %2218 = load double, ptr %2217, align 8, !tbaa !15
  %2219 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2220 = load double, ptr %2219, align 8, !tbaa !11
  %2221 = fmul double %2218, %2220
  %2222 = call double @llvm.fmuladd.f64(double %2211, double %2213, double %2221)
  %2223 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double %2222, ptr %2223, align 8, !tbaa !15
  %2224 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2225 = load double, ptr %2224, align 8, !tbaa !11
  %2226 = load ptr, ptr %18, align 8, !tbaa !5
  %2227 = load i64, ptr %31, align 8, !tbaa !9
  %2228 = getelementptr inbounds %struct.doublecomplex, ptr %2226, i64 %2227
  %2229 = getelementptr inbounds %struct.doublecomplex, ptr %2228, i32 0, i32 0
  store double %2225, ptr %2229, align 8, !tbaa !11
  %2230 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2231 = load double, ptr %2230, align 8, !tbaa !15
  %2232 = load ptr, ptr %18, align 8, !tbaa !5
  %2233 = load i64, ptr %31, align 8, !tbaa !9
  %2234 = getelementptr inbounds %struct.doublecomplex, ptr %2232, i64 %2233
  %2235 = getelementptr inbounds %struct.doublecomplex, ptr %2234, i32 0, i32 1
  store double %2231, ptr %2235, align 8, !tbaa !15
  br label %2236

2236:                                             ; preds = %2178, %2172
  %2237 = load i64, ptr %67, align 8, !tbaa !9
  %2238 = icmp ne i64 %2237, 0
  br i1 %2238, label %2239, label %2249

2239:                                             ; preds = %2236
  %2240 = load ptr, ptr %16, align 8, !tbaa !5
  %2241 = load ptr, ptr %22, align 8, !tbaa !5
  %2242 = load i64, ptr %38, align 8, !tbaa !9
  %2243 = add nsw i64 %2242, 1
  %2244 = load i64, ptr %28, align 8, !tbaa !9
  %2245 = mul nsw i64 %2243, %2244
  %2246 = add nsw i64 %2245, 1
  %2247 = getelementptr inbounds %struct.doublecomplex, ptr %2241, i64 %2246
  %2248 = call i32 @f2c_zscal(ptr noundef %2240, ptr noundef %42, ptr noundef %2247, ptr noundef @c__1)
  br label %2249

2249:                                             ; preds = %2239, %2236
  br label %2250

2250:                                             ; preds = %2249
  %2251 = load i64, ptr %38, align 8, !tbaa !9
  %2252 = add nsw i64 %2251, 1
  store i64 %2252, ptr %38, align 8, !tbaa !9
  br label %2111, !llvm.loop !38

2253:                                             ; preds = %2111
  br label %2270

2254:                                             ; preds = %2103
  %2255 = load ptr, ptr %16, align 8, !tbaa !5
  %2256 = load i64, ptr %2255, align 8, !tbaa !9
  %2257 = sub nsw i64 %2256, 1
  store i64 %2257, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %2258

2258:                                             ; preds = %2266, %2254
  %2259 = load i64, ptr %38, align 8, !tbaa !9
  %2260 = load i64, ptr %30, align 8, !tbaa !9
  %2261 = icmp sle i64 %2259, %2260
  br i1 %2261, label %2262, label %2269

2262:                                             ; preds = %2258
  %2263 = load ptr, ptr %21, align 8, !tbaa !5
  %2264 = load i64, ptr %38, align 8, !tbaa !9
  %2265 = getelementptr inbounds double, ptr %2263, i64 %2264
  store double 0.000000e+00, ptr %2265, align 8, !tbaa !14
  br label %2266

2266:                                             ; preds = %2262
  %2267 = load i64, ptr %38, align 8, !tbaa !9
  %2268 = add nsw i64 %2267, 1
  store i64 %2268, ptr %38, align 8, !tbaa !9
  br label %2258, !llvm.loop !39

2269:                                             ; preds = %2258
  br label %2270

2270:                                             ; preds = %2269, %2253
  %2271 = load ptr, ptr %16, align 8, !tbaa !5
  %2272 = load i64, ptr %2271, align 8, !tbaa !9
  store i64 %2272, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %2273

2273:                                             ; preds = %2291, %2270
  %2274 = load i64, ptr %38, align 8, !tbaa !9
  %2275 = load i64, ptr %30, align 8, !tbaa !9
  %2276 = icmp sle i64 %2274, %2275
  br i1 %2276, label %2277, label %2294

2277:                                             ; preds = %2273
  %2278 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %2278, ptr %31, align 8, !tbaa !9
  %2279 = load i64, ptr %38, align 8, !tbaa !9
  %2280 = load i64, ptr %26, align 8, !tbaa !9
  %2281 = mul nsw i64 %2279, %2280
  %2282 = add nsw i64 %2281, 1
  store i64 %2282, ptr %32, align 8, !tbaa !9
  %2283 = load ptr, ptr %18, align 8, !tbaa !5
  %2284 = load i64, ptr %32, align 8, !tbaa !9
  %2285 = getelementptr inbounds %struct.doublecomplex, ptr %2283, i64 %2284
  %2286 = getelementptr inbounds %struct.doublecomplex, ptr %2285, i32 0, i32 0
  %2287 = load double, ptr %2286, align 8, !tbaa !11
  %2288 = load ptr, ptr %20, align 8, !tbaa !5
  %2289 = load i64, ptr %31, align 8, !tbaa !9
  %2290 = getelementptr inbounds double, ptr %2288, i64 %2289
  store double %2287, ptr %2290, align 8, !tbaa !14
  br label %2291

2291:                                             ; preds = %2277
  %2292 = load i64, ptr %38, align 8, !tbaa !9
  %2293 = add nsw i64 %2292, 1
  store i64 %2293, ptr %38, align 8, !tbaa !9
  br label %2273, !llvm.loop !40

2294:                                             ; preds = %2273
  br label %2295

2295:                                             ; preds = %2294, %1281
  store i32 0, ptr %13, align 4
  store i32 1, ptr %70, align 4
  br label %2296

2296:                                             ; preds = %2295, %189, %180
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  %2297 = load i32, ptr %13, align 4
  ret i32 %2297
}

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

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

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

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

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

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

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

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

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

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

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

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

declare double @z_abs(ptr noundef) #2

declare i32 @f2c_zscal(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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!13, !13, i64 0}
!15 = !{!12, !13, i64 8}
!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 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!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}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = distinct !{!38, !17}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !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
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@c_b1 = external hidden global %struct.doublecomplex, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c__1 = external hidden global i64, align 8

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

39:                                               ; preds = %12
  %40 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %41 = icmp ne i64 %40, 0
  br label %42

42:                                               ; preds = %39, %12
  %43 = phi i1 [ true, %12 ], [ %41, %39 ]
  %44 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %45 = load i64, ptr %3, align 8, !tbaa !5
  %46 = add nsw i64 %45, 1
  store i64 %46, ptr %21, align 8, !tbaa !5
  %47 = add nsw i64 %45, -1
  store i64 %47, ptr %23, align 8, !tbaa !5
  %48 = load i64, ptr %5, align 8, !tbaa !5
  %49 = add nsw i64 %48, -1
  store i64 %49, ptr %26, align 8, !tbaa !5
  store i64 0, ptr %11, align 8, !tbaa !5
  br i1 %43, label %52, label %50

50:                                               ; preds = %42
  %51 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not780 = icmp eq i64 %51, 0
  br i1 %.not780, label %.thread.sink.split, label %52

52:                                               ; preds = %50, %42
  %.not781 = icmp eq i64 %44, 0
  br i1 %.not781, label %53, label %55

53:                                               ; preds = %52
  %54 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5
  %.not782 = icmp eq i64 %54, 0
  br i1 %.not782, label %.thread.sink.split, label %55

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

58:                                               ; preds = %55
  %59 = load i64, ptr %3, align 8, !tbaa !5
  %60 = icmp slt i64 %59, 0
  br i1 %60, label %.thread.sink.split, label %61

61:                                               ; preds = %58
  %62 = load i64, ptr %5, align 8, !tbaa !5
  %.not1022 = icmp sgt i64 %62, %45
  br i1 %.not1022, label %63, label %.thread.sink.split

63:                                               ; preds = %61
  %64 = load i64, ptr %9, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %56, i64 1)
  %65 = icmp slt i64 %64, %spec.select
  %or.cond = select i1 %65, i1 %43, i1 false
  br i1 %or.cond, label %.thread.sink.split, label %66

66:                                               ; preds = %63
  %.pr = load i64, ptr %11, align 8, !tbaa !5
  %.not783 = icmp eq i64 %.pr, 0
  br i1 %.not783, label %70, label %.thread

.thread.sink.split:                               ; preds = %63, %61, %58, %55, %53, %50
  %.sink = phi i64 [ -1, %50 ], [ -2, %53 ], [ -3, %55 ], [ -4, %58 ], [ -6, %61 ], [ -10, %63 ]
  store i64 %.sink, ptr %11, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %66
  %67 = phi i64 [ %.pr, %66 ], [ %.sink, %.thread.sink.split ]
  %68 = sub nsw i64 0, %67
  store i64 %68, ptr %13, align 8, !tbaa !5
  %69 = call i32 @xerbla_(ptr noundef nonnull @.str.4, ptr noundef nonnull %13) #5
  br label %.loopexit

70:                                               ; preds = %66
  %71 = icmp eq i64 %56, 0
  br i1 %71, label %.loopexit, label %72

72:                                               ; preds = %70
  br i1 %.not, label %75, label %73

73:                                               ; preds = %72
  %74 = tail call i32 @zlaset_(ptr noundef nonnull @.str.5, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef nonnull @c_b1, ptr noundef nonnull @c_b2, ptr noundef %8, ptr noundef nonnull %9) #5
  %.pre = load i64, ptr %5, align 8, !tbaa !5
  %.pre1011 = load i64, ptr %2, align 8, !tbaa !5
  %.pre1012 = load i64, ptr %3, align 8, !tbaa !5
  br label %75

75:                                               ; preds = %73, %72
  %76 = phi i64 [ %.pre1012, %73 ], [ %59, %72 ]
  %77 = phi i64 [ %.pre1011, %73 ], [ %56, %72 ]
  %78 = phi i64 [ %.pre, %73 ], [ %62, %72 ]
  %79 = mul nsw i64 %78, %46
  store i64 %79, ptr %24, align 8, !tbaa !5
  %80 = add nsw i64 %77, -1
  %. = tail call i64 @llvm.smin.i64(i64 %80, i64 %76)
  %81 = icmp sgt i64 %76, 1
  br i1 %.not781, label %428, label %82

82:                                               ; preds = %75
  br i1 %81, label %83, label %.loopexit859

83:                                               ; preds = %82
  store i64 0, ptr %20, align 8, !tbaa !5
  %84 = add nsw i64 %46, %28
  store i64 %84, ptr %13, align 8, !tbaa !5
  store i64 %84, ptr %14, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.doublecomplex, ptr %4, i64 %45, i32 1
  store double 0.000000e+00, ptr %85, align 8, !tbaa !9
  %86 = add nsw i64 %77, -2
  %.not807905 = icmp slt i64 %77, 3
  br i1 %.not807905, label %.loopexit859.thread, label %.lr.ph901.us.preheader

.lr.ph901.us.preheader:                           ; preds = %83
  %87 = add nsw i64 %., 1
  %invariant.gep894 = getelementptr i8, ptr %31, i64 16
  %invariant.gep864 = getelementptr i8, ptr %31, i64 32
  %invariant.gep882 = getelementptr i8, ptr %36, i64 16
  %88 = add nsw i64 %., 2
  %invariant.gep1079 = getelementptr i8, ptr %31, i64 48
  %invariant.gep1077 = getelementptr i8, ptr %31, i64 16
  br label %.lr.ph901.us

.lr.ph901.us:                                     ; preds = %.lr.ph901.us.preheader, %._crit_edge902.us
  %.0762.neg910.us = phi i64 [ %.0762.neg.us, %._crit_edge902.us ], [ -1, %.lr.ph901.us.preheader ]
  %.0728909.us = phi i64 [ %.2730.us, %._crit_edge902.us ], [ 1, %.lr.ph901.us.preheader ]
  %.0736908.us = phi i64 [ %.2738.us, %._crit_edge902.us ], [ 1, %.lr.ph901.us.preheader ]
  %.0742907.us = phi i64 [ %.2744.us, %._crit_edge902.us ], [ %88, %.lr.ph901.us.preheader ]
  %.0762906.us = phi i64 [ %358, %._crit_edge902.us ], [ 1, %.lr.ph901.us.preheader ]
  %89 = add nsw i64 %.0762.neg910.us, 1
  br label %90

90:                                               ; preds = %.lr.ph901.us, %300
  %.1729899.us = phi i64 [ %.0728909.us, %.lr.ph901.us ], [ %.2730.us, %300 ]
  %.1737898.us = phi i64 [ %.0736908.us, %.lr.ph901.us ], [ %.2738.us, %300 ]
  %.1743897.us = phi i64 [ %.0742907.us, %.lr.ph901.us ], [ %.2744.us, %300 ]
  %.0754896.us = phi i64 [ %87, %.lr.ph901.us ], [ %301, %300 ]
  %91 = add nsw i64 %.1743897.us, %.
  %92 = add nsw i64 %.1737898.us, %.
  %93 = load i64, ptr %20, align 8, !tbaa !5
  %94 = icmp sgt i64 %93, 0
  br i1 %94, label %95, label %.loopexit857.us

95:                                               ; preds = %90
  %96 = add nsw i64 %91, -1
  %97 = mul nsw i64 %96, %28
  %gep895.us = getelementptr %struct.doublecomplex, ptr %invariant.gep894, i64 %97
  %98 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %91
  %99 = getelementptr inbounds double, ptr %32, i64 %91
  %100 = call i32 @zlargv_(ptr noundef nonnull %20, ptr noundef %gep895.us, ptr noundef nonnull %24, ptr noundef nonnull %98, ptr noundef nonnull %21, ptr noundef nonnull %99, ptr noundef nonnull %21) #5
  %101 = load i64, ptr %20, align 8, !tbaa !5
  %102 = load i64, ptr %3, align 8, !tbaa !5
  %103 = shl i64 %102, 1
  %104 = add nsw i64 %103, -1
  %.not813.us = icmp slt i64 %101, %104
  br i1 %.not813.us, label %111, label %105

105:                                              ; preds = %95
  %106 = add nsw i64 %102, -1
  store i64 %106, ptr %14, align 8, !tbaa !5
  %invariant.gep.us = getelementptr %struct.doublecomplex, ptr %31, i64 %97
  %.not815860.us = icmp slt i64 %102, 2
  br i1 %.not815860.us, label %.loopexit857.us, label %.lr.ph.us

107:                                              ; preds = %.lr.ph.us, %107
  %.0750861.us = phi i64 [ 1, %.lr.ph.us ], [ %108, %107 ]
  %108 = add nuw nsw i64 %.0750861.us, 1
  %gep.us = getelementptr %struct.doublecomplex, ptr %invariant.gep.us, i64 %108
  %gep863.us = getelementptr %struct.doublecomplex, ptr %invariant.gep862.us, i64 %.0750861.us
  %109 = call i32 @zlartv_(ptr noundef nonnull %20, ptr noundef %gep.us, ptr noundef nonnull %24, ptr noundef %gep863.us, ptr noundef nonnull %24, ptr noundef nonnull %99, ptr noundef nonnull %98, ptr noundef nonnull %21) #5
  %110 = load i64, ptr %14, align 8, !tbaa !5
  %.not815.us.not = icmp slt i64 %.0750861.us, %110
  br i1 %.not815.us.not, label %107, label %.loopexit857.us, !llvm.loop !12

111:                                              ; preds = %95
  %112 = add nsw i64 %101, -1
  %113 = load i64, ptr %21, align 8, !tbaa !5
  %114 = mul nsw i64 %113, %112
  %115 = add nsw i64 %114, %91
  store i64 %115, ptr %14, align 8, !tbaa !5
  store i64 %113, ptr %15, align 8, !tbaa !5
  %116 = icmp slt i64 %113, 0
  %117 = icmp slt i64 %114, 1
  %118 = icmp sgt i64 %114, -1
  %.in814868.us = select i1 %116, i1 %117, i1 %118
  br i1 %.in814868.us, label %.lr.ph870.us, label %.loopexit857.us

.loopexit857.us:                                  ; preds = %107, %.lr.ph870.us, %105, %111, %90
  %.not816.us = icmp eq i64 %.0754896.us, 2
  br i1 %.not816.us, label %thread-pre-split834.us, label %119

119:                                              ; preds = %.loopexit857.us
  %120 = load i64, ptr %2, align 8, !tbaa !5
  %121 = add i64 %89, %120
  %.not817.us = icmp sgt i64 %.0754896.us, %121
  br i1 %.not817.us, label %149, label %122

122:                                              ; preds = %119
  %123 = load i64, ptr %3, align 8, !tbaa !5
  %124 = sub nsw i64 %123, %.0754896.us
  %125 = add nuw nsw i64 %.0754896.us, %.0762906.us
  %126 = add nsw i64 %125, -2
  %127 = mul nsw i64 %126, %28
  %128 = getelementptr %struct.doublecomplex, ptr %31, i64 %124
  %129 = getelementptr i8, ptr %128, i64 48
  %130 = getelementptr %struct.doublecomplex, ptr %129, i64 %127
  %131 = add nsw i64 %125, -1
  %132 = mul nsw i64 %131, %28
  %133 = getelementptr i8, ptr %128, i64 32
  %134 = getelementptr %struct.doublecomplex, ptr %133, i64 %132
  %135 = getelementptr inbounds double, ptr %32, i64 %131
  %136 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %131
  %137 = call i32 @zlartg_(ptr noundef %130, ptr noundef %134, ptr noundef nonnull %135, ptr noundef nonnull %136, ptr noundef nonnull %27) #5
  %138 = load i64, ptr %3, align 8, !tbaa !5
  %139 = sub nsw i64 %138, %.0754896.us
  %gep1080 = getelementptr %struct.doublecomplex, ptr %invariant.gep1079, i64 %127
  %140 = getelementptr %struct.doublecomplex, ptr %gep1080, i64 %139
  %141 = load <2 x double>, ptr %27, align 16, !tbaa !14
  store <2 x double> %141, ptr %140, align 8, !tbaa !14
  %142 = add nsw i64 %.0754896.us, -3
  store i64 %142, ptr %15, align 8, !tbaa !5
  %143 = getelementptr %struct.doublecomplex, ptr %31, i64 %139
  %144 = getelementptr i8, ptr %143, i64 64
  %145 = getelementptr %struct.doublecomplex, ptr %144, i64 %127
  %146 = getelementptr i8, ptr %143, i64 48
  %147 = getelementptr %struct.doublecomplex, ptr %146, i64 %132
  %148 = call i32 @zrot_(ptr noundef nonnull %15, ptr noundef %145, ptr noundef nonnull @c__1, ptr noundef %147, ptr noundef nonnull @c__1, ptr noundef nonnull %135, ptr noundef nonnull %136) #5
  br label %149

149:                                              ; preds = %122, %119
  %150 = load i64, ptr %20, align 8, !tbaa !5
  %151 = add nsw i64 %150, 1
  store i64 %151, ptr %20, align 8, !tbaa !5
  %152 = add nsw i64 %.1743897.us, -1
  br label %153

thread-pre-split834.us:                           ; preds = %.loopexit857.us
  %.pr835.us = load i64, ptr %20, align 8, !tbaa !5
  br label %153

153:                                              ; preds = %thread-pre-split834.us, %149
  %154 = phi i64 [ %.pr835.us, %thread-pre-split834.us ], [ %151, %149 ]
  %.2744.us = phi i64 [ %91, %thread-pre-split834.us ], [ %152, %149 ]
  %155 = icmp sgt i64 %154, 0
  br i1 %155, label %156, label %.loopexit856.us

156:                                              ; preds = %153
  %157 = load i64, ptr %21, align 8, !tbaa !5
  %158 = add nsw i64 %.2744.us, -1
  %159 = mul nsw i64 %158, %28
  %160 = getelementptr %struct.doublecomplex, ptr %31, i64 %157
  %161 = getelementptr %struct.doublecomplex, ptr %160, i64 %159
  %162 = mul nsw i64 %.2744.us, %28
  %163 = getelementptr %struct.doublecomplex, ptr %160, i64 %162
  %164 = load i64, ptr %3, align 8, !tbaa !5
  %165 = getelementptr %struct.doublecomplex, ptr %31, i64 %164
  %166 = getelementptr %struct.doublecomplex, ptr %165, i64 %162
  %167 = getelementptr inbounds double, ptr %32, i64 %.2744.us
  %168 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.2744.us
  %169 = call i32 @zlar2v_(ptr noundef nonnull %20, ptr noundef %161, ptr noundef %163, ptr noundef %166, ptr noundef nonnull %24, ptr noundef nonnull %167, ptr noundef nonnull %168, ptr noundef nonnull %21) #5
  %.pre1013 = load i64, ptr %20, align 8, !tbaa !5
  %170 = icmp sgt i64 %.pre1013, 0
  br i1 %170, label %171, label %.loopexit856.us

171:                                              ; preds = %156
  %172 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.2744.us
  %173 = call i32 @zlacgv_(ptr noundef nonnull %20, ptr noundef nonnull %172, ptr noundef nonnull %21) #5
  %174 = load i64, ptr %3, align 8, !tbaa !5
  %175 = shl i64 %174, 1
  %176 = load i64, ptr %20, align 8, !tbaa !5
  %.not818.us = icmp sgt i64 %175, %176
  br i1 %.not818.us, label %200, label %177

177:                                              ; preds = %171
  %178 = add nsw i64 %174, -1
  store i64 %178, ptr %15, align 8, !tbaa !5
  %.not822871.us = icmp slt i64 %174, 2
  br i1 %.not822871.us, label %.loopexit856.us, label %.lr.ph873.us

179:                                              ; preds = %.lr.ph873.us, %197
  %180 = phi i64 [ %178, %.lr.ph873.us ], [ %198, %197 ]
  %.1751872.us = phi i64 [ 1, %.lr.ph873.us ], [ %199, %197 ]
  %181 = add nsw i64 %.1751872.us, %92
  %182 = load i64, ptr %2, align 8, !tbaa !5
  %183 = icmp sgt i64 %181, %182
  %184 = load i64, ptr %20, align 8
  %185 = sext i1 %183 to i64
  %storemerge830.us = add nsw i64 %184, %185
  store i64 %storemerge830.us, ptr %22, align 8, !tbaa !5
  %186 = icmp sgt i64 %storemerge830.us, 0
  br i1 %186, label %187, label %197

187:                                              ; preds = %179
  %188 = load i64, ptr %3, align 8, !tbaa !5
  %189 = sub nsw i64 %188, %.1751872.us
  %190 = add nsw i64 %.1751872.us, %.2744.us
  %191 = mul nsw i64 %190, %28
  %192 = getelementptr %struct.doublecomplex, ptr %31, i64 %189
  %193 = getelementptr %struct.doublecomplex, ptr %192, i64 %191
  %194 = getelementptr i8, ptr %192, i64 16
  %195 = getelementptr %struct.doublecomplex, ptr %194, i64 %191
  %196 = call i32 @zlartv_(ptr noundef nonnull %22, ptr noundef %193, ptr noundef nonnull %24, ptr noundef %195, ptr noundef nonnull %24, ptr noundef nonnull %356, ptr noundef nonnull %172, ptr noundef nonnull %21) #5
  %.pre1014 = load i64, ptr %15, align 8, !tbaa !5
  br label %197

197:                                              ; preds = %187, %179
  %198 = phi i64 [ %.pre1014, %187 ], [ %180, %179 ]
  %199 = add nuw nsw i64 %.1751872.us, 1
  %.not822.us.not = icmp slt i64 %.1751872.us, %198
  br i1 %.not822.us.not, label %179, label %.loopexit856.us, !llvm.loop !15

200:                                              ; preds = %171
  %201 = load i64, ptr %21, align 8, !tbaa !5
  %202 = add nsw i64 %176, -2
  %203 = mul nsw i64 %201, %202
  %204 = add nsw i64 %203, %.2744.us
  %.not819.us = icmp slt i64 %203, 0
  br i1 %.not819.us, label %.loopexit855.us, label %205

205:                                              ; preds = %200
  store i64 %204, ptr %15, align 8, !tbaa !5
  store i64 %201, ptr %14, align 8, !tbaa !5
  %206 = icmp sgt i64 %201, -1
  %207 = icmp eq i64 %203, 0
  %.in820874.us = or i1 %206, %207
  br i1 %.in820874.us, label %.lr.ph876.us, label %.loopexit855.us

.lr.ph876.us:                                     ; preds = %205, %.lr.ph876.us
  %.0735875.us = phi i64 [ %220, %.lr.ph876.us ], [ %.2744.us, %205 ]
  %208 = load i64, ptr %3, align 8, !tbaa !5
  %209 = add nsw i64 %208, -1
  store i64 %209, ptr %16, align 8, !tbaa !5
  %210 = add nsw i64 %.0735875.us, 1
  %211 = mul nsw i64 %210, %28
  %212 = getelementptr %struct.doublecomplex, ptr %31, i64 %208
  %213 = getelementptr i8, ptr %212, i64 -16
  %214 = getelementptr %struct.doublecomplex, ptr %213, i64 %211
  %215 = getelementptr %struct.doublecomplex, ptr %212, i64 %211
  %216 = getelementptr inbounds double, ptr %32, i64 %.0735875.us
  %217 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.0735875.us
  %218 = call i32 @zrot_(ptr noundef nonnull %16, ptr noundef %214, ptr noundef nonnull %26, ptr noundef %215, ptr noundef nonnull %26, ptr noundef nonnull %216, ptr noundef nonnull %217) #5
  %219 = load i64, ptr %14, align 8, !tbaa !5
  %220 = add nsw i64 %219, %.0735875.us
  %221 = icmp slt i64 %219, 0
  %222 = load i64, ptr %15, align 8
  %223 = icmp sge i64 %220, %222
  %224 = icmp sle i64 %220, %222
  %.in820.us = select i1 %221, i1 %223, i1 %224
  br i1 %.in820.us, label %.lr.ph876.us, label %.loopexit855.us, !llvm.loop !16

.loopexit855.us:                                  ; preds = %.lr.ph876.us, %205, %200
  %225 = load i64, ptr %23, align 8, !tbaa !5
  %226 = load i64, ptr %2, align 8, !tbaa !5
  %227 = sub nsw i64 %226, %92
  store i64 %227, ptr %15, align 8, !tbaa !5
  %228 = call i64 @llvm.smin.i64(i64 %225, i64 %227)
  store i64 %228, ptr %25, align 8, !tbaa !5
  %229 = icmp sgt i64 %228, 0
  br i1 %229, label %230, label %.loopexit856.us

230:                                              ; preds = %.loopexit855.us
  %231 = load i64, ptr %21, align 8, !tbaa !5
  %232 = add nsw i64 %231, %204
  %233 = load i64, ptr %3, align 8, !tbaa !5
  %234 = add nsw i64 %232, 1
  %235 = mul nsw i64 %234, %28
  %236 = getelementptr %struct.doublecomplex, ptr %31, i64 %233
  %237 = getelementptr i8, ptr %236, i64 -16
  %238 = getelementptr %struct.doublecomplex, ptr %237, i64 %235
  %239 = getelementptr %struct.doublecomplex, ptr %236, i64 %235
  %240 = getelementptr inbounds double, ptr %32, i64 %232
  %241 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %232
  %242 = call i32 @zrot_(ptr noundef nonnull %25, ptr noundef %238, ptr noundef nonnull %26, ptr noundef %239, ptr noundef nonnull %26, ptr noundef nonnull %240, ptr noundef nonnull %241) #5
  br label %.loopexit856.us

.loopexit856.us:                                  ; preds = %197, %153, %177, %230, %.loopexit855.us, %156
  br i1 %43, label %243, label %.loopexit853.us

243:                                              ; preds = %.loopexit856.us
  br i1 %.not, label %283, label %244

244:                                              ; preds = %243
  %245 = call i64 @llvm.smax.i64(i64 %.1729899.us, i64 %92)
  %246 = load i64, ptr %3, align 8, !tbaa !5
  store i64 %92, ptr %14, align 8, !tbaa !5
  %247 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %247, ptr %15, align 8, !tbaa !5
  %248 = icmp slt i64 %247, 0
  %249 = icmp sge i64 %.2744.us, %92
  %250 = icmp sle i64 %.2744.us, %92
  %.in826877.us = select i1 %248, i1 %249, i1 %250
  br i1 %.in826877.us, label %.lr.ph881.us.preheader, label %.loopexit853.us

.lr.ph881.us.preheader:                           ; preds = %244
  %251 = add nsw i64 %.0754896.us, -3
  %252 = mul nsw i64 %246, %.0762906.us
  %253 = add nsw i64 %252, 1
  %254 = select i1 %.not816.us, i64 %246, i64 0
  %spec.select831.us = add nsw i64 %253, %254
  %255 = call i64 @llvm.smin.i64(i64 %spec.select831.us, i64 %245)
  %256 = icmp slt i64 %.0754896.us, 4
  %257 = select i1 %256, i64 0, i64 %251
  br label %.lr.ph881.us

.lr.ph881.us:                                     ; preds = %.lr.ph881.us.preheader, %.lr.ph881.us
  %.1880.us = phi i64 [ %267, %.lr.ph881.us ], [ %255, %.lr.ph881.us.preheader ]
  %.0748879.us = phi i64 [ %260, %.lr.ph881.us ], [ %257, %.lr.ph881.us.preheader ]
  %.0756878.us = phi i64 [ %278, %.lr.ph881.us ], [ %.2744.us, %.lr.ph881.us.preheader ]
  %258 = load i64, ptr %23, align 8, !tbaa !5
  %259 = sdiv i64 %.0748879.us, %258
  %260 = add nsw i64 %.0748879.us, 1
  %.neg828.us = add i64 %.0756878.us, %.0762.neg910.us
  %261 = add i64 %.neg828.us, %259
  %262 = call i64 @llvm.smax.i64(i64 %261, i64 1)
  %263 = add nsw i64 %.1880.us, 1
  %264 = sub i64 %263, %262
  store i64 %264, ptr %19, align 8, !tbaa !5
  %265 = load i64, ptr %3, align 8, !tbaa !5
  %266 = add nsw i64 %265, %.1880.us
  store i64 %266, ptr %16, align 8, !tbaa !5
  %267 = call i64 @llvm.smin.i64(i64 %266, i64 %245)
  %268 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.0756878.us
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %268) #5
  %269 = add nsw i64 %.0756878.us, -1
  %270 = mul nsw i64 %269, %34
  %271 = getelementptr %struct.doublecomplex, ptr %36, i64 %262
  %272 = getelementptr %struct.doublecomplex, ptr %271, i64 %270
  %273 = mul nsw i64 %.0756878.us, %34
  %274 = getelementptr %struct.doublecomplex, ptr %271, i64 %273
  %275 = getelementptr inbounds double, ptr %32, i64 %.0756878.us
  %276 = call i32 @zrot_(ptr noundef nonnull %19, ptr noundef %272, ptr noundef nonnull @c__1, ptr noundef %274, ptr noundef nonnull @c__1, ptr noundef nonnull %275, ptr noundef nonnull %17) #5
  %277 = load i64, ptr %15, align 8, !tbaa !5
  %278 = add nsw i64 %277, %.0756878.us
  %279 = icmp slt i64 %277, 0
  %280 = load i64, ptr %14, align 8
  %281 = icmp sge i64 %278, %280
  %282 = icmp sle i64 %278, %280
  %.in826.us = select i1 %279, i1 %281, i1 %282
  br i1 %.in826.us, label %.lr.ph881.us, label %.loopexit853.us, !llvm.loop !17

283:                                              ; preds = %243
  store i64 %92, ptr %15, align 8, !tbaa !5
  %284 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %284, ptr %14, align 8, !tbaa !5
  %285 = icmp slt i64 %284, 0
  %286 = icmp sge i64 %.2744.us, %92
  %287 = icmp sle i64 %.2744.us, %92
  %.in823886.us = select i1 %285, i1 %286, i1 %287
  br i1 %.in823886.us, label %.lr.ph888.us, label %.loopexit853.us

.loopexit853.us:                                  ; preds = %.lr.ph881.us, %.lr.ph888.us, %244, %283, %.loopexit856.us
  %.2730.us = phi i64 [ %.1729899.us, %.loopexit856.us ], [ %.1729899.us, %283 ], [ %245, %244 ], [ %.1729899.us, %.lr.ph888.us ], [ %245, %.lr.ph881.us ]
  %288 = add nsw i64 %92, %.
  %289 = load i64, ptr %2, align 8, !tbaa !5
  %290 = icmp sgt i64 %288, %289
  br i1 %290, label %291, label %295

291:                                              ; preds = %.loopexit853.us
  %292 = load i64, ptr %20, align 8, !tbaa !5
  %293 = add nsw i64 %292, -1
  store i64 %293, ptr %20, align 8, !tbaa !5
  %294 = add nsw i64 %.1737898.us, -1
  br label %295

295:                                              ; preds = %291, %.loopexit853.us
  %.2738.us = phi i64 [ %294, %291 ], [ %92, %.loopexit853.us ]
  store i64 %.2738.us, ptr %14, align 8, !tbaa !5
  %296 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %296, ptr %15, align 8, !tbaa !5
  %297 = icmp slt i64 %296, 0
  %298 = icmp sge i64 %.2744.us, %.2738.us
  %299 = icmp sle i64 %.2744.us, %.2738.us
  %.in827889.us = select i1 %297, i1 %298, i1 %299
  br i1 %.in827889.us, label %.lr.ph891.us, label %300

300:                                              ; preds = %._crit_edge.us, %295
  %301 = add nsw i64 %.0754896.us, -1
  %302 = icmp sgt i64 %.0754896.us, 2
  br i1 %302, label %90, label %._crit_edge902.us, !llvm.loop !18

303:                                              ; preds = %.lr.ph891.us, %303
  %.2758890.us = phi i64 [ %.2744.us, %.lr.ph891.us ], [ %328, %303 ]
  %304 = add nsw i64 %357, %.2758890.us
  %305 = mul nsw i64 %304, %28
  %306 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.2758890.us
  %307 = load double, ptr %306, align 8, !tbaa !19
  %gep1078 = getelementptr %struct.doublecomplex, ptr %invariant.gep1077, i64 %305
  %308 = getelementptr inbounds i8, ptr %306, i64 8
  %309 = load double, ptr %308, align 8, !tbaa !9
  %310 = fneg double %309
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %304
  %312 = load <2 x double>, ptr %gep1078, align 8, !tbaa !14
  %313 = insertelement <2 x double> poison, double %309, i64 0
  %314 = insertelement <2 x double> %313, double %310, i64 1
  %315 = fmul <2 x double> %312, %314
  %316 = shufflevector <2 x double> %315, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %317 = insertelement <2 x double> poison, double %307, i64 0
  %318 = shufflevector <2 x double> %317, <2 x double> poison, <2 x i32> zeroinitializer
  %319 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %318, <2 x double> %312, <2 x double> %316)
  store <2 x double> %319, ptr %311, align 8, !tbaa !14
  %320 = add nsw i64 %305, 1
  %321 = getelementptr inbounds double, ptr %32, i64 %.2758890.us
  %322 = load double, ptr %321, align 8, !tbaa !14
  %323 = load <2 x double>, ptr %gep1078, align 8, !tbaa !14
  %324 = insertelement <2 x double> poison, double %322, i64 0
  %325 = shufflevector <2 x double> %324, <2 x double> poison, <2 x i32> zeroinitializer
  %326 = fmul <2 x double> %325, %323
  %327 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %320
  store <2 x double> %326, ptr %327, align 8, !tbaa !14
  %328 = add nsw i64 %.2758890.us, %296
  %329 = icmp sge i64 %328, %.2738.us
  %330 = icmp sle i64 %328, %.2738.us
  %.in827.us = select i1 %297, i1 %329, i1 %330
  br i1 %.in827.us, label %303, label %._crit_edge.us, !llvm.loop !20

.lr.ph888.us:                                     ; preds = %283, %.lr.ph888.us
  %.1757887.us = phi i64 [ %338, %.lr.ph888.us ], [ %.2744.us, %283 ]
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.1757887.us
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %331) #5
  %332 = add nsw i64 %.1757887.us, -1
  %333 = mul nsw i64 %332, %34
  %gep883.us = getelementptr %struct.doublecomplex, ptr %invariant.gep882, i64 %333
  %334 = mul nsw i64 %.1757887.us, %34
  %gep885.us = getelementptr %struct.doublecomplex, ptr %invariant.gep882, i64 %334
  %335 = getelementptr inbounds double, ptr %32, i64 %.1757887.us
  %336 = call i32 @zrot_(ptr noundef nonnull %2, ptr noundef %gep883.us, ptr noundef nonnull @c__1, ptr noundef %gep885.us, ptr noundef nonnull @c__1, ptr noundef nonnull %335, ptr noundef nonnull %17) #5
  %337 = load i64, ptr %14, align 8, !tbaa !5
  %338 = add nsw i64 %337, %.1757887.us
  %339 = icmp slt i64 %337, 0
  %340 = load i64, ptr %15, align 8
  %341 = icmp sge i64 %338, %340
  %342 = icmp sle i64 %338, %340
  %.in823.us = select i1 %339, i1 %341, i1 %342
  br i1 %.in823.us, label %.lr.ph888.us, label %.loopexit853.us, !llvm.loop !21

.lr.ph870.us:                                     ; preds = %111, %.lr.ph870.us
  %.0733869.us = phi i64 [ %350, %.lr.ph870.us ], [ %91, %111 ]
  %343 = add nsw i64 %.0733869.us, -1
  %344 = mul nsw i64 %343, %28
  %gep865.us = getelementptr %struct.doublecomplex, ptr %invariant.gep864, i64 %344
  %345 = mul nsw i64 %.0733869.us, %28
  %gep867.us = getelementptr %struct.doublecomplex, ptr %invariant.gep894, i64 %345
  %346 = getelementptr inbounds double, ptr %32, i64 %.0733869.us
  %347 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.0733869.us
  %348 = call i32 @zrot_(ptr noundef nonnull %23, ptr noundef %gep865.us, ptr noundef nonnull @c__1, ptr noundef %gep867.us, ptr noundef nonnull @c__1, ptr noundef nonnull %346, ptr noundef nonnull %347) #5
  %349 = load i64, ptr %15, align 8, !tbaa !5
  %350 = add nsw i64 %349, %.0733869.us
  %351 = icmp slt i64 %349, 0
  %352 = load i64, ptr %14, align 8
  %353 = icmp sge i64 %350, %352
  %354 = icmp sle i64 %350, %352
  %.in814.us = select i1 %351, i1 %353, i1 %354
  br i1 %.in814.us, label %.lr.ph870.us, label %.loopexit857.us, !llvm.loop !22

.lr.ph.us:                                        ; preds = %105
  %355 = mul nsw i64 %91, %28
  %invariant.gep862.us = getelementptr %struct.doublecomplex, ptr %31, i64 %355
  br label %107

.lr.ph873.us:                                     ; preds = %177
  %356 = getelementptr inbounds double, ptr %32, i64 %.2744.us
  br label %179

.lr.ph891.us:                                     ; preds = %295
  %357 = load i64, ptr %3, align 8, !tbaa !5
  br label %303

._crit_edge.us:                                   ; preds = %303
  store i64 %320, ptr %16, align 8, !tbaa !5
  store <2 x double> %326, ptr %17, align 16, !tbaa !14
  br label %300

._crit_edge902.us:                                ; preds = %300
  %358 = add nuw nsw i64 %.0762906.us, 1
  %.0762.neg.us = xor i64 %.0762906.us, -1
  %.not807.us.not = icmp slt i64 %.0762906.us, %86
  br i1 %.not807.us.not, label %.lr.ph901.us, label %.loopexit859.loopexit, !llvm.loop !23

.loopexit859.loopexit:                            ; preds = %._crit_edge902.us
  %.pre1015 = load i64, ptr %3, align 8, !tbaa !5
  br label %.loopexit859

.loopexit859:                                     ; preds = %.loopexit859.loopexit, %82
  %359 = phi i64 [ %289, %.loopexit859.loopexit ], [ %77, %82 ]
  %360 = phi i64 [ %.pre1015, %.loopexit859.loopexit ], [ %76, %82 ]
  %361 = icmp sgt i64 %360, 0
  br i1 %361, label %.loopexit859.thread, label %408

.loopexit859.thread:                              ; preds = %83, %.loopexit859
  %362 = phi i64 [ %359, %.loopexit859 ], [ %77, %83 ]
  %363 = add nsw i64 %362, -1
  %invariant.gep = getelementptr i8, ptr %36, i64 16
  %.not809915 = icmp slt i64 %362, 2
  br i1 %.not809915, label %.loopexit851, label %.lr.ph917

.lr.ph917:                                        ; preds = %.loopexit859.thread, %407
  %.1763916 = phi i64 [ %365, %407 ], [ 1, %.loopexit859.thread ]
  %364 = load i64, ptr %3, align 8, !tbaa !5
  %365 = add nuw nsw i64 %.1763916, 1
  %366 = mul nsw i64 %365, %28
  %367 = add nsw i64 %364, %366
  store i64 %367, ptr %15, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %367
  %369 = load <2 x double>, ptr %368, align 8, !tbaa !14
  store <2 x double> %369, ptr %18, align 16, !tbaa !14
  %370 = call double @z_abs(ptr noundef nonnull %18) #5
  %371 = load i64, ptr %3, align 8, !tbaa !5
  %372 = add nsw i64 %371, %366
  store i64 %372, ptr %15, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %372
  store double %370, ptr %373, align 8, !tbaa !19
  %374 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %372, i32 1
  store double 0.000000e+00, ptr %374, align 8, !tbaa !9
  %375 = getelementptr inbounds double, ptr %33, i64 %.1763916
  store double %370, ptr %375, align 8, !tbaa !14
  %376 = fcmp une double %370, 0.000000e+00
  br i1 %376, label %377, label %382

377:                                              ; preds = %.lr.ph917
  %378 = load <2 x double>, ptr %18, align 16, !tbaa !14
  %379 = insertelement <2 x double> poison, double %370, i64 0
  %380 = shufflevector <2 x double> %379, <2 x double> poison, <2 x i32> zeroinitializer
  %381 = fdiv <2 x double> %378, %380
  store <2 x double> %381, ptr %17, align 16, !tbaa !14
  br label %382

382:                                              ; preds = %.lr.ph917, %377
  %383 = phi <2 x double> [ %381, %377 ], [ <double 1.000000e+00, double 0.000000e+00>, %.lr.ph917 ]
  store <2 x double> %383, ptr %18, align 16, !tbaa !14
  %384 = load i64, ptr %2, align 8, !tbaa !5
  %385 = add nsw i64 %384, -1
  %386 = icmp slt i64 %.1763916, %385
  br i1 %386, label %387, label %403

387:                                              ; preds = %382
  %388 = add nuw nsw i64 %.1763916, 2
  %389 = mul nsw i64 %388, %28
  %390 = add nsw i64 %371, %389
  store i64 %390, ptr %15, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !19
  %393 = getelementptr inbounds i8, ptr %391, i64 8
  %394 = load double, ptr %393, align 8, !tbaa !9
  %395 = fneg double %394
  %396 = insertelement <2 x double> poison, double %394, i64 0
  %397 = insertelement <2 x double> %396, double %395, i64 1
  %398 = fmul <2 x double> %383, %397
  %399 = shufflevector <2 x double> %398, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %400 = insertelement <2 x double> poison, double %392, i64 0
  %401 = shufflevector <2 x double> %400, <2 x double> poison, <2 x i32> zeroinitializer
  %402 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %401, <2 x double> %383, <2 x double> %399)
  store <2 x double> %402, ptr %17, align 16, !tbaa !14
  store <2 x double> %402, ptr %391, align 8, !tbaa !14
  br label %403

403:                                              ; preds = %387, %382
  br i1 %43, label %404, label %407

404:                                              ; preds = %403
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef nonnull %18) #5
  %405 = mul nsw i64 %365, %34
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %405
  %406 = call i32 @f2c_zscal(ptr noundef nonnull %2, ptr noundef nonnull %17, ptr noundef %gep, ptr noundef nonnull @c__1) #5
  br label %407

407:                                              ; preds = %403, %404
  %.not809.not = icmp slt i64 %.1763916, %363
  br i1 %.not809.not, label %.lr.ph917, label %.loopexit851.loopexit, !llvm.loop !24

408:                                              ; preds = %.loopexit859
  %.not808.not913 = icmp sgt i64 %359, 1
  br i1 %.not808.not913, label %.loopexit851.thread, label %.loopexit851

.loopexit851.thread:                              ; preds = %408
  %409 = shl i64 %359, 3
  %410 = add i64 %409, -8
  call void @llvm.memset.p0.i64(ptr align 8 %7, i8 0, i64 %410, i1 false), !tbaa !14
  br label %.lr.ph920

.loopexit851.loopexit:                            ; preds = %407
  %.pre1016 = load i64, ptr %2, align 8, !tbaa !5
  br label %.loopexit851

.loopexit851:                                     ; preds = %.loopexit851.loopexit, %408, %.loopexit859.thread
  %411 = phi i64 [ %.pre1016, %.loopexit851.loopexit ], [ %359, %408 ], [ %362, %.loopexit859.thread ]
  %.not810918 = icmp slt i64 %411, 1
  br i1 %.not810918, label %.loopexit, label %.lr.ph920

.lr.ph920:                                        ; preds = %.loopexit851.thread, %.loopexit851
  %412 = phi i64 [ %359, %.loopexit851.thread ], [ %411, %.loopexit851 ]
  %413 = load i64, ptr %21, align 8, !tbaa !5
  %xtraiter = and i64 %412, 1
  %414 = icmp eq i64 %412, 1
  br i1 %414, label %.loopexit.loopexit1057.unr-lcssa, label %.lr.ph920.new

.lr.ph920.new:                                    ; preds = %.lr.ph920
  %unroll_iter = and i64 %412, 9223372036854775806
  %415 = getelementptr %struct.doublecomplex, ptr %31, i64 %413
  %416 = getelementptr %struct.doublecomplex, ptr %31, i64 %413
  br label %417

417:                                              ; preds = %417, %.lr.ph920.new
  %.3765919 = phi i64 [ 1, %.lr.ph920.new ], [ %427, %417 ]
  %niter = phi i64 [ 0, %.lr.ph920.new ], [ %niter.next.1, %417 ]
  %418 = mul nsw i64 %.3765919, %28
  %419 = getelementptr %struct.doublecomplex, ptr %415, i64 %418
  %420 = load double, ptr %419, align 8, !tbaa !19
  %421 = getelementptr inbounds double, ptr %32, i64 %.3765919
  store double %420, ptr %421, align 8, !tbaa !14
  %422 = add nuw i64 %.3765919, 1
  %423 = mul nsw i64 %422, %28
  %424 = getelementptr %struct.doublecomplex, ptr %416, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !19
  %426 = getelementptr double, ptr %6, i64 %.3765919
  store double %425, ptr %426, align 8, !tbaa !14
  %427 = add nuw i64 %.3765919, 2
  %niter.next.1 = add nuw i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit1057.unr-lcssa, label %417, !llvm.loop !25

428:                                              ; preds = %75
  br i1 %81, label %429, label %.loopexit849

429:                                              ; preds = %428
  store i64 0, ptr %20, align 8, !tbaa !5
  store i64 %29, ptr %13, align 8, !tbaa !5
  store i64 %29, ptr %15, align 8, !tbaa !5
  %430 = getelementptr inbounds i8, ptr %4, i64 8
  store double 0.000000e+00, ptr %430, align 8, !tbaa !9
  %431 = add nsw i64 %77, -2
  %.not786973 = icmp slt i64 %77, 3
  br i1 %.not786973, label %.loopexit849.thread, label %.lr.ph967.us.preheader

.lr.ph967.us.preheader:                           ; preds = %429
  %432 = add nsw i64 %., 1
  %invariant.gep955 = getelementptr i8, ptr %31, i64 16
  %invariant.gep957 = getelementptr i8, ptr %31, i64 48
  %invariant.gep959 = getelementptr i8, ptr %31, i64 32
  %invariant.gep942 = getelementptr i8, ptr %36, i64 16
  %433 = add nsw i64 %., 2
  br label %.lr.ph967.us

.lr.ph967.us:                                     ; preds = %.lr.ph967.us.preheader, %._crit_edge968.us
  %434 = phi i64 [ %628, %._crit_edge968.us ], [ %46, %.lr.ph967.us.preheader ]
  %.4766.neg978.us = phi i64 [ %.4766.neg.us, %._crit_edge968.us ], [ -1, %.lr.ph967.us.preheader ]
  %.3731977.us = phi i64 [ %.5.us, %._crit_edge968.us ], [ 1, %.lr.ph967.us.preheader ]
  %.3739976.us = phi i64 [ %.5741.us, %._crit_edge968.us ], [ 1, %.lr.ph967.us.preheader ]
  %.3745975.us = phi i64 [ %.5747.us, %._crit_edge968.us ], [ %433, %.lr.ph967.us.preheader ]
  %.4766974.us = phi i64 [ %438, %._crit_edge968.us ], [ 1, %.lr.ph967.us.preheader ]
  %435 = add nsw i64 %.4766.neg978.us, 1
  %436 = mul nsw i64 %.4766974.us, %28
  %437 = add nsw i64 %.4766974.us, -1
  %438 = add nuw nsw i64 %.4766974.us, 1
  %439 = mul nsw i64 %438, %28
  %invariant.gep971.us = getelementptr %struct.doublecomplex, ptr %31, i64 %439
  %invariant.gep1081 = getelementptr %struct.doublecomplex, ptr %31, i64 %436
  br label %440

440:                                              ; preds = %.lr.ph967.us, %632
  %441 = phi i64 [ %434, %.lr.ph967.us ], [ %628, %632 ]
  %.4965.us = phi i64 [ %.3731977.us, %.lr.ph967.us ], [ %.5.us, %632 ]
  %.4740964.us = phi i64 [ %.3739976.us, %.lr.ph967.us ], [ %.5741.us, %632 ]
  %.4746963.us = phi i64 [ %.3745975.us, %.lr.ph967.us ], [ %.5747.us, %632 ]
  %.1755961.us = phi i64 [ %432, %.lr.ph967.us ], [ %633, %632 ]
  %442 = add nsw i64 %.4746963.us, %.
  %443 = add nsw i64 %.4740964.us, %.
  %444 = load i64, ptr %20, align 8, !tbaa !5
  %445 = icmp sgt i64 %444, 0
  br i1 %445, label %446, label %.loopexit847.us

446:                                              ; preds = %440
  %447 = sub nsw i64 %442, %441
  %448 = mul nsw i64 %447, %28
  %449 = getelementptr %struct.doublecomplex, ptr %31, i64 %441
  %450 = getelementptr %struct.doublecomplex, ptr %449, i64 %448
  %451 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %442
  %452 = getelementptr inbounds double, ptr %32, i64 %442
  %453 = call i32 @zlargv_(ptr noundef nonnull %20, ptr noundef %450, ptr noundef nonnull %24, ptr noundef nonnull %451, ptr noundef nonnull %21, ptr noundef nonnull %452, ptr noundef nonnull %21) #5
  %454 = load i64, ptr %20, align 8, !tbaa !5
  %455 = load i64, ptr %3, align 8, !tbaa !5
  %456 = shl i64 %455, 1
  %.not791.us = icmp slt i64 %454, %456
  br i1 %.not791.us, label %471, label %457

457:                                              ; preds = %446
  %458 = add nsw i64 %455, -1
  store i64 %458, ptr %15, align 8, !tbaa !5
  %.not792921.us = icmp slt i64 %455, 2
  br i1 %.not792921.us, label %.loopexit847.us, label %.lr.ph923.us

.lr.ph923.us:                                     ; preds = %457, %.lr.ph923.us
  %.2752922.us = phi i64 [ %469, %.lr.ph923.us ], [ 1, %457 ]
  %459 = load i64, ptr %21, align 8, !tbaa !5
  %460 = sub nsw i64 %459, %.2752922.us
  %461 = add i64 %.2752922.us, %442
  %462 = sub i64 %461, %459
  %463 = mul nsw i64 %462, %28
  %464 = getelementptr %struct.doublecomplex, ptr %31, i64 %460
  %465 = getelementptr %struct.doublecomplex, ptr %464, i64 %463
  %466 = getelementptr i8, ptr %464, i64 16
  %467 = getelementptr %struct.doublecomplex, ptr %466, i64 %463
  %468 = call i32 @zlartv_(ptr noundef nonnull %20, ptr noundef %465, ptr noundef nonnull %24, ptr noundef %467, ptr noundef nonnull %24, ptr noundef nonnull %452, ptr noundef nonnull %451, ptr noundef nonnull %21) #5
  %469 = add nuw nsw i64 %.2752922.us, 1
  %470 = load i64, ptr %15, align 8, !tbaa !5
  %.not792.us.not = icmp slt i64 %.2752922.us, %470
  br i1 %.not792.us.not, label %.lr.ph923.us, label %.loopexit847.us, !llvm.loop !26

471:                                              ; preds = %446
  %472 = load i64, ptr %21, align 8, !tbaa !5
  %473 = add nsw i64 %454, -1
  %474 = mul nsw i64 %472, %473
  %475 = add nsw i64 %474, %442
  store i64 %475, ptr %15, align 8, !tbaa !5
  store i64 %472, ptr %14, align 8, !tbaa !5
  %476 = icmp slt i64 %472, 0
  %477 = icmp slt i64 %474, 1
  %478 = icmp sgt i64 %474, -1
  %.in924.us = select i1 %476, i1 %477, i1 %478
  br i1 %.in924.us, label %.lr.ph926.us, label %.loopexit847.us

.loopexit847.us:                                  ; preds = %.lr.ph923.us, %.lr.ph926.us, %457, %471, %440
  %.not793.us = icmp eq i64 %.1755961.us, 2
  br i1 %.not793.us, label %thread-pre-split836.us, label %479

479:                                              ; preds = %.loopexit847.us
  %480 = load i64, ptr %2, align 8, !tbaa !5
  %481 = add i64 %435, %480
  %.not794.us = icmp sgt i64 %.1755961.us, %481
  br i1 %.not794.us, label %497, label %482

482:                                              ; preds = %479
  %483 = add nsw i64 %.1755961.us, -1
  %gep1082 = getelementptr %struct.doublecomplex, ptr %invariant.gep1081, i64 %483
  %484 = getelementptr %struct.doublecomplex, ptr %31, i64 %.1755961.us
  %485 = getelementptr %struct.doublecomplex, ptr %484, i64 %436
  %486 = add i64 %437, %.1755961.us
  %487 = getelementptr inbounds double, ptr %32, i64 %486
  %488 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %486
  %489 = call i32 @zlartg_(ptr noundef %gep1082, ptr noundef %485, ptr noundef nonnull %487, ptr noundef nonnull %488, ptr noundef nonnull %27) #5
  %490 = load <2 x double>, ptr %27, align 16, !tbaa !14
  store <2 x double> %490, ptr %gep1082, align 8, !tbaa !14
  %491 = add nsw i64 %.1755961.us, -3
  store i64 %491, ptr %14, align 8, !tbaa !5
  %492 = load i64, ptr %5, align 8, !tbaa !5
  %493 = add nsw i64 %492, -1
  store i64 %493, ptr %15, align 8, !tbaa !5
  store i64 %493, ptr %16, align 8, !tbaa !5
  %494 = getelementptr i8, ptr %484, i64 -32
  %495 = getelementptr %struct.doublecomplex, ptr %494, i64 %439
  %gep972.us = getelementptr %struct.doublecomplex, ptr %invariant.gep971.us, i64 %483
  %496 = call i32 @zrot_(ptr noundef nonnull %14, ptr noundef %495, ptr noundef nonnull %15, ptr noundef %gep972.us, ptr noundef nonnull %16, ptr noundef nonnull %487, ptr noundef nonnull %488) #5
  br label %497

497:                                              ; preds = %482, %479
  %498 = load i64, ptr %20, align 8, !tbaa !5
  %499 = add nsw i64 %498, 1
  store i64 %499, ptr %20, align 8, !tbaa !5
  %500 = add nsw i64 %.4746963.us, -1
  br label %501

thread-pre-split836.us:                           ; preds = %.loopexit847.us
  %.pr837.us = load i64, ptr %20, align 8, !tbaa !5
  br label %501

501:                                              ; preds = %thread-pre-split836.us, %497
  %502 = phi i64 [ %.pr837.us, %thread-pre-split836.us ], [ %499, %497 ]
  %.5747.us = phi i64 [ %442, %thread-pre-split836.us ], [ %500, %497 ]
  %503 = icmp sgt i64 %502, 0
  br i1 %503, label %504, label %.loopexit846.us

504:                                              ; preds = %501
  %505 = add nsw i64 %.5747.us, -1
  %506 = mul nsw i64 %505, %28
  %507 = getelementptr %struct.doublecomplex, ptr %31, i64 %506
  %508 = getelementptr i8, ptr %507, i64 16
  %509 = mul nsw i64 %.5747.us, %28
  %gep956.us = getelementptr %struct.doublecomplex, ptr %invariant.gep955, i64 %509
  %510 = getelementptr i8, ptr %507, i64 32
  %511 = getelementptr inbounds double, ptr %32, i64 %.5747.us
  %512 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.5747.us
  %513 = call i32 @zlar2v_(ptr noundef nonnull %20, ptr noundef %508, ptr noundef %gep956.us, ptr noundef %510, ptr noundef nonnull %24, ptr noundef nonnull %511, ptr noundef nonnull %512, ptr noundef nonnull %21) #5
  %.pre1017 = load i64, ptr %20, align 8, !tbaa !5
  %514 = icmp sgt i64 %.pre1017, 0
  br i1 %514, label %515, label %.loopexit846.us

515:                                              ; preds = %504
  %516 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.5747.us
  %517 = call i32 @zlacgv_(ptr noundef nonnull %20, ptr noundef nonnull %516, ptr noundef nonnull %21) #5
  %518 = load i64, ptr %20, align 8, !tbaa !5
  %519 = load i64, ptr %3, align 8, !tbaa !5
  %520 = shl i64 %519, 1
  %.not795.us = icmp slt i64 %518, %520
  br i1 %.not795.us, label %541, label %521

521:                                              ; preds = %515
  %522 = add nsw i64 %519, -1
  store i64 %522, ptr %14, align 8, !tbaa !5
  %.not799927.us = icmp slt i64 %519, 2
  br i1 %.not799927.us, label %.loopexit846.us, label %.lr.ph929.us

523:                                              ; preds = %.lr.ph929.us, %538
  %524 = phi i64 [ %522, %.lr.ph929.us ], [ %539, %538 ]
  %.3753928.us = phi i64 [ 1, %.lr.ph929.us ], [ %540, %538 ]
  %525 = add nsw i64 %.3753928.us, %443
  %526 = load i64, ptr %2, align 8, !tbaa !5
  %527 = icmp sgt i64 %525, %526
  %528 = load i64, ptr %20, align 8
  %529 = sext i1 %527 to i64
  %storemerge806.us = add nsw i64 %528, %529
  store i64 %storemerge806.us, ptr %22, align 8, !tbaa !5
  %530 = icmp sgt i64 %storemerge806.us, 0
  br i1 %530, label %531, label %538

531:                                              ; preds = %523
  %532 = getelementptr %struct.doublecomplex, ptr %31, i64 %.3753928.us
  %533 = getelementptr i8, ptr %532, i64 32
  %534 = getelementptr %struct.doublecomplex, ptr %533, i64 %693
  %535 = getelementptr i8, ptr %532, i64 16
  %536 = getelementptr %struct.doublecomplex, ptr %535, i64 %694
  %537 = call i32 @zlartv_(ptr noundef nonnull %22, ptr noundef %534, ptr noundef nonnull %24, ptr noundef %536, ptr noundef nonnull %24, ptr noundef nonnull %695, ptr noundef nonnull %516, ptr noundef nonnull %21) #5
  %.pre1018 = load i64, ptr %14, align 8, !tbaa !5
  br label %538

538:                                              ; preds = %531, %523
  %539 = phi i64 [ %.pre1018, %531 ], [ %524, %523 ]
  %540 = add nuw nsw i64 %.3753928.us, 1
  %.not799.us.not = icmp slt i64 %.3753928.us, %539
  br i1 %.not799.us.not, label %523, label %.loopexit846.us, !llvm.loop !27

541:                                              ; preds = %515
  %542 = load i64, ptr %21, align 8, !tbaa !5
  %543 = add nsw i64 %518, -2
  %544 = mul nsw i64 %542, %543
  %545 = add nsw i64 %544, %.5747.us
  %.not796.us = icmp slt i64 %544, 0
  br i1 %.not796.us, label %.loopexit845.us, label %546

546:                                              ; preds = %541
  store i64 %545, ptr %14, align 8, !tbaa !5
  store i64 %542, ptr %15, align 8, !tbaa !5
  %547 = icmp sgt i64 %542, -1
  %548 = icmp eq i64 %544, 0
  %.in797934.us = or i1 %547, %548
  br i1 %.in797934.us, label %.lr.ph936.us, label %.loopexit845.us

.lr.ph936.us:                                     ; preds = %546, %.lr.ph936.us
  %.0732935.us = phi i64 [ %556, %.lr.ph936.us ], [ %.5747.us, %546 ]
  %549 = add nsw i64 %.0732935.us, -1
  %550 = mul nsw i64 %549, %28
  %gep931.us = getelementptr %struct.doublecomplex, ptr %invariant.gep957, i64 %550
  %551 = mul nsw i64 %.0732935.us, %28
  %gep933.us = getelementptr %struct.doublecomplex, ptr %invariant.gep959, i64 %551
  %552 = getelementptr inbounds double, ptr %32, i64 %.0732935.us
  %553 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.0732935.us
  %554 = call i32 @zrot_(ptr noundef nonnull %23, ptr noundef %gep931.us, ptr noundef nonnull @c__1, ptr noundef %gep933.us, ptr noundef nonnull @c__1, ptr noundef nonnull %552, ptr noundef nonnull %553) #5
  %555 = load i64, ptr %15, align 8, !tbaa !5
  %556 = add nsw i64 %555, %.0732935.us
  %557 = icmp slt i64 %555, 0
  %558 = load i64, ptr %14, align 8
  %559 = icmp sge i64 %556, %558
  %560 = icmp sle i64 %556, %558
  %.in797.us = select i1 %557, i1 %559, i1 %560
  br i1 %.in797.us, label %.lr.ph936.us, label %.loopexit845.us, !llvm.loop !28

.loopexit845.us:                                  ; preds = %.lr.ph936.us, %546, %541
  %561 = load i64, ptr %23, align 8, !tbaa !5
  store i64 %561, ptr %15, align 8, !tbaa !5
  %562 = load i64, ptr %2, align 8, !tbaa !5
  %563 = sub nsw i64 %562, %443
  store i64 %563, ptr %14, align 8, !tbaa !5
  %564 = call i64 @llvm.smin.i64(i64 %561, i64 %563)
  store i64 %564, ptr %25, align 8, !tbaa !5
  %565 = icmp sgt i64 %564, 0
  br i1 %565, label %566, label %.loopexit846.us

566:                                              ; preds = %.loopexit845.us
  %567 = load i64, ptr %21, align 8, !tbaa !5
  %568 = add nsw i64 %567, %545
  %569 = add nsw i64 %568, -1
  %570 = mul nsw i64 %569, %28
  %gep958.us = getelementptr %struct.doublecomplex, ptr %invariant.gep957, i64 %570
  %571 = mul nsw i64 %568, %28
  %gep960.us = getelementptr %struct.doublecomplex, ptr %invariant.gep959, i64 %571
  %572 = getelementptr inbounds double, ptr %32, i64 %568
  %573 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %568
  %574 = call i32 @zrot_(ptr noundef nonnull %25, ptr noundef %gep958.us, ptr noundef nonnull @c__1, ptr noundef %gep960.us, ptr noundef nonnull @c__1, ptr noundef nonnull %572, ptr noundef nonnull %573) #5
  br label %.loopexit846.us

.loopexit846.us:                                  ; preds = %538, %501, %521, %566, %.loopexit845.us, %504
  br i1 %43, label %575, label %.loopexit843.us

575:                                              ; preds = %.loopexit846.us
  br i1 %.not, label %615, label %576

576:                                              ; preds = %575
  %577 = call i64 @llvm.smax.i64(i64 %.4965.us, i64 %443)
  %578 = load i64, ptr %3, align 8, !tbaa !5
  store i64 %443, ptr %15, align 8, !tbaa !5
  %579 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %579, ptr %14, align 8, !tbaa !5
  %580 = icmp slt i64 %579, 0
  %581 = icmp sge i64 %.5747.us, %443
  %582 = icmp sle i64 %.5747.us, %443
  %.in803937.us = select i1 %580, i1 %581, i1 %582
  br i1 %.in803937.us, label %.lr.ph941.us.preheader, label %.loopexit843.us

.lr.ph941.us.preheader:                           ; preds = %576
  %583 = add nsw i64 %.1755961.us, -3
  %584 = mul nsw i64 %578, %.4766974.us
  %585 = add nsw i64 %584, 1
  %586 = select i1 %.not793.us, i64 %578, i64 0
  %spec.select832.us = add nsw i64 %585, %586
  %587 = call i64 @llvm.smin.i64(i64 %spec.select832.us, i64 %577)
  %588 = icmp slt i64 %.1755961.us, 4
  %589 = select i1 %588, i64 0, i64 %583
  br label %.lr.ph941.us

.lr.ph941.us:                                     ; preds = %.lr.ph941.us.preheader, %.lr.ph941.us
  %.3940.us = phi i64 [ %599, %.lr.ph941.us ], [ %587, %.lr.ph941.us.preheader ]
  %.1749939.us = phi i64 [ %592, %.lr.ph941.us ], [ %589, %.lr.ph941.us.preheader ]
  %.3759938.us = phi i64 [ %610, %.lr.ph941.us ], [ %.5747.us, %.lr.ph941.us.preheader ]
  %590 = load i64, ptr %23, align 8, !tbaa !5
  %591 = sdiv i64 %.1749939.us, %590
  %592 = add nsw i64 %.1749939.us, 1
  %.neg.us = add i64 %.3759938.us, %.4766.neg978.us
  %593 = add i64 %.neg.us, %591
  %594 = call i64 @llvm.smax.i64(i64 %593, i64 1)
  %595 = add nsw i64 %.3940.us, 1
  %596 = sub i64 %595, %594
  store i64 %596, ptr %19, align 8, !tbaa !5
  %597 = load i64, ptr %3, align 8, !tbaa !5
  %598 = add nsw i64 %597, %.3940.us
  store i64 %598, ptr %16, align 8, !tbaa !5
  %599 = call i64 @llvm.smin.i64(i64 %598, i64 %577)
  %600 = add nsw i64 %.3759938.us, -1
  %601 = mul nsw i64 %600, %34
  %602 = getelementptr %struct.doublecomplex, ptr %36, i64 %594
  %603 = getelementptr %struct.doublecomplex, ptr %602, i64 %601
  %604 = mul nsw i64 %.3759938.us, %34
  %605 = getelementptr %struct.doublecomplex, ptr %602, i64 %604
  %606 = getelementptr inbounds double, ptr %32, i64 %.3759938.us
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.3759938.us
  %608 = call i32 @zrot_(ptr noundef nonnull %19, ptr noundef %603, ptr noundef nonnull @c__1, ptr noundef %605, ptr noundef nonnull @c__1, ptr noundef nonnull %606, ptr noundef nonnull %607) #5
  %609 = load i64, ptr %14, align 8, !tbaa !5
  %610 = add nsw i64 %609, %.3759938.us
  %611 = icmp slt i64 %609, 0
  %612 = load i64, ptr %15, align 8
  %613 = icmp sge i64 %610, %612
  %614 = icmp sle i64 %610, %612
  %.in803.us = select i1 %611, i1 %613, i1 %614
  br i1 %.in803.us, label %.lr.ph941.us, label %.loopexit843.us, !llvm.loop !29

615:                                              ; preds = %575
  store i64 %443, ptr %14, align 8, !tbaa !5
  %616 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %616, ptr %15, align 8, !tbaa !5
  %617 = icmp slt i64 %616, 0
  %618 = icmp sge i64 %.5747.us, %443
  %619 = icmp sle i64 %.5747.us, %443
  %.in800946.us = select i1 %617, i1 %618, i1 %619
  br i1 %.in800946.us, label %.lr.ph948.us, label %.loopexit843.us

.loopexit843.us:                                  ; preds = %.lr.ph941.us, %.lr.ph948.us, %576, %615, %.loopexit846.us
  %.5.us = phi i64 [ %.4965.us, %.loopexit846.us ], [ %.4965.us, %615 ], [ %577, %576 ], [ %.4965.us, %.lr.ph948.us ], [ %577, %.lr.ph941.us ]
  %620 = add nsw i64 %443, %.
  %621 = load i64, ptr %2, align 8, !tbaa !5
  %622 = icmp sgt i64 %620, %621
  br i1 %622, label %623, label %627

623:                                              ; preds = %.loopexit843.us
  %624 = load i64, ptr %20, align 8, !tbaa !5
  %625 = add nsw i64 %624, -1
  store i64 %625, ptr %20, align 8, !tbaa !5
  %626 = add nsw i64 %.4740964.us, -1
  br label %627

627:                                              ; preds = %623, %.loopexit843.us
  %.5741.us = phi i64 [ %626, %623 ], [ %443, %.loopexit843.us ]
  store i64 %.5741.us, ptr %15, align 8, !tbaa !5
  %628 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %628, ptr %14, align 8, !tbaa !5
  %629 = icmp slt i64 %628, 0
  %630 = icmp sge i64 %.5747.us, %.5741.us
  %631 = icmp sle i64 %.5747.us, %.5741.us
  %.in804949.us = select i1 %629, i1 %630, i1 %631
  br i1 %.in804949.us, label %.lr.ph951.us, label %632

632:                                              ; preds = %._crit_edge.us981, %627
  %633 = add nsw i64 %.1755961.us, -1
  %634 = icmp sgt i64 %.1755961.us, 2
  br i1 %634, label %440, label %._crit_edge968.us, !llvm.loop !30

635:                                              ; preds = %.lr.ph951.us, %635
  %.5761950.us = phi i64 [ %.5747.us, %.lr.ph951.us ], [ %660, %635 ]
  %636 = mul nsw i64 %.5761950.us, %28
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.5761950.us
  %638 = load double, ptr %637, align 8, !tbaa !19
  %639 = getelementptr %struct.doublecomplex, ptr %697, i64 %636
  %640 = getelementptr inbounds i8, ptr %637, i64 8
  %641 = load double, ptr %640, align 8, !tbaa !9
  %642 = fneg double %641
  %643 = getelementptr %struct.doublecomplex, ptr %698, i64 %.5761950.us
  %644 = load <2 x double>, ptr %639, align 8, !tbaa !14
  %645 = insertelement <2 x double> poison, double %641, i64 0
  %646 = insertelement <2 x double> %645, double %642, i64 1
  %647 = fmul <2 x double> %644, %646
  %648 = shufflevector <2 x double> %647, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %649 = insertelement <2 x double> poison, double %638, i64 0
  %650 = shufflevector <2 x double> %649, <2 x double> poison, <2 x i32> zeroinitializer
  %651 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %650, <2 x double> %644, <2 x double> %648)
  store <2 x double> %651, ptr %643, align 8, !tbaa !14
  %652 = add nsw i64 %636, %628
  %653 = getelementptr inbounds double, ptr %32, i64 %.5761950.us
  %654 = load double, ptr %653, align 8, !tbaa !14
  %655 = load <2 x double>, ptr %639, align 8, !tbaa !14
  %656 = insertelement <2 x double> poison, double %654, i64 0
  %657 = shufflevector <2 x double> %656, <2 x double> poison, <2 x i32> zeroinitializer
  %658 = fmul <2 x double> %657, %655
  %659 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %652
  store <2 x double> %658, ptr %659, align 8, !tbaa !14
  %660 = add nsw i64 %.5761950.us, %628
  %661 = icmp sge i64 %660, %.5741.us
  %662 = icmp sle i64 %660, %.5741.us
  %.in804.us = select i1 %629, i1 %661, i1 %662
  br i1 %.in804.us, label %635, label %._crit_edge.us981, !llvm.loop !31

.lr.ph948.us:                                     ; preds = %615, %.lr.ph948.us
  %.4760947.us = phi i64 [ %670, %.lr.ph948.us ], [ %.5747.us, %615 ]
  %663 = add nsw i64 %.4760947.us, -1
  %664 = mul nsw i64 %663, %34
  %gep943.us = getelementptr %struct.doublecomplex, ptr %invariant.gep942, i64 %664
  %665 = mul nsw i64 %.4760947.us, %34
  %gep945.us = getelementptr %struct.doublecomplex, ptr %invariant.gep942, i64 %665
  %666 = getelementptr inbounds double, ptr %32, i64 %.4760947.us
  %667 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.4760947.us
  %668 = call i32 @zrot_(ptr noundef nonnull %2, ptr noundef %gep943.us, ptr noundef nonnull @c__1, ptr noundef %gep945.us, ptr noundef nonnull @c__1, ptr noundef nonnull %666, ptr noundef nonnull %667) #5
  %669 = load i64, ptr %15, align 8, !tbaa !5
  %670 = add nsw i64 %669, %.4760947.us
  %671 = icmp slt i64 %669, 0
  %672 = load i64, ptr %14, align 8
  %673 = icmp sge i64 %670, %672
  %674 = icmp sle i64 %670, %672
  %.in800.us = select i1 %671, i1 %673, i1 %674
  br i1 %.in800.us, label %.lr.ph948.us, label %.loopexit843.us, !llvm.loop !32

.lr.ph926.us:                                     ; preds = %471, %.lr.ph926.us
  %.1734925.us = phi i64 [ %687, %.lr.ph926.us ], [ %442, %471 ]
  %675 = load i64, ptr %3, align 8, !tbaa !5
  %676 = sub nsw i64 %.1734925.us, %675
  %677 = mul nsw i64 %676, %28
  %678 = getelementptr %struct.doublecomplex, ptr %31, i64 %675
  %679 = getelementptr %struct.doublecomplex, ptr %678, i64 %677
  %680 = load i64, ptr %21, align 8, !tbaa !5
  %681 = getelementptr %struct.doublecomplex, ptr %31, i64 %680
  %682 = getelementptr %struct.doublecomplex, ptr %681, i64 %677
  %683 = getelementptr inbounds double, ptr %32, i64 %.1734925.us
  %684 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %.1734925.us
  %685 = call i32 @zrot_(ptr noundef nonnull %23, ptr noundef %679, ptr noundef nonnull %26, ptr noundef %682, ptr noundef nonnull %26, ptr noundef nonnull %683, ptr noundef nonnull %684) #5
  %686 = load i64, ptr %14, align 8, !tbaa !5
  %687 = add nsw i64 %686, %.1734925.us
  %688 = icmp slt i64 %686, 0
  %689 = load i64, ptr %15, align 8
  %690 = icmp sge i64 %687, %689
  %691 = icmp sle i64 %687, %689
  %.in.us = select i1 %688, i1 %690, i1 %691
  br i1 %.in.us, label %.lr.ph926.us, label %.loopexit847.us, !llvm.loop !33

.lr.ph929.us:                                     ; preds = %521
  %692 = add nsw i64 %.5747.us, -1
  %693 = mul nsw i64 %692, %28
  %694 = mul nsw i64 %.5747.us, %28
  %695 = getelementptr inbounds double, ptr %32, i64 %.5747.us
  br label %523

.lr.ph951.us:                                     ; preds = %627
  %696 = load i64, ptr %3, align 8, !tbaa !5
  %697 = getelementptr %struct.doublecomplex, ptr %31, i64 %628
  %698 = getelementptr %struct.doublecomplex, ptr %37, i64 %696
  br label %635

._crit_edge.us981:                                ; preds = %635
  store i64 %652, ptr %16, align 8, !tbaa !5
  store <2 x double> %658, ptr %17, align 16, !tbaa !14
  br label %632

._crit_edge968.us:                                ; preds = %632
  %.4766.neg.us = xor i64 %.4766974.us, -1
  %.not786.us.not = icmp slt i64 %.4766974.us, %431
  br i1 %.not786.us.not, label %.lr.ph967.us, label %.loopexit849.loopexit, !llvm.loop !34

.loopexit849.loopexit:                            ; preds = %._crit_edge968.us
  %.pre1019 = load i64, ptr %3, align 8, !tbaa !5
  br label %.loopexit849

.loopexit849:                                     ; preds = %.loopexit849.loopexit, %428
  %699 = phi i64 [ %621, %.loopexit849.loopexit ], [ %77, %428 ]
  %700 = phi i64 [ %.pre1019, %.loopexit849.loopexit ], [ %76, %428 ]
  %701 = icmp sgt i64 %700, 0
  br i1 %701, label %.loopexit849.thread, label %743

.loopexit849.thread:                              ; preds = %429, %.loopexit849
  %702 = phi i64 [ %699, %.loopexit849 ], [ %77, %429 ]
  %703 = add nsw i64 %702, -1
  %invariant.gep986 = getelementptr i8, ptr %36, i64 16
  %.not788988 = icmp slt i64 %702, 2
  br i1 %.not788988, label %.loopexit841, label %.lr.ph990

.lr.ph990:                                        ; preds = %.loopexit849.thread, %._crit_edge
  %.5767989 = phi i64 [ %739, %._crit_edge ], [ 1, %.loopexit849.thread ]
  %704 = mul nsw i64 %.5767989, %28
  %705 = add nsw i64 %704, 2
  store i64 %705, ptr %14, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %705
  %707 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %705, i32 1
  %708 = load <2 x double>, ptr %706, align 8, !tbaa !14
  store <2 x double> %708, ptr %18, align 16, !tbaa !14
  %709 = call double @z_abs(ptr noundef nonnull %18) #5
  store i64 %705, ptr %14, align 8, !tbaa !5
  store double %709, ptr %706, align 8, !tbaa !19
  store double 0.000000e+00, ptr %707, align 8, !tbaa !9
  %710 = getelementptr inbounds double, ptr %33, i64 %.5767989
  store double %709, ptr %710, align 8, !tbaa !14
  %711 = fcmp une double %709, 0.000000e+00
  %712 = load <2 x double>, ptr %18, align 16
  %713 = insertelement <2 x double> poison, double %709, i64 0
  %714 = shufflevector <2 x double> %713, <2 x double> poison, <2 x i32> zeroinitializer
  %715 = fdiv <2 x double> %712, %714
  %716 = insertelement <2 x i1> poison, i1 %711, i64 0
  %717 = shufflevector <2 x i1> %716, <2 x i1> poison, <2 x i32> zeroinitializer
  %718 = select <2 x i1> %717, <2 x double> %715, <2 x double> <double 1.000000e+00, double 0.000000e+00>
  store <2 x double> %718, ptr %18, align 16, !tbaa !14
  %719 = load i64, ptr %2, align 8, !tbaa !5
  %720 = add nsw i64 %719, -1
  %721 = icmp slt i64 %.5767989, %720
  br i1 %721, label %722, label %738

722:                                              ; preds = %.lr.ph990
  %723 = add nuw nsw i64 %.5767989, 1
  %724 = mul nsw i64 %723, %28
  %725 = add nsw i64 %724, 2
  store i64 %725, ptr %14, align 8, !tbaa !5
  store i64 %725, ptr %15, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %725
  %727 = load double, ptr %726, align 8, !tbaa !19
  %728 = getelementptr inbounds i8, ptr %726, i64 8
  %729 = load double, ptr %728, align 8, !tbaa !9
  %730 = fneg double %729
  %731 = insertelement <2 x double> poison, double %729, i64 0
  %732 = insertelement <2 x double> %731, double %730, i64 1
  %733 = fmul <2 x double> %718, %732
  %734 = shufflevector <2 x double> %733, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %735 = insertelement <2 x double> poison, double %727, i64 0
  %736 = shufflevector <2 x double> %735, <2 x double> poison, <2 x i32> zeroinitializer
  %737 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %736, <2 x double> %718, <2 x double> %734)
  store <2 x double> %737, ptr %726, align 8, !tbaa !14
  br label %738

738:                                              ; preds = %722, %.lr.ph990
  %739 = add nuw nsw i64 %.5767989, 1
  br i1 %43, label %740, label %._crit_edge

740:                                              ; preds = %738
  %741 = mul nsw i64 %739, %34
  %gep987 = getelementptr %struct.doublecomplex, ptr %invariant.gep986, i64 %741
  %742 = call i32 @f2c_zscal(ptr noundef nonnull %2, ptr noundef nonnull %18, ptr noundef %gep987, ptr noundef nonnull @c__1) #5
  br label %._crit_edge

._crit_edge:                                      ; preds = %738, %740
  %.not788.not = icmp slt i64 %.5767989, %703
  br i1 %.not788.not, label %.lr.ph990, label %.loopexit841.loopexit, !llvm.loop !35

743:                                              ; preds = %.loopexit849
  %.not787.not983 = icmp sgt i64 %699, 1
  br i1 %.not787.not983, label %.loopexit841.thread, label %.loopexit841

.loopexit841.thread:                              ; preds = %743
  %744 = shl i64 %699, 3
  %745 = add i64 %744, -8
  call void @llvm.memset.p0.i64(ptr align 8 %7, i8 0, i64 %745, i1 false), !tbaa !14
  br label %.lr.ph993.preheader

.loopexit841.loopexit:                            ; preds = %._crit_edge
  %.pre1020 = load i64, ptr %2, align 8, !tbaa !5
  br label %.loopexit841

.loopexit841:                                     ; preds = %.loopexit841.loopexit, %743, %.loopexit849.thread
  %746 = phi i64 [ %.pre1020, %.loopexit841.loopexit ], [ %699, %743 ], [ %702, %.loopexit849.thread ]
  %.not789991 = icmp slt i64 %746, 1
  br i1 %.not789991, label %.loopexit, label %.lr.ph993.preheader

.lr.ph993.preheader:                              ; preds = %.loopexit841.thread, %.loopexit841
  %747 = phi i64 [ %699, %.loopexit841.thread ], [ %746, %.loopexit841 ]
  %xtraiter1063 = and i64 %747, 3
  %748 = icmp ult i64 %747, 4
  br i1 %748, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph993.preheader.new

.lr.ph993.preheader.new:                          ; preds = %.lr.ph993.preheader
  %unroll_iter1065 = and i64 %747, 9223372036854775804
  %invariant.gep1083 = getelementptr i8, ptr %31, i64 16
  %invariant.gep1085 = getelementptr i8, ptr %31, i64 16
  %invariant.gep1087 = getelementptr i8, ptr %31, i64 16
  %invariant.gep1089 = getelementptr i8, ptr %31, i64 16
  br label %.lr.ph993

.lr.ph993:                                        ; preds = %.lr.ph993, %.lr.ph993.preheader.new
  %.7992 = phi i64 [ 1, %.lr.ph993.preheader.new ], [ %764, %.lr.ph993 ]
  %niter1066 = phi i64 [ 0, %.lr.ph993.preheader.new ], [ %niter1066.next.3, %.lr.ph993 ]
  %749 = mul nsw i64 %.7992, %28
  %gep1084 = getelementptr %struct.doublecomplex, ptr %invariant.gep1083, i64 %749
  %750 = load double, ptr %gep1084, align 8, !tbaa !19
  %751 = getelementptr inbounds double, ptr %32, i64 %.7992
  store double %750, ptr %751, align 8, !tbaa !14
  %752 = add nuw nsw i64 %.7992, 1
  %753 = mul nsw i64 %752, %28
  %gep1086 = getelementptr %struct.doublecomplex, ptr %invariant.gep1085, i64 %753
  %754 = load double, ptr %gep1086, align 8, !tbaa !19
  %755 = getelementptr double, ptr %6, i64 %.7992
  store double %754, ptr %755, align 8, !tbaa !14
  %756 = add nuw nsw i64 %.7992, 2
  %757 = mul nsw i64 %756, %28
  %gep1088 = getelementptr %struct.doublecomplex, ptr %invariant.gep1087, i64 %757
  %758 = load double, ptr %gep1088, align 8, !tbaa !19
  %759 = getelementptr inbounds double, ptr %32, i64 %756
  store double %758, ptr %759, align 8, !tbaa !14
  %760 = add nuw i64 %.7992, 3
  %761 = mul nsw i64 %760, %28
  %gep1090 = getelementptr %struct.doublecomplex, ptr %invariant.gep1089, i64 %761
  %762 = load double, ptr %gep1090, align 8, !tbaa !19
  %763 = getelementptr inbounds double, ptr %32, i64 %760
  store double %762, ptr %763, align 8, !tbaa !14
  %764 = add nuw i64 %.7992, 4
  %niter1066.next.3 = add nuw i64 %niter1066, 4
  %niter1066.ncmp.3 = icmp eq i64 %niter1066.next.3, %unroll_iter1065
  br i1 %niter1066.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph993, !llvm.loop !36

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph993, %.lr.ph993.preheader
  %.7992.unr = phi i64 [ 1, %.lr.ph993.preheader ], [ %764, %.lr.ph993 ]
  %lcmp.mod1064.not = icmp eq i64 %xtraiter1063, 0
  br i1 %lcmp.mod1064.not, label %.loopexit, label %.lr.ph993.epil.preheader

.lr.ph993.epil.preheader:                         ; preds = %.loopexit.loopexit.unr-lcssa
  %invariant.gep1075 = getelementptr i8, ptr %31, i64 16
  br label %.lr.ph993.epil

.lr.ph993.epil:                                   ; preds = %.lr.ph993.epil, %.lr.ph993.epil.preheader
  %.7992.epil = phi i64 [ %768, %.lr.ph993.epil ], [ %.7992.unr, %.lr.ph993.epil.preheader ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph993.epil ], [ 0, %.lr.ph993.epil.preheader ]
  %765 = mul nsw i64 %.7992.epil, %28
  %gep1076 = getelementptr %struct.doublecomplex, ptr %invariant.gep1075, i64 %765
  %766 = load double, ptr %gep1076, align 8, !tbaa !19
  %767 = getelementptr inbounds double, ptr %32, i64 %.7992.epil
  store double %766, ptr %767, align 8, !tbaa !14
  %768 = add nuw i64 %.7992.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1063
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.lr.ph993.epil, !llvm.loop !37

.loopexit.loopexit1057.unr-lcssa:                 ; preds = %417, %.lr.ph920
  %.3765919.unr = phi i64 [ 1, %.lr.ph920 ], [ %427, %417 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.loopexit.loopexit1057.epilog-lcssa

.loopexit.loopexit1057.epilog-lcssa:              ; preds = %.loopexit.loopexit1057.unr-lcssa
  %769 = mul nsw i64 %.3765919.unr, %28
  %770 = getelementptr %struct.doublecomplex, ptr %31, i64 %413
  %771 = getelementptr %struct.doublecomplex, ptr %770, i64 %769
  %772 = load double, ptr %771, align 8, !tbaa !19
  %773 = getelementptr inbounds double, ptr %32, i64 %.3765919.unr
  store double %772, ptr %773, align 8, !tbaa !14
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit1057.epilog-lcssa, %.loopexit.loopexit1057.unr-lcssa, %.loopexit.loopexit.unr-lcssa, %.lr.ph993.epil, %.loopexit851, %.loopexit841, %70, %.thread
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  ret i32 0
}

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

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

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

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

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

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

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

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

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

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

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

declare double @z_abs(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

; 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>) #3

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

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

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


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