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

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

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

110:                                              ; preds = %16
  %111 = load ptr, ptr %18, align 8, !tbaa !5
  %112 = call i64 @lsame_(ptr noundef %111, ptr noundef @.str.2)
  %113 = icmp ne i64 %112, 0
  br i1 %113, label %116, label %114

114:                                              ; preds = %110
  %115 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -1, ptr %115, align 8, !tbaa !9
  br label %202

116:                                              ; preds = %110, %16
  %117 = load i64, ptr %63, align 8, !tbaa !9
  %118 = icmp ne i64 %117, 0
  br i1 %118, label %129, label %119

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

123:                                              ; preds = %119
  %124 = load ptr, ptr %19, align 8, !tbaa !5
  %125 = call i64 @lsame_(ptr noundef %124, ptr noundef @.str.4)
  %126 = icmp ne i64 %125, 0
  br i1 %126, label %129, label %127

127:                                              ; preds = %123
  %128 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -2, ptr %128, align 8, !tbaa !9
  br label %201

129:                                              ; preds = %123, %119, %116
  %130 = load i64, ptr %66, align 8, !tbaa !9
  %131 = icmp ne i64 %130, 0
  br i1 %131, label %138, label %132

132:                                              ; preds = %129
  %133 = load ptr, ptr %20, align 8, !tbaa !5
  %134 = call i64 @lsame_(ptr noundef %133, ptr noundef @.str)
  %135 = icmp ne i64 %134, 0
  br i1 %135, label %138, label %136

136:                                              ; preds = %132
  %137 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -3, ptr %137, align 8, !tbaa !9
  br label %200

138:                                              ; preds = %132, %129
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  %141 = icmp slt i64 %140, 0
  br i1 %141, label %142, label %144

142:                                              ; preds = %138
  %143 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -4, ptr %143, align 8, !tbaa !9
  br label %199

144:                                              ; preds = %138
  %145 = load ptr, ptr %22, align 8, !tbaa !5
  %146 = load i64, ptr %145, align 8, !tbaa !9
  %147 = icmp slt i64 %146, 0
  br i1 %147, label %148, label %150

148:                                              ; preds = %144
  %149 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -5, ptr %149, align 8, !tbaa !9
  br label %198

150:                                              ; preds = %144
  %151 = load ptr, ptr %24, align 8, !tbaa !5
  %152 = load i64, ptr %151, align 8, !tbaa !9
  %153 = load ptr, ptr %21, align 8, !tbaa !5
  %154 = load i64, ptr %153, align 8, !tbaa !9
  %155 = icmp sge i64 1, %154
  br i1 %155, label %156, label %157

156:                                              ; preds = %150
  br label %160

157:                                              ; preds = %150
  %158 = load ptr, ptr %21, align 8, !tbaa !5
  %159 = load i64, ptr %158, align 8, !tbaa !9
  br label %160

160:                                              ; preds = %157, %156
  %161 = phi i64 [ 1, %156 ], [ %159, %157 ]
  %162 = icmp slt i64 %152, %161
  br i1 %162, label %163, label %165

163:                                              ; preds = %160
  %164 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -7, ptr %164, align 8, !tbaa !9
  br label %197

165:                                              ; preds = %160
  %166 = load ptr, ptr %26, align 8, !tbaa !5
  %167 = load i64, ptr %166, align 8, !tbaa !9
  %168 = load ptr, ptr %21, align 8, !tbaa !5
  %169 = load i64, ptr %168, align 8, !tbaa !9
  %170 = icmp sge i64 1, %169
  br i1 %170, label %171, label %172

171:                                              ; preds = %165
  br label %175

172:                                              ; preds = %165
  %173 = load ptr, ptr %21, align 8, !tbaa !5
  %174 = load i64, ptr %173, align 8, !tbaa !9
  br label %175

175:                                              ; preds = %172, %171
  %176 = phi i64 [ 1, %171 ], [ %174, %172 ]
  %177 = icmp slt i64 %167, %176
  br i1 %177, label %178, label %180

178:                                              ; preds = %175
  %179 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -9, ptr %179, align 8, !tbaa !9
  br label %196

180:                                              ; preds = %175
  %181 = load ptr, ptr %28, align 8, !tbaa !5
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = load ptr, ptr %21, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !9
  %185 = icmp sge i64 1, %184
  br i1 %185, label %186, label %187

186:                                              ; preds = %180
  br label %190

187:                                              ; preds = %180
  %188 = load ptr, ptr %21, align 8, !tbaa !5
  %189 = load i64, ptr %188, align 8, !tbaa !9
  br label %190

190:                                              ; preds = %187, %186
  %191 = phi i64 [ 1, %186 ], [ %189, %187 ]
  %192 = icmp slt i64 %182, %191
  br i1 %192, label %193, label %195

193:                                              ; preds = %190
  %194 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -11, ptr %194, align 8, !tbaa !9
  br label %195

195:                                              ; preds = %193, %190
  br label %196

196:                                              ; preds = %195, %178
  br label %197

197:                                              ; preds = %196, %163
  br label %198

198:                                              ; preds = %197, %148
  br label %199

199:                                              ; preds = %198, %142
  br label %200

200:                                              ; preds = %199, %136
  br label %201

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

202:                                              ; preds = %201, %114
  %203 = load ptr, ptr %33, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = icmp ne i64 %204, 0
  br i1 %205, label %206, label %211

206:                                              ; preds = %202
  %207 = load ptr, ptr %33, align 8, !tbaa !5
  %208 = load i64, ptr %207, align 8, !tbaa !9
  %209 = sub nsw i64 0, %208
  store i64 %209, ptr %40, align 8, !tbaa !9
  %210 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %40)
  store i32 0, ptr %17, align 4
  store i32 1, ptr %68, align 4
  br label %1732

211:                                              ; preds = %202
  %212 = load ptr, ptr %21, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = icmp eq i64 %213, 0
  br i1 %214, label %219, label %215

215:                                              ; preds = %211
  %216 = load ptr, ptr %22, align 8, !tbaa !5
  %217 = load i64, ptr %216, align 8, !tbaa !9
  %218 = icmp eq i64 %217, 0
  br i1 %218, label %219, label %237

219:                                              ; preds = %215, %211
  %220 = load ptr, ptr %22, align 8, !tbaa !5
  %221 = load i64, ptr %220, align 8, !tbaa !9
  store i64 %221, ptr %40, align 8, !tbaa !9
  store i64 1, ptr %51, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %233, %219
  %223 = load i64, ptr %51, align 8, !tbaa !9
  %224 = load i64, ptr %40, align 8, !tbaa !9
  %225 = icmp sle i64 %223, %224
  br i1 %225, label %226, label %236

226:                                              ; preds = %222
  %227 = load ptr, ptr %29, align 8, !tbaa !5
  %228 = load i64, ptr %51, align 8, !tbaa !9
  %229 = getelementptr inbounds double, ptr %227, i64 %228
  store double 0.000000e+00, ptr %229, align 8, !tbaa !11
  %230 = load ptr, ptr %30, align 8, !tbaa !5
  %231 = load i64, ptr %51, align 8, !tbaa !9
  %232 = getelementptr inbounds double, ptr %230, i64 %231
  store double 0.000000e+00, ptr %232, align 8, !tbaa !11
  br label %233

233:                                              ; preds = %226
  %234 = load i64, ptr %51, align 8, !tbaa !9
  %235 = add nsw i64 %234, 1
  store i64 %235, ptr %51, align 8, !tbaa !9
  br label %222, !llvm.loop !13

236:                                              ; preds = %222
  store i32 0, ptr %17, align 4
  store i32 1, ptr %68, align 4
  br label %1732

237:                                              ; preds = %215
  %238 = load i64, ptr %63, align 8, !tbaa !9
  %239 = icmp ne i64 %238, 0
  br i1 %239, label %240, label %243

240:                                              ; preds = %237
  %241 = getelementptr inbounds [1 x i8], ptr %64, i64 0, i64 0
  store i8 78, ptr %241, align 1, !tbaa !15
  %242 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  store i8 67, ptr %242, align 1, !tbaa !15
  br label %246

243:                                              ; preds = %237
  %244 = getelementptr inbounds [1 x i8], ptr %64, i64 0, i64 0
  store i8 67, ptr %244, align 1, !tbaa !15
  %245 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  store i8 78, ptr %245, align 1, !tbaa !15
  br label %246

246:                                              ; preds = %243, %240
  %247 = load ptr, ptr %21, align 8, !tbaa !5
  %248 = load i64, ptr %247, align 8, !tbaa !9
  %249 = add nsw i64 %248, 1
  store i64 %249, ptr %55, align 8, !tbaa !9
  %250 = call double @dlamch_(ptr noundef @.str.6)
  store double %250, ptr %56, align 8, !tbaa !11
  %251 = call double @dlamch_(ptr noundef @.str.7)
  store double %251, ptr %62, align 8, !tbaa !11
  %252 = load i64, ptr %55, align 8, !tbaa !9
  %253 = sitofp i64 %252 to double
  %254 = load double, ptr %62, align 8, !tbaa !11
  %255 = fmul double %253, %254
  store double %255, ptr %58, align 8, !tbaa !11
  %256 = load double, ptr %58, align 8, !tbaa !11
  %257 = load double, ptr %56, align 8, !tbaa !11
  %258 = fdiv double %256, %257
  store double %258, ptr %59, align 8, !tbaa !11
  %259 = load ptr, ptr %22, align 8, !tbaa !5
  %260 = load i64, ptr %259, align 8, !tbaa !9
  store i64 %260, ptr %40, align 8, !tbaa !9
  store i64 1, ptr %51, align 8, !tbaa !9
  br label %261

261:                                              ; preds = %1728, %246
  %262 = load i64, ptr %51, align 8, !tbaa !9
  %263 = load i64, ptr %40, align 8, !tbaa !9
  %264 = icmp sle i64 %262, %263
  br i1 %264, label %265, label %1731

265:                                              ; preds = %261
  %266 = load ptr, ptr %21, align 8, !tbaa !5
  %267 = load ptr, ptr %27, align 8, !tbaa !5
  %268 = load i64, ptr %51, align 8, !tbaa !9
  %269 = load i64, ptr %38, align 8, !tbaa !9
  %270 = mul nsw i64 %268, %269
  %271 = add nsw i64 %270, 1
  %272 = getelementptr inbounds %struct.doublecomplex, ptr %267, i64 %271
  %273 = load ptr, ptr %31, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.doublecomplex, ptr %273, i64 1
  %275 = call i32 @f2c_zcopy(ptr noundef %266, ptr noundef %272, ptr noundef @c__1, ptr noundef %274, ptr noundef @c__1)
  %276 = load ptr, ptr %18, align 8, !tbaa !5
  %277 = load ptr, ptr %19, align 8, !tbaa !5
  %278 = load ptr, ptr %20, align 8, !tbaa !5
  %279 = load ptr, ptr %21, align 8, !tbaa !5
  %280 = load ptr, ptr %23, align 8, !tbaa !5
  %281 = load i64, ptr %35, align 8, !tbaa !9
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %280, i64 %281
  %283 = load ptr, ptr %24, align 8, !tbaa !5
  %284 = load ptr, ptr %31, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.doublecomplex, ptr %284, i64 1
  %286 = call i32 @f2c_ztrmv(ptr noundef %276, ptr noundef %277, ptr noundef %278, ptr noundef %279, ptr noundef %282, ptr noundef %283, ptr noundef %285, ptr noundef @c__1)
  %287 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double -1.000000e+00, ptr %287, align 8, !tbaa !16
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double -0.000000e+00, ptr %288, align 8, !tbaa !18
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = load ptr, ptr %25, align 8, !tbaa !5
  %291 = load i64, ptr %51, align 8, !tbaa !9
  %292 = load i64, ptr %36, align 8, !tbaa !9
  %293 = mul nsw i64 %291, %292
  %294 = add nsw i64 %293, 1
  %295 = getelementptr inbounds %struct.doublecomplex, ptr %290, i64 %294
  %296 = load ptr, ptr %31, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.doublecomplex, ptr %296, i64 1
  %298 = call i32 @f2c_zaxpy(ptr noundef %289, ptr noundef %49, ptr noundef %295, ptr noundef @c__1, ptr noundef %297, ptr noundef @c__1)
  %299 = load ptr, ptr %21, align 8, !tbaa !5
  %300 = load i64, ptr %299, align 8, !tbaa !9
  store i64 %300, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %301

301:                                              ; preds = %346, %265
  %302 = load i64, ptr %50, align 8, !tbaa !9
  %303 = load i64, ptr %41, align 8, !tbaa !9
  %304 = icmp sle i64 %302, %303
  br i1 %304, label %305, label %349

305:                                              ; preds = %301
  %306 = load i64, ptr %50, align 8, !tbaa !9
  %307 = load i64, ptr %51, align 8, !tbaa !9
  %308 = load i64, ptr %36, align 8, !tbaa !9
  %309 = mul nsw i64 %307, %308
  %310 = add nsw i64 %306, %309
  store i64 %310, ptr %42, align 8, !tbaa !9
  %311 = load ptr, ptr %25, align 8, !tbaa !5
  %312 = load i64, ptr %42, align 8, !tbaa !9
  %313 = getelementptr inbounds %struct.doublecomplex, ptr %311, i64 %312
  %314 = getelementptr inbounds %struct.doublecomplex, ptr %313, i32 0, i32 0
  %315 = load double, ptr %314, align 8, !tbaa !16
  store double %315, ptr %45, align 8, !tbaa !11
  %316 = load double, ptr %45, align 8, !tbaa !11
  %317 = fcmp oge double %316, 0.000000e+00
  br i1 %317, label %318, label %320

318:                                              ; preds = %305
  %319 = load double, ptr %45, align 8, !tbaa !11
  br label %323

320:                                              ; preds = %305
  %321 = load double, ptr %45, align 8, !tbaa !11
  %322 = fneg double %321
  br label %323

323:                                              ; preds = %320, %318
  %324 = phi double [ %319, %318 ], [ %322, %320 ]
  %325 = load ptr, ptr %25, align 8, !tbaa !5
  %326 = load i64, ptr %50, align 8, !tbaa !9
  %327 = load i64, ptr %51, align 8, !tbaa !9
  %328 = load i64, ptr %36, align 8, !tbaa !9
  %329 = mul nsw i64 %327, %328
  %330 = add nsw i64 %326, %329
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %325, i64 %330
  %332 = call double @d_imag(ptr noundef %331)
  store double %332, ptr %46, align 8, !tbaa !11
  %333 = load double, ptr %46, align 8, !tbaa !11
  %334 = fcmp oge double %333, 0.000000e+00
  br i1 %334, label %335, label %337

335:                                              ; preds = %323
  %336 = load double, ptr %46, align 8, !tbaa !11
  br label %340

337:                                              ; preds = %323
  %338 = load double, ptr %46, align 8, !tbaa !11
  %339 = fneg double %338
  br label %340

340:                                              ; preds = %337, %335
  %341 = phi double [ %336, %335 ], [ %339, %337 ]
  %342 = fadd double %324, %341
  %343 = load ptr, ptr %32, align 8, !tbaa !5
  %344 = load i64, ptr %50, align 8, !tbaa !9
  %345 = getelementptr inbounds double, ptr %343, i64 %344
  store double %342, ptr %345, align 8, !tbaa !11
  br label %346

346:                                              ; preds = %340
  %347 = load i64, ptr %50, align 8, !tbaa !9
  %348 = add nsw i64 %347, 1
  store i64 %348, ptr %50, align 8, !tbaa !9
  br label %301, !llvm.loop !19

349:                                              ; preds = %301
  %350 = load i64, ptr %63, align 8, !tbaa !9
  %351 = icmp ne i64 %350, 0
  br i1 %351, label %352, label %790

352:                                              ; preds = %349
  %353 = load i64, ptr %61, align 8, !tbaa !9
  %354 = icmp ne i64 %353, 0
  br i1 %354, label %355, label %570

355:                                              ; preds = %352
  %356 = load i64, ptr %66, align 8, !tbaa !9
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %358, label %460

358:                                              ; preds = %355
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  %360 = load i64, ptr %359, align 8, !tbaa !9
  store i64 %360, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %361

361:                                              ; preds = %456, %358
  %362 = load i64, ptr %52, align 8, !tbaa !9
  %363 = load i64, ptr %41, align 8, !tbaa !9
  %364 = icmp sle i64 %362, %363
  br i1 %364, label %365, label %459

365:                                              ; preds = %361
  %366 = load i64, ptr %52, align 8, !tbaa !9
  %367 = load i64, ptr %51, align 8, !tbaa !9
  %368 = load i64, ptr %38, align 8, !tbaa !9
  %369 = mul nsw i64 %367, %368
  %370 = add nsw i64 %366, %369
  store i64 %370, ptr %42, align 8, !tbaa !9
  %371 = load ptr, ptr %27, align 8, !tbaa !5
  %372 = load i64, ptr %42, align 8, !tbaa !9
  %373 = getelementptr inbounds %struct.doublecomplex, ptr %371, i64 %372
  %374 = getelementptr inbounds %struct.doublecomplex, ptr %373, i32 0, i32 0
  %375 = load double, ptr %374, align 8, !tbaa !16
  store double %375, ptr %45, align 8, !tbaa !11
  %376 = load double, ptr %45, align 8, !tbaa !11
  %377 = fcmp oge double %376, 0.000000e+00
  br i1 %377, label %378, label %380

378:                                              ; preds = %365
  %379 = load double, ptr %45, align 8, !tbaa !11
  br label %383

380:                                              ; preds = %365
  %381 = load double, ptr %45, align 8, !tbaa !11
  %382 = fneg double %381
  br label %383

383:                                              ; preds = %380, %378
  %384 = phi double [ %379, %378 ], [ %382, %380 ]
  %385 = load ptr, ptr %27, align 8, !tbaa !5
  %386 = load i64, ptr %52, align 8, !tbaa !9
  %387 = load i64, ptr %51, align 8, !tbaa !9
  %388 = load i64, ptr %38, align 8, !tbaa !9
  %389 = mul nsw i64 %387, %388
  %390 = add nsw i64 %386, %389
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %385, i64 %390
  %392 = call double @d_imag(ptr noundef %391)
  store double %392, ptr %46, align 8, !tbaa !11
  %393 = load double, ptr %46, align 8, !tbaa !11
  %394 = fcmp oge double %393, 0.000000e+00
  br i1 %394, label %395, label %397

395:                                              ; preds = %383
  %396 = load double, ptr %46, align 8, !tbaa !11
  br label %400

397:                                              ; preds = %383
  %398 = load double, ptr %46, align 8, !tbaa !11
  %399 = fneg double %398
  br label %400

400:                                              ; preds = %397, %395
  %401 = phi double [ %396, %395 ], [ %399, %397 ]
  %402 = fadd double %384, %401
  store double %402, ptr %54, align 8, !tbaa !11
  %403 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %403, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %452, %400
  %405 = load i64, ptr %50, align 8, !tbaa !9
  %406 = load i64, ptr %42, align 8, !tbaa !9
  %407 = icmp sle i64 %405, %406
  br i1 %407, label %408, label %455

408:                                              ; preds = %404
  %409 = load i64, ptr %50, align 8, !tbaa !9
  %410 = load i64, ptr %52, align 8, !tbaa !9
  %411 = load i64, ptr %34, align 8, !tbaa !9
  %412 = mul nsw i64 %410, %411
  %413 = add nsw i64 %409, %412
  store i64 %413, ptr %43, align 8, !tbaa !9
  %414 = load ptr, ptr %23, align 8, !tbaa !5
  %415 = load i64, ptr %43, align 8, !tbaa !9
  %416 = getelementptr inbounds %struct.doublecomplex, ptr %414, i64 %415
  %417 = getelementptr inbounds %struct.doublecomplex, ptr %416, i32 0, i32 0
  %418 = load double, ptr %417, align 8, !tbaa !16
  store double %418, ptr %45, align 8, !tbaa !11
  %419 = load double, ptr %45, align 8, !tbaa !11
  %420 = fcmp oge double %419, 0.000000e+00
  br i1 %420, label %421, label %423

421:                                              ; preds = %408
  %422 = load double, ptr %45, align 8, !tbaa !11
  br label %426

423:                                              ; preds = %408
  %424 = load double, ptr %45, align 8, !tbaa !11
  %425 = fneg double %424
  br label %426

426:                                              ; preds = %423, %421
  %427 = phi double [ %422, %421 ], [ %425, %423 ]
  %428 = load ptr, ptr %23, align 8, !tbaa !5
  %429 = load i64, ptr %50, align 8, !tbaa !9
  %430 = load i64, ptr %52, align 8, !tbaa !9
  %431 = load i64, ptr %34, align 8, !tbaa !9
  %432 = mul nsw i64 %430, %431
  %433 = add nsw i64 %429, %432
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %428, i64 %433
  %435 = call double @d_imag(ptr noundef %434)
  store double %435, ptr %46, align 8, !tbaa !11
  %436 = load double, ptr %46, align 8, !tbaa !11
  %437 = fcmp oge double %436, 0.000000e+00
  br i1 %437, label %438, label %440

438:                                              ; preds = %426
  %439 = load double, ptr %46, align 8, !tbaa !11
  br label %443

440:                                              ; preds = %426
  %441 = load double, ptr %46, align 8, !tbaa !11
  %442 = fneg double %441
  br label %443

443:                                              ; preds = %440, %438
  %444 = phi double [ %439, %438 ], [ %442, %440 ]
  %445 = fadd double %427, %444
  %446 = load double, ptr %54, align 8, !tbaa !11
  %447 = load ptr, ptr %32, align 8, !tbaa !5
  %448 = load i64, ptr %50, align 8, !tbaa !9
  %449 = getelementptr inbounds double, ptr %447, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !11
  %451 = call double @llvm.fmuladd.f64(double %445, double %446, double %450)
  store double %451, ptr %449, align 8, !tbaa !11
  br label %452

