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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i32, align 4

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

117:                                              ; preds = %17
  %118 = load ptr, ptr %18, align 8, !tbaa !5
  %119 = call i32 @lsame_(ptr noundef %118, ptr noundef @.str.2)
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %123, label %121

121:                                              ; preds = %117
  %122 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -1, ptr %122, align 4, !tbaa !9
  br label %210

123:                                              ; preds = %117, %17
  %124 = load i32, ptr %63, align 4, !tbaa !9
  %125 = icmp ne i32 %124, 0
  br i1 %125, label %136, label %126

126:                                              ; preds = %123
  %127 = load ptr, ptr %19, align 8, !tbaa !5
  %128 = call i32 @lsame_(ptr noundef %127, ptr noundef @.str.3)
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %136, label %130

130:                                              ; preds = %126
  %131 = load ptr, ptr %19, align 8, !tbaa !5
  %132 = call i32 @lsame_(ptr noundef %131, ptr noundef @.str.4)
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %136, label %134

134:                                              ; preds = %130
  %135 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -2, ptr %135, align 4, !tbaa !9
  br label %209

136:                                              ; preds = %130, %126, %123
  %137 = load i32, ptr %66, align 4, !tbaa !9
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %145, label %139

139:                                              ; preds = %136
  %140 = load ptr, ptr %20, align 8, !tbaa !5
  %141 = call i32 @lsame_(ptr noundef %140, ptr noundef @.str)
  %142 = icmp ne i32 %141, 0
  br i1 %142, label %145, label %143

143:                                              ; preds = %139
  %144 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -3, ptr %144, align 4, !tbaa !9
  br label %208

145:                                              ; preds = %139, %136
  %146 = load ptr, ptr %21, align 8, !tbaa !5
  %147 = load i32, ptr %146, align 4, !tbaa !9
  %148 = icmp slt i32 %147, 0
  br i1 %148, label %149, label %151

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

151:                                              ; preds = %145
  %152 = load ptr, ptr %22, align 8, !tbaa !5
  %153 = load i32, ptr %152, align 4, !tbaa !9
  %154 = icmp slt i32 %153, 0
  br i1 %154, label %155, label %157

155:                                              ; preds = %151
  %156 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -5, ptr %156, align 4, !tbaa !9
  br label %206

157:                                              ; preds = %151
  %158 = load ptr, ptr %23, align 8, !tbaa !5
  %159 = load i32, ptr %158, align 4, !tbaa !9
  %160 = icmp slt i32 %159, 0
  br i1 %160, label %161, label %163

161:                                              ; preds = %157
  %162 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -6, ptr %162, align 4, !tbaa !9
  br label %205

163:                                              ; preds = %157
  %164 = load ptr, ptr %25, align 8, !tbaa !5
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = load ptr, ptr %22, align 8, !tbaa !5
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  %169 = icmp slt i32 %165, %168
  br i1 %169, label %170, label %172

170:                                              ; preds = %163
  %171 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -8, ptr %171, align 4, !tbaa !9
  br label %204

172:                                              ; preds = %163
  %173 = load ptr, ptr %27, align 8, !tbaa !5
  %174 = load i32, ptr %173, align 4, !tbaa !9
  %175 = load ptr, ptr %21, align 8, !tbaa !5
  %176 = load i32, ptr %175, align 4, !tbaa !9
  %177 = icmp sge i32 1, %176
  br i1 %177, label %178, label %179

178:                                              ; preds = %172
  br label %182

179:                                              ; preds = %172
  %180 = load ptr, ptr %21, align 8, !tbaa !5
  %181 = load i32, ptr %180, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %179, %178
  %183 = phi i32 [ 1, %178 ], [ %181, %179 ]
  %184 = icmp slt i32 %174, %183
  br i1 %184, label %185, label %187

185:                                              ; preds = %182
  %186 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -10, ptr %186, align 4, !tbaa !9
  br label %203

187:                                              ; preds = %182
  %188 = load ptr, ptr %29, align 8, !tbaa !5
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = load ptr, ptr %21, align 8, !tbaa !5
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = icmp sge i32 1, %191
  br i1 %192, label %193, label %194

193:                                              ; preds = %187
  br label %197

194:                                              ; preds = %187
  %195 = load ptr, ptr %21, align 8, !tbaa !5
  %196 = load i32, ptr %195, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %194, %193
  %198 = phi i32 [ 1, %193 ], [ %196, %194 ]
  %199 = icmp slt i32 %189, %198
  br i1 %199, label %200, label %202

200:                                              ; preds = %197
  %201 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 -12, ptr %201, align 4, !tbaa !9
  br label %202

202:                                              ; preds = %200, %197
  br label %203

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

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

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

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

207:                                              ; preds = %206, %149
  br label %208

208:                                              ; preds = %207, %143
  br label %209

209:                                              ; preds = %208, %134
  br label %210

210:                                              ; preds = %209, %121
  %211 = load ptr, ptr %34, align 8, !tbaa !5
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %214, label %219

214:                                              ; preds = %210
  %215 = load ptr, ptr %34, align 8, !tbaa !5
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = sub nsw i32 0, %216
  store i32 %217, ptr %41, align 4, !tbaa !9
  %218 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %41, i32 noundef 6)
  store i32 1, ptr %69, align 4
  br label %2051

219:                                              ; preds = %210
  %220 = load ptr, ptr %21, align 8, !tbaa !5
  %221 = load i32, ptr %220, align 4, !tbaa !9
  %222 = icmp eq i32 %221, 0
  br i1 %222, label %227, label %223

223:                                              ; preds = %219
  %224 = load ptr, ptr %23, align 8, !tbaa !5
  %225 = load i32, ptr %224, align 4, !tbaa !9
  %226 = icmp eq i32 %225, 0
  br i1 %226, label %227, label %247

227:                                              ; preds = %223, %219
  %228 = load ptr, ptr %23, align 8, !tbaa !5
  %229 = load i32, ptr %228, align 4, !tbaa !9
  store i32 %229, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %55, align 4, !tbaa !9
  br label %230

230:                                              ; preds = %243, %227
  %231 = load i32, ptr %55, align 4, !tbaa !9
  %232 = load i32, ptr %41, align 4, !tbaa !9
  %233 = icmp sle i32 %231, %232
  br i1 %233, label %234, label %246

234:                                              ; preds = %230
  %235 = load ptr, ptr %30, align 8, !tbaa !5
  %236 = load i32, ptr %55, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds double, ptr %235, i64 %237
  store double 0.000000e+00, ptr %238, align 8, !tbaa !11
  %239 = load ptr, ptr %31, align 8, !tbaa !5
  %240 = load i32, ptr %55, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds double, ptr %239, i64 %241
  store double 0.000000e+00, ptr %242, align 8, !tbaa !11
  br label %243

243:                                              ; preds = %234
  %244 = load i32, ptr %55, align 4, !tbaa !9
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %55, align 4, !tbaa !9
  br label %230, !llvm.loop !13

246:                                              ; preds = %230
  store i32 1, ptr %69, align 4
  br label %2051

247:                                              ; preds = %223
  %248 = load i32, ptr %63, align 4, !tbaa !9
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %253

250:                                              ; preds = %247
  %251 = getelementptr inbounds [1 x i8], ptr %64, i64 0, i64 0
  store i8 78, ptr %251, align 1, !tbaa !15
  %252 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  store i8 67, ptr %252, align 1, !tbaa !15
  br label %256

253:                                              ; preds = %247
  %254 = getelementptr inbounds [1 x i8], ptr %64, i64 0, i64 0
  store i8 67, ptr %254, align 1, !tbaa !15
  %255 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  store i8 78, ptr %255, align 1, !tbaa !15
  br label %256

256:                                              ; preds = %253, %250
  %257 = load ptr, ptr %22, align 8, !tbaa !5
  %258 = load i32, ptr %257, align 4, !tbaa !9
  %259 = add nsw i32 %258, 2
  store i32 %259, ptr %61, align 4, !tbaa !9
  %260 = call double @dlamch_(ptr noundef @.str.6)
  store double %260, ptr %68, align 8, !tbaa !11
  %261 = call double @dlamch_(ptr noundef @.str.7)
  store double %261, ptr %62, align 8, !tbaa !11
  %262 = load i32, ptr %61, align 4, !tbaa !9
  %263 = sitofp i32 %262 to double
  %264 = load double, ptr %62, align 8, !tbaa !11
  %265 = fmul double %263, %264
  store double %265, ptr %52, align 8, !tbaa !11
  %266 = load double, ptr %52, align 8, !tbaa !11
  %267 = load double, ptr %68, align 8, !tbaa !11
  %268 = fdiv double %266, %267
  store double %268, ptr %53, align 8, !tbaa !11
  %269 = load ptr, ptr %23, align 8, !tbaa !5
  %270 = load i32, ptr %269, align 4, !tbaa !9
  store i32 %270, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %55, align 4, !tbaa !9
  br label %271

271:                                              ; preds = %2047, %256
  %272 = load i32, ptr %55, align 4, !tbaa !9
  %273 = load i32, ptr %41, align 4, !tbaa !9
  %274 = icmp sle i32 %272, %273
  br i1 %274, label %275, label %2050

275:                                              ; preds = %271
  %276 = load ptr, ptr %21, align 8, !tbaa !5
  %277 = load ptr, ptr %28, align 8, !tbaa !5
  %278 = load i32, ptr %55, align 4, !tbaa !9
  %279 = load i32, ptr %39, align 4, !tbaa !9
  %280 = mul nsw i32 %278, %279
  %281 = add nsw i32 %280, 1
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %277, i64 %282
  %284 = load ptr, ptr %32, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.doublecomplex, ptr %284, i64 1
  call void @zcopy_(ptr noundef %276, ptr noundef %283, ptr noundef @c__1, ptr noundef %285, ptr noundef @c__1)
  %286 = load ptr, ptr %18, align 8, !tbaa !5
  %287 = load ptr, ptr %19, align 8, !tbaa !5
  %288 = load ptr, ptr %20, align 8, !tbaa !5
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = load ptr, ptr %22, align 8, !tbaa !5
  %291 = load ptr, ptr %24, align 8, !tbaa !5
  %292 = load i32, ptr %36, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds %struct.doublecomplex, ptr %291, i64 %293
  %295 = load ptr, ptr %25, align 8, !tbaa !5
  %296 = load ptr, ptr %32, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.doublecomplex, ptr %296, i64 1
  call void @ztbmv_(ptr noundef %286, ptr noundef %287, ptr noundef %288, ptr noundef %289, ptr noundef %290, ptr noundef %294, ptr noundef %295, ptr noundef %297, ptr noundef @c__1)
  %298 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double -1.000000e+00, ptr %298, align 8, !tbaa !16
  %299 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double 0.000000e+00, ptr %299, align 8, !tbaa !18
  %300 = load ptr, ptr %21, align 8, !tbaa !5
  %301 = load ptr, ptr %26, align 8, !tbaa !5
  %302 = load i32, ptr %55, align 4, !tbaa !9
  %303 = load i32, ptr %37, align 4, !tbaa !9
  %304 = mul nsw i32 %302, %303
  %305 = add nsw i32 %304, 1
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds %struct.doublecomplex, ptr %301, i64 %306
  %308 = load ptr, ptr %32, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.doublecomplex, ptr %308, i64 1
  call void @zaxpy_(ptr noundef %300, ptr noundef %50, ptr noundef %307, ptr noundef @c__1, ptr noundef %309, ptr noundef @c__1)
  %310 = load ptr, ptr %21, align 8, !tbaa !5
  %311 = load i32, ptr %310, align 4, !tbaa !9
  store i32 %311, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %312

312:                                              ; preds = %362, %275
  %313 = load i32, ptr %54, align 4, !tbaa !9
  %314 = load i32, ptr %42, align 4, !tbaa !9
  %315 = icmp sle i32 %313, %314
  br i1 %315, label %316, label %365

316:                                              ; preds = %312
  %317 = load i32, ptr %54, align 4, !tbaa !9
  %318 = load i32, ptr %55, align 4, !tbaa !9
  %319 = load i32, ptr %37, align 4, !tbaa !9
  %320 = mul nsw i32 %318, %319
  %321 = add nsw i32 %317, %320
  store i32 %321, ptr %43, align 4, !tbaa !9
  %322 = load ptr, ptr %26, align 8, !tbaa !5
  %323 = load i32, ptr %43, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %322, i64 %324
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %325, i32 0, i32 0
  %327 = load double, ptr %326, align 8, !tbaa !16
  store double %327, ptr %46, align 8, !tbaa !11
  %328 = load double, ptr %46, align 8, !tbaa !11
  %329 = fcmp oge double %328, 0.000000e+00
  br i1 %329, label %330, label %332

330:                                              ; preds = %316
  %331 = load double, ptr %46, align 8, !tbaa !11
  br label %335

332:                                              ; preds = %316
  %333 = load double, ptr %46, align 8, !tbaa !11
  %334 = fneg double %333
  br label %335

335:                                              ; preds = %332, %330
  %336 = phi double [ %331, %330 ], [ %334, %332 ]
  %337 = load ptr, ptr %26, align 8, !tbaa !5
  %338 = load i32, ptr %54, align 4, !tbaa !9
  %339 = load i32, ptr %55, align 4, !tbaa !9
  %340 = load i32, ptr %37, align 4, !tbaa !9
  %341 = mul nsw i32 %339, %340
  %342 = add nsw i32 %338, %341
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds %struct.doublecomplex, ptr %337, i64 %343
  %345 = call { double, double } @Cd(ptr noundef %344)
  %346 = extractvalue { double, double } %345, 0
  %347 = extractvalue { double, double } %345, 1
  store double %347, ptr %47, align 8, !tbaa !11
  %348 = load double, ptr %47, align 8, !tbaa !11
  %349 = fcmp oge double %348, 0.000000e+00
  br i1 %349, label %350, label %352

350:                                              ; preds = %335
  %351 = load double, ptr %47, align 8, !tbaa !11
  br label %355

352:                                              ; preds = %335
  %353 = load double, ptr %47, align 8, !tbaa !11
  %354 = fneg double %353
  br label %355

355:                                              ; preds = %352, %350
  %356 = phi double [ %351, %350 ], [ %354, %352 ]
  %357 = fadd double %336, %356
  %358 = load ptr, ptr %33, align 8, !tbaa !5
  %359 = load i32, ptr %54, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds double, ptr %358, i64 %360
  store double %357, ptr %361, align 8, !tbaa !11
  br label %362

362:                                              ; preds = %355
  %363 = load i32, ptr %54, align 4, !tbaa !9
  %364 = add nsw i32 %363, 1
  store i32 %364, ptr %54, align 4, !tbaa !9
  br label %312, !llvm.loop !19

365:                                              ; preds = %312
  %366 = load i32, ptr %63, align 4, !tbaa !9
  %367 = icmp ne i32 %366, 0
  br i1 %367, label %368, label %932

368:                                              ; preds = %365
  %369 = load i32, ptr %59, align 4, !tbaa !9
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %655

371:                                              ; preds = %368
  %372 = load i32, ptr %66, align 4, !tbaa !9
  %373 = icmp ne i32 %372, 0
  br i1 %373, label %374, label %510

374:                                              ; preds = %371
  %375 = load ptr, ptr %21, align 8, !tbaa !5
  %376 = load i32, ptr %375, align 4, !tbaa !9
  store i32 %376, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %377

377:                                              ; preds = %506, %374
  %378 = load i32, ptr %56, align 4, !tbaa !9
  %379 = load i32, ptr %42, align 4, !tbaa !9
  %380 = icmp sle i32 %378, %379
  br i1 %380, label %381, label %509

381:                                              ; preds = %377
  %382 = load i32, ptr %56, align 4, !tbaa !9
  %383 = load i32, ptr %55, align 4, !tbaa !9
  %384 = load i32, ptr %39, align 4, !tbaa !9
  %385 = mul nsw i32 %383, %384
  %386 = add nsw i32 %382, %385
  store i32 %386, ptr %43, align 4, !tbaa !9
  %387 = load ptr, ptr %28, align 8, !tbaa !5
  %388 = load i32, ptr %43, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds %struct.doublecomplex, ptr %387, i64 %389
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %390, i32 0, i32 0
  %392 = load double, ptr %391, align 8, !tbaa !16
  store double %392, ptr %46, align 8, !tbaa !11
  %393 = load double, ptr %46, align 8, !tbaa !11
  %394 = fcmp oge double %393, 0.000000e+00
  br i1 %394, label %395, label %397

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

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

400:                                              ; preds = %397, %395
  %401 = phi double [ %396, %395 ], [ %399, %397 ]
  %402 = load ptr, ptr %28, align 8, !tbaa !5
  %403 = load i32, ptr %56, align 4, !tbaa !9
  %404 = load i32, ptr %55, align 4, !tbaa !9
  %405 = load i32, ptr %39, align 4, !tbaa !9
  %406 = mul nsw i32 %404, %405
  %407 = add nsw i32 %403, %406
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds %struct.doublecomplex, ptr %402, i64 %408
  %410 = call { double, double } @Cd(ptr noundef %409)
  %411 = extractvalue { double, double } %410, 0
  %412 = extractvalue { double, double } %410, 1
  store double %412, ptr %47, align 8, !tbaa !11
  %413 = load double, ptr %47, align 8, !tbaa !11
  %414 = fcmp oge double %413, 0.000000e+00
  br i1 %414, label %415, label %417

415:                                              ; preds = %400
  %416 = load double, ptr %47, align 8, !tbaa !11
  br label %420

417:                                              ; preds = %400
  %418 = load double, ptr %47, align 8, !tbaa !11
  %419 = fneg double %418
  br label %420

420:                                              ; preds = %417, %415
  %421 = phi double [ %416, %415 ], [ %419, %417 ]
  %422 = fadd double %401, %421
  store double %422, ptr %60, align 8, !tbaa !11
  store i32 1, ptr %43, align 4, !tbaa !9
  %423 = load i32, ptr %56, align 4, !tbaa !9
  %424 = load ptr, ptr %22, align 8, !tbaa !5
  %425 = load i32, ptr %424, align 4, !tbaa !9
  %426 = sub nsw i32 %423, %425
  store i32 %426, ptr %44, align 4, !tbaa !9
  %427 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %427, ptr %45, align 4, !tbaa !9
  %428 = load i32, ptr %43, align 4, !tbaa !9
  %429 = load i32, ptr %44, align 4, !tbaa !9
  %430 = icmp sge i32 %428, %429
  br i1 %430, label %431, label %433

431:                                              ; preds = %420
  %432 = load i32, ptr %43, align 4, !tbaa !9
  br label %435

433:                                              ; preds = %420
  %434 = load i32, ptr %44, align 4, !tbaa !9
  br label %435

435:                                              ; preds = %433, %431
  %436 = phi i32 [ %432, %431 ], [ %434, %433 ]
  store i32 %436, ptr %54, align 4, !tbaa !9
  br label %437

437:                                              ; preds = %502, %435
  %438 = load i32, ptr %54, align 4, !tbaa !9
  %439 = load i32, ptr %45, align 4, !tbaa !9
  %440 = icmp sle i32 %438, %439
  br i1 %440, label %441, label %505

441:                                              ; preds = %437
  %442 = load ptr, ptr %22, align 8, !tbaa !5
  %443 = load i32, ptr %442, align 4, !tbaa !9
  %444 = add nsw i32 %443, 1
  %445 = load i32, ptr %54, align 4, !tbaa !9
  %446 = add nsw i32 %444, %445
  %447 = load i32, ptr %56, align 4, !tbaa !9
  %448 = sub nsw i32 %446, %447
  %449 = load i32, ptr %56, align 4, !tbaa !9
  %450 = load i32, ptr %35, align 4, !tbaa !9
  %451 = mul nsw i32 %449, %450
  %452 = add nsw i32 %448, %451
  store i32 %452, ptr %43, align 4, !tbaa !9
  %453 = load ptr, ptr %24, align 8, !tbaa !5
  %454 = load i32, ptr %43, align 4, !tbaa !9
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds %struct.doublecomplex, ptr %453, i64 %455
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %456, i32 0, i32 0
  %458 = load double, ptr %457, align 8, !tbaa !16
  store double %458, ptr %46, align 8, !tbaa !11
  %459 = load double, ptr %46, align 8, !tbaa !11
  %460 = fcmp oge double %459, 0.000000e+00
  br i1 %460, label %461, label %463

461:                                              ; preds = %441
  %462 = load double, ptr %46, align 8, !tbaa !11
  br label %466

463:                                              ; preds = %441
  %464 = load double, ptr %46, align 8, !tbaa !11
  %465 = fneg double %464
  br label %466

466:                                              ; preds = %463, %461
  %467 = phi double [ %462, %461 ], [ %465, %463 ]
  %468 = load ptr, ptr %24, align 8, !tbaa !5
  %469 = load ptr, ptr %22, align 8, !tbaa !5
  %470 = load i32, ptr %469, align 4, !tbaa !9
  %471 = add nsw i32 %470, 1
  %472 = load i32, ptr %54, align 4, !tbaa !9
  %473 = add nsw i32 %471, %472
  %474 = load i32, ptr %56, align 4, !tbaa !9
  %475 = sub nsw i32 %473, %474
  %476 = load i32, ptr %56, align 4, !tbaa !9
  %477 = load i32, ptr %35, align 4, !tbaa !9
  %478 = mul nsw i32 %476, %477
  %479 = add nsw i32 %475, %478
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds %struct.doublecomplex, ptr %468, i64 %480
  %482 = call { double, double } @Cd(ptr noundef %481)
  %483 = extractvalue { double, double } %482, 0
  %484 = extractvalue { double, double } %482, 1
  store double %484, ptr %47, align 8, !tbaa !11
  %485 = load double, ptr %47, align 8, !tbaa !11
  %486 = fcmp oge double %485, 0.000000e+00
  br i1 %486, label %487, label %489

487:                                              ; preds = %466
  %488 = load double, ptr %47, align 8, !tbaa !11
  br label %492

489:                                              ; preds = %466
  %490 = load double, ptr %47, align 8, !tbaa !11
  %491 = fneg double %490
  br label %492

492:                                              ; preds = %489, %487
  %493 = phi double [ %488, %487 ], [ %491, %489 ]
  %494 = fadd double %467, %493
  %495 = load double, ptr %60, align 8, !tbaa !11
  %496 = load ptr, ptr %33, align 8, !tbaa !5
  %497 = load i32, ptr %54, align 4, !tbaa !9
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds double, ptr %496, i64 %498
  %500 = load double, ptr %499, align 8, !tbaa !11
  %501 = call double @llvm.fmuladd.f64(double %494, double %495, double %500)
  store double %501, ptr %499, align 8, !tbaa !11
  br label %502

502:                                              ; preds = %492
  %503 = load i32, ptr %54, align 4, !tbaa !9
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %54, align 4, !tbaa !9
  br label %437, !llvm.loop !20

505:                                              ; preds = %437
  br label %506

506:                                              ; preds = %505
  %507 = load i32, ptr %56, align 4, !tbaa !9
  %508 = add nsw i32 %507, 1
  store i32 %508, ptr %56, align 4, !tbaa !9
  br label %377, !llvm.loop !21

509:                                              ; preds = %377
  br label %654

510:                                              ; preds = %371
  %511 = load ptr, ptr %21, align 8, !tbaa !5
  %512 = load i32, ptr %511, align 4, !tbaa !9
  store i32 %512, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %513

513:                                              ; preds = %650, %510
  %514 = load i32, ptr %56, align 4, !tbaa !9
  %515 = load i32, ptr %42, align 4, !tbaa !9
  %516 = icmp sle i32 %514, %515
  br i1 %516, label %517, label %653

517:                                              ; preds = %513
  %518 = load i32, ptr %56, align 4, !tbaa !9
  %519 = load i32, ptr %55, align 4, !tbaa !9
  %520 = load i32, ptr %39, align 4, !tbaa !9
  %521 = mul nsw i32 %519, %520
  %522 = add nsw i32 %518, %521
  store i32 %522, ptr %45, align 4, !tbaa !9
  %523 = load ptr, ptr %28, align 8, !tbaa !5
  %524 = load i32, ptr %45, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds %struct.doublecomplex, ptr %523, i64 %525
  %527 = getelementptr inbounds %struct.doublecomplex, ptr %526, i32 0, i32 0
  %528 = load double, ptr %527, align 8, !tbaa !16
  store double %528, ptr %46, align 8, !tbaa !11
  %529 = load double, ptr %46, align 8, !tbaa !11
  %530 = fcmp oge double %529, 0.000000e+00
  br i1 %530, label %531, label %533

531:                                              ; preds = %517
  %532 = load double, ptr %46, align 8, !tbaa !11
  br label %536

533:                                              ; preds = %517
  %534 = load double, ptr %46, align 8, !tbaa !11
  %535 = fneg double %534
  br label %536

