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

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

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

102:                                              ; preds = %15
  %103 = load ptr, ptr %16, align 8, !tbaa !5
  %104 = call i32 @lsame_(ptr noundef %103, ptr noundef @.str.1)
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %108, label %106

106:                                              ; preds = %102
  %107 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -1, ptr %107, align 4, !tbaa !9
  br label %154

108:                                              ; preds = %102, %15
  %109 = load ptr, ptr %17, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = icmp slt i32 %110, 0
  br i1 %111, label %112, label %114

112:                                              ; preds = %108
  %113 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -2, ptr %113, align 4, !tbaa !9
  br label %153

114:                                              ; preds = %108
  %115 = load ptr, ptr %18, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = icmp slt i32 %116, 0
  br i1 %117, label %118, label %120

118:                                              ; preds = %114
  %119 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -3, ptr %119, align 4, !tbaa !9
  br label %152

120:                                              ; preds = %114
  %121 = load ptr, ptr %23, align 8, !tbaa !5
  %122 = load i32, ptr %121, align 4, !tbaa !9
  %123 = load ptr, ptr %17, align 8, !tbaa !5
  %124 = load i32, ptr %123, align 4, !tbaa !9
  %125 = icmp sge i32 1, %124
  br i1 %125, label %126, label %127

126:                                              ; preds = %120
  br label %130

127:                                              ; preds = %120
  %128 = load ptr, ptr %17, align 8, !tbaa !5
  %129 = load i32, ptr %128, align 4, !tbaa !9
  br label %130

130:                                              ; preds = %127, %126
  %131 = phi i32 [ 1, %126 ], [ %129, %127 ]
  %132 = icmp slt i32 %122, %131
  br i1 %132, label %133, label %135

133:                                              ; preds = %130
  %134 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -8, ptr %134, align 4, !tbaa !9
  br label %151

135:                                              ; preds = %130
  %136 = load ptr, ptr %25, align 8, !tbaa !5
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = load ptr, ptr %17, align 8, !tbaa !5
  %139 = load i32, ptr %138, align 4, !tbaa !9
  %140 = icmp sge i32 1, %139
  br i1 %140, label %141, label %142

141:                                              ; preds = %135
  br label %145

142:                                              ; preds = %135
  %143 = load ptr, ptr %17, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  br label %145

145:                                              ; preds = %142, %141
  %146 = phi i32 [ 1, %141 ], [ %144, %142 ]
  %147 = icmp slt i32 %137, %146
  br i1 %147, label %148, label %150

148:                                              ; preds = %145
  %149 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -10, ptr %149, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %148, %145
  br label %151

151:                                              ; preds = %150, %133
  br label %152

152:                                              ; preds = %151, %118
  br label %153

153:                                              ; preds = %152, %112
  br label %154

154:                                              ; preds = %153, %106
  %155 = load ptr, ptr %30, align 8, !tbaa !5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %158, label %163

158:                                              ; preds = %154
  %159 = load ptr, ptr %30, align 8, !tbaa !5
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = sub nsw i32 0, %160
  store i32 %161, ptr %35, align 4, !tbaa !9
  %162 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %35, i32 noundef 6)
  store i32 1, ptr %62, align 4
  br label %1300

163:                                              ; preds = %154
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = icmp eq i32 %165, 0
  br i1 %166, label %171, label %167

167:                                              ; preds = %163
  %168 = load ptr, ptr %18, align 8, !tbaa !5
  %169 = load i32, ptr %168, align 4, !tbaa !9
  %170 = icmp eq i32 %169, 0
  br i1 %170, label %171, label %191

171:                                              ; preds = %167, %163
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = load i32, ptr %172, align 4, !tbaa !9
  store i32 %173, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %174

174:                                              ; preds = %187, %171
  %175 = load i32, ptr %49, align 4, !tbaa !9
  %176 = load i32, ptr %35, align 4, !tbaa !9
  %177 = icmp sle i32 %175, %176
  br i1 %177, label %178, label %190

178:                                              ; preds = %174
  %179 = load ptr, ptr %26, align 8, !tbaa !5
  %180 = load i32, ptr %49, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds double, ptr %179, i64 %181
  store double 0.000000e+00, ptr %182, align 8, !tbaa !11
  %183 = load ptr, ptr %27, align 8, !tbaa !5
  %184 = load i32, ptr %49, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %183, i64 %185
  store double 0.000000e+00, ptr %186, align 8, !tbaa !11
  br label %187

187:                                              ; preds = %178
  %188 = load i32, ptr %49, align 4, !tbaa !9
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %49, align 4, !tbaa !9
  br label %174, !llvm.loop !13

190:                                              ; preds = %174
  store i32 1, ptr %62, align 4
  br label %1300

191:                                              ; preds = %167
  %192 = load ptr, ptr %17, align 8, !tbaa !5
  %193 = load i32, ptr %192, align 4, !tbaa !9
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %58, align 4, !tbaa !9
  %195 = call double @dlamch_(ptr noundef @.str.3)
  store double %195, ptr %61, align 8, !tbaa !11
  %196 = call double @dlamch_(ptr noundef @.str.4)
  store double %196, ptr %59, align 8, !tbaa !11
  %197 = load i32, ptr %58, align 4, !tbaa !9
  %198 = sitofp i32 %197 to double
  %199 = load double, ptr %59, align 8, !tbaa !11
  %200 = fmul double %198, %199
  store double %200, ptr %46, align 8, !tbaa !11
  %201 = load double, ptr %46, align 8, !tbaa !11
  %202 = load double, ptr %61, align 8, !tbaa !11
  %203 = fdiv double %201, %202
  store double %203, ptr %47, align 8, !tbaa !11
  %204 = load ptr, ptr %18, align 8, !tbaa !5
  %205 = load i32, ptr %204, align 4, !tbaa !9
  store i32 %205, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %1296, %191
  %207 = load i32, ptr %49, align 4, !tbaa !9
  %208 = load i32, ptr %35, align 4, !tbaa !9
  %209 = icmp sle i32 %207, %208
  br i1 %209, label %210, label %1299

210:                                              ; preds = %206
  store i32 1, ptr %53, align 4, !tbaa !9
  store double 3.000000e+00, ptr %60, align 8, !tbaa !11
  br label %211

211:                                              ; preds = %921, %210
  %212 = load ptr, ptr %17, align 8, !tbaa !5
  %213 = load ptr, ptr %22, align 8, !tbaa !5
  %214 = load i32, ptr %49, align 4, !tbaa !9
  %215 = load i32, ptr %31, align 4, !tbaa !9
  %216 = mul nsw i32 %214, %215
  %217 = add nsw i32 %216, 1
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds %struct.doublecomplex, ptr %213, i64 %218
  %220 = load ptr, ptr %28, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.doublecomplex, ptr %220, i64 1
  call void @zcopy_(ptr noundef %212, ptr noundef %219, ptr noundef @c__1, ptr noundef %221, ptr noundef @c__1)
  %222 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double -1.000000e+00, ptr %222, align 8, !tbaa !15
  %223 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double 0.000000e+00, ptr %223, align 8, !tbaa !17
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  %225 = load ptr, ptr %17, align 8, !tbaa !5
  %226 = load ptr, ptr %19, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.doublecomplex, ptr %226, i64 1
  %228 = load ptr, ptr %24, align 8, !tbaa !5
  %229 = load i32, ptr %49, align 4, !tbaa !9
  %230 = load i32, ptr %33, align 4, !tbaa !9
  %231 = mul nsw i32 %229, %230
  %232 = add nsw i32 %231, 1
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds %struct.doublecomplex, ptr %228, i64 %233
  %235 = load ptr, ptr %28, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.doublecomplex, ptr %235, i64 1
  call void @zspmv_(ptr noundef %224, ptr noundef %225, ptr noundef %44, ptr noundef %227, ptr noundef %234, ptr noundef @c__1, ptr noundef @c_b1, ptr noundef %236, ptr noundef @c__1)
  %237 = load ptr, ptr %17, align 8, !tbaa !5
  %238 = load i32, ptr %237, align 4, !tbaa !9
  store i32 %238, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %239

239:                                              ; preds = %289, %211
  %240 = load i32, ptr %48, align 4, !tbaa !9
  %241 = load i32, ptr %36, align 4, !tbaa !9
  %242 = icmp sle i32 %240, %241
  br i1 %242, label %243, label %292

243:                                              ; preds = %239
  %244 = load i32, ptr %48, align 4, !tbaa !9
  %245 = load i32, ptr %49, align 4, !tbaa !9
  %246 = load i32, ptr %31, align 4, !tbaa !9
  %247 = mul nsw i32 %245, %246
  %248 = add nsw i32 %244, %247
  store i32 %248, ptr %37, align 4, !tbaa !9
  %249 = load ptr, ptr %22, align 8, !tbaa !5
  %250 = load i32, ptr %37, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds %struct.doublecomplex, ptr %249, i64 %251
  %253 = getelementptr inbounds %struct.doublecomplex, ptr %252, i32 0, i32 0
  %254 = load double, ptr %253, align 8, !tbaa !15
  store double %254, ptr %40, align 8, !tbaa !11
  %255 = load double, ptr %40, align 8, !tbaa !11
  %256 = fcmp oge double %255, 0.000000e+00
  br i1 %256, label %257, label %259

257:                                              ; preds = %243
  %258 = load double, ptr %40, align 8, !tbaa !11
  br label %262

259:                                              ; preds = %243
  %260 = load double, ptr %40, align 8, !tbaa !11
  %261 = fneg double %260
  br label %262

262:                                              ; preds = %259, %257
  %263 = phi double [ %258, %257 ], [ %261, %259 ]
  %264 = load ptr, ptr %22, align 8, !tbaa !5
  %265 = load i32, ptr %48, align 4, !tbaa !9
  %266 = load i32, ptr %49, align 4, !tbaa !9
  %267 = load i32, ptr %31, align 4, !tbaa !9
  %268 = mul nsw i32 %266, %267
  %269 = add nsw i32 %265, %268
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds %struct.doublecomplex, ptr %264, i64 %270
  %272 = call { double, double } @Cd(ptr noundef %271)
  %273 = extractvalue { double, double } %272, 0
  %274 = extractvalue { double, double } %272, 1
  store double %274, ptr %41, align 8, !tbaa !11
  %275 = load double, ptr %41, align 8, !tbaa !11
  %276 = fcmp oge double %275, 0.000000e+00
  br i1 %276, label %277, label %279

277:                                              ; preds = %262
  %278 = load double, ptr %41, align 8, !tbaa !11
  br label %282

279:                                              ; preds = %262
  %280 = load double, ptr %41, align 8, !tbaa !11
  %281 = fneg double %280
  br label %282

282:                                              ; preds = %279, %277
  %283 = phi double [ %278, %277 ], [ %281, %279 ]
  %284 = fadd double %263, %283
  %285 = load ptr, ptr %29, align 8, !tbaa !5
  %286 = load i32, ptr %48, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds double, ptr %285, i64 %287
  store double %284, ptr %288, align 8, !tbaa !11
  br label %289

289:                                              ; preds = %282
  %290 = load i32, ptr %48, align 4, !tbaa !9
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %48, align 4, !tbaa !9
  br label %239, !llvm.loop !18

292:                                              ; preds = %239
  store i32 1, ptr %56, align 4, !tbaa !9
  %293 = load i32, ptr %54, align 4, !tbaa !9
  %294 = icmp ne i32 %293, 0
  br i1 %294, label %295, label %533

295:                                              ; preds = %292
  %296 = load ptr, ptr %17, align 8, !tbaa !5
  %297 = load i32, ptr %296, align 4, !tbaa !9
  store i32 %297, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %50, align 4, !tbaa !9
  br label %298

298:                                              ; preds = %529, %295
  %299 = load i32, ptr %50, align 4, !tbaa !9
  %300 = load i32, ptr %36, align 4, !tbaa !9
  %301 = icmp sle i32 %299, %300
  br i1 %301, label %302, label %532

302:                                              ; preds = %298
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  %303 = load i32, ptr %50, align 4, !tbaa !9
  %304 = load i32, ptr %49, align 4, !tbaa !9
  %305 = load i32, ptr %33, align 4, !tbaa !9
  %306 = mul nsw i32 %304, %305
  %307 = add nsw i32 %303, %306
  store i32 %307, ptr %37, align 4, !tbaa !9
  %308 = load ptr, ptr %24, align 8, !tbaa !5
  %309 = load i32, ptr %37, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %308, i64 %310
  %312 = getelementptr inbounds %struct.doublecomplex, ptr %311, i32 0, i32 0
  %313 = load double, ptr %312, align 8, !tbaa !15
  store double %313, ptr %40, align 8, !tbaa !11
  %314 = load double, ptr %40, align 8, !tbaa !11
  %315 = fcmp oge double %314, 0.000000e+00
  br i1 %315, label %316, label %318

316:                                              ; preds = %302
  %317 = load double, ptr %40, align 8, !tbaa !11
  br label %321

318:                                              ; preds = %302
  %319 = load double, ptr %40, align 8, !tbaa !11
  %320 = fneg double %319
  br label %321

321:                                              ; preds = %318, %316
  %322 = phi double [ %317, %316 ], [ %320, %318 ]
  %323 = load ptr, ptr %24, align 8, !tbaa !5
  %324 = load i32, ptr %50, align 4, !tbaa !9
  %325 = load i32, ptr %49, align 4, !tbaa !9
  %326 = load i32, ptr %33, align 4, !tbaa !9
  %327 = mul nsw i32 %325, %326
  %328 = add nsw i32 %324, %327
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %struct.doublecomplex, ptr %323, i64 %329
  %331 = call { double, double } @Cd(ptr noundef %330)
  %332 = extractvalue { double, double } %331, 0
  %333 = extractvalue { double, double } %331, 1
  store double %333, ptr %41, align 8, !tbaa !11
  %334 = load double, ptr %41, align 8, !tbaa !11
  %335 = fcmp oge double %334, 0.000000e+00
  br i1 %335, label %336, label %338

336:                                              ; preds = %321
  %337 = load double, ptr %41, align 8, !tbaa !11
  br label %341

338:                                              ; preds = %321
  %339 = load double, ptr %41, align 8, !tbaa !11
  %340 = fneg double %339
  br label %341

341:                                              ; preds = %338, %336
  %342 = phi double [ %337, %336 ], [ %340, %338 ]
  %343 = fadd double %322, %342
  store double %343, ptr %57, align 8, !tbaa !11
  %344 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %344, ptr %55, align 4, !tbaa !9
  %345 = load i32, ptr %50, align 4, !tbaa !9
  %346 = sub nsw i32 %345, 1
  store i32 %346, ptr %37, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %347

347:                                              ; preds = %470, %341
  %348 = load i32, ptr %48, align 4, !tbaa !9
  %349 = load i32, ptr %37, align 4, !tbaa !9
  %350 = icmp sle i32 %348, %349
  br i1 %350, label %351, label %473

351:                                              ; preds = %347
  %352 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %352, ptr %38, align 4, !tbaa !9
  %353 = load ptr, ptr %19, align 8, !tbaa !5
  %354 = load i32, ptr %38, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds %struct.doublecomplex, ptr %353, i64 %355
  %357 = getelementptr inbounds %struct.doublecomplex, ptr %356, i32 0, i32 0
  %358 = load double, ptr %357, align 8, !tbaa !15
  store double %358, ptr %40, align 8, !tbaa !11
  %359 = load double, ptr %40, align 8, !tbaa !11
  %360 = fcmp oge double %359, 0.000000e+00
  br i1 %360, label %361, label %363

361:                                              ; preds = %351
  %362 = load double, ptr %40, align 8, !tbaa !11
  br label %366