452:                                              ; preds = %443
  %453 = load i64, ptr %50, align 8, !tbaa !9
  %454 = add nsw i64 %453, 1
  store i64 %454, ptr %50, align 8, !tbaa !9
  br label %404, !llvm.loop !20

455:                                              ; preds = %404
  br label %456

456:                                              ; preds = %455
  %457 = load i64, ptr %52, align 8, !tbaa !9
  %458 = add nsw i64 %457, 1
  store i64 %458, ptr %52, align 8, !tbaa !9
  br label %361, !llvm.loop !21

459:                                              ; preds = %361
  br label %569

460:                                              ; preds = %355
  %461 = load ptr, ptr %21, align 8, !tbaa !5
  %462 = load i64, ptr %461, align 8, !tbaa !9
  store i64 %462, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %463

463:                                              ; preds = %565, %460
  %464 = load i64, ptr %52, align 8, !tbaa !9
  %465 = load i64, ptr %41, align 8, !tbaa !9
  %466 = icmp sle i64 %464, %465
  br i1 %466, label %467, label %568

467:                                              ; preds = %463
  %468 = load i64, ptr %52, align 8, !tbaa !9
  %469 = load i64, ptr %51, align 8, !tbaa !9
  %470 = load i64, ptr %38, align 8, !tbaa !9
  %471 = mul nsw i64 %469, %470
  %472 = add nsw i64 %468, %471
  store i64 %472, ptr %42, align 8, !tbaa !9
  %473 = load ptr, ptr %27, align 8, !tbaa !5
  %474 = load i64, ptr %42, align 8, !tbaa !9
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %473, i64 %474
  %476 = getelementptr inbounds %struct.doublecomplex, ptr %475, i32 0, i32 0
  %477 = load double, ptr %476, align 8, !tbaa !16
  store double %477, ptr %45, align 8, !tbaa !11
  %478 = load double, ptr %45, align 8, !tbaa !11
  %479 = fcmp oge double %478, 0.000000e+00
  br i1 %479, label %480, label %482

480:                                              ; preds = %467
  %481 = load double, ptr %45, align 8, !tbaa !11
  br label %485

482:                                              ; preds = %467
  %483 = load double, ptr %45, align 8, !tbaa !11
  %484 = fneg double %483
  br label %485

485:                                              ; preds = %482, %480
  %486 = phi double [ %481, %480 ], [ %484, %482 ]
  %487 = load ptr, ptr %27, align 8, !tbaa !5
  %488 = load i64, ptr %52, align 8, !tbaa !9
  %489 = load i64, ptr %51, align 8, !tbaa !9
  %490 = load i64, ptr %38, align 8, !tbaa !9
  %491 = mul nsw i64 %489, %490
  %492 = add nsw i64 %488, %491
  %493 = getelementptr inbounds %struct.doublecomplex, ptr %487, i64 %492
  %494 = call double @d_imag(ptr noundef %493)
  store double %494, ptr %46, align 8, !tbaa !11
  %495 = load double, ptr %46, align 8, !tbaa !11
  %496 = fcmp oge double %495, 0.000000e+00
  br i1 %496, label %497, label %499

497:                                              ; preds = %485
  %498 = load double, ptr %46, align 8, !tbaa !11
  br label %502

499:                                              ; preds = %485
  %500 = load double, ptr %46, align 8, !tbaa !11
  %501 = fneg double %500
  br label %502

502:                                              ; preds = %499, %497
  %503 = phi double [ %498, %497 ], [ %501, %499 ]
  %504 = fadd double %486, %503
  store double %504, ptr %54, align 8, !tbaa !11
  %505 = load i64, ptr %52, align 8, !tbaa !9
  %506 = sub nsw i64 %505, 1
  store i64 %506, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %507

507:                                              ; preds = %555, %502
  %508 = load i64, ptr %50, align 8, !tbaa !9
  %509 = load i64, ptr %42, align 8, !tbaa !9
  %510 = icmp sle i64 %508, %509
  br i1 %510, label %511, label %558

511:                                              ; preds = %507
  %512 = load i64, ptr %50, align 8, !tbaa !9
  %513 = load i64, ptr %52, align 8, !tbaa !9
  %514 = load i64, ptr %34, align 8, !tbaa !9
  %515 = mul nsw i64 %513, %514
  %516 = add nsw i64 %512, %515
  store i64 %516, ptr %43, align 8, !tbaa !9
  %517 = load ptr, ptr %23, align 8, !tbaa !5
  %518 = load i64, ptr %43, align 8, !tbaa !9
  %519 = getelementptr inbounds %struct.doublecomplex, ptr %517, i64 %518
  %520 = getelementptr inbounds %struct.doublecomplex, ptr %519, i32 0, i32 0
  %521 = load double, ptr %520, align 8, !tbaa !16
  store double %521, ptr %45, align 8, !tbaa !11
  %522 = load double, ptr %45, align 8, !tbaa !11
  %523 = fcmp oge double %522, 0.000000e+00
  br i1 %523, label %524, label %526

524:                                              ; preds = %511
  %525 = load double, ptr %45, align 8, !tbaa !11
  br label %529

526:                                              ; preds = %511
  %527 = load double, ptr %45, align 8, !tbaa !11
  %528 = fneg double %527
  br label %529

529:                                              ; preds = %526, %524
  %530 = phi double [ %525, %524 ], [ %528, %526 ]
  %531 = load ptr, ptr %23, align 8, !tbaa !5
  %532 = load i64, ptr %50, align 8, !tbaa !9
  %533 = load i64, ptr %52, align 8, !tbaa !9
  %534 = load i64, ptr %34, align 8, !tbaa !9
  %535 = mul nsw i64 %533, %534
  %536 = add nsw i64 %532, %535
  %537 = getelementptr inbounds %struct.doublecomplex, ptr %531, i64 %536
  %538 = call double @d_imag(ptr noundef %537)
  store double %538, ptr %46, align 8, !tbaa !11
  %539 = load double, ptr %46, align 8, !tbaa !11
  %540 = fcmp oge double %539, 0.000000e+00
  br i1 %540, label %541, label %543

541:                                              ; preds = %529
  %542 = load double, ptr %46, align 8, !tbaa !11
  br label %546

543:                                              ; preds = %529
  %544 = load double, ptr %46, align 8, !tbaa !11
  %545 = fneg double %544
  br label %546

546:                                              ; preds = %543, %541
  %547 = phi double [ %542, %541 ], [ %545, %543 ]
  %548 = fadd double %530, %547
  %549 = load double, ptr %54, align 8, !tbaa !11
  %550 = load ptr, ptr %32, align 8, !tbaa !5
  %551 = load i64, ptr %50, align 8, !tbaa !9
  %552 = getelementptr inbounds double, ptr %550, i64 %551
  %553 = load double, ptr %552, align 8, !tbaa !11
  %554 = call double @llvm.fmuladd.f64(double %548, double %549, double %553)
  store double %554, ptr %552, align 8, !tbaa !11
  br label %555

555:                                              ; preds = %546
  %556 = load i64, ptr %50, align 8, !tbaa !9
  %557 = add nsw i64 %556, 1
  store i64 %557, ptr %50, align 8, !tbaa !9
  br label %507, !llvm.loop !22

558:                                              ; preds = %507
  %559 = load double, ptr %54, align 8, !tbaa !11
  %560 = load ptr, ptr %32, align 8, !tbaa !5
  %561 = load i64, ptr %52, align 8, !tbaa !9
  %562 = getelementptr inbounds double, ptr %560, i64 %561
  %563 = load double, ptr %562, align 8, !tbaa !11
  %564 = fadd double %563, %559
  store double %564, ptr %562, align 8, !tbaa !11
  br label %565

565:                                              ; preds = %558
  %566 = load i64, ptr %52, align 8, !tbaa !9
  %567 = add nsw i64 %566, 1
  store i64 %567, ptr %52, align 8, !tbaa !9
  br label %463, !llvm.loop !23

568:                                              ; preds = %463
  br label %569

569:                                              ; preds = %568, %459
  br label %789

570:                                              ; preds = %352
  %571 = load i64, ptr %66, align 8, !tbaa !9
  %572 = icmp ne i64 %571, 0
  br i1 %572, label %573, label %677

573:                                              ; preds = %570
  %574 = load ptr, ptr %21, align 8, !tbaa !5
  %575 = load i64, ptr %574, align 8, !tbaa !9
  store i64 %575, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %576

576:                                              ; preds = %673, %573
  %577 = load i64, ptr %52, align 8, !tbaa !9
  %578 = load i64, ptr %41, align 8, !tbaa !9
  %579 = icmp sle i64 %577, %578
  br i1 %579, label %580, label %676

580:                                              ; preds = %576
  %581 = load i64, ptr %52, align 8, !tbaa !9
  %582 = load i64, ptr %51, align 8, !tbaa !9
  %583 = load i64, ptr %38, align 8, !tbaa !9
  %584 = mul nsw i64 %582, %583
  %585 = add nsw i64 %581, %584
  store i64 %585, ptr %42, align 8, !tbaa !9
  %586 = load ptr, ptr %27, align 8, !tbaa !5
  %587 = load i64, ptr %42, align 8, !tbaa !9
  %588 = getelementptr inbounds %struct.doublecomplex, ptr %586, i64 %587
  %589 = getelementptr inbounds %struct.doublecomplex, ptr %588, i32 0, i32 0
  %590 = load double, ptr %589, align 8, !tbaa !16
  store double %590, ptr %45, align 8, !tbaa !11
  %591 = load double, ptr %45, align 8, !tbaa !11
  %592 = fcmp oge double %591, 0.000000e+00
  br i1 %592, label %593, label %595

593:                                              ; preds = %580
  %594 = load double, ptr %45, align 8, !tbaa !11
  br label %598

595:                                              ; preds = %580
  %596 = load double, ptr %45, align 8, !tbaa !11
  %597 = fneg double %596
  br label %598

598:                                              ; preds = %595, %593
  %599 = phi double [ %594, %593 ], [ %597, %595 ]
  %600 = load ptr, ptr %27, align 8, !tbaa !5
  %601 = load i64, ptr %52, align 8, !tbaa !9
  %602 = load i64, ptr %51, align 8, !tbaa !9
  %603 = load i64, ptr %38, align 8, !tbaa !9
  %604 = mul nsw i64 %602, %603
  %605 = add nsw i64 %601, %604
  %606 = getelementptr inbounds %struct.doublecomplex, ptr %600, i64 %605
  %607 = call double @d_imag(ptr noundef %606)
  store double %607, ptr %46, align 8, !tbaa !11
  %608 = load double, ptr %46, align 8, !tbaa !11
  %609 = fcmp oge double %608, 0.000000e+00
  br i1 %609, label %610, label %612

610:                                              ; preds = %598
  %611 = load double, ptr %46, align 8, !tbaa !11
  br label %615

612:                                              ; preds = %598
  %613 = load double, ptr %46, align 8, !tbaa !11
  %614 = fneg double %613
  br label %615

615:                                              ; preds = %612, %610
  %616 = phi double [ %611, %610 ], [ %614, %612 ]
  %617 = fadd double %599, %616
  store double %617, ptr %54, align 8, !tbaa !11
  %618 = load ptr, ptr %21, align 8, !tbaa !5
  %619 = load i64, ptr %618, align 8, !tbaa !9
  store i64 %619, ptr %42, align 8, !tbaa !9
  %620 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %620, ptr %50, align 8, !tbaa !9
  br label %621

621:                                              ; preds = %669, %615
  %622 = load i64, ptr %50, align 8, !tbaa !9
  %623 = load i64, ptr %42, align 8, !tbaa !9
  %624 = icmp sle i64 %622, %623
  br i1 %624, label %625, label %672

625:                                              ; preds = %621
  %626 = load i64, ptr %50, align 8, !tbaa !9
  %627 = load i64, ptr %52, align 8, !tbaa !9
  %628 = load i64, ptr %34, align 8, !tbaa !9
  %629 = mul nsw i64 %627, %628
  %630 = add nsw i64 %626, %629
  store i64 %630, ptr %43, align 8, !tbaa !9
  %631 = load ptr, ptr %23, align 8, !tbaa !5
  %632 = load i64, ptr %43, align 8, !tbaa !9
  %633 = getelementptr inbounds %struct.doublecomplex, ptr %631, i64 %632
  %634 = getelementptr inbounds %struct.doublecomplex, ptr %633, i32 0, i32 0
  %635 = load double, ptr %634, align 8, !tbaa !16
  store double %635, ptr %45, align 8, !tbaa !11
  %636 = load double, ptr %45, align 8, !tbaa !11
  %637 = fcmp oge double %636, 0.000000e+00
  br i1 %637, label %638, label %640

638:                                              ; preds = %625
  %639 = load double, ptr %45, align 8, !tbaa !11
  br label %643

640:                                              ; preds = %625
  %641 = load double, ptr %45, align 8, !tbaa !11
  %642 = fneg double %641
  br label %643

643:                                              ; preds = %640, %638
  %644 = phi double [ %639, %638 ], [ %642, %640 ]
  %645 = load ptr, ptr %23, align 8, !tbaa !5
  %646 = load i64, ptr %50, align 8, !tbaa !9
  %647 = load i64, ptr %52, align 8, !tbaa !9
  %648 = load i64, ptr %34, align 8, !tbaa !9
  %649 = mul nsw i64 %647, %648
  %650 = add nsw i64 %646, %649
  %651 = getelementptr inbounds %struct.doublecomplex, ptr %645, i64 %650
  %652 = call double @d_imag(ptr noundef %651)
  store double %652, ptr %46, align 8, !tbaa !11
  %653 = load double, ptr %46, align 8, !tbaa !11
  %654 = fcmp oge double %653, 0.000000e+00
  br i1 %654, label %655, label %657

655:                                              ; preds = %643
  %656 = load double, ptr %46, align 8, !tbaa !11
  br label %660

657:                                              ; preds = %643
  %658 = load double, ptr %46, align 8, !tbaa !11
  %659 = fneg double %658
  br label %660

660:                                              ; preds = %657, %655
  %661 = phi double [ %656, %655 ], [ %659, %657 ]
  %662 = fadd double %644, %661
  %663 = load double, ptr %54, align 8, !tbaa !11
  %664 = load ptr, ptr %32, align 8, !tbaa !5
  %665 = load i64, ptr %50, align 8, !tbaa !9
  %666 = getelementptr inbounds double, ptr %664, i64 %665
  %667 = load double, ptr %666, align 8, !tbaa !11
  %668 = call double @llvm.fmuladd.f64(double %662, double %663, double %667)
  store double %668, ptr %666, align 8, !tbaa !11
  br label %669

669:                                              ; preds = %660
  %670 = load i64, ptr %50, align 8, !tbaa !9
  %671 = add nsw i64 %670, 1
  store i64 %671, ptr %50, align 8, !tbaa !9
  br label %621, !llvm.loop !24

672:                                              ; preds = %621
  br label %673

673:                                              ; preds = %672
  %674 = load i64, ptr %52, align 8, !tbaa !9
  %675 = add nsw i64 %674, 1
  store i64 %675, ptr %52, align 8, !tbaa !9
  br label %576, !llvm.loop !25

676:                                              ; preds = %576
  br label %788

677:                                              ; preds = %570
  %678 = load ptr, ptr %21, align 8, !tbaa !5
  %679 = load i64, ptr %678, align 8, !tbaa !9
  store i64 %679, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %680

680:                                              ; preds = %784, %677
  %681 = load i64, ptr %52, align 8, !tbaa !9
  %682 = load i64, ptr %41, align 8, !tbaa !9
  %683 = icmp sle i64 %681, %682
  br i1 %683, label %684, label %787

684:                                              ; preds = %680
  %685 = load i64, ptr %52, align 8, !tbaa !9
  %686 = load i64, ptr %51, align 8, !tbaa !9
  %687 = load i64, ptr %38, align 8, !tbaa !9
  %688 = mul nsw i64 %686, %687
  %689 = add nsw i64 %685, %688
  store i64 %689, ptr %42, align 8, !tbaa !9
  %690 = load ptr, ptr %27, align 8, !tbaa !5
  %691 = load i64, ptr %42, align 8, !tbaa !9
  %692 = getelementptr inbounds %struct.doublecomplex, ptr %690, i64 %691
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %692, i32 0, i32 0
  %694 = load double, ptr %693, align 8, !tbaa !16
  store double %694, ptr %45, align 8, !tbaa !11
  %695 = load double, ptr %45, align 8, !tbaa !11
  %696 = fcmp oge double %695, 0.000000e+00
  br i1 %696, label %697, label %699

697:                                              ; preds = %684
  %698 = load double, ptr %45, align 8, !tbaa !11
  br label %702

699:                                              ; preds = %684
  %700 = load double, ptr %45, align 8, !tbaa !11
  %701 = fneg double %700
  br label %702

702:                                              ; preds = %699, %697
  %703 = phi double [ %698, %697 ], [ %701, %699 ]
  %704 = load ptr, ptr %27, align 8, !tbaa !5
  %705 = load i64, ptr %52, align 8, !tbaa !9
  %706 = load i64, ptr %51, align 8, !tbaa !9
  %707 = load i64, ptr %38, align 8, !tbaa !9
  %708 = mul nsw i64 %706, %707
  %709 = add nsw i64 %705, %708
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %704, i64 %709
  %711 = call double @d_imag(ptr noundef %710)
  store double %711, ptr %46, align 8, !tbaa !11
  %712 = load double, ptr %46, align 8, !tbaa !11
  %713 = fcmp oge double %712, 0.000000e+00
  br i1 %713, label %714, label %716

714:                                              ; preds = %702
  %715 = load double, ptr %46, align 8, !tbaa !11
  br label %719

716:                                              ; preds = %702
  %717 = load double, ptr %46, align 8, !tbaa !11
  %718 = fneg double %717
  br label %719

719:                                              ; preds = %716, %714
  %720 = phi double [ %715, %714 ], [ %718, %716 ]
  %721 = fadd double %703, %720
  store double %721, ptr %54, align 8, !tbaa !11
  %722 = load ptr, ptr %21, align 8, !tbaa !5
  %723 = load i64, ptr %722, align 8, !tbaa !9
  store i64 %723, ptr %42, align 8, !tbaa !9
  %724 = load i64, ptr %52, align 8, !tbaa !9
  %725 = add nsw i64 %724, 1
  store i64 %725, ptr %50, align 8, !tbaa !9
  br label %726

726:                                              ; preds = %774, %719
  %727 = load i64, ptr %50, align 8, !tbaa !9
  %728 = load i64, ptr %42, align 8, !tbaa !9
  %729 = icmp sle i64 %727, %728
  br i1 %729, label %730, label %777

730:                                              ; preds = %726
  %731 = load i64, ptr %50, align 8, !tbaa !9
  %732 = load i64, ptr %52, align 8, !tbaa !9
  %733 = load i64, ptr %34, align 8, !tbaa !9
  %734 = mul nsw i64 %732, %733
  %735 = add nsw i64 %731, %734
  store i64 %735, ptr %43, align 8, !tbaa !9
  %736 = load ptr, ptr %23, align 8, !tbaa !5
  %737 = load i64, ptr %43, align 8, !tbaa !9
  %738 = getelementptr inbounds %struct.doublecomplex, ptr %736, i64 %737
  %739 = getelementptr inbounds %struct.doublecomplex, ptr %738, i32 0, i32 0
  %740 = load double, ptr %739, align 8, !tbaa !16
  store double %740, ptr %45, align 8, !tbaa !11
  %741 = load double, ptr %45, align 8, !tbaa !11
  %742 = fcmp oge double %741, 0.000000e+00
  br i1 %742, label %743, label %745

743:                                              ; preds = %730
  %744 = load double, ptr %45, align 8, !tbaa !11
  br label %748

745:                                              ; preds = %730
  %746 = load double, ptr %45, align 8, !tbaa !11
  %747 = fneg double %746
  br label %748

748:                                              ; preds = %745, %743
  %749 = phi double [ %744, %743 ], [ %747, %745 ]
  %750 = load ptr, ptr %23, align 8, !tbaa !5
  %751 = load i64, ptr %50, align 8, !tbaa !9
  %752 = load i64, ptr %52, align 8, !tbaa !9
  %753 = load i64, ptr %34, align 8, !tbaa !9
  %754 = mul nsw i64 %752, %753
  %755 = add nsw i64 %751, %754
  %756 = getelementptr inbounds %struct.doublecomplex, ptr %750, i64 %755
  %757 = call double @d_imag(ptr noundef %756)
  store double %757, ptr %46, align 8, !tbaa !11
  %758 = load double, ptr %46, align 8, !tbaa !11
  %759 = fcmp oge double %758, 0.000000e+00
  br i1 %759, label %760, label %762

760:                                              ; preds = %748
  %761 = load double, ptr %46, align 8, !tbaa !11
  br label %765

762:                                              ; preds = %748
  %763 = load double, ptr %46, align 8, !tbaa !11
  %764 = fneg double %763
  br label %765

765:                                              ; preds = %762, %760
  %766 = phi double [ %761, %760 ], [ %764, %762 ]
  %767 = fadd double %749, %766
  %768 = load double, ptr %54, align 8, !tbaa !11
  %769 = load ptr, ptr %32, align 8, !tbaa !5
  %770 = load i64, ptr %50, align 8, !tbaa !9
  %771 = getelementptr inbounds double, ptr %769, i64 %770
  %772 = load double, ptr %771, align 8, !tbaa !11
  %773 = call double @llvm.fmuladd.f64(double %767, double %768, double %772)
  store double %773, ptr %771, align 8, !tbaa !11
  br label %774