536:                                              ; preds = %533, %531
  %537 = phi double [ %532, %531 ], [ %535, %533 ]
  %538 = load ptr, ptr %28, align 8, !tbaa !5
  %539 = load i32, ptr %56, align 4, !tbaa !9
  %540 = load i32, ptr %55, align 4, !tbaa !9
  %541 = load i32, ptr %39, align 4, !tbaa !9
  %542 = mul nsw i32 %540, %541
  %543 = add nsw i32 %539, %542
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds %struct.doublecomplex, ptr %538, i64 %544
  %546 = call { double, double } @Cd(ptr noundef %545)
  %547 = extractvalue { double, double } %546, 0
  %548 = extractvalue { double, double } %546, 1
  store double %548, ptr %47, align 8, !tbaa !11
  %549 = load double, ptr %47, align 8, !tbaa !11
  %550 = fcmp oge double %549, 0.000000e+00
  br i1 %550, label %551, label %553

551:                                              ; preds = %536
  %552 = load double, ptr %47, align 8, !tbaa !11
  br label %556

553:                                              ; preds = %536
  %554 = load double, ptr %47, align 8, !tbaa !11
  %555 = fneg double %554
  br label %556

556:                                              ; preds = %553, %551
  %557 = phi double [ %552, %551 ], [ %555, %553 ]
  %558 = fadd double %537, %557
  store double %558, ptr %60, align 8, !tbaa !11
  store i32 1, ptr %45, align 4, !tbaa !9
  %559 = load i32, ptr %56, align 4, !tbaa !9
  %560 = load ptr, ptr %22, align 8, !tbaa !5
  %561 = load i32, ptr %560, align 4, !tbaa !9
  %562 = sub nsw i32 %559, %561
  store i32 %562, ptr %43, align 4, !tbaa !9
  %563 = load i32, ptr %56, align 4, !tbaa !9
  %564 = sub nsw i32 %563, 1
  store i32 %564, ptr %44, align 4, !tbaa !9
  %565 = load i32, ptr %45, align 4, !tbaa !9
  %566 = load i32, ptr %43, align 4, !tbaa !9
  %567 = icmp sge i32 %565, %566
  br i1 %567, label %568, label %570

568:                                              ; preds = %556
  %569 = load i32, ptr %45, align 4, !tbaa !9
  br label %572

570:                                              ; preds = %556
  %571 = load i32, ptr %43, align 4, !tbaa !9
  br label %572

572:                                              ; preds = %570, %568
  %573 = phi i32 [ %569, %568 ], [ %571, %570 ]
  store i32 %573, ptr %54, align 4, !tbaa !9
  br label %574

574:                                              ; preds = %639, %572
  %575 = load i32, ptr %54, align 4, !tbaa !9
  %576 = load i32, ptr %44, align 4, !tbaa !9
  %577 = icmp sle i32 %575, %576
  br i1 %577, label %578, label %642

578:                                              ; preds = %574
  %579 = load ptr, ptr %22, align 8, !tbaa !5
  %580 = load i32, ptr %579, align 4, !tbaa !9
  %581 = add nsw i32 %580, 1
  %582 = load i32, ptr %54, align 4, !tbaa !9
  %583 = add nsw i32 %581, %582
  %584 = load i32, ptr %56, align 4, !tbaa !9
  %585 = sub nsw i32 %583, %584
  %586 = load i32, ptr %56, align 4, !tbaa !9
  %587 = load i32, ptr %35, align 4, !tbaa !9
  %588 = mul nsw i32 %586, %587
  %589 = add nsw i32 %585, %588
  store i32 %589, ptr %45, align 4, !tbaa !9
  %590 = load ptr, ptr %24, align 8, !tbaa !5
  %591 = load i32, ptr %45, align 4, !tbaa !9
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds %struct.doublecomplex, ptr %590, i64 %592
  %594 = getelementptr inbounds %struct.doublecomplex, ptr %593, i32 0, i32 0
  %595 = load double, ptr %594, align 8, !tbaa !16
  store double %595, ptr %46, align 8, !tbaa !11
  %596 = load double, ptr %46, align 8, !tbaa !11
  %597 = fcmp oge double %596, 0.000000e+00
  br i1 %597, label %598, label %600

598:                                              ; preds = %578
  %599 = load double, ptr %46, align 8, !tbaa !11
  br label %603

600:                                              ; preds = %578
  %601 = load double, ptr %46, align 8, !tbaa !11
  %602 = fneg double %601
  br label %603

603:                                              ; preds = %600, %598
  %604 = phi double [ %599, %598 ], [ %602, %600 ]
  %605 = load ptr, ptr %24, align 8, !tbaa !5
  %606 = load ptr, ptr %22, align 8, !tbaa !5
  %607 = load i32, ptr %606, align 4, !tbaa !9
  %608 = add nsw i32 %607, 1
  %609 = load i32, ptr %54, align 4, !tbaa !9
  %610 = add nsw i32 %608, %609
  %611 = load i32, ptr %56, align 4, !tbaa !9
  %612 = sub nsw i32 %610, %611
  %613 = load i32, ptr %56, align 4, !tbaa !9
  %614 = load i32, ptr %35, align 4, !tbaa !9
  %615 = mul nsw i32 %613, %614
  %616 = add nsw i32 %612, %615
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %605, i64 %617
  %619 = call { double, double } @Cd(ptr noundef %618)
  %620 = extractvalue { double, double } %619, 0
  %621 = extractvalue { double, double } %619, 1
  store double %621, ptr %47, align 8, !tbaa !11
  %622 = load double, ptr %47, align 8, !tbaa !11
  %623 = fcmp oge double %622, 0.000000e+00
  br i1 %623, label %624, label %626

624:                                              ; preds = %603
  %625 = load double, ptr %47, align 8, !tbaa !11
  br label %629

626:                                              ; preds = %603
  %627 = load double, ptr %47, align 8, !tbaa !11
  %628 = fneg double %627
  br label %629

629:                                              ; preds = %626, %624
  %630 = phi double [ %625, %624 ], [ %628, %626 ]
  %631 = fadd double %604, %630
  %632 = load double, ptr %60, align 8, !tbaa !11
  %633 = load ptr, ptr %33, align 8, !tbaa !5
  %634 = load i32, ptr %54, align 4, !tbaa !9
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds double, ptr %633, i64 %635
  %637 = load double, ptr %636, align 8, !tbaa !11
  %638 = call double @llvm.fmuladd.f64(double %631, double %632, double %637)
  store double %638, ptr %636, align 8, !tbaa !11
  br label %639

639:                                              ; preds = %629
  %640 = load i32, ptr %54, align 4, !tbaa !9
  %641 = add nsw i32 %640, 1
  store i32 %641, ptr %54, align 4, !tbaa !9
  br label %574, !llvm.loop !22

642:                                              ; preds = %574
  %643 = load double, ptr %60, align 8, !tbaa !11
  %644 = load ptr, ptr %33, align 8, !tbaa !5
  %645 = load i32, ptr %56, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds double, ptr %644, i64 %646
  %648 = load double, ptr %647, align 8, !tbaa !11
  %649 = fadd double %648, %643
  store double %649, ptr %647, align 8, !tbaa !11
  br label %650

650:                                              ; preds = %642
  %651 = load i32, ptr %56, align 4, !tbaa !9
  %652 = add nsw i32 %651, 1
  store i32 %652, ptr %56, align 4, !tbaa !9
  br label %513, !llvm.loop !23

653:                                              ; preds = %513
  br label %654

654:                                              ; preds = %653, %509
  br label %931

655:                                              ; preds = %368
  %656 = load i32, ptr %66, align 4, !tbaa !9
  %657 = icmp ne i32 %656, 0
  br i1 %657, label %658, label %790

658:                                              ; preds = %655
  %659 = load ptr, ptr %21, align 8, !tbaa !5
  %660 = load i32, ptr %659, align 4, !tbaa !9
  store i32 %660, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %786, %658
  %662 = load i32, ptr %56, align 4, !tbaa !9
  %663 = load i32, ptr %42, align 4, !tbaa !9
  %664 = icmp sle i32 %662, %663
  br i1 %664, label %665, label %789

665:                                              ; preds = %661
  %666 = load i32, ptr %56, align 4, !tbaa !9
  %667 = load i32, ptr %55, align 4, !tbaa !9
  %668 = load i32, ptr %39, align 4, !tbaa !9
  %669 = mul nsw i32 %667, %668
  %670 = add nsw i32 %666, %669
  store i32 %670, ptr %44, align 4, !tbaa !9
  %671 = load ptr, ptr %28, align 8, !tbaa !5
  %672 = load i32, ptr %44, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %671, i64 %673
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %674, i32 0, i32 0
  %676 = load double, ptr %675, align 8, !tbaa !16
  store double %676, ptr %46, align 8, !tbaa !11
  %677 = load double, ptr %46, align 8, !tbaa !11
  %678 = fcmp oge double %677, 0.000000e+00
  br i1 %678, label %679, label %681

679:                                              ; preds = %665
  %680 = load double, ptr %46, align 8, !tbaa !11
  br label %684

681:                                              ; preds = %665
  %682 = load double, ptr %46, align 8, !tbaa !11
  %683 = fneg double %682
  br label %684

684:                                              ; preds = %681, %679
  %685 = phi double [ %680, %679 ], [ %683, %681 ]
  %686 = load ptr, ptr %28, align 8, !tbaa !5
  %687 = load i32, ptr %56, align 4, !tbaa !9
  %688 = load i32, ptr %55, align 4, !tbaa !9
  %689 = load i32, ptr %39, align 4, !tbaa !9
  %690 = mul nsw i32 %688, %689
  %691 = add nsw i32 %687, %690
  %692 = sext i32 %691 to i64
  %693 = getelementptr inbounds %struct.doublecomplex, ptr %686, i64 %692
  %694 = call { double, double } @Cd(ptr noundef %693)
  %695 = extractvalue { double, double } %694, 0
  %696 = extractvalue { double, double } %694, 1
  store double %696, ptr %47, align 8, !tbaa !11
  %697 = load double, ptr %47, align 8, !tbaa !11
  %698 = fcmp oge double %697, 0.000000e+00
  br i1 %698, label %699, label %701

699:                                              ; preds = %684
  %700 = load double, ptr %47, align 8, !tbaa !11
  br label %704

701:                                              ; preds = %684
  %702 = load double, ptr %47, align 8, !tbaa !11
  %703 = fneg double %702
  br label %704

704:                                              ; preds = %701, %699
  %705 = phi double [ %700, %699 ], [ %703, %701 ]
  %706 = fadd double %685, %705
  store double %706, ptr %60, align 8, !tbaa !11
  %707 = load ptr, ptr %21, align 8, !tbaa !5
  %708 = load i32, ptr %707, align 4, !tbaa !9
  store i32 %708, ptr %45, align 4, !tbaa !9
  %709 = load i32, ptr %56, align 4, !tbaa !9
  %710 = load ptr, ptr %22, align 8, !tbaa !5
  %711 = load i32, ptr %710, align 4, !tbaa !9
  %712 = add nsw i32 %709, %711
  store i32 %712, ptr %43, align 4, !tbaa !9
  %713 = load i32, ptr %45, align 4, !tbaa !9
  %714 = load i32, ptr %43, align 4, !tbaa !9
  %715 = icmp sle i32 %713, %714
  br i1 %715, label %716, label %718

716:                                              ; preds = %704
  %717 = load i32, ptr %45, align 4, !tbaa !9
  br label %720

718:                                              ; preds = %704
  %719 = load i32, ptr %43, align 4, !tbaa !9
  br label %720

720:                                              ; preds = %718, %716
  %721 = phi i32 [ %717, %716 ], [ %719, %718 ]
  store i32 %721, ptr %44, align 4, !tbaa !9
  %722 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %722, ptr %54, align 4, !tbaa !9
  br label %723

723:                                              ; preds = %782, %720
  %724 = load i32, ptr %54, align 4, !tbaa !9
  %725 = load i32, ptr %44, align 4, !tbaa !9
  %726 = icmp sle i32 %724, %725
  br i1 %726, label %727, label %785

727:                                              ; preds = %723
  %728 = load i32, ptr %54, align 4, !tbaa !9
  %729 = add nsw i32 %728, 1
  %730 = load i32, ptr %56, align 4, !tbaa !9
  %731 = sub nsw i32 %729, %730
  %732 = load i32, ptr %56, align 4, !tbaa !9
  %733 = load i32, ptr %35, align 4, !tbaa !9
  %734 = mul nsw i32 %732, %733
  %735 = add nsw i32 %731, %734
  store i32 %735, ptr %45, align 4, !tbaa !9
  %736 = load ptr, ptr %24, align 8, !tbaa !5
  %737 = load i32, ptr %45, align 4, !tbaa !9
  %738 = sext i32 %737 to i64
  %739 = getelementptr inbounds %struct.doublecomplex, ptr %736, i64 %738
  %740 = getelementptr inbounds %struct.doublecomplex, ptr %739, i32 0, i32 0
  %741 = load double, ptr %740, align 8, !tbaa !16
  store double %741, ptr %46, align 8, !tbaa !11
  %742 = load double, ptr %46, align 8, !tbaa !11
  %743 = fcmp oge double %742, 0.000000e+00
  br i1 %743, label %744, label %746

744:                                              ; preds = %727
  %745 = load double, ptr %46, align 8, !tbaa !11
  br label %749

746:                                              ; preds = %727
  %747 = load double, ptr %46, align 8, !tbaa !11
  %748 = fneg double %747
  br label %749

749:                                              ; preds = %746, %744
  %750 = phi double [ %745, %744 ], [ %748, %746 ]
  %751 = load ptr, ptr %24, align 8, !tbaa !5
  %752 = load i32, ptr %54, align 4, !tbaa !9
  %753 = add nsw i32 %752, 1
  %754 = load i32, ptr %56, align 4, !tbaa !9
  %755 = sub nsw i32 %753, %754
  %756 = load i32, ptr %56, align 4, !tbaa !9
  %757 = load i32, ptr %35, align 4, !tbaa !9
  %758 = mul nsw i32 %756, %757
  %759 = add nsw i32 %755, %758
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %751, i64 %760
  %762 = call { double, double } @Cd(ptr noundef %761)
  %763 = extractvalue { double, double } %762, 0
  %764 = extractvalue { double, double } %762, 1
  store double %764, ptr %47, align 8, !tbaa !11
  %765 = load double, ptr %47, align 8, !tbaa !11
  %766 = fcmp oge double %765, 0.000000e+00
  br i1 %766, label %767, label %769

767:                                              ; preds = %749
  %768 = load double, ptr %47, align 8, !tbaa !11
  br label %772

769:                                              ; preds = %749
  %770 = load double, ptr %47, align 8, !tbaa !11
  %771 = fneg double %770
  br label %772

772:                                              ; preds = %769, %767
  %773 = phi double [ %768, %767 ], [ %771, %769 ]
  %774 = fadd double %750, %773
  %775 = load double, ptr %60, align 8, !tbaa !11
  %776 = load ptr, ptr %33, align 8, !tbaa !5
  %777 = load i32, ptr %54, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds double, ptr %776, i64 %778
  %780 = load double, ptr %779, align 8, !tbaa !11
  %781 = call double @llvm.fmuladd.f64(double %774, double %775, double %780)
  store double %781, ptr %779, align 8, !tbaa !11
  br label %782

782:                                              ; preds = %772
  %783 = load i32, ptr %54, align 4, !tbaa !9
  %784 = add nsw i32 %783, 1
  store i32 %784, ptr %54, align 4, !tbaa !9
  br label %723, !llvm.loop !24

785:                                              ; preds = %723
  br label %786

786:                                              ; preds = %785
  %787 = load i32, ptr %56, align 4, !tbaa !9
  %788 = add nsw i32 %787, 1
  store i32 %788, ptr %56, align 4, !tbaa !9
  br label %661, !llvm.loop !25

789:                                              ; preds = %661
  br label %930

790:                                              ; preds = %655
  %791 = load ptr, ptr %21, align 8, !tbaa !5
  %792 = load i32, ptr %791, align 4, !tbaa !9
  store i32 %792, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %793

793:                                              ; preds = %926, %790
  %794 = load i32, ptr %56, align 4, !tbaa !9
  %795 = load i32, ptr %42, align 4, !tbaa !9
  %796 = icmp sle i32 %794, %795
  br i1 %796, label %797, label %929

797:                                              ; preds = %793
  %798 = load i32, ptr %56, align 4, !tbaa !9
  %799 = load i32, ptr %55, align 4, !tbaa !9
  %800 = load i32, ptr %39, align 4, !tbaa !9
  %801 = mul nsw i32 %799, %800
  %802 = add nsw i32 %798, %801
  store i32 %802, ptr %44, align 4, !tbaa !9
  %803 = load ptr, ptr %28, align 8, !tbaa !5
  %804 = load i32, ptr %44, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds %struct.doublecomplex, ptr %803, i64 %805
  %807 = getelementptr inbounds %struct.doublecomplex, ptr %806, i32 0, i32 0
  %808 = load double, ptr %807, align 8, !tbaa !16
  store double %808, ptr %46, align 8, !tbaa !11
  %809 = load double, ptr %46, align 8, !tbaa !11
  %810 = fcmp oge double %809, 0.000000e+00
  br i1 %810, label %811, label %813

811:                                              ; preds = %797
  %812 = load double, ptr %46, align 8, !tbaa !11
  br label %816

813:                                              ; preds = %797
  %814 = load double, ptr %46, align 8, !tbaa !11
  %815 = fneg double %814
  br label %816

816:                                              ; preds = %813, %811
  %817 = phi double [ %812, %811 ], [ %815, %813 ]
  %818 = load ptr, ptr %28, align 8, !tbaa !5
  %819 = load i32, ptr %56, align 4, !tbaa !9
  %820 = load i32, ptr %55, align 4, !tbaa !9
  %821 = load i32, ptr %39, align 4, !tbaa !9
  %822 = mul nsw i32 %820, %821
  %823 = add nsw i32 %819, %822
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds %struct.doublecomplex, ptr %818, i64 %824
  %826 = call { double, double } @Cd(ptr noundef %825)
  %827 = extractvalue { double, double } %826, 0
  %828 = extractvalue { double, double } %826, 1
  store double %828, ptr %47, align 8, !tbaa !11
  %829 = load double, ptr %47, align 8, !tbaa !11
  %830 = fcmp oge double %829, 0.000000e+00
  br i1 %830, label %831, label %833

831:                                              ; preds = %816
  %832 = load double, ptr %47, align 8, !tbaa !11
  br label %836

833:                                              ; preds = %816
  %834 = load double, ptr %47, align 8, !tbaa !11
  %835 = fneg double %834
  br label %836

836:                                              ; preds = %833, %831
  %837 = phi double [ %832, %831 ], [ %835, %833 ]
  %838 = fadd double %817, %837
  store double %838, ptr %60, align 8, !tbaa !11
  %839 = load ptr, ptr %21, align 8, !tbaa !5
  %840 = load i32, ptr %839, align 4, !tbaa !9
  store i32 %840, ptr %45, align 4, !tbaa !9
  %841 = load i32, ptr %56, align 4, !tbaa !9
  %842 = load ptr, ptr %22, align 8, !tbaa !5
  %843 = load i32, ptr %842, align 4, !tbaa !9
  %844 = add nsw i32 %841, %843
  store i32 %844, ptr %43, align 4, !tbaa !9
  %845 = load i32, ptr %45, align 4, !tbaa !9
  %846 = load i32, ptr %43, align 4, !tbaa !9
  %847 = icmp sle i32 %845, %846
  br i1 %847, label %848, label %850

848:                                              ; preds = %836
  %849 = load i32, ptr %45, align 4, !tbaa !9
  br label %852

850:                                              ; preds = %836
  %851 = load i32, ptr %43, align 4, !tbaa !9
  br label %852

852:                                              ; preds = %850, %848
  %853 = phi i32 [ %849, %848 ], [ %851, %850 ]
  store i32 %853, ptr %44, align 4, !tbaa !9
  %854 = load i32, ptr %56, align 4, !tbaa !9
  %855 = add nsw i32 %854, 1
  store i32 %855, ptr %54, align 4, !tbaa !9
  br label %856

856:                                              ; preds = %915, %852
  %857 = load i32, ptr %54, align 4, !tbaa !9
  %858 = load i32, ptr %44, align 4, !tbaa !9
  %859 = icmp sle i32 %857, %858
  br i1 %859, label %860, label %918

860:                                              ; preds = %856
  %861 = load i32, ptr %54, align 4, !tbaa !9
  %862 = add nsw i32 %861, 1
  %863 = load i32, ptr %56, align 4, !tbaa !9
  %864 = sub nsw i32 %862, %863
  %865 = load i32, ptr %56, align 4, !tbaa !9
  %866 = load i32, ptr %35, align 4, !tbaa !9
  %867 = mul nsw i32 %865, %866
  %868 = add nsw i32 %864, %867
  store i32 %868, ptr %45, align 4, !tbaa !9
  %869 = load ptr, ptr %24, align 8, !tbaa !5
  %870 = load i32, ptr %45, align 4, !tbaa !9
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds %struct.doublecomplex, ptr %869, i64 %871
  %873 = getelementptr inbounds %struct.doublecomplex, ptr %872, i32 0, i32 0
  %874 = load double, ptr %873, align 8, !tbaa !16
  store double %874, ptr %46, align 8, !tbaa !11
  %875 = load double, ptr %46, align 8, !tbaa !11
  %876 = fcmp oge double %875, 0.000000e+00
  br i1 %876, label %877, label %879

877:                                              ; preds = %860
  %878 = load double, ptr %46, align 8, !tbaa !11
  br label %882

879:                                              ; preds = %860
  %880 = load double, ptr %46, align 8, !tbaa !11
  %881 = fneg double %880
  br label %882

882:                                              ; preds = %879, %877
  %883 = phi double [ %878, %877 ], [ %881, %879 ]
  %884 = load ptr, ptr %24, align 8, !tbaa !5
  %885 = load i32, ptr %54, align 4, !tbaa !9
  %886 = add nsw i32 %885, 1
  %887 = load i32, ptr %56, align 4, !tbaa !9
  %888 = sub nsw i32 %886, %887
  %889 = load i32, ptr %56, align 4, !tbaa !9
  %890 = load i32, ptr %35, align 4, !tbaa !9
  %891 = mul nsw i32 %889, %890
  %892 = add nsw i32 %888, %891
  %893 = sext i32 %892 to i64
  %894 = getelementptr inbounds %struct.doublecomplex, ptr %884, i64 %893
  %895 = call { double, double } @Cd(ptr noundef %894)
  %896 = extractvalue { double, double } %895, 0
  %897 = extractvalue { double, double } %895, 1
  store double %897, ptr %47, align 8, !tbaa !11
  %898 = load double, ptr %47, align 8, !tbaa !11
  %899 = fcmp oge double %898, 0.000000e+00
  br i1 %899, label %900, label %902

900:                                              ; preds = %882
  %901 = load double, ptr %47, align 8, !tbaa !11
  br label %905

902:                                              ; preds = %882
  %903 = load double, ptr %47, align 8, !tbaa !11
  %904 = fneg double %903
  br label %905

905:                                              ; preds = %902, %900
  %906 = phi double [ %901, %900 ], [ %904, %902 ]
  %907 = fadd double %883, %906
  %908 = load double, ptr %60, align 8, !tbaa !11
  %909 = load ptr, ptr %33, align 8, !tbaa !5
  %910 = load i32, ptr %54, align 4, !tbaa !9
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds double, ptr %909, i64 %911
  %913 = load double, ptr %912, align 8, !tbaa !11
  %914 = call double @llvm.fmuladd.f64(double %907, double %908, double %913)
  store double %914, ptr %912, align 8, !tbaa !11
  br label %915

915:                                              ; preds = %905
  %916 = load i32, ptr %54, align 4, !tbaa !9
  %917 = add nsw i32 %916, 1
  store i32 %917, ptr %54, align 4, !tbaa !9
  br label %856, !llvm.loop !26

918:                                              ; preds = %856
  %919 = load double, ptr %60, align 8, !tbaa !11
  %920 = load ptr, ptr %33, align 8, !tbaa !5
  %921 = load i32, ptr %56, align 4, !tbaa !9
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds double, ptr %920, i64 %922
  %924 = load double, ptr %923, align 8, !tbaa !11
  %925 = fadd double %924, %919
  store double %925, ptr %923, align 8, !tbaa !11
  br label %926

926:                                              ; preds = %918
  %927 = load i32, ptr %56, align 4, !tbaa !9
  %928 = add nsw i32 %927, 1
  store i32 %928, ptr %56, align 4, !tbaa !9
  br label %793, !llvm.loop !27

929:                                              ; preds = %793
  br label %930

930:                                              ; preds = %929, %789
  br label %931