363:                                              ; preds = %351
  %364 = load double, ptr %40, align 8, !tbaa !11
  %365 = fneg double %364
  br label %366

366:                                              ; preds = %363, %361
  %367 = phi double [ %362, %361 ], [ %365, %363 ]
  %368 = load ptr, ptr %19, align 8, !tbaa !5
  %369 = load i32, ptr %55, align 4, !tbaa !9
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds %struct.doublecomplex, ptr %368, i64 %370
  %372 = call { double, double } @Cd(ptr noundef %371)
  %373 = extractvalue { double, double } %372, 0
  %374 = extractvalue { double, double } %372, 1
  store double %374, ptr %41, align 8, !tbaa !11
  %375 = load double, ptr %41, align 8, !tbaa !11
  %376 = fcmp oge double %375, 0.000000e+00
  br i1 %376, label %377, label %379

377:                                              ; preds = %366
  %378 = load double, ptr %41, align 8, !tbaa !11
  br label %382

379:                                              ; preds = %366
  %380 = load double, ptr %41, align 8, !tbaa !11
  %381 = fneg double %380
  br label %382

382:                                              ; preds = %379, %377
  %383 = phi double [ %378, %377 ], [ %381, %379 ]
  %384 = fadd double %367, %383
  %385 = load double, ptr %57, align 8, !tbaa !11
  %386 = load ptr, ptr %29, align 8, !tbaa !5
  %387 = load i32, ptr %48, align 4, !tbaa !9
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds double, ptr %386, i64 %388
  %390 = load double, ptr %389, align 8, !tbaa !11
  %391 = call double @llvm.fmuladd.f64(double %384, double %385, double %390)
  store double %391, ptr %389, align 8, !tbaa !11
  %392 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %392, ptr %38, align 4, !tbaa !9
  %393 = load i32, ptr %48, align 4, !tbaa !9
  %394 = load i32, ptr %49, align 4, !tbaa !9
  %395 = load i32, ptr %33, align 4, !tbaa !9
  %396 = mul nsw i32 %394, %395
  %397 = add nsw i32 %393, %396
  store i32 %397, ptr %39, align 4, !tbaa !9
  %398 = load ptr, ptr %19, align 8, !tbaa !5
  %399 = load i32, ptr %38, align 4, !tbaa !9
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds %struct.doublecomplex, ptr %398, i64 %400
  %402 = getelementptr inbounds %struct.doublecomplex, ptr %401, i32 0, i32 0
  %403 = load double, ptr %402, align 8, !tbaa !15
  store double %403, ptr %40, align 8, !tbaa !11
  %404 = load double, ptr %40, align 8, !tbaa !11
  %405 = fcmp oge double %404, 0.000000e+00
  br i1 %405, label %406, label %408

406:                                              ; preds = %382
  %407 = load double, ptr %40, align 8, !tbaa !11
  br label %411

408:                                              ; preds = %382
  %409 = load double, ptr %40, align 8, !tbaa !11
  %410 = fneg double %409
  br label %411

411:                                              ; preds = %408, %406
  %412 = phi double [ %407, %406 ], [ %410, %408 ]
  %413 = load ptr, ptr %19, align 8, !tbaa !5
  %414 = load i32, ptr %55, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds %struct.doublecomplex, ptr %413, i64 %415
  %417 = call { double, double } @Cd(ptr noundef %416)
  %418 = extractvalue { double, double } %417, 0
  %419 = extractvalue { double, double } %417, 1
  store double %419, ptr %41, align 8, !tbaa !11
  %420 = load double, ptr %41, align 8, !tbaa !11
  %421 = fcmp oge double %420, 0.000000e+00
  br i1 %421, label %422, label %424

422:                                              ; preds = %411
  %423 = load double, ptr %41, align 8, !tbaa !11
  br label %427

424:                                              ; preds = %411
  %425 = load double, ptr %41, align 8, !tbaa !11
  %426 = fneg double %425
  br label %427

427:                                              ; preds = %424, %422
  %428 = phi double [ %423, %422 ], [ %426, %424 ]
  %429 = fadd double %412, %428
  %430 = load ptr, ptr %24, align 8, !tbaa !5
  %431 = load i32, ptr %39, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %430, i64 %432
  %434 = getelementptr inbounds %struct.doublecomplex, ptr %433, i32 0, i32 0
  %435 = load double, ptr %434, align 8, !tbaa !15
  store double %435, ptr %42, align 8, !tbaa !11
  %436 = load double, ptr %42, align 8, !tbaa !11
  %437 = fcmp oge double %436, 0.000000e+00
  br i1 %437, label %438, label %440

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

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

443:                                              ; preds = %440, %438
  %444 = phi double [ %439, %438 ], [ %442, %440 ]
  %445 = load ptr, ptr %24, align 8, !tbaa !5
  %446 = load i32, ptr %48, align 4, !tbaa !9
  %447 = load i32, ptr %49, align 4, !tbaa !9
  %448 = load i32, ptr %33, align 4, !tbaa !9
  %449 = mul nsw i32 %447, %448
  %450 = add nsw i32 %446, %449
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds %struct.doublecomplex, ptr %445, i64 %451
  %453 = call { double, double } @Cd(ptr noundef %452)
  %454 = extractvalue { double, double } %453, 0
  %455 = extractvalue { double, double } %453, 1
  store double %455, ptr %43, align 8, !tbaa !11
  %456 = load double, ptr %43, align 8, !tbaa !11
  %457 = fcmp oge double %456, 0.000000e+00
  br i1 %457, label %458, label %460

458:                                              ; preds = %443
  %459 = load double, ptr %43, align 8, !tbaa !11
  br label %463

460:                                              ; preds = %443
  %461 = load double, ptr %43, align 8, !tbaa !11
  %462 = fneg double %461
  br label %463

463:                                              ; preds = %460, %458
  %464 = phi double [ %459, %458 ], [ %462, %460 ]
  %465 = fadd double %444, %464
  %466 = load double, ptr %51, align 8, !tbaa !11
  %467 = call double @llvm.fmuladd.f64(double %429, double %465, double %466)
  store double %467, ptr %51, align 8, !tbaa !11
  %468 = load i32, ptr %55, align 4, !tbaa !9
  %469 = add nsw i32 %468, 1
  store i32 %469, ptr %55, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %463
  %471 = load i32, ptr %48, align 4, !tbaa !9
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %48, align 4, !tbaa !9
  br label %347, !llvm.loop !19

473:                                              ; preds = %347
  %474 = load i32, ptr %56, align 4, !tbaa !9
  %475 = load i32, ptr %50, align 4, !tbaa !9
  %476 = add nsw i32 %474, %475
  %477 = sub nsw i32 %476, 1
  store i32 %477, ptr %37, align 4, !tbaa !9
  %478 = load ptr, ptr %29, align 8, !tbaa !5
  %479 = load i32, ptr %50, align 4, !tbaa !9
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds double, ptr %478, i64 %480
  %482 = load double, ptr %481, align 8, !tbaa !11
  %483 = load ptr, ptr %19, align 8, !tbaa !5
  %484 = load i32, ptr %37, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %483, i64 %485
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %486, i32 0, i32 0
  %488 = load double, ptr %487, align 8, !tbaa !15
  store double %488, ptr %40, align 8, !tbaa !11
  %489 = load double, ptr %40, align 8, !tbaa !11
  %490 = fcmp oge double %489, 0.000000e+00
  br i1 %490, label %491, label %493

491:                                              ; preds = %473
  %492 = load double, ptr %40, align 8, !tbaa !11
  br label %496

493:                                              ; preds = %473
  %494 = load double, ptr %40, align 8, !tbaa !11
  %495 = fneg double %494
  br label %496

496:                                              ; preds = %493, %491
  %497 = phi double [ %492, %491 ], [ %495, %493 ]
  %498 = load ptr, ptr %19, align 8, !tbaa !5
  %499 = load i32, ptr %56, align 4, !tbaa !9
  %500 = load i32, ptr %50, align 4, !tbaa !9
  %501 = add nsw i32 %499, %500
  %502 = sub nsw i32 %501, 1
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds %struct.doublecomplex, ptr %498, i64 %503
  %505 = call { double, double } @Cd(ptr noundef %504)
  %506 = extractvalue { double, double } %505, 0
  %507 = extractvalue { double, double } %505, 1
  store double %507, ptr %41, align 8, !tbaa !11
  %508 = load double, ptr %41, align 8, !tbaa !11
  %509 = fcmp oge double %508, 0.000000e+00
  br i1 %509, label %510, label %512

510:                                              ; preds = %496
  %511 = load double, ptr %41, align 8, !tbaa !11
  br label %515

512:                                              ; preds = %496
  %513 = load double, ptr %41, align 8, !tbaa !11
  %514 = fneg double %513
  br label %515

515:                                              ; preds = %512, %510
  %516 = phi double [ %511, %510 ], [ %514, %512 ]
  %517 = fadd double %497, %516
  %518 = load double, ptr %57, align 8, !tbaa !11
  %519 = call double @llvm.fmuladd.f64(double %517, double %518, double %482)
  %520 = load double, ptr %51, align 8, !tbaa !11
  %521 = fadd double %519, %520
  %522 = load ptr, ptr %29, align 8, !tbaa !5
  %523 = load i32, ptr %50, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds double, ptr %522, i64 %524
  store double %521, ptr %525, align 8, !tbaa !11
  %526 = load i32, ptr %50, align 4, !tbaa !9
  %527 = load i32, ptr %56, align 4, !tbaa !9
  %528 = add nsw i32 %527, %526
  store i32 %528, ptr %56, align 4, !tbaa !9
  br label %529

529:                                              ; preds = %515
  %530 = load i32, ptr %50, align 4, !tbaa !9
  %531 = add nsw i32 %530, 1
  store i32 %531, ptr %50, align 4, !tbaa !9
  br label %298, !llvm.loop !20

532:                                              ; preds = %298
  br label %773

533:                                              ; preds = %292
  %534 = load ptr, ptr %17, align 8, !tbaa !5
  %535 = load i32, ptr %534, align 4, !tbaa !9
  store i32 %535, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %50, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %769, %533
  %537 = load i32, ptr %50, align 4, !tbaa !9
  %538 = load i32, ptr %36, align 4, !tbaa !9
  %539 = icmp sle i32 %537, %538
  br i1 %539, label %540, label %772

540:                                              ; preds = %536
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  %541 = load i32, ptr %50, align 4, !tbaa !9
  %542 = load i32, ptr %49, align 4, !tbaa !9
  %543 = load i32, ptr %33, align 4, !tbaa !9
  %544 = mul nsw i32 %542, %543
  %545 = add nsw i32 %541, %544
  store i32 %545, ptr %37, align 4, !tbaa !9
  %546 = load ptr, ptr %24, align 8, !tbaa !5
  %547 = load i32, ptr %37, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds %struct.doublecomplex, ptr %546, i64 %548
  %550 = getelementptr inbounds %struct.doublecomplex, ptr %549, i32 0, i32 0
  %551 = load double, ptr %550, align 8, !tbaa !15
  store double %551, ptr %40, align 8, !tbaa !11
  %552 = load double, ptr %40, align 8, !tbaa !11
  %553 = fcmp oge double %552, 0.000000e+00
  br i1 %553, label %554, label %556

554:                                              ; preds = %540
  %555 = load double, ptr %40, align 8, !tbaa !11
  br label %559

556:                                              ; preds = %540
  %557 = load double, ptr %40, align 8, !tbaa !11
  %558 = fneg double %557
  br label %559

559:                                              ; preds = %556, %554
  %560 = phi double [ %555, %554 ], [ %558, %556 ]
  %561 = load ptr, ptr %24, align 8, !tbaa !5
  %562 = load i32, ptr %50, align 4, !tbaa !9
  %563 = load i32, ptr %49, align 4, !tbaa !9
  %564 = load i32, ptr %33, align 4, !tbaa !9
  %565 = mul nsw i32 %563, %564
  %566 = add nsw i32 %562, %565
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds %struct.doublecomplex, ptr %561, i64 %567
  %569 = call { double, double } @Cd(ptr noundef %568)
  %570 = extractvalue { double, double } %569, 0
  %571 = extractvalue { double, double } %569, 1
  store double %571, ptr %41, align 8, !tbaa !11
  %572 = load double, ptr %41, align 8, !tbaa !11
  %573 = fcmp oge double %572, 0.000000e+00
  br i1 %573, label %574, label %576

574:                                              ; preds = %559
  %575 = load double, ptr %41, align 8, !tbaa !11
  br label %579

576:                                              ; preds = %559
  %577 = load double, ptr %41, align 8, !tbaa !11
  %578 = fneg double %577
  br label %579

579:                                              ; preds = %576, %574
  %580 = phi double [ %575, %574 ], [ %578, %576 ]
  %581 = fadd double %560, %580
  store double %581, ptr %57, align 8, !tbaa !11
  %582 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %582, ptr %37, align 4, !tbaa !9
  %583 = load ptr, ptr %19, align 8, !tbaa !5
  %584 = load i32, ptr %37, align 4, !tbaa !9
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds %struct.doublecomplex, ptr %583, i64 %585
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %586, i32 0, i32 0
  %588 = load double, ptr %587, align 8, !tbaa !15
  store double %588, ptr %40, align 8, !tbaa !11
  %589 = load double, ptr %40, align 8, !tbaa !11
  %590 = fcmp oge double %589, 0.000000e+00
  br i1 %590, label %591, label %593

591:                                              ; preds = %579
  %592 = load double, ptr %40, align 8, !tbaa !11
  br label %596

593:                                              ; preds = %579
  %594 = load double, ptr %40, align 8, !tbaa !11
  %595 = fneg double %594
  br label %596

596:                                              ; preds = %593, %591
  %597 = phi double [ %592, %591 ], [ %595, %593 ]
  %598 = load ptr, ptr %19, align 8, !tbaa !5
  %599 = load i32, ptr %56, align 4, !tbaa !9
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds %struct.doublecomplex, ptr %598, i64 %600
  %602 = call { double, double } @Cd(ptr noundef %601)
  %603 = extractvalue { double, double } %602, 0
  %604 = extractvalue { double, double } %602, 1
  store double %604, ptr %41, align 8, !tbaa !11
  %605 = load double, ptr %41, align 8, !tbaa !11
  %606 = fcmp oge double %605, 0.000000e+00
  br i1 %606, label %607, label %609

607:                                              ; preds = %596
  %608 = load double, ptr %41, align 8, !tbaa !11
  br label %612

609:                                              ; preds = %596
  %610 = load double, ptr %41, align 8, !tbaa !11
  %611 = fneg double %610
  br label %612

612:                                              ; preds = %609, %607
  %613 = phi double [ %608, %607 ], [ %611, %609 ]
  %614 = fadd double %597, %613
  %615 = load double, ptr %57, align 8, !tbaa !11
  %616 = load ptr, ptr %29, align 8, !tbaa !5
  %617 = load i32, ptr %50, align 4, !tbaa !9
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds double, ptr %616, i64 %618
  %620 = load double, ptr %619, align 8, !tbaa !11
  %621 = call double @llvm.fmuladd.f64(double %614, double %615, double %620)
  store double %621, ptr %619, align 8, !tbaa !11
  %622 = load i32, ptr %56, align 4, !tbaa !9
  %623 = add nsw i32 %622, 1
  store i32 %623, ptr %55, align 4, !tbaa !9
  %624 = load ptr, ptr %17, align 8, !tbaa !5
  %625 = load i32, ptr %624, align 4, !tbaa !9
  store i32 %625, ptr %37, align 4, !tbaa !9
  %626 = load i32, ptr %50, align 4, !tbaa !9
  %627 = add nsw i32 %626, 1
  store i32 %627, ptr %48, align 4, !tbaa !9
  br label %628