774:                                              ; preds = %765
  %775 = load i64, ptr %50, align 8, !tbaa !9
  %776 = add nsw i64 %775, 1
  store i64 %776, ptr %50, align 8, !tbaa !9
  br label %726, !llvm.loop !26

777:                                              ; preds = %726
  %778 = load double, ptr %54, align 8, !tbaa !11
  %779 = load ptr, ptr %32, align 8, !tbaa !5
  %780 = load i64, ptr %52, align 8, !tbaa !9
  %781 = getelementptr inbounds double, ptr %779, i64 %780
  %782 = load double, ptr %781, align 8, !tbaa !11
  %783 = fadd double %782, %778
  store double %783, ptr %781, align 8, !tbaa !11
  br label %784

784:                                              ; preds = %777
  %785 = load i64, ptr %52, align 8, !tbaa !9
  %786 = add nsw i64 %785, 1
  store i64 %786, ptr %52, align 8, !tbaa !9
  br label %680, !llvm.loop !27

787:                                              ; preds = %680
  br label %788

788:                                              ; preds = %787, %676
  br label %789

789:                                              ; preds = %788, %569
  br label %1298

790:                                              ; preds = %349
  %791 = load i64, ptr %61, align 8, !tbaa !9
  %792 = icmp ne i64 %791, 0
  br i1 %792, label %793, label %1043

793:                                              ; preds = %790
  %794 = load i64, ptr %66, align 8, !tbaa !9
  %795 = icmp ne i64 %794, 0
  br i1 %795, label %796, label %900

796:                                              ; preds = %793
  %797 = load ptr, ptr %21, align 8, !tbaa !5
  %798 = load i64, ptr %797, align 8, !tbaa !9
  store i64 %798, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %799

799:                                              ; preds = %896, %796
  %800 = load i64, ptr %52, align 8, !tbaa !9
  %801 = load i64, ptr %41, align 8, !tbaa !9
  %802 = icmp sle i64 %800, %801
  br i1 %802, label %803, label %899

803:                                              ; preds = %799
  store double 0.000000e+00, ptr %53, align 8, !tbaa !11
  %804 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %804, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %805

805:                                              ; preds = %886, %803
  %806 = load i64, ptr %50, align 8, !tbaa !9
  %807 = load i64, ptr %42, align 8, !tbaa !9
  %808 = icmp sle i64 %806, %807
  br i1 %808, label %809, label %889

809:                                              ; preds = %805
  %810 = load i64, ptr %50, align 8, !tbaa !9
  %811 = load i64, ptr %52, align 8, !tbaa !9
  %812 = load i64, ptr %34, align 8, !tbaa !9
  %813 = mul nsw i64 %811, %812
  %814 = add nsw i64 %810, %813
  store i64 %814, ptr %43, align 8, !tbaa !9
  %815 = load i64, ptr %50, align 8, !tbaa !9
  %816 = load i64, ptr %51, align 8, !tbaa !9
  %817 = load i64, ptr %38, align 8, !tbaa !9
  %818 = mul nsw i64 %816, %817
  %819 = add nsw i64 %815, %818
  store i64 %819, ptr %44, align 8, !tbaa !9
  %820 = load ptr, ptr %23, align 8, !tbaa !5
  %821 = load i64, ptr %43, align 8, !tbaa !9
  %822 = getelementptr inbounds %struct.doublecomplex, ptr %820, i64 %821
  %823 = getelementptr inbounds %struct.doublecomplex, ptr %822, i32 0, i32 0
  %824 = load double, ptr %823, align 8, !tbaa !16
  store double %824, ptr %45, align 8, !tbaa !11
  %825 = load double, ptr %45, align 8, !tbaa !11
  %826 = fcmp oge double %825, 0.000000e+00
  br i1 %826, label %827, label %829

827:                                              ; preds = %809
  %828 = load double, ptr %45, align 8, !tbaa !11
  br label %832

829:                                              ; preds = %809
  %830 = load double, ptr %45, align 8, !tbaa !11
  %831 = fneg double %830
  br label %832

832:                                              ; preds = %829, %827
  %833 = phi double [ %828, %827 ], [ %831, %829 ]
  %834 = load ptr, ptr %23, align 8, !tbaa !5
  %835 = load i64, ptr %50, align 8, !tbaa !9
  %836 = load i64, ptr %52, align 8, !tbaa !9
  %837 = load i64, ptr %34, align 8, !tbaa !9
  %838 = mul nsw i64 %836, %837
  %839 = add nsw i64 %835, %838
  %840 = getelementptr inbounds %struct.doublecomplex, ptr %834, i64 %839
  %841 = call double @d_imag(ptr noundef %840)
  store double %841, ptr %46, align 8, !tbaa !11
  %842 = load double, ptr %46, align 8, !tbaa !11
  %843 = fcmp oge double %842, 0.000000e+00
  br i1 %843, label %844, label %846

844:                                              ; preds = %832
  %845 = load double, ptr %46, align 8, !tbaa !11
  br label %849

846:                                              ; preds = %832
  %847 = load double, ptr %46, align 8, !tbaa !11
  %848 = fneg double %847
  br label %849

849:                                              ; preds = %846, %844
  %850 = phi double [ %845, %844 ], [ %848, %846 ]
  %851 = fadd double %833, %850
  %852 = load ptr, ptr %27, align 8, !tbaa !5
  %853 = load i64, ptr %44, align 8, !tbaa !9
  %854 = getelementptr inbounds %struct.doublecomplex, ptr %852, i64 %853
  %855 = getelementptr inbounds %struct.doublecomplex, ptr %854, i32 0, i32 0
  %856 = load double, ptr %855, align 8, !tbaa !16
  store double %856, ptr %47, align 8, !tbaa !11
  %857 = load double, ptr %47, align 8, !tbaa !11
  %858 = fcmp oge double %857, 0.000000e+00
  br i1 %858, label %859, label %861

859:                                              ; preds = %849
  %860 = load double, ptr %47, align 8, !tbaa !11
  br label %864

861:                                              ; preds = %849
  %862 = load double, ptr %47, align 8, !tbaa !11
  %863 = fneg double %862
  br label %864

864:                                              ; preds = %861, %859
  %865 = phi double [ %860, %859 ], [ %863, %861 ]
  %866 = load ptr, ptr %27, align 8, !tbaa !5
  %867 = load i64, ptr %50, align 8, !tbaa !9
  %868 = load i64, ptr %51, align 8, !tbaa !9
  %869 = load i64, ptr %38, align 8, !tbaa !9
  %870 = mul nsw i64 %868, %869
  %871 = add nsw i64 %867, %870
  %872 = getelementptr inbounds %struct.doublecomplex, ptr %866, i64 %871
  %873 = call double @d_imag(ptr noundef %872)
  store double %873, ptr %48, align 8, !tbaa !11
  %874 = load double, ptr %48, align 8, !tbaa !11
  %875 = fcmp oge double %874, 0.000000e+00
  br i1 %875, label %876, label %878

876:                                              ; preds = %864
  %877 = load double, ptr %48, align 8, !tbaa !11
  br label %881

878:                                              ; preds = %864
  %879 = load double, ptr %48, align 8, !tbaa !11
  %880 = fneg double %879
  br label %881

881:                                              ; preds = %878, %876
  %882 = phi double [ %877, %876 ], [ %880, %878 ]
  %883 = fadd double %865, %882
  %884 = load double, ptr %53, align 8, !tbaa !11
  %885 = call double @llvm.fmuladd.f64(double %851, double %883, double %884)
  store double %885, ptr %53, align 8, !tbaa !11
  br label %886

886:                                              ; preds = %881
  %887 = load i64, ptr %50, align 8, !tbaa !9
  %888 = add nsw i64 %887, 1
  store i64 %888, ptr %50, align 8, !tbaa !9
  br label %805, !llvm.loop !28

889:                                              ; preds = %805
  %890 = load double, ptr %53, align 8, !tbaa !11
  %891 = load ptr, ptr %32, align 8, !tbaa !5
  %892 = load i64, ptr %52, align 8, !tbaa !9
  %893 = getelementptr inbounds double, ptr %891, i64 %892
  %894 = load double, ptr %893, align 8, !tbaa !11
  %895 = fadd double %894, %890
  store double %895, ptr %893, align 8, !tbaa !11
  br label %896

896:                                              ; preds = %889
  %897 = load i64, ptr %52, align 8, !tbaa !9
  %898 = add nsw i64 %897, 1
  store i64 %898, ptr %52, align 8, !tbaa !9
  br label %799, !llvm.loop !29

899:                                              ; preds = %799
  br label %1042

900:                                              ; preds = %793
  %901 = load ptr, ptr %21, align 8, !tbaa !5
  %902 = load i64, ptr %901, align 8, !tbaa !9
  store i64 %902, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %903

903:                                              ; preds = %1038, %900
  %904 = load i64, ptr %52, align 8, !tbaa !9
  %905 = load i64, ptr %41, align 8, !tbaa !9
  %906 = icmp sle i64 %904, %905
  br i1 %906, label %907, label %1041

907:                                              ; preds = %903
  %908 = load i64, ptr %52, align 8, !tbaa !9
  %909 = load i64, ptr %51, align 8, !tbaa !9
  %910 = load i64, ptr %38, align 8, !tbaa !9
  %911 = mul nsw i64 %909, %910
  %912 = add nsw i64 %908, %911
  store i64 %912, ptr %42, align 8, !tbaa !9
  %913 = load ptr, ptr %27, align 8, !tbaa !5
  %914 = load i64, ptr %42, align 8, !tbaa !9
  %915 = getelementptr inbounds %struct.doublecomplex, ptr %913, i64 %914
  %916 = getelementptr inbounds %struct.doublecomplex, ptr %915, i32 0, i32 0
  %917 = load double, ptr %916, align 8, !tbaa !16
  store double %917, ptr %45, align 8, !tbaa !11
  %918 = load double, ptr %45, align 8, !tbaa !11
  %919 = fcmp oge double %918, 0.000000e+00
  br i1 %919, label %920, label %922

920:                                              ; preds = %907
  %921 = load double, ptr %45, align 8, !tbaa !11
  br label %925

922:                                              ; preds = %907
  %923 = load double, ptr %45, align 8, !tbaa !11
  %924 = fneg double %923
  br label %925

925:                                              ; preds = %922, %920
  %926 = phi double [ %921, %920 ], [ %924, %922 ]
  %927 = load ptr, ptr %27, align 8, !tbaa !5
  %928 = load i64, ptr %52, align 8, !tbaa !9
  %929 = load i64, ptr %51, align 8, !tbaa !9
  %930 = load i64, ptr %38, align 8, !tbaa !9
  %931 = mul nsw i64 %929, %930
  %932 = add nsw i64 %928, %931
  %933 = getelementptr inbounds %struct.doublecomplex, ptr %927, i64 %932
  %934 = call double @d_imag(ptr noundef %933)
  store double %934, ptr %46, align 8, !tbaa !11
  %935 = load double, ptr %46, align 8, !tbaa !11
  %936 = fcmp oge double %935, 0.000000e+00
  br i1 %936, label %937, label %939

937:                                              ; preds = %925
  %938 = load double, ptr %46, align 8, !tbaa !11
  br label %942

939:                                              ; preds = %925
  %940 = load double, ptr %46, align 8, !tbaa !11
  %941 = fneg double %940
  br label %942

942:                                              ; preds = %939, %937
  %943 = phi double [ %938, %937 ], [ %941, %939 ]
  %944 = fadd double %926, %943
  store double %944, ptr %53, align 8, !tbaa !11
  %945 = load i64, ptr %52, align 8, !tbaa !9
  %946 = sub nsw i64 %945, 1
  store i64 %946, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %947

947:                                              ; preds = %1028, %942
  %948 = load i64, ptr %50, align 8, !tbaa !9
  %949 = load i64, ptr %42, align 8, !tbaa !9
  %950 = icmp sle i64 %948, %949
  br i1 %950, label %951, label %1031

951:                                              ; preds = %947
  %952 = load i64, ptr %50, align 8, !tbaa !9
  %953 = load i64, ptr %52, align 8, !tbaa !9
  %954 = load i64, ptr %34, align 8, !tbaa !9
  %955 = mul nsw i64 %953, %954
  %956 = add nsw i64 %952, %955
  store i64 %956, ptr %43, align 8, !tbaa !9
  %957 = load i64, ptr %50, align 8, !tbaa !9
  %958 = load i64, ptr %51, align 8, !tbaa !9
  %959 = load i64, ptr %38, align 8, !tbaa !9
  %960 = mul nsw i64 %958, %959
  %961 = add nsw i64 %957, %960
  store i64 %961, ptr %44, align 8, !tbaa !9
  %962 = load ptr, ptr %23, align 8, !tbaa !5
  %963 = load i64, ptr %43, align 8, !tbaa !9
  %964 = getelementptr inbounds %struct.doublecomplex, ptr %962, i64 %963
  %965 = getelementptr inbounds %struct.doublecomplex, ptr %964, i32 0, i32 0
  %966 = load double, ptr %965, align 8, !tbaa !16
  store double %966, ptr %45, align 8, !tbaa !11
  %967 = load double, ptr %45, align 8, !tbaa !11
  %968 = fcmp oge double %967, 0.000000e+00
  br i1 %968, label %969, label %971

969:                                              ; preds = %951
  %970 = load double, ptr %45, align 8, !tbaa !11
  br label %974

971:                                              ; preds = %951
  %972 = load double, ptr %45, align 8, !tbaa !11
  %973 = fneg double %972
  br label %974

974:                                              ; preds = %971, %969
  %975 = phi double [ %970, %969 ], [ %973, %971 ]
  %976 = load ptr, ptr %23, align 8, !tbaa !5
  %977 = load i64, ptr %50, align 8, !tbaa !9
  %978 = load i64, ptr %52, align 8, !tbaa !9
  %979 = load i64, ptr %34, align 8, !tbaa !9
  %980 = mul nsw i64 %978, %979
  %981 = add nsw i64 %977, %980
  %982 = getelementptr inbounds %struct.doublecomplex, ptr %976, i64 %981
  %983 = call double @d_imag(ptr noundef %982)
  store double %983, ptr %46, align 8, !tbaa !11
  %984 = load double, ptr %46, align 8, !tbaa !11
  %985 = fcmp oge double %984, 0.000000e+00
  br i1 %985, label %986, label %988

986:                                              ; preds = %974
  %987 = load double, ptr %46, align 8, !tbaa !11
  br label %991

988:                                              ; preds = %974
  %989 = load double, ptr %46, align 8, !tbaa !11
  %990 = fneg double %989
  br label %991

991:                                              ; preds = %988, %986
  %992 = phi double [ %987, %986 ], [ %990, %988 ]
  %993 = fadd double %975, %992
  %994 = load ptr, ptr %27, align 8, !tbaa !5
  %995 = load i64, ptr %44, align 8, !tbaa !9
  %996 = getelementptr inbounds %struct.doublecomplex, ptr %994, i64 %995
  %997 = getelementptr inbounds %struct.doublecomplex, ptr %996, i32 0, i32 0
  %998 = load double, ptr %997, align 8, !tbaa !16
  store double %998, ptr %47, align 8, !tbaa !11
  %999 = load double, ptr %47, align 8, !tbaa !11
  %1000 = fcmp oge double %999, 0.000000e+00
  br i1 %1000, label %1001, label %1003

1001:                                             ; preds = %991
  %1002 = load double, ptr %47, align 8, !tbaa !11
  br label %1006

1003:                                             ; preds = %991
  %1004 = load double, ptr %47, align 8, !tbaa !11
  %1005 = fneg double %1004
  br label %1006

1006:                                             ; preds = %1003, %1001
  %1007 = phi double [ %1002, %1001 ], [ %1005, %1003 ]
  %1008 = load ptr, ptr %27, align 8, !tbaa !5
  %1009 = load i64, ptr %50, align 8, !tbaa !9
  %1010 = load i64, ptr %51, align 8, !tbaa !9
  %1011 = load i64, ptr %38, align 8, !tbaa !9
  %1012 = mul nsw i64 %1010, %1011
  %1013 = add nsw i64 %1009, %1012
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %1008, i64 %1013
  %1015 = call double @d_imag(ptr noundef %1014)
  store double %1015, ptr %48, align 8, !tbaa !11
  %1016 = load double, ptr %48, align 8, !tbaa !11
  %1017 = fcmp oge double %1016, 0.000000e+00
  br i1 %1017, label %1018, label %1020

1018:                                             ; preds = %1006
  %1019 = load double, ptr %48, align 8, !tbaa !11
  br label %1023

1020:                                             ; preds = %1006
  %1021 = load double, ptr %48, align 8, !tbaa !11
  %1022 = fneg double %1021
  br label %1023

1023:                                             ; preds = %1020, %1018
  %1024 = phi double [ %1019, %1018 ], [ %1022, %1020 ]
  %1025 = fadd double %1007, %1024
  %1026 = load double, ptr %53, align 8, !tbaa !11
  %1027 = call double @llvm.fmuladd.f64(double %993, double %1025, double %1026)
  store double %1027, ptr %53, align 8, !tbaa !11
  br label %1028

1028:                                             ; preds = %1023
  %1029 = load i64, ptr %50, align 8, !tbaa !9
  %1030 = add nsw i64 %1029, 1
  store i64 %1030, ptr %50, align 8, !tbaa !9
  br label %947, !llvm.loop !30

1031:                                             ; preds = %947
  %1032 = load double, ptr %53, align 8, !tbaa !11
  %1033 = load ptr, ptr %32, align 8, !tbaa !5
  %1034 = load i64, ptr %52, align 8, !tbaa !9
  %1035 = getelementptr inbounds double, ptr %1033, i64 %1034
  %1036 = load double, ptr %1035, align 8, !tbaa !11
  %1037 = fadd double %1036, %1032
  store double %1037, ptr %1035, align 8, !tbaa !11
  br label %1038

1038:                                             ; preds = %1031
  %1039 = load i64, ptr %52, align 8, !tbaa !9
  %1040 = add nsw i64 %1039, 1
  store i64 %1040, ptr %52, align 8, !tbaa !9
  br label %903, !llvm.loop !31

1041:                                             ; preds = %903
  br label %1042

1042:                                             ; preds = %1041, %899
  br label %1297

1043:                                             ; preds = %790
  %1044 = load i64, ptr %66, align 8, !tbaa !9
  %1045 = icmp ne i64 %1044, 0
  br i1 %1045, label %1046, label %1152

1046:                                             ; preds = %1043
  %1047 = load ptr, ptr %21, align 8, !tbaa !5
  %1048 = load i64, ptr %1047, align 8, !tbaa !9
  store i64 %1048, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %1049

1049:                                             ; preds = %1148, %1046
  %1050 = load i64, ptr %52, align 8, !tbaa !9
  %1051 = load i64, ptr %41, align 8, !tbaa !9
  %1052 = icmp sle i64 %1050, %1051
  br i1 %1052, label %1053, label %1151

1053:                                             ; preds = %1049
  store double 0.000000e+00, ptr %53, align 8, !tbaa !11
  %1054 = load ptr, ptr %21, align 8, !tbaa !5
  %1055 = load i64, ptr %1054, align 8, !tbaa !9
  store i64 %1055, ptr %42, align 8, !tbaa !9
  %1056 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %1056, ptr %50, align 8, !tbaa !9
  br label %1057

1057:                                             ; preds = %1138, %1053
  %1058 = load i64, ptr %50, align 8, !tbaa !9
  %1059 = load i64, ptr %42, align 8, !tbaa !9
  %1060 = icmp sle i64 %1058, %1059
  br i1 %1060, label %1061, label %1141

1061:                                             ; preds = %1057
  %1062 = load i64, ptr %50, align 8, !tbaa !9
  %1063 = load i64, ptr %52, align 8, !tbaa !9
  %1064 = load i64, ptr %34, align 8, !tbaa !9
  %1065 = mul nsw i64 %1063, %1064
  %1066 = add nsw i64 %1062, %1065
  store i64 %1066, ptr %43, align 8, !tbaa !9
  %1067 = load i64, ptr %50, align 8, !tbaa !9
  %1068 = load i64, ptr %51, align 8, !tbaa !9
  %1069 = load i64, ptr %38, align 8, !tbaa !9
  %1070 = mul nsw i64 %1068, %1069
  %1071 = add nsw i64 %1067, %1070
  store i64 %1071, ptr %44, align 8, !tbaa !9
  %1072 = load ptr, ptr %23, align 8, !tbaa !5
  %1073 = load i64, ptr %43, align 8, !tbaa !9
  %1074 = getelementptr inbounds %struct.doublecomplex, ptr %1072, i64 %1073
  %1075 = getelementptr inbounds %struct.doublecomplex, ptr %1074, i32 0, i32 0
  %1076 = load double, ptr %1075, align 8, !tbaa !16
  store double %1076, ptr %45, align 8, !tbaa !11
  %1077 = load double, ptr %45, align 8, !tbaa !11
  %1078 = fcmp oge double %1077, 0.000000e+00
  br i1 %1078, label %1079, label %1081

1079:                                             ; preds = %1061
  %1080 = load double, ptr %45, align 8, !tbaa !11
  br label %1084

1081:                                             ; preds = %1061
  %1082 = load double, ptr %45, align 8, !tbaa !11
  %1083 = fneg double %1082
  br label %1084