931:                                              ; preds = %930, %654
  br label %1572

932:                                              ; preds = %365
  %933 = load i32, ptr %59, align 4, !tbaa !9
  %934 = icmp ne i32 %933, 0
  br i1 %934, label %935, label %1257

935:                                              ; preds = %932
  %936 = load i32, ptr %66, align 4, !tbaa !9
  %937 = icmp ne i32 %936, 0
  br i1 %937, label %938, label %1076

938:                                              ; preds = %935
  %939 = load ptr, ptr %21, align 8, !tbaa !5
  %940 = load i32, ptr %939, align 4, !tbaa !9
  store i32 %940, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %941

941:                                              ; preds = %1072, %938
  %942 = load i32, ptr %56, align 4, !tbaa !9
  %943 = load i32, ptr %42, align 4, !tbaa !9
  %944 = icmp sle i32 %942, %943
  br i1 %944, label %945, label %1075

945:                                              ; preds = %941
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  store i32 1, ptr %44, align 4, !tbaa !9
  %946 = load i32, ptr %56, align 4, !tbaa !9
  %947 = load ptr, ptr %22, align 8, !tbaa !5
  %948 = load i32, ptr %947, align 4, !tbaa !9
  %949 = sub nsw i32 %946, %948
  store i32 %949, ptr %45, align 4, !tbaa !9
  %950 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %950, ptr %43, align 4, !tbaa !9
  %951 = load i32, ptr %44, align 4, !tbaa !9
  %952 = load i32, ptr %45, align 4, !tbaa !9
  %953 = icmp sge i32 %951, %952
  br i1 %953, label %954, label %956

954:                                              ; preds = %945
  %955 = load i32, ptr %44, align 4, !tbaa !9
  br label %958

956:                                              ; preds = %945
  %957 = load i32, ptr %45, align 4, !tbaa !9
  br label %958

958:                                              ; preds = %956, %954
  %959 = phi i32 [ %955, %954 ], [ %957, %956 ]
  store i32 %959, ptr %54, align 4, !tbaa !9
  br label %960

960:                                              ; preds = %1061, %958
  %961 = load i32, ptr %54, align 4, !tbaa !9
  %962 = load i32, ptr %43, align 4, !tbaa !9
  %963 = icmp sle i32 %961, %962
  br i1 %963, label %964, label %1064

964:                                              ; preds = %960
  %965 = load ptr, ptr %22, align 8, !tbaa !5
  %966 = load i32, ptr %965, align 4, !tbaa !9
  %967 = add nsw i32 %966, 1
  %968 = load i32, ptr %54, align 4, !tbaa !9
  %969 = add nsw i32 %967, %968
  %970 = load i32, ptr %56, align 4, !tbaa !9
  %971 = sub nsw i32 %969, %970
  %972 = load i32, ptr %56, align 4, !tbaa !9
  %973 = load i32, ptr %35, align 4, !tbaa !9
  %974 = mul nsw i32 %972, %973
  %975 = add nsw i32 %971, %974
  store i32 %975, ptr %44, align 4, !tbaa !9
  %976 = load i32, ptr %54, align 4, !tbaa !9
  %977 = load i32, ptr %55, align 4, !tbaa !9
  %978 = load i32, ptr %39, align 4, !tbaa !9
  %979 = mul nsw i32 %977, %978
  %980 = add nsw i32 %976, %979
  store i32 %980, ptr %45, align 4, !tbaa !9
  %981 = load ptr, ptr %24, align 8, !tbaa !5
  %982 = load i32, ptr %44, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %981, i64 %983
  %985 = getelementptr inbounds %struct.doublecomplex, ptr %984, i32 0, i32 0
  %986 = load double, ptr %985, align 8, !tbaa !16
  store double %986, ptr %46, align 8, !tbaa !11
  %987 = load double, ptr %46, align 8, !tbaa !11
  %988 = fcmp oge double %987, 0.000000e+00
  br i1 %988, label %989, label %991

989:                                              ; preds = %964
  %990 = load double, ptr %46, align 8, !tbaa !11
  br label %994

991:                                              ; preds = %964
  %992 = load double, ptr %46, align 8, !tbaa !11
  %993 = fneg double %992
  br label %994

994:                                              ; preds = %991, %989
  %995 = phi double [ %990, %989 ], [ %993, %991 ]
  %996 = load ptr, ptr %24, align 8, !tbaa !5
  %997 = load ptr, ptr %22, align 8, !tbaa !5
  %998 = load i32, ptr %997, align 4, !tbaa !9
  %999 = add nsw i32 %998, 1
  %1000 = load i32, ptr %54, align 4, !tbaa !9
  %1001 = add nsw i32 %999, %1000
  %1002 = load i32, ptr %56, align 4, !tbaa !9
  %1003 = sub nsw i32 %1001, %1002
  %1004 = load i32, ptr %56, align 4, !tbaa !9
  %1005 = load i32, ptr %35, align 4, !tbaa !9
  %1006 = mul nsw i32 %1004, %1005
  %1007 = add nsw i32 %1003, %1006
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds %struct.doublecomplex, ptr %996, i64 %1008
  %1010 = call { double, double } @Cd(ptr noundef %1009)
  %1011 = extractvalue { double, double } %1010, 0
  %1012 = extractvalue { double, double } %1010, 1
  store double %1012, ptr %47, align 8, !tbaa !11
  %1013 = load double, ptr %47, align 8, !tbaa !11
  %1014 = fcmp oge double %1013, 0.000000e+00
  br i1 %1014, label %1015, label %1017

1015:                                             ; preds = %994
  %1016 = load double, ptr %47, align 8, !tbaa !11
  br label %1020

1017:                                             ; preds = %994
  %1018 = load double, ptr %47, align 8, !tbaa !11
  %1019 = fneg double %1018
  br label %1020

1020:                                             ; preds = %1017, %1015
  %1021 = phi double [ %1016, %1015 ], [ %1019, %1017 ]
  %1022 = fadd double %995, %1021
  %1023 = load ptr, ptr %28, align 8, !tbaa !5
  %1024 = load i32, ptr %45, align 4, !tbaa !9
  %1025 = sext i32 %1024 to i64
  %1026 = getelementptr inbounds %struct.doublecomplex, ptr %1023, i64 %1025
  %1027 = getelementptr inbounds %struct.doublecomplex, ptr %1026, i32 0, i32 0
  %1028 = load double, ptr %1027, align 8, !tbaa !16
  store double %1028, ptr %48, align 8, !tbaa !11
  %1029 = load double, ptr %48, align 8, !tbaa !11
  %1030 = fcmp oge double %1029, 0.000000e+00
  br i1 %1030, label %1031, label %1033

1031:                                             ; preds = %1020
  %1032 = load double, ptr %48, align 8, !tbaa !11
  br label %1036

1033:                                             ; preds = %1020
  %1034 = load double, ptr %48, align 8, !tbaa !11
  %1035 = fneg double %1034
  br label %1036

1036:                                             ; preds = %1033, %1031
  %1037 = phi double [ %1032, %1031 ], [ %1035, %1033 ]
  %1038 = load ptr, ptr %28, align 8, !tbaa !5
  %1039 = load i32, ptr %54, align 4, !tbaa !9
  %1040 = load i32, ptr %55, align 4, !tbaa !9
  %1041 = load i32, ptr %39, align 4, !tbaa !9
  %1042 = mul nsw i32 %1040, %1041
  %1043 = add nsw i32 %1039, %1042
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds %struct.doublecomplex, ptr %1038, i64 %1044
  %1046 = call { double, double } @Cd(ptr noundef %1045)
  %1047 = extractvalue { double, double } %1046, 0
  %1048 = extractvalue { double, double } %1046, 1
  store double %1048, ptr %49, align 8, !tbaa !11
  %1049 = load double, ptr %49, align 8, !tbaa !11
  %1050 = fcmp oge double %1049, 0.000000e+00
  br i1 %1050, label %1051, label %1053

1051:                                             ; preds = %1036
  %1052 = load double, ptr %49, align 8, !tbaa !11
  br label %1056

1053:                                             ; preds = %1036
  %1054 = load double, ptr %49, align 8, !tbaa !11
  %1055 = fneg double %1054
  br label %1056

1056:                                             ; preds = %1053, %1051
  %1057 = phi double [ %1052, %1051 ], [ %1055, %1053 ]
  %1058 = fadd double %1037, %1057
  %1059 = load double, ptr %57, align 8, !tbaa !11
  %1060 = call double @llvm.fmuladd.f64(double %1022, double %1058, double %1059)
  store double %1060, ptr %57, align 8, !tbaa !11
  br label %1061

1061:                                             ; preds = %1056
  %1062 = load i32, ptr %54, align 4, !tbaa !9
  %1063 = add nsw i32 %1062, 1
  store i32 %1063, ptr %54, align 4, !tbaa !9
  br label %960, !llvm.loop !28

1064:                                             ; preds = %960
  %1065 = load double, ptr %57, align 8, !tbaa !11
  %1066 = load ptr, ptr %33, align 8, !tbaa !5
  %1067 = load i32, ptr %56, align 4, !tbaa !9
  %1068 = sext i32 %1067 to i64
  %1069 = getelementptr inbounds double, ptr %1066, i64 %1068
  %1070 = load double, ptr %1069, align 8, !tbaa !11
  %1071 = fadd double %1070, %1065
  store double %1071, ptr %1069, align 8, !tbaa !11
  br label %1072

1072:                                             ; preds = %1064
  %1073 = load i32, ptr %56, align 4, !tbaa !9
  %1074 = add nsw i32 %1073, 1
  store i32 %1074, ptr %56, align 4, !tbaa !9
  br label %941, !llvm.loop !29

1075:                                             ; preds = %941
  br label %1256

1076:                                             ; preds = %935
  %1077 = load ptr, ptr %21, align 8, !tbaa !5
  %1078 = load i32, ptr %1077, align 4, !tbaa !9
  store i32 %1078, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %1079

1079:                                             ; preds = %1252, %1076
  %1080 = load i32, ptr %56, align 4, !tbaa !9
  %1081 = load i32, ptr %42, align 4, !tbaa !9
  %1082 = icmp sle i32 %1080, %1081
  br i1 %1082, label %1083, label %1255

1083:                                             ; preds = %1079
  %1084 = load i32, ptr %56, align 4, !tbaa !9
  %1085 = load i32, ptr %55, align 4, !tbaa !9
  %1086 = load i32, ptr %39, align 4, !tbaa !9
  %1087 = mul nsw i32 %1085, %1086
  %1088 = add nsw i32 %1084, %1087
  store i32 %1088, ptr %43, align 4, !tbaa !9
  %1089 = load ptr, ptr %28, align 8, !tbaa !5
  %1090 = load i32, ptr %43, align 4, !tbaa !9
  %1091 = sext i32 %1090 to i64
  %1092 = getelementptr inbounds %struct.doublecomplex, ptr %1089, i64 %1091
  %1093 = getelementptr inbounds %struct.doublecomplex, ptr %1092, i32 0, i32 0
  %1094 = load double, ptr %1093, align 8, !tbaa !16
  store double %1094, ptr %46, align 8, !tbaa !11
  %1095 = load double, ptr %46, align 8, !tbaa !11
  %1096 = fcmp oge double %1095, 0.000000e+00
  br i1 %1096, label %1097, label %1099

1097:                                             ; preds = %1083
  %1098 = load double, ptr %46, align 8, !tbaa !11
  br label %1102

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

1102:                                             ; preds = %1099, %1097
  %1103 = phi double [ %1098, %1097 ], [ %1101, %1099 ]
  %1104 = load ptr, ptr %28, align 8, !tbaa !5
  %1105 = load i32, ptr %56, align 4, !tbaa !9
  %1106 = load i32, ptr %55, align 4, !tbaa !9
  %1107 = load i32, ptr %39, align 4, !tbaa !9
  %1108 = mul nsw i32 %1106, %1107
  %1109 = add nsw i32 %1105, %1108
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds %struct.doublecomplex, ptr %1104, i64 %1110
  %1112 = call { double, double } @Cd(ptr noundef %1111)
  %1113 = extractvalue { double, double } %1112, 0
  %1114 = extractvalue { double, double } %1112, 1
  store double %1114, ptr %47, align 8, !tbaa !11
  %1115 = load double, ptr %47, align 8, !tbaa !11
  %1116 = fcmp oge double %1115, 0.000000e+00
  br i1 %1116, label %1117, label %1119

1117:                                             ; preds = %1102
  %1118 = load double, ptr %47, align 8, !tbaa !11
  br label %1122

1119:                                             ; preds = %1102
  %1120 = load double, ptr %47, align 8, !tbaa !11
  %1121 = fneg double %1120
  br label %1122

1122:                                             ; preds = %1119, %1117
  %1123 = phi double [ %1118, %1117 ], [ %1121, %1119 ]
  %1124 = fadd double %1103, %1123
  store double %1124, ptr %57, align 8, !tbaa !11
  store i32 1, ptr %43, align 4, !tbaa !9
  %1125 = load i32, ptr %56, align 4, !tbaa !9
  %1126 = load ptr, ptr %22, align 8, !tbaa !5
  %1127 = load i32, ptr %1126, align 4, !tbaa !9
  %1128 = sub nsw i32 %1125, %1127
  store i32 %1128, ptr %44, align 4, !tbaa !9
  %1129 = load i32, ptr %56, align 4, !tbaa !9
  %1130 = sub nsw i32 %1129, 1
  store i32 %1130, ptr %45, align 4, !tbaa !9
  %1131 = load i32, ptr %43, align 4, !tbaa !9
  %1132 = load i32, ptr %44, align 4, !tbaa !9
  %1133 = icmp sge i32 %1131, %1132
  br i1 %1133, label %1134, label %1136

1134:                                             ; preds = %1122
  %1135 = load i32, ptr %43, align 4, !tbaa !9
  br label %1138

1136:                                             ; preds = %1122
  %1137 = load i32, ptr %44, align 4, !tbaa !9
  br label %1138

1138:                                             ; preds = %1136, %1134
  %1139 = phi i32 [ %1135, %1134 ], [ %1137, %1136 ]
  store i32 %1139, ptr %54, align 4, !tbaa !9
  br label %1140

1140:                                             ; preds = %1241, %1138
  %1141 = load i32, ptr %54, align 4, !tbaa !9
  %1142 = load i32, ptr %45, align 4, !tbaa !9
  %1143 = icmp sle i32 %1141, %1142
  br i1 %1143, label %1144, label %1244

1144:                                             ; preds = %1140
  %1145 = load ptr, ptr %22, align 8, !tbaa !5
  %1146 = load i32, ptr %1145, align 4, !tbaa !9
  %1147 = add nsw i32 %1146, 1
  %1148 = load i32, ptr %54, align 4, !tbaa !9
  %1149 = add nsw i32 %1147, %1148
  %1150 = load i32, ptr %56, align 4, !tbaa !9
  %1151 = sub nsw i32 %1149, %1150
  %1152 = load i32, ptr %56, align 4, !tbaa !9
  %1153 = load i32, ptr %35, align 4, !tbaa !9
  %1154 = mul nsw i32 %1152, %1153
  %1155 = add nsw i32 %1151, %1154
  store i32 %1155, ptr %43, align 4, !tbaa !9
  %1156 = load i32, ptr %54, align 4, !tbaa !9
  %1157 = load i32, ptr %55, align 4, !tbaa !9
  %1158 = load i32, ptr %39, align 4, !tbaa !9
  %1159 = mul nsw i32 %1157, %1158
  %1160 = add nsw i32 %1156, %1159
  store i32 %1160, ptr %44, align 4, !tbaa !9
  %1161 = load ptr, ptr %24, align 8, !tbaa !5
  %1162 = load i32, ptr %43, align 4, !tbaa !9
  %1163 = sext i32 %1162 to i64
  %1164 = getelementptr inbounds %struct.doublecomplex, ptr %1161, i64 %1163
  %1165 = getelementptr inbounds %struct.doublecomplex, ptr %1164, i32 0, i32 0
  %1166 = load double, ptr %1165, align 8, !tbaa !16
  store double %1166, ptr %46, align 8, !tbaa !11
  %1167 = load double, ptr %46, align 8, !tbaa !11
  %1168 = fcmp oge double %1167, 0.000000e+00
  br i1 %1168, label %1169, label %1171

1169:                                             ; preds = %1144
  %1170 = load double, ptr %46, align 8, !tbaa !11
  br label %1174

1171:                                             ; preds = %1144
  %1172 = load double, ptr %46, align 8, !tbaa !11
  %1173 = fneg double %1172
  br label %1174

1174:                                             ; preds = %1171, %1169
  %1175 = phi double [ %1170, %1169 ], [ %1173, %1171 ]
  %1176 = load ptr, ptr %24, align 8, !tbaa !5
  %1177 = load ptr, ptr %22, align 8, !tbaa !5
  %1178 = load i32, ptr %1177, align 4, !tbaa !9
  %1179 = add nsw i32 %1178, 1
  %1180 = load i32, ptr %54, align 4, !tbaa !9
  %1181 = add nsw i32 %1179, %1180
  %1182 = load i32, ptr %56, align 4, !tbaa !9
  %1183 = sub nsw i32 %1181, %1182
  %1184 = load i32, ptr %56, align 4, !tbaa !9
  %1185 = load i32, ptr %35, align 4, !tbaa !9
  %1186 = mul nsw i32 %1184, %1185
  %1187 = add nsw i32 %1183, %1186
  %1188 = sext i32 %1187 to i64
  %1189 = getelementptr inbounds %struct.doublecomplex, ptr %1176, i64 %1188
  %1190 = call { double, double } @Cd(ptr noundef %1189)
  %1191 = extractvalue { double, double } %1190, 0
  %1192 = extractvalue { double, double } %1190, 1
  store double %1192, ptr %47, align 8, !tbaa !11
  %1193 = load double, ptr %47, align 8, !tbaa !11
  %1194 = fcmp oge double %1193, 0.000000e+00
  br i1 %1194, label %1195, label %1197

1195:                                             ; preds = %1174
  %1196 = load double, ptr %47, align 8, !tbaa !11
  br label %1200

1197:                                             ; preds = %1174
  %1198 = load double, ptr %47, align 8, !tbaa !11
  %1199 = fneg double %1198
  br label %1200

1200:                                             ; preds = %1197, %1195
  %1201 = phi double [ %1196, %1195 ], [ %1199, %1197 ]
  %1202 = fadd double %1175, %1201
  %1203 = load ptr, ptr %28, align 8, !tbaa !5
  %1204 = load i32, ptr %44, align 4, !tbaa !9
  %1205 = sext i32 %1204 to i64
  %1206 = getelementptr inbounds %struct.doublecomplex, ptr %1203, i64 %1205
  %1207 = getelementptr inbounds %struct.doublecomplex, ptr %1206, i32 0, i32 0
  %1208 = load double, ptr %1207, align 8, !tbaa !16
  store double %1208, ptr %48, align 8, !tbaa !11
  %1209 = load double, ptr %48, align 8, !tbaa !11
  %1210 = fcmp oge double %1209, 0.000000e+00
  br i1 %1210, label %1211, label %1213

1211:                                             ; preds = %1200
  %1212 = load double, ptr %48, align 8, !tbaa !11
  br label %1216

1213:                                             ; preds = %1200
  %1214 = load double, ptr %48, align 8, !tbaa !11
  %1215 = fneg double %1214
  br label %1216

1216:                                             ; preds = %1213, %1211
  %1217 = phi double [ %1212, %1211 ], [ %1215, %1213 ]
  %1218 = load ptr, ptr %28, align 8, !tbaa !5
  %1219 = load i32, ptr %54, align 4, !tbaa !9
  %1220 = load i32, ptr %55, align 4, !tbaa !9
  %1221 = load i32, ptr %39, align 4, !tbaa !9
  %1222 = mul nsw i32 %1220, %1221
  %1223 = add nsw i32 %1219, %1222
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds %struct.doublecomplex, ptr %1218, i64 %1224
  %1226 = call { double, double } @Cd(ptr noundef %1225)
  %1227 = extractvalue { double, double } %1226, 0
  %1228 = extractvalue { double, double } %1226, 1
  store double %1228, ptr %49, align 8, !tbaa !11
  %1229 = load double, ptr %49, align 8, !tbaa !11
  %1230 = fcmp oge double %1229, 0.000000e+00
  br i1 %1230, label %1231, label %1233

1231:                                             ; preds = %1216
  %1232 = load double, ptr %49, align 8, !tbaa !11
  br label %1236

1233:                                             ; preds = %1216
  %1234 = load double, ptr %49, align 8, !tbaa !11
  %1235 = fneg double %1234
  br label %1236

1236:                                             ; preds = %1233, %1231
  %1237 = phi double [ %1232, %1231 ], [ %1235, %1233 ]
  %1238 = fadd double %1217, %1237
  %1239 = load double, ptr %57, align 8, !tbaa !11
  %1240 = call double @llvm.fmuladd.f64(double %1202, double %1238, double %1239)
  store double %1240, ptr %57, align 8, !tbaa !11
  br label %1241

1241:                                             ; preds = %1236
  %1242 = load i32, ptr %54, align 4, !tbaa !9
  %1243 = add nsw i32 %1242, 1
  store i32 %1243, ptr %54, align 4, !tbaa !9
  br label %1140, !llvm.loop !30

1244:                                             ; preds = %1140
  %1245 = load double, ptr %57, align 8, !tbaa !11
  %1246 = load ptr, ptr %33, align 8, !tbaa !5
  %1247 = load i32, ptr %56, align 4, !tbaa !9
  %1248 = sext i32 %1247 to i64
  %1249 = getelementptr inbounds double, ptr %1246, i64 %1248
  %1250 = load double, ptr %1249, align 8, !tbaa !11
  %1251 = fadd double %1250, %1245
  store double %1251, ptr %1249, align 8, !tbaa !11
  br label %1252

1252:                                             ; preds = %1244
  %1253 = load i32, ptr %56, align 4, !tbaa !9
  %1254 = add nsw i32 %1253, 1
  store i32 %1254, ptr %56, align 4, !tbaa !9
  br label %1079, !llvm.loop !31

1255:                                             ; preds = %1079
  br label %1256

1256:                                             ; preds = %1255, %1075
  br label %1571

1257:                                             ; preds = %932
  %1258 = load i32, ptr %66, align 4, !tbaa !9
  %1259 = icmp ne i32 %1258, 0
  br i1 %1259, label %1260, label %1394

1260:                                             ; preds = %1257
  %1261 = load ptr, ptr %21, align 8, !tbaa !5
  %1262 = load i32, ptr %1261, align 4, !tbaa !9
  store i32 %1262, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %1263

1263:                                             ; preds = %1390, %1260
  %1264 = load i32, ptr %56, align 4, !tbaa !9
  %1265 = load i32, ptr %42, align 4, !tbaa !9
  %1266 = icmp sle i32 %1264, %1265
  br i1 %1266, label %1267, label %1393

1267:                                             ; preds = %1263
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  %1268 = load ptr, ptr %21, align 8, !tbaa !5
  %1269 = load i32, ptr %1268, align 4, !tbaa !9
  store i32 %1269, ptr %43, align 4, !tbaa !9
  %1270 = load i32, ptr %56, align 4, !tbaa !9
  %1271 = load ptr, ptr %22, align 8, !tbaa !5
  %1272 = load i32, ptr %1271, align 4, !tbaa !9
  %1273 = add nsw i32 %1270, %1272
  store i32 %1273, ptr %44, align 4, !tbaa !9
  %1274 = load i32, ptr %43, align 4, !tbaa !9
  %1275 = load i32, ptr %44, align 4, !tbaa !9
  %1276 = icmp sle i32 %1274, %1275
  br i1 %1276, label %1277, label %1279

1277:                                             ; preds = %1267
  %1278 = load i32, ptr %43, align 4, !tbaa !9
  br label %1281

1279:                                             ; preds = %1267
  %1280 = load i32, ptr %44, align 4, !tbaa !9
  br label %1281

1281:                                             ; preds = %1279, %1277
  %1282 = phi i32 [ %1278, %1277 ], [ %1280, %1279 ]
  store i32 %1282, ptr %45, align 4, !tbaa !9
  %1283 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %1283, ptr %54, align 4, !tbaa !9
  br label %1284

1284:                                             ; preds = %1379, %1281
  %1285 = load i32, ptr %54, align 4, !tbaa !9
  %1286 = load i32, ptr %45, align 4, !tbaa !9
  %1287 = icmp sle i32 %1285, %1286
  br i1 %1287, label %1288, label %1382