628:                                              ; preds = %751, %612
  %629 = load i32, ptr %48, align 4, !tbaa !9
  %630 = load i32, ptr %37, align 4, !tbaa !9
  %631 = icmp sle i32 %629, %630
  br i1 %631, label %632, label %754

632:                                              ; preds = %628
  %633 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %633, ptr %38, align 4, !tbaa !9
  %634 = load ptr, ptr %19, align 8, !tbaa !5
  %635 = load i32, ptr %38, align 4, !tbaa !9
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %634, i64 %636
  %638 = getelementptr inbounds %struct.doublecomplex, ptr %637, i32 0, i32 0
  %639 = load double, ptr %638, align 8, !tbaa !15
  store double %639, ptr %40, align 8, !tbaa !11
  %640 = load double, ptr %40, align 8, !tbaa !11
  %641 = fcmp oge double %640, 0.000000e+00
  br i1 %641, label %642, label %644

642:                                              ; preds = %632
  %643 = load double, ptr %40, align 8, !tbaa !11
  br label %647

644:                                              ; preds = %632
  %645 = load double, ptr %40, align 8, !tbaa !11
  %646 = fneg double %645
  br label %647

647:                                              ; preds = %644, %642
  %648 = phi double [ %643, %642 ], [ %646, %644 ]
  %649 = load ptr, ptr %19, align 8, !tbaa !5
  %650 = load i32, ptr %55, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %649, i64 %651
  %653 = call { double, double } @Cd(ptr noundef %652)
  %654 = extractvalue { double, double } %653, 0
  %655 = extractvalue { double, double } %653, 1
  store double %655, ptr %41, align 8, !tbaa !11
  %656 = load double, ptr %41, align 8, !tbaa !11
  %657 = fcmp oge double %656, 0.000000e+00
  br i1 %657, label %658, label %660

658:                                              ; preds = %647
  %659 = load double, ptr %41, align 8, !tbaa !11
  br label %663

660:                                              ; preds = %647
  %661 = load double, ptr %41, align 8, !tbaa !11
  %662 = fneg double %661
  br label %663

663:                                              ; preds = %660, %658
  %664 = phi double [ %659, %658 ], [ %662, %660 ]
  %665 = fadd double %648, %664
  %666 = load double, ptr %57, align 8, !tbaa !11
  %667 = load ptr, ptr %29, align 8, !tbaa !5
  %668 = load i32, ptr %48, align 4, !tbaa !9
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds double, ptr %667, i64 %669
  %671 = load double, ptr %670, align 8, !tbaa !11
  %672 = call double @llvm.fmuladd.f64(double %665, double %666, double %671)
  store double %672, ptr %670, align 8, !tbaa !11
  %673 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %673, ptr %38, align 4, !tbaa !9
  %674 = load i32, ptr %48, align 4, !tbaa !9
  %675 = load i32, ptr %49, align 4, !tbaa !9
  %676 = load i32, ptr %33, align 4, !tbaa !9
  %677 = mul nsw i32 %675, %676
  %678 = add nsw i32 %674, %677
  store i32 %678, ptr %39, align 4, !tbaa !9
  %679 = load ptr, ptr %19, align 8, !tbaa !5
  %680 = load i32, ptr %38, align 4, !tbaa !9
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds %struct.doublecomplex, ptr %679, i64 %681
  %683 = getelementptr inbounds %struct.doublecomplex, ptr %682, i32 0, i32 0
  %684 = load double, ptr %683, align 8, !tbaa !15
  store double %684, ptr %40, align 8, !tbaa !11
  %685 = load double, ptr %40, align 8, !tbaa !11
  %686 = fcmp oge double %685, 0.000000e+00
  br i1 %686, label %687, label %689

687:                                              ; preds = %663
  %688 = load double, ptr %40, align 8, !tbaa !11
  br label %692

689:                                              ; preds = %663
  %690 = load double, ptr %40, align 8, !tbaa !11
  %691 = fneg double %690
  br label %692

692:                                              ; preds = %689, %687
  %693 = phi double [ %688, %687 ], [ %691, %689 ]
  %694 = load ptr, ptr %19, align 8, !tbaa !5
  %695 = load i32, ptr %55, align 4, !tbaa !9
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds %struct.doublecomplex, ptr %694, i64 %696
  %698 = call { double, double } @Cd(ptr noundef %697)
  %699 = extractvalue { double, double } %698, 0
  %700 = extractvalue { double, double } %698, 1
  store double %700, ptr %41, align 8, !tbaa !11
  %701 = load double, ptr %41, align 8, !tbaa !11
  %702 = fcmp oge double %701, 0.000000e+00
  br i1 %702, label %703, label %705

703:                                              ; preds = %692
  %704 = load double, ptr %41, align 8, !tbaa !11
  br label %708

705:                                              ; preds = %692
  %706 = load double, ptr %41, align 8, !tbaa !11
  %707 = fneg double %706
  br label %708

708:                                              ; preds = %705, %703
  %709 = phi double [ %704, %703 ], [ %707, %705 ]
  %710 = fadd double %693, %709
  %711 = load ptr, ptr %24, align 8, !tbaa !5
  %712 = load i32, ptr %39, align 4, !tbaa !9
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds %struct.doublecomplex, ptr %711, i64 %713
  %715 = getelementptr inbounds %struct.doublecomplex, ptr %714, i32 0, i32 0
  %716 = load double, ptr %715, align 8, !tbaa !15
  store double %716, ptr %42, align 8, !tbaa !11
  %717 = load double, ptr %42, align 8, !tbaa !11
  %718 = fcmp oge double %717, 0.000000e+00
  br i1 %718, label %719, label %721

719:                                              ; preds = %708
  %720 = load double, ptr %42, align 8, !tbaa !11
  br label %724

721:                                              ; preds = %708
  %722 = load double, ptr %42, align 8, !tbaa !11
  %723 = fneg double %722
  br label %724

724:                                              ; preds = %721, %719
  %725 = phi double [ %720, %719 ], [ %723, %721 ]
  %726 = load ptr, ptr %24, align 8, !tbaa !5
  %727 = load i32, ptr %48, align 4, !tbaa !9
  %728 = load i32, ptr %49, align 4, !tbaa !9
  %729 = load i32, ptr %33, align 4, !tbaa !9
  %730 = mul nsw i32 %728, %729
  %731 = add nsw i32 %727, %730
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds %struct.doublecomplex, ptr %726, i64 %732
  %734 = call { double, double } @Cd(ptr noundef %733)
  %735 = extractvalue { double, double } %734, 0
  %736 = extractvalue { double, double } %734, 1
  store double %736, ptr %43, align 8, !tbaa !11
  %737 = load double, ptr %43, align 8, !tbaa !11
  %738 = fcmp oge double %737, 0.000000e+00
  br i1 %738, label %739, label %741

739:                                              ; preds = %724
  %740 = load double, ptr %43, align 8, !tbaa !11
  br label %744

741:                                              ; preds = %724
  %742 = load double, ptr %43, align 8, !tbaa !11
  %743 = fneg double %742
  br label %744

744:                                              ; preds = %741, %739
  %745 = phi double [ %740, %739 ], [ %743, %741 ]
  %746 = fadd double %725, %745
  %747 = load double, ptr %51, align 8, !tbaa !11
  %748 = call double @llvm.fmuladd.f64(double %710, double %746, double %747)
  store double %748, ptr %51, align 8, !tbaa !11
  %749 = load i32, ptr %55, align 4, !tbaa !9
  %750 = add nsw i32 %749, 1
  store i32 %750, ptr %55, align 4, !tbaa !9
  br label %751

751:                                              ; preds = %744
  %752 = load i32, ptr %48, align 4, !tbaa !9
  %753 = add nsw i32 %752, 1
  store i32 %753, ptr %48, align 4, !tbaa !9
  br label %628, !llvm.loop !21

754:                                              ; preds = %628
  %755 = load double, ptr %51, align 8, !tbaa !11
  %756 = load ptr, ptr %29, align 8, !tbaa !5
  %757 = load i32, ptr %50, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds double, ptr %756, i64 %758
  %760 = load double, ptr %759, align 8, !tbaa !11
  %761 = fadd double %760, %755
  store double %761, ptr %759, align 8, !tbaa !11
  %762 = load ptr, ptr %17, align 8, !tbaa !5
  %763 = load i32, ptr %762, align 4, !tbaa !9
  %764 = load i32, ptr %50, align 4, !tbaa !9
  %765 = sub nsw i32 %763, %764
  %766 = add nsw i32 %765, 1
  %767 = load i32, ptr %56, align 4, !tbaa !9
  %768 = add nsw i32 %767, %766
  store i32 %768, ptr %56, align 4, !tbaa !9
  br label %769

769:                                              ; preds = %754
  %770 = load i32, ptr %50, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  store i32 %771, ptr %50, align 4, !tbaa !9
  br label %536, !llvm.loop !22

772:                                              ; preds = %536
  br label %773

773:                                              ; preds = %772, %532
  store double 0.000000e+00, ptr %51, align 8, !tbaa !11
  %774 = load ptr, ptr %17, align 8, !tbaa !5
  %775 = load i32, ptr %774, align 4, !tbaa !9
  store i32 %775, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %776

776:                                              ; preds = %893, %773
  %777 = load i32, ptr %48, align 4, !tbaa !9
  %778 = load i32, ptr %36, align 4, !tbaa !9
  %779 = icmp sle i32 %777, %778
  br i1 %779, label %780, label %896

780:                                              ; preds = %776
  %781 = load ptr, ptr %29, align 8, !tbaa !5
  %782 = load i32, ptr %48, align 4, !tbaa !9
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds double, ptr %781, i64 %783
  %785 = load double, ptr %784, align 8, !tbaa !11
  %786 = load double, ptr %47, align 8, !tbaa !11
  %787 = fcmp ogt double %785, %786
  br i1 %787, label %788, label %838

788:                                              ; preds = %780
  %789 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %789, ptr %37, align 4, !tbaa !9
  %790 = load double, ptr %51, align 8, !tbaa !11
  store double %790, ptr %42, align 8, !tbaa !11
  %791 = load ptr, ptr %28, align 8, !tbaa !5
  %792 = load i32, ptr %37, align 4, !tbaa !9
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds %struct.doublecomplex, ptr %791, i64 %793
  %795 = getelementptr inbounds %struct.doublecomplex, ptr %794, i32 0, i32 0
  %796 = load double, ptr %795, align 8, !tbaa !15
  store double %796, ptr %40, align 8, !tbaa !11
  %797 = load double, ptr %40, align 8, !tbaa !11
  %798 = fcmp oge double %797, 0.000000e+00
  br i1 %798, label %799, label %801

799:                                              ; preds = %788
  %800 = load double, ptr %40, align 8, !tbaa !11
  br label %804

801:                                              ; preds = %788
  %802 = load double, ptr %40, align 8, !tbaa !11
  %803 = fneg double %802
  br label %804

804:                                              ; preds = %801, %799
  %805 = phi double [ %800, %799 ], [ %803, %801 ]
  %806 = load ptr, ptr %28, align 8, !tbaa !5
  %807 = load i32, ptr %48, align 4, !tbaa !9
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %806, i64 %808
  %810 = call { double, double } @Cd(ptr noundef %809)
  %811 = extractvalue { double, double } %810, 0
  %812 = extractvalue { double, double } %810, 1
  store double %812, ptr %41, align 8, !tbaa !11
  %813 = load double, ptr %41, align 8, !tbaa !11
  %814 = fcmp oge double %813, 0.000000e+00
  br i1 %814, label %815, label %817

815:                                              ; preds = %804
  %816 = load double, ptr %41, align 8, !tbaa !11
  br label %820

817:                                              ; preds = %804
  %818 = load double, ptr %41, align 8, !tbaa !11
  %819 = fneg double %818
  br label %820

820:                                              ; preds = %817, %815
  %821 = phi double [ %816, %815 ], [ %819, %817 ]
  %822 = fadd double %805, %821
  %823 = load ptr, ptr %29, align 8, !tbaa !5
  %824 = load i32, ptr %48, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds double, ptr %823, i64 %825
  %827 = load double, ptr %826, align 8, !tbaa !11
  %828 = fdiv double %822, %827
  store double %828, ptr %43, align 8, !tbaa !11
  %829 = load double, ptr %42, align 8, !tbaa !11
  %830 = load double, ptr %43, align 8, !tbaa !11
  %831 = fcmp oge double %829, %830
  br i1 %831, label %832, label %834

832:                                              ; preds = %820
  %833 = load double, ptr %42, align 8, !tbaa !11
  br label %836

834:                                              ; preds = %820
  %835 = load double, ptr %43, align 8, !tbaa !11
  br label %836

836:                                              ; preds = %834, %832
  %837 = phi double [ %833, %832 ], [ %835, %834 ]
  store double %837, ptr %51, align 8, !tbaa !11
  br label %892

838:                                              ; preds = %780
  %839 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %839, ptr %37, align 4, !tbaa !9
  %840 = load double, ptr %51, align 8, !tbaa !11
  store double %840, ptr %42, align 8, !tbaa !11
  %841 = load ptr, ptr %28, align 8, !tbaa !5
  %842 = load i32, ptr %37, align 4, !tbaa !9
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds %struct.doublecomplex, ptr %841, i64 %843
  %845 = getelementptr inbounds %struct.doublecomplex, ptr %844, i32 0, i32 0
  %846 = load double, ptr %845, align 8, !tbaa !15
  store double %846, ptr %40, align 8, !tbaa !11
  %847 = load double, ptr %40, align 8, !tbaa !11
  %848 = fcmp oge double %847, 0.000000e+00
  br i1 %848, label %849, label %851

849:                                              ; preds = %838
  %850 = load double, ptr %40, align 8, !tbaa !11
  br label %854

851:                                              ; preds = %838
  %852 = load double, ptr %40, align 8, !tbaa !11
  %853 = fneg double %852
  br label %854

854:                                              ; preds = %851, %849
  %855 = phi double [ %850, %849 ], [ %853, %851 ]
  %856 = load ptr, ptr %28, align 8, !tbaa !5
  %857 = load i32, ptr %48, align 4, !tbaa !9
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds %struct.doublecomplex, ptr %856, i64 %858
  %860 = call { double, double } @Cd(ptr noundef %859)
  %861 = extractvalue { double, double } %860, 0
  %862 = extractvalue { double, double } %860, 1
  store double %862, ptr %41, align 8, !tbaa !11
  %863 = load double, ptr %41, align 8, !tbaa !11
  %864 = fcmp oge double %863, 0.000000e+00
  br i1 %864, label %865, label %867

865:                                              ; preds = %854
  %866 = load double, ptr %41, align 8, !tbaa !11
  br label %870

867:                                              ; preds = %854
  %868 = load double, ptr %41, align 8, !tbaa !11
  %869 = fneg double %868
  br label %870

870:                                              ; preds = %867, %865
  %871 = phi double [ %866, %865 ], [ %869, %867 ]
  %872 = fadd double %855, %871
  %873 = load double, ptr %46, align 8, !tbaa !11
  %874 = fadd double %872, %873
  %875 = load ptr, ptr %29, align 8, !tbaa !5
  %876 = load i32, ptr %48, align 4, !tbaa !9
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds double, ptr %875, i64 %877
  %879 = load double, ptr %878, align 8, !tbaa !11
  %880 = load double, ptr %46, align 8, !tbaa !11
  %881 = fadd double %879, %880
  %882 = fdiv double %874, %881
  store double %882, ptr %43, align 8, !tbaa !11
  %883 = load double, ptr %42, align 8, !tbaa !11
  %884 = load double, ptr %43, align 8, !tbaa !11
  %885 = fcmp oge double %883, %884
  br i1 %885, label %886, label %888