1084:                                             ; preds = %1081, %1079
  %1085 = phi double [ %1080, %1079 ], [ %1083, %1081 ]
  %1086 = load ptr, ptr %23, align 8, !tbaa !5
  %1087 = load i64, ptr %50, align 8, !tbaa !9
  %1088 = load i64, ptr %52, align 8, !tbaa !9
  %1089 = load i64, ptr %34, align 8, !tbaa !9
  %1090 = mul nsw i64 %1088, %1089
  %1091 = add nsw i64 %1087, %1090
  %1092 = getelementptr inbounds %struct.doublecomplex, ptr %1086, i64 %1091
  %1093 = call double @d_imag(ptr noundef %1092)
  store double %1093, ptr %46, align 8, !tbaa !11
  %1094 = load double, ptr %46, align 8, !tbaa !11
  %1095 = fcmp oge double %1094, 0.000000e+00
  br i1 %1095, label %1096, label %1098

1096:                                             ; preds = %1084
  %1097 = load double, ptr %46, align 8, !tbaa !11
  br label %1101

1098:                                             ; preds = %1084
  %1099 = load double, ptr %46, align 8, !tbaa !11
  %1100 = fneg double %1099
  br label %1101

1101:                                             ; preds = %1098, %1096
  %1102 = phi double [ %1097, %1096 ], [ %1100, %1098 ]
  %1103 = fadd double %1085, %1102
  %1104 = load ptr, ptr %27, align 8, !tbaa !5
  %1105 = load i64, ptr %44, align 8, !tbaa !9
  %1106 = getelementptr inbounds %struct.doublecomplex, ptr %1104, i64 %1105
  %1107 = getelementptr inbounds %struct.doublecomplex, ptr %1106, i32 0, i32 0
  %1108 = load double, ptr %1107, align 8, !tbaa !16
  store double %1108, ptr %47, align 8, !tbaa !11
  %1109 = load double, ptr %47, align 8, !tbaa !11
  %1110 = fcmp oge double %1109, 0.000000e+00
  br i1 %1110, label %1111, label %1113

1111:                                             ; preds = %1101
  %1112 = load double, ptr %47, align 8, !tbaa !11
  br label %1116

1113:                                             ; preds = %1101
  %1114 = load double, ptr %47, align 8, !tbaa !11
  %1115 = fneg double %1114
  br label %1116

1116:                                             ; preds = %1113, %1111
  %1117 = phi double [ %1112, %1111 ], [ %1115, %1113 ]
  %1118 = load ptr, ptr %27, align 8, !tbaa !5
  %1119 = load i64, ptr %50, align 8, !tbaa !9
  %1120 = load i64, ptr %51, align 8, !tbaa !9
  %1121 = load i64, ptr %38, align 8, !tbaa !9
  %1122 = mul nsw i64 %1120, %1121
  %1123 = add nsw i64 %1119, %1122
  %1124 = getelementptr inbounds %struct.doublecomplex, ptr %1118, i64 %1123
  %1125 = call double @d_imag(ptr noundef %1124)
  store double %1125, ptr %48, align 8, !tbaa !11
  %1126 = load double, ptr %48, align 8, !tbaa !11
  %1127 = fcmp oge double %1126, 0.000000e+00
  br i1 %1127, label %1128, label %1130

1128:                                             ; preds = %1116
  %1129 = load double, ptr %48, align 8, !tbaa !11
  br label %1133

1130:                                             ; preds = %1116
  %1131 = load double, ptr %48, align 8, !tbaa !11
  %1132 = fneg double %1131
  br label %1133

1133:                                             ; preds = %1130, %1128
  %1134 = phi double [ %1129, %1128 ], [ %1132, %1130 ]
  %1135 = fadd double %1117, %1134
  %1136 = load double, ptr %53, align 8, !tbaa !11
  %1137 = call double @llvm.fmuladd.f64(double %1103, double %1135, double %1136)
  store double %1137, ptr %53, align 8, !tbaa !11
  br label %1138

1138:                                             ; preds = %1133
  %1139 = load i64, ptr %50, align 8, !tbaa !9
  %1140 = add nsw i64 %1139, 1
  store i64 %1140, ptr %50, align 8, !tbaa !9
  br label %1057, !llvm.loop !32

1141:                                             ; preds = %1057
  %1142 = load double, ptr %53, align 8, !tbaa !11
  %1143 = load ptr, ptr %32, align 8, !tbaa !5
  %1144 = load i64, ptr %52, align 8, !tbaa !9
  %1145 = getelementptr inbounds double, ptr %1143, i64 %1144
  %1146 = load double, ptr %1145, align 8, !tbaa !11
  %1147 = fadd double %1146, %1142
  store double %1147, ptr %1145, align 8, !tbaa !11
  br label %1148

1148:                                             ; preds = %1141
  %1149 = load i64, ptr %52, align 8, !tbaa !9
  %1150 = add nsw i64 %1149, 1
  store i64 %1150, ptr %52, align 8, !tbaa !9
  br label %1049, !llvm.loop !33

1151:                                             ; preds = %1049
  br label %1296

1152:                                             ; preds = %1043
  %1153 = load ptr, ptr %21, align 8, !tbaa !5
  %1154 = load i64, ptr %1153, align 8, !tbaa !9
  store i64 %1154, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %52, align 8, !tbaa !9
  br label %1155

1155:                                             ; preds = %1292, %1152
  %1156 = load i64, ptr %52, align 8, !tbaa !9
  %1157 = load i64, ptr %41, align 8, !tbaa !9
  %1158 = icmp sle i64 %1156, %1157
  br i1 %1158, label %1159, label %1295

1159:                                             ; preds = %1155
  %1160 = load i64, ptr %52, align 8, !tbaa !9
  %1161 = load i64, ptr %51, align 8, !tbaa !9
  %1162 = load i64, ptr %38, align 8, !tbaa !9
  %1163 = mul nsw i64 %1161, %1162
  %1164 = add nsw i64 %1160, %1163
  store i64 %1164, ptr %42, align 8, !tbaa !9
  %1165 = load ptr, ptr %27, align 8, !tbaa !5
  %1166 = load i64, ptr %42, align 8, !tbaa !9
  %1167 = getelementptr inbounds %struct.doublecomplex, ptr %1165, i64 %1166
  %1168 = getelementptr inbounds %struct.doublecomplex, ptr %1167, i32 0, i32 0
  %1169 = load double, ptr %1168, align 8, !tbaa !16
  store double %1169, ptr %45, align 8, !tbaa !11
  %1170 = load double, ptr %45, align 8, !tbaa !11
  %1171 = fcmp oge double %1170, 0.000000e+00
  br i1 %1171, label %1172, label %1174

1172:                                             ; preds = %1159
  %1173 = load double, ptr %45, align 8, !tbaa !11
  br label %1177

1174:                                             ; preds = %1159
  %1175 = load double, ptr %45, align 8, !tbaa !11
  %1176 = fneg double %1175
  br label %1177

1177:                                             ; preds = %1174, %1172
  %1178 = phi double [ %1173, %1172 ], [ %1176, %1174 ]
  %1179 = load ptr, ptr %27, align 8, !tbaa !5
  %1180 = load i64, ptr %52, align 8, !tbaa !9
  %1181 = load i64, ptr %51, align 8, !tbaa !9
  %1182 = load i64, ptr %38, align 8, !tbaa !9
  %1183 = mul nsw i64 %1181, %1182
  %1184 = add nsw i64 %1180, %1183
  %1185 = getelementptr inbounds %struct.doublecomplex, ptr %1179, i64 %1184
  %1186 = call double @d_imag(ptr noundef %1185)
  store double %1186, ptr %46, align 8, !tbaa !11
  %1187 = load double, ptr %46, align 8, !tbaa !11
  %1188 = fcmp oge double %1187, 0.000000e+00
  br i1 %1188, label %1189, label %1191

1189:                                             ; preds = %1177
  %1190 = load double, ptr %46, align 8, !tbaa !11
  br label %1194

1191:                                             ; preds = %1177
  %1192 = load double, ptr %46, align 8, !tbaa !11
  %1193 = fneg double %1192
  br label %1194

1194:                                             ; preds = %1191, %1189
  %1195 = phi double [ %1190, %1189 ], [ %1193, %1191 ]
  %1196 = fadd double %1178, %1195
  store double %1196, ptr %53, align 8, !tbaa !11
  %1197 = load ptr, ptr %21, align 8, !tbaa !5
  %1198 = load i64, ptr %1197, align 8, !tbaa !9
  store i64 %1198, ptr %42, align 8, !tbaa !9
  %1199 = load i64, ptr %52, align 8, !tbaa !9
  %1200 = add nsw i64 %1199, 1
  store i64 %1200, ptr %50, align 8, !tbaa !9
  br label %1201

1201:                                             ; preds = %1282, %1194
  %1202 = load i64, ptr %50, align 8, !tbaa !9
  %1203 = load i64, ptr %42, align 8, !tbaa !9
  %1204 = icmp sle i64 %1202, %1203
  br i1 %1204, label %1205, label %1285

1205:                                             ; preds = %1201
  %1206 = load i64, ptr %50, align 8, !tbaa !9
  %1207 = load i64, ptr %52, align 8, !tbaa !9
  %1208 = load i64, ptr %34, align 8, !tbaa !9
  %1209 = mul nsw i64 %1207, %1208
  %1210 = add nsw i64 %1206, %1209
  store i64 %1210, ptr %43, align 8, !tbaa !9
  %1211 = load i64, ptr %50, align 8, !tbaa !9
  %1212 = load i64, ptr %51, align 8, !tbaa !9
  %1213 = load i64, ptr %38, align 8, !tbaa !9
  %1214 = mul nsw i64 %1212, %1213
  %1215 = add nsw i64 %1211, %1214
  store i64 %1215, ptr %44, align 8, !tbaa !9
  %1216 = load ptr, ptr %23, align 8, !tbaa !5
  %1217 = load i64, ptr %43, align 8, !tbaa !9
  %1218 = getelementptr inbounds %struct.doublecomplex, ptr %1216, i64 %1217
  %1219 = getelementptr inbounds %struct.doublecomplex, ptr %1218, i32 0, i32 0
  %1220 = load double, ptr %1219, align 8, !tbaa !16
  store double %1220, ptr %45, align 8, !tbaa !11
  %1221 = load double, ptr %45, align 8, !tbaa !11
  %1222 = fcmp oge double %1221, 0.000000e+00
  br i1 %1222, label %1223, label %1225

1223:                                             ; preds = %1205
  %1224 = load double, ptr %45, align 8, !tbaa !11
  br label %1228

1225:                                             ; preds = %1205
  %1226 = load double, ptr %45, align 8, !tbaa !11
  %1227 = fneg double %1226
  br label %1228

1228:                                             ; preds = %1225, %1223
  %1229 = phi double [ %1224, %1223 ], [ %1227, %1225 ]
  %1230 = load ptr, ptr %23, align 8, !tbaa !5
  %1231 = load i64, ptr %50, align 8, !tbaa !9
  %1232 = load i64, ptr %52, align 8, !tbaa !9
  %1233 = load i64, ptr %34, align 8, !tbaa !9
  %1234 = mul nsw i64 %1232, %1233
  %1235 = add nsw i64 %1231, %1234
  %1236 = getelementptr inbounds %struct.doublecomplex, ptr %1230, i64 %1235
  %1237 = call double @d_imag(ptr noundef %1236)
  store double %1237, ptr %46, align 8, !tbaa !11
  %1238 = load double, ptr %46, align 8, !tbaa !11
  %1239 = fcmp oge double %1238, 0.000000e+00
  br i1 %1239, label %1240, label %1242

1240:                                             ; preds = %1228
  %1241 = load double, ptr %46, align 8, !tbaa !11
  br label %1245

1242:                                             ; preds = %1228
  %1243 = load double, ptr %46, align 8, !tbaa !11
  %1244 = fneg double %1243
  br label %1245

1245:                                             ; preds = %1242, %1240
  %1246 = phi double [ %1241, %1240 ], [ %1244, %1242 ]
  %1247 = fadd double %1229, %1246
  %1248 = load ptr, ptr %27, align 8, !tbaa !5
  %1249 = load i64, ptr %44, align 8, !tbaa !9
  %1250 = getelementptr inbounds %struct.doublecomplex, ptr %1248, i64 %1249
  %1251 = getelementptr inbounds %struct.doublecomplex, ptr %1250, i32 0, i32 0
  %1252 = load double, ptr %1251, align 8, !tbaa !16
  store double %1252, ptr %47, align 8, !tbaa !11
  %1253 = load double, ptr %47, align 8, !tbaa !11
  %1254 = fcmp oge double %1253, 0.000000e+00
  br i1 %1254, label %1255, label %1257

1255:                                             ; preds = %1245
  %1256 = load double, ptr %47, align 8, !tbaa !11
  br label %1260

1257:                                             ; preds = %1245
  %1258 = load double, ptr %47, align 8, !tbaa !11
  %1259 = fneg double %1258
  br label %1260

1260:                                             ; preds = %1257, %1255
  %1261 = phi double [ %1256, %1255 ], [ %1259, %1257 ]
  %1262 = load ptr, ptr %27, align 8, !tbaa !5
  %1263 = load i64, ptr %50, align 8, !tbaa !9
  %1264 = load i64, ptr %51, align 8, !tbaa !9
  %1265 = load i64, ptr %38, align 8, !tbaa !9
  %1266 = mul nsw i64 %1264, %1265
  %1267 = add nsw i64 %1263, %1266
  %1268 = getelementptr inbounds %struct.doublecomplex, ptr %1262, i64 %1267
  %1269 = call double @d_imag(ptr noundef %1268)
  store double %1269, ptr %48, align 8, !tbaa !11
  %1270 = load double, ptr %48, align 8, !tbaa !11
  %1271 = fcmp oge double %1270, 0.000000e+00
  br i1 %1271, label %1272, label %1274

1272:                                             ; preds = %1260
  %1273 = load double, ptr %48, align 8, !tbaa !11
  br label %1277

1274:                                             ; preds = %1260
  %1275 = load double, ptr %48, align 8, !tbaa !11
  %1276 = fneg double %1275
  br label %1277

1277:                                             ; preds = %1274, %1272
  %1278 = phi double [ %1273, %1272 ], [ %1276, %1274 ]
  %1279 = fadd double %1261, %1278
  %1280 = load double, ptr %53, align 8, !tbaa !11
  %1281 = call double @llvm.fmuladd.f64(double %1247, double %1279, double %1280)
  store double %1281, ptr %53, align 8, !tbaa !11
  br label %1282

1282:                                             ; preds = %1277
  %1283 = load i64, ptr %50, align 8, !tbaa !9
  %1284 = add nsw i64 %1283, 1
  store i64 %1284, ptr %50, align 8, !tbaa !9
  br label %1201, !llvm.loop !34

1285:                                             ; preds = %1201
  %1286 = load double, ptr %53, align 8, !tbaa !11
  %1287 = load ptr, ptr %32, align 8, !tbaa !5
  %1288 = load i64, ptr %52, align 8, !tbaa !9
  %1289 = getelementptr inbounds double, ptr %1287, i64 %1288
  %1290 = load double, ptr %1289, align 8, !tbaa !11
  %1291 = fadd double %1290, %1286
  store double %1291, ptr %1289, align 8, !tbaa !11
  br label %1292

1292:                                             ; preds = %1285
  %1293 = load i64, ptr %52, align 8, !tbaa !9
  %1294 = add nsw i64 %1293, 1
  store i64 %1294, ptr %52, align 8, !tbaa !9
  br label %1155, !llvm.loop !35

1295:                                             ; preds = %1155
  br label %1296

1296:                                             ; preds = %1295, %1151
  br label %1297

1297:                                             ; preds = %1296, %1042
  br label %1298

1298:                                             ; preds = %1297, %789
  store double 0.000000e+00, ptr %53, align 8, !tbaa !11
  %1299 = load ptr, ptr %21, align 8, !tbaa !5
  %1300 = load i64, ptr %1299, align 8, !tbaa !9
  store i64 %1300, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %1301

1301:                                             ; preds = %1407, %1298
  %1302 = load i64, ptr %50, align 8, !tbaa !9
  %1303 = load i64, ptr %41, align 8, !tbaa !9
  %1304 = icmp sle i64 %1302, %1303
  br i1 %1304, label %1305, label %1410

1305:                                             ; preds = %1301
  %1306 = load ptr, ptr %32, align 8, !tbaa !5
  %1307 = load i64, ptr %50, align 8, !tbaa !9
  %1308 = getelementptr inbounds double, ptr %1306, i64 %1307
  %1309 = load double, ptr %1308, align 8, !tbaa !11
  %1310 = load double, ptr %59, align 8, !tbaa !11
  %1311 = fcmp ogt double %1309, %1310
  br i1 %1311, label %1312, label %1357

1312:                                             ; preds = %1305
  %1313 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1313, ptr %42, align 8, !tbaa !9
  %1314 = load double, ptr %53, align 8, !tbaa !11
  store double %1314, ptr %47, align 8, !tbaa !11
  %1315 = load ptr, ptr %31, align 8, !tbaa !5
  %1316 = load i64, ptr %42, align 8, !tbaa !9
  %1317 = getelementptr inbounds %struct.doublecomplex, ptr %1315, i64 %1316
  %1318 = getelementptr inbounds %struct.doublecomplex, ptr %1317, i32 0, i32 0
  %1319 = load double, ptr %1318, align 8, !tbaa !16
  store double %1319, ptr %45, align 8, !tbaa !11
  %1320 = load double, ptr %45, align 8, !tbaa !11
  %1321 = fcmp oge double %1320, 0.000000e+00
  br i1 %1321, label %1322, label %1324

1322:                                             ; preds = %1312
  %1323 = load double, ptr %45, align 8, !tbaa !11
  br label %1327

1324:                                             ; preds = %1312
  %1325 = load double, ptr %45, align 8, !tbaa !11
  %1326 = fneg double %1325
  br label %1327

1327:                                             ; preds = %1324, %1322
  %1328 = phi double [ %1323, %1322 ], [ %1326, %1324 ]
  %1329 = load ptr, ptr %31, align 8, !tbaa !5
  %1330 = load i64, ptr %50, align 8, !tbaa !9
  %1331 = getelementptr inbounds %struct.doublecomplex, ptr %1329, i64 %1330
  %1332 = call double @d_imag(ptr noundef %1331)
  store double %1332, ptr %46, align 8, !tbaa !11
  %1333 = load double, ptr %46, align 8, !tbaa !11
  %1334 = fcmp oge double %1333, 0.000000e+00
  br i1 %1334, label %1335, label %1337

1335:                                             ; preds = %1327
  %1336 = load double, ptr %46, align 8, !tbaa !11
  br label %1340

1337:                                             ; preds = %1327
  %1338 = load double, ptr %46, align 8, !tbaa !11
  %1339 = fneg double %1338
  br label %1340

1340:                                             ; preds = %1337, %1335
  %1341 = phi double [ %1336, %1335 ], [ %1339, %1337 ]
  %1342 = fadd double %1328, %1341
  %1343 = load ptr, ptr %32, align 8, !tbaa !5
  %1344 = load i64, ptr %50, align 8, !tbaa !9
  %1345 = getelementptr inbounds double, ptr %1343, i64 %1344
  %1346 = load double, ptr %1345, align 8, !tbaa !11
  %1347 = fdiv double %1342, %1346
  store double %1347, ptr %48, align 8, !tbaa !11
  %1348 = load double, ptr %47, align 8, !tbaa !11
  %1349 = load double, ptr %48, align 8, !tbaa !11
  %1350 = fcmp oge double %1348, %1349
  br i1 %1350, label %1351, label %1353

1351:                                             ; preds = %1340
  %1352 = load double, ptr %47, align 8, !tbaa !11
  br label %1355

1353:                                             ; preds = %1340
  %1354 = load double, ptr %48, align 8, !tbaa !11
  br label %1355

1355:                                             ; preds = %1353, %1351
  %1356 = phi double [ %1352, %1351 ], [ %1354, %1353 ]
  store double %1356, ptr %53, align 8, !tbaa !11
  br label %1406

1357:                                             ; preds = %1305
  %1358 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1358, ptr %42, align 8, !tbaa !9
  %1359 = load double, ptr %53, align 8, !tbaa !11
  store double %1359, ptr %47, align 8, !tbaa !11
  %1360 = load ptr, ptr %31, align 8, !tbaa !5
  %1361 = load i64, ptr %42, align 8, !tbaa !9
  %1362 = getelementptr inbounds %struct.doublecomplex, ptr %1360, i64 %1361
  %1363 = getelementptr inbounds %struct.doublecomplex, ptr %1362, i32 0, i32 0
  %1364 = load double, ptr %1363, align 8, !tbaa !16
  store double %1364, ptr %45, align 8, !tbaa !11
  %1365 = load double, ptr %45, align 8, !tbaa !11
  %1366 = fcmp oge double %1365, 0.000000e+00
  br i1 %1366, label %1367, label %1369

1367:                                             ; preds = %1357
  %1368 = load double, ptr %45, align 8, !tbaa !11
  br label %1372

1369:                                             ; preds = %1357
  %1370 = load double, ptr %45, align 8, !tbaa !11
  %1371 = fneg double %1370
  br label %1372

1372:                                             ; preds = %1369, %1367
  %1373 = phi double [ %1368, %1367 ], [ %1371, %1369 ]
  %1374 = load ptr, ptr %31, align 8, !tbaa !5
  %1375 = load i64, ptr %50, align 8, !tbaa !9
  %1376 = getelementptr inbounds %struct.doublecomplex, ptr %1374, i64 %1375
  %1377 = call double @d_imag(ptr noundef %1376)
  store double %1377, ptr %46, align 8, !tbaa !11
  %1378 = load double, ptr %46, align 8, !tbaa !11
  %1379 = fcmp oge double %1378, 0.000000e+00
  br i1 %1379, label %1380, label %1382