1288:                                             ; preds = %1284
  %1289 = load i32, ptr %54, align 4, !tbaa !9
  %1290 = add nsw i32 %1289, 1
  %1291 = load i32, ptr %56, align 4, !tbaa !9
  %1292 = sub nsw i32 %1290, %1291
  %1293 = load i32, ptr %56, align 4, !tbaa !9
  %1294 = load i32, ptr %35, align 4, !tbaa !9
  %1295 = mul nsw i32 %1293, %1294
  %1296 = add nsw i32 %1292, %1295
  store i32 %1296, ptr %43, align 4, !tbaa !9
  %1297 = load i32, ptr %54, align 4, !tbaa !9
  %1298 = load i32, ptr %55, align 4, !tbaa !9
  %1299 = load i32, ptr %39, align 4, !tbaa !9
  %1300 = mul nsw i32 %1298, %1299
  %1301 = add nsw i32 %1297, %1300
  store i32 %1301, ptr %44, align 4, !tbaa !9
  %1302 = load ptr, ptr %24, align 8, !tbaa !5
  %1303 = load i32, ptr %43, align 4, !tbaa !9
  %1304 = sext i32 %1303 to i64
  %1305 = getelementptr inbounds %struct.doublecomplex, ptr %1302, i64 %1304
  %1306 = getelementptr inbounds %struct.doublecomplex, ptr %1305, i32 0, i32 0
  %1307 = load double, ptr %1306, align 8, !tbaa !16
  store double %1307, ptr %46, align 8, !tbaa !11
  %1308 = load double, ptr %46, align 8, !tbaa !11
  %1309 = fcmp oge double %1308, 0.000000e+00
  br i1 %1309, label %1310, label %1312

1310:                                             ; preds = %1288
  %1311 = load double, ptr %46, align 8, !tbaa !11
  br label %1315

1312:                                             ; preds = %1288
  %1313 = load double, ptr %46, align 8, !tbaa !11
  %1314 = fneg double %1313
  br label %1315

1315:                                             ; preds = %1312, %1310
  %1316 = phi double [ %1311, %1310 ], [ %1314, %1312 ]
  %1317 = load ptr, ptr %24, align 8, !tbaa !5
  %1318 = load i32, ptr %54, align 4, !tbaa !9
  %1319 = add nsw i32 %1318, 1
  %1320 = load i32, ptr %56, align 4, !tbaa !9
  %1321 = sub nsw i32 %1319, %1320
  %1322 = load i32, ptr %56, align 4, !tbaa !9
  %1323 = load i32, ptr %35, align 4, !tbaa !9
  %1324 = mul nsw i32 %1322, %1323
  %1325 = add nsw i32 %1321, %1324
  %1326 = sext i32 %1325 to i64
  %1327 = getelementptr inbounds %struct.doublecomplex, ptr %1317, i64 %1326
  %1328 = call { double, double } @Cd(ptr noundef %1327)
  %1329 = extractvalue { double, double } %1328, 0
  %1330 = extractvalue { double, double } %1328, 1
  store double %1330, ptr %47, align 8, !tbaa !11
  %1331 = load double, ptr %47, align 8, !tbaa !11
  %1332 = fcmp oge double %1331, 0.000000e+00
  br i1 %1332, label %1333, label %1335

1333:                                             ; preds = %1315
  %1334 = load double, ptr %47, align 8, !tbaa !11
  br label %1338

1335:                                             ; preds = %1315
  %1336 = load double, ptr %47, align 8, !tbaa !11
  %1337 = fneg double %1336
  br label %1338

1338:                                             ; preds = %1335, %1333
  %1339 = phi double [ %1334, %1333 ], [ %1337, %1335 ]
  %1340 = fadd double %1316, %1339
  %1341 = load ptr, ptr %28, align 8, !tbaa !5
  %1342 = load i32, ptr %44, align 4, !tbaa !9
  %1343 = sext i32 %1342 to i64
  %1344 = getelementptr inbounds %struct.doublecomplex, ptr %1341, i64 %1343
  %1345 = getelementptr inbounds %struct.doublecomplex, ptr %1344, i32 0, i32 0
  %1346 = load double, ptr %1345, align 8, !tbaa !16
  store double %1346, ptr %48, align 8, !tbaa !11
  %1347 = load double, ptr %48, align 8, !tbaa !11
  %1348 = fcmp oge double %1347, 0.000000e+00
  br i1 %1348, label %1349, label %1351

1349:                                             ; preds = %1338
  %1350 = load double, ptr %48, align 8, !tbaa !11
  br label %1354

1351:                                             ; preds = %1338
  %1352 = load double, ptr %48, align 8, !tbaa !11
  %1353 = fneg double %1352
  br label %1354

1354:                                             ; preds = %1351, %1349
  %1355 = phi double [ %1350, %1349 ], [ %1353, %1351 ]
  %1356 = load ptr, ptr %28, align 8, !tbaa !5
  %1357 = load i32, ptr %54, align 4, !tbaa !9
  %1358 = load i32, ptr %55, align 4, !tbaa !9
  %1359 = load i32, ptr %39, align 4, !tbaa !9
  %1360 = mul nsw i32 %1358, %1359
  %1361 = add nsw i32 %1357, %1360
  %1362 = sext i32 %1361 to i64
  %1363 = getelementptr inbounds %struct.doublecomplex, ptr %1356, i64 %1362
  %1364 = call { double, double } @Cd(ptr noundef %1363)
  %1365 = extractvalue { double, double } %1364, 0
  %1366 = extractvalue { double, double } %1364, 1
  store double %1366, ptr %49, align 8, !tbaa !11
  %1367 = load double, ptr %49, align 8, !tbaa !11
  %1368 = fcmp oge double %1367, 0.000000e+00
  br i1 %1368, label %1369, label %1371

1369:                                             ; preds = %1354
  %1370 = load double, ptr %49, align 8, !tbaa !11
  br label %1374

1371:                                             ; preds = %1354
  %1372 = load double, ptr %49, align 8, !tbaa !11
  %1373 = fneg double %1372
  br label %1374

1374:                                             ; preds = %1371, %1369
  %1375 = phi double [ %1370, %1369 ], [ %1373, %1371 ]
  %1376 = fadd double %1355, %1375
  %1377 = load double, ptr %57, align 8, !tbaa !11
  %1378 = call double @llvm.fmuladd.f64(double %1340, double %1376, double %1377)
  store double %1378, ptr %57, align 8, !tbaa !11
  br label %1379

1379:                                             ; preds = %1374
  %1380 = load i32, ptr %54, align 4, !tbaa !9
  %1381 = add nsw i32 %1380, 1
  store i32 %1381, ptr %54, align 4, !tbaa !9
  br label %1284, !llvm.loop !32

1382:                                             ; preds = %1284
  %1383 = load double, ptr %57, align 8, !tbaa !11
  %1384 = load ptr, ptr %33, align 8, !tbaa !5
  %1385 = load i32, ptr %56, align 4, !tbaa !9
  %1386 = sext i32 %1385 to i64
  %1387 = getelementptr inbounds double, ptr %1384, i64 %1386
  %1388 = load double, ptr %1387, align 8, !tbaa !11
  %1389 = fadd double %1388, %1383
  store double %1389, ptr %1387, align 8, !tbaa !11
  br label %1390

1390:                                             ; preds = %1382
  %1391 = load i32, ptr %56, align 4, !tbaa !9
  %1392 = add nsw i32 %1391, 1
  store i32 %1392, ptr %56, align 4, !tbaa !9
  br label %1263, !llvm.loop !33

1393:                                             ; preds = %1263
  br label %1570

1394:                                             ; preds = %1257
  %1395 = load ptr, ptr %21, align 8, !tbaa !5
  %1396 = load i32, ptr %1395, align 4, !tbaa !9
  store i32 %1396, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %1397

1397:                                             ; preds = %1566, %1394
  %1398 = load i32, ptr %56, align 4, !tbaa !9
  %1399 = load i32, ptr %42, align 4, !tbaa !9
  %1400 = icmp sle i32 %1398, %1399
  br i1 %1400, label %1401, label %1569

1401:                                             ; preds = %1397
  %1402 = load i32, ptr %56, align 4, !tbaa !9
  %1403 = load i32, ptr %55, align 4, !tbaa !9
  %1404 = load i32, ptr %39, align 4, !tbaa !9
  %1405 = mul nsw i32 %1403, %1404
  %1406 = add nsw i32 %1402, %1405
  store i32 %1406, ptr %45, align 4, !tbaa !9
  %1407 = load ptr, ptr %28, align 8, !tbaa !5
  %1408 = load i32, ptr %45, align 4, !tbaa !9
  %1409 = sext i32 %1408 to i64
  %1410 = getelementptr inbounds %struct.doublecomplex, ptr %1407, i64 %1409
  %1411 = getelementptr inbounds %struct.doublecomplex, ptr %1410, i32 0, i32 0
  %1412 = load double, ptr %1411, align 8, !tbaa !16
  store double %1412, ptr %46, align 8, !tbaa !11
  %1413 = load double, ptr %46, align 8, !tbaa !11
  %1414 = fcmp oge double %1413, 0.000000e+00
  br i1 %1414, label %1415, label %1417

1415:                                             ; preds = %1401
  %1416 = load double, ptr %46, align 8, !tbaa !11
  br label %1420

1417:                                             ; preds = %1401
  %1418 = load double, ptr %46, align 8, !tbaa !11
  %1419 = fneg double %1418
  br label %1420

1420:                                             ; preds = %1417, %1415
  %1421 = phi double [ %1416, %1415 ], [ %1419, %1417 ]
  %1422 = load ptr, ptr %28, align 8, !tbaa !5
  %1423 = load i32, ptr %56, align 4, !tbaa !9
  %1424 = load i32, ptr %55, align 4, !tbaa !9
  %1425 = load i32, ptr %39, align 4, !tbaa !9
  %1426 = mul nsw i32 %1424, %1425
  %1427 = add nsw i32 %1423, %1426
  %1428 = sext i32 %1427 to i64
  %1429 = getelementptr inbounds %struct.doublecomplex, ptr %1422, i64 %1428
  %1430 = call { double, double } @Cd(ptr noundef %1429)
  %1431 = extractvalue { double, double } %1430, 0
  %1432 = extractvalue { double, double } %1430, 1
  store double %1432, ptr %47, align 8, !tbaa !11
  %1433 = load double, ptr %47, align 8, !tbaa !11
  %1434 = fcmp oge double %1433, 0.000000e+00
  br i1 %1434, label %1435, label %1437

1435:                                             ; preds = %1420
  %1436 = load double, ptr %47, align 8, !tbaa !11
  br label %1440

1437:                                             ; preds = %1420
  %1438 = load double, ptr %47, align 8, !tbaa !11
  %1439 = fneg double %1438
  br label %1440

1440:                                             ; preds = %1437, %1435
  %1441 = phi double [ %1436, %1435 ], [ %1439, %1437 ]
  %1442 = fadd double %1421, %1441
  store double %1442, ptr %57, align 8, !tbaa !11
  %1443 = load ptr, ptr %21, align 8, !tbaa !5
  %1444 = load i32, ptr %1443, align 4, !tbaa !9
  store i32 %1444, ptr %43, align 4, !tbaa !9
  %1445 = load i32, ptr %56, align 4, !tbaa !9
  %1446 = load ptr, ptr %22, align 8, !tbaa !5
  %1447 = load i32, ptr %1446, align 4, !tbaa !9
  %1448 = add nsw i32 %1445, %1447
  store i32 %1448, ptr %44, align 4, !tbaa !9
  %1449 = load i32, ptr %43, align 4, !tbaa !9
  %1450 = load i32, ptr %44, align 4, !tbaa !9
  %1451 = icmp sle i32 %1449, %1450
  br i1 %1451, label %1452, label %1454

1452:                                             ; preds = %1440
  %1453 = load i32, ptr %43, align 4, !tbaa !9
  br label %1456

1454:                                             ; preds = %1440
  %1455 = load i32, ptr %44, align 4, !tbaa !9
  br label %1456

1456:                                             ; preds = %1454, %1452
  %1457 = phi i32 [ %1453, %1452 ], [ %1455, %1454 ]
  store i32 %1457, ptr %45, align 4, !tbaa !9
  %1458 = load i32, ptr %56, align 4, !tbaa !9
  %1459 = add nsw i32 %1458, 1
  store i32 %1459, ptr %54, align 4, !tbaa !9
  br label %1460

1460:                                             ; preds = %1555, %1456
  %1461 = load i32, ptr %54, align 4, !tbaa !9
  %1462 = load i32, ptr %45, align 4, !tbaa !9
  %1463 = icmp sle i32 %1461, %1462
  br i1 %1463, label %1464, label %1558

1464:                                             ; preds = %1460
  %1465 = load i32, ptr %54, align 4, !tbaa !9
  %1466 = add nsw i32 %1465, 1
  %1467 = load i32, ptr %56, align 4, !tbaa !9
  %1468 = sub nsw i32 %1466, %1467
  %1469 = load i32, ptr %56, align 4, !tbaa !9
  %1470 = load i32, ptr %35, align 4, !tbaa !9
  %1471 = mul nsw i32 %1469, %1470
  %1472 = add nsw i32 %1468, %1471
  store i32 %1472, ptr %43, align 4, !tbaa !9
  %1473 = load i32, ptr %54, align 4, !tbaa !9
  %1474 = load i32, ptr %55, align 4, !tbaa !9
  %1475 = load i32, ptr %39, align 4, !tbaa !9
  %1476 = mul nsw i32 %1474, %1475
  %1477 = add nsw i32 %1473, %1476
  store i32 %1477, ptr %44, align 4, !tbaa !9
  %1478 = load ptr, ptr %24, align 8, !tbaa !5
  %1479 = load i32, ptr %43, align 4, !tbaa !9
  %1480 = sext i32 %1479 to i64
  %1481 = getelementptr inbounds %struct.doublecomplex, ptr %1478, i64 %1480
  %1482 = getelementptr inbounds %struct.doublecomplex, ptr %1481, i32 0, i32 0
  %1483 = load double, ptr %1482, align 8, !tbaa !16
  store double %1483, ptr %46, align 8, !tbaa !11
  %1484 = load double, ptr %46, align 8, !tbaa !11
  %1485 = fcmp oge double %1484, 0.000000e+00
  br i1 %1485, label %1486, label %1488

1486:                                             ; preds = %1464
  %1487 = load double, ptr %46, align 8, !tbaa !11
  br label %1491

1488:                                             ; preds = %1464
  %1489 = load double, ptr %46, align 8, !tbaa !11
  %1490 = fneg double %1489
  br label %1491

1491:                                             ; preds = %1488, %1486
  %1492 = phi double [ %1487, %1486 ], [ %1490, %1488 ]
  %1493 = load ptr, ptr %24, align 8, !tbaa !5
  %1494 = load i32, ptr %54, align 4, !tbaa !9
  %1495 = add nsw i32 %1494, 1
  %1496 = load i32, ptr %56, align 4, !tbaa !9
  %1497 = sub nsw i32 %1495, %1496
  %1498 = load i32, ptr %56, align 4, !tbaa !9
  %1499 = load i32, ptr %35, align 4, !tbaa !9
  %1500 = mul nsw i32 %1498, %1499
  %1501 = add nsw i32 %1497, %1500
  %1502 = sext i32 %1501 to i64
  %1503 = getelementptr inbounds %struct.doublecomplex, ptr %1493, i64 %1502
  %1504 = call { double, double } @Cd(ptr noundef %1503)
  %1505 = extractvalue { double, double } %1504, 0
  %1506 = extractvalue { double, double } %1504, 1
  store double %1506, ptr %47, align 8, !tbaa !11
  %1507 = load double, ptr %47, align 8, !tbaa !11
  %1508 = fcmp oge double %1507, 0.000000e+00
  br i1 %1508, label %1509, label %1511

1509:                                             ; preds = %1491
  %1510 = load double, ptr %47, align 8, !tbaa !11
  br label %1514

1511:                                             ; preds = %1491
  %1512 = load double, ptr %47, align 8, !tbaa !11
  %1513 = fneg double %1512
  br label %1514

1514:                                             ; preds = %1511, %1509
  %1515 = phi double [ %1510, %1509 ], [ %1513, %1511 ]
  %1516 = fadd double %1492, %1515
  %1517 = load ptr, ptr %28, align 8, !tbaa !5
  %1518 = load i32, ptr %44, align 4, !tbaa !9
  %1519 = sext i32 %1518 to i64
  %1520 = getelementptr inbounds %struct.doublecomplex, ptr %1517, i64 %1519
  %1521 = getelementptr inbounds %struct.doublecomplex, ptr %1520, i32 0, i32 0
  %1522 = load double, ptr %1521, align 8, !tbaa !16
  store double %1522, ptr %48, align 8, !tbaa !11
  %1523 = load double, ptr %48, align 8, !tbaa !11
  %1524 = fcmp oge double %1523, 0.000000e+00
  br i1 %1524, label %1525, label %1527

1525:                                             ; preds = %1514
  %1526 = load double, ptr %48, align 8, !tbaa !11
  br label %1530

1527:                                             ; preds = %1514
  %1528 = load double, ptr %48, align 8, !tbaa !11
  %1529 = fneg double %1528
  br label %1530

1530:                                             ; preds = %1527, %1525
  %1531 = phi double [ %1526, %1525 ], [ %1529, %1527 ]
  %1532 = load ptr, ptr %28, align 8, !tbaa !5
  %1533 = load i32, ptr %54, align 4, !tbaa !9
  %1534 = load i32, ptr %55, align 4, !tbaa !9
  %1535 = load i32, ptr %39, align 4, !tbaa !9
  %1536 = mul nsw i32 %1534, %1535
  %1537 = add nsw i32 %1533, %1536
  %1538 = sext i32 %1537 to i64
  %1539 = getelementptr inbounds %struct.doublecomplex, ptr %1532, i64 %1538
  %1540 = call { double, double } @Cd(ptr noundef %1539)
  %1541 = extractvalue { double, double } %1540, 0
  %1542 = extractvalue { double, double } %1540, 1
  store double %1542, ptr %49, align 8, !tbaa !11
  %1543 = load double, ptr %49, align 8, !tbaa !11
  %1544 = fcmp oge double %1543, 0.000000e+00
  br i1 %1544, label %1545, label %1547

1545:                                             ; preds = %1530
  %1546 = load double, ptr %49, align 8, !tbaa !11
  br label %1550

1547:                                             ; preds = %1530
  %1548 = load double, ptr %49, align 8, !tbaa !11
  %1549 = fneg double %1548
  br label %1550

1550:                                             ; preds = %1547, %1545
  %1551 = phi double [ %1546, %1545 ], [ %1549, %1547 ]
  %1552 = fadd double %1531, %1551
  %1553 = load double, ptr %57, align 8, !tbaa !11
  %1554 = call double @llvm.fmuladd.f64(double %1516, double %1552, double %1553)
  store double %1554, ptr %57, align 8, !tbaa !11
  br label %1555

1555:                                             ; preds = %1550
  %1556 = load i32, ptr %54, align 4, !tbaa !9
  %1557 = add nsw i32 %1556, 1
  store i32 %1557, ptr %54, align 4, !tbaa !9
  br label %1460, !llvm.loop !34

1558:                                             ; preds = %1460
  %1559 = load double, ptr %57, align 8, !tbaa !11
  %1560 = load ptr, ptr %33, align 8, !tbaa !5
  %1561 = load i32, ptr %56, align 4, !tbaa !9
  %1562 = sext i32 %1561 to i64
  %1563 = getelementptr inbounds double, ptr %1560, i64 %1562
  %1564 = load double, ptr %1563, align 8, !tbaa !11
  %1565 = fadd double %1564, %1559
  store double %1565, ptr %1563, align 8, !tbaa !11
  br label %1566

1566:                                             ; preds = %1558
  %1567 = load i32, ptr %56, align 4, !tbaa !9
  %1568 = add nsw i32 %1567, 1
  store i32 %1568, ptr %56, align 4, !tbaa !9
  br label %1397, !llvm.loop !35

1569:                                             ; preds = %1397
  br label %1570

1570:                                             ; preds = %1569, %1393
  br label %1571

1571:                                             ; preds = %1570, %1256
  br label %1572

1572:                                             ; preds = %1571, %931
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  %1573 = load ptr, ptr %21, align 8, !tbaa !5
  %1574 = load i32, ptr %1573, align 4, !tbaa !9
  store i32 %1574, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1575

1575:                                             ; preds = %1692, %1572
  %1576 = load i32, ptr %54, align 4, !tbaa !9
  %1577 = load i32, ptr %42, align 4, !tbaa !9
  %1578 = icmp sle i32 %1576, %1577
  br i1 %1578, label %1579, label %1695

1579:                                             ; preds = %1575
  %1580 = load ptr, ptr %33, align 8, !tbaa !5
  %1581 = load i32, ptr %54, align 4, !tbaa !9
  %1582 = sext i32 %1581 to i64
  %1583 = getelementptr inbounds double, ptr %1580, i64 %1582
  %1584 = load double, ptr %1583, align 8, !tbaa !11
  %1585 = load double, ptr %53, align 8, !tbaa !11
  %1586 = fcmp ogt double %1584, %1585
  br i1 %1586, label %1587, label %1637

1587:                                             ; preds = %1579
  %1588 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1588, ptr %45, align 4, !tbaa !9
  %1589 = load double, ptr %57, align 8, !tbaa !11
  store double %1589, ptr %48, align 8, !tbaa !11
  %1590 = load ptr, ptr %32, align 8, !tbaa !5
  %1591 = load i32, ptr %45, align 4, !tbaa !9
  %1592 = sext i32 %1591 to i64
  %1593 = getelementptr inbounds %struct.doublecomplex, ptr %1590, i64 %1592
  %1594 = getelementptr inbounds %struct.doublecomplex, ptr %1593, i32 0, i32 0
  %1595 = load double, ptr %1594, align 8, !tbaa !16
  store double %1595, ptr %46, align 8, !tbaa !11
  %1596 = load double, ptr %46, align 8, !tbaa !11
  %1597 = fcmp oge double %1596, 0.000000e+00
  br i1 %1597, label %1598, label %1600

1598:                                             ; preds = %1587
  %1599 = load double, ptr %46, align 8, !tbaa !11
  br label %1603

1600:                                             ; preds = %1587
  %1601 = load double, ptr %46, align 8, !tbaa !11
  %1602 = fneg double %1601
  br label %1603

1603:                                             ; preds = %1600, %1598
  %1604 = phi double [ %1599, %1598 ], [ %1602, %1600 ]
  %1605 = load ptr, ptr %32, align 8, !tbaa !5
  %1606 = load i32, ptr %54, align 4, !tbaa !9
  %1607 = sext i32 %1606 to i64
  %1608 = getelementptr inbounds %struct.doublecomplex, ptr %1605, i64 %1607
  %1609 = call { double, double } @Cd(ptr noundef %1608)
  %1610 = extractvalue { double, double } %1609, 0
  %1611 = extractvalue { double, double } %1609, 1
  store double %1611, ptr %47, align 8, !tbaa !11
  %1612 = load double, ptr %47, align 8, !tbaa !11
  %1613 = fcmp oge double %1612, 0.000000e+00
  br i1 %1613, label %1614, label %1616

1614:                                             ; preds = %1603
  %1615 = load double, ptr %47, align 8, !tbaa !11
  br label %1619

1616:                                             ; preds = %1603
  %1617 = load double, ptr %47, align 8, !tbaa !11
  %1618 = fneg double %1617
  br label %1619

1619:                                             ; preds = %1616, %1614
  %1620 = phi double [ %1615, %1614 ], [ %1618, %1616 ]
  %1621 = fadd double %1604, %1620
  %1622 = load ptr, ptr %33, align 8, !tbaa !5
  %1623 = load i32, ptr %54, align 4, !tbaa !9
  %1624 = sext i32 %1623 to i64
  %1625 = getelementptr inbounds double, ptr %1622, i64 %1624
  %1626 = load double, ptr %1625, align 8, !tbaa !11
  %1627 = fdiv double %1621, %1626
  store double %1627, ptr %49, align 8, !tbaa !11
  %1628 = load double, ptr %48, align 8, !tbaa !11
  %1629 = load double, ptr %49, align 8, !tbaa !11
  %1630 = fcmp oge double %1628, %1629
  br i1 %1630, label %1631, label %1633

1631:                                             ; preds = %1619
  %1632 = load double, ptr %48, align 8, !tbaa !11
  br label %1635

1633:                                             ; preds = %1619
  %1634 = load double, ptr %49, align 8, !tbaa !11
  br label %1635

1635:                                             ; preds = %1633, %1631
  %1636 = phi double [ %1632, %1631 ], [ %1634, %1633 ]
  store double %1636, ptr %57, align 8, !tbaa !11
  br label %1691