886:                                              ; preds = %870
  %887 = load double, ptr %42, align 8, !tbaa !11
  br label %890

888:                                              ; preds = %870
  %889 = load double, ptr %43, align 8, !tbaa !11
  br label %890

890:                                              ; preds = %888, %886
  %891 = phi double [ %887, %886 ], [ %889, %888 ]
  store double %891, ptr %51, align 8, !tbaa !11
  br label %892

892:                                              ; preds = %890, %836
  br label %893

893:                                              ; preds = %892
  %894 = load i32, ptr %48, align 4, !tbaa !9
  %895 = add nsw i32 %894, 1
  store i32 %895, ptr %48, align 4, !tbaa !9
  br label %776, !llvm.loop !23

896:                                              ; preds = %776
  %897 = load double, ptr %51, align 8, !tbaa !11
  %898 = load ptr, ptr %27, align 8, !tbaa !5
  %899 = load i32, ptr %49, align 4, !tbaa !9
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds double, ptr %898, i64 %900
  store double %897, ptr %901, align 8, !tbaa !11
  %902 = load ptr, ptr %27, align 8, !tbaa !5
  %903 = load i32, ptr %49, align 4, !tbaa !9
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds double, ptr %902, i64 %904
  %906 = load double, ptr %905, align 8, !tbaa !11
  %907 = load double, ptr %61, align 8, !tbaa !11
  %908 = fcmp ogt double %906, %907
  br i1 %908, label %909, label %949

909:                                              ; preds = %896
  %910 = load ptr, ptr %27, align 8, !tbaa !5
  %911 = load i32, ptr %49, align 4, !tbaa !9
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds double, ptr %910, i64 %912
  %914 = load double, ptr %913, align 8, !tbaa !11
  %915 = fmul double %914, 2.000000e+00
  %916 = load double, ptr %60, align 8, !tbaa !11
  %917 = fcmp ole double %915, %916
  br i1 %917, label %918, label %949

918:                                              ; preds = %909
  %919 = load i32, ptr %53, align 4, !tbaa !9
  %920 = icmp sle i32 %919, 5
  br i1 %920, label %921, label %949

921:                                              ; preds = %918
  %922 = load ptr, ptr %16, align 8, !tbaa !5
  %923 = load ptr, ptr %17, align 8, !tbaa !5
  %924 = load ptr, ptr %20, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.doublecomplex, ptr %924, i64 1
  %926 = load ptr, ptr %21, align 8, !tbaa !5
  %927 = getelementptr inbounds i32, ptr %926, i64 1
  %928 = load ptr, ptr %28, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.doublecomplex, ptr %928, i64 1
  %930 = load ptr, ptr %17, align 8, !tbaa !5
  %931 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zsptrs_(ptr noundef %922, ptr noundef %923, ptr noundef @c__1, ptr noundef %925, ptr noundef %927, ptr noundef %929, ptr noundef %930, ptr noundef %931)
  %932 = load ptr, ptr %17, align 8, !tbaa !5
  %933 = load ptr, ptr %28, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.doublecomplex, ptr %933, i64 1
  %935 = load ptr, ptr %24, align 8, !tbaa !5
  %936 = load i32, ptr %49, align 4, !tbaa !9
  %937 = load i32, ptr %33, align 4, !tbaa !9
  %938 = mul nsw i32 %936, %937
  %939 = add nsw i32 %938, 1
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds %struct.doublecomplex, ptr %935, i64 %940
  call void @zaxpy_(ptr noundef %932, ptr noundef @c_b1, ptr noundef %934, ptr noundef @c__1, ptr noundef %941, ptr noundef @c__1)
  %942 = load ptr, ptr %27, align 8, !tbaa !5
  %943 = load i32, ptr %49, align 4, !tbaa !9
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds double, ptr %942, i64 %944
  %946 = load double, ptr %945, align 8, !tbaa !11
  store double %946, ptr %60, align 8, !tbaa !11
  %947 = load i32, ptr %53, align 4, !tbaa !9
  %948 = add nsw i32 %947, 1
  store i32 %948, ptr %53, align 4, !tbaa !9
  br label %211

949:                                              ; preds = %918, %909, %896
  %950 = load ptr, ptr %17, align 8, !tbaa !5
  %951 = load i32, ptr %950, align 4, !tbaa !9
  store i32 %951, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %952

952:                                              ; preds = %1063, %949
  %953 = load i32, ptr %48, align 4, !tbaa !9
  %954 = load i32, ptr %36, align 4, !tbaa !9
  %955 = icmp sle i32 %953, %954
  br i1 %955, label %956, label %1066

956:                                              ; preds = %952
  %957 = load ptr, ptr %29, align 8, !tbaa !5
  %958 = load i32, ptr %48, align 4, !tbaa !9
  %959 = sext i32 %958 to i64
  %960 = getelementptr inbounds double, ptr %957, i64 %959
  %961 = load double, ptr %960, align 8, !tbaa !11
  %962 = load double, ptr %47, align 8, !tbaa !11
  %963 = fcmp ogt double %961, %962
  br i1 %963, label %964, label %1012

964:                                              ; preds = %956
  %965 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %965, ptr %37, align 4, !tbaa !9
  %966 = load ptr, ptr %28, align 8, !tbaa !5
  %967 = load i32, ptr %37, align 4, !tbaa !9
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %966, i64 %968
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %969, i32 0, i32 0
  %971 = load double, ptr %970, align 8, !tbaa !15
  store double %971, ptr %40, align 8, !tbaa !11
  %972 = load double, ptr %40, align 8, !tbaa !11
  %973 = fcmp oge double %972, 0.000000e+00
  br i1 %973, label %974, label %976

974:                                              ; preds = %964
  %975 = load double, ptr %40, align 8, !tbaa !11
  br label %979

976:                                              ; preds = %964
  %977 = load double, ptr %40, align 8, !tbaa !11
  %978 = fneg double %977
  br label %979

979:                                              ; preds = %976, %974
  %980 = phi double [ %975, %974 ], [ %978, %976 ]
  %981 = load ptr, ptr %28, align 8, !tbaa !5
  %982 = load i32, ptr %48, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %981, i64 %983
  %985 = call { double, double } @Cd(ptr noundef %984)
  %986 = extractvalue { double, double } %985, 0
  %987 = extractvalue { double, double } %985, 1
  store double %987, ptr %41, align 8, !tbaa !11
  %988 = load double, ptr %41, align 8, !tbaa !11
  %989 = fcmp oge double %988, 0.000000e+00
  br i1 %989, label %990, label %992

990:                                              ; preds = %979
  %991 = load double, ptr %41, align 8, !tbaa !11
  br label %995

992:                                              ; preds = %979
  %993 = load double, ptr %41, align 8, !tbaa !11
  %994 = fneg double %993
  br label %995

995:                                              ; preds = %992, %990
  %996 = phi double [ %991, %990 ], [ %994, %992 ]
  %997 = fadd double %980, %996
  %998 = load i32, ptr %58, align 4, !tbaa !9
  %999 = sitofp i32 %998 to double
  %1000 = load double, ptr %61, align 8, !tbaa !11
  %1001 = fmul double %999, %1000
  %1002 = load ptr, ptr %29, align 8, !tbaa !5
  %1003 = load i32, ptr %48, align 4, !tbaa !9
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds double, ptr %1002, i64 %1004
  %1006 = load double, ptr %1005, align 8, !tbaa !11
  %1007 = call double @llvm.fmuladd.f64(double %1001, double %1006, double %997)
  %1008 = load ptr, ptr %29, align 8, !tbaa !5
  %1009 = load i32, ptr %48, align 4, !tbaa !9
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds double, ptr %1008, i64 %1010
  store double %1007, ptr %1011, align 8, !tbaa !11
  br label %1062

1012:                                             ; preds = %956
  %1013 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1013, ptr %37, align 4, !tbaa !9
  %1014 = load ptr, ptr %28, align 8, !tbaa !5
  %1015 = load i32, ptr %37, align 4, !tbaa !9
  %1016 = sext i32 %1015 to i64
  %1017 = getelementptr inbounds %struct.doublecomplex, ptr %1014, i64 %1016
  %1018 = getelementptr inbounds %struct.doublecomplex, ptr %1017, i32 0, i32 0
  %1019 = load double, ptr %1018, align 8, !tbaa !15
  store double %1019, ptr %40, align 8, !tbaa !11
  %1020 = load double, ptr %40, align 8, !tbaa !11
  %1021 = fcmp oge double %1020, 0.000000e+00
  br i1 %1021, label %1022, label %1024

1022:                                             ; preds = %1012
  %1023 = load double, ptr %40, align 8, !tbaa !11
  br label %1027

1024:                                             ; preds = %1012
  %1025 = load double, ptr %40, align 8, !tbaa !11
  %1026 = fneg double %1025
  br label %1027

1027:                                             ; preds = %1024, %1022
  %1028 = phi double [ %1023, %1022 ], [ %1026, %1024 ]
  %1029 = load ptr, ptr %28, align 8, !tbaa !5
  %1030 = load i32, ptr %48, align 4, !tbaa !9
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds %struct.doublecomplex, ptr %1029, i64 %1031
  %1033 = call { double, double } @Cd(ptr noundef %1032)
  %1034 = extractvalue { double, double } %1033, 0
  %1035 = extractvalue { double, double } %1033, 1
  store double %1035, ptr %41, align 8, !tbaa !11
  %1036 = load double, ptr %41, align 8, !tbaa !11
  %1037 = fcmp oge double %1036, 0.000000e+00
  br i1 %1037, label %1038, label %1040

1038:                                             ; preds = %1027
  %1039 = load double, ptr %41, align 8, !tbaa !11
  br label %1043

1040:                                             ; preds = %1027
  %1041 = load double, ptr %41, align 8, !tbaa !11
  %1042 = fneg double %1041
  br label %1043

1043:                                             ; preds = %1040, %1038
  %1044 = phi double [ %1039, %1038 ], [ %1042, %1040 ]
  %1045 = fadd double %1028, %1044
  %1046 = load i32, ptr %58, align 4, !tbaa !9
  %1047 = sitofp i32 %1046 to double
  %1048 = load double, ptr %61, align 8, !tbaa !11
  %1049 = fmul double %1047, %1048
  %1050 = load ptr, ptr %29, align 8, !tbaa !5
  %1051 = load i32, ptr %48, align 4, !tbaa !9
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds double, ptr %1050, i64 %1052
  %1054 = load double, ptr %1053, align 8, !tbaa !11
  %1055 = call double @llvm.fmuladd.f64(double %1049, double %1054, double %1045)
  %1056 = load double, ptr %46, align 8, !tbaa !11
  %1057 = fadd double %1055, %1056
  %1058 = load ptr, ptr %29, align 8, !tbaa !5
  %1059 = load i32, ptr %48, align 4, !tbaa !9
  %1060 = sext i32 %1059 to i64
  %1061 = getelementptr inbounds double, ptr %1058, i64 %1060
  store double %1057, ptr %1061, align 8, !tbaa !11
  br label %1062

1062:                                             ; preds = %1043, %995
  br label %1063

1063:                                             ; preds = %1062
  %1064 = load i32, ptr %48, align 4, !tbaa !9
  %1065 = add nsw i32 %1064, 1
  store i32 %1065, ptr %48, align 4, !tbaa !9
  br label %952, !llvm.loop !24

1066:                                             ; preds = %952
  store i32 0, ptr %45, align 4, !tbaa !9
  br label %1067

1067:                                             ; preds = %1221, %1066
  %1068 = load ptr, ptr %17, align 8, !tbaa !5
  %1069 = load ptr, ptr %28, align 8, !tbaa !5
  %1070 = load ptr, ptr %17, align 8, !tbaa !5
  %1071 = load i32, ptr %1070, align 4, !tbaa !9
  %1072 = add nsw i32 %1071, 1
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds %struct.doublecomplex, ptr %1069, i64 %1073
  %1075 = load ptr, ptr %28, align 8, !tbaa !5
  %1076 = getelementptr inbounds %struct.doublecomplex, ptr %1075, i64 1
  %1077 = load ptr, ptr %26, align 8, !tbaa !5
  %1078 = load i32, ptr %49, align 4, !tbaa !9
  %1079 = sext i32 %1078 to i64
  %1080 = getelementptr inbounds double, ptr %1077, i64 %1079
  %1081 = getelementptr inbounds [3 x i32], ptr %52, i64 0, i64 0
  call void @zlacn2_(ptr noundef %1068, ptr noundef %1074, ptr noundef %1076, ptr noundef %1080, ptr noundef %45, ptr noundef %1081)
  %1082 = load i32, ptr %45, align 4, !tbaa !9
  %1083 = icmp ne i32 %1082, 0
  br i1 %1083, label %1084, label %1222

1084:                                             ; preds = %1067
  %1085 = load i32, ptr %45, align 4, !tbaa !9
  %1086 = icmp eq i32 %1085, 1
  br i1 %1086, label %1087, label %1152

1087:                                             ; preds = %1084
  %1088 = load ptr, ptr %16, align 8, !tbaa !5
  %1089 = load ptr, ptr %17, align 8, !tbaa !5
  %1090 = load ptr, ptr %20, align 8, !tbaa !5
  %1091 = getelementptr inbounds %struct.doublecomplex, ptr %1090, i64 1
  %1092 = load ptr, ptr %21, align 8, !tbaa !5
  %1093 = getelementptr inbounds i32, ptr %1092, i64 1
  %1094 = load ptr, ptr %28, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.doublecomplex, ptr %1094, i64 1
  %1096 = load ptr, ptr %17, align 8, !tbaa !5
  %1097 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zsptrs_(ptr noundef %1088, ptr noundef %1089, ptr noundef @c__1, ptr noundef %1091, ptr noundef %1093, ptr noundef %1095, ptr noundef %1096, ptr noundef %1097)
  %1098 = load ptr, ptr %17, align 8, !tbaa !5
  %1099 = load i32, ptr %1098, align 4, !tbaa !9
  store i32 %1099, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %1100

1100:                                             ; preds = %1148, %1087
  %1101 = load i32, ptr %48, align 4, !tbaa !9
  %1102 = load i32, ptr %36, align 4, !tbaa !9
  %1103 = icmp sle i32 %1101, %1102
  br i1 %1103, label %1104, label %1151

1104:                                             ; preds = %1100
  %1105 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1105, ptr %37, align 4, !tbaa !9
  %1106 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1106, ptr %38, align 4, !tbaa !9
  %1107 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1107, ptr %39, align 4, !tbaa !9
  %1108 = load ptr, ptr %29, align 8, !tbaa !5
  %1109 = load i32, ptr %38, align 4, !tbaa !9
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds double, ptr %1108, i64 %1110
  %1112 = load double, ptr %1111, align 8, !tbaa !11
  %1113 = load ptr, ptr %28, align 8, !tbaa !5
  %1114 = load i32, ptr %39, align 4, !tbaa !9
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds %struct.doublecomplex, ptr %1113, i64 %1115
  %1117 = getelementptr inbounds %struct.doublecomplex, ptr %1116, i32 0, i32 0
  %1118 = load double, ptr %1117, align 8, !tbaa !15
  %1119 = fmul double %1112, %1118
  %1120 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %1119, ptr %1120, align 8, !tbaa !15
  %1121 = load ptr, ptr %29, align 8, !tbaa !5
  %1122 = load i32, ptr %38, align 4, !tbaa !9
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds double, ptr %1121, i64 %1123
  %1125 = load double, ptr %1124, align 8, !tbaa !11
  %1126 = load ptr, ptr %28, align 8, !tbaa !5
  %1127 = load i32, ptr %39, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds %struct.doublecomplex, ptr %1126, i64 %1128
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %1129, i32 0, i32 1
  %1131 = load double, ptr %1130, align 8, !tbaa !17
  %1132 = fmul double %1125, %1131
  %1133 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %1132, ptr %1133, align 8, !tbaa !17
  %1134 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1135 = load double, ptr %1134, align 8, !tbaa !15
  %1136 = load ptr, ptr %28, align 8, !tbaa !5
  %1137 = load i32, ptr %37, align 4, !tbaa !9
  %1138 = sext i32 %1137 to i64
  %1139 = getelementptr inbounds %struct.doublecomplex, ptr %1136, i64 %1138
  %1140 = getelementptr inbounds %struct.doublecomplex, ptr %1139, i32 0, i32 0
  store double %1135, ptr %1140, align 8, !tbaa !15
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1142 = load double, ptr %1141, align 8, !tbaa !17
  %1143 = load ptr, ptr %28, align 8, !tbaa !5
  %1144 = load i32, ptr %37, align 4, !tbaa !9
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds %struct.doublecomplex, ptr %1143, i64 %1145
  %1147 = getelementptr inbounds %struct.doublecomplex, ptr %1146, i32 0, i32 1
  store double %1142, ptr %1147, align 8, !tbaa !17
  br label %1148