1380:                                             ; preds = %1372
  %1381 = load double, ptr %46, align 8, !tbaa !11
  br label %1385

1382:                                             ; preds = %1372
  %1383 = load double, ptr %46, align 8, !tbaa !11
  %1384 = fneg double %1383
  br label %1385

1385:                                             ; preds = %1382, %1380
  %1386 = phi double [ %1381, %1380 ], [ %1384, %1382 ]
  %1387 = fadd double %1373, %1386
  %1388 = load double, ptr %58, align 8, !tbaa !11
  %1389 = fadd double %1387, %1388
  %1390 = load ptr, ptr %32, align 8, !tbaa !5
  %1391 = load i64, ptr %50, align 8, !tbaa !9
  %1392 = getelementptr inbounds double, ptr %1390, i64 %1391
  %1393 = load double, ptr %1392, align 8, !tbaa !11
  %1394 = load double, ptr %58, align 8, !tbaa !11
  %1395 = fadd double %1393, %1394
  %1396 = fdiv double %1389, %1395
  store double %1396, ptr %48, align 8, !tbaa !11
  %1397 = load double, ptr %47, align 8, !tbaa !11
  %1398 = load double, ptr %48, align 8, !tbaa !11
  %1399 = fcmp oge double %1397, %1398
  br i1 %1399, label %1400, label %1402

1400:                                             ; preds = %1385
  %1401 = load double, ptr %47, align 8, !tbaa !11
  br label %1404

1402:                                             ; preds = %1385
  %1403 = load double, ptr %48, align 8, !tbaa !11
  br label %1404

1404:                                             ; preds = %1402, %1400
  %1405 = phi double [ %1401, %1400 ], [ %1403, %1402 ]
  store double %1405, ptr %53, align 8, !tbaa !11
  br label %1406

1406:                                             ; preds = %1404, %1355
  br label %1407

1407:                                             ; preds = %1406
  %1408 = load i64, ptr %50, align 8, !tbaa !9
  %1409 = add nsw i64 %1408, 1
  store i64 %1409, ptr %50, align 8, !tbaa !9
  br label %1301, !llvm.loop !36

1410:                                             ; preds = %1301
  %1411 = load double, ptr %53, align 8, !tbaa !11
  %1412 = load ptr, ptr %30, align 8, !tbaa !5
  %1413 = load i64, ptr %51, align 8, !tbaa !9
  %1414 = getelementptr inbounds double, ptr %1412, i64 %1413
  store double %1411, ptr %1414, align 8, !tbaa !11
  %1415 = load ptr, ptr %21, align 8, !tbaa !5
  %1416 = load i64, ptr %1415, align 8, !tbaa !9
  store i64 %1416, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %1417

1417:                                             ; preds = %1515, %1410
  %1418 = load i64, ptr %50, align 8, !tbaa !9
  %1419 = load i64, ptr %41, align 8, !tbaa !9
  %1420 = icmp sle i64 %1418, %1419
  br i1 %1420, label %1421, label %1518

1421:                                             ; preds = %1417
  %1422 = load ptr, ptr %32, align 8, !tbaa !5
  %1423 = load i64, ptr %50, align 8, !tbaa !9
  %1424 = getelementptr inbounds double, ptr %1422, i64 %1423
  %1425 = load double, ptr %1424, align 8, !tbaa !11
  %1426 = load double, ptr %59, align 8, !tbaa !11
  %1427 = fcmp ogt double %1425, %1426
  br i1 %1427, label %1428, label %1470

1428:                                             ; preds = %1421
  %1429 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1429, ptr %42, align 8, !tbaa !9
  %1430 = load ptr, ptr %31, align 8, !tbaa !5
  %1431 = load i64, ptr %42, align 8, !tbaa !9
  %1432 = getelementptr inbounds %struct.doublecomplex, ptr %1430, i64 %1431
  %1433 = getelementptr inbounds %struct.doublecomplex, ptr %1432, i32 0, i32 0
  %1434 = load double, ptr %1433, align 8, !tbaa !16
  store double %1434, ptr %45, align 8, !tbaa !11
  %1435 = load double, ptr %45, align 8, !tbaa !11
  %1436 = fcmp oge double %1435, 0.000000e+00
  br i1 %1436, label %1437, label %1439

1437:                                             ; preds = %1428
  %1438 = load double, ptr %45, align 8, !tbaa !11
  br label %1442

1439:                                             ; preds = %1428
  %1440 = load double, ptr %45, align 8, !tbaa !11
  %1441 = fneg double %1440
  br label %1442

1442:                                             ; preds = %1439, %1437
  %1443 = phi double [ %1438, %1437 ], [ %1441, %1439 ]
  %1444 = load ptr, ptr %31, align 8, !tbaa !5
  %1445 = load i64, ptr %50, align 8, !tbaa !9
  %1446 = getelementptr inbounds %struct.doublecomplex, ptr %1444, i64 %1445
  %1447 = call double @d_imag(ptr noundef %1446)
  store double %1447, ptr %46, align 8, !tbaa !11
  %1448 = load double, ptr %46, align 8, !tbaa !11
  %1449 = fcmp oge double %1448, 0.000000e+00
  br i1 %1449, label %1450, label %1452

1450:                                             ; preds = %1442
  %1451 = load double, ptr %46, align 8, !tbaa !11
  br label %1455

1452:                                             ; preds = %1442
  %1453 = load double, ptr %46, align 8, !tbaa !11
  %1454 = fneg double %1453
  br label %1455

1455:                                             ; preds = %1452, %1450
  %1456 = phi double [ %1451, %1450 ], [ %1454, %1452 ]
  %1457 = fadd double %1443, %1456
  %1458 = load i64, ptr %55, align 8, !tbaa !9
  %1459 = sitofp i64 %1458 to double
  %1460 = load double, ptr %56, align 8, !tbaa !11
  %1461 = fmul double %1459, %1460
  %1462 = load ptr, ptr %32, align 8, !tbaa !5
  %1463 = load i64, ptr %50, align 8, !tbaa !9
  %1464 = getelementptr inbounds double, ptr %1462, i64 %1463
  %1465 = load double, ptr %1464, align 8, !tbaa !11
  %1466 = call double @llvm.fmuladd.f64(double %1461, double %1465, double %1457)
  %1467 = load ptr, ptr %32, align 8, !tbaa !5
  %1468 = load i64, ptr %50, align 8, !tbaa !9
  %1469 = getelementptr inbounds double, ptr %1467, i64 %1468
  store double %1466, ptr %1469, align 8, !tbaa !11
  br label %1514

1470:                                             ; preds = %1421
  %1471 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1471, ptr %42, align 8, !tbaa !9
  %1472 = load ptr, ptr %31, align 8, !tbaa !5
  %1473 = load i64, ptr %42, align 8, !tbaa !9
  %1474 = getelementptr inbounds %struct.doublecomplex, ptr %1472, i64 %1473
  %1475 = getelementptr inbounds %struct.doublecomplex, ptr %1474, i32 0, i32 0
  %1476 = load double, ptr %1475, align 8, !tbaa !16
  store double %1476, ptr %45, align 8, !tbaa !11
  %1477 = load double, ptr %45, align 8, !tbaa !11
  %1478 = fcmp oge double %1477, 0.000000e+00
  br i1 %1478, label %1479, label %1481

1479:                                             ; preds = %1470
  %1480 = load double, ptr %45, align 8, !tbaa !11
  br label %1484

1481:                                             ; preds = %1470
  %1482 = load double, ptr %45, align 8, !tbaa !11
  %1483 = fneg double %1482
  br label %1484

1484:                                             ; preds = %1481, %1479
  %1485 = phi double [ %1480, %1479 ], [ %1483, %1481 ]
  %1486 = load ptr, ptr %31, align 8, !tbaa !5
  %1487 = load i64, ptr %50, align 8, !tbaa !9
  %1488 = getelementptr inbounds %struct.doublecomplex, ptr %1486, i64 %1487
  %1489 = call double @d_imag(ptr noundef %1488)
  store double %1489, ptr %46, align 8, !tbaa !11
  %1490 = load double, ptr %46, align 8, !tbaa !11
  %1491 = fcmp oge double %1490, 0.000000e+00
  br i1 %1491, label %1492, label %1494

1492:                                             ; preds = %1484
  %1493 = load double, ptr %46, align 8, !tbaa !11
  br label %1497

1494:                                             ; preds = %1484
  %1495 = load double, ptr %46, align 8, !tbaa !11
  %1496 = fneg double %1495
  br label %1497

1497:                                             ; preds = %1494, %1492
  %1498 = phi double [ %1493, %1492 ], [ %1496, %1494 ]
  %1499 = fadd double %1485, %1498
  %1500 = load i64, ptr %55, align 8, !tbaa !9
  %1501 = sitofp i64 %1500 to double
  %1502 = load double, ptr %56, align 8, !tbaa !11
  %1503 = fmul double %1501, %1502
  %1504 = load ptr, ptr %32, align 8, !tbaa !5
  %1505 = load i64, ptr %50, align 8, !tbaa !9
  %1506 = getelementptr inbounds double, ptr %1504, i64 %1505
  %1507 = load double, ptr %1506, align 8, !tbaa !11
  %1508 = call double @llvm.fmuladd.f64(double %1503, double %1507, double %1499)
  %1509 = load double, ptr %58, align 8, !tbaa !11
  %1510 = fadd double %1508, %1509
  %1511 = load ptr, ptr %32, align 8, !tbaa !5
  %1512 = load i64, ptr %50, align 8, !tbaa !9
  %1513 = getelementptr inbounds double, ptr %1511, i64 %1512
  store double %1510, ptr %1513, align 8, !tbaa !11
  br label %1514

1514:                                             ; preds = %1497, %1455
  br label %1515

1515:                                             ; preds = %1514
  %1516 = load i64, ptr %50, align 8, !tbaa !9
  %1517 = add nsw i64 %1516, 1
  store i64 %1517, ptr %50, align 8, !tbaa !9
  br label %1417, !llvm.loop !37

1518:                                             ; preds = %1417
  store i64 0, ptr %57, align 8, !tbaa !9
  br label %1519

1519:                                             ; preds = %1658, %1518
  %1520 = load ptr, ptr %21, align 8, !tbaa !5
  %1521 = load ptr, ptr %31, align 8, !tbaa !5
  %1522 = load ptr, ptr %21, align 8, !tbaa !5
  %1523 = load i64, ptr %1522, align 8, !tbaa !9
  %1524 = add nsw i64 %1523, 1
  %1525 = getelementptr inbounds %struct.doublecomplex, ptr %1521, i64 %1524
  %1526 = load ptr, ptr %31, align 8, !tbaa !5
  %1527 = getelementptr inbounds %struct.doublecomplex, ptr %1526, i64 1
  %1528 = load ptr, ptr %29, align 8, !tbaa !5
  %1529 = load i64, ptr %51, align 8, !tbaa !9
  %1530 = getelementptr inbounds double, ptr %1528, i64 %1529
  %1531 = getelementptr inbounds [3 x i64], ptr %60, i64 0, i64 0
  %1532 = call i32 @zlacn2_(ptr noundef %1520, ptr noundef %1525, ptr noundef %1527, ptr noundef %1530, ptr noundef %57, ptr noundef %1531)
  %1533 = load i64, ptr %57, align 8, !tbaa !9
  %1534 = icmp ne i64 %1533, 0
  br i1 %1534, label %1535, label %1659

1535:                                             ; preds = %1519
  %1536 = load i64, ptr %57, align 8, !tbaa !9
  %1537 = icmp eq i64 %1536, 1
  br i1 %1537, label %1538, label %1598

1538:                                             ; preds = %1535
  %1539 = load ptr, ptr %18, align 8, !tbaa !5
  %1540 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  %1541 = load ptr, ptr %20, align 8, !tbaa !5
  %1542 = load ptr, ptr %21, align 8, !tbaa !5
  %1543 = load ptr, ptr %23, align 8, !tbaa !5
  %1544 = load i64, ptr %35, align 8, !tbaa !9
  %1545 = getelementptr inbounds %struct.doublecomplex, ptr %1543, i64 %1544
  %1546 = load ptr, ptr %24, align 8, !tbaa !5
  %1547 = load ptr, ptr %31, align 8, !tbaa !5
  %1548 = getelementptr inbounds %struct.doublecomplex, ptr %1547, i64 1
  %1549 = call i32 @f2c_ztrsv(ptr noundef %1539, ptr noundef %1540, ptr noundef %1541, ptr noundef %1542, ptr noundef %1545, ptr noundef %1546, ptr noundef %1548, ptr noundef @c__1)
  %1550 = load ptr, ptr %21, align 8, !tbaa !5
  %1551 = load i64, ptr %1550, align 8, !tbaa !9
  store i64 %1551, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %1552

1552:                                             ; preds = %1594, %1538
  %1553 = load i64, ptr %50, align 8, !tbaa !9
  %1554 = load i64, ptr %41, align 8, !tbaa !9
  %1555 = icmp sle i64 %1553, %1554
  br i1 %1555, label %1556, label %1597

1556:                                             ; preds = %1552
  %1557 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1557, ptr %42, align 8, !tbaa !9
  %1558 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1558, ptr %43, align 8, !tbaa !9
  %1559 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1559, ptr %44, align 8, !tbaa !9
  %1560 = load ptr, ptr %32, align 8, !tbaa !5
  %1561 = load i64, ptr %43, align 8, !tbaa !9
  %1562 = getelementptr inbounds double, ptr %1560, i64 %1561
  %1563 = load double, ptr %1562, align 8, !tbaa !11
  %1564 = load ptr, ptr %31, align 8, !tbaa !5
  %1565 = load i64, ptr %44, align 8, !tbaa !9
  %1566 = getelementptr inbounds %struct.doublecomplex, ptr %1564, i64 %1565
  %1567 = getelementptr inbounds %struct.doublecomplex, ptr %1566, i32 0, i32 0
  %1568 = load double, ptr %1567, align 8, !tbaa !16
  %1569 = fmul double %1563, %1568
  %1570 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %1569, ptr %1570, align 8, !tbaa !16
  %1571 = load ptr, ptr %32, align 8, !tbaa !5
  %1572 = load i64, ptr %43, align 8, !tbaa !9
  %1573 = getelementptr inbounds double, ptr %1571, i64 %1572
  %1574 = load double, ptr %1573, align 8, !tbaa !11
  %1575 = load ptr, ptr %31, align 8, !tbaa !5
  %1576 = load i64, ptr %44, align 8, !tbaa !9
  %1577 = getelementptr inbounds %struct.doublecomplex, ptr %1575, i64 %1576
  %1578 = getelementptr inbounds %struct.doublecomplex, ptr %1577, i32 0, i32 1
  %1579 = load double, ptr %1578, align 8, !tbaa !18
  %1580 = fmul double %1574, %1579
  %1581 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %1580, ptr %1581, align 8, !tbaa !18
  %1582 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1583 = load double, ptr %1582, align 8, !tbaa !16
  %1584 = load ptr, ptr %31, align 8, !tbaa !5
  %1585 = load i64, ptr %42, align 8, !tbaa !9
  %1586 = getelementptr inbounds %struct.doublecomplex, ptr %1584, i64 %1585
  %1587 = getelementptr inbounds %struct.doublecomplex, ptr %1586, i32 0, i32 0
  store double %1583, ptr %1587, align 8, !tbaa !16
  %1588 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1589 = load double, ptr %1588, align 8, !tbaa !18
  %1590 = load ptr, ptr %31, align 8, !tbaa !5
  %1591 = load i64, ptr %42, align 8, !tbaa !9
  %1592 = getelementptr inbounds %struct.doublecomplex, ptr %1590, i64 %1591
  %1593 = getelementptr inbounds %struct.doublecomplex, ptr %1592, i32 0, i32 1
  store double %1589, ptr %1593, align 8, !tbaa !18
  br label %1594

1594:                                             ; preds = %1556
  %1595 = load i64, ptr %50, align 8, !tbaa !9
  %1596 = add nsw i64 %1595, 1
  store i64 %1596, ptr %50, align 8, !tbaa !9
  br label %1552, !llvm.loop !38

1597:                                             ; preds = %1552
  br label %1658

1598:                                             ; preds = %1535
  %1599 = load ptr, ptr %21, align 8, !tbaa !5
  %1600 = load i64, ptr %1599, align 8, !tbaa !9
  store i64 %1600, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %1601

1601:                                             ; preds = %1643, %1598
  %1602 = load i64, ptr %50, align 8, !tbaa !9
  %1603 = load i64, ptr %41, align 8, !tbaa !9
  %1604 = icmp sle i64 %1602, %1603
  br i1 %1604, label %1605, label %1646

1605:                                             ; preds = %1601
  %1606 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1606, ptr %42, align 8, !tbaa !9
  %1607 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1607, ptr %43, align 8, !tbaa !9
  %1608 = load i64, ptr %50, align 8, !tbaa !9
  store i64 %1608, ptr %44, align 8, !tbaa !9
  %1609 = load ptr, ptr %32, align 8, !tbaa !5
  %1610 = load i64, ptr %43, align 8, !tbaa !9
  %1611 = getelementptr inbounds double, ptr %1609, i64 %1610
  %1612 = load double, ptr %1611, align 8, !tbaa !11
  %1613 = load ptr, ptr %31, align 8, !tbaa !5
  %1614 = load i64, ptr %44, align 8, !tbaa !9
  %1615 = getelementptr inbounds %struct.doublecomplex, ptr %1613, i64 %1614
  %1616 = getelementptr inbounds %struct.doublecomplex, ptr %1615, i32 0, i32 0
  %1617 = load double, ptr %1616, align 8, !tbaa !16
  %1618 = fmul double %1612, %1617
  %1619 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %1618, ptr %1619, align 8, !tbaa !16
  %1620 = load ptr, ptr %32, align 8, !tbaa !5
  %1621 = load i64, ptr %43, align 8, !tbaa !9
  %1622 = getelementptr inbounds double, ptr %1620, i64 %1621
  %1623 = load double, ptr %1622, align 8, !tbaa !11
  %1624 = load ptr, ptr %31, align 8, !tbaa !5
  %1625 = load i64, ptr %44, align 8, !tbaa !9
  %1626 = getelementptr inbounds %struct.doublecomplex, ptr %1624, i64 %1625
  %1627 = getelementptr inbounds %struct.doublecomplex, ptr %1626, i32 0, i32 1
  %1628 = load double, ptr %1627, align 8, !tbaa !18
  %1629 = fmul double %1623, %1628
  %1630 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %1629, ptr %1630, align 8, !tbaa !18
  %1631 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1632 = load double, ptr %1631, align 8, !tbaa !16
  %1633 = load ptr, ptr %31, align 8, !tbaa !5
  %1634 = load i64, ptr %42, align 8, !tbaa !9
  %1635 = getelementptr inbounds %struct.doublecomplex, ptr %1633, i64 %1634
  %1636 = getelementptr inbounds %struct.doublecomplex, ptr %1635, i32 0, i32 0
  store double %1632, ptr %1636, align 8, !tbaa !16
  %1637 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1638 = load double, ptr %1637, align 8, !tbaa !18
  %1639 = load ptr, ptr %31, align 8, !tbaa !5
  %1640 = load i64, ptr %42, align 8, !tbaa !9
  %1641 = getelementptr inbounds %struct.doublecomplex, ptr %1639, i64 %1640
  %1642 = getelementptr inbounds %struct.doublecomplex, ptr %1641, i32 0, i32 1
  store double %1638, ptr %1642, align 8, !tbaa !18
  br label %1643

1643:                                             ; preds = %1605
  %1644 = load i64, ptr %50, align 8, !tbaa !9
  %1645 = add nsw i64 %1644, 1
  store i64 %1645, ptr %50, align 8, !tbaa !9
  br label %1601, !llvm.loop !39

1646:                                             ; preds = %1601
  %1647 = load ptr, ptr %18, align 8, !tbaa !5
  %1648 = getelementptr inbounds [1 x i8], ptr %64, i64 0, i64 0
  %1649 = load ptr, ptr %20, align 8, !tbaa !5
  %1650 = load ptr, ptr %21, align 8, !tbaa !5
  %1651 = load ptr, ptr %23, align 8, !tbaa !5
  %1652 = load i64, ptr %35, align 8, !tbaa !9
  %1653 = getelementptr inbounds %struct.doublecomplex, ptr %1651, i64 %1652
  %1654 = load ptr, ptr %24, align 8, !tbaa !5
  %1655 = load ptr, ptr %31, align 8, !tbaa !5
  %1656 = getelementptr inbounds %struct.doublecomplex, ptr %1655, i64 1
  %1657 = call i32 @f2c_ztrsv(ptr noundef %1647, ptr noundef %1648, ptr noundef %1649, ptr noundef %1650, ptr noundef %1653, ptr noundef %1654, ptr noundef %1656, ptr noundef @c__1)
  br label %1658

1658:                                             ; preds = %1646, %1597
  br label %1519

1659:                                             ; preds = %1519
  store double 0.000000e+00, ptr %67, align 8, !tbaa !11
  %1660 = load ptr, ptr %21, align 8, !tbaa !5
  %1661 = load i64, ptr %1660, align 8, !tbaa !9
  store i64 %1661, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %50, align 8, !tbaa !9
  br label %1662

1662:                                             ; preds = %1714, %1659
  %1663 = load i64, ptr %50, align 8, !tbaa !9
  %1664 = load i64, ptr %41, align 8, !tbaa !9
  %1665 = icmp sle i64 %1663, %1664
  br i1 %1665, label %1666, label %1717