1637:                                             ; preds = %1579
  %1638 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1638, ptr %45, align 4, !tbaa !9
  %1639 = load double, ptr %57, align 8, !tbaa !11
  store double %1639, ptr %48, align 8, !tbaa !11
  %1640 = load ptr, ptr %32, align 8, !tbaa !5
  %1641 = load i32, ptr %45, align 4, !tbaa !9
  %1642 = sext i32 %1641 to i64
  %1643 = getelementptr inbounds %struct.doublecomplex, ptr %1640, i64 %1642
  %1644 = getelementptr inbounds %struct.doublecomplex, ptr %1643, i32 0, i32 0
  %1645 = load double, ptr %1644, align 8, !tbaa !16
  store double %1645, ptr %46, align 8, !tbaa !11
  %1646 = load double, ptr %46, align 8, !tbaa !11
  %1647 = fcmp oge double %1646, 0.000000e+00
  br i1 %1647, label %1648, label %1650

1648:                                             ; preds = %1637
  %1649 = load double, ptr %46, align 8, !tbaa !11
  br label %1653

1650:                                             ; preds = %1637
  %1651 = load double, ptr %46, align 8, !tbaa !11
  %1652 = fneg double %1651
  br label %1653

1653:                                             ; preds = %1650, %1648
  %1654 = phi double [ %1649, %1648 ], [ %1652, %1650 ]
  %1655 = load ptr, ptr %32, align 8, !tbaa !5
  %1656 = load i32, ptr %54, align 4, !tbaa !9
  %1657 = sext i32 %1656 to i64
  %1658 = getelementptr inbounds %struct.doublecomplex, ptr %1655, i64 %1657
  %1659 = call { double, double } @Cd(ptr noundef %1658)
  %1660 = extractvalue { double, double } %1659, 0
  %1661 = extractvalue { double, double } %1659, 1
  store double %1661, ptr %47, align 8, !tbaa !11
  %1662 = load double, ptr %47, align 8, !tbaa !11
  %1663 = fcmp oge double %1662, 0.000000e+00
  br i1 %1663, label %1664, label %1666

1664:                                             ; preds = %1653
  %1665 = load double, ptr %47, align 8, !tbaa !11
  br label %1669

1666:                                             ; preds = %1653
  %1667 = load double, ptr %47, align 8, !tbaa !11
  %1668 = fneg double %1667
  br label %1669

1669:                                             ; preds = %1666, %1664
  %1670 = phi double [ %1665, %1664 ], [ %1668, %1666 ]
  %1671 = fadd double %1654, %1670
  %1672 = load double, ptr %52, align 8, !tbaa !11
  %1673 = fadd double %1671, %1672
  %1674 = load ptr, ptr %33, align 8, !tbaa !5
  %1675 = load i32, ptr %54, align 4, !tbaa !9
  %1676 = sext i32 %1675 to i64
  %1677 = getelementptr inbounds double, ptr %1674, i64 %1676
  %1678 = load double, ptr %1677, align 8, !tbaa !11
  %1679 = load double, ptr %52, align 8, !tbaa !11
  %1680 = fadd double %1678, %1679
  %1681 = fdiv double %1673, %1680
  store double %1681, ptr %49, align 8, !tbaa !11
  %1682 = load double, ptr %48, align 8, !tbaa !11
  %1683 = load double, ptr %49, align 8, !tbaa !11
  %1684 = fcmp oge double %1682, %1683
  br i1 %1684, label %1685, label %1687

1685:                                             ; preds = %1669
  %1686 = load double, ptr %48, align 8, !tbaa !11
  br label %1689

1687:                                             ; preds = %1669
  %1688 = load double, ptr %49, align 8, !tbaa !11
  br label %1689

1689:                                             ; preds = %1687, %1685
  %1690 = phi double [ %1686, %1685 ], [ %1688, %1687 ]
  store double %1690, ptr %57, align 8, !tbaa !11
  br label %1691

1691:                                             ; preds = %1689, %1635
  br label %1692

1692:                                             ; preds = %1691
  %1693 = load i32, ptr %54, align 4, !tbaa !9
  %1694 = add nsw i32 %1693, 1
  store i32 %1694, ptr %54, align 4, !tbaa !9
  br label %1575, !llvm.loop !36

1695:                                             ; preds = %1575
  %1696 = load double, ptr %57, align 8, !tbaa !11
  %1697 = load ptr, ptr %31, align 8, !tbaa !5
  %1698 = load i32, ptr %55, align 4, !tbaa !9
  %1699 = sext i32 %1698 to i64
  %1700 = getelementptr inbounds double, ptr %1697, i64 %1699
  store double %1696, ptr %1700, align 8, !tbaa !11
  %1701 = load ptr, ptr %21, align 8, !tbaa !5
  %1702 = load i32, ptr %1701, align 4, !tbaa !9
  store i32 %1702, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1703

1703:                                             ; preds = %1814, %1695
  %1704 = load i32, ptr %54, align 4, !tbaa !9
  %1705 = load i32, ptr %42, align 4, !tbaa !9
  %1706 = icmp sle i32 %1704, %1705
  br i1 %1706, label %1707, label %1817

1707:                                             ; preds = %1703
  %1708 = load ptr, ptr %33, align 8, !tbaa !5
  %1709 = load i32, ptr %54, align 4, !tbaa !9
  %1710 = sext i32 %1709 to i64
  %1711 = getelementptr inbounds double, ptr %1708, i64 %1710
  %1712 = load double, ptr %1711, align 8, !tbaa !11
  %1713 = load double, ptr %53, align 8, !tbaa !11
  %1714 = fcmp ogt double %1712, %1713
  br i1 %1714, label %1715, label %1763

1715:                                             ; preds = %1707
  %1716 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1716, ptr %45, align 4, !tbaa !9
  %1717 = load ptr, ptr %32, align 8, !tbaa !5
  %1718 = load i32, ptr %45, align 4, !tbaa !9
  %1719 = sext i32 %1718 to i64
  %1720 = getelementptr inbounds %struct.doublecomplex, ptr %1717, i64 %1719
  %1721 = getelementptr inbounds %struct.doublecomplex, ptr %1720, i32 0, i32 0
  %1722 = load double, ptr %1721, align 8, !tbaa !16
  store double %1722, ptr %46, align 8, !tbaa !11
  %1723 = load double, ptr %46, align 8, !tbaa !11
  %1724 = fcmp oge double %1723, 0.000000e+00
  br i1 %1724, label %1725, label %1727

1725:                                             ; preds = %1715
  %1726 = load double, ptr %46, align 8, !tbaa !11
  br label %1730

1727:                                             ; preds = %1715
  %1728 = load double, ptr %46, align 8, !tbaa !11
  %1729 = fneg double %1728
  br label %1730

1730:                                             ; preds = %1727, %1725
  %1731 = phi double [ %1726, %1725 ], [ %1729, %1727 ]
  %1732 = load ptr, ptr %32, align 8, !tbaa !5
  %1733 = load i32, ptr %54, align 4, !tbaa !9
  %1734 = sext i32 %1733 to i64
  %1735 = getelementptr inbounds %struct.doublecomplex, ptr %1732, i64 %1734
  %1736 = call { double, double } @Cd(ptr noundef %1735)
  %1737 = extractvalue { double, double } %1736, 0
  %1738 = extractvalue { double, double } %1736, 1
  store double %1738, ptr %47, align 8, !tbaa !11
  %1739 = load double, ptr %47, align 8, !tbaa !11
  %1740 = fcmp oge double %1739, 0.000000e+00
  br i1 %1740, label %1741, label %1743

1741:                                             ; preds = %1730
  %1742 = load double, ptr %47, align 8, !tbaa !11
  br label %1746

1743:                                             ; preds = %1730
  %1744 = load double, ptr %47, align 8, !tbaa !11
  %1745 = fneg double %1744
  br label %1746

1746:                                             ; preds = %1743, %1741
  %1747 = phi double [ %1742, %1741 ], [ %1745, %1743 ]
  %1748 = fadd double %1731, %1747
  %1749 = load i32, ptr %61, align 4, !tbaa !9
  %1750 = sitofp i32 %1749 to double
  %1751 = load double, ptr %68, align 8, !tbaa !11
  %1752 = fmul double %1750, %1751
  %1753 = load ptr, ptr %33, align 8, !tbaa !5
  %1754 = load i32, ptr %54, align 4, !tbaa !9
  %1755 = sext i32 %1754 to i64
  %1756 = getelementptr inbounds double, ptr %1753, i64 %1755
  %1757 = load double, ptr %1756, align 8, !tbaa !11
  %1758 = call double @llvm.fmuladd.f64(double %1752, double %1757, double %1748)
  %1759 = load ptr, ptr %33, align 8, !tbaa !5
  %1760 = load i32, ptr %54, align 4, !tbaa !9
  %1761 = sext i32 %1760 to i64
  %1762 = getelementptr inbounds double, ptr %1759, i64 %1761
  store double %1758, ptr %1762, align 8, !tbaa !11
  br label %1813

1763:                                             ; preds = %1707
  %1764 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1764, ptr %45, align 4, !tbaa !9
  %1765 = load ptr, ptr %32, align 8, !tbaa !5
  %1766 = load i32, ptr %45, align 4, !tbaa !9
  %1767 = sext i32 %1766 to i64
  %1768 = getelementptr inbounds %struct.doublecomplex, ptr %1765, i64 %1767
  %1769 = getelementptr inbounds %struct.doublecomplex, ptr %1768, i32 0, i32 0
  %1770 = load double, ptr %1769, align 8, !tbaa !16
  store double %1770, ptr %46, align 8, !tbaa !11
  %1771 = load double, ptr %46, align 8, !tbaa !11
  %1772 = fcmp oge double %1771, 0.000000e+00
  br i1 %1772, label %1773, label %1775

1773:                                             ; preds = %1763
  %1774 = load double, ptr %46, align 8, !tbaa !11
  br label %1778

1775:                                             ; preds = %1763
  %1776 = load double, ptr %46, align 8, !tbaa !11
  %1777 = fneg double %1776
  br label %1778

1778:                                             ; preds = %1775, %1773
  %1779 = phi double [ %1774, %1773 ], [ %1777, %1775 ]
  %1780 = load ptr, ptr %32, align 8, !tbaa !5
  %1781 = load i32, ptr %54, align 4, !tbaa !9
  %1782 = sext i32 %1781 to i64
  %1783 = getelementptr inbounds %struct.doublecomplex, ptr %1780, i64 %1782
  %1784 = call { double, double } @Cd(ptr noundef %1783)
  %1785 = extractvalue { double, double } %1784, 0
  %1786 = extractvalue { double, double } %1784, 1
  store double %1786, ptr %47, align 8, !tbaa !11
  %1787 = load double, ptr %47, align 8, !tbaa !11
  %1788 = fcmp oge double %1787, 0.000000e+00
  br i1 %1788, label %1789, label %1791

1789:                                             ; preds = %1778
  %1790 = load double, ptr %47, align 8, !tbaa !11
  br label %1794

1791:                                             ; preds = %1778
  %1792 = load double, ptr %47, align 8, !tbaa !11
  %1793 = fneg double %1792
  br label %1794

1794:                                             ; preds = %1791, %1789
  %1795 = phi double [ %1790, %1789 ], [ %1793, %1791 ]
  %1796 = fadd double %1779, %1795
  %1797 = load i32, ptr %61, align 4, !tbaa !9
  %1798 = sitofp i32 %1797 to double
  %1799 = load double, ptr %68, align 8, !tbaa !11
  %1800 = fmul double %1798, %1799
  %1801 = load ptr, ptr %33, align 8, !tbaa !5
  %1802 = load i32, ptr %54, align 4, !tbaa !9
  %1803 = sext i32 %1802 to i64
  %1804 = getelementptr inbounds double, ptr %1801, i64 %1803
  %1805 = load double, ptr %1804, align 8, !tbaa !11
  %1806 = call double @llvm.fmuladd.f64(double %1800, double %1805, double %1796)
  %1807 = load double, ptr %52, align 8, !tbaa !11
  %1808 = fadd double %1806, %1807
  %1809 = load ptr, ptr %33, align 8, !tbaa !5
  %1810 = load i32, ptr %54, align 4, !tbaa !9
  %1811 = sext i32 %1810 to i64
  %1812 = getelementptr inbounds double, ptr %1809, i64 %1811
  store double %1808, ptr %1812, align 8, !tbaa !11
  br label %1813

1813:                                             ; preds = %1794, %1746
  br label %1814

1814:                                             ; preds = %1813
  %1815 = load i32, ptr %54, align 4, !tbaa !9
  %1816 = add nsw i32 %1815, 1
  store i32 %1816, ptr %54, align 4, !tbaa !9
  br label %1703, !llvm.loop !37

1817:                                             ; preds = %1703
  store i32 0, ptr %51, align 4, !tbaa !9
  br label %1818

1818:                                             ; preds = %1972, %1817
  %1819 = load ptr, ptr %21, align 8, !tbaa !5
  %1820 = load ptr, ptr %32, align 8, !tbaa !5
  %1821 = load ptr, ptr %21, align 8, !tbaa !5
  %1822 = load i32, ptr %1821, align 4, !tbaa !9
  %1823 = add nsw i32 %1822, 1
  %1824 = sext i32 %1823 to i64
  %1825 = getelementptr inbounds %struct.doublecomplex, ptr %1820, i64 %1824
  %1826 = load ptr, ptr %32, align 8, !tbaa !5
  %1827 = getelementptr inbounds %struct.doublecomplex, ptr %1826, i64 1
  %1828 = load ptr, ptr %30, align 8, !tbaa !5
  %1829 = load i32, ptr %55, align 4, !tbaa !9
  %1830 = sext i32 %1829 to i64
  %1831 = getelementptr inbounds double, ptr %1828, i64 %1830
  %1832 = getelementptr inbounds [3 x i32], ptr %58, i64 0, i64 0
  call void @zlacn2_(ptr noundef %1819, ptr noundef %1825, ptr noundef %1827, ptr noundef %1831, ptr noundef %51, ptr noundef %1832)
  %1833 = load i32, ptr %51, align 4, !tbaa !9
  %1834 = icmp ne i32 %1833, 0
  br i1 %1834, label %1835, label %1973

1835:                                             ; preds = %1818
  %1836 = load i32, ptr %51, align 4, !tbaa !9
  %1837 = icmp eq i32 %1836, 1
  br i1 %1837, label %1838, label %1905

1838:                                             ; preds = %1835
  %1839 = load ptr, ptr %18, align 8, !tbaa !5
  %1840 = getelementptr inbounds [1 x i8], ptr %65, i64 0, i64 0
  %1841 = load ptr, ptr %20, align 8, !tbaa !5
  %1842 = load ptr, ptr %21, align 8, !tbaa !5
  %1843 = load ptr, ptr %22, align 8, !tbaa !5
  %1844 = load ptr, ptr %24, align 8, !tbaa !5
  %1845 = load i32, ptr %36, align 4, !tbaa !9
  %1846 = sext i32 %1845 to i64
  %1847 = getelementptr inbounds %struct.doublecomplex, ptr %1844, i64 %1846
  %1848 = load ptr, ptr %25, align 8, !tbaa !5
  %1849 = load ptr, ptr %32, align 8, !tbaa !5
  %1850 = getelementptr inbounds %struct.doublecomplex, ptr %1849, i64 1
  call void @ztbsv_(ptr noundef %1839, ptr noundef %1840, ptr noundef %1841, ptr noundef %1842, ptr noundef %1843, ptr noundef %1847, ptr noundef %1848, ptr noundef %1850, ptr noundef @c__1)
  %1851 = load ptr, ptr %21, align 8, !tbaa !5
  %1852 = load i32, ptr %1851, align 4, !tbaa !9
  store i32 %1852, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1853

1853:                                             ; preds = %1901, %1838
  %1854 = load i32, ptr %54, align 4, !tbaa !9
  %1855 = load i32, ptr %42, align 4, !tbaa !9
  %1856 = icmp sle i32 %1854, %1855
  br i1 %1856, label %1857, label %1904

1857:                                             ; preds = %1853
  %1858 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1858, ptr %45, align 4, !tbaa !9
  %1859 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1859, ptr %43, align 4, !tbaa !9
  %1860 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1860, ptr %44, align 4, !tbaa !9
  %1861 = load ptr, ptr %33, align 8, !tbaa !5
  %1862 = load i32, ptr %43, align 4, !tbaa !9
  %1863 = sext i32 %1862 to i64
  %1864 = getelementptr inbounds double, ptr %1861, i64 %1863
  %1865 = load double, ptr %1864, align 8, !tbaa !11
  %1866 = load ptr, ptr %32, align 8, !tbaa !5
  %1867 = load i32, ptr %44, align 4, !tbaa !9
  %1868 = sext i32 %1867 to i64
  %1869 = getelementptr inbounds %struct.doublecomplex, ptr %1866, i64 %1868
  %1870 = getelementptr inbounds %struct.doublecomplex, ptr %1869, i32 0, i32 0
  %1871 = load double, ptr %1870, align 8, !tbaa !16
  %1872 = fmul double %1865, %1871
  %1873 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %1872, ptr %1873, align 8, !tbaa !16
  %1874 = load ptr, ptr %33, align 8, !tbaa !5
  %1875 = load i32, ptr %43, align 4, !tbaa !9
  %1876 = sext i32 %1875 to i64
  %1877 = getelementptr inbounds double, ptr %1874, i64 %1876
  %1878 = load double, ptr %1877, align 8, !tbaa !11
  %1879 = load ptr, ptr %32, align 8, !tbaa !5
  %1880 = load i32, ptr %44, align 4, !tbaa !9
  %1881 = sext i32 %1880 to i64
  %1882 = getelementptr inbounds %struct.doublecomplex, ptr %1879, i64 %1881
  %1883 = getelementptr inbounds %struct.doublecomplex, ptr %1882, i32 0, i32 1
  %1884 = load double, ptr %1883, align 8, !tbaa !18
  %1885 = fmul double %1878, %1884
  %1886 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %1885, ptr %1886, align 8, !tbaa !18
  %1887 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1888 = load double, ptr %1887, align 8, !tbaa !16
  %1889 = load ptr, ptr %32, align 8, !tbaa !5
  %1890 = load i32, ptr %45, align 4, !tbaa !9
  %1891 = sext i32 %1890 to i64
  %1892 = getelementptr inbounds %struct.doublecomplex, ptr %1889, i64 %1891
  %1893 = getelementptr inbounds %struct.doublecomplex, ptr %1892, i32 0, i32 0
  store double %1888, ptr %1893, align 8, !tbaa !16
  %1894 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1895 = load double, ptr %1894, align 8, !tbaa !18
  %1896 = load ptr, ptr %32, align 8, !tbaa !5
  %1897 = load i32, ptr %45, align 4, !tbaa !9
  %1898 = sext i32 %1897 to i64
  %1899 = getelementptr inbounds %struct.doublecomplex, ptr %1896, i64 %1898
  %1900 = getelementptr inbounds %struct.doublecomplex, ptr %1899, i32 0, i32 1
  store double %1895, ptr %1900, align 8, !tbaa !18
  br label %1901

1901:                                             ; preds = %1857
  %1902 = load i32, ptr %54, align 4, !tbaa !9
  %1903 = add nsw i32 %1902, 1
  store i32 %1903, ptr %54, align 4, !tbaa !9
  br label %1853, !llvm.loop !38

1904:                                             ; preds = %1853
  br label %1972

1905:                                             ; preds = %1835
  %1906 = load ptr, ptr %21, align 8, !tbaa !5
  %1907 = load i32, ptr %1906, align 4, !tbaa !9
  store i32 %1907, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1908

1908:                                             ; preds = %1956, %1905
  %1909 = load i32, ptr %54, align 4, !tbaa !9
  %1910 = load i32, ptr %42, align 4, !tbaa !9
  %1911 = icmp sle i32 %1909, %1910
  br i1 %1911, label %1912, label %1959

1912:                                             ; preds = %1908
  %1913 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1913, ptr %45, align 4, !tbaa !9
  %1914 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1914, ptr %43, align 4, !tbaa !9
  %1915 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %1915, ptr %44, align 4, !tbaa !9
  %1916 = load ptr, ptr %33, align 8, !tbaa !5
  %1917 = load i32, ptr %43, align 4, !tbaa !9
  %1918 = sext i32 %1917 to i64
  %1919 = getelementptr inbounds double, ptr %1916, i64 %1918
  %1920 = load double, ptr %1919, align 8, !tbaa !11
  %1921 = load ptr, ptr %32, align 8, !tbaa !5
  %1922 = load i32, ptr %44, align 4, !tbaa !9
  %1923 = sext i32 %1922 to i64
  %1924 = getelementptr inbounds %struct.doublecomplex, ptr %1921, i64 %1923
  %1925 = getelementptr inbounds %struct.doublecomplex, ptr %1924, i32 0, i32 0
  %1926 = load double, ptr %1925, align 8, !tbaa !16
  %1927 = fmul double %1920, %1926
  %1928 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %1927, ptr %1928, align 8, !tbaa !16
  %1929 = load ptr, ptr %33, align 8, !tbaa !5
  %1930 = load i32, ptr %43, align 4, !tbaa !9
  %1931 = sext i32 %1930 to i64
  %1932 = getelementptr inbounds double, ptr %1929, i64 %1931
  %1933 = load double, ptr %1932, align 8, !tbaa !11
  %1934 = load ptr, ptr %32, align 8, !tbaa !5
  %1935 = load i32, ptr %44, align 4, !tbaa !9
  %1936 = sext i32 %1935 to i64
  %1937 = getelementptr inbounds %struct.doublecomplex, ptr %1934, i64 %1936
  %1938 = getelementptr inbounds %struct.doublecomplex, ptr %1937, i32 0, i32 1
  %1939 = load double, ptr %1938, align 8, !tbaa !18
  %1940 = fmul double %1933, %1939
  %1941 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %1940, ptr %1941, align 8, !tbaa !18
  %1942 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1943 = load double, ptr %1942, align 8, !tbaa !16
  %1944 = load ptr, ptr %32, align 8, !tbaa !5
  %1945 = load i32, ptr %45, align 4, !tbaa !9
  %1946 = sext i32 %1945 to i64
  %1947 = getelementptr inbounds %struct.doublecomplex, ptr %1944, i64 %1946
  %1948 = getelementptr inbounds %struct.doublecomplex, ptr %1947, i32 0, i32 0
  store double %1943, ptr %1948, align 8, !tbaa !16
  %1949 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1950 = load double, ptr %1949, align 8, !tbaa !18
  %1951 = load ptr, ptr %32, align 8, !tbaa !5
  %1952 = load i32, ptr %45, align 4, !tbaa !9
  %1953 = sext i32 %1952 to i64
  %1954 = getelementptr inbounds %struct.doublecomplex, ptr %1951, i64 %1953
  %1955 = getelementptr inbounds %struct.doublecomplex, ptr %1954, i32 0, i32 1
  store double %1950, ptr %1955, align 8, !tbaa !18
  br label %1956

1956:                                             ; preds = %1912
  %1957 = load i32, ptr %54, align 4, !tbaa !9
  %1958 = add nsw i32 %1957, 1
  store i32 %1958, ptr %54, align 4, !tbaa !9
  br label %1908, !llvm.loop !39

1959:                                             ; preds = %1908
  %1960 = load ptr, ptr %18, align 8, !tbaa !5
  %1961 = getelementptr inbounds [1 x i8], ptr %64, i64 0, i64 0
  %1962 = load ptr, ptr %20, align 8, !tbaa !5
  %1963 = load ptr, ptr %21, align 8, !tbaa !5
  %1964 = load ptr, ptr %22, align 8, !tbaa !5
  %1965 = load ptr, ptr %24, align 8, !tbaa !5
  %1966 = load i32, ptr %36, align 4, !tbaa !9
  %1967 = sext i32 %1966 to i64
  %1968 = getelementptr inbounds %struct.doublecomplex, ptr %1965, i64 %1967
  %1969 = load ptr, ptr %25, align 8, !tbaa !5
  %1970 = load ptr, ptr %32, align 8, !tbaa !5
  %1971 = getelementptr inbounds %struct.doublecomplex, ptr %1970, i64 1
  call void @ztbsv_(ptr noundef %1960, ptr noundef %1961, ptr noundef %1962, ptr noundef %1963, ptr noundef %1964, ptr noundef %1968, ptr noundef %1969, ptr noundef %1971, ptr noundef @c__1)
  br label %1972

1972:                                             ; preds = %1959, %1904
  br label %1818

1973:                                             ; preds = %1818
  store double 0.000000e+00, ptr %67, align 8, !tbaa !11
  %1974 = load ptr, ptr %21, align 8, !tbaa !5
  %1975 = load i32, ptr %1974, align 4, !tbaa !9
  store i32 %1975, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %54, align 4, !tbaa !9
  br label %1976

1976:                                             ; preds = %2032, %1973
  %1977 = load i32, ptr %54, align 4, !tbaa !9
  %1978 = load i32, ptr %42, align 4, !tbaa !9
  %1979 = icmp sle i32 %1977, %1978
  br i1 %1979, label %1980, label %2035