1148:                                             ; preds = %1104
  %1149 = load i32, ptr %48, align 4, !tbaa !9
  %1150 = add nsw i32 %1149, 1
  store i32 %1150, ptr %48, align 4, !tbaa !9
  br label %1100, !llvm.loop !25

1151:                                             ; preds = %1100
  br label %1221

1152:                                             ; preds = %1084
  %1153 = load i32, ptr %45, align 4, !tbaa !9
  %1154 = icmp eq i32 %1153, 2
  br i1 %1154, label %1155, label %1220

1155:                                             ; preds = %1152
  %1156 = load ptr, ptr %17, align 8, !tbaa !5
  %1157 = load i32, ptr %1156, align 4, !tbaa !9
  store i32 %1157, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %1158

1158:                                             ; preds = %1206, %1155
  %1159 = load i32, ptr %48, align 4, !tbaa !9
  %1160 = load i32, ptr %36, align 4, !tbaa !9
  %1161 = icmp sle i32 %1159, %1160
  br i1 %1161, label %1162, label %1209

1162:                                             ; preds = %1158
  %1163 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1163, ptr %37, align 4, !tbaa !9
  %1164 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1164, ptr %38, align 4, !tbaa !9
  %1165 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1165, ptr %39, align 4, !tbaa !9
  %1166 = load ptr, ptr %29, align 8, !tbaa !5
  %1167 = load i32, ptr %38, align 4, !tbaa !9
  %1168 = sext i32 %1167 to i64
  %1169 = getelementptr inbounds double, ptr %1166, i64 %1168
  %1170 = load double, ptr %1169, align 8, !tbaa !11
  %1171 = load ptr, ptr %28, align 8, !tbaa !5
  %1172 = load i32, ptr %39, align 4, !tbaa !9
  %1173 = sext i32 %1172 to i64
  %1174 = getelementptr inbounds %struct.doublecomplex, ptr %1171, i64 %1173
  %1175 = getelementptr inbounds %struct.doublecomplex, ptr %1174, i32 0, i32 0
  %1176 = load double, ptr %1175, align 8, !tbaa !15
  %1177 = fmul double %1170, %1176
  %1178 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %1177, ptr %1178, align 8, !tbaa !15
  %1179 = load ptr, ptr %29, align 8, !tbaa !5
  %1180 = load i32, ptr %38, align 4, !tbaa !9
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds double, ptr %1179, i64 %1181
  %1183 = load double, ptr %1182, align 8, !tbaa !11
  %1184 = load ptr, ptr %28, align 8, !tbaa !5
  %1185 = load i32, ptr %39, align 4, !tbaa !9
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds %struct.doublecomplex, ptr %1184, i64 %1186
  %1188 = getelementptr inbounds %struct.doublecomplex, ptr %1187, i32 0, i32 1
  %1189 = load double, ptr %1188, align 8, !tbaa !17
  %1190 = fmul double %1183, %1189
  %1191 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %1190, ptr %1191, align 8, !tbaa !17
  %1192 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1193 = load double, ptr %1192, align 8, !tbaa !15
  %1194 = load ptr, ptr %28, align 8, !tbaa !5
  %1195 = load i32, ptr %37, align 4, !tbaa !9
  %1196 = sext i32 %1195 to i64
  %1197 = getelementptr inbounds %struct.doublecomplex, ptr %1194, i64 %1196
  %1198 = getelementptr inbounds %struct.doublecomplex, ptr %1197, i32 0, i32 0
  store double %1193, ptr %1198, align 8, !tbaa !15
  %1199 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1200 = load double, ptr %1199, align 8, !tbaa !17
  %1201 = load ptr, ptr %28, align 8, !tbaa !5
  %1202 = load i32, ptr %37, align 4, !tbaa !9
  %1203 = sext i32 %1202 to i64
  %1204 = getelementptr inbounds %struct.doublecomplex, ptr %1201, i64 %1203
  %1205 = getelementptr inbounds %struct.doublecomplex, ptr %1204, i32 0, i32 1
  store double %1200, ptr %1205, align 8, !tbaa !17
  br label %1206

1206:                                             ; preds = %1162
  %1207 = load i32, ptr %48, align 4, !tbaa !9
  %1208 = add nsw i32 %1207, 1
  store i32 %1208, ptr %48, align 4, !tbaa !9
  br label %1158, !llvm.loop !26

1209:                                             ; preds = %1158
  %1210 = load ptr, ptr %16, align 8, !tbaa !5
  %1211 = load ptr, ptr %17, align 8, !tbaa !5
  %1212 = load ptr, ptr %20, align 8, !tbaa !5
  %1213 = getelementptr inbounds %struct.doublecomplex, ptr %1212, i64 1
  %1214 = load ptr, ptr %21, align 8, !tbaa !5
  %1215 = getelementptr inbounds i32, ptr %1214, i64 1
  %1216 = load ptr, ptr %28, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.doublecomplex, ptr %1216, i64 1
  %1218 = load ptr, ptr %17, align 8, !tbaa !5
  %1219 = load ptr, ptr %30, align 8, !tbaa !5
  call void @zsptrs_(ptr noundef %1210, ptr noundef %1211, ptr noundef @c__1, ptr noundef %1213, ptr noundef %1215, ptr noundef %1217, ptr noundef %1218, ptr noundef %1219)
  br label %1220

1220:                                             ; preds = %1209, %1152
  br label %1221

1221:                                             ; preds = %1220, %1151
  br label %1067

1222:                                             ; preds = %1067
  store double 0.000000e+00, ptr %60, align 8, !tbaa !11
  %1223 = load ptr, ptr %17, align 8, !tbaa !5
  %1224 = load i32, ptr %1223, align 4, !tbaa !9
  store i32 %1224, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %1225

1225:                                             ; preds = %1281, %1222
  %1226 = load i32, ptr %48, align 4, !tbaa !9
  %1227 = load i32, ptr %36, align 4, !tbaa !9
  %1228 = icmp sle i32 %1226, %1227
  br i1 %1228, label %1229, label %1284

1229:                                             ; preds = %1225
  %1230 = load i32, ptr %48, align 4, !tbaa !9
  %1231 = load i32, ptr %49, align 4, !tbaa !9
  %1232 = load i32, ptr %33, align 4, !tbaa !9
  %1233 = mul nsw i32 %1231, %1232
  %1234 = add nsw i32 %1230, %1233
  store i32 %1234, ptr %37, align 4, !tbaa !9
  %1235 = load double, ptr %60, align 8, !tbaa !11
  store double %1235, ptr %42, align 8, !tbaa !11
  %1236 = load ptr, ptr %24, align 8, !tbaa !5
  %1237 = load i32, ptr %37, align 4, !tbaa !9
  %1238 = sext i32 %1237 to i64
  %1239 = getelementptr inbounds %struct.doublecomplex, ptr %1236, i64 %1238
  %1240 = getelementptr inbounds %struct.doublecomplex, ptr %1239, i32 0, i32 0
  %1241 = load double, ptr %1240, align 8, !tbaa !15
  store double %1241, ptr %40, align 8, !tbaa !11
  %1242 = load double, ptr %40, align 8, !tbaa !11
  %1243 = fcmp oge double %1242, 0.000000e+00
  br i1 %1243, label %1244, label %1246

1244:                                             ; preds = %1229
  %1245 = load double, ptr %40, align 8, !tbaa !11
  br label %1249

1246:                                             ; preds = %1229
  %1247 = load double, ptr %40, align 8, !tbaa !11
  %1248 = fneg double %1247
  br label %1249

1249:                                             ; preds = %1246, %1244
  %1250 = phi double [ %1245, %1244 ], [ %1248, %1246 ]
  %1251 = load ptr, ptr %24, align 8, !tbaa !5
  %1252 = load i32, ptr %48, align 4, !tbaa !9
  %1253 = load i32, ptr %49, align 4, !tbaa !9
  %1254 = load i32, ptr %33, align 4, !tbaa !9
  %1255 = mul nsw i32 %1253, %1254
  %1256 = add nsw i32 %1252, %1255
  %1257 = sext i32 %1256 to i64
  %1258 = getelementptr inbounds %struct.doublecomplex, ptr %1251, i64 %1257
  %1259 = call { double, double } @Cd(ptr noundef %1258)
  %1260 = extractvalue { double, double } %1259, 0
  %1261 = extractvalue { double, double } %1259, 1
  store double %1261, ptr %41, align 8, !tbaa !11
  %1262 = load double, ptr %41, align 8, !tbaa !11
  %1263 = fcmp oge double %1262, 0.000000e+00
  br i1 %1263, label %1264, label %1266

1264:                                             ; preds = %1249
  %1265 = load double, ptr %41, align 8, !tbaa !11
  br label %1269

1266:                                             ; preds = %1249
  %1267 = load double, ptr %41, align 8, !tbaa !11
  %1268 = fneg double %1267
  br label %1269

1269:                                             ; preds = %1266, %1264
  %1270 = phi double [ %1265, %1264 ], [ %1268, %1266 ]
  %1271 = fadd double %1250, %1270
  store double %1271, ptr %43, align 8, !tbaa !11
  %1272 = load double, ptr %42, align 8, !tbaa !11
  %1273 = load double, ptr %43, align 8, !tbaa !11
  %1274 = fcmp oge double %1272, %1273
  br i1 %1274, label %1275, label %1277

1275:                                             ; preds = %1269
  %1276 = load double, ptr %42, align 8, !tbaa !11
  br label %1279

1277:                                             ; preds = %1269
  %1278 = load double, ptr %43, align 8, !tbaa !11
  br label %1279

1279:                                             ; preds = %1277, %1275
  %1280 = phi double [ %1276, %1275 ], [ %1278, %1277 ]
  store double %1280, ptr %60, align 8, !tbaa !11
  br label %1281

1281:                                             ; preds = %1279
  %1282 = load i32, ptr %48, align 4, !tbaa !9
  %1283 = add nsw i32 %1282, 1
  store i32 %1283, ptr %48, align 4, !tbaa !9
  br label %1225, !llvm.loop !27

1284:                                             ; preds = %1225
  %1285 = load double, ptr %60, align 8, !tbaa !11
  %1286 = fcmp une double %1285, 0.000000e+00
  br i1 %1286, label %1287, label %1295

1287:                                             ; preds = %1284
  %1288 = load double, ptr %60, align 8, !tbaa !11
  %1289 = load ptr, ptr %26, align 8, !tbaa !5
  %1290 = load i32, ptr %49, align 4, !tbaa !9
  %1291 = sext i32 %1290 to i64
  %1292 = getelementptr inbounds double, ptr %1289, i64 %1291
  %1293 = load double, ptr %1292, align 8, !tbaa !11
  %1294 = fdiv double %1293, %1288
  store double %1294, ptr %1292, align 8, !tbaa !11
  br label %1295

1295:                                             ; preds = %1287, %1284
  br label %1296

1296:                                             ; preds = %1295
  %1297 = load i32, ptr %49, align 4, !tbaa !9
  %1298 = add nsw i32 %1297, 1
  store i32 %1298, ptr %49, align 4, !tbaa !9
  br label %206, !llvm.loop !28

1299:                                             ; preds = %206
  store i32 1, ptr %62, align 4
  br label %1300

1300:                                             ; preds = %1299, %190, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

declare void @zlacn2_(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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !12, i64 0}
!16 = !{!"", !12, i64 0, !12, i64 8}
!17 = !{!16, !12, i64 8}
!18 = distinct !{!18, !14}
!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}


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

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

34:                                               ; preds = %15
  %35 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %.not478 = icmp eq i32 %35, 0
  br i1 %.not478, label %.thread.sink.split, label %36

36:                                               ; preds = %34, %15
  %37 = load i32, ptr %1, align 4, !tbaa !5
  %38 = icmp slt i32 %37, 0
  br i1 %38, label %.thread.sink.split, label %39

39:                                               ; preds = %36
  %40 = load i32, ptr %2, align 4, !tbaa !5
  %41 = icmp slt i32 %40, 0
  br i1 %41, label %.thread.sink.split, label %42

42:                                               ; preds = %39
  %43 = load i32, ptr %7, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %37, i32 1)
  %44 = icmp slt i32 %43, %spec.select
  br i1 %44, label %.thread.sink.split, label %45

45:                                               ; preds = %42
  %46 = load i32, ptr %9, align 4, !tbaa !5
  %47 = icmp slt i32 %46, %spec.select
  br i1 %47, label %.thread.sink.split, label %48

48:                                               ; preds = %45
  %.pr = load i32, ptr %14, align 4, !tbaa !5
  %.not479 = icmp eq i32 %.pr, 0
  br i1 %.not479, label %52, label %.thread

.thread.sink.split:                               ; preds = %45, %42, %39, %36, %34
  %.sink = phi i32 [ -1, %34 ], [ -2, %36 ], [ -3, %39 ], [ -8, %42 ], [ -10, %45 ]
  store i32 %.sink, ptr %14, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %48
  %49 = phi i32 [ %.pr, %48 ], [ %.sink, %.thread.sink.split ]
  %50 = sub nsw i32 0, %49
  store i32 %50, ptr %18, align 4, !tbaa !5
  %51 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %18, i32 noundef 6) #6
  br label %.loopexit

52:                                               ; preds = %48
  %53 = icmp eq i32 %37, 0
  %.not492568 = icmp eq i32 %40, 0
  br i1 %53, label %55, label %54

54:                                               ; preds = %52
  br i1 %.not492568, label %.loopexit, label %78

55:                                               ; preds = %52
  br i1 %.not492568, label %.loopexit, label %.lr.ph571.preheader

.lr.ph571.preheader:                              ; preds = %55
  %56 = add nuw i32 %40, 1
  %wide.trip.count641 = zext i32 %56 to i64
  %57 = zext nneg i32 %40 to i64
  %min.iters.check714 = icmp ult i32 %40, 4
  %58 = sub i64 %17, %16
  %diff.check = icmp ult i64 %58, 32
  %or.cond725 = or i1 %min.iters.check714, %diff.check
  br i1 %or.cond725, label %.lr.ph571.preheader737, label %vector.ph715

vector.ph715:                                     ; preds = %.lr.ph571.preheader
  %n.vec717 = and i64 %57, 2147483644
  %ind.end718 = or disjoint i64 %n.vec717, 1
  br label %vector.body720