1666:                                             ; preds = %1662
  %1667 = load i64, ptr %50, align 8, !tbaa !9
  %1668 = load i64, ptr %51, align 8, !tbaa !9
  %1669 = load i64, ptr %38, align 8, !tbaa !9
  %1670 = mul nsw i64 %1668, %1669
  %1671 = add nsw i64 %1667, %1670
  store i64 %1671, ptr %42, align 8, !tbaa !9
  %1672 = load double, ptr %67, align 8, !tbaa !11
  store double %1672, ptr %47, align 8, !tbaa !11
  %1673 = load ptr, ptr %27, align 8, !tbaa !5
  %1674 = load i64, ptr %42, align 8, !tbaa !9
  %1675 = getelementptr inbounds %struct.doublecomplex, ptr %1673, i64 %1674
  %1676 = getelementptr inbounds %struct.doublecomplex, ptr %1675, i32 0, i32 0
  %1677 = load double, ptr %1676, align 8, !tbaa !16
  store double %1677, ptr %45, align 8, !tbaa !11
  %1678 = load double, ptr %45, align 8, !tbaa !11
  %1679 = fcmp oge double %1678, 0.000000e+00
  br i1 %1679, label %1680, label %1682

1680:                                             ; preds = %1666
  %1681 = load double, ptr %45, align 8, !tbaa !11
  br label %1685

1682:                                             ; preds = %1666
  %1683 = load double, ptr %45, align 8, !tbaa !11
  %1684 = fneg double %1683
  br label %1685

1685:                                             ; preds = %1682, %1680
  %1686 = phi double [ %1681, %1680 ], [ %1684, %1682 ]
  %1687 = load ptr, ptr %27, align 8, !tbaa !5
  %1688 = load i64, ptr %50, align 8, !tbaa !9
  %1689 = load i64, ptr %51, align 8, !tbaa !9
  %1690 = load i64, ptr %38, align 8, !tbaa !9
  %1691 = mul nsw i64 %1689, %1690
  %1692 = add nsw i64 %1688, %1691
  %1693 = getelementptr inbounds %struct.doublecomplex, ptr %1687, i64 %1692
  %1694 = call double @d_imag(ptr noundef %1693)
  store double %1694, ptr %46, align 8, !tbaa !11
  %1695 = load double, ptr %46, align 8, !tbaa !11
  %1696 = fcmp oge double %1695, 0.000000e+00
  br i1 %1696, label %1697, label %1699

1697:                                             ; preds = %1685
  %1698 = load double, ptr %46, align 8, !tbaa !11
  br label %1702

1699:                                             ; preds = %1685
  %1700 = load double, ptr %46, align 8, !tbaa !11
  %1701 = fneg double %1700
  br label %1702

1702:                                             ; preds = %1699, %1697
  %1703 = phi double [ %1698, %1697 ], [ %1701, %1699 ]
  %1704 = fadd double %1686, %1703
  store double %1704, ptr %48, align 8, !tbaa !11
  %1705 = load double, ptr %47, align 8, !tbaa !11
  %1706 = load double, ptr %48, align 8, !tbaa !11
  %1707 = fcmp oge double %1705, %1706
  br i1 %1707, label %1708, label %1710

1708:                                             ; preds = %1702
  %1709 = load double, ptr %47, align 8, !tbaa !11
  br label %1712

1710:                                             ; preds = %1702
  %1711 = load double, ptr %48, align 8, !tbaa !11
  br label %1712

1712:                                             ; preds = %1710, %1708
  %1713 = phi double [ %1709, %1708 ], [ %1711, %1710 ]
  store double %1713, ptr %67, align 8, !tbaa !11
  br label %1714

1714:                                             ; preds = %1712
  %1715 = load i64, ptr %50, align 8, !tbaa !9
  %1716 = add nsw i64 %1715, 1
  store i64 %1716, ptr %50, align 8, !tbaa !9
  br label %1662, !llvm.loop !40

1717:                                             ; preds = %1662
  %1718 = load double, ptr %67, align 8, !tbaa !11
  %1719 = fcmp une double %1718, 0.000000e+00
  br i1 %1719, label %1720, label %1727

1720:                                             ; preds = %1717
  %1721 = load double, ptr %67, align 8, !tbaa !11
  %1722 = load ptr, ptr %29, align 8, !tbaa !5
  %1723 = load i64, ptr %51, align 8, !tbaa !9
  %1724 = getelementptr inbounds double, ptr %1722, i64 %1723
  %1725 = load double, ptr %1724, align 8, !tbaa !11
  %1726 = fdiv double %1725, %1721
  store double %1726, ptr %1724, align 8, !tbaa !11
  br label %1727

1727:                                             ; preds = %1720, %1717
  br label %1728

1728:                                             ; preds = %1727
  %1729 = load i64, ptr %51, align 8, !tbaa !9
  %1730 = add nsw i64 %1729, 1
  store i64 %1730, ptr %51, align 8, !tbaa !9
  br label %261, !llvm.loop !41

1731:                                             ; preds = %261
  store i32 0, ptr %17, align 4
  store i32 1, ptr %68, align 4
  br label %1732

1732:                                             ; preds = %1731, %236, %206
  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 1, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 24, 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 16, 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 8, 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 8, 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
  %1733 = load i32, ptr %17, align 4
  ret i32 %1733
}

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

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

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

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

declare double @d_imag(ptr noundef) #2

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!7, !7, i64 0}
!16 = !{!17, !12, i64 0}
!17 = !{!"", !12, i64 0, !12, i64 8}
!18 = !{!17, !12, i64 8}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}


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

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

41:                                               ; preds = %16
  %42 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not683 = icmp eq i64 %42, 0
  br i1 %.not683, label %.thread.sink.split, label %43

43:                                               ; preds = %41, %16
  %.not684 = icmp eq i64 %39, 0
  br i1 %.not684, label %44, label %48

44:                                               ; preds = %43
  %45 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5
  %.not685 = icmp eq i64 %45, 0
  br i1 %.not685, label %46, label %48

46:                                               ; preds = %44
  %47 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5
  %.not686 = icmp eq i64 %47, 0
  br i1 %.not686, label %.thread.sink.split, label %48

48:                                               ; preds = %46, %44, %43
  %.not687 = icmp eq i64 %40, 0
  br i1 %.not687, label %49, label %51

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

51:                                               ; preds = %49, %48
  %52 = load i64, ptr %3, align 8, !tbaa !5
  %53 = icmp slt i64 %52, 0
  br i1 %53, label %.thread.sink.split, label %54

54:                                               ; preds = %51
  %55 = load i64, ptr %4, align 8, !tbaa !5
  %56 = icmp slt i64 %55, 0
  br i1 %56, label %.thread.sink.split, label %57

57:                                               ; preds = %54
  %58 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %52, i64 1)
  %59 = icmp slt i64 %58, %spec.select
  br i1 %59, label %.thread.sink.split, label %60

60:                                               ; preds = %57
  %61 = load i64, ptr %8, align 8, !tbaa !5
  %62 = icmp slt i64 %61, %spec.select
  br i1 %62, label %.thread.sink.split, label %63

63:                                               ; preds = %60
  %64 = load i64, ptr %10, align 8, !tbaa !5
  %65 = icmp slt i64 %64, %spec.select
  br i1 %65, label %.thread.sink.split, label %66

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

.thread.sink.split:                               ; preds = %63, %60, %57, %54, %51, %49, %46, %41
  %.sink = phi i64 [ -1, %41 ], [ -2, %46 ], [ -3, %49 ], [ -4, %51 ], [ -5, %54 ], [ -7, %57 ], [ -9, %60 ], [ -11, %63 ]
  store i64 %.sink, ptr %15, 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 %19, align 8, !tbaa !5
  %69 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %19) #5
  br label %.loopexit

70:                                               ; preds = %66
  %71 = icmp eq i64 %52, 0
  %.not721884 = icmp eq i64 %55, 0
  br i1 %71, label %73, label %72

72:                                               ; preds = %70
  br i1 %.not721884, label %.loopexit, label %98

73:                                               ; preds = %70
  br i1 %.not721884, label %.loopexit, label %.lr.ph887.preheader

.lr.ph887.preheader:                              ; preds = %73
  %min.iters.check997 = icmp ult i64 %55, 4
  %74 = sub i64 %18, %17
  %diff.check = icmp ult i64 %74, 32
  %or.cond = or i1 %min.iters.check997, %diff.check
  br i1 %or.cond, label %.lr.ph887.preheader1024, label %vector.ph998

vector.ph998:                                     ; preds = %.lr.ph887.preheader
  %n.vec1000 = and i64 %55, 9223372036854775804
  %ind.end1001 = or disjoint i64 %n.vec1000, 1
  br label %vector.body1003

vector.body1003:                                  ; preds = %vector.body1003, %vector.ph998
  %index1004 = phi i64 [ 0, %vector.ph998 ], [ %index.next1006, %vector.body1003 ]
  %75 = getelementptr double, ptr %11, i64 %index1004
  %76 = getelementptr inbounds i8, ptr %75, i64 16
  store <2 x double> zeroinitializer, ptr %75, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %76, align 8, !tbaa !9
  %77 = getelementptr double, ptr %12, i64 %index1004
  %78 = getelementptr inbounds i8, ptr %77, i64 16
  store <2 x double> zeroinitializer, ptr %77, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %78, align 8, !tbaa !9
  %index.next1006 = add nuw i64 %index1004, 4
  %79 = icmp eq i64 %index.next1006, %n.vec1000
  br i1 %79, label %middle.block995, label %vector.body1003, !llvm.loop !11

middle.block995:                                  ; preds = %vector.body1003
  %cmp.n1007 = icmp eq i64 %55, %n.vec1000
  br i1 %cmp.n1007, label %.loopexit, label %.lr.ph887.preheader1024

.lr.ph887.preheader1024:                          ; preds = %middle.block995, %.lr.ph887.preheader
  %.0668885.ph = phi i64 [ 1, %.lr.ph887.preheader ], [ %ind.end1001, %middle.block995 ]
  %80 = add nuw i64 %55, 1
  %81 = sub i64 %80, %.0668885.ph
  %82 = sub i64 %55, %.0668885.ph
  %xtraiter1048 = and i64 %81, 3
  %lcmp.mod1049.not = icmp eq i64 %xtraiter1048, 0
  br i1 %lcmp.mod1049.not, label %.lr.ph887.prol.loopexit, label %.lr.ph887.prol

.lr.ph887.prol:                                   ; preds = %.lr.ph887.preheader1024, %.lr.ph887.prol
  %.0668885.prol = phi i64 [ %85, %.lr.ph887.prol ], [ %.0668885.ph, %.lr.ph887.preheader1024 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph887.prol ], [ 0, %.lr.ph887.preheader1024 ]
  %83 = getelementptr inbounds double, ptr %34, i64 %.0668885.prol
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  %84 = getelementptr inbounds double, ptr %35, i64 %.0668885.prol
  store double 0.000000e+00, ptr %84, align 8, !tbaa !9
  %85 = add nuw i64 %.0668885.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter1048
  br i1 %prol.iter.cmp.not, label %.lr.ph887.prol.loopexit, label %.lr.ph887.prol, !llvm.loop !15

.lr.ph887.prol.loopexit:                          ; preds = %.lr.ph887.prol, %.lr.ph887.preheader1024
  %.0668885.unr = phi i64 [ %.0668885.ph, %.lr.ph887.preheader1024 ], [ %85, %.lr.ph887.prol ]
  %86 = icmp ult i64 %82, 3
  br i1 %86, label %.loopexit, label %.lr.ph887

.lr.ph887:                                        ; preds = %.lr.ph887.prol.loopexit, %.lr.ph887
  %.0668885 = phi i64 [ %97, %.lr.ph887 ], [ %.0668885.unr, %.lr.ph887.prol.loopexit ]
  %87 = getelementptr inbounds double, ptr %34, i64 %.0668885
  store double 0.000000e+00, ptr %87, align 8, !tbaa !9
  %88 = getelementptr inbounds double, ptr %35, i64 %.0668885
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  %89 = getelementptr double, ptr %11, i64 %.0668885
  store double 0.000000e+00, ptr %89, align 8, !tbaa !9
  %90 = getelementptr double, ptr %12, i64 %.0668885
  store double 0.000000e+00, ptr %90, align 8, !tbaa !9
  %91 = add nuw i64 %.0668885, 2
  %92 = getelementptr inbounds double, ptr %34, i64 %91
  store double 0.000000e+00, ptr %92, align 8, !tbaa !9
  %93 = getelementptr inbounds double, ptr %35, i64 %91
  store double 0.000000e+00, ptr %93, align 8, !tbaa !9
  %94 = add nuw i64 %.0668885, 3
  %95 = getelementptr inbounds double, ptr %34, i64 %94
  store double 0.000000e+00, ptr %95, align 8, !tbaa !9
  %96 = getelementptr inbounds double, ptr %35, i64 %94
  store double 0.000000e+00, ptr %96, align 8, !tbaa !9
  %97 = add nuw i64 %.0668885, 4
  %exitcond923.not.3 = icmp eq i64 %94, %55
  br i1 %exitcond923.not.3, label %.loopexit, label %.lr.ph887, !llvm.loop !17

98:                                               ; preds = %72
  %. = select i1 %.not684, i8 67, i8 78
  %.724 = select i1 %.not684, i8 78, i8 67
  store i8 %., ptr %23, align 1, !tbaa !18
  store i8 %.724, ptr %24, align 1, !tbaa !18
  %99 = add nuw nsw i64 %52, 1
  %100 = tail call double @dlamch_(ptr noundef nonnull @.str.6) #5
  %101 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %102 = uitofp nneg i64 %99 to double
  %103 = fmul double %101, %102
  %104 = fdiv double %103, %100
  %105 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %105, ptr %19, align 8, !tbaa !5
  %invariant.gep876 = getelementptr i8, ptr %33, i64 16
  %invariant.gep878 = getelementptr i8, ptr %30, i64 16
  %.not692880 = icmp slt i64 %105, 1
  br i1 %.not692880, label %.loopexit, label %.lr.ph883

.lr.ph883:                                        ; preds = %98
  %106 = fmul double %100, %102
  br label %107