1980:                                             ; preds = %1976
  %1981 = load i32, ptr %54, align 4, !tbaa !9
  %1982 = load i32, ptr %55, align 4, !tbaa !9
  %1983 = load i32, ptr %39, align 4, !tbaa !9
  %1984 = mul nsw i32 %1982, %1983
  %1985 = add nsw i32 %1981, %1984
  store i32 %1985, ptr %45, align 4, !tbaa !9
  %1986 = load double, ptr %67, align 8, !tbaa !11
  store double %1986, ptr %48, align 8, !tbaa !11
  %1987 = load ptr, ptr %28, align 8, !tbaa !5
  %1988 = load i32, ptr %45, align 4, !tbaa !9
  %1989 = sext i32 %1988 to i64
  %1990 = getelementptr inbounds %struct.doublecomplex, ptr %1987, i64 %1989
  %1991 = getelementptr inbounds %struct.doublecomplex, ptr %1990, i32 0, i32 0
  %1992 = load double, ptr %1991, align 8, !tbaa !16
  store double %1992, ptr %46, align 8, !tbaa !11
  %1993 = load double, ptr %46, align 8, !tbaa !11
  %1994 = fcmp oge double %1993, 0.000000e+00
  br i1 %1994, label %1995, label %1997

1995:                                             ; preds = %1980
  %1996 = load double, ptr %46, align 8, !tbaa !11
  br label %2000

1997:                                             ; preds = %1980
  %1998 = load double, ptr %46, align 8, !tbaa !11
  %1999 = fneg double %1998
  br label %2000

2000:                                             ; preds = %1997, %1995
  %2001 = phi double [ %1996, %1995 ], [ %1999, %1997 ]
  %2002 = load ptr, ptr %28, align 8, !tbaa !5
  %2003 = load i32, ptr %54, align 4, !tbaa !9
  %2004 = load i32, ptr %55, align 4, !tbaa !9
  %2005 = load i32, ptr %39, align 4, !tbaa !9
  %2006 = mul nsw i32 %2004, %2005
  %2007 = add nsw i32 %2003, %2006
  %2008 = sext i32 %2007 to i64
  %2009 = getelementptr inbounds %struct.doublecomplex, ptr %2002, i64 %2008
  %2010 = call { double, double } @Cd(ptr noundef %2009)
  %2011 = extractvalue { double, double } %2010, 0
  %2012 = extractvalue { double, double } %2010, 1
  store double %2012, ptr %47, align 8, !tbaa !11
  %2013 = load double, ptr %47, align 8, !tbaa !11
  %2014 = fcmp oge double %2013, 0.000000e+00
  br i1 %2014, label %2015, label %2017

2015:                                             ; preds = %2000
  %2016 = load double, ptr %47, align 8, !tbaa !11
  br label %2020

2017:                                             ; preds = %2000
  %2018 = load double, ptr %47, align 8, !tbaa !11
  %2019 = fneg double %2018
  br label %2020

2020:                                             ; preds = %2017, %2015
  %2021 = phi double [ %2016, %2015 ], [ %2019, %2017 ]
  %2022 = fadd double %2001, %2021
  store double %2022, ptr %49, align 8, !tbaa !11
  %2023 = load double, ptr %48, align 8, !tbaa !11
  %2024 = load double, ptr %49, align 8, !tbaa !11
  %2025 = fcmp oge double %2023, %2024
  br i1 %2025, label %2026, label %2028

2026:                                             ; preds = %2020
  %2027 = load double, ptr %48, align 8, !tbaa !11
  br label %2030

2028:                                             ; preds = %2020
  %2029 = load double, ptr %49, align 8, !tbaa !11
  br label %2030

2030:                                             ; preds = %2028, %2026
  %2031 = phi double [ %2027, %2026 ], [ %2029, %2028 ]
  store double %2031, ptr %67, align 8, !tbaa !11
  br label %2032

2032:                                             ; preds = %2030
  %2033 = load i32, ptr %54, align 4, !tbaa !9
  %2034 = add nsw i32 %2033, 1
  store i32 %2034, ptr %54, align 4, !tbaa !9
  br label %1976, !llvm.loop !40

2035:                                             ; preds = %1976
  %2036 = load double, ptr %67, align 8, !tbaa !11
  %2037 = fcmp une double %2036, 0.000000e+00
  br i1 %2037, label %2038, label %2046

2038:                                             ; preds = %2035
  %2039 = load double, ptr %67, align 8, !tbaa !11
  %2040 = load ptr, ptr %30, align 8, !tbaa !5
  %2041 = load i32, ptr %55, align 4, !tbaa !9
  %2042 = sext i32 %2041 to i64
  %2043 = getelementptr inbounds double, ptr %2040, i64 %2042
  %2044 = load double, ptr %2043, align 8, !tbaa !11
  %2045 = fdiv double %2044, %2039
  store double %2045, ptr %2043, align 8, !tbaa !11
  br label %2046

2046:                                             ; preds = %2038, %2035
  br label %2047

2047:                                             ; preds = %2046
  %2048 = load i32, ptr %55, align 4, !tbaa !9
  %2049 = add nsw i32 %2048, 1
  store i32 %2049, ptr %55, align 4, !tbaa !9
  br label %271, !llvm.loop !41

2050:                                             ; preds = %271
  store i32 1, ptr %69, align 4
  br label %2051

2051:                                             ; preds = %2050, %246, %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 12, 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 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, 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
  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 @ztbmv_(ptr noundef, 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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i32, align 4

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

42:                                               ; preds = %17
  %43 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %.not758 = icmp eq i32 %43, 0
  br i1 %.not758, label %.thread.sink.split, label %44

44:                                               ; preds = %42, %17
  %.not759 = icmp eq i32 %40, 0
  br i1 %.not759, label %45, label %49

45:                                               ; preds = %44
  %46 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #6
  %.not760 = icmp eq i32 %46, 0
  br i1 %.not760, label %47, label %49

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

49:                                               ; preds = %47, %45, %44
  %.not762 = icmp eq i32 %41, 0
  br i1 %.not762, label %50, label %52

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

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

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

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

61:                                               ; preds = %58
  %62 = load i32, ptr %7, align 4, !tbaa !5
  %.not764 = icmp sgt i32 %62, %56
  br i1 %.not764, label %63, label %.thread.sink.split

63:                                               ; preds = %61
  %64 = load i32, ptr %9, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %53, i32 1)
  %65 = icmp slt i32 %64, %spec.select
  br i1 %65, label %.thread.sink.split, label %66

66:                                               ; preds = %63
  %67 = load i32, ptr %11, align 4, !tbaa !5
  %68 = icmp slt i32 %67, %spec.select
  br i1 %68, label %.thread.sink.split, label %69

69:                                               ; preds = %66
  %.pr = load i32, ptr %16, align 4, !tbaa !5
  %.not765 = icmp eq i32 %.pr, 0
  br i1 %.not765, label %73, label %.thread

.thread.sink.split:                               ; preds = %66, %63, %61, %58, %55, %52, %50, %47, %42
  %.sink = phi i32 [ -1, %42 ], [ -2, %47 ], [ -3, %50 ], [ -4, %52 ], [ -5, %55 ], [ -6, %58 ], [ -8, %61 ], [ -10, %63 ], [ -12, %66 ]
  store i32 %.sink, ptr %16, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %69
  %70 = phi i32 [ %.pr, %69 ], [ %.sink, %.thread.sink.split ]
  %71 = sub nsw i32 0, %70
  store i32 %71, ptr %20, align 4, !tbaa !5
  %72 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %20, i32 noundef 6) #6
  br label %.loopexit

73:                                               ; preds = %69
  %74 = icmp eq i32 %53, 0
  %.not802937 = icmp eq i32 %59, 0
  br i1 %74, label %76, label %75

75:                                               ; preds = %73
  br i1 %.not802937, label %.loopexit, label %99

76:                                               ; preds = %73
  br i1 %.not802937, label %.loopexit, label %.lr.ph940.preheader

.lr.ph940.preheader:                              ; preds = %76
  %77 = add nuw i32 %59, 1
  %wide.trip.count1071 = zext i32 %77 to i64
  %78 = zext nneg i32 %59 to i64
  %min.iters.check1173 = icmp ult i32 %59, 4
  %79 = sub i64 %19, %18
  %diff.check = icmp ult i64 %79, 32
  %or.cond = or i1 %min.iters.check1173, %diff.check
  br i1 %or.cond, label %.lr.ph940.preheader1200, label %vector.ph1174

vector.ph1174:                                    ; preds = %.lr.ph940.preheader
  %n.vec1176 = and i64 %78, 2147483644
  %ind.end1177 = or disjoint i64 %n.vec1176, 1
  br label %vector.body1179

vector.body1179:                                  ; preds = %vector.body1179, %vector.ph1174
  %index1180 = phi i64 [ 0, %vector.ph1174 ], [ %index.next1182, %vector.body1179 ]
  %80 = getelementptr double, ptr %12, i64 %index1180
  %81 = getelementptr inbounds i8, ptr %80, i64 16
  store <2 x double> zeroinitializer, ptr %80, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %81, align 8, !tbaa !9
  %82 = getelementptr double, ptr %13, i64 %index1180
  %83 = getelementptr inbounds i8, ptr %82, i64 16
  store <2 x double> zeroinitializer, ptr %82, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %83, align 8, !tbaa !9
  %index.next1182 = add nuw i64 %index1180, 4
  %84 = icmp eq i64 %index.next1182, %n.vec1176
  br i1 %84, label %middle.block1171, label %vector.body1179, !llvm.loop !11

middle.block1171:                                 ; preds = %vector.body1179
  %cmp.n1183 = icmp eq i64 %n.vec1176, %78
  br i1 %cmp.n1183, label %.loopexit, label %.lr.ph940.preheader1200

.lr.ph940.preheader1200:                          ; preds = %middle.block1171, %.lr.ph940.preheader
  %indvars.iv1068.ph = phi i64 [ 1, %.lr.ph940.preheader ], [ %ind.end1177, %middle.block1171 ]
  %85 = sub nsw i64 %wide.trip.count1071, %indvars.iv1068.ph
  %86 = zext nneg i32 %59 to i64
  %87 = sub nsw i64 %86, %indvars.iv1068.ph
  %xtraiter1224 = and i64 %85, 3
  %lcmp.mod1225.not = icmp eq i64 %xtraiter1224, 0
  br i1 %lcmp.mod1225.not, label %.lr.ph940.prol.loopexit, label %.lr.ph940.prol

.lr.ph940.prol:                                   ; preds = %.lr.ph940.preheader1200, %.lr.ph940.prol
  %indvars.iv1068.prol = phi i64 [ %indvars.iv.next1069.prol, %.lr.ph940.prol ], [ %indvars.iv1068.ph, %.lr.ph940.preheader1200 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph940.prol ], [ 0, %.lr.ph940.preheader1200 ]
  %88 = getelementptr inbounds double, ptr %35, i64 %indvars.iv1068.prol
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  %89 = getelementptr inbounds double, ptr %36, i64 %indvars.iv1068.prol
  store double 0.000000e+00, ptr %89, align 8, !tbaa !9
  %indvars.iv.next1069.prol = add nuw nsw i64 %indvars.iv1068.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter1224
  br i1 %prol.iter.cmp.not, label %.lr.ph940.prol.loopexit, label %.lr.ph940.prol, !llvm.loop !15

.lr.ph940.prol.loopexit:                          ; preds = %.lr.ph940.prol, %.lr.ph940.preheader1200
  %indvars.iv1068.unr = phi i64 [ %indvars.iv1068.ph, %.lr.ph940.preheader1200 ], [ %indvars.iv.next1069.prol, %.lr.ph940.prol ]
  %90 = icmp ult i64 %87, 3
  br i1 %90, label %.loopexit, label %.lr.ph940

.lr.ph940:                                        ; preds = %.lr.ph940.prol.loopexit, %.lr.ph940
  %indvars.iv1068 = phi i64 [ %indvars.iv.next1069.3, %.lr.ph940 ], [ %indvars.iv1068.unr, %.lr.ph940.prol.loopexit ]
  %91 = getelementptr inbounds double, ptr %35, i64 %indvars.iv1068
  store double 0.000000e+00, ptr %91, align 8, !tbaa !9
  %92 = getelementptr inbounds double, ptr %36, i64 %indvars.iv1068
  store double 0.000000e+00, ptr %92, align 8, !tbaa !9
  %93 = getelementptr double, ptr %12, i64 %indvars.iv1068
  store double 0.000000e+00, ptr %93, align 8, !tbaa !9
  %94 = getelementptr double, ptr %13, i64 %indvars.iv1068
  store double 0.000000e+00, ptr %94, align 8, !tbaa !9
  %indvars.iv.next1069.1 = add nuw nsw i64 %indvars.iv1068, 2
  %95 = getelementptr inbounds double, ptr %35, i64 %indvars.iv.next1069.1
  store double 0.000000e+00, ptr %95, align 8, !tbaa !9
  %96 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next1069.1
  store double 0.000000e+00, ptr %96, align 8, !tbaa !9
  %indvars.iv.next1069.2 = add nuw nsw i64 %indvars.iv1068, 3
  %97 = getelementptr inbounds double, ptr %35, i64 %indvars.iv.next1069.2
  store double 0.000000e+00, ptr %97, align 8, !tbaa !9
  %98 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next1069.2
  store double 0.000000e+00, ptr %98, align 8, !tbaa !9
  %indvars.iv.next1069.3 = add nuw nsw i64 %indvars.iv1068, 4
  %exitcond1072.not.3 = icmp eq i64 %indvars.iv.next1069.3, %wide.trip.count1071
  br i1 %exitcond1072.not.3, label %.loopexit, label %.lr.ph940, !llvm.loop !17

99:                                               ; preds = %75
  %. = select i1 %.not759, i8 67, i8 78
  %.804 = select i1 %.not759, i8 78, i8 67
  store i8 %., ptr %24, align 1, !tbaa !18
  store i8 %.804, ptr %25, align 1, !tbaa !18
  %100 = add nuw nsw i32 %56, 2
  %101 = tail call double @dlamch_(ptr noundef nonnull @.str.6) #6
  %102 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #6
  %103 = uitofp nneg i32 %100 to double
  %104 = fmul double %102, %103
  %105 = fdiv double %104, %101
  %106 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %106, ptr %20, align 4, !tbaa !5
  %invariant.gep929 = getelementptr i8, ptr %34, i64 16
  %invariant.gep931 = getelementptr i8, ptr %31, i64 16
  %.not768933 = icmp slt i32 %106, 1
  br i1 %.not768933, label %.loopexit, label %.lr.ph936

.lr.ph936:                                        ; preds = %99
  %107 = fmul double %101, %103
  %108 = sext i32 %32 to i64
  %109 = sext i32 %29 to i64
  %.0736824941 = add i32 %26, -1
  %.1737833943 = add i32 %26, -1
  %.2738842944 = add i32 %26, -1
  %.3739851945 = add i32 %26, -1
  %.4740861947 = add i32 %26, -1
  %.5741872949 = add i32 %26, -1
  %.6883950 = add i32 %26, -1
  %.7894951 = add i32 %26, -1
  %110 = zext nneg i32 %106 to i64
  %scevgep = getelementptr i8, ptr %14, i64 -16
  %scevgep1141 = getelementptr i8, ptr %15, i64 -8
  %scevgep1145 = getelementptr i8, ptr %14, i64 -16
  %scevgep1147 = getelementptr i8, ptr %15, i64 -8
  br label %111

111:                                              ; preds = %.lr.ph936, %._crit_edge927.thread
  %indvars.iv1065 = phi i64 [ 1, %.lr.ph936 ], [ %indvars.iv.next1066, %._crit_edge927.thread ]
  %112 = mul nsw i64 %indvars.iv1065, %108
  %gep930 = getelementptr %struct.doublecomplex, ptr %invariant.gep929, i64 %112
  call void @zcopy_(ptr noundef nonnull %3, ptr noundef %gep930, ptr noundef nonnull @c__1, ptr noundef %14, ptr noundef nonnull @c__1) #6
  call void @ztbmv_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %14, ptr noundef nonnull @c__1) #6
  store <2 x double> <double -1.000000e+00, double 0.000000e+00>, ptr %21, align 16, !tbaa !9
  %113 = mul nsw i64 %indvars.iv1065, %109
  %gep932 = getelementptr %struct.doublecomplex, ptr %invariant.gep931, i64 %113
  call void @zaxpy_(ptr noundef nonnull %3, ptr noundef nonnull %21, ptr noundef %gep932, ptr noundef nonnull @c__1, ptr noundef %14, ptr noundef nonnull @c__1) #6
  %114 = load i32, ptr %3, align 4, !tbaa !5
  %.not770816 = icmp slt i32 %114, 1
  br i1 %.not770816, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %111
  %115 = add nuw i32 %114, 1
  %wide.trip.count = zext i32 %115 to i64
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %31, i64 %113
  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 ]
  %gep1097 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %indvars.iv
  %116 = load double, ptr %gep1097, align 8, !tbaa !19
  %117 = call { double, double } @Cd(ptr noundef nonnull %gep1097)
  %118 = extractvalue { double, double } %117, 1
  %119 = insertelement <2 x double> poison, double %116, i64 0
  %120 = insertelement <2 x double> %119, double %118, i64 1
  %121 = fcmp oge <2 x double> %120, zeroinitializer
  %122 = fneg <2 x double> %120
  %123 = select <2 x i1> %121, <2 x double> %120, <2 x double> %122
  %shift = shufflevector <2 x double> %123, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %124 = fadd <2 x double> %123, %shift
  %125 = extractelement <2 x double> %124, i64 0
  %126 = getelementptr inbounds double, ptr %38, i64 %indvars.iv
  store double %125, ptr %126, 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 !21

._crit_edge:                                      ; preds = %.lr.ph, %111
  %127 = load i32, ptr %3, align 4, !tbaa !5
  %.not772893 = icmp slt i32 %127, 1
  br i1 %.not759, label %287, label %128

128:                                              ; preds = %._crit_edge
  br i1 %.not, label %208, label %129

129:                                              ; preds = %128
  br i1 %.not762, label %167, label %130

130:                                              ; preds = %129
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph826.preheader

.lr.ph826.preheader:                              ; preds = %130
  %131 = add nuw i32 %127, 1
  %wide.trip.count975 = zext i32 %131 to i64
  %invariant.gep1098 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph826

.lr.ph826:                                        ; preds = %.lr.ph826.preheader, %._crit_edge822
  %indvars.iv972 = phi i64 [ 1, %.lr.ph826.preheader ], [ %indvars.iv.next973, %._crit_edge822 ]
  %gep1099 = getelementptr %struct.doublecomplex, ptr %invariant.gep1098, i64 %indvars.iv972
  %132 = load double, ptr %gep1099, align 8, !tbaa !19
  %133 = fcmp oge double %132, 0.000000e+00
  %134 = fneg double %132
  %135 = select i1 %133, double %132, double %134
  %136 = call { double, double } @Cd(ptr noundef nonnull %gep1099)
  %137 = extractvalue { double, double } %136, 1
  %138 = fcmp oge double %137, 0.000000e+00
  %139 = fneg double %137
  %140 = select i1 %138, double %137, double %139
  %141 = fadd double %135, %140
  %142 = load i32, ptr %4, align 4, !tbaa !5
  %.not801818 = icmp slt i32 %142, 0
  br i1 %.not801818, label %._crit_edge822, label %.lr.ph821

.lr.ph821:                                        ; preds = %.lr.ph826
  %143 = trunc nuw nsw i64 %indvars.iv972 to i32
  %reass.sub = mul i32 %.0736824941, %143
  %144 = add i32 %reass.sub, 1
  %145 = sub i32 %143, %142
  %smax = call i32 @llvm.smax.i32(i32 %145, i32 1)
  %146 = zext nneg i32 %smax to i64
  br label %147

147:                                              ; preds = %.lr.ph821, %147
  %indvars.iv969 = phi i64 [ %146, %.lr.ph821 ], [ %indvars.iv.next970, %147 ]
  %148 = load i32, ptr %4, align 4, !tbaa !5
  %149 = trunc nuw nsw i64 %indvars.iv969 to i32
  %150 = add i32 %144, %149
  %151 = add i32 %150, %148
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !19
  %155 = call { double, double } @Cd(ptr noundef nonnull %153)
  %156 = extractvalue { double, double } %155, 1
  %157 = insertelement <2 x double> poison, double %154, i64 0
  %158 = insertelement <2 x double> %157, double %156, i64 1
  %159 = fcmp oge <2 x double> %158, zeroinitializer
  %160 = fneg <2 x double> %158
  %161 = select <2 x i1> %159, <2 x double> %158, <2 x double> %160
  %shift1184 = shufflevector <2 x double> %161, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %162 = fadd <2 x double> %161, %shift1184
  %163 = extractelement <2 x double> %162, i64 0
  %164 = getelementptr inbounds double, ptr %38, i64 %indvars.iv969
  %165 = load double, ptr %164, align 8, !tbaa !9
  %166 = call double @llvm.fmuladd.f64(double %163, double %141, double %165)
  store double %166, ptr %164, align 8, !tbaa !9
  %indvars.iv.next970 = add nuw nsw i64 %indvars.iv969, 1
  %.not801.not = icmp ult i64 %indvars.iv969, %indvars.iv972
  br i1 %.not801.not, label %147, label %._crit_edge822, !llvm.loop !22

._crit_edge822:                                   ; preds = %147, %.lr.ph826
  %indvars.iv.next973 = add nuw nsw i64 %indvars.iv972, 1
  %exitcond976.not = icmp eq i64 %indvars.iv.next973, %wide.trip.count975
  br i1 %exitcond976.not, label %.loopexit807, label %.lr.ph826, !llvm.loop !23

167:                                              ; preds = %129
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph835.preheader

.lr.ph835.preheader:                              ; preds = %167
  %168 = add nuw i32 %127, 1
  %wide.trip.count984 = zext i32 %168 to i64
  %invariant.gep1100 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph835

.lr.ph835:                                        ; preds = %.lr.ph835.preheader, %._crit_edge831
  %indvars.iv981 = phi i64 [ 1, %.lr.ph835.preheader ], [ %indvars.iv.next982, %._crit_edge831 ]
  %gep1101 = getelementptr %struct.doublecomplex, ptr %invariant.gep1100, i64 %indvars.iv981
  %169 = load double, ptr %gep1101, align 8, !tbaa !19
  %170 = fcmp oge double %169, 0.000000e+00
  %171 = fneg double %169
  %172 = select i1 %170, double %169, double %171
  %173 = call { double, double } @Cd(ptr noundef nonnull %gep1101)
  %174 = extractvalue { double, double } %173, 1
  %175 = fcmp oge double %174, 0.000000e+00
  %176 = fneg double %174
  %177 = select i1 %175, double %174, double %176
  %178 = fadd double %172, %177
  %179 = load i32, ptr %4, align 4, !tbaa !5
  %180 = trunc nuw nsw i64 %indvars.iv981 to i32
  %181 = sub i32 %180, %179
  %182 = call i32 @llvm.smax.i32(i32 %181, i32 1)
  %183 = zext nneg i32 %182 to i64
  %.not792.not827 = icmp ugt i64 %indvars.iv981, %183
  br i1 %.not792.not827, label %.lr.ph830, label %._crit_edge831

.lr.ph830:                                        ; preds = %.lr.ph835
  %reass.sub942 = mul i32 %.1737833943, %180
  %184 = add i32 %reass.sub942, 1
  br label %185

185:                                              ; preds = %.lr.ph830, %185
  %indvars.iv978 = phi i64 [ %183, %.lr.ph830 ], [ %indvars.iv.next979, %185 ]
  %186 = load i32, ptr %4, align 4, !tbaa !5
  %187 = trunc nuw nsw i64 %indvars.iv978 to i32
  %188 = add i32 %184, %187
  %189 = add i32 %188, %186
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %190
  %192 = load double, ptr %191, align 8, !tbaa !19
  %193 = call { double, double } @Cd(ptr noundef nonnull %191)
  %194 = extractvalue { double, double } %193, 1
  %195 = insertelement <2 x double> poison, double %192, i64 0
  %196 = insertelement <2 x double> %195, double %194, i64 1
  %197 = fcmp oge <2 x double> %196, zeroinitializer
  %198 = fneg <2 x double> %196
  %199 = select <2 x i1> %197, <2 x double> %196, <2 x double> %198
  %shift1185 = shufflevector <2 x double> %199, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %200 = fadd <2 x double> %199, %shift1185
  %201 = extractelement <2 x double> %200, i64 0
  %202 = getelementptr inbounds double, ptr %38, i64 %indvars.iv978
  %203 = load double, ptr %202, align 8, !tbaa !9
  %204 = call double @llvm.fmuladd.f64(double %201, double %178, double %203)
  store double %204, ptr %202, align 8, !tbaa !9
  %indvars.iv.next979 = add nuw nsw i64 %indvars.iv978, 1
  %.not792.not = icmp ult i64 %indvars.iv.next979, %indvars.iv981
  br i1 %.not792.not, label %185, label %._crit_edge831, !llvm.loop !24