vector.body720:                                   ; preds = %vector.body720, %vector.ph715
  %index721 = phi i64 [ 0, %vector.ph715 ], [ %index.next723, %vector.body720 ]
  %59 = getelementptr double, ptr %10, i64 %index721
  %60 = getelementptr inbounds i8, ptr %59, i64 16
  store <2 x double> zeroinitializer, ptr %59, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %60, align 8, !tbaa !9
  %61 = getelementptr double, ptr %11, i64 %index721
  %62 = getelementptr inbounds i8, ptr %61, i64 16
  store <2 x double> zeroinitializer, ptr %61, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %62, align 8, !tbaa !9
  %index.next723 = add nuw i64 %index721, 4
  %63 = icmp eq i64 %index.next723, %n.vec717
  br i1 %63, label %middle.block712, label %vector.body720, !llvm.loop !11

middle.block712:                                  ; preds = %vector.body720
  %cmp.n724 = icmp eq i64 %n.vec717, %57
  br i1 %cmp.n724, label %.loopexit, label %.lr.ph571.preheader737

.lr.ph571.preheader737:                           ; preds = %middle.block712, %.lr.ph571.preheader
  %indvars.iv638.ph = phi i64 [ 1, %.lr.ph571.preheader ], [ %ind.end718, %middle.block712 ]
  %64 = sub nsw i64 %wide.trip.count641, %indvars.iv638.ph
  %65 = zext nneg i32 %40 to i64
  %66 = sub nsw i64 %65, %indvars.iv638.ph
  %xtraiter753 = and i64 %64, 3
  %lcmp.mod754.not = icmp eq i64 %xtraiter753, 0
  br i1 %lcmp.mod754.not, label %.lr.ph571.prol.loopexit, label %.lr.ph571.prol

.lr.ph571.prol:                                   ; preds = %.lr.ph571.preheader737, %.lr.ph571.prol
  %indvars.iv638.prol = phi i64 [ %indvars.iv.next639.prol, %.lr.ph571.prol ], [ %indvars.iv638.ph, %.lr.ph571.preheader737 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph571.prol ], [ 0, %.lr.ph571.preheader737 ]
  %67 = getelementptr inbounds double, ptr %29, i64 %indvars.iv638.prol
  store double 0.000000e+00, ptr %67, align 8, !tbaa !9
  %68 = getelementptr inbounds double, ptr %30, i64 %indvars.iv638.prol
  store double 0.000000e+00, ptr %68, align 8, !tbaa !9
  %indvars.iv.next639.prol = add nuw nsw i64 %indvars.iv638.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter753
  br i1 %prol.iter.cmp.not, label %.lr.ph571.prol.loopexit, label %.lr.ph571.prol, !llvm.loop !15

.lr.ph571.prol.loopexit:                          ; preds = %.lr.ph571.prol, %.lr.ph571.preheader737
  %indvars.iv638.unr = phi i64 [ %indvars.iv638.ph, %.lr.ph571.preheader737 ], [ %indvars.iv.next639.prol, %.lr.ph571.prol ]
  %69 = icmp ult i64 %66, 3
  br i1 %69, label %.loopexit, label %.lr.ph571

.lr.ph571:                                        ; preds = %.lr.ph571.prol.loopexit, %.lr.ph571
  %indvars.iv638 = phi i64 [ %indvars.iv.next639.3, %.lr.ph571 ], [ %indvars.iv638.unr, %.lr.ph571.prol.loopexit ]
  %70 = getelementptr inbounds double, ptr %29, i64 %indvars.iv638
  store double 0.000000e+00, ptr %70, align 8, !tbaa !9
  %71 = getelementptr inbounds double, ptr %30, i64 %indvars.iv638
  store double 0.000000e+00, ptr %71, align 8, !tbaa !9
  %72 = getelementptr double, ptr %10, i64 %indvars.iv638
  store double 0.000000e+00, ptr %72, align 8, !tbaa !9
  %73 = getelementptr double, ptr %11, i64 %indvars.iv638
  store double 0.000000e+00, ptr %73, align 8, !tbaa !9
  %indvars.iv.next639.1 = add nuw nsw i64 %indvars.iv638, 2
  %74 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next639.1
  store double 0.000000e+00, ptr %74, align 8, !tbaa !9
  %75 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next639.1
  store double 0.000000e+00, ptr %75, align 8, !tbaa !9
  %indvars.iv.next639.2 = add nuw nsw i64 %indvars.iv638, 3
  %76 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next639.2
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %77 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next639.2
  store double 0.000000e+00, ptr %77, align 8, !tbaa !9
  %indvars.iv.next639.3 = add nuw nsw i64 %indvars.iv638, 4
  %exitcond642.not.3 = icmp eq i64 %indvars.iv.next639.3, %wide.trip.count641
  br i1 %exitcond642.not.3, label %.loopexit, label %.lr.ph571, !llvm.loop !17

78:                                               ; preds = %54
  %79 = add nuw nsw i32 %37, 1
  %80 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #6
  %81 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #6
  %82 = uitofp nneg i32 %79 to double
  %83 = fmul double %81, %82
  %84 = fdiv double %83, %80
  %85 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep564 = getelementptr i8, ptr %25, i64 16
  %.not480566 = icmp slt i32 %85, 1
  br i1 %.not480566, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %78
  %invariant.gep535 = getelementptr i8, ptr %28, i64 16
  %invariant.gep = getelementptr i8, ptr %3, i64 -32
  %86 = fmul double %80, %82
  %87 = sext i32 %23 to i64
  %88 = sext i32 %26 to i64
  %89 = zext nneg i32 %85 to i64
  %scevgep = getelementptr i8, ptr %12, i64 -16
  %scevgep682 = getelementptr i8, ptr %13, i64 -8
  %scevgep686 = getelementptr i8, ptr %12, i64 -16
  %scevgep688 = getelementptr i8, ptr %13, i64 -8
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge562.thread
  %indvars.iv635 = phi i64 [ 1, %.preheader.lr.ph ], [ %indvars.iv.next636, %._crit_edge562.thread ]
  %90 = getelementptr inbounds double, ptr %30, i64 %indvars.iv635
  %91 = mul nsw i64 %indvars.iv635, %87
  %gep565 = getelementptr %struct.doublecomplex, ptr %invariant.gep564, i64 %91
  %92 = mul nsw i64 %indvars.iv635, %88
  %gep536 = getelementptr %struct.doublecomplex, ptr %invariant.gep535, i64 %92
  %invariant.gep657 = getelementptr %struct.doublecomplex, ptr %25, i64 %91
  %invariant.gep661 = getelementptr %struct.doublecomplex, ptr %28, i64 %92
  %invariant.gep659 = getelementptr %struct.doublecomplex, ptr %28, i64 %92
  %invariant.gep665 = getelementptr %struct.doublecomplex, ptr %28, i64 %92
  %invariant.gep663 = getelementptr %struct.doublecomplex, ptr %28, i64 %92
  br label %93

93:                                               ; preds = %.preheader, %277
  %.0461 = phi i32 [ %279, %277 ], [ 1, %.preheader ]
  %.0 = phi double [ %278, %277 ], [ 3.000000e+00, %.preheader ]
  call void @zcopy_(ptr noundef nonnull %1, ptr noundef %gep565, ptr noundef nonnull @c__1, ptr noundef %12, ptr noundef nonnull @c__1) #6
  store <2 x double> <double -1.000000e+00, double 0.000000e+00>, ptr %19, align 16, !tbaa !9
  call void @zspmv_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %19, ptr noundef %3, ptr noundef %gep536, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b1, ptr noundef %12, ptr noundef nonnull @c__1) #6
  %94 = load i32, ptr %1, align 4, !tbaa !5
  %.not481501 = icmp slt i32 %94, 1
  br i1 %.not481501, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %93
  %95 = add nuw i32 %94, 1
  %wide.trip.count = zext i32 %95 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %gep658 = getelementptr %struct.doublecomplex, ptr %invariant.gep657, i64 %indvars.iv
  %96 = load double, ptr %gep658, align 8, !tbaa !18
  %97 = call { double, double } @Cd(ptr noundef nonnull %gep658)
  %98 = extractvalue { double, double } %97, 1
  %99 = insertelement <2 x double> poison, double %96, i64 0
  %100 = insertelement <2 x double> %99, double %98, i64 1
  %101 = fcmp oge <2 x double> %100, zeroinitializer
  %102 = fneg <2 x double> %100
  %103 = select <2 x i1> %101, <2 x double> %100, <2 x double> %102
  %shift = shufflevector <2 x double> %103, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %104 = fadd <2 x double> %103, %shift
  %105 = extractelement <2 x double> %104, i64 0
  %106 = getelementptr inbounds double, ptr %32, i64 %indvars.iv
  store double %105, ptr %106, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph, %93
  %107 = load i32, ptr %1, align 4, !tbaa !5
  %.not482523 = icmp slt i32 %107, 1
  br i1 %.not, label %173, label %108

108:                                              ; preds = %._crit_edge
  br i1 %.not482523, label %._crit_edge533, label %.lr.ph514.preheader

.lr.ph514.preheader:                              ; preds = %108
  %109 = add nuw i32 %107, 1
  %wide.trip.count593 = zext i32 %109 to i64
  br label %.lr.ph514

.lr.ph514:                                        ; preds = %.lr.ph514.preheader, %._crit_edge509
  %indvars.iv590 = phi i64 [ 1, %.lr.ph514.preheader ], [ %indvars.iv.next591, %._crit_edge509 ]
  %.0457512 = phi i32 [ 1, %.lr.ph514.preheader ], [ %157, %._crit_edge509 ]
  %gep662 = getelementptr %struct.doublecomplex, ptr %invariant.gep661, i64 %indvars.iv590
  %110 = load double, ptr %gep662, align 8, !tbaa !18
  %111 = fcmp oge double %110, 0.000000e+00
  %112 = fneg double %110
  %113 = select i1 %111, double %110, double %112
  %114 = call { double, double } @Cd(ptr noundef nonnull %gep662)
  %115 = extractvalue { double, double } %114, 1
  %116 = fcmp oge double %115, 0.000000e+00
  %117 = fneg double %115
  %118 = select i1 %116, double %115, double %117
  %119 = fadd double %113, %118
  %.not491.not503 = icmp ugt i64 %indvars.iv590, 1
  br i1 %.not491.not503, label %.lr.ph508.preheader, label %._crit_edge509

.lr.ph508.preheader:                              ; preds = %.lr.ph514
  %120 = zext i32 %.0457512 to i64
  br label %.lr.ph508

.lr.ph508:                                        ; preds = %.lr.ph508.preheader, %.lr.ph508
  %indvars.iv583 = phi i64 [ 1, %.lr.ph508.preheader ], [ %indvars.iv.next584, %.lr.ph508 ]
  %indvars.iv581 = phi i64 [ %120, %.lr.ph508.preheader ], [ %indvars.iv.next582, %.lr.ph508 ]
  %.0462505 = phi double [ 0.000000e+00, %.lr.ph508.preheader ], [ %155, %.lr.ph508 ]
  %121 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %indvars.iv581
  %122 = load double, ptr %121, align 8, !tbaa !18
  %123 = call { double, double } @Cd(ptr noundef nonnull %121)
  %124 = extractvalue { double, double } %123, 1
  %125 = insertelement <2 x double> poison, double %122, i64 0
  %126 = insertelement <2 x double> %125, double %124, i64 1
  %127 = fcmp oge <2 x double> %126, zeroinitializer
  %128 = fneg <2 x double> %126
  %129 = select <2 x i1> %127, <2 x double> %126, <2 x double> %128
  %shift726 = shufflevector <2 x double> %129, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %130 = fadd <2 x double> %129, %shift726
  %131 = extractelement <2 x double> %130, i64 0
  %132 = getelementptr inbounds double, ptr %32, i64 %indvars.iv583
  %133 = load double, ptr %132, align 8, !tbaa !9
  %134 = call double @llvm.fmuladd.f64(double %131, double %119, double %133)
  store double %134, ptr %132, align 8, !tbaa !9
  %135 = load double, ptr %121, align 8, !tbaa !18
  %136 = call { double, double } @Cd(ptr noundef nonnull %121)
  %137 = extractvalue { double, double } %136, 1
  %138 = insertelement <2 x double> poison, double %135, i64 0
  %139 = insertelement <2 x double> %138, double %137, i64 1
  %140 = fcmp oge <2 x double> %139, zeroinitializer
  %141 = fneg <2 x double> %139
  %142 = select <2 x i1> %140, <2 x double> %139, <2 x double> %141
  %shift727 = shufflevector <2 x double> %142, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %143 = fadd <2 x double> %142, %shift727
  %144 = extractelement <2 x double> %143, i64 0
  %gep660 = getelementptr %struct.doublecomplex, ptr %invariant.gep659, i64 %indvars.iv583
  %145 = load double, ptr %gep660, align 8, !tbaa !18
  %146 = call { double, double } @Cd(ptr noundef nonnull %gep660)
  %147 = extractvalue { double, double } %146, 1
  %148 = insertelement <2 x double> poison, double %145, i64 0
  %149 = insertelement <2 x double> %148, double %147, i64 1
  %150 = fcmp oge <2 x double> %149, zeroinitializer
  %151 = fneg <2 x double> %149
  %152 = select <2 x i1> %150, <2 x double> %149, <2 x double> %151
  %shift728 = shufflevector <2 x double> %152, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %153 = fadd <2 x double> %152, %shift728
  %154 = extractelement <2 x double> %153, i64 0
  %155 = call double @llvm.fmuladd.f64(double %144, double %154, double %.0462505)
  %indvars.iv.next582 = add nuw nsw i64 %indvars.iv581, 1
  %indvars.iv.next584 = add nuw nsw i64 %indvars.iv583, 1
  %exitcond589.not = icmp eq i64 %indvars.iv.next584, %indvars.iv590
  br i1 %exitcond589.not, label %._crit_edge509, label %.lr.ph508, !llvm.loop !21

._crit_edge509:                                   ; preds = %.lr.ph508, %.lr.ph514
  %.0462.lcssa = phi double [ 0.000000e+00, %.lr.ph514 ], [ %155, %.lr.ph508 ]
  %156 = trunc nuw nsw i64 %indvars.iv590 to i32
  %157 = add nuw nsw i32 %.0457512, %156
  %158 = getelementptr inbounds double, ptr %32, i64 %indvars.iv590
  %159 = load double, ptr %158, align 8, !tbaa !9
  %160 = zext nneg i32 %157 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %160
  %161 = load double, ptr %gep, align 8, !tbaa !18
  %162 = call { double, double } @Cd(ptr noundef nonnull %gep)
  %163 = extractvalue { double, double } %162, 1
  %164 = insertelement <2 x double> poison, double %161, i64 0
  %165 = insertelement <2 x double> %164, double %163, i64 1
  %166 = fcmp oge <2 x double> %165, zeroinitializer
  %167 = fneg <2 x double> %165
  %168 = select <2 x i1> %166, <2 x double> %165, <2 x double> %167
  %shift729 = shufflevector <2 x double> %168, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %169 = fadd <2 x double> %168, %shift729
  %170 = extractelement <2 x double> %169, i64 0
  %171 = call double @llvm.fmuladd.f64(double %170, double %119, double %159)
  %172 = fadd double %.0462.lcssa, %171
  store double %172, ptr %158, align 8, !tbaa !9
  %indvars.iv.next591 = add nuw nsw i64 %indvars.iv590, 1
  %exitcond594.not = icmp eq i64 %indvars.iv.next591, %wide.trip.count593
  br i1 %exitcond594.not, label %.loopexit496.loopexit572, label %.lr.ph514, !llvm.loop !22

173:                                              ; preds = %._crit_edge
  br i1 %.not482523, label %._crit_edge533, label %.lr.ph527.preheader

.lr.ph527.preheader:                              ; preds = %173
  %174 = add nuw i32 %107, 1
  %wide.trip.count608 = zext i32 %174 to i64
  br label %.lr.ph527