107:                                              ; preds = %.lr.ph883, %._crit_edge874.thread
  %.1669881 = phi i64 [ 1, %.lr.ph883 ], [ %519, %._crit_edge874.thread ]
  %108 = mul nsw i64 %.1669881, %31
  %gep877 = getelementptr %struct.doublecomplex, ptr %invariant.gep876, i64 %108
  %109 = call i32 @f2c_zcopy(ptr noundef nonnull %3, ptr noundef %gep877, ptr noundef nonnull @c__1, ptr noundef %13, ptr noundef nonnull @c__1) #5
  %110 = call i32 @f2c_ztrmv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef nonnull @c__1) #5
  store <2 x double> <double -1.000000e+00, double -0.000000e+00>, ptr %20, align 16, !tbaa !9
  %111 = mul nsw i64 %.1669881, %28
  %gep879 = getelementptr %struct.doublecomplex, ptr %invariant.gep878, i64 %111
  %112 = call i32 @f2c_zaxpy(ptr noundef nonnull %3, ptr noundef nonnull %20, ptr noundef %gep879, ptr noundef nonnull @c__1, ptr noundef %13, ptr noundef nonnull @c__1) #5
  %113 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %30, i64 %111
  %.not693736 = icmp slt i64 %113, 1
  br i1 %.not693736, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %107, %.lr.ph
  %.0670737 = phi i64 [ %124, %.lr.ph ], [ 1, %107 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0670737
  %114 = load double, ptr %gep, align 8, !tbaa !19
  %115 = call double @d_imag(ptr noundef nonnull %gep) #5
  %116 = insertelement <2 x double> poison, double %114, i64 0
  %117 = insertelement <2 x double> %116, double %115, i64 1
  %118 = fcmp oge <2 x double> %117, zeroinitializer
  %119 = fneg <2 x double> %117
  %120 = select <2 x i1> %118, <2 x double> %117, <2 x double> %119
  %shift = shufflevector <2 x double> %120, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %121 = fadd <2 x double> %120, %shift
  %122 = extractelement <2 x double> %121, i64 0
  %123 = getelementptr inbounds double, ptr %37, i64 %.0670737
  store double %122, ptr %123, align 8, !tbaa !9
  %124 = add nuw i64 %.0670737, 1
  %exitcond.not = icmp eq i64 %.0670737, %113
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph, %107
  %125 = load i64, ptr %3, align 8, !tbaa !5
  br i1 %.not684, label %243, label %126

126:                                              ; preds = %._crit_edge
  %invariant.gep780 = getelementptr %struct.doublecomplex, ptr %33, i64 %108
  %.not705782 = icmp slt i64 %125, 1
  br i1 %.not, label %185, label %127

127:                                              ; preds = %126
  br i1 %.not687, label %156, label %128

128:                                              ; preds = %127
  br i1 %.not705782, label %._crit_edge847.thread, label %.lr.ph746.preheader

.lr.ph746.preheader:                              ; preds = %128
  %129 = add nuw i64 %125, 1
  br label %.lr.ph746

.lr.ph746:                                        ; preds = %.lr.ph746.preheader, %154
  %indvars.iv = phi i64 [ 2, %.lr.ph746.preheader ], [ %indvars.iv.next, %154 ]
  %.0662744 = phi i64 [ 1, %.lr.ph746.preheader ], [ %155, %154 ]
  %gep742 = getelementptr %struct.doublecomplex, ptr %invariant.gep780, i64 %.0662744
  %130 = load double, ptr %gep742, align 8, !tbaa !19
  %131 = fcmp oge double %130, 0.000000e+00
  %132 = fneg double %130
  %133 = select i1 %131, double %130, double %132
  %134 = call double @d_imag(ptr noundef nonnull %gep742) #5
  %135 = fcmp oge double %134, 0.000000e+00
  %136 = fneg double %134
  %137 = select i1 %135, double %134, double %136
  %138 = fadd double %133, %137
  %139 = mul nsw i64 %.0662744, %25
  %invariant.gep738 = getelementptr %struct.doublecomplex, ptr %27, i64 %139
  br label %140

140:                                              ; preds = %.lr.ph746, %140
  %.1671740 = phi i64 [ 1, %.lr.ph746 ], [ %153, %140 ]
  %gep739 = getelementptr %struct.doublecomplex, ptr %invariant.gep738, i64 %.1671740
  %141 = load double, ptr %gep739, align 8, !tbaa !19
  %142 = call double @d_imag(ptr noundef nonnull %gep739) #5
  %143 = insertelement <2 x double> poison, double %141, i64 0
  %144 = insertelement <2 x double> %143, double %142, i64 1
  %145 = fcmp oge <2 x double> %144, zeroinitializer
  %146 = fneg <2 x double> %144
  %147 = select <2 x i1> %145, <2 x double> %144, <2 x double> %146
  %shift1008 = shufflevector <2 x double> %147, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %148 = fadd <2 x double> %147, %shift1008
  %149 = extractelement <2 x double> %148, i64 0
  %150 = getelementptr inbounds double, ptr %37, i64 %.1671740
  %151 = load double, ptr %150, align 8, !tbaa !9
  %152 = call double @llvm.fmuladd.f64(double %149, double %138, double %151)
  store double %152, ptr %150, align 8, !tbaa !9
  %153 = add nuw i64 %.1671740, 1
  %exitcond904.not = icmp eq i64 %153, %indvars.iv
  br i1 %exitcond904.not, label %154, label %140, !llvm.loop !22

154:                                              ; preds = %140
  %155 = add nuw nsw i64 %.0662744, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond905.not = icmp eq i64 %indvars.iv, %129
  br i1 %exitcond905.not, label %.loopexit727, label %.lr.ph746, !llvm.loop !23

156:                                              ; preds = %127
  br i1 %.not705782, label %._crit_edge847.thread, label %.lr.ph759

.lr.ph759:                                        ; preds = %156, %._crit_edge751
  %.1663757 = phi i64 [ %184, %._crit_edge751 ], [ 1, %156 ]
  %gep755 = getelementptr %struct.doublecomplex, ptr %invariant.gep780, i64 %.1663757
  %157 = load double, ptr %gep755, align 8, !tbaa !19
  %158 = fcmp oge double %157, 0.000000e+00
  %159 = fneg double %157
  %160 = select i1 %158, double %157, double %159
  %161 = call double @d_imag(ptr noundef nonnull %gep755) #5
  %162 = fcmp oge double %161, 0.000000e+00
  %163 = fneg double %161
  %164 = select i1 %162, double %161, double %163
  %165 = fadd double %160, %164
  %.not711.not747 = icmp ugt i64 %.1663757, 1
  br i1 %.not711.not747, label %.lr.ph750, label %._crit_edge751

.lr.ph750:                                        ; preds = %.lr.ph759
  %166 = mul nsw i64 %.1663757, %25
  %invariant.gep752 = getelementptr %struct.doublecomplex, ptr %27, i64 %166
  br label %167

167:                                              ; preds = %.lr.ph750, %167
  %.2672748 = phi i64 [ 1, %.lr.ph750 ], [ %180, %167 ]
  %gep753 = getelementptr %struct.doublecomplex, ptr %invariant.gep752, i64 %.2672748
  %168 = load double, ptr %gep753, align 8, !tbaa !19
  %169 = call double @d_imag(ptr noundef nonnull %gep753) #5
  %170 = insertelement <2 x double> poison, double %168, i64 0
  %171 = insertelement <2 x double> %170, double %169, i64 1
  %172 = fcmp oge <2 x double> %171, zeroinitializer
  %173 = fneg <2 x double> %171
  %174 = select <2 x i1> %172, <2 x double> %171, <2 x double> %173
  %shift1009 = shufflevector <2 x double> %174, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %175 = fadd <2 x double> %174, %shift1009
  %176 = extractelement <2 x double> %175, i64 0
  %177 = getelementptr inbounds double, ptr %37, i64 %.2672748
  %178 = load double, ptr %177, align 8, !tbaa !9
  %179 = call double @llvm.fmuladd.f64(double %176, double %165, double %178)
  store double %179, ptr %177, align 8, !tbaa !9
  %180 = add nuw nsw i64 %.2672748, 1
  %exitcond906.not = icmp eq i64 %180, %.1663757
  br i1 %exitcond906.not, label %._crit_edge751, label %167, !llvm.loop !24

._crit_edge751:                                   ; preds = %167, %.lr.ph759
  %181 = getelementptr inbounds double, ptr %37, i64 %.1663757
  %182 = load double, ptr %181, align 8, !tbaa !9
  %183 = fadd double %165, %182
  store double %183, ptr %181, align 8, !tbaa !9
  %184 = add nuw i64 %.1663757, 1
  %exitcond907.not = icmp eq i64 %.1663757, %125
  br i1 %exitcond907.not, label %.loopexit727, label %.lr.ph759, !llvm.loop !25

185:                                              ; preds = %126
  br i1 %.not687, label %213, label %186

186:                                              ; preds = %185
  br i1 %.not705782, label %._crit_edge847.thread, label %.lr.ph772

.lr.ph772:                                        ; preds = %186, %._crit_edge764
  %.2664770 = phi i64 [ %212, %._crit_edge764 ], [ 1, %186 ]
  %gep768 = getelementptr %struct.doublecomplex, ptr %invariant.gep780, i64 %.2664770
  %187 = load double, ptr %gep768, align 8, !tbaa !19
  %188 = fcmp oge double %187, 0.000000e+00
  %189 = fneg double %187
  %190 = select i1 %188, double %187, double %189
  %191 = call double @d_imag(ptr noundef nonnull %gep768) #5
  %192 = fcmp oge double %191, 0.000000e+00
  %193 = fneg double %191
  %194 = select i1 %192, double %191, double %193
  %195 = fadd double %190, %194
  %196 = load i64, ptr %3, align 8, !tbaa !5
  %.not708760 = icmp sgt i64 %.2664770, %196
  br i1 %.not708760, label %._crit_edge764, label %.lr.ph763

.lr.ph763:                                        ; preds = %.lr.ph772
  %197 = mul nsw i64 %.2664770, %25
  %invariant.gep765 = getelementptr %struct.doublecomplex, ptr %27, i64 %197
  br label %198

198:                                              ; preds = %.lr.ph763, %198
  %.3673761 = phi i64 [ %.2664770, %.lr.ph763 ], [ %211, %198 ]
  %gep766 = getelementptr %struct.doublecomplex, ptr %invariant.gep765, i64 %.3673761
  %199 = load double, ptr %gep766, align 8, !tbaa !19
  %200 = call double @d_imag(ptr noundef nonnull %gep766) #5
  %201 = insertelement <2 x double> poison, double %199, i64 0
  %202 = insertelement <2 x double> %201, double %200, i64 1
  %203 = fcmp oge <2 x double> %202, zeroinitializer
  %204 = fneg <2 x double> %202
  %205 = select <2 x i1> %203, <2 x double> %202, <2 x double> %204
  %shift1010 = shufflevector <2 x double> %205, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %206 = fadd <2 x double> %205, %shift1010
  %207 = extractelement <2 x double> %206, i64 0
  %208 = getelementptr inbounds double, ptr %37, i64 %.3673761
  %209 = load double, ptr %208, align 8, !tbaa !9
  %210 = call double @llvm.fmuladd.f64(double %207, double %195, double %209)
  store double %210, ptr %208, align 8, !tbaa !9
  %211 = add nuw nsw i64 %.3673761, 1
  %.not708.not = icmp slt i64 %.3673761, %196
  br i1 %.not708.not, label %198, label %._crit_edge764, !llvm.loop !26

._crit_edge764:                                   ; preds = %198, %.lr.ph772
  %212 = add nuw i64 %.2664770, 1
  %exitcond908.not = icmp eq i64 %.2664770, %125
  br i1 %exitcond908.not, label %.loopexit727, label %.lr.ph772, !llvm.loop !27

213:                                              ; preds = %185
  br i1 %.not705782, label %._crit_edge847.thread, label %.lr.ph785

.lr.ph785:                                        ; preds = %213, %._crit_edge777
  %.3665783 = phi i64 [ %224, %._crit_edge777 ], [ 1, %213 ]
  %gep781 = getelementptr %struct.doublecomplex, ptr %invariant.gep780, i64 %.3665783
  %214 = load double, ptr %gep781, align 8, !tbaa !19
  %215 = fcmp oge double %214, 0.000000e+00
  %216 = fneg double %214
  %217 = select i1 %215, double %214, double %216
  %218 = call double @d_imag(ptr noundef nonnull %gep781) #5
  %219 = fcmp oge double %218, 0.000000e+00
  %220 = fneg double %218
  %221 = select i1 %219, double %218, double %220
  %222 = fadd double %217, %221
  %223 = load i64, ptr %3, align 8, !tbaa !5
  %224 = add nuw i64 %.3665783, 1
  %.not706773.not = icmp slt i64 %.3665783, %223
  br i1 %.not706773.not, label %.lr.ph776, label %._crit_edge777

.lr.ph776:                                        ; preds = %.lr.ph785
  %225 = mul nsw i64 %.3665783, %25
  %invariant.gep778 = getelementptr %struct.doublecomplex, ptr %27, i64 %225
  br label %226

226:                                              ; preds = %.lr.ph776, %226
  %.4674774 = phi i64 [ %224, %.lr.ph776 ], [ %239, %226 ]
  %gep779 = getelementptr %struct.doublecomplex, ptr %invariant.gep778, i64 %.4674774
  %227 = load double, ptr %gep779, align 8, !tbaa !19
  %228 = call double @d_imag(ptr noundef nonnull %gep779) #5
  %229 = insertelement <2 x double> poison, double %227, i64 0
  %230 = insertelement <2 x double> %229, double %228, i64 1
  %231 = fcmp oge <2 x double> %230, zeroinitializer
  %232 = fneg <2 x double> %230
  %233 = select <2 x i1> %231, <2 x double> %230, <2 x double> %232
  %shift1011 = shufflevector <2 x double> %233, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %234 = fadd <2 x double> %233, %shift1011
  %235 = extractelement <2 x double> %234, i64 0
  %236 = getelementptr inbounds double, ptr %37, i64 %.4674774
  %237 = load double, ptr %236, align 8, !tbaa !9
  %238 = call double @llvm.fmuladd.f64(double %235, double %222, double %237)
  store double %238, ptr %236, align 8, !tbaa !9
  %239 = add nuw nsw i64 %.4674774, 1
  %.not706.not = icmp slt i64 %.4674774, %223
  br i1 %.not706.not, label %226, label %._crit_edge777, !llvm.loop !28

._crit_edge777:                                   ; preds = %226, %.lr.ph785
  %240 = getelementptr inbounds double, ptr %37, i64 %.3665783
  %241 = load double, ptr %240, align 8, !tbaa !9
  %242 = fadd double %222, %241
  store double %242, ptr %240, align 8, !tbaa !9
  %exitcond909.not = icmp eq i64 %.3665783, %125
  br i1 %exitcond909.not, label %.loopexit727, label %.lr.ph785, !llvm.loop !29

243:                                              ; preds = %._crit_edge
  br i1 %.not, label %310, label %244

244:                                              ; preds = %243
  br i1 %.not687, label %274, label %245

245:                                              ; preds = %244
  %.not702792 = icmp slt i64 %125, 1
  br i1 %.not702792, label %._crit_edge847.thread, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %245
  %invariant.gep788 = getelementptr %struct.doublecomplex, ptr %33, i64 %108
  %246 = add nuw i64 %125, 1
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %269
  %indvars.iv910 = phi i64 [ 2, %.preheader.lr.ph ], [ %indvars.iv.next911, %269 ]
  %.4666793 = phi i64 [ 1, %.preheader.lr.ph ], [ %273, %269 ]
  %247 = mul nsw i64 %.4666793, %25
  %invariant.gep786 = getelementptr %struct.doublecomplex, ptr %27, i64 %247
  br label %248

248:                                              ; preds = %.preheader, %248
  %.0661791 = phi double [ 0.000000e+00, %.preheader ], [ %267, %248 ]
  %.5675790 = phi i64 [ 1, %.preheader ], [ %268, %248 ]
  %gep787 = getelementptr %struct.doublecomplex, ptr %invariant.gep786, i64 %.5675790
  %249 = load double, ptr %gep787, align 8, !tbaa !19
  %250 = call double @d_imag(ptr noundef nonnull %gep787) #5
  %251 = insertelement <2 x double> poison, double %249, i64 0
  %252 = insertelement <2 x double> %251, double %250, i64 1
  %253 = fcmp oge <2 x double> %252, zeroinitializer
  %254 = fneg <2 x double> %252
  %255 = select <2 x i1> %253, <2 x double> %252, <2 x double> %254
  %shift1012 = shufflevector <2 x double> %255, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %256 = fadd <2 x double> %255, %shift1012
  %257 = extractelement <2 x double> %256, i64 0
  %gep789 = getelementptr %struct.doublecomplex, ptr %invariant.gep788, i64 %.5675790
  %258 = load double, ptr %gep789, align 8, !tbaa !19
  %259 = call double @d_imag(ptr noundef nonnull %gep789) #5
  %260 = insertelement <2 x double> poison, double %258, i64 0
  %261 = insertelement <2 x double> %260, double %259, i64 1
  %262 = fcmp oge <2 x double> %261, zeroinitializer
  %263 = fneg <2 x double> %261
  %264 = select <2 x i1> %262, <2 x double> %261, <2 x double> %263
  %shift1013 = shufflevector <2 x double> %264, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %265 = fadd <2 x double> %264, %shift1013
  %266 = extractelement <2 x double> %265, i64 0
  %267 = call double @llvm.fmuladd.f64(double %257, double %266, double %.0661791)
  %268 = add nuw i64 %.5675790, 1
  %exitcond912.not = icmp eq i64 %268, %indvars.iv910
  br i1 %exitcond912.not, label %269, label %248, !llvm.loop !30

269:                                              ; preds = %248
  %270 = getelementptr inbounds double, ptr %37, i64 %.4666793
  %271 = load double, ptr %270, align 8, !tbaa !9
  %272 = fadd double %267, %271
  store double %272, ptr %270, align 8, !tbaa !9
  %273 = add nuw nsw i64 %.4666793, 1
  %indvars.iv.next911 = add nuw i64 %indvars.iv910, 1
  %exitcond913.not = icmp eq i64 %indvars.iv910, %246
  br i1 %exitcond913.not, label %.loopexit727, label %.preheader, !llvm.loop !31

274:                                              ; preds = %244
  %invariant.gep804 = getelementptr %struct.doublecomplex, ptr %33, i64 %108
  %.not700806 = icmp slt i64 %125, 1
  br i1 %.not700806, label %._crit_edge847.thread, label %.lr.ph809

.lr.ph809:                                        ; preds = %274, %._crit_edge801
  %.5667807 = phi i64 [ %309, %._crit_edge801 ], [ 1, %274 ]
  %gep805 = getelementptr %struct.doublecomplex, ptr %invariant.gep804, i64 %.5667807
  %275 = load double, ptr %gep805, align 8, !tbaa !19
  %276 = call double @d_imag(ptr noundef nonnull %gep805) #5
  %277 = insertelement <2 x double> poison, double %275, i64 0
  %278 = insertelement <2 x double> %277, double %276, i64 1
  %279 = fcmp oge <2 x double> %278, zeroinitializer
  %280 = fneg <2 x double> %278
  %281 = select <2 x i1> %279, <2 x double> %278, <2 x double> %280
  %shift1014 = shufflevector <2 x double> %281, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %282 = fadd <2 x double> %281, %shift1014
  %283 = extractelement <2 x double> %282, i64 0
  %.not701.not796 = icmp ugt i64 %.5667807, 1
  br i1 %.not701.not796, label %.lr.ph800, label %._crit_edge801

.lr.ph800:                                        ; preds = %.lr.ph809
  %284 = mul nsw i64 %.5667807, %25
  %invariant.gep802 = getelementptr %struct.doublecomplex, ptr %27, i64 %284
  br label %285

285:                                              ; preds = %.lr.ph800, %285
  %.1798 = phi double [ %283, %.lr.ph800 ], [ %304, %285 ]
  %.6676797 = phi i64 [ 1, %.lr.ph800 ], [ %305, %285 ]
  %gep803 = getelementptr %struct.doublecomplex, ptr %invariant.gep802, i64 %.6676797
  %286 = load double, ptr %gep803, align 8, !tbaa !19
  %287 = call double @d_imag(ptr noundef nonnull %gep803) #5
  %288 = insertelement <2 x double> poison, double %286, i64 0
  %289 = insertelement <2 x double> %288, double %287, i64 1
  %290 = fcmp oge <2 x double> %289, zeroinitializer
  %291 = fneg <2 x double> %289
  %292 = select <2 x i1> %290, <2 x double> %289, <2 x double> %291
  %shift1015 = shufflevector <2 x double> %292, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %293 = fadd <2 x double> %292, %shift1015
  %294 = extractelement <2 x double> %293, i64 0
  %gep795 = getelementptr %struct.doublecomplex, ptr %invariant.gep804, i64 %.6676797
  %295 = load double, ptr %gep795, align 8, !tbaa !19
  %296 = call double @d_imag(ptr noundef nonnull %gep795) #5
  %297 = insertelement <2 x double> poison, double %295, i64 0
  %298 = insertelement <2 x double> %297, double %296, i64 1
  %299 = fcmp oge <2 x double> %298, zeroinitializer
  %300 = fneg <2 x double> %298
  %301 = select <2 x i1> %299, <2 x double> %298, <2 x double> %300
  %shift1016 = shufflevector <2 x double> %301, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %302 = fadd <2 x double> %301, %shift1016
  %303 = extractelement <2 x double> %302, i64 0
  %304 = call double @llvm.fmuladd.f64(double %294, double %303, double %.1798)
  %305 = add nuw nsw i64 %.6676797, 1
  %exitcond914.not = icmp eq i64 %305, %.5667807
  br i1 %exitcond914.not, label %._crit_edge801, label %285, !llvm.loop !32

._crit_edge801:                                   ; preds = %285, %.lr.ph809
  %.1.lcssa = phi double [ %283, %.lr.ph809 ], [ %304, %285 ]
  %306 = getelementptr inbounds double, ptr %37, i64 %.5667807
  %307 = load double, ptr %306, align 8, !tbaa !9
  %308 = fadd double %.1.lcssa, %307
  store double %308, ptr %306, align 8, !tbaa !9
  %309 = add nuw i64 %.5667807, 1
  %exitcond915.not = icmp eq i64 %.5667807, %125
  br i1 %exitcond915.not, label %.loopexit727, label %.lr.ph809, !llvm.loop !33

310:                                              ; preds = %243
  br i1 %.not687, label %340, label %311

311:                                              ; preds = %310
  %.not697821 = icmp slt i64 %125, 1
  br i1 %.not697821, label %._crit_edge847.thread, label %.lr.ph824

.lr.ph824:                                        ; preds = %311
  %invariant.gep810 = getelementptr %struct.doublecomplex, ptr %33, i64 %108
  br label %312

312:                                              ; preds = %.lr.ph824, %._crit_edge817
  %.6822 = phi i64 [ 1, %.lr.ph824 ], [ %339, %._crit_edge817 ]
  %313 = load i64, ptr %3, align 8, !tbaa !5
  %.not698812 = icmp sgt i64 %.6822, %313
  br i1 %.not698812, label %._crit_edge817, label %.lr.ph816

.lr.ph816:                                        ; preds = %312
  %314 = mul nsw i64 %.6822, %25
  %invariant.gep819 = getelementptr %struct.doublecomplex, ptr %27, i64 %314
  br label %315

315:                                              ; preds = %.lr.ph816, %315
  %.2814 = phi double [ 0.000000e+00, %.lr.ph816 ], [ %334, %315 ]
  %.7677813 = phi i64 [ %.6822, %.lr.ph816 ], [ %335, %315 ]
  %gep820 = getelementptr %struct.doublecomplex, ptr %invariant.gep819, i64 %.7677813
  %316 = load double, ptr %gep820, align 8, !tbaa !19
  %317 = call double @d_imag(ptr noundef nonnull %gep820) #5
  %318 = insertelement <2 x double> poison, double %316, i64 0
  %319 = insertelement <2 x double> %318, double %317, i64 1
  %320 = fcmp oge <2 x double> %319, zeroinitializer
  %321 = fneg <2 x double> %319
  %322 = select <2 x i1> %320, <2 x double> %319, <2 x double> %321
  %shift1017 = shufflevector <2 x double> %322, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %323 = fadd <2 x double> %322, %shift1017
  %324 = extractelement <2 x double> %323, i64 0
  %gep811 = getelementptr %struct.doublecomplex, ptr %invariant.gep810, i64 %.7677813
  %325 = load double, ptr %gep811, align 8, !tbaa !19
  %326 = call double @d_imag(ptr noundef nonnull %gep811) #5
  %327 = insertelement <2 x double> poison, double %325, i64 0
  %328 = insertelement <2 x double> %327, double %326, i64 1
  %329 = fcmp oge <2 x double> %328, zeroinitializer
  %330 = fneg <2 x double> %328
  %331 = select <2 x i1> %329, <2 x double> %328, <2 x double> %330
  %shift1018 = shufflevector <2 x double> %331, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %332 = fadd <2 x double> %331, %shift1018
  %333 = extractelement <2 x double> %332, i64 0
  %334 = call double @llvm.fmuladd.f64(double %324, double %333, double %.2814)
  %335 = add nuw nsw i64 %.7677813, 1
  %.not698.not = icmp slt i64 %.7677813, %313
  br i1 %.not698.not, label %315, label %._crit_edge817, !llvm.loop !34

._crit_edge817:                                   ; preds = %315, %312
  %.2.lcssa = phi double [ 0.000000e+00, %312 ], [ %334, %315 ]
  %336 = getelementptr inbounds double, ptr %37, i64 %.6822
  %337 = load double, ptr %336, align 8, !tbaa !9
  %338 = fadd double %.2.lcssa, %337
  store double %338, ptr %336, align 8, !tbaa !9
  %339 = add nuw i64 %.6822, 1
  %exitcond916.not = icmp eq i64 %.6822, %125
  br i1 %exitcond916.not, label %.loopexit727, label %312, !llvm.loop !35

340:                                              ; preds = %310
  %invariant.gep836 = getelementptr %struct.doublecomplex, ptr %33, i64 %108
  %.not695838 = icmp slt i64 %125, 1
  br i1 %.not695838, label %._crit_edge847.thread, label %.lr.ph841

.lr.ph841:                                        ; preds = %340, %._crit_edge832
  %.7839 = phi i64 [ %351, %._crit_edge832 ], [ 1, %340 ]
  %gep837 = getelementptr %struct.doublecomplex, ptr %invariant.gep836, i64 %.7839
  %341 = load double, ptr %gep837, align 8, !tbaa !19
  %342 = call double @d_imag(ptr noundef nonnull %gep837) #5
  %343 = insertelement <2 x double> poison, double %341, i64 0
  %344 = insertelement <2 x double> %343, double %342, i64 1
  %345 = fcmp oge <2 x double> %344, zeroinitializer
  %346 = fneg <2 x double> %344
  %347 = select <2 x i1> %345, <2 x double> %344, <2 x double> %346
  %shift1019 = shufflevector <2 x double> %347, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %348 = fadd <2 x double> %347, %shift1019
  %349 = extractelement <2 x double> %348, i64 0
  %350 = load i64, ptr %3, align 8, !tbaa !5
  %351 = add nuw i64 %.7839, 1
  %.not696827.not = icmp slt i64 %.7839, %350
  br i1 %.not696827.not, label %.lr.ph831, label %._crit_edge832

.lr.ph831:                                        ; preds = %.lr.ph841
  %352 = mul nsw i64 %.7839, %25
  %invariant.gep834 = getelementptr %struct.doublecomplex, ptr %27, i64 %352
  br label %353

353:                                              ; preds = %.lr.ph831, %353
  %.3829 = phi double [ %349, %.lr.ph831 ], [ %372, %353 ]
  %.8828 = phi i64 [ %351, %.lr.ph831 ], [ %373, %353 ]
  %gep835 = getelementptr %struct.doublecomplex, ptr %invariant.gep834, i64 %.8828
  %354 = load double, ptr %gep835, align 8, !tbaa !19
  %355 = call double @d_imag(ptr noundef nonnull %gep835) #5
  %356 = insertelement <2 x double> poison, double %354, i64 0
  %357 = insertelement <2 x double> %356, double %355, i64 1
  %358 = fcmp oge <2 x double> %357, zeroinitializer
  %359 = fneg <2 x double> %357
  %360 = select <2 x i1> %358, <2 x double> %357, <2 x double> %359
  %shift1020 = shufflevector <2 x double> %360, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %361 = fadd <2 x double> %360, %shift1020
  %362 = extractelement <2 x double> %361, i64 0
  %gep826 = getelementptr %struct.doublecomplex, ptr %invariant.gep836, i64 %.8828
  %363 = load double, ptr %gep826, align 8, !tbaa !19
  %364 = call double @d_imag(ptr noundef nonnull %gep826) #5
  %365 = insertelement <2 x double> poison, double %363, i64 0
  %366 = insertelement <2 x double> %365, double %364, i64 1
  %367 = fcmp oge <2 x double> %366, zeroinitializer
  %368 = fneg <2 x double> %366
  %369 = select <2 x i1> %367, <2 x double> %366, <2 x double> %368
  %shift1021 = shufflevector <2 x double> %369, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %370 = fadd <2 x double> %369, %shift1021
  %371 = extractelement <2 x double> %370, i64 0
  %372 = call double @llvm.fmuladd.f64(double %362, double %371, double %.3829)
  %373 = add nuw nsw i64 %.8828, 1
  %.not696.not = icmp slt i64 %.8828, %350
  br i1 %.not696.not, label %353, label %._crit_edge832, !llvm.loop !36

._crit_edge832:                                   ; preds = %353, %.lr.ph841
  %.3.lcssa = phi double [ %349, %.lr.ph841 ], [ %372, %353 ]
  %374 = getelementptr inbounds double, ptr %37, i64 %.7839
  %375 = load double, ptr %374, align 8, !tbaa !9
  %376 = fadd double %.3.lcssa, %375
  store double %376, ptr %374, align 8, !tbaa !9
  %exitcond917.not = icmp eq i64 %.7839, %125
  br i1 %exitcond917.not, label %.loopexit727, label %.lr.ph841, !llvm.loop !37

.loopexit727:                                     ; preds = %154, %._crit_edge751, %._crit_edge764, %._crit_edge777, %269, %._crit_edge801, %._crit_edge817, %._crit_edge832
  %.pr926 = load i64, ptr %3, align 8, !tbaa !5
  %.not713842 = icmp slt i64 %.pr926, 1
  br i1 %.not713842, label %._crit_edge847.thread, label %.lr.ph846

.lr.ph846:                                        ; preds = %.loopexit727, %398
  %.4844 = phi double [ %400, %398 ], [ 0.000000e+00, %.loopexit727 ]
  %.9843 = phi i64 [ %401, %398 ], [ 1, %.loopexit727 ]
  %377 = getelementptr inbounds double, ptr %37, i64 %.9843
  %378 = load double, ptr %377, align 8, !tbaa !9
  %379 = fcmp ogt double %378, %104
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %.9843
  %381 = load double, ptr %380, align 8, !tbaa !19
  %382 = fcmp oge double %381, 0.000000e+00
  %383 = fneg double %381
  %384 = select i1 %382, double %381, double %383
  %385 = call double @d_imag(ptr noundef nonnull %380) #5
  %386 = fcmp oge double %385, 0.000000e+00
  %387 = fneg double %385
  %388 = select i1 %386, double %385, double %387
  %389 = fadd double %384, %388
  br i1 %379, label %390, label %393

390:                                              ; preds = %.lr.ph846
  %391 = load double, ptr %377, align 8, !tbaa !9
  %392 = fdiv double %389, %391
  br label %398

393:                                              ; preds = %.lr.ph846
  %394 = fadd double %103, %389
  %395 = load double, ptr %377, align 8, !tbaa !9
  %396 = fadd double %103, %395
  %397 = fdiv double %394, %396
  br label %398

398:                                              ; preds = %390, %393
  %.sink950 = phi double [ %392, %390 ], [ %397, %393 ]
  %399 = fcmp oge double %.4844, %.sink950
  %400 = select i1 %399, double %.4844, double %.sink950
  %401 = add nuw i64 %.9843, 1
  %exitcond918.not = icmp eq i64 %.9843, %.pr926
  br i1 %exitcond918.not, label %._crit_edge847, label %.lr.ph846, !llvm.loop !38

._crit_edge847.thread:                            ; preds = %.loopexit727, %128, %156, %186, %213, %245, %274, %311, %340
  %402 = getelementptr inbounds double, ptr %35, i64 %.1669881
  store double 0.000000e+00, ptr %402, align 8, !tbaa !9
  br label %._crit_edge853

._crit_edge847:                                   ; preds = %398
  %.pre = load i64, ptr %3, align 8, !tbaa !5
  %403 = getelementptr inbounds double, ptr %35, i64 %.1669881
  store double %400, ptr %403, align 8, !tbaa !9
  %.not714849 = icmp slt i64 %.pre, 1
  br i1 %.not714849, label %._crit_edge853, label %.lr.ph852

.lr.ph852:                                        ; preds = %._crit_edge847, %.lr.ph852
  %.10850 = phi i64 [ %420, %.lr.ph852 ], [ 1, %._crit_edge847 ]
  %404 = getelementptr inbounds double, ptr %37, i64 %.10850
  %405 = load double, ptr %404, align 8, !tbaa !9
  %406 = fcmp ogt double %405, %104
  %407 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %.10850
  %408 = load double, ptr %407, align 8, !tbaa !19
  %409 = call double @d_imag(ptr noundef nonnull %407) #5
  %410 = insertelement <2 x double> poison, double %408, i64 0
  %411 = insertelement <2 x double> %410, double %409, i64 1
  %412 = fcmp oge <2 x double> %411, zeroinitializer
  %413 = fneg <2 x double> %411
  %414 = select <2 x i1> %412, <2 x double> %411, <2 x double> %413
  %shift1022 = shufflevector <2 x double> %414, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %415 = fadd <2 x double> %414, %shift1022
  %416 = extractelement <2 x double> %415, i64 0
  %417 = load double, ptr %404, align 8, !tbaa !9
  %418 = call double @llvm.fmuladd.f64(double %106, double %417, double %416)
  %419 = fadd double %103, %418
  %storemerge719 = select i1 %406, double %418, double %419
  store double %storemerge719, ptr %404, align 8, !tbaa !9
  %420 = add nuw i64 %.10850, 1
  %exitcond919.not = icmp eq i64 %.10850, %.pre
  br i1 %exitcond919.not, label %._crit_edge853, label %.lr.ph852, !llvm.loop !39

._crit_edge853:                                   ; preds = %.lr.ph852, %._crit_edge847.thread, %._crit_edge847
  store i64 0, ptr %21, align 8, !tbaa !5
  %421 = getelementptr inbounds double, ptr %34, i64 %.1669881
  br label %.loopexit726

.loopexit726:                                     ; preds = %.loopexit726.backedge, %._crit_edge853
  %422 = load i64, ptr %3, align 8, !tbaa !5
  %423 = getelementptr %struct.doublecomplex, ptr %13, i64 %422
  %424 = call i32 @zlacn2_(ptr noundef nonnull %3, ptr noundef %423, ptr noundef %13, ptr noundef nonnull %421, ptr noundef nonnull %21, ptr noundef nonnull %22) #5
  %425 = load i64, ptr %21, align 8, !tbaa !5
  switch i64 %425, label %462 [
    i64 0, label %501
    i64 1, label %426
  ]

426:                                              ; preds = %.loopexit726
  %427 = call i32 @f2c_ztrsv(ptr noundef %0, ptr noundef nonnull %24, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef nonnull @c__1) #5
  %428 = load i64, ptr %3, align 8, !tbaa !5
  %.not718854 = icmp slt i64 %428, 1
  br i1 %.not718854, label %.loopexit726.backedge, label %.lr.ph857.preheader

.loopexit726.backedge:                            ; preds = %426, %..loopexit726_crit_edge, %498
  br label %.loopexit726

.lr.ph857.preheader:                              ; preds = %426
  %min.iters.check978 = icmp eq i64 %428, 1
  br i1 %min.iters.check978, label %.lr.ph857.preheader1026, label %vector.memcheck970

vector.memcheck970:                               ; preds = %.lr.ph857.preheader
  %429 = shl i64 %428, 4
  %scevgep971 = getelementptr i8, ptr %13, i64 %429
  %430 = shl i64 %428, 3
  %scevgep972 = getelementptr i8, ptr %14, i64 %430
  %bound0973 = icmp ugt ptr %scevgep972, %13
  %bound1974 = icmp ugt ptr %scevgep971, %14
  %found.conflict975 = and i1 %bound0973, %bound1974
  br i1 %found.conflict975, label %.lr.ph857.preheader1026, label %vector.ph979

vector.ph979:                                     ; preds = %vector.memcheck970
  %n.vec981 = and i64 %428, 9223372036854775806
  %ind.end982 = or i64 %428, 1
  br label %vector.body984

vector.body984:                                   ; preds = %vector.body984, %vector.ph979
  %index985 = phi i64 [ 0, %vector.ph979 ], [ %index.next992, %vector.body984 ]
  %431 = getelementptr double, ptr %14, i64 %index985
  %wide.load987 = load <2 x double>, ptr %431, align 8, !tbaa !9, !alias.scope !40
  %432 = getelementptr %struct.doublecomplex, ptr %13, i64 %index985
  %wide.vec988 = load <4 x double>, ptr %432, align 8, !tbaa !9
  %strided.vec989 = shufflevector <4 x double> %wide.vec988, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec990 = shufflevector <4 x double> %wide.vec988, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %433 = fmul <2 x double> %wide.load987, %strided.vec989
  %434 = fmul <2 x double> %wide.load987, %strided.vec990
  %interleaved.vec991 = shufflevector <2 x double> %433, <2 x double> %434, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec991, ptr %432, align 8, !tbaa !9
  %index.next992 = add nuw i64 %index985, 2
  %435 = icmp eq i64 %index.next992, %n.vec981
  br i1 %435, label %middle.block976, label %vector.body984, !llvm.loop !43

middle.block976:                                  ; preds = %vector.body984
  %cmp.n993 = icmp eq i64 %428, %n.vec981
  %436 = shufflevector <2 x double> %433, <2 x double> %434, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n993, label %..loopexit726_crit_edge, label %.lr.ph857.preheader1026

.lr.ph857.preheader1026:                          ; preds = %middle.block976, %vector.memcheck970, %.lr.ph857.preheader
  %.11855.ph = phi i64 [ 1, %vector.memcheck970 ], [ 1, %.lr.ph857.preheader ], [ %ind.end982, %middle.block976 ]
  %xtraiter = and i64 %428, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph857.prol.loopexit, label %.lr.ph857.prol

.lr.ph857.prol:                                   ; preds = %.lr.ph857.preheader1026
  %437 = getelementptr inbounds double, ptr %37, i64 %.11855.ph
  %438 = load double, ptr %437, align 8, !tbaa !9
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %.11855.ph
  %440 = load <2 x double>, ptr %439, align 8, !tbaa !9
  %441 = insertelement <2 x double> poison, double %438, i64 0
  %442 = shufflevector <2 x double> %441, <2 x double> poison, <2 x i32> zeroinitializer
  %443 = fmul <2 x double> %442, %440
  store <2 x double> %443, ptr %439, align 8, !tbaa !9
  %444 = add nuw i64 %.11855.ph, 1
  br label %.lr.ph857.prol.loopexit

.lr.ph857.prol.loopexit:                          ; preds = %.lr.ph857.prol, %.lr.ph857.preheader1026
  %.lcssa1041.unr = phi <2 x double> [ poison, %.lr.ph857.preheader1026 ], [ %443, %.lr.ph857.prol ]
  %.11855.unr = phi i64 [ %.11855.ph, %.lr.ph857.preheader1026 ], [ %444, %.lr.ph857.prol ]
  %445 = icmp eq i64 %428, %.11855.ph
  br i1 %445, label %..loopexit726_crit_edge, label %.lr.ph857

.lr.ph857:                                        ; preds = %.lr.ph857.prol.loopexit, %.lr.ph857
  %.11855 = phi i64 [ %461, %.lr.ph857 ], [ %.11855.unr, %.lr.ph857.prol.loopexit ]
  %446 = getelementptr inbounds double, ptr %37, i64 %.11855
  %447 = load double, ptr %446, align 8, !tbaa !9
  %448 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %.11855
  %449 = load <2 x double>, ptr %448, align 8, !tbaa !9
  %450 = insertelement <2 x double> poison, double %447, i64 0
  %451 = shufflevector <2 x double> %450, <2 x double> poison, <2 x i32> zeroinitializer
  %452 = fmul <2 x double> %451, %449
  store <2 x double> %452, ptr %448, align 8, !tbaa !9
  %453 = add nuw i64 %.11855, 1
  %454 = getelementptr double, ptr %14, i64 %.11855
  %455 = load double, ptr %454, align 8, !tbaa !9
  %456 = getelementptr %struct.doublecomplex, ptr %13, i64 %.11855
  %457 = load <2 x double>, ptr %456, align 8, !tbaa !9
  %458 = insertelement <2 x double> poison, double %455, i64 0
  %459 = shufflevector <2 x double> %458, <2 x double> poison, <2 x i32> zeroinitializer
  %460 = fmul <2 x double> %459, %457
  store <2 x double> %460, ptr %456, align 8, !tbaa !9
  %461 = add nuw i64 %.11855, 2
  %exitcond920.not.1 = icmp eq i64 %453, %428
  br i1 %exitcond920.not.1, label %..loopexit726_crit_edge, label %.lr.ph857, !llvm.loop !44

462:                                              ; preds = %.loopexit726
  %463 = load i64, ptr %3, align 8, !tbaa !5
  %.not717860 = icmp slt i64 %463, 1
  br i1 %.not717860, label %498, label %.lr.ph863.preheader

.lr.ph863.preheader:                              ; preds = %462
  %min.iters.check = icmp eq i64 %463, 1
  br i1 %min.iters.check, label %.lr.ph863.preheader1025, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph863.preheader
  %464 = shl i64 %463, 4
  %scevgep = getelementptr i8, ptr %13, i64 %464
  %465 = shl i64 %463, 3
  %scevgep968 = getelementptr i8, ptr %14, i64 %465
  %bound0 = icmp ugt ptr %scevgep968, %13
  %bound1 = icmp ugt ptr %scevgep, %14
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph863.preheader1025, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %463, 9223372036854775806
  %ind.end = or i64 %463, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %466 = getelementptr double, ptr %14, i64 %index
  %wide.load = load <2 x double>, ptr %466, align 8, !tbaa !9, !alias.scope !45
  %467 = getelementptr %struct.doublecomplex, ptr %13, i64 %index
  %wide.vec = load <4 x double>, ptr %467, align 8, !tbaa !9
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec969 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %468 = fmul <2 x double> %wide.load, %strided.vec
  %469 = fmul <2 x double> %wide.load, %strided.vec969
  %interleaved.vec = shufflevector <2 x double> %468, <2 x double> %469, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %467, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 2
  %470 = icmp eq i64 %index.next, %n.vec
  br i1 %470, label %middle.block, label %vector.body, !llvm.loop !48

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %463, %n.vec
  %471 = shufflevector <2 x double> %468, <2 x double> %469, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %._crit_edge864, label %.lr.ph863.preheader1025

.lr.ph863.preheader1025:                          ; preds = %middle.block, %vector.memcheck, %.lr.ph863.preheader
  %.12861.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph863.preheader ], [ %ind.end, %middle.block ]
  %xtraiter1046 = and i64 %463, 1
  %lcmp.mod1047.not = icmp eq i64 %xtraiter1046, 0
  br i1 %lcmp.mod1047.not, label %.lr.ph863.prol.loopexit, label %.lr.ph863.prol