._crit_edge831:                                   ; preds = %185, %.lr.ph835
  %205 = getelementptr inbounds double, ptr %38, i64 %indvars.iv981
  %206 = load double, ptr %205, align 8, !tbaa !9
  %207 = fadd double %178, %206
  store double %207, ptr %205, align 8, !tbaa !9
  %indvars.iv.next982 = add nuw nsw i64 %indvars.iv981, 1
  %exitcond985.not = icmp eq i64 %indvars.iv.next982, %wide.trip.count984
  br i1 %exitcond985.not, label %.loopexit807, label %.lr.ph835, !llvm.loop !25

208:                                              ; preds = %128
  br i1 %.not762, label %246, label %209

209:                                              ; preds = %208
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph844.preheader

.lr.ph844.preheader:                              ; preds = %209
  %210 = add nuw i32 %127, 1
  %wide.trip.count992 = zext i32 %210 to i64
  %invariant.gep1102 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph844

.lr.ph844:                                        ; preds = %.lr.ph844.preheader, %._crit_edge840
  %indvars.iv986 = phi i64 [ 1, %.lr.ph844.preheader ], [ %indvars.iv.next987, %._crit_edge840 ]
  %gep1103 = getelementptr %struct.doublecomplex, ptr %invariant.gep1102, i64 %indvars.iv986
  %211 = load double, ptr %gep1103, align 8, !tbaa !19
  %212 = fcmp oge double %211, 0.000000e+00
  %213 = fneg double %211
  %214 = select i1 %212, double %211, double %213
  %215 = call { double, double } @Cd(ptr noundef nonnull %gep1103)
  %216 = extractvalue { double, double } %215, 1
  %217 = fcmp oge double %216, 0.000000e+00
  %218 = fneg double %216
  %219 = select i1 %217, double %216, double %218
  %220 = fadd double %214, %219
  %221 = load i32, ptr %3, align 4, !tbaa !5
  %222 = load i32, ptr %4, align 4, !tbaa !5
  %223 = trunc nuw nsw i64 %indvars.iv986 to i32
  %224 = add nsw i32 %222, %223
  %225 = call i32 @llvm.smin.i32(i32 %221, i32 %224)
  %226 = sext i32 %225 to i64
  %.not789836 = icmp sgt i64 %indvars.iv986, %226
  br i1 %.not789836, label %._crit_edge840, label %.lr.ph839

.lr.ph839:                                        ; preds = %.lr.ph844
  %227 = mul i32 %.2738842944, %223
  br label %228

228:                                              ; preds = %.lr.ph839, %228
  %indvars.iv988 = phi i64 [ %indvars.iv986, %.lr.ph839 ], [ %indvars.iv.next989, %228 ]
  %indvars.iv.next989 = add nuw nsw i64 %indvars.iv988, 1
  %229 = trunc nsw i64 %indvars.iv.next989 to i32
  %230 = add i32 %227, %229
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !19
  %234 = call { double, double } @Cd(ptr noundef nonnull %232)
  %235 = extractvalue { double, double } %234, 1
  %236 = insertelement <2 x double> poison, double %233, i64 0
  %237 = insertelement <2 x double> %236, double %235, i64 1
  %238 = fcmp oge <2 x double> %237, zeroinitializer
  %239 = fneg <2 x double> %237
  %240 = select <2 x i1> %238, <2 x double> %237, <2 x double> %239
  %shift1186 = shufflevector <2 x double> %240, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %241 = fadd <2 x double> %240, %shift1186
  %242 = extractelement <2 x double> %241, i64 0
  %243 = getelementptr inbounds double, ptr %38, i64 %indvars.iv988
  %244 = load double, ptr %243, align 8, !tbaa !9
  %245 = call double @llvm.fmuladd.f64(double %242, double %220, double %244)
  store double %245, ptr %243, align 8, !tbaa !9
  %.not789.not = icmp slt i64 %indvars.iv988, %226
  br i1 %.not789.not, label %228, label %._crit_edge840, !llvm.loop !26

._crit_edge840:                                   ; preds = %228, %.lr.ph844
  %indvars.iv.next987 = add nuw nsw i64 %indvars.iv986, 1
  %exitcond993.not = icmp eq i64 %indvars.iv.next987, %wide.trip.count992
  br i1 %exitcond993.not, label %.loopexit807, label %.lr.ph844, !llvm.loop !27

246:                                              ; preds = %208
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph853.preheader

.lr.ph853.preheader:                              ; preds = %246
  %247 = add nuw i32 %127, 1
  %wide.trip.count1002 = zext i32 %247 to i64
  %invariant.gep1104 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph853

.lr.ph853:                                        ; preds = %.lr.ph853.preheader, %._crit_edge849
  %indvars.iv999 = phi i64 [ 1, %.lr.ph853.preheader ], [ %indvars.iv.next1000, %._crit_edge849 ]
  %indvars.iv994 = phi i32 [ 2, %.lr.ph853.preheader ], [ %indvars.iv.next995, %._crit_edge849 ]
  %gep1105 = getelementptr %struct.doublecomplex, ptr %invariant.gep1104, i64 %indvars.iv999
  %248 = load double, ptr %gep1105, align 8, !tbaa !19
  %249 = fcmp oge double %248, 0.000000e+00
  %250 = fneg double %248
  %251 = select i1 %249, double %248, double %250
  %252 = call { double, double } @Cd(ptr noundef nonnull %gep1105)
  %253 = extractvalue { double, double } %252, 1
  %254 = fcmp oge double %253, 0.000000e+00
  %255 = fneg double %253
  %256 = select i1 %254, double %253, double %255
  %257 = fadd double %251, %256
  %258 = load i32, ptr %3, align 4, !tbaa !5
  %259 = load i32, ptr %4, align 4, !tbaa !5
  %260 = trunc nuw nsw i64 %indvars.iv999 to i32
  %261 = add nsw i32 %259, %260
  %262 = call i32 @llvm.smin.i32(i32 %258, i32 %261)
  %indvars.iv.next1000 = add nuw nsw i64 %indvars.iv999, 1
  %263 = sext i32 %262 to i64
  %.not786845.not = icmp slt i64 %indvars.iv999, %263
  br i1 %.not786845.not, label %.lr.ph848, label %._crit_edge849

.lr.ph848:                                        ; preds = %.lr.ph853
  %264 = sext i32 %indvars.iv994 to i64
  %265 = mul i32 %.3739851945, %260
  br label %266

266:                                              ; preds = %.lr.ph848, %266
  %indvars.iv996 = phi i64 [ %264, %.lr.ph848 ], [ %indvars.iv.next997, %266 ]
  %indvars.iv.next997 = add nuw nsw i64 %indvars.iv996, 1
  %267 = trunc nsw i64 %indvars.iv.next997 to i32
  %268 = add i32 %265, %267
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !19
  %272 = call { double, double } @Cd(ptr noundef nonnull %270)
  %273 = extractvalue { double, double } %272, 1
  %274 = insertelement <2 x double> poison, double %271, i64 0
  %275 = insertelement <2 x double> %274, double %273, i64 1
  %276 = fcmp oge <2 x double> %275, zeroinitializer
  %277 = fneg <2 x double> %275
  %278 = select <2 x i1> %276, <2 x double> %275, <2 x double> %277
  %shift1187 = shufflevector <2 x double> %278, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %279 = fadd <2 x double> %278, %shift1187
  %280 = extractelement <2 x double> %279, i64 0
  %281 = getelementptr inbounds double, ptr %38, i64 %indvars.iv996
  %282 = load double, ptr %281, align 8, !tbaa !9
  %283 = call double @llvm.fmuladd.f64(double %280, double %257, double %282)
  store double %283, ptr %281, align 8, !tbaa !9
  %.not786.not = icmp slt i64 %indvars.iv996, %263
  br i1 %.not786.not, label %266, label %._crit_edge849, !llvm.loop !28

._crit_edge849:                                   ; preds = %266, %.lr.ph853
  %284 = getelementptr inbounds double, ptr %38, i64 %indvars.iv999
  %285 = load double, ptr %284, align 8, !tbaa !9
  %286 = fadd double %257, %285
  store double %286, ptr %284, align 8, !tbaa !9
  %indvars.iv.next995 = add nuw i32 %indvars.iv994, 1
  %exitcond1003.not = icmp eq i64 %indvars.iv.next1000, %wide.trip.count1002
  br i1 %exitcond1003.not, label %.loopexit807, label %.lr.ph853, !llvm.loop !29

287:                                              ; preds = %._crit_edge
  br i1 %.not, label %377, label %288

288:                                              ; preds = %287
  br i1 %.not762, label %327, label %289

289:                                              ; preds = %288
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph863.preheader

.lr.ph863.preheader:                              ; preds = %289
  %290 = add nuw i32 %127, 1
  %wide.trip.count1011 = zext i32 %290 to i64
  %invariant.gep1106 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph863

.lr.ph863:                                        ; preds = %.lr.ph863.preheader, %._crit_edge859
  %indvars.iv1008 = phi i64 [ 1, %.lr.ph863.preheader ], [ %indvars.iv.next1009, %._crit_edge859 ]
  %291 = load i32, ptr %4, align 4, !tbaa !5
  %.not782854 = icmp slt i32 %291, 0
  br i1 %.not782854, label %._crit_edge859, label %.lr.ph858

.lr.ph858:                                        ; preds = %.lr.ph863
  %292 = trunc nuw nsw i64 %indvars.iv1008 to i32
  %reass.sub946 = mul i32 %.4740861947, %292
  %293 = add i32 %reass.sub946, 1
  %294 = sub i32 %292, %291
  %smax1004 = call i32 @llvm.smax.i32(i32 %294, i32 1)
  %295 = zext nneg i32 %smax1004 to i64
  br label %296

296:                                              ; preds = %.lr.ph858, %296
  %indvars.iv1005 = phi i64 [ %295, %.lr.ph858 ], [ %indvars.iv.next1006, %296 ]
  %.0735856 = phi double [ 0.000000e+00, %.lr.ph858 ], [ %323, %296 ]
  %297 = load i32, ptr %4, align 4, !tbaa !5
  %298 = trunc nuw nsw i64 %indvars.iv1005 to i32
  %299 = add i32 %293, %298
  %300 = add i32 %299, %297
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %301
  %303 = load double, ptr %302, align 8, !tbaa !19
  %304 = call { double, double } @Cd(ptr noundef nonnull %302)
  %305 = extractvalue { double, double } %304, 1
  %306 = insertelement <2 x double> poison, double %303, i64 0
  %307 = insertelement <2 x double> %306, double %305, i64 1
  %308 = fcmp oge <2 x double> %307, zeroinitializer
  %309 = fneg <2 x double> %307
  %310 = select <2 x i1> %308, <2 x double> %307, <2 x double> %309
  %shift1188 = shufflevector <2 x double> %310, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %311 = fadd <2 x double> %310, %shift1188
  %312 = extractelement <2 x double> %311, i64 0
  %gep1107 = getelementptr %struct.doublecomplex, ptr %invariant.gep1106, i64 %indvars.iv1005
  %313 = load double, ptr %gep1107, align 8, !tbaa !19
  %314 = call { double, double } @Cd(ptr noundef nonnull %gep1107)
  %315 = extractvalue { double, double } %314, 1
  %316 = insertelement <2 x double> poison, double %313, i64 0
  %317 = insertelement <2 x double> %316, double %315, i64 1
  %318 = fcmp oge <2 x double> %317, zeroinitializer
  %319 = fneg <2 x double> %317
  %320 = select <2 x i1> %318, <2 x double> %317, <2 x double> %319
  %shift1189 = shufflevector <2 x double> %320, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %321 = fadd <2 x double> %320, %shift1189
  %322 = extractelement <2 x double> %321, i64 0
  %323 = call double @llvm.fmuladd.f64(double %312, double %322, double %.0735856)
  %indvars.iv.next1006 = add nuw nsw i64 %indvars.iv1005, 1
  %.not782.not = icmp ult i64 %indvars.iv1005, %indvars.iv1008
  br i1 %.not782.not, label %296, label %._crit_edge859, !llvm.loop !30

._crit_edge859:                                   ; preds = %296, %.lr.ph863
  %.0735.lcssa = phi double [ 0.000000e+00, %.lr.ph863 ], [ %323, %296 ]
  %324 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1008
  %325 = load double, ptr %324, align 8, !tbaa !9
  %326 = fadd double %.0735.lcssa, %325
  store double %326, ptr %324, align 8, !tbaa !9
  %indvars.iv.next1009 = add nuw nsw i64 %indvars.iv1008, 1
  %exitcond1012.not = icmp eq i64 %indvars.iv.next1009, %wide.trip.count1011
  br i1 %exitcond1012.not, label %.loopexit807, label %.lr.ph863, !llvm.loop !31

327:                                              ; preds = %288
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph874.preheader

.lr.ph874.preheader:                              ; preds = %327
  %328 = add nuw i32 %127, 1
  %wide.trip.count1020 = zext i32 %328 to i64
  %invariant.gep1110 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  %invariant.gep1108 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph874

.lr.ph874:                                        ; preds = %.lr.ph874.preheader, %._crit_edge869
  %indvars.iv1017 = phi i64 [ 1, %.lr.ph874.preheader ], [ %indvars.iv.next1018, %._crit_edge869 ]
  %gep1111 = getelementptr %struct.doublecomplex, ptr %invariant.gep1110, i64 %indvars.iv1017
  %329 = load double, ptr %gep1111, align 8, !tbaa !19
  %330 = call { double, double } @Cd(ptr noundef nonnull %gep1111)
  %331 = extractvalue { double, double } %330, 1
  %332 = insertelement <2 x double> poison, double %329, i64 0
  %333 = insertelement <2 x double> %332, double %331, i64 1
  %334 = fcmp oge <2 x double> %333, zeroinitializer
  %335 = fneg <2 x double> %333
  %336 = select <2 x i1> %334, <2 x double> %333, <2 x double> %335
  %shift1190 = shufflevector <2 x double> %336, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %337 = fadd <2 x double> %336, %shift1190
  %338 = extractelement <2 x double> %337, i64 0
  %339 = load i32, ptr %4, align 4, !tbaa !5
  %340 = trunc nuw nsw i64 %indvars.iv1017 to i32
  %341 = sub i32 %340, %339
  %342 = call i32 @llvm.smax.i32(i32 %341, i32 1)
  %343 = zext nneg i32 %342 to i64
  %.not780.not864 = icmp ugt i64 %indvars.iv1017, %343
  br i1 %.not780.not864, label %.lr.ph868, label %._crit_edge869

.lr.ph868:                                        ; preds = %.lr.ph874
  %reass.sub948 = mul i32 %.5741872949, %340
  %344 = add i32 %reass.sub948, 1
  br label %345

345:                                              ; preds = %.lr.ph868, %345
  %indvars.iv1014 = phi i64 [ %343, %.lr.ph868 ], [ %indvars.iv.next1015, %345 ]
  %.1866 = phi double [ %338, %.lr.ph868 ], [ %372, %345 ]
  %346 = load i32, ptr %4, align 4, !tbaa !5
  %347 = trunc nuw nsw i64 %indvars.iv1014 to i32
  %348 = add i32 %344, %347
  %349 = add i32 %348, %346
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !19
  %353 = call { double, double } @Cd(ptr noundef nonnull %351)
  %354 = extractvalue { double, double } %353, 1
  %355 = insertelement <2 x double> poison, double %352, i64 0
  %356 = insertelement <2 x double> %355, double %354, i64 1
  %357 = fcmp oge <2 x double> %356, zeroinitializer
  %358 = fneg <2 x double> %356
  %359 = select <2 x i1> %357, <2 x double> %356, <2 x double> %358
  %shift1191 = shufflevector <2 x double> %359, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %360 = fadd <2 x double> %359, %shift1191
  %361 = extractelement <2 x double> %360, i64 0
  %gep1109 = getelementptr %struct.doublecomplex, ptr %invariant.gep1108, i64 %indvars.iv1014
  %362 = load double, ptr %gep1109, align 8, !tbaa !19
  %363 = call { double, double } @Cd(ptr noundef nonnull %gep1109)
  %364 = extractvalue { double, double } %363, 1
  %365 = insertelement <2 x double> poison, double %362, i64 0
  %366 = insertelement <2 x double> %365, double %364, i64 1
  %367 = fcmp oge <2 x double> %366, zeroinitializer
  %368 = fneg <2 x double> %366
  %369 = select <2 x i1> %367, <2 x double> %366, <2 x double> %368
  %shift1192 = shufflevector <2 x double> %369, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %370 = fadd <2 x double> %369, %shift1192
  %371 = extractelement <2 x double> %370, i64 0
  %372 = call double @llvm.fmuladd.f64(double %361, double %371, double %.1866)
  %indvars.iv.next1015 = add nuw nsw i64 %indvars.iv1014, 1
  %373 = icmp ult i64 %indvars.iv.next1015, %indvars.iv1017
  br i1 %373, label %345, label %._crit_edge869, !llvm.loop !32

._crit_edge869:                                   ; preds = %345, %.lr.ph874
  %.1.lcssa = phi double [ %338, %.lr.ph874 ], [ %372, %345 ]
  %374 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1017
  %375 = load double, ptr %374, align 8, !tbaa !9
  %376 = fadd double %.1.lcssa, %375
  store double %376, ptr %374, align 8, !tbaa !9
  %indvars.iv.next1018 = add nuw nsw i64 %indvars.iv1017, 1
  %exitcond1021.not = icmp eq i64 %indvars.iv.next1018, %wide.trip.count1020
  br i1 %exitcond1021.not, label %.loopexit807, label %.lr.ph874, !llvm.loop !33

377:                                              ; preds = %287
  br i1 %.not762, label %416, label %378

378:                                              ; preds = %377
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph885.preheader

.lr.ph885.preheader:                              ; preds = %378
  %379 = add nuw i32 %127, 1
  %wide.trip.count1028 = zext i32 %379 to i64
  %invariant.gep1112 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph885

.lr.ph885:                                        ; preds = %.lr.ph885.preheader, %._crit_edge880
  %indvars.iv1022 = phi i64 [ 1, %.lr.ph885.preheader ], [ %indvars.iv.next1023, %._crit_edge880 ]
  %380 = load i32, ptr %3, align 4, !tbaa !5
  %381 = load i32, ptr %4, align 4, !tbaa !5
  %382 = trunc nuw nsw i64 %indvars.iv1022 to i32
  %383 = add nsw i32 %381, %382
  %384 = call i32 @llvm.smin.i32(i32 %380, i32 %383)
  %385 = sext i32 %384 to i64
  %.not777875 = icmp sgt i64 %indvars.iv1022, %385
  br i1 %.not777875, label %._crit_edge880, label %.lr.ph879

.lr.ph879:                                        ; preds = %.lr.ph885
  %386 = mul i32 %.6883950, %382
  br label %387

387:                                              ; preds = %.lr.ph879, %387
  %indvars.iv1024 = phi i64 [ %indvars.iv1022, %.lr.ph879 ], [ %indvars.iv.next1025, %387 ]
  %.2877 = phi double [ 0.000000e+00, %.lr.ph879 ], [ %412, %387 ]
  %indvars.iv.next1025 = add nuw nsw i64 %indvars.iv1024, 1
  %388 = trunc nsw i64 %indvars.iv.next1025 to i32
  %389 = add i32 %386, %388
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !19
  %393 = call { double, double } @Cd(ptr noundef nonnull %391)
  %394 = extractvalue { double, double } %393, 1
  %395 = insertelement <2 x double> poison, double %392, i64 0
  %396 = insertelement <2 x double> %395, double %394, i64 1
  %397 = fcmp oge <2 x double> %396, zeroinitializer
  %398 = fneg <2 x double> %396
  %399 = select <2 x i1> %397, <2 x double> %396, <2 x double> %398
  %shift1193 = shufflevector <2 x double> %399, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %400 = fadd <2 x double> %399, %shift1193
  %401 = extractelement <2 x double> %400, i64 0
  %gep1113 = getelementptr %struct.doublecomplex, ptr %invariant.gep1112, i64 %indvars.iv1024
  %402 = load double, ptr %gep1113, align 8, !tbaa !19
  %403 = call { double, double } @Cd(ptr noundef nonnull %gep1113)
  %404 = extractvalue { double, double } %403, 1
  %405 = insertelement <2 x double> poison, double %402, i64 0
  %406 = insertelement <2 x double> %405, double %404, i64 1
  %407 = fcmp oge <2 x double> %406, zeroinitializer
  %408 = fneg <2 x double> %406
  %409 = select <2 x i1> %407, <2 x double> %406, <2 x double> %408
  %shift1194 = shufflevector <2 x double> %409, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %410 = fadd <2 x double> %409, %shift1194
  %411 = extractelement <2 x double> %410, i64 0
  %412 = call double @llvm.fmuladd.f64(double %401, double %411, double %.2877)
  %.not777.not = icmp slt i64 %indvars.iv1024, %385
  br i1 %.not777.not, label %387, label %._crit_edge880, !llvm.loop !34

._crit_edge880:                                   ; preds = %387, %.lr.ph885
  %.2.lcssa = phi double [ 0.000000e+00, %.lr.ph885 ], [ %412, %387 ]
  %413 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1022
  %414 = load double, ptr %413, align 8, !tbaa !9
  %415 = fadd double %.2.lcssa, %414
  store double %415, ptr %413, align 8, !tbaa !9
  %indvars.iv.next1023 = add nuw nsw i64 %indvars.iv1022, 1
  %exitcond1029.not = icmp eq i64 %indvars.iv.next1023, %wide.trip.count1028
  br i1 %exitcond1029.not, label %.loopexit807, label %.lr.ph885, !llvm.loop !35

416:                                              ; preds = %377
  br i1 %.not772893, label %._crit_edge902.thread, label %.lr.ph896.preheader

.lr.ph896.preheader:                              ; preds = %416
  %417 = add nuw i32 %127, 1
  %wide.trip.count1038 = zext i32 %417 to i64
  %invariant.gep1116 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  %invariant.gep1114 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph896

.lr.ph896:                                        ; preds = %.lr.ph896.preheader, %._crit_edge891
  %indvars.iv1035 = phi i64 [ 1, %.lr.ph896.preheader ], [ %indvars.iv.next1036, %._crit_edge891 ]
  %indvars.iv1030 = phi i32 [ 2, %.lr.ph896.preheader ], [ %indvars.iv.next1031, %._crit_edge891 ]
  %gep1117 = getelementptr %struct.doublecomplex, ptr %invariant.gep1116, i64 %indvars.iv1035
  %418 = load double, ptr %gep1117, align 8, !tbaa !19
  %419 = call { double, double } @Cd(ptr noundef nonnull %gep1117)
  %420 = extractvalue { double, double } %419, 1
  %421 = insertelement <2 x double> poison, double %418, i64 0
  %422 = insertelement <2 x double> %421, double %420, i64 1
  %423 = fcmp oge <2 x double> %422, zeroinitializer
  %424 = fneg <2 x double> %422
  %425 = select <2 x i1> %423, <2 x double> %422, <2 x double> %424
  %shift1195 = shufflevector <2 x double> %425, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %426 = fadd <2 x double> %425, %shift1195
  %427 = extractelement <2 x double> %426, i64 0
  %428 = load i32, ptr %3, align 4, !tbaa !5
  %429 = load i32, ptr %4, align 4, !tbaa !5
  %430 = trunc nuw nsw i64 %indvars.iv1035 to i32
  %431 = add nsw i32 %429, %430
  %432 = call i32 @llvm.smin.i32(i32 %428, i32 %431)
  %indvars.iv.next1036 = add nuw nsw i64 %indvars.iv1035, 1
  %433 = sext i32 %432 to i64
  %.not774886.not = icmp slt i64 %indvars.iv1035, %433
  br i1 %.not774886.not, label %.lr.ph890, label %._crit_edge891

.lr.ph890:                                        ; preds = %.lr.ph896
  %434 = sext i32 %indvars.iv1030 to i64
  %435 = mul i32 %.7894951, %430
  br label %436