.lr.ph527:                                        ; preds = %.lr.ph527.preheader, %._crit_edge521
  %indvars.iv605 = phi i64 [ 1, %.lr.ph527.preheader ], [ %indvars.iv.next606, %._crit_edge521 ]
  %indvars.iv597 = phi i32 [ 2, %.lr.ph527.preheader ], [ %indvars.iv.next598, %._crit_edge521 ]
  %.1458525 = phi i32 [ 1, %.lr.ph527.preheader ], [ %244, %._crit_edge521 ]
  %gep666 = getelementptr %struct.doublecomplex, ptr %invariant.gep665, i64 %indvars.iv605
  %175 = load double, ptr %gep666, align 8, !tbaa !18
  %176 = call { double, double } @Cd(ptr noundef nonnull %gep666)
  %177 = extractvalue { double, double } %176, 1
  %178 = insertelement <2 x double> poison, double %175, i64 0
  %179 = insertelement <2 x double> %178, double %177, i64 1
  %180 = fcmp oge <2 x double> %179, zeroinitializer
  %181 = fneg <2 x double> %179
  %182 = select <2 x i1> %180, <2 x double> %179, <2 x double> %181
  %shift730 = shufflevector <2 x double> %182, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %183 = fadd <2 x double> %182, %shift730
  %184 = extractelement <2 x double> %183, i64 0
  %185 = sext i32 %.1458525 to i64
  %186 = getelementptr inbounds %struct.doublecomplex, ptr %22, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !18
  %188 = call { double, double } @Cd(ptr noundef nonnull %186)
  %189 = extractvalue { double, double } %188, 1
  %190 = insertelement <2 x double> poison, double %187, i64 0
  %191 = insertelement <2 x double> %190, double %189, i64 1
  %192 = fcmp oge <2 x double> %191, zeroinitializer
  %193 = fneg <2 x double> %191
  %194 = select <2 x i1> %192, <2 x double> %191, <2 x double> %193
  %shift731 = shufflevector <2 x double> %194, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %195 = fadd <2 x double> %194, %shift731
  %196 = extractelement <2 x double> %195, i64 0
  %197 = getelementptr inbounds double, ptr %32, i64 %indvars.iv605
  %198 = load double, ptr %197, align 8, !tbaa !9
  %199 = call double @llvm.fmuladd.f64(double %196, double %184, double %198)
  store double %199, ptr %197, align 8, !tbaa !9
  %200 = load i32, ptr %1, align 4, !tbaa !5
  %indvars.iv.next606 = add nuw nsw i64 %indvars.iv605, 1
  %201 = sext i32 %200 to i64
  %.not483515.not = icmp slt i64 %indvars.iv605, %201
  br i1 %.not483515.not, label %.lr.ph520.preheader, label %._crit_edge521

.lr.ph520.preheader:                              ; preds = %.lr.ph527
  %202 = sext i32 %indvars.iv597 to i64
  %203 = add i32 %200, 1
  br label %.lr.ph520

.lr.ph520:                                        ; preds = %.lr.ph520.preheader, %.lr.ph520
  %indvars.iv599 = phi i64 [ %202, %.lr.ph520.preheader ], [ %indvars.iv.next600, %.lr.ph520 ]
  %indvars.iv595 = phi i64 [ %185, %.lr.ph520.preheader ], [ %indvars.iv.next596, %.lr.ph520 ]
  %.1463517 = phi double [ 0.000000e+00, %.lr.ph520.preheader ], [ %238, %.lr.ph520 ]
  %indvars.iv.next596 = add nsw i64 %indvars.iv595, 1
  %204 = getelementptr %struct.doublecomplex, ptr %3, i64 %indvars.iv595
  %205 = load double, ptr %204, align 8, !tbaa !18
  %206 = call { double, double } @Cd(ptr noundef nonnull %204)
  %207 = extractvalue { double, double } %206, 1
  %208 = insertelement <2 x double> poison, double %205, i64 0
  %209 = insertelement <2 x double> %208, double %207, i64 1
  %210 = fcmp oge <2 x double> %209, zeroinitializer
  %211 = fneg <2 x double> %209
  %212 = select <2 x i1> %210, <2 x double> %209, <2 x double> %211
  %shift732 = shufflevector <2 x double> %212, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %213 = fadd <2 x double> %212, %shift732
  %214 = extractelement <2 x double> %213, i64 0
  %215 = getelementptr inbounds double, ptr %32, i64 %indvars.iv599
  %216 = load double, ptr %215, align 8, !tbaa !9
  %217 = call double @llvm.fmuladd.f64(double %214, double %184, double %216)
  store double %217, ptr %215, align 8, !tbaa !9
  %218 = load double, ptr %204, align 8, !tbaa !18
  %219 = call { double, double } @Cd(ptr noundef nonnull %204)
  %220 = extractvalue { double, double } %219, 1
  %221 = insertelement <2 x double> poison, double %218, i64 0
  %222 = insertelement <2 x double> %221, double %220, i64 1
  %223 = fcmp oge <2 x double> %222, zeroinitializer
  %224 = fneg <2 x double> %222
  %225 = select <2 x i1> %223, <2 x double> %222, <2 x double> %224
  %shift733 = shufflevector <2 x double> %225, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %226 = fadd <2 x double> %225, %shift733
  %227 = extractelement <2 x double> %226, i64 0
  %gep664 = getelementptr %struct.doublecomplex, ptr %invariant.gep663, i64 %indvars.iv599
  %228 = load double, ptr %gep664, align 8, !tbaa !18
  %229 = call { double, double } @Cd(ptr noundef nonnull %gep664)
  %230 = extractvalue { double, double } %229, 1
  %231 = insertelement <2 x double> poison, double %228, i64 0
  %232 = insertelement <2 x double> %231, double %230, i64 1
  %233 = fcmp oge <2 x double> %232, zeroinitializer
  %234 = fneg <2 x double> %232
  %235 = select <2 x i1> %233, <2 x double> %232, <2 x double> %234
  %shift734 = shufflevector <2 x double> %235, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %236 = fadd <2 x double> %235, %shift734
  %237 = extractelement <2 x double> %236, i64 0
  %238 = call double @llvm.fmuladd.f64(double %227, double %237, double %.1463517)
  %indvars.iv.next600 = add nsw i64 %indvars.iv599, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next600 to i32
  %exitcond604.not = icmp eq i32 %203, %lftr.wideiv
  br i1 %exitcond604.not, label %._crit_edge521.loopexit, label %.lr.ph520, !llvm.loop !23

._crit_edge521.loopexit:                          ; preds = %.lr.ph520
  %.pre = load double, ptr %197, align 8, !tbaa !9
  %.pre643 = load i32, ptr %1, align 4, !tbaa !5
  br label %._crit_edge521

._crit_edge521:                                   ; preds = %._crit_edge521.loopexit, %.lr.ph527
  %239 = phi i32 [ %200, %.lr.ph527 ], [ %.pre643, %._crit_edge521.loopexit ]
  %240 = phi double [ %199, %.lr.ph527 ], [ %.pre, %._crit_edge521.loopexit ]
  %.1463.lcssa = phi double [ 0.000000e+00, %.lr.ph527 ], [ %238, %._crit_edge521.loopexit ]
  %241 = fadd double %.1463.lcssa, %240
  store double %241, ptr %197, align 8, !tbaa !9
  %242 = trunc nuw nsw i64 %indvars.iv605 to i32
  %reass.sub = sub i32 %.1458525, %242
  %243 = add i32 %reass.sub, 1
  %244 = add i32 %243, %239
  %indvars.iv.next598 = add nuw i32 %indvars.iv597, 1
  %exitcond609.not = icmp eq i64 %indvars.iv.next606, %wide.trip.count608
  br i1 %exitcond609.not, label %.loopexit496, label %.lr.ph527, !llvm.loop !24

.loopexit496.loopexit572:                         ; preds = %._crit_edge509
  %.pre644 = load i32, ptr %1, align 4, !tbaa !5
  br label %.loopexit496

.loopexit496:                                     ; preds = %._crit_edge521, %.loopexit496.loopexit572
  %245 = phi i32 [ %.pre644, %.loopexit496.loopexit572 ], [ %239, %._crit_edge521 ]
  %.not485528 = icmp slt i32 %245, 1
  br i1 %.not485528, label %._crit_edge533, label %.lr.ph532.preheader

.lr.ph532.preheader:                              ; preds = %.loopexit496
  %246 = add nuw i32 %245, 1
  %wide.trip.count613 = zext i32 %246 to i64
  br label %.lr.ph532

.lr.ph532:                                        ; preds = %.lr.ph532.preheader, %269
  %indvars.iv610 = phi i64 [ 1, %.lr.ph532.preheader ], [ %indvars.iv.next611, %269 ]
  %.2530 = phi double [ 0.000000e+00, %.lr.ph532.preheader ], [ %271, %269 ]
  %247 = getelementptr inbounds double, ptr %32, i64 %indvars.iv610
  %248 = load double, ptr %247, align 8, !tbaa !9
  %249 = fcmp ogt double %248, %84
  %250 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %indvars.iv610
  %251 = load double, ptr %250, align 8, !tbaa !18
  %252 = fcmp oge double %251, 0.000000e+00
  %253 = fneg double %251
  %254 = select i1 %252, double %251, double %253
  %255 = call { double, double } @Cd(ptr noundef nonnull %250)
  %256 = extractvalue { double, double } %255, 1
  %257 = fcmp oge double %256, 0.000000e+00
  %258 = fneg double %256
  %259 = select i1 %257, double %256, double %258
  %260 = fadd double %254, %259
  br i1 %249, label %261, label %264

261:                                              ; preds = %.lr.ph532
  %262 = load double, ptr %247, align 8, !tbaa !9
  %263 = fdiv double %260, %262
  br label %269

264:                                              ; preds = %.lr.ph532
  %265 = fadd double %83, %260
  %266 = load double, ptr %247, align 8, !tbaa !9
  %267 = fadd double %83, %266
  %268 = fdiv double %265, %267
  br label %269

269:                                              ; preds = %261, %264
  %.sink671 = phi double [ %263, %261 ], [ %268, %264 ]
  %270 = fcmp oge double %.2530, %.sink671
  %271 = select i1 %270, double %.2530, double %.sink671
  %indvars.iv.next611 = add nuw nsw i64 %indvars.iv610, 1
  %exitcond614.not = icmp eq i64 %indvars.iv.next611, %wide.trip.count613
  br i1 %exitcond614.not, label %._crit_edge533, label %.lr.ph532, !llvm.loop !25

._crit_edge533:                                   ; preds = %269, %173, %108, %.loopexit496
  %.2.lcssa = phi double [ 0.000000e+00, %.loopexit496 ], [ 0.000000e+00, %108 ], [ 0.000000e+00, %173 ], [ %271, %269 ]
  store double %.2.lcssa, ptr %90, align 8, !tbaa !9
  %272 = fcmp ogt double %.2.lcssa, %80
  br i1 %272, label %273, label %280

273:                                              ; preds = %._crit_edge533
  %274 = fmul double %.2.lcssa, 2.000000e+00
  %275 = fcmp ole double %274, %.0
  %276 = icmp ult i32 %.0461, 6
  %or.cond = select i1 %275, i1 %276, i1 false
  br i1 %or.cond, label %277, label %280

277:                                              ; preds = %273
  call void @zsptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %5, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %14) #6
  call void @zaxpy_(ptr noundef nonnull %1, ptr noundef nonnull @c_b1, ptr noundef %12, ptr noundef nonnull @c__1, ptr noundef %gep536, ptr noundef nonnull @c__1) #6
  %278 = load double, ptr %90, align 8, !tbaa !9
  %279 = add nuw nsw i32 %.0461, 1
  br label %93

280:                                              ; preds = %273, %._crit_edge533
  %281 = load i32, ptr %1, align 4, !tbaa !5
  %.not486537 = icmp slt i32 %281, 1
  br i1 %.not486537, label %._crit_edge541, label %.lr.ph540.preheader

.lr.ph540.preheader:                              ; preds = %280
  %282 = add nuw i32 %281, 1
  %wide.trip.count618 = zext i32 %282 to i64
  br label %.lr.ph540

.lr.ph540:                                        ; preds = %.lr.ph540.preheader, %.lr.ph540
  %indvars.iv615 = phi i64 [ 1, %.lr.ph540.preheader ], [ %indvars.iv.next616, %.lr.ph540 ]
  %283 = getelementptr inbounds double, ptr %32, i64 %indvars.iv615
  %284 = load double, ptr %283, align 8, !tbaa !9
  %285 = fcmp ogt double %284, %84
  %286 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %indvars.iv615
  %287 = load double, ptr %286, align 8, !tbaa !18
  %288 = call { double, double } @Cd(ptr noundef nonnull %286)
  %289 = extractvalue { double, double } %288, 1
  %290 = insertelement <2 x double> poison, double %287, i64 0
  %291 = insertelement <2 x double> %290, double %289, i64 1
  %292 = fcmp oge <2 x double> %291, zeroinitializer
  %293 = fneg <2 x double> %291
  %294 = select <2 x i1> %292, <2 x double> %291, <2 x double> %293
  %shift735 = shufflevector <2 x double> %294, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %295 = fadd <2 x double> %294, %shift735
  %296 = extractelement <2 x double> %295, i64 0
  %297 = load double, ptr %283, align 8, !tbaa !9
  %298 = call double @llvm.fmuladd.f64(double %86, double %297, double %296)
  %299 = fadd double %83, %298
  %storemerge = select i1 %285, double %298, double %299
  store double %storemerge, ptr %283, align 8, !tbaa !9
  %indvars.iv.next616 = add nuw nsw i64 %indvars.iv615, 1
  %exitcond619.not = icmp eq i64 %indvars.iv.next616, %wide.trip.count618
  br i1 %exitcond619.not, label %._crit_edge541, label %.lr.ph540, !llvm.loop !26

._crit_edge541:                                   ; preds = %.lr.ph540, %280
  store i32 0, ptr %20, align 4, !tbaa !5
  %300 = getelementptr inbounds double, ptr %29, i64 %indvars.iv635
  br label %.loopexit495

.loopexit495:                                     ; preds = %.loopexit495.backedge, %._crit_edge541
  %301 = load i32, ptr %1, align 4, !tbaa !5
  %302 = sext i32 %301 to i64
  %gep556 = getelementptr %struct.doublecomplex, ptr %12, i64 %302
  call void @zlacn2_(ptr noundef nonnull %1, ptr noundef %gep556, ptr noundef %12, ptr noundef nonnull %300, ptr noundef nonnull %20, ptr noundef nonnull %21) #6
  %303 = load i32, ptr %20, align 4, !tbaa !5
  switch i32 %303, label %.loopexit495.backedge [
    i32 0, label %379
    i32 1, label %304
    i32 2, label %340
  ]

304:                                              ; preds = %.loopexit495
  call void @zsptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %5, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %14) #6
  %305 = load i32, ptr %1, align 4, !tbaa !5
  %.not490549 = icmp slt i32 %305, 1
  br i1 %.not490549, label %.loopexit495.backedge, label %.lr.ph552.preheader

.loopexit495.backedge:                            ; preds = %304, %..loopexit495_crit_edge, %.loopexit495, %377
  br label %.loopexit495