.lr.ph863.prol:                                   ; preds = %.lr.ph863.preheader1025
  %472 = getelementptr inbounds double, ptr %37, i64 %.12861.ph
  %473 = load double, ptr %472, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %.12861.ph
  %475 = load <2 x double>, ptr %474, align 8, !tbaa !9
  %476 = insertelement <2 x double> poison, double %473, i64 0
  %477 = shufflevector <2 x double> %476, <2 x double> poison, <2 x i32> zeroinitializer
  %478 = fmul <2 x double> %477, %475
  store <2 x double> %478, ptr %474, align 8, !tbaa !9
  %479 = add nuw i64 %.12861.ph, 1
  br label %.lr.ph863.prol.loopexit

.lr.ph863.prol.loopexit:                          ; preds = %.lr.ph863.prol, %.lr.ph863.preheader1025
  %.lcssa1044.unr = phi <2 x double> [ poison, %.lr.ph863.preheader1025 ], [ %478, %.lr.ph863.prol ]
  %.12861.unr = phi i64 [ %.12861.ph, %.lr.ph863.preheader1025 ], [ %479, %.lr.ph863.prol ]
  %480 = icmp eq i64 %463, %.12861.ph
  br i1 %480, label %._crit_edge864, label %.lr.ph863

.lr.ph863:                                        ; preds = %.lr.ph863.prol.loopexit, %.lr.ph863
  %.12861 = phi i64 [ %496, %.lr.ph863 ], [ %.12861.unr, %.lr.ph863.prol.loopexit ]
  %481 = getelementptr inbounds double, ptr %37, i64 %.12861
  %482 = load double, ptr %481, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %.12861
  %484 = load <2 x double>, ptr %483, align 8, !tbaa !9
  %485 = insertelement <2 x double> poison, double %482, i64 0
  %486 = shufflevector <2 x double> %485, <2 x double> poison, <2 x i32> zeroinitializer
  %487 = fmul <2 x double> %486, %484
  store <2 x double> %487, ptr %483, align 8, !tbaa !9
  %488 = add nuw i64 %.12861, 1
  %489 = getelementptr double, ptr %14, i64 %.12861
  %490 = load double, ptr %489, align 8, !tbaa !9
  %491 = getelementptr %struct.doublecomplex, ptr %13, i64 %.12861
  %492 = load <2 x double>, ptr %491, align 8, !tbaa !9
  %493 = insertelement <2 x double> poison, double %490, i64 0
  %494 = shufflevector <2 x double> %493, <2 x double> poison, <2 x i32> zeroinitializer
  %495 = fmul <2 x double> %494, %492
  store <2 x double> %495, ptr %491, align 8, !tbaa !9
  %496 = add nuw i64 %.12861, 2
  %exitcond921.not.1 = icmp eq i64 %488, %463
  br i1 %exitcond921.not.1, label %._crit_edge864, label %.lr.ph863, !llvm.loop !49

._crit_edge864:                                   ; preds = %.lr.ph863.prol.loopexit, %.lr.ph863, %middle.block
  %497 = phi <2 x double> [ %471, %middle.block ], [ %.lcssa1044.unr, %.lr.ph863.prol.loopexit ], [ %495, %.lr.ph863 ]
  store <2 x double> %497, ptr %20, align 16, !tbaa !9
  br label %498

498:                                              ; preds = %._crit_edge864, %462
  %499 = call i32 @f2c_ztrsv(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %13, ptr noundef nonnull @c__1) #5
  br label %.loopexit726.backedge

..loopexit726_crit_edge:                          ; preds = %.lr.ph857.prol.loopexit, %.lr.ph857, %middle.block976
  %500 = phi <2 x double> [ %436, %middle.block976 ], [ %.lcssa1041.unr, %.lr.ph857.prol.loopexit ], [ %460, %.lr.ph857 ]
  store <2 x double> %500, ptr %20, align 16, !tbaa !9
  br label %.loopexit726.backedge

501:                                              ; preds = %.loopexit726
  %502 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep867 = getelementptr %struct.doublecomplex, ptr %33, i64 %108
  %.not716869 = icmp slt i64 %502, 1
  br i1 %.not716869, label %._crit_edge874.thread, label %.lr.ph873

.lr.ph873:                                        ; preds = %501, %.lr.ph873
  %.0871 = phi double [ %513, %.lr.ph873 ], [ 0.000000e+00, %501 ]
  %.13870 = phi i64 [ %514, %.lr.ph873 ], [ 1, %501 ]
  %gep868 = getelementptr %struct.doublecomplex, ptr %invariant.gep867, i64 %.13870
  %503 = load double, ptr %gep868, align 8, !tbaa !19
  %504 = call double @d_imag(ptr noundef nonnull %gep868) #5
  %505 = insertelement <2 x double> poison, double %503, i64 0
  %506 = insertelement <2 x double> %505, double %504, i64 1
  %507 = fcmp oge <2 x double> %506, zeroinitializer
  %508 = fneg <2 x double> %506
  %509 = select <2 x i1> %507, <2 x double> %506, <2 x double> %508
  %shift1023 = shufflevector <2 x double> %509, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %510 = fadd <2 x double> %509, %shift1023
  %511 = extractelement <2 x double> %510, i64 0
  %512 = fcmp oge double %.0871, %511
  %513 = select i1 %512, double %.0871, double %511
  %514 = add nuw i64 %.13870, 1
  %exitcond922.not = icmp eq i64 %.13870, %502
  br i1 %exitcond922.not, label %._crit_edge874, label %.lr.ph873, !llvm.loop !50

._crit_edge874:                                   ; preds = %.lr.ph873
  %515 = fcmp une double %513, 0.000000e+00
  br i1 %515, label %516, label %._crit_edge874.thread

516:                                              ; preds = %._crit_edge874
  %517 = load double, ptr %421, align 8, !tbaa !9
  %518 = fdiv double %517, %513
  store double %518, ptr %421, align 8, !tbaa !9
  br label %._crit_edge874.thread

._crit_edge874.thread:                            ; preds = %501, %._crit_edge874, %516
  %519 = add nuw nsw i64 %.1669881, 1
  %.not692.not = icmp slt i64 %.1669881, %105
  br i1 %.not692.not, label %107, label %.loopexit, !llvm.loop !51

.loopexit:                                        ; preds = %._crit_edge874.thread, %.lr.ph887.prol.loopexit, %.lr.ph887, %middle.block995, %72, %98, %73, %.thread
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #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 double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !12, !13}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !10, i64 0}
!20 = !{!"", !10, i64 0, !10, i64 8}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}
!38 = distinct !{!38, !12}
!39 = distinct !{!39, !12}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = distinct !{!43, !12, !13, !14}
!44 = distinct !{!44, !12, !13}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = distinct !{!48, !12, !13, !14}
!49 = distinct !{!49, !12, !13}
!50 = distinct !{!50, !12}
!51 = distinct !{!51, !12}


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