436:                                              ; preds = %.lr.ph890, %436
  %indvars.iv1032 = phi i64 [ %434, %.lr.ph890 ], [ %indvars.iv.next1033, %436 ]
  %.3888 = phi double [ %427, %.lr.ph890 ], [ %461, %436 ]
  %indvars.iv.next1033 = add nuw nsw i64 %indvars.iv1032, 1
  %437 = trunc nsw i64 %indvars.iv.next1033 to i32
  %438 = add i32 %435, %437
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %28, i64 %439
  %441 = load double, ptr %440, align 8, !tbaa !19
  %442 = call { double, double } @Cd(ptr noundef nonnull %440)
  %443 = extractvalue { double, double } %442, 1
  %444 = insertelement <2 x double> poison, double %441, i64 0
  %445 = insertelement <2 x double> %444, double %443, i64 1
  %446 = fcmp oge <2 x double> %445, zeroinitializer
  %447 = fneg <2 x double> %445
  %448 = select <2 x i1> %446, <2 x double> %445, <2 x double> %447
  %shift1196 = shufflevector <2 x double> %448, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %449 = fadd <2 x double> %448, %shift1196
  %450 = extractelement <2 x double> %449, i64 0
  %gep1115 = getelementptr %struct.doublecomplex, ptr %invariant.gep1114, i64 %indvars.iv1032
  %451 = load double, ptr %gep1115, align 8, !tbaa !19
  %452 = call { double, double } @Cd(ptr noundef nonnull %gep1115)
  %453 = extractvalue { double, double } %452, 1
  %454 = insertelement <2 x double> poison, double %451, i64 0
  %455 = insertelement <2 x double> %454, double %453, i64 1
  %456 = fcmp oge <2 x double> %455, zeroinitializer
  %457 = fneg <2 x double> %455
  %458 = select <2 x i1> %456, <2 x double> %455, <2 x double> %457
  %shift1197 = shufflevector <2 x double> %458, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %459 = fadd <2 x double> %458, %shift1197
  %460 = extractelement <2 x double> %459, i64 0
  %461 = call double @llvm.fmuladd.f64(double %450, double %460, double %.3888)
  %.not774.not = icmp slt i64 %indvars.iv1032, %433
  br i1 %.not774.not, label %436, label %._crit_edge891, !llvm.loop !36

._crit_edge891:                                   ; preds = %436, %.lr.ph896
  %.3.lcssa = phi double [ %427, %.lr.ph896 ], [ %461, %436 ]
  %462 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1035
  %463 = load double, ptr %462, align 8, !tbaa !9
  %464 = fadd double %.3.lcssa, %463
  store double %464, ptr %462, align 8, !tbaa !9
  %indvars.iv.next1031 = add nuw i32 %indvars.iv1030, 1
  %exitcond1039.not = icmp eq i64 %indvars.iv.next1036, %wide.trip.count1038
  br i1 %exitcond1039.not, label %.loopexit807, label %.lr.ph896, !llvm.loop !37

.loopexit807:                                     ; preds = %._crit_edge822, %._crit_edge831, %._crit_edge840, %._crit_edge849, %._crit_edge859, %._crit_edge869, %._crit_edge880, %._crit_edge891
  %.pr1075 = load i32, ptr %3, align 4, !tbaa !5
  %.not794897 = icmp slt i32 %.pr1075, 1
  br i1 %.not794897, label %._crit_edge902.thread, label %.lr.ph901.preheader

.lr.ph901.preheader:                              ; preds = %.loopexit807
  %465 = add nuw i32 %.pr1075, 1
  %wide.trip.count1043 = zext i32 %465 to i64
  br label %.lr.ph901

.lr.ph901:                                        ; preds = %.lr.ph901.preheader, %488
  %indvars.iv1040 = phi i64 [ 1, %.lr.ph901.preheader ], [ %indvars.iv.next1041, %488 ]
  %.4899 = phi double [ 0.000000e+00, %.lr.ph901.preheader ], [ %490, %488 ]
  %466 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1040
  %467 = load double, ptr %466, align 8, !tbaa !9
  %468 = fcmp ogt double %467, %105
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %indvars.iv1040
  %470 = load double, ptr %469, align 8, !tbaa !19
  %471 = fcmp oge double %470, 0.000000e+00
  %472 = fneg double %470
  %473 = select i1 %471, double %470, double %472
  %474 = call { double, double } @Cd(ptr noundef nonnull %469)
  %475 = extractvalue { double, double } %474, 1
  %476 = fcmp oge double %475, 0.000000e+00
  %477 = fneg double %475
  %478 = select i1 %476, double %475, double %477
  %479 = fadd double %473, %478
  br i1 %468, label %480, label %483

480:                                              ; preds = %.lr.ph901
  %481 = load double, ptr %466, align 8, !tbaa !9
  %482 = fdiv double %479, %481
  br label %488

483:                                              ; preds = %.lr.ph901
  %484 = fadd double %104, %479
  %485 = load double, ptr %466, align 8, !tbaa !9
  %486 = fadd double %104, %485
  %487 = fdiv double %484, %486
  br label %488

488:                                              ; preds = %480, %483
  %.sink1122 = phi double [ %482, %480 ], [ %487, %483 ]
  %489 = fcmp oge double %.4899, %.sink1122
  %490 = select i1 %489, double %.4899, double %.sink1122
  %indvars.iv.next1041 = add nuw nsw i64 %indvars.iv1040, 1
  %exitcond1044.not = icmp eq i64 %indvars.iv.next1041, %wide.trip.count1043
  br i1 %exitcond1044.not, label %._crit_edge902, label %.lr.ph901, !llvm.loop !38

._crit_edge902.thread:                            ; preds = %.loopexit807, %130, %167, %209, %246, %289, %327, %378, %416
  %491 = getelementptr inbounds double, ptr %36, i64 %indvars.iv1065
  store double 0.000000e+00, ptr %491, align 8, !tbaa !9
  br label %._crit_edge908

._crit_edge902:                                   ; preds = %488
  %.pre = load i32, ptr %3, align 4, !tbaa !5
  %492 = getelementptr inbounds double, ptr %36, i64 %indvars.iv1065
  store double %490, ptr %492, align 8, !tbaa !9
  %.not795904 = icmp slt i32 %.pre, 1
  br i1 %.not795904, label %._crit_edge908, label %.lr.ph907.preheader

.lr.ph907.preheader:                              ; preds = %._crit_edge902
  %493 = add nuw i32 %.pre, 1
  %wide.trip.count1048 = zext i32 %493 to i64
  br label %.lr.ph907

.lr.ph907:                                        ; preds = %.lr.ph907.preheader, %.lr.ph907
  %indvars.iv1045 = phi i64 [ 1, %.lr.ph907.preheader ], [ %indvars.iv.next1046, %.lr.ph907 ]
  %494 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1045
  %495 = load double, ptr %494, align 8, !tbaa !9
  %496 = fcmp ogt double %495, %105
  %497 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %indvars.iv1045
  %498 = load double, ptr %497, align 8, !tbaa !19
  %499 = call { double, double } @Cd(ptr noundef nonnull %497)
  %500 = extractvalue { double, double } %499, 1
  %501 = insertelement <2 x double> poison, double %498, i64 0
  %502 = insertelement <2 x double> %501, double %500, i64 1
  %503 = fcmp oge <2 x double> %502, zeroinitializer
  %504 = fneg <2 x double> %502
  %505 = select <2 x i1> %503, <2 x double> %502, <2 x double> %504
  %shift1198 = shufflevector <2 x double> %505, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %506 = fadd <2 x double> %505, %shift1198
  %507 = extractelement <2 x double> %506, i64 0
  %508 = load double, ptr %494, align 8, !tbaa !9
  %509 = call double @llvm.fmuladd.f64(double %107, double %508, double %507)
  %510 = fadd double %104, %509
  %storemerge800 = select i1 %496, double %509, double %510
  store double %storemerge800, ptr %494, align 8, !tbaa !9
  %indvars.iv.next1046 = add nuw nsw i64 %indvars.iv1045, 1
  %exitcond1049.not = icmp eq i64 %indvars.iv.next1046, %wide.trip.count1048
  br i1 %exitcond1049.not, label %._crit_edge908, label %.lr.ph907, !llvm.loop !39

._crit_edge908:                                   ; preds = %.lr.ph907, %._crit_edge902.thread, %._crit_edge902
  store i32 0, ptr %22, align 4, !tbaa !5
  %511 = getelementptr inbounds double, ptr %35, i64 %indvars.iv1065
  br label %.loopexit806

.loopexit806:                                     ; preds = %.loopexit806.backedge, %._crit_edge908
  %512 = load i32, ptr %3, align 4, !tbaa !5
  %513 = sext i32 %512 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %14, i64 %513
  call void @zlacn2_(ptr noundef nonnull %3, ptr noundef %gep, ptr noundef %14, ptr noundef nonnull %511, ptr noundef nonnull %22, ptr noundef nonnull %23) #6
  %514 = load i32, ptr %22, align 4, !tbaa !5
  switch i32 %514, label %551 [
    i32 0, label %590
    i32 1, label %515
  ]

515:                                              ; preds = %.loopexit806
  call void @ztbsv_(ptr noundef %0, ptr noundef nonnull %25, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %14, ptr noundef nonnull @c__1) #6
  %516 = load i32, ptr %3, align 4, !tbaa !5
  %.not799909 = icmp slt i32 %516, 1
  br i1 %.not799909, label %.loopexit806.backedge, label %.lr.ph912.preheader

.loopexit806.backedge:                            ; preds = %515, %..loopexit806_crit_edge, %588
  br label %.loopexit806

.lr.ph912.preheader:                              ; preds = %515
  %517 = add nuw i32 %516, 1
  %wide.trip.count1053 = zext i32 %517 to i64
  %518 = zext nneg i32 %516 to i64
  %min.iters.check1154 = icmp eq i32 %516, 1
  br i1 %min.iters.check1154, label %.lr.ph912.preheader1202, label %vector.memcheck1144

vector.memcheck1144:                              ; preds = %.lr.ph912.preheader
  %519 = shl nuw nsw i64 %wide.trip.count1053, 4
  %scevgep1146 = getelementptr i8, ptr %scevgep1145, i64 %519
  %520 = shl nuw nsw i64 %wide.trip.count1053, 3
  %scevgep1148 = getelementptr i8, ptr %scevgep1147, i64 %520
  %bound01149 = icmp ugt ptr %scevgep1148, %14
  %bound11150 = icmp ugt ptr %scevgep1146, %15
  %found.conflict1151 = and i1 %bound01149, %bound11150
  br i1 %found.conflict1151, label %.lr.ph912.preheader1202, label %vector.ph1155

vector.ph1155:                                    ; preds = %vector.memcheck1144
  %n.vec1157 = and i64 %518, 2147483646
  %ind.end1158 = or i64 %518, 1
  br label %vector.body1160

vector.body1160:                                  ; preds = %vector.body1160, %vector.ph1155
  %index1161 = phi i64 [ 0, %vector.ph1155 ], [ %index.next1168, %vector.body1160 ]
  %521 = getelementptr double, ptr %15, i64 %index1161
  %wide.load1163 = load <2 x double>, ptr %521, align 8, !tbaa !9, !alias.scope !40
  %522 = getelementptr %struct.doublecomplex, ptr %14, i64 %index1161
  %wide.vec1164 = load <4 x double>, ptr %522, align 8, !tbaa !9
  %strided.vec1165 = shufflevector <4 x double> %wide.vec1164, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1166 = shufflevector <4 x double> %wide.vec1164, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %523 = fmul <2 x double> %wide.load1163, %strided.vec1165
  %524 = fmul <2 x double> %wide.load1163, %strided.vec1166
  %interleaved.vec1167 = shufflevector <2 x double> %523, <2 x double> %524, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec1167, ptr %522, align 8, !tbaa !9
  %index.next1168 = add nuw i64 %index1161, 2
  %525 = icmp eq i64 %index.next1168, %n.vec1157
  br i1 %525, label %middle.block1152, label %vector.body1160, !llvm.loop !43

middle.block1152:                                 ; preds = %vector.body1160
  %cmp.n1169 = icmp eq i64 %n.vec1157, %518
  %526 = shufflevector <2 x double> %523, <2 x double> %524, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n1169, label %..loopexit806_crit_edge, label %.lr.ph912.preheader1202

.lr.ph912.preheader1202:                          ; preds = %middle.block1152, %vector.memcheck1144, %.lr.ph912.preheader
  %indvars.iv1050.ph = phi i64 [ 1, %vector.memcheck1144 ], [ 1, %.lr.ph912.preheader ], [ %ind.end1158, %middle.block1152 ]
  %527 = zext nneg i32 %516 to i64
  %528 = and i32 %516, 1
  %lcmp.mod.not = icmp eq i32 %528, 0
  br i1 %lcmp.mod.not, label %.lr.ph912.prol.loopexit, label %.lr.ph912.prol

.lr.ph912.prol:                                   ; preds = %.lr.ph912.preheader1202
  %529 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1050.ph
  %530 = load double, ptr %529, align 8, !tbaa !9
  %531 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %indvars.iv1050.ph
  %532 = load <2 x double>, ptr %531, align 8, !tbaa !9
  %533 = insertelement <2 x double> poison, double %530, i64 0
  %534 = shufflevector <2 x double> %533, <2 x double> poison, <2 x i32> zeroinitializer
  %535 = fmul <2 x double> %534, %532
  store <2 x double> %535, ptr %531, align 8, !tbaa !9
  %indvars.iv.next1051.prol = add nuw nsw i64 %indvars.iv1050.ph, 1
  br label %.lr.ph912.prol.loopexit

.lr.ph912.prol.loopexit:                          ; preds = %.lr.ph912.prol, %.lr.ph912.preheader1202
  %.lcssa1217.unr = phi <2 x double> [ poison, %.lr.ph912.preheader1202 ], [ %535, %.lr.ph912.prol ]
  %indvars.iv1050.unr = phi i64 [ %indvars.iv1050.ph, %.lr.ph912.preheader1202 ], [ %indvars.iv.next1051.prol, %.lr.ph912.prol ]
  %536 = icmp eq i64 %indvars.iv1050.ph, %527
  br i1 %536, label %..loopexit806_crit_edge, label %.lr.ph912

.lr.ph912:                                        ; preds = %.lr.ph912.prol.loopexit, %.lr.ph912
  %indvars.iv1050 = phi i64 [ %indvars.iv.next1051.1, %.lr.ph912 ], [ %indvars.iv1050.unr, %.lr.ph912.prol.loopexit ]
  %537 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1050
  %538 = load double, ptr %537, align 8, !tbaa !9
  %539 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %indvars.iv1050
  %540 = load <2 x double>, ptr %539, align 8, !tbaa !9
  %541 = insertelement <2 x double> poison, double %538, i64 0
  %542 = shufflevector <2 x double> %541, <2 x double> poison, <2 x i32> zeroinitializer
  %543 = fmul <2 x double> %542, %540
  store <2 x double> %543, ptr %539, align 8, !tbaa !9
  %544 = getelementptr double, ptr %15, i64 %indvars.iv1050
  %545 = load double, ptr %544, align 8, !tbaa !9
  %546 = getelementptr %struct.doublecomplex, ptr %14, i64 %indvars.iv1050
  %547 = load <2 x double>, ptr %546, align 8, !tbaa !9
  %548 = insertelement <2 x double> poison, double %545, i64 0
  %549 = shufflevector <2 x double> %548, <2 x double> poison, <2 x i32> zeroinitializer
  %550 = fmul <2 x double> %549, %547
  store <2 x double> %550, ptr %546, align 8, !tbaa !9
  %indvars.iv.next1051.1 = add nuw nsw i64 %indvars.iv1050, 2
  %exitcond1054.not.1 = icmp eq i64 %indvars.iv.next1051.1, %wide.trip.count1053
  br i1 %exitcond1054.not.1, label %..loopexit806_crit_edge, label %.lr.ph912, !llvm.loop !44

551:                                              ; preds = %.loopexit806
  %552 = load i32, ptr %3, align 4, !tbaa !5
  %.not798915 = icmp slt i32 %552, 1
  br i1 %.not798915, label %588, label %.lr.ph918.preheader

.lr.ph918.preheader:                              ; preds = %551
  %553 = add nuw i32 %552, 1
  %wide.trip.count1058 = zext i32 %553 to i64
  %554 = zext nneg i32 %552 to i64
  %min.iters.check = icmp eq i32 %552, 1
  br i1 %min.iters.check, label %.lr.ph918.preheader1201, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph918.preheader
  %555 = shl nuw nsw i64 %wide.trip.count1058, 4
  %scevgep1140 = getelementptr i8, ptr %scevgep, i64 %555
  %556 = shl nuw nsw i64 %wide.trip.count1058, 3
  %scevgep1142 = getelementptr i8, ptr %scevgep1141, i64 %556
  %bound0 = icmp ugt ptr %scevgep1142, %14
  %bound1 = icmp ugt ptr %scevgep1140, %15
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph918.preheader1201, label %vector.ph

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

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

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %554
  %562 = shufflevector <2 x double> %559, <2 x double> %560, <2 x i32> <i32 1, i32 3>
  br i1 %cmp.n, label %._crit_edge919, label %.lr.ph918.preheader1201

.lr.ph918.preheader1201:                          ; preds = %middle.block, %vector.memcheck, %.lr.ph918.preheader
  %indvars.iv1055.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph918.preheader ], [ %ind.end, %middle.block ]
  %563 = zext nneg i32 %552 to i64
  %564 = and i32 %552, 1
  %lcmp.mod1223.not = icmp eq i32 %564, 0
  br i1 %lcmp.mod1223.not, label %.lr.ph918.prol.loopexit, label %.lr.ph918.prol

.lr.ph918.prol:                                   ; preds = %.lr.ph918.preheader1201
  %565 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1055.ph
  %566 = load double, ptr %565, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %indvars.iv1055.ph
  %568 = load <2 x double>, ptr %567, align 8, !tbaa !9
  %569 = insertelement <2 x double> poison, double %566, i64 0
  %570 = shufflevector <2 x double> %569, <2 x double> poison, <2 x i32> zeroinitializer
  %571 = fmul <2 x double> %570, %568
  store <2 x double> %571, ptr %567, align 8, !tbaa !9
  %indvars.iv.next1056.prol = add nuw nsw i64 %indvars.iv1055.ph, 1
  br label %.lr.ph918.prol.loopexit

.lr.ph918.prol.loopexit:                          ; preds = %.lr.ph918.prol, %.lr.ph918.preheader1201
  %.lcssa1220.unr = phi <2 x double> [ poison, %.lr.ph918.preheader1201 ], [ %571, %.lr.ph918.prol ]
  %indvars.iv1055.unr = phi i64 [ %indvars.iv1055.ph, %.lr.ph918.preheader1201 ], [ %indvars.iv.next1056.prol, %.lr.ph918.prol ]
  %572 = icmp eq i64 %indvars.iv1055.ph, %563
  br i1 %572, label %._crit_edge919, label %.lr.ph918

.lr.ph918:                                        ; preds = %.lr.ph918.prol.loopexit, %.lr.ph918
  %indvars.iv1055 = phi i64 [ %indvars.iv.next1056.1, %.lr.ph918 ], [ %indvars.iv1055.unr, %.lr.ph918.prol.loopexit ]
  %573 = getelementptr inbounds double, ptr %38, i64 %indvars.iv1055
  %574 = load double, ptr %573, align 8, !tbaa !9
  %575 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %indvars.iv1055
  %576 = load <2 x double>, ptr %575, align 8, !tbaa !9
  %577 = insertelement <2 x double> poison, double %574, i64 0
  %578 = shufflevector <2 x double> %577, <2 x double> poison, <2 x i32> zeroinitializer
  %579 = fmul <2 x double> %578, %576
  store <2 x double> %579, ptr %575, align 8, !tbaa !9
  %580 = getelementptr double, ptr %15, i64 %indvars.iv1055
  %581 = load double, ptr %580, align 8, !tbaa !9
  %582 = getelementptr %struct.doublecomplex, ptr %14, i64 %indvars.iv1055
  %583 = load <2 x double>, ptr %582, align 8, !tbaa !9
  %584 = insertelement <2 x double> poison, double %581, i64 0
  %585 = shufflevector <2 x double> %584, <2 x double> poison, <2 x i32> zeroinitializer
  %586 = fmul <2 x double> %585, %583
  store <2 x double> %586, ptr %582, align 8, !tbaa !9
  %indvars.iv.next1056.1 = add nuw nsw i64 %indvars.iv1055, 2
  %exitcond1059.not.1 = icmp eq i64 %indvars.iv.next1056.1, %wide.trip.count1058
  br i1 %exitcond1059.not.1, label %._crit_edge919, label %.lr.ph918, !llvm.loop !49

._crit_edge919:                                   ; preds = %.lr.ph918.prol.loopexit, %.lr.ph918, %middle.block
  %587 = phi <2 x double> [ %562, %middle.block ], [ %.lcssa1220.unr, %.lr.ph918.prol.loopexit ], [ %586, %.lr.ph918 ]
  store <2 x double> %587, ptr %21, align 16, !tbaa !9
  br label %588

588:                                              ; preds = %._crit_edge919, %551
  call void @ztbsv_(ptr noundef %0, ptr noundef nonnull %24, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %14, ptr noundef nonnull @c__1) #6
  br label %.loopexit806.backedge

..loopexit806_crit_edge:                          ; preds = %.lr.ph912.prol.loopexit, %.lr.ph912, %middle.block1152
  %589 = phi <2 x double> [ %526, %middle.block1152 ], [ %.lcssa1217.unr, %.lr.ph912.prol.loopexit ], [ %550, %.lr.ph912 ]
  store <2 x double> %589, ptr %21, align 16, !tbaa !9
  br label %.loopexit806.backedge

590:                                              ; preds = %.loopexit806
  %591 = load i32, ptr %3, align 4, !tbaa !5
  %.not797922 = icmp slt i32 %591, 1
  br i1 %.not797922, label %._crit_edge927.thread, label %.lr.ph926.preheader

.lr.ph926.preheader:                              ; preds = %590
  %592 = add nuw i32 %591, 1
  %wide.trip.count1063 = zext i32 %592 to i64
  %invariant.gep1118 = getelementptr %struct.doublecomplex, ptr %34, i64 %112
  br label %.lr.ph926

.lr.ph926:                                        ; preds = %.lr.ph926.preheader, %.lr.ph926
  %indvars.iv1060 = phi i64 [ 1, %.lr.ph926.preheader ], [ %indvars.iv.next1061, %.lr.ph926 ]
  %.0924 = phi double [ 0.000000e+00, %.lr.ph926.preheader ], [ %604, %.lr.ph926 ]
  %gep1119 = getelementptr %struct.doublecomplex, ptr %invariant.gep1118, i64 %indvars.iv1060
  %593 = load double, ptr %gep1119, align 8, !tbaa !19
  %594 = call { double, double } @Cd(ptr noundef nonnull %gep1119)
  %595 = extractvalue { double, double } %594, 1
  %596 = insertelement <2 x double> poison, double %593, i64 0
  %597 = insertelement <2 x double> %596, double %595, i64 1
  %598 = fcmp oge <2 x double> %597, zeroinitializer
  %599 = fneg <2 x double> %597
  %600 = select <2 x i1> %598, <2 x double> %597, <2 x double> %599
  %shift1199 = shufflevector <2 x double> %600, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %601 = fadd <2 x double> %600, %shift1199
  %602 = extractelement <2 x double> %601, i64 0
  %603 = fcmp oge double %.0924, %602
  %604 = select i1 %603, double %.0924, double %602
  %indvars.iv.next1061 = add nuw nsw i64 %indvars.iv1060, 1
  %exitcond1064.not = icmp eq i64 %indvars.iv.next1061, %wide.trip.count1063
  br i1 %exitcond1064.not, label %._crit_edge927, label %.lr.ph926, !llvm.loop !50

._crit_edge927:                                   ; preds = %.lr.ph926
  %605 = fcmp une double %604, 0.000000e+00
  br i1 %605, label %606, label %._crit_edge927.thread

606:                                              ; preds = %._crit_edge927
  %607 = load double, ptr %511, align 8, !tbaa !9
  %608 = fdiv double %607, %604
  store double %608, ptr %511, align 8, !tbaa !9
  br label %._crit_edge927.thread

._crit_edge927.thread:                            ; preds = %590, %._crit_edge927, %606
  %indvars.iv.next1066 = add nuw nsw i64 %indvars.iv1065, 1
  %.not768.not = icmp ult i64 %indvars.iv1065, %110
  br i1 %.not768.not, label %111, label %.loopexit, !llvm.loop !51

.loopexit:                                        ; preds = %._crit_edge927.thread, %.lr.ph940.prol.loopexit, %.lr.ph940, %middle.block1171, %75, %99, %76, %.thread
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #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 @ztbmv_(ptr noundef, 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

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

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

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

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

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

; 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 = !{!7, !7, i64 0}
!19 = !{!20, !10, i64 0}
!20 = !{!"", !10, i64 0, !10, i64 8}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}
!38 = distinct !{!38, !12}
!39 = distinct !{!39, !12}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = distinct !{!43, !12, !13, !14}
!44 = distinct !{!44, !12, !13}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = distinct !{!48, !12, !13, !14}
!49 = distinct !{!49, !12, !13}
!50 = distinct !{!50, !12}
!51 = distinct !{!51, !12}


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