.lr.ph552.preheader:                              ; preds = %304
  %306 = add nuw i32 %305, 1
  %wide.trip.count628 = zext i32 %306 to i64
  %307 = zext nneg i32 %305 to i64
  %min.iters.check = icmp eq i32 %305, 1
  br i1 %min.iters.check, label %.lr.ph552.preheader738, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph552.preheader
  %308 = shl nuw nsw i64 %wide.trip.count628, 4
  %scevgep681 = getelementptr i8, ptr %scevgep, i64 %308
  %309 = shl nuw nsw i64 %wide.trip.count628, 3
  %scevgep683 = getelementptr i8, ptr %scevgep682, i64 %309
  %bound0 = icmp ugt ptr %scevgep683, %12
  %bound1 = icmp ugt ptr %scevgep681, %13
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph552.preheader738, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %310 = getelementptr double, ptr %13, i64 %index
  %wide.load = load <2 x double>, ptr %310, align 8, !tbaa !9, !alias.scope !27
  %311 = getelementptr %struct.doublecomplex, ptr %12, i64 %index
  %wide.vec = load <4 x double>, ptr %311, align 8, !tbaa !9
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec684 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %312 = fmul <2 x double> %wide.load, %strided.vec
  %313 = fmul <2 x double> %wide.load, %strided.vec684
  %interleaved.vec = shufflevector <2 x double> %312, <2 x double> %313, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %311, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 2
  %314 = icmp eq i64 %index.next, %n.vec
  br i1 %314, label %middle.block, label %vector.body, !llvm.loop !30

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %307
  %315 = shufflevector <2 x double> %312, <2 x double> %313, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %..loopexit495_crit_edge, label %.lr.ph552.preheader738

.lr.ph552.preheader738:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph552.preheader
  %indvars.iv625.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph552.preheader ], [ %ind.end, %middle.block ]
  %316 = zext nneg i32 %305 to i64
  %317 = and i32 %305, 1
  %lcmp.mod752.not = icmp eq i32 %317, 0
  br i1 %lcmp.mod752.not, label %.lr.ph552.prol.loopexit, label %.lr.ph552.prol

.lr.ph552.prol:                                   ; preds = %.lr.ph552.preheader738
  %318 = getelementptr inbounds double, ptr %32, i64 %indvars.iv625.ph
  %319 = load double, ptr %318, align 8, !tbaa !9
  %320 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %indvars.iv625.ph
  %321 = load <2 x double>, ptr %320, align 8, !tbaa !9
  %322 = insertelement <2 x double> poison, double %319, i64 0
  %323 = shufflevector <2 x double> %322, <2 x double> poison, <2 x i32> zeroinitializer
  %324 = fmul <2 x double> %323, %321
  store <2 x double> %324, ptr %320, align 8, !tbaa !9
  %indvars.iv.next626.prol = add nuw nsw i64 %indvars.iv625.ph, 1
  br label %.lr.ph552.prol.loopexit

.lr.ph552.prol.loopexit:                          ; preds = %.lr.ph552.prol, %.lr.ph552.preheader738
  %.lcssa749.unr = phi <2 x double> [ poison, %.lr.ph552.preheader738 ], [ %324, %.lr.ph552.prol ]
  %indvars.iv625.unr = phi i64 [ %indvars.iv625.ph, %.lr.ph552.preheader738 ], [ %indvars.iv.next626.prol, %.lr.ph552.prol ]
  %325 = icmp eq i64 %indvars.iv625.ph, %316
  br i1 %325, label %..loopexit495_crit_edge, label %.lr.ph552

.lr.ph552:                                        ; preds = %.lr.ph552.prol.loopexit, %.lr.ph552
  %indvars.iv625 = phi i64 [ %indvars.iv.next626.1, %.lr.ph552 ], [ %indvars.iv625.unr, %.lr.ph552.prol.loopexit ]
  %326 = getelementptr inbounds double, ptr %32, i64 %indvars.iv625
  %327 = load double, ptr %326, align 8, !tbaa !9
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %indvars.iv625
  %329 = load <2 x double>, ptr %328, align 8, !tbaa !9
  %330 = insertelement <2 x double> poison, double %327, i64 0
  %331 = shufflevector <2 x double> %330, <2 x double> poison, <2 x i32> zeroinitializer
  %332 = fmul <2 x double> %331, %329
  store <2 x double> %332, ptr %328, align 8, !tbaa !9
  %333 = getelementptr double, ptr %13, i64 %indvars.iv625
  %334 = load double, ptr %333, align 8, !tbaa !9
  %335 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv625
  %336 = load <2 x double>, ptr %335, align 8, !tbaa !9
  %337 = insertelement <2 x double> poison, double %334, i64 0
  %338 = shufflevector <2 x double> %337, <2 x double> poison, <2 x i32> zeroinitializer
  %339 = fmul <2 x double> %338, %336
  store <2 x double> %339, ptr %335, align 8, !tbaa !9
  %indvars.iv.next626.1 = add nuw nsw i64 %indvars.iv625, 2
  %exitcond629.not.1 = icmp eq i64 %indvars.iv.next626.1, %wide.trip.count628
  br i1 %exitcond629.not.1, label %..loopexit495_crit_edge, label %.lr.ph552, !llvm.loop !31

340:                                              ; preds = %.loopexit495
  %341 = load i32, ptr %1, align 4, !tbaa !5
  %.not489542 = icmp slt i32 %341, 1
  br i1 %.not489542, label %377, label %.lr.ph545.preheader

.lr.ph545.preheader:                              ; preds = %340
  %342 = add nuw i32 %341, 1
  %wide.trip.count623 = zext i32 %342 to i64
  %343 = zext nneg i32 %341 to i64
  %min.iters.check695 = icmp eq i32 %341, 1
  br i1 %min.iters.check695, label %.lr.ph545.preheader739, label %vector.memcheck685

vector.memcheck685:                               ; preds = %.lr.ph545.preheader
  %344 = shl nuw nsw i64 %wide.trip.count623, 4
  %scevgep687 = getelementptr i8, ptr %scevgep686, i64 %344
  %345 = shl nuw nsw i64 %wide.trip.count623, 3
  %scevgep689 = getelementptr i8, ptr %scevgep688, i64 %345
  %bound0690 = icmp ugt ptr %scevgep689, %12
  %bound1691 = icmp ugt ptr %scevgep687, %13
  %found.conflict692 = and i1 %bound0690, %bound1691
  br i1 %found.conflict692, label %.lr.ph545.preheader739, label %vector.ph696

vector.ph696:                                     ; preds = %vector.memcheck685
  %n.vec698 = and i64 %343, 2147483646
  %ind.end699 = or i64 %343, 1
  br label %vector.body701

vector.body701:                                   ; preds = %vector.body701, %vector.ph696
  %index702 = phi i64 [ 0, %vector.ph696 ], [ %index.next709, %vector.body701 ]
  %346 = getelementptr double, ptr %13, i64 %index702
  %wide.load704 = load <2 x double>, ptr %346, align 8, !tbaa !9, !alias.scope !32
  %347 = getelementptr %struct.doublecomplex, ptr %12, i64 %index702
  %wide.vec705 = load <4 x double>, ptr %347, align 8, !tbaa !9
  %strided.vec706 = shufflevector <4 x double> %wide.vec705, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec707 = shufflevector <4 x double> %wide.vec705, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %348 = fmul <2 x double> %wide.load704, %strided.vec706
  %349 = fmul <2 x double> %wide.load704, %strided.vec707
  %interleaved.vec708 = shufflevector <2 x double> %348, <2 x double> %349, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec708, ptr %347, align 8, !tbaa !9
  %index.next709 = add nuw i64 %index702, 2
  %350 = icmp eq i64 %index.next709, %n.vec698
  br i1 %350, label %middle.block693, label %vector.body701, !llvm.loop !35

middle.block693:                                  ; preds = %vector.body701
  %cmp.n710 = icmp eq i64 %n.vec698, %343
  %351 = shufflevector <2 x double> %348, <2 x double> %349, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n710, label %._crit_edge546, label %.lr.ph545.preheader739

.lr.ph545.preheader739:                           ; preds = %middle.block693, %vector.memcheck685, %.lr.ph545.preheader
  %indvars.iv620.ph = phi i64 [ 1, %vector.memcheck685 ], [ 1, %.lr.ph545.preheader ], [ %ind.end699, %middle.block693 ]
  %352 = zext nneg i32 %341 to i64
  %353 = and i32 %341, 1
  %lcmp.mod.not = icmp eq i32 %353, 0
  br i1 %lcmp.mod.not, label %.lr.ph545.prol.loopexit, label %.lr.ph545.prol

.lr.ph545.prol:                                   ; preds = %.lr.ph545.preheader739
  %354 = getelementptr inbounds double, ptr %32, i64 %indvars.iv620.ph
  %355 = load double, ptr %354, align 8, !tbaa !9
  %356 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %indvars.iv620.ph
  %357 = load <2 x double>, ptr %356, align 8, !tbaa !9
  %358 = insertelement <2 x double> poison, double %355, i64 0
  %359 = shufflevector <2 x double> %358, <2 x double> poison, <2 x i32> zeroinitializer
  %360 = fmul <2 x double> %359, %357
  store <2 x double> %360, ptr %356, align 8, !tbaa !9
  %indvars.iv.next621.prol = add nuw nsw i64 %indvars.iv620.ph, 1
  br label %.lr.ph545.prol.loopexit

.lr.ph545.prol.loopexit:                          ; preds = %.lr.ph545.prol, %.lr.ph545.preheader739
  %.lcssa746.unr = phi <2 x double> [ poison, %.lr.ph545.preheader739 ], [ %360, %.lr.ph545.prol ]
  %indvars.iv620.unr = phi i64 [ %indvars.iv620.ph, %.lr.ph545.preheader739 ], [ %indvars.iv.next621.prol, %.lr.ph545.prol ]
  %361 = icmp eq i64 %indvars.iv620.ph, %352
  br i1 %361, label %._crit_edge546, label %.lr.ph545

.lr.ph545:                                        ; preds = %.lr.ph545.prol.loopexit, %.lr.ph545
  %indvars.iv620 = phi i64 [ %indvars.iv.next621.1, %.lr.ph545 ], [ %indvars.iv620.unr, %.lr.ph545.prol.loopexit ]
  %362 = getelementptr inbounds double, ptr %32, i64 %indvars.iv620
  %363 = load double, ptr %362, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.doublecomplex, ptr %31, i64 %indvars.iv620
  %365 = load <2 x double>, ptr %364, align 8, !tbaa !9
  %366 = insertelement <2 x double> poison, double %363, i64 0
  %367 = shufflevector <2 x double> %366, <2 x double> poison, <2 x i32> zeroinitializer
  %368 = fmul <2 x double> %367, %365
  store <2 x double> %368, ptr %364, align 8, !tbaa !9
  %369 = getelementptr double, ptr %13, i64 %indvars.iv620
  %370 = load double, ptr %369, align 8, !tbaa !9
  %371 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv620
  %372 = load <2 x double>, ptr %371, align 8, !tbaa !9
  %373 = insertelement <2 x double> poison, double %370, i64 0
  %374 = shufflevector <2 x double> %373, <2 x double> poison, <2 x i32> zeroinitializer
  %375 = fmul <2 x double> %374, %372
  store <2 x double> %375, ptr %371, align 8, !tbaa !9
  %indvars.iv.next621.1 = add nuw nsw i64 %indvars.iv620, 2
  %exitcond624.not.1 = icmp eq i64 %indvars.iv.next621.1, %wide.trip.count623
  br i1 %exitcond624.not.1, label %._crit_edge546, label %.lr.ph545, !llvm.loop !36

._crit_edge546:                                   ; preds = %.lr.ph545.prol.loopexit, %.lr.ph545, %middle.block693
  %376 = phi <2 x double> [ %351, %middle.block693 ], [ %.lcssa746.unr, %.lr.ph545.prol.loopexit ], [ %375, %.lr.ph545 ]
  store <2 x double> %376, ptr %19, align 16, !tbaa !9
  br label %377

377:                                              ; preds = %._crit_edge546, %340
  call void @zsptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %5, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %14) #6
  br label %.loopexit495.backedge

..loopexit495_crit_edge:                          ; preds = %.lr.ph552.prol.loopexit, %.lr.ph552, %middle.block
  %378 = phi <2 x double> [ %315, %middle.block ], [ %.lcssa749.unr, %.lr.ph552.prol.loopexit ], [ %339, %.lr.ph552 ]
  store <2 x double> %378, ptr %19, align 16, !tbaa !9
  br label %.loopexit495.backedge

379:                                              ; preds = %.loopexit495
  %380 = load i32, ptr %1, align 4, !tbaa !5
  %.not488557 = icmp slt i32 %380, 1
  br i1 %.not488557, label %._crit_edge562.thread, label %.lr.ph561.preheader

.lr.ph561.preheader:                              ; preds = %379
  %381 = add nuw i32 %380, 1
  %wide.trip.count633 = zext i32 %381 to i64
  %invariant.gep667 = getelementptr %struct.doublecomplex, ptr %28, i64 %92
  br label %.lr.ph561

.lr.ph561:                                        ; preds = %.lr.ph561.preheader, %.lr.ph561
  %indvars.iv630 = phi i64 [ 1, %.lr.ph561.preheader ], [ %indvars.iv.next631, %.lr.ph561 ]
  %.1559 = phi double [ 0.000000e+00, %.lr.ph561.preheader ], [ %393, %.lr.ph561 ]
  %gep668 = getelementptr %struct.doublecomplex, ptr %invariant.gep667, i64 %indvars.iv630
  %382 = load double, ptr %gep668, align 8, !tbaa !18
  %383 = call { double, double } @Cd(ptr noundef nonnull %gep668)
  %384 = extractvalue { double, double } %383, 1
  %385 = insertelement <2 x double> poison, double %382, i64 0
  %386 = insertelement <2 x double> %385, double %384, i64 1
  %387 = fcmp oge <2 x double> %386, zeroinitializer
  %388 = fneg <2 x double> %386
  %389 = select <2 x i1> %387, <2 x double> %386, <2 x double> %388
  %shift736 = shufflevector <2 x double> %389, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %390 = fadd <2 x double> %389, %shift736
  %391 = extractelement <2 x double> %390, i64 0
  %392 = fcmp oge double %.1559, %391
  %393 = select i1 %392, double %.1559, double %391
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %exitcond634.not = icmp eq i64 %indvars.iv.next631, %wide.trip.count633
  br i1 %exitcond634.not, label %._crit_edge562, label %.lr.ph561, !llvm.loop !37

._crit_edge562:                                   ; preds = %.lr.ph561
  %394 = fcmp une double %393, 0.000000e+00
  br i1 %394, label %395, label %._crit_edge562.thread

395:                                              ; preds = %._crit_edge562
  %396 = load double, ptr %300, align 8, !tbaa !9
  %397 = fdiv double %396, %393
  store double %397, ptr %300, align 8, !tbaa !9
  br label %._crit_edge562.thread

._crit_edge562.thread:                            ; preds = %379, %._crit_edge562, %395
  %indvars.iv.next636 = add nuw nsw i64 %indvars.iv635, 1
  %.not480.not = icmp ult i64 %indvars.iv635, %89
  br i1 %.not480.not, label %.preheader, label %.loopexit, !llvm.loop !38

.loopexit:                                        ; preds = %._crit_edge562.thread, %.lr.ph571.prol.loopexit, %.lr.ph571, %middle.block712, %54, %78, %55, %.thread
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

declare void @zlacn2_(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 i32 @llvm.umax.i32(i32, i32) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !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 = !{!19, !10, i64 0}
!19 = !{!"", !10, i64 0, !10, i64 8}
!20 = distinct !{!20, !12}
!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 = !{!28}
!28 = distinct !{!28, !29}
!29 = distinct !{!29, !"LVerDomain"}
!30 = distinct !{!30, !12, !13, !14}
!31 = distinct !{!31, !12, !13}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = distinct !{!35, !12, !13, !14}
!36 = distinct !{!36, !12, !13}
!37 = distinct !{!37, !12}
!38 = distinct !{!38, !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