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

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

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

85:                                               ; preds = %8
  %86 = load ptr, ptr %9, align 8, !tbaa !5
  %87 = call i32 @lsame_(ptr noundef %86, ptr noundef @.str.1)
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %91, label %89

89:                                               ; preds = %85
  %90 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -1, ptr %90, align 4, !tbaa !9
  br label %114

91:                                               ; preds = %85, %8
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = load i32, ptr %92, align 4, !tbaa !9
  %94 = icmp slt i32 %93, 0
  br i1 %94, label %95, label %97

95:                                               ; preds = %91
  %96 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -2, ptr %96, align 4, !tbaa !9
  br label %113

97:                                               ; preds = %91
  %98 = load ptr, ptr %12, align 8, !tbaa !5
  %99 = load i32, ptr %98, align 4, !tbaa !9
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  %101 = load i32, ptr %100, align 4, !tbaa !9
  %102 = icmp sge i32 1, %101
  br i1 %102, label %103, label %104

103:                                              ; preds = %97
  br label %107

104:                                              ; preds = %97
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = load i32, ptr %105, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %104, %103
  %108 = phi i32 [ 1, %103 ], [ %106, %104 ]
  %109 = icmp slt i32 %99, %108
  br i1 %109, label %110, label %112

110:                                              ; preds = %107
  %111 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 -4, ptr %111, align 4, !tbaa !9
  br label %112

112:                                              ; preds = %110, %107
  br label %113

113:                                              ; preds = %112, %95
  br label %114

114:                                              ; preds = %113, %89
  %115 = load ptr, ptr %16, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = icmp ne i32 %116, 0
  br i1 %117, label %118, label %123

118:                                              ; preds = %114
  %119 = load ptr, ptr %16, align 8, !tbaa !5
  %120 = load i32, ptr %119, align 4, !tbaa !9
  %121 = sub nsw i32 0, %120
  store i32 %121, ptr %21, align 4, !tbaa !9
  %122 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %21, i32 noundef 8)
  store i32 1, ptr %51, align 4
  br label %4028

123:                                              ; preds = %114
  %124 = load ptr, ptr %10, align 8, !tbaa !5
  %125 = load i32, ptr %124, align 4, !tbaa !9
  %126 = icmp eq i32 %125, 0
  br i1 %126, label %127, label %128

127:                                              ; preds = %123
  store i32 1, ptr %51, align 4
  br label %4028

128:                                              ; preds = %123
  %129 = load ptr, ptr %9, align 8, !tbaa !5
  %130 = load ptr, ptr %10, align 8, !tbaa !5
  %131 = load ptr, ptr %11, align 8, !tbaa !5
  %132 = load i32, ptr %18, align 4, !tbaa !9
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds %struct.doublecomplex, ptr %131, i64 %133
  %135 = load ptr, ptr %12, align 8, !tbaa !5
  %136 = load ptr, ptr %13, align 8, !tbaa !5
  %137 = getelementptr inbounds i32, ptr %136, i64 1
  %138 = load ptr, ptr %14, align 8, !tbaa !5
  %139 = load i32, ptr %20, align 4, !tbaa !9
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds %struct.doublecomplex, ptr %138, i64 %140
  call void @zsyconv_(ptr noundef %129, ptr noundef @.str.3, ptr noundef %130, ptr noundef %134, ptr noundef %135, ptr noundef %137, ptr noundef %141, ptr noundef %38)
  %142 = load i32, ptr %40, align 4, !tbaa !9
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %190

144:                                              ; preds = %128
  %145 = load ptr, ptr %10, align 8, !tbaa !5
  %146 = load i32, ptr %145, align 4, !tbaa !9
  %147 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 %146, ptr %147, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %185, %144
  %149 = load ptr, ptr %16, align 8, !tbaa !5
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = icmp sge i32 %150, 1
  br i1 %151, label %152, label %189

152:                                              ; preds = %148
  %153 = load ptr, ptr %16, align 8, !tbaa !5
  %154 = load i32, ptr %153, align 4, !tbaa !9
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = load i32, ptr %17, align 4, !tbaa !9
  %158 = mul nsw i32 %156, %157
  %159 = add nsw i32 %154, %158
  store i32 %159, ptr %21, align 4, !tbaa !9
  %160 = load ptr, ptr %13, align 8, !tbaa !5
  %161 = load ptr, ptr %16, align 8, !tbaa !5
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i32, ptr %160, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = icmp sgt i32 %165, 0
  br i1 %166, label %167, label %184

167:                                              ; preds = %152
  %168 = load ptr, ptr %11, align 8, !tbaa !5
  %169 = load i32, ptr %21, align 4, !tbaa !9
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds %struct.doublecomplex, ptr %168, i64 %170
  %172 = getelementptr inbounds %struct.doublecomplex, ptr %171, i32 0, i32 0
  %173 = load double, ptr %172, align 8, !tbaa !11
  %174 = fcmp oeq double %173, 0.000000e+00
  br i1 %174, label %175, label %184

175:                                              ; preds = %167
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = load i32, ptr %21, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds %struct.doublecomplex, ptr %176, i64 %178
  %180 = getelementptr inbounds %struct.doublecomplex, ptr %179, i32 0, i32 1
  %181 = load double, ptr %180, align 8, !tbaa !14
  %182 = fcmp oeq double %181, 0.000000e+00
  br i1 %182, label %183, label %184

183:                                              ; preds = %175
  store i32 1, ptr %51, align 4
  br label %4028

184:                                              ; preds = %175, %167, %152
  br label %185

185:                                              ; preds = %184
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = add nsw i32 %187, -1
  store i32 %188, ptr %186, align 4, !tbaa !9
  br label %148, !llvm.loop !15

189:                                              ; preds = %148
  br label %237

190:                                              ; preds = %128
  %191 = load ptr, ptr %10, align 8, !tbaa !5
  %192 = load i32, ptr %191, align 4, !tbaa !9
  store i32 %192, ptr %21, align 4, !tbaa !9
  %193 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 1, ptr %193, align 4, !tbaa !9
  br label %194

194:                                              ; preds = %232, %190
  %195 = load ptr, ptr %16, align 8, !tbaa !5
  %196 = load i32, ptr %195, align 4, !tbaa !9
  %197 = load i32, ptr %21, align 4, !tbaa !9
  %198 = icmp sle i32 %196, %197
  br i1 %198, label %199, label %236

199:                                              ; preds = %194
  %200 = load ptr, ptr %16, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = load ptr, ptr %16, align 8, !tbaa !5
  %203 = load i32, ptr %202, align 4, !tbaa !9
  %204 = load i32, ptr %17, align 4, !tbaa !9
  %205 = mul nsw i32 %203, %204
  %206 = add nsw i32 %201, %205
  store i32 %206, ptr %22, align 4, !tbaa !9
  %207 = load ptr, ptr %13, align 8, !tbaa !5
  %208 = load ptr, ptr %16, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %207, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = icmp sgt i32 %212, 0
  br i1 %213, label %214, label %231

214:                                              ; preds = %199
  %215 = load ptr, ptr %11, align 8, !tbaa !5
  %216 = load i32, ptr %22, align 4, !tbaa !9
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds %struct.doublecomplex, ptr %215, i64 %217
  %219 = getelementptr inbounds %struct.doublecomplex, ptr %218, i32 0, i32 0
  %220 = load double, ptr %219, align 8, !tbaa !11
  %221 = fcmp oeq double %220, 0.000000e+00
  br i1 %221, label %222, label %231

222:                                              ; preds = %214
  %223 = load ptr, ptr %11, align 8, !tbaa !5
  %224 = load i32, ptr %22, align 4, !tbaa !9
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds %struct.doublecomplex, ptr %223, i64 %225
  %227 = getelementptr inbounds %struct.doublecomplex, ptr %226, i32 0, i32 1
  %228 = load double, ptr %227, align 8, !tbaa !14
  %229 = fcmp oeq double %228, 0.000000e+00
  br i1 %229, label %230, label %231

230:                                              ; preds = %222
  store i32 1, ptr %51, align 4
  br label %4028

231:                                              ; preds = %222, %214, %199
  br label %232

232:                                              ; preds = %231
  %233 = load ptr, ptr %16, align 8, !tbaa !5
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %233, align 4, !tbaa !9
  br label %194, !llvm.loop !17

236:                                              ; preds = %194
  br label %237

237:                                              ; preds = %236, %189
  %238 = load ptr, ptr %16, align 8, !tbaa !5
  store i32 0, ptr %238, align 4, !tbaa !9
  %239 = load ptr, ptr %10, align 8, !tbaa !5
  %240 = load i32, ptr %239, align 4, !tbaa !9
  store i32 %240, ptr %43, align 4, !tbaa !9
  %241 = load ptr, ptr %15, align 8, !tbaa !5
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = add nsw i32 %242, 2
  store i32 %243, ptr %31, align 4, !tbaa !9
  %244 = load i32, ptr %40, align 4, !tbaa !9
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %2080

246:                                              ; preds = %237
  %247 = load ptr, ptr %9, align 8, !tbaa !5
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = load ptr, ptr %11, align 8, !tbaa !5
  %250 = load i32, ptr %18, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds %struct.doublecomplex, ptr %249, i64 %251
  %253 = load ptr, ptr %12, align 8, !tbaa !5
  %254 = load ptr, ptr %16, align 8, !tbaa !5
  %255 = call i32 @ztrtri_(ptr noundef %247, ptr noundef @.str, ptr noundef %248, ptr noundef %252, ptr noundef %253, ptr noundef %254)
  store i32 1, ptr %36, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %628, %246
  %257 = load i32, ptr %36, align 4, !tbaa !9
  %258 = load ptr, ptr %10, align 8, !tbaa !5
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = icmp sle i32 %257, %259
  br i1 %260, label %261, label %629

261:                                              ; preds = %256
  %262 = load ptr, ptr %13, align 8, !tbaa !5
  %263 = load i32, ptr %36, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i32, ptr %262, i64 %264
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = icmp sgt i32 %266, 0
  br i1 %267, label %268, label %315

268:                                              ; preds = %261
  %269 = load i32, ptr %36, align 4, !tbaa !9
  %270 = load i32, ptr %31, align 4, !tbaa !9
  %271 = load i32, ptr %19, align 4, !tbaa !9
  %272 = mul nsw i32 %270, %271
  %273 = add nsw i32 %269, %272
  store i32 %273, ptr %21, align 4, !tbaa !9
  %274 = load i32, ptr %36, align 4, !tbaa !9
  %275 = load i32, ptr %36, align 4, !tbaa !9
  %276 = load i32, ptr %17, align 4, !tbaa !9
  %277 = mul nsw i32 %275, %276
  %278 = add nsw i32 %274, %277
  store i32 %278, ptr %22, align 4, !tbaa !9
  %279 = load ptr, ptr %11, align 8, !tbaa !5
  %280 = load i32, ptr %22, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %279, i64 %281
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %282, i32 0, i32 0
  %284 = load double, ptr %283, align 8, !tbaa !11
  %285 = fdiv double 1.000000e+00, %284
  store double %285, ptr %27, align 8, !tbaa !18
  %286 = load double, ptr %27, align 8, !tbaa !18
  %287 = load ptr, ptr %14, align 8, !tbaa !5
  %288 = load i32, ptr %21, align 4, !tbaa !9
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds %struct.doublecomplex, ptr %287, i64 %289
  %291 = getelementptr inbounds %struct.doublecomplex, ptr %290, i32 0, i32 0
  store double %286, ptr %291, align 8, !tbaa !11
  %292 = load ptr, ptr %14, align 8, !tbaa !5
  %293 = load i32, ptr %21, align 4, !tbaa !9
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds %struct.doublecomplex, ptr %292, i64 %294
  %296 = getelementptr inbounds %struct.doublecomplex, ptr %295, i32 0, i32 1
  store double 0.000000e+00, ptr %296, align 8, !tbaa !14
  %297 = load i32, ptr %36, align 4, !tbaa !9
  %298 = load i32, ptr %31, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  %300 = load i32, ptr %19, align 4, !tbaa !9
  %301 = mul nsw i32 %299, %300
  %302 = add nsw i32 %297, %301
  store i32 %302, ptr %21, align 4, !tbaa !9
  %303 = load ptr, ptr %14, align 8, !tbaa !5
  %304 = load i32, ptr %21, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds %struct.doublecomplex, ptr %303, i64 %305
  %307 = getelementptr inbounds %struct.doublecomplex, ptr %306, i32 0, i32 0
  store double 0.000000e+00, ptr %307, align 8, !tbaa !11
  %308 = load ptr, ptr %14, align 8, !tbaa !5
  %309 = load i32, ptr %21, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %308, i64 %310
  %312 = getelementptr inbounds %struct.doublecomplex, ptr %311, i32 0, i32 1
  store double 0.000000e+00, ptr %312, align 8, !tbaa !14
  %313 = load i32, ptr %36, align 4, !tbaa !9
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %36, align 4, !tbaa !9
  br label %628

315:                                              ; preds = %261
  %316 = load ptr, ptr %14, align 8, !tbaa !5
  %317 = load i32, ptr %36, align 4, !tbaa !9
  %318 = add nsw i32 %317, 1
  %319 = load i32, ptr %19, align 4, !tbaa !9
  %320 = add nsw i32 %318, %319
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds %struct.doublecomplex, ptr %316, i64 %321
  %323 = call { double, double } @Cd(ptr noundef %322)
  %324 = extractvalue { double, double } %323, 0
  %325 = extractvalue { double, double } %323, 1
  %326 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 0
  %327 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 1
  store double %324, ptr %326, align 8
  store double %325, ptr %327, align 8
  %328 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 0
  %329 = load double, ptr %328, align 8
  %330 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 1
  %331 = load double, ptr %330, align 8
  %332 = call double @cabs(double noundef %329, double noundef %331) #6
  store double %332, ptr %27, align 8, !tbaa !18
  %333 = load double, ptr %27, align 8, !tbaa !18
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %333, ptr %334, align 8, !tbaa !11
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double 0.000000e+00, ptr %335, align 8, !tbaa !14
  %336 = load i32, ptr %36, align 4, !tbaa !9
  %337 = load i32, ptr %36, align 4, !tbaa !9
  %338 = load i32, ptr %17, align 4, !tbaa !9
  %339 = mul nsw i32 %337, %338
  %340 = add nsw i32 %336, %339
  store i32 %340, ptr %21, align 4, !tbaa !9
  %341 = load ptr, ptr %11, align 8, !tbaa !5
  %342 = load i32, ptr %21, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds %struct.doublecomplex, ptr %341, i64 %343
  %345 = getelementptr inbounds %struct.doublecomplex, ptr %344, i32 0, i32 0
  %346 = load double, ptr %345, align 8, !tbaa !11
  store double %346, ptr %27, align 8, !tbaa !18
  %347 = load double, ptr %27, align 8, !tbaa !18
  %348 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %347, ptr %348, align 8, !tbaa !11
  %349 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double 0.000000e+00, ptr %349, align 8, !tbaa !14
  %350 = call { double, double } @Cd(ptr noundef %29)
  %351 = extractvalue { double, double } %350, 0
  %352 = extractvalue { double, double } %350, 1
  %353 = call { double, double } @Cd(ptr noundef %37)
  %354 = extractvalue { double, double } %353, 0
  %355 = extractvalue { double, double } %353, 1
  %356 = call { double, double } @__divdc3(double noundef %351, double noundef %352, double noundef %354, double noundef %355) #6
  %357 = extractvalue { double, double } %356, 0
  %358 = extractvalue { double, double } %356, 1
  %359 = call ptr @_pCd(ptr noundef %28)
  %360 = getelementptr inbounds { double, double }, ptr %359, i32 0, i32 0
  %361 = getelementptr inbounds { double, double }, ptr %359, i32 0, i32 1
  store double %357, ptr %360, align 8
  store double %358, ptr %361, align 8
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %363 = load double, ptr %362, align 8, !tbaa !11
  %364 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %363, ptr %364, align 8, !tbaa !11
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %366 = load double, ptr %365, align 8, !tbaa !14
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %366, ptr %367, align 8, !tbaa !14
  %368 = load i32, ptr %36, align 4, !tbaa !9
  %369 = add nsw i32 %368, 1
  %370 = load i32, ptr %36, align 4, !tbaa !9
  %371 = add nsw i32 %370, 1
  %372 = load i32, ptr %17, align 4, !tbaa !9
  %373 = mul nsw i32 %371, %372
  %374 = add nsw i32 %369, %373
  store i32 %374, ptr %21, align 4, !tbaa !9
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = load i32, ptr %21, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds %struct.doublecomplex, ptr %375, i64 %377
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %378, i32 0, i32 0
  %380 = load double, ptr %379, align 8, !tbaa !11
  store double %380, ptr %27, align 8, !tbaa !18
  %381 = load double, ptr %27, align 8, !tbaa !18
  %382 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %381, ptr %382, align 8, !tbaa !11
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double 0.000000e+00, ptr %383, align 8, !tbaa !14
  %384 = call { double, double } @Cd(ptr noundef %29)
  %385 = extractvalue { double, double } %384, 0
  %386 = extractvalue { double, double } %384, 1
  %387 = call { double, double } @Cd(ptr noundef %37)
  %388 = extractvalue { double, double } %387, 0
  %389 = extractvalue { double, double } %387, 1
  %390 = call { double, double } @__divdc3(double noundef %385, double noundef %386, double noundef %388, double noundef %389) #6
  %391 = extractvalue { double, double } %390, 0
  %392 = extractvalue { double, double } %390, 1
  %393 = call ptr @_pCd(ptr noundef %28)
  %394 = getelementptr inbounds { double, double }, ptr %393, i32 0, i32 0
  %395 = getelementptr inbounds { double, double }, ptr %393, i32 0, i32 1
  store double %391, ptr %394, align 8
  store double %392, ptr %395, align 8
  %396 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %397 = load double, ptr %396, align 8, !tbaa !11
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  store double %397, ptr %398, align 8, !tbaa !11
  %399 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %400 = load double, ptr %399, align 8, !tbaa !14
  %401 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  store double %400, ptr %401, align 8, !tbaa !14
  %402 = load ptr, ptr %14, align 8, !tbaa !5
  %403 = load i32, ptr %36, align 4, !tbaa !9
  %404 = add nsw i32 %403, 1
  %405 = load i32, ptr %19, align 4, !tbaa !9
  %406 = add nsw i32 %404, %405
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %402, i64 %407
  %409 = call { double, double } @Cd(ptr noundef %408)
  %410 = extractvalue { double, double } %409, 0
  %411 = extractvalue { double, double } %409, 1
  %412 = call { double, double } @Cd(ptr noundef %37)
  %413 = extractvalue { double, double } %412, 0
  %414 = extractvalue { double, double } %412, 1
  %415 = call { double, double } @__divdc3(double noundef %410, double noundef %411, double noundef %413, double noundef %414) #6
  %416 = extractvalue { double, double } %415, 0
  %417 = extractvalue { double, double } %415, 1
  %418 = call ptr @_pCd(ptr noundef %28)
  %419 = getelementptr inbounds { double, double }, ptr %418, i32 0, i32 0
  %420 = getelementptr inbounds { double, double }, ptr %418, i32 0, i32 1
  store double %416, ptr %419, align 8
  store double %417, ptr %420, align 8
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %422 = load double, ptr %421, align 8, !tbaa !11
  %423 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %422, ptr %423, align 8, !tbaa !11
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %425 = load double, ptr %424, align 8, !tbaa !14
  %426 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %425, ptr %426, align 8, !tbaa !14
  %427 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %428 = load double, ptr %427, align 8, !tbaa !11
  %429 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  %430 = load double, ptr %429, align 8, !tbaa !11
  %431 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %432 = load double, ptr %431, align 8, !tbaa !14
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  %434 = load double, ptr %433, align 8, !tbaa !14
  %435 = fmul double %432, %434
  %436 = fneg double %435
  %437 = call double @llvm.fmuladd.f64(double %428, double %430, double %436)
  %438 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %437, ptr %438, align 8, !tbaa !11
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %440 = load double, ptr %439, align 8, !tbaa !11
  %441 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  %442 = load double, ptr %441, align 8, !tbaa !14
  %443 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %444 = load double, ptr %443, align 8, !tbaa !14
  %445 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  %446 = load double, ptr %445, align 8, !tbaa !11
  %447 = fmul double %444, %446
  %448 = call double @llvm.fmuladd.f64(double %440, double %442, double %447)
  %449 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %448, ptr %449, align 8, !tbaa !14
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %451 = load double, ptr %450, align 8, !tbaa !11
  %452 = fsub double %451, 1.000000e+00
  %453 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %452, ptr %453, align 8, !tbaa !11
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %455 = load double, ptr %454, align 8, !tbaa !14
  %456 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %455, ptr %456, align 8, !tbaa !14
  %457 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %458 = load double, ptr %457, align 8, !tbaa !11
  %459 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %460 = load double, ptr %459, align 8, !tbaa !11
  %461 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %462 = load double, ptr %461, align 8, !tbaa !14
  %463 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %464 = load double, ptr %463, align 8, !tbaa !14
  %465 = fmul double %462, %464
  %466 = fneg double %465
  %467 = call double @llvm.fmuladd.f64(double %458, double %460, double %466)
  %468 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %467, ptr %468, align 8, !tbaa !11
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %470 = load double, ptr %469, align 8, !tbaa !11
  %471 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %472 = load double, ptr %471, align 8, !tbaa !14
  %473 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %474 = load double, ptr %473, align 8, !tbaa !14
  %475 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %476 = load double, ptr %475, align 8, !tbaa !11
  %477 = fmul double %474, %476
  %478 = call double @llvm.fmuladd.f64(double %470, double %472, double %477)
  %479 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %478, ptr %479, align 8, !tbaa !14
  %480 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %481 = load double, ptr %480, align 8, !tbaa !11
  %482 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  store double %481, ptr %482, align 8, !tbaa !11
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %484 = load double, ptr %483, align 8, !tbaa !14
  %485 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  store double %484, ptr %485, align 8, !tbaa !14
  %486 = load i32, ptr %36, align 4, !tbaa !9
  %487 = load i32, ptr %31, align 4, !tbaa !9
  %488 = load i32, ptr %19, align 4, !tbaa !9
  %489 = mul nsw i32 %487, %488
  %490 = add nsw i32 %486, %489
  store i32 %490, ptr %21, align 4, !tbaa !9
  %491 = call { double, double } @Cd(ptr noundef %48)
  %492 = extractvalue { double, double } %491, 0
  %493 = extractvalue { double, double } %491, 1
  %494 = call { double, double } @Cd(ptr noundef %33)
  %495 = extractvalue { double, double } %494, 0
  %496 = extractvalue { double, double } %494, 1
  %497 = call { double, double } @__divdc3(double noundef %492, double noundef %493, double noundef %495, double noundef %496) #6
  %498 = extractvalue { double, double } %497, 0
  %499 = extractvalue { double, double } %497, 1
  %500 = call ptr @_pCd(ptr noundef %28)
  %501 = getelementptr inbounds { double, double }, ptr %500, i32 0, i32 0
  %502 = getelementptr inbounds { double, double }, ptr %500, i32 0, i32 1
  store double %498, ptr %501, align 8
  store double %499, ptr %502, align 8
  %503 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %504 = load double, ptr %503, align 8, !tbaa !11
  %505 = load ptr, ptr %14, align 8, !tbaa !5
  %506 = load i32, ptr %21, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds %struct.doublecomplex, ptr %505, i64 %507
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %508, i32 0, i32 0
  store double %504, ptr %509, align 8, !tbaa !11
  %510 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %511 = load double, ptr %510, align 8, !tbaa !14
  %512 = load ptr, ptr %14, align 8, !tbaa !5
  %513 = load i32, ptr %21, align 4, !tbaa !9
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds %struct.doublecomplex, ptr %512, i64 %514
  %516 = getelementptr inbounds %struct.doublecomplex, ptr %515, i32 0, i32 1
  store double %511, ptr %516, align 8, !tbaa !14
  %517 = load i32, ptr %36, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  %519 = load i32, ptr %31, align 4, !tbaa !9
  %520 = add nsw i32 %519, 1
  %521 = load i32, ptr %19, align 4, !tbaa !9
  %522 = mul nsw i32 %520, %521
  %523 = add nsw i32 %518, %522
  store i32 %523, ptr %21, align 4, !tbaa !9
  %524 = call { double, double } @Cd(ptr noundef %41)
  %525 = extractvalue { double, double } %524, 0
  %526 = extractvalue { double, double } %524, 1
  %527 = call { double, double } @Cd(ptr noundef %33)
  %528 = extractvalue { double, double } %527, 0
  %529 = extractvalue { double, double } %527, 1
  %530 = call { double, double } @__divdc3(double noundef %525, double noundef %526, double noundef %528, double noundef %529) #6
  %531 = extractvalue { double, double } %530, 0
  %532 = extractvalue { double, double } %530, 1
  %533 = call ptr @_pCd(ptr noundef %28)
  %534 = getelementptr inbounds { double, double }, ptr %533, i32 0, i32 0
  %535 = getelementptr inbounds { double, double }, ptr %533, i32 0, i32 1
  store double %531, ptr %534, align 8
  store double %532, ptr %535, align 8
  %536 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %537 = load double, ptr %536, align 8, !tbaa !11
  %538 = load ptr, ptr %14, align 8, !tbaa !5
  %539 = load i32, ptr %21, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds %struct.doublecomplex, ptr %538, i64 %540
  %542 = getelementptr inbounds %struct.doublecomplex, ptr %541, i32 0, i32 0
  store double %537, ptr %542, align 8, !tbaa !11
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %544 = load double, ptr %543, align 8, !tbaa !14
  %545 = load ptr, ptr %14, align 8, !tbaa !5
  %546 = load i32, ptr %21, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds %struct.doublecomplex, ptr %545, i64 %547
  %549 = getelementptr inbounds %struct.doublecomplex, ptr %548, i32 0, i32 1
  store double %544, ptr %549, align 8, !tbaa !14
  %550 = load i32, ptr %36, align 4, !tbaa !9
  %551 = load i32, ptr %31, align 4, !tbaa !9
  %552 = add nsw i32 %551, 1
  %553 = load i32, ptr %19, align 4, !tbaa !9
  %554 = mul nsw i32 %552, %553
  %555 = add nsw i32 %550, %554
  store i32 %555, ptr %21, align 4, !tbaa !9
  %556 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %557 = load double, ptr %556, align 8, !tbaa !11
  %558 = fneg double %557
  %559 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %558, ptr %559, align 8, !tbaa !11
  %560 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %561 = load double, ptr %560, align 8, !tbaa !14
  %562 = fneg double %561
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %562, ptr %563, align 8, !tbaa !14
  %564 = call { double, double } @Cd(ptr noundef %29)
  %565 = extractvalue { double, double } %564, 0
  %566 = extractvalue { double, double } %564, 1
  %567 = call { double, double } @Cd(ptr noundef %33)
  %568 = extractvalue { double, double } %567, 0
  %569 = extractvalue { double, double } %567, 1
  %570 = call { double, double } @__divdc3(double noundef %565, double noundef %566, double noundef %568, double noundef %569) #6
  %571 = extractvalue { double, double } %570, 0
  %572 = extractvalue { double, double } %570, 1
  %573 = call ptr @_pCd(ptr noundef %28)
  %574 = getelementptr inbounds { double, double }, ptr %573, i32 0, i32 0
  %575 = getelementptr inbounds { double, double }, ptr %573, i32 0, i32 1
  store double %571, ptr %574, align 8
  store double %572, ptr %575, align 8
  %576 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %577 = load double, ptr %576, align 8, !tbaa !11
  %578 = load ptr, ptr %14, align 8, !tbaa !5
  %579 = load i32, ptr %21, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds %struct.doublecomplex, ptr %578, i64 %580
  %582 = getelementptr inbounds %struct.doublecomplex, ptr %581, i32 0, i32 0
  store double %577, ptr %582, align 8, !tbaa !11
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %584 = load double, ptr %583, align 8, !tbaa !14
  %585 = load ptr, ptr %14, align 8, !tbaa !5
  %586 = load i32, ptr %21, align 4, !tbaa !9
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds %struct.doublecomplex, ptr %585, i64 %587
  %589 = getelementptr inbounds %struct.doublecomplex, ptr %588, i32 0, i32 1
  store double %584, ptr %589, align 8, !tbaa !14
  %590 = load i32, ptr %36, align 4, !tbaa !9
  %591 = add nsw i32 %590, 1
  %592 = load i32, ptr %31, align 4, !tbaa !9
  %593 = load i32, ptr %19, align 4, !tbaa !9
  %594 = mul nsw i32 %592, %593
  %595 = add nsw i32 %591, %594
  store i32 %595, ptr %21, align 4, !tbaa !9
  %596 = load ptr, ptr %14, align 8, !tbaa !5
  %597 = load i32, ptr %36, align 4, !tbaa !9
  %598 = load i32, ptr %31, align 4, !tbaa !9
  %599 = add nsw i32 %598, 1
  %600 = load i32, ptr %19, align 4, !tbaa !9
  %601 = mul nsw i32 %599, %600
  %602 = add nsw i32 %597, %601
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %596, i64 %603
  %605 = call { double, double } @Cd(ptr noundef %604)
  %606 = extractvalue { double, double } %605, 0
  %607 = extractvalue { double, double } %605, 1
  %608 = fneg double %607
  %609 = call ptr @_pCd(ptr noundef %28)
  %610 = getelementptr inbounds { double, double }, ptr %609, i32 0, i32 0
  %611 = getelementptr inbounds { double, double }, ptr %609, i32 0, i32 1
  store double %606, ptr %610, align 8
  store double %608, ptr %611, align 8
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %613 = load double, ptr %612, align 8, !tbaa !11
  %614 = load ptr, ptr %14, align 8, !tbaa !5
  %615 = load i32, ptr %21, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %616
  %618 = getelementptr inbounds %struct.doublecomplex, ptr %617, i32 0, i32 0
  store double %613, ptr %618, align 8, !tbaa !11
  %619 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %620 = load double, ptr %619, align 8, !tbaa !14
  %621 = load ptr, ptr %14, align 8, !tbaa !5
  %622 = load i32, ptr %21, align 4, !tbaa !9
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds %struct.doublecomplex, ptr %621, i64 %623
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %624, i32 0, i32 1
  store double %620, ptr %625, align 8, !tbaa !14
  %626 = load i32, ptr %36, align 4, !tbaa !9
  %627 = add nsw i32 %626, 2
  store i32 %627, ptr %36, align 4, !tbaa !9
  br label %628

628:                                              ; preds = %315, %268
  br label %256, !llvm.loop !19

629:                                              ; preds = %256
  %630 = load ptr, ptr %10, align 8, !tbaa !5
  %631 = load i32, ptr %630, align 4, !tbaa !9
  store i32 %631, ptr %47, align 4, !tbaa !9
  br label %632

632:                                              ; preds = %1993, %629
  %633 = load i32, ptr %47, align 4, !tbaa !9
  %634 = icmp sgt i32 %633, 0
  br i1 %634, label %635, label %1994

635:                                              ; preds = %632
  %636 = load ptr, ptr %15, align 8, !tbaa !5
  %637 = load i32, ptr %636, align 4, !tbaa !9
  store i32 %637, ptr %46, align 4, !tbaa !9
  %638 = load i32, ptr %47, align 4, !tbaa !9
  %639 = load i32, ptr %46, align 4, !tbaa !9
  %640 = icmp sle i32 %638, %639
  br i1 %640, label %641, label %643

641:                                              ; preds = %635
  %642 = load i32, ptr %47, align 4, !tbaa !9
  store i32 %642, ptr %46, align 4, !tbaa !9
  br label %675

643:                                              ; preds = %635
  store i32 0, ptr %39, align 4, !tbaa !9
  %644 = load i32, ptr %47, align 4, !tbaa !9
  store i32 %644, ptr %21, align 4, !tbaa !9
  %645 = load i32, ptr %47, align 4, !tbaa !9
  %646 = add nsw i32 %645, 1
  %647 = load i32, ptr %46, align 4, !tbaa !9
  %648 = sub nsw i32 %646, %647
  store i32 %648, ptr %34, align 4, !tbaa !9
  br label %649

649:                                              ; preds = %664, %643
  %650 = load i32, ptr %34, align 4, !tbaa !9
  %651 = load i32, ptr %21, align 4, !tbaa !9
  %652 = icmp sle i32 %650, %651
  br i1 %652, label %653, label %667

653:                                              ; preds = %649
  %654 = load ptr, ptr %13, align 8, !tbaa !5
  %655 = load i32, ptr %34, align 4, !tbaa !9
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds i32, ptr %654, i64 %656
  %658 = load i32, ptr %657, align 4, !tbaa !9
  %659 = icmp slt i32 %658, 0
  br i1 %659, label %660, label %663

660:                                              ; preds = %653
  %661 = load i32, ptr %39, align 4, !tbaa !9
  %662 = add nsw i32 %661, 1
  store i32 %662, ptr %39, align 4, !tbaa !9
  br label %663

663:                                              ; preds = %660, %653
  br label %664

664:                                              ; preds = %663
  %665 = load i32, ptr %34, align 4, !tbaa !9
  %666 = add nsw i32 %665, 1
  store i32 %666, ptr %34, align 4, !tbaa !9
  br label %649, !llvm.loop !20

667:                                              ; preds = %649
  %668 = load i32, ptr %39, align 4, !tbaa !9
  %669 = srem i32 %668, 2
  %670 = icmp eq i32 %669, 1
  br i1 %670, label %671, label %674

671:                                              ; preds = %667
  %672 = load i32, ptr %46, align 4, !tbaa !9
  %673 = add nsw i32 %672, 1
  store i32 %673, ptr %46, align 4, !tbaa !9
  br label %674

674:                                              ; preds = %671, %667
  br label %675

675:                                              ; preds = %674, %641
  %676 = load i32, ptr %46, align 4, !tbaa !9
  %677 = load i32, ptr %47, align 4, !tbaa !9
  %678 = sub nsw i32 %677, %676
  store i32 %678, ptr %47, align 4, !tbaa !9
  %679 = load i32, ptr %47, align 4, !tbaa !9
  store i32 %679, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %680

680:                                              ; preds = %729, %675
  %681 = load i32, ptr %34, align 4, !tbaa !9
  %682 = load i32, ptr %21, align 4, !tbaa !9
  %683 = icmp sle i32 %681, %682
  br i1 %683, label %684, label %732

684:                                              ; preds = %680
  %685 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %685, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %686

686:                                              ; preds = %725, %684
  %687 = load i32, ptr %35, align 4, !tbaa !9
  %688 = load i32, ptr %22, align 4, !tbaa !9
  %689 = icmp sle i32 %687, %688
  br i1 %689, label %690, label %728

690:                                              ; preds = %686
  %691 = load i32, ptr %34, align 4, !tbaa !9
  %692 = load i32, ptr %35, align 4, !tbaa !9
  %693 = load i32, ptr %19, align 4, !tbaa !9
  %694 = mul nsw i32 %692, %693
  %695 = add nsw i32 %691, %694
  store i32 %695, ptr %23, align 4, !tbaa !9
  %696 = load i32, ptr %34, align 4, !tbaa !9
  %697 = load i32, ptr %47, align 4, !tbaa !9
  %698 = load i32, ptr %35, align 4, !tbaa !9
  %699 = add nsw i32 %697, %698
  %700 = load i32, ptr %17, align 4, !tbaa !9
  %701 = mul nsw i32 %699, %700
  %702 = add nsw i32 %696, %701
  store i32 %702, ptr %24, align 4, !tbaa !9
  %703 = load ptr, ptr %11, align 8, !tbaa !5
  %704 = load i32, ptr %24, align 4, !tbaa !9
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds %struct.doublecomplex, ptr %703, i64 %705
  %707 = getelementptr inbounds %struct.doublecomplex, ptr %706, i32 0, i32 0
  %708 = load double, ptr %707, align 8, !tbaa !11
  %709 = load ptr, ptr %14, align 8, !tbaa !5
  %710 = load i32, ptr %23, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %709, i64 %711
  %713 = getelementptr inbounds %struct.doublecomplex, ptr %712, i32 0, i32 0
  store double %708, ptr %713, align 8, !tbaa !11
  %714 = load ptr, ptr %11, align 8, !tbaa !5
  %715 = load i32, ptr %24, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds %struct.doublecomplex, ptr %714, i64 %716
  %718 = getelementptr inbounds %struct.doublecomplex, ptr %717, i32 0, i32 1
  %719 = load double, ptr %718, align 8, !tbaa !14
  %720 = load ptr, ptr %14, align 8, !tbaa !5
  %721 = load i32, ptr %23, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds %struct.doublecomplex, ptr %720, i64 %722
  %724 = getelementptr inbounds %struct.doublecomplex, ptr %723, i32 0, i32 1
  store double %719, ptr %724, align 8, !tbaa !14
  br label %725

725:                                              ; preds = %690
  %726 = load i32, ptr %35, align 4, !tbaa !9
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %35, align 4, !tbaa !9
  br label %686, !llvm.loop !21

728:                                              ; preds = %686
  br label %729

729:                                              ; preds = %728
  %730 = load i32, ptr %34, align 4, !tbaa !9
  %731 = add nsw i32 %730, 1
  store i32 %731, ptr %34, align 4, !tbaa !9
  br label %680, !llvm.loop !22

732:                                              ; preds = %680
  %733 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %733, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %734

734:                                              ; preds = %834, %732
  %735 = load i32, ptr %34, align 4, !tbaa !9
  %736 = load i32, ptr %21, align 4, !tbaa !9
  %737 = icmp sle i32 %735, %736
  br i1 %737, label %738, label %837

738:                                              ; preds = %734
  %739 = load i32, ptr %43, align 4, !tbaa !9
  %740 = load i32, ptr %34, align 4, !tbaa !9
  %741 = add nsw i32 %739, %740
  %742 = load i32, ptr %34, align 4, !tbaa !9
  %743 = load i32, ptr %19, align 4, !tbaa !9
  %744 = mul nsw i32 %742, %743
  %745 = add nsw i32 %741, %744
  store i32 %745, ptr %22, align 4, !tbaa !9
  %746 = load ptr, ptr %14, align 8, !tbaa !5
  %747 = load i32, ptr %22, align 4, !tbaa !9
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %746, i64 %748
  %750 = getelementptr inbounds %struct.doublecomplex, ptr %749, i32 0, i32 0
  store double 1.000000e+00, ptr %750, align 8, !tbaa !11
  %751 = load ptr, ptr %14, align 8, !tbaa !5
  %752 = load i32, ptr %22, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds %struct.doublecomplex, ptr %751, i64 %753
  %755 = getelementptr inbounds %struct.doublecomplex, ptr %754, i32 0, i32 1
  store double 0.000000e+00, ptr %755, align 8, !tbaa !14
  %756 = load i32, ptr %34, align 4, !tbaa !9
  %757 = sub nsw i32 %756, 1
  store i32 %757, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %758

758:                                              ; preds = %780, %738
  %759 = load i32, ptr %35, align 4, !tbaa !9
  %760 = load i32, ptr %22, align 4, !tbaa !9
  %761 = icmp sle i32 %759, %760
  br i1 %761, label %762, label %783

762:                                              ; preds = %758
  %763 = load i32, ptr %43, align 4, !tbaa !9
  %764 = load i32, ptr %34, align 4, !tbaa !9
  %765 = add nsw i32 %763, %764
  %766 = load i32, ptr %35, align 4, !tbaa !9
  %767 = load i32, ptr %19, align 4, !tbaa !9
  %768 = mul nsw i32 %766, %767
  %769 = add nsw i32 %765, %768
  store i32 %769, ptr %23, align 4, !tbaa !9
  %770 = load ptr, ptr %14, align 8, !tbaa !5
  %771 = load i32, ptr %23, align 4, !tbaa !9
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds %struct.doublecomplex, ptr %770, i64 %772
  %774 = getelementptr inbounds %struct.doublecomplex, ptr %773, i32 0, i32 0
  store double 0.000000e+00, ptr %774, align 8, !tbaa !11
  %775 = load ptr, ptr %14, align 8, !tbaa !5
  %776 = load i32, ptr %23, align 4, !tbaa !9
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds %struct.doublecomplex, ptr %775, i64 %777
  %779 = getelementptr inbounds %struct.doublecomplex, ptr %778, i32 0, i32 1
  store double 0.000000e+00, ptr %779, align 8, !tbaa !14
  br label %780

780:                                              ; preds = %762
  %781 = load i32, ptr %35, align 4, !tbaa !9
  %782 = add nsw i32 %781, 1
  store i32 %782, ptr %35, align 4, !tbaa !9
  br label %758, !llvm.loop !23

783:                                              ; preds = %758
  %784 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %784, ptr %22, align 4, !tbaa !9
  %785 = load i32, ptr %34, align 4, !tbaa !9
  %786 = add nsw i32 %785, 1
  store i32 %786, ptr %35, align 4, !tbaa !9
  br label %787

787:                                              ; preds = %830, %783
  %788 = load i32, ptr %35, align 4, !tbaa !9
  %789 = load i32, ptr %22, align 4, !tbaa !9
  %790 = icmp sle i32 %788, %789
  br i1 %790, label %791, label %833

791:                                              ; preds = %787
  %792 = load i32, ptr %43, align 4, !tbaa !9
  %793 = load i32, ptr %34, align 4, !tbaa !9
  %794 = add nsw i32 %792, %793
  %795 = load i32, ptr %35, align 4, !tbaa !9
  %796 = load i32, ptr %19, align 4, !tbaa !9
  %797 = mul nsw i32 %795, %796
  %798 = add nsw i32 %794, %797
  store i32 %798, ptr %23, align 4, !tbaa !9
  %799 = load i32, ptr %47, align 4, !tbaa !9
  %800 = load i32, ptr %34, align 4, !tbaa !9
  %801 = add nsw i32 %799, %800
  %802 = load i32, ptr %47, align 4, !tbaa !9
  %803 = load i32, ptr %35, align 4, !tbaa !9
  %804 = add nsw i32 %802, %803
  %805 = load i32, ptr %17, align 4, !tbaa !9
  %806 = mul nsw i32 %804, %805
  %807 = add nsw i32 %801, %806
  store i32 %807, ptr %24, align 4, !tbaa !9
  %808 = load ptr, ptr %11, align 8, !tbaa !5
  %809 = load i32, ptr %24, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds %struct.doublecomplex, ptr %808, i64 %810
  %812 = getelementptr inbounds %struct.doublecomplex, ptr %811, i32 0, i32 0
  %813 = load double, ptr %812, align 8, !tbaa !11
  %814 = load ptr, ptr %14, align 8, !tbaa !5
  %815 = load i32, ptr %23, align 4, !tbaa !9
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds %struct.doublecomplex, ptr %814, i64 %816
  %818 = getelementptr inbounds %struct.doublecomplex, ptr %817, i32 0, i32 0
  store double %813, ptr %818, align 8, !tbaa !11
  %819 = load ptr, ptr %11, align 8, !tbaa !5
  %820 = load i32, ptr %24, align 4, !tbaa !9
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds %struct.doublecomplex, ptr %819, i64 %821
  %823 = getelementptr inbounds %struct.doublecomplex, ptr %822, i32 0, i32 1
  %824 = load double, ptr %823, align 8, !tbaa !14
  %825 = load ptr, ptr %14, align 8, !tbaa !5
  %826 = load i32, ptr %23, align 4, !tbaa !9
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds %struct.doublecomplex, ptr %825, i64 %827
  %829 = getelementptr inbounds %struct.doublecomplex, ptr %828, i32 0, i32 1
  store double %824, ptr %829, align 8, !tbaa !14
  br label %830

830:                                              ; preds = %791
  %831 = load i32, ptr %35, align 4, !tbaa !9
  %832 = add nsw i32 %831, 1
  store i32 %832, ptr %35, align 4, !tbaa !9
  br label %787, !llvm.loop !24

833:                                              ; preds = %787
  br label %834

834:                                              ; preds = %833
  %835 = load i32, ptr %34, align 4, !tbaa !9
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %34, align 4, !tbaa !9
  br label %734, !llvm.loop !25

837:                                              ; preds = %734
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %838

838:                                              ; preds = %1241, %837
  %839 = load i32, ptr %34, align 4, !tbaa !9
  %840 = load i32, ptr %47, align 4, !tbaa !9
  %841 = icmp sle i32 %839, %840
  br i1 %841, label %842, label %1242

842:                                              ; preds = %838
  %843 = load ptr, ptr %13, align 8, !tbaa !5
  %844 = load i32, ptr %34, align 4, !tbaa !9
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds i32, ptr %843, i64 %845
  %847 = load i32, ptr %846, align 4, !tbaa !9
  %848 = icmp sgt i32 %847, 0
  br i1 %848, label %849, label %946

849:                                              ; preds = %842
  %850 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %850, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %851

851:                                              ; preds = %940, %849
  %852 = load i32, ptr %35, align 4, !tbaa !9
  %853 = load i32, ptr %21, align 4, !tbaa !9
  %854 = icmp sle i32 %852, %853
  br i1 %854, label %855, label %943

855:                                              ; preds = %851
  %856 = load i32, ptr %34, align 4, !tbaa !9
  %857 = load i32, ptr %35, align 4, !tbaa !9
  %858 = load i32, ptr %19, align 4, !tbaa !9
  %859 = mul nsw i32 %857, %858
  %860 = add nsw i32 %856, %859
  store i32 %860, ptr %22, align 4, !tbaa !9
  %861 = load i32, ptr %34, align 4, !tbaa !9
  %862 = load i32, ptr %31, align 4, !tbaa !9
  %863 = load i32, ptr %19, align 4, !tbaa !9
  %864 = mul nsw i32 %862, %863
  %865 = add nsw i32 %861, %864
  store i32 %865, ptr %23, align 4, !tbaa !9
  %866 = load i32, ptr %34, align 4, !tbaa !9
  %867 = load i32, ptr %35, align 4, !tbaa !9
  %868 = load i32, ptr %19, align 4, !tbaa !9
  %869 = mul nsw i32 %867, %868
  %870 = add nsw i32 %866, %869
  store i32 %870, ptr %24, align 4, !tbaa !9
  %871 = load ptr, ptr %14, align 8, !tbaa !5
  %872 = load i32, ptr %23, align 4, !tbaa !9
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds %struct.doublecomplex, ptr %871, i64 %873
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %874, i32 0, i32 0
  %876 = load double, ptr %875, align 8, !tbaa !11
  %877 = load ptr, ptr %14, align 8, !tbaa !5
  %878 = load i32, ptr %24, align 4, !tbaa !9
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %877, i64 %879
  %881 = getelementptr inbounds %struct.doublecomplex, ptr %880, i32 0, i32 0
  %882 = load double, ptr %881, align 8, !tbaa !11
  %883 = load ptr, ptr %14, align 8, !tbaa !5
  %884 = load i32, ptr %23, align 4, !tbaa !9
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %883, i64 %885
  %887 = getelementptr inbounds %struct.doublecomplex, ptr %886, i32 0, i32 1
  %888 = load double, ptr %887, align 8, !tbaa !14
  %889 = load ptr, ptr %14, align 8, !tbaa !5
  %890 = load i32, ptr %24, align 4, !tbaa !9
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds %struct.doublecomplex, ptr %889, i64 %891
  %893 = getelementptr inbounds %struct.doublecomplex, ptr %892, i32 0, i32 1
  %894 = load double, ptr %893, align 8, !tbaa !14
  %895 = fmul double %888, %894
  %896 = fneg double %895
  %897 = call double @llvm.fmuladd.f64(double %876, double %882, double %896)
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %897, ptr %898, align 8, !tbaa !11
  %899 = load ptr, ptr %14, align 8, !tbaa !5
  %900 = load i32, ptr %23, align 4, !tbaa !9
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds %struct.doublecomplex, ptr %899, i64 %901
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %902, i32 0, i32 0
  %904 = load double, ptr %903, align 8, !tbaa !11
  %905 = load ptr, ptr %14, align 8, !tbaa !5
  %906 = load i32, ptr %24, align 4, !tbaa !9
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds %struct.doublecomplex, ptr %905, i64 %907
  %909 = getelementptr inbounds %struct.doublecomplex, ptr %908, i32 0, i32 1
  %910 = load double, ptr %909, align 8, !tbaa !14
  %911 = load ptr, ptr %14, align 8, !tbaa !5
  %912 = load i32, ptr %23, align 4, !tbaa !9
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds %struct.doublecomplex, ptr %911, i64 %913
  %915 = getelementptr inbounds %struct.doublecomplex, ptr %914, i32 0, i32 1
  %916 = load double, ptr %915, align 8, !tbaa !14
  %917 = load ptr, ptr %14, align 8, !tbaa !5
  %918 = load i32, ptr %24, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds %struct.doublecomplex, ptr %917, i64 %919
  %921 = getelementptr inbounds %struct.doublecomplex, ptr %920, i32 0, i32 0
  %922 = load double, ptr %921, align 8, !tbaa !11
  %923 = fmul double %916, %922
  %924 = call double @llvm.fmuladd.f64(double %904, double %910, double %923)
  %925 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %924, ptr %925, align 8, !tbaa !14
  %926 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %927 = load double, ptr %926, align 8, !tbaa !11
  %928 = load ptr, ptr %14, align 8, !tbaa !5
  %929 = load i32, ptr %22, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds %struct.doublecomplex, ptr %928, i64 %930
  %932 = getelementptr inbounds %struct.doublecomplex, ptr %931, i32 0, i32 0
  store double %927, ptr %932, align 8, !tbaa !11
  %933 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %934 = load double, ptr %933, align 8, !tbaa !14
  %935 = load ptr, ptr %14, align 8, !tbaa !5
  %936 = load i32, ptr %22, align 4, !tbaa !9
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds %struct.doublecomplex, ptr %935, i64 %937
  %939 = getelementptr inbounds %struct.doublecomplex, ptr %938, i32 0, i32 1
  store double %934, ptr %939, align 8, !tbaa !14
  br label %940

940:                                              ; preds = %855
  %941 = load i32, ptr %35, align 4, !tbaa !9
  %942 = add nsw i32 %941, 1
  store i32 %942, ptr %35, align 4, !tbaa !9
  br label %851, !llvm.loop !26

943:                                              ; preds = %851
  %944 = load i32, ptr %34, align 4, !tbaa !9
  %945 = add nsw i32 %944, 1
  store i32 %945, ptr %34, align 4, !tbaa !9
  br label %1241

946:                                              ; preds = %842
  %947 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %947, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %948

948:                                              ; preds = %1235, %946
  %949 = load i32, ptr %35, align 4, !tbaa !9
  %950 = load i32, ptr %21, align 4, !tbaa !9
  %951 = icmp sle i32 %949, %950
  br i1 %951, label %952, label %1238

952:                                              ; preds = %948
  %953 = load i32, ptr %34, align 4, !tbaa !9
  %954 = load i32, ptr %35, align 4, !tbaa !9
  %955 = load i32, ptr %19, align 4, !tbaa !9
  %956 = mul nsw i32 %954, %955
  %957 = add nsw i32 %953, %956
  store i32 %957, ptr %22, align 4, !tbaa !9
  %958 = load ptr, ptr %14, align 8, !tbaa !5
  %959 = load i32, ptr %22, align 4, !tbaa !9
  %960 = sext i32 %959 to i64
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %958, i64 %960
  %962 = getelementptr inbounds %struct.doublecomplex, ptr %961, i32 0, i32 0
  %963 = load double, ptr %962, align 8, !tbaa !11
  %964 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %963, ptr %964, align 8, !tbaa !11
  %965 = load ptr, ptr %14, align 8, !tbaa !5
  %966 = load i32, ptr %22, align 4, !tbaa !9
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds %struct.doublecomplex, ptr %965, i64 %967
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %968, i32 0, i32 1
  %970 = load double, ptr %969, align 8, !tbaa !14
  %971 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %970, ptr %971, align 8, !tbaa !14
  %972 = load i32, ptr %34, align 4, !tbaa !9
  %973 = add nsw i32 %972, 1
  %974 = load i32, ptr %35, align 4, !tbaa !9
  %975 = load i32, ptr %19, align 4, !tbaa !9
  %976 = mul nsw i32 %974, %975
  %977 = add nsw i32 %973, %976
  store i32 %977, ptr %22, align 4, !tbaa !9
  %978 = load ptr, ptr %14, align 8, !tbaa !5
  %979 = load i32, ptr %22, align 4, !tbaa !9
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds %struct.doublecomplex, ptr %978, i64 %980
  %982 = getelementptr inbounds %struct.doublecomplex, ptr %981, i32 0, i32 0
  %983 = load double, ptr %982, align 8, !tbaa !11
  %984 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %983, ptr %984, align 8, !tbaa !11
  %985 = load ptr, ptr %14, align 8, !tbaa !5
  %986 = load i32, ptr %22, align 4, !tbaa !9
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds %struct.doublecomplex, ptr %985, i64 %987
  %989 = getelementptr inbounds %struct.doublecomplex, ptr %988, i32 0, i32 1
  %990 = load double, ptr %989, align 8, !tbaa !14
  %991 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %990, ptr %991, align 8, !tbaa !14
  %992 = load i32, ptr %34, align 4, !tbaa !9
  %993 = load i32, ptr %35, align 4, !tbaa !9
  %994 = load i32, ptr %19, align 4, !tbaa !9
  %995 = mul nsw i32 %993, %994
  %996 = add nsw i32 %992, %995
  store i32 %996, ptr %22, align 4, !tbaa !9
  %997 = load i32, ptr %34, align 4, !tbaa !9
  %998 = load i32, ptr %31, align 4, !tbaa !9
  %999 = load i32, ptr %19, align 4, !tbaa !9
  %1000 = mul nsw i32 %998, %999
  %1001 = add nsw i32 %997, %1000
  store i32 %1001, ptr %23, align 4, !tbaa !9
  %1002 = load ptr, ptr %14, align 8, !tbaa !5
  %1003 = load i32, ptr %23, align 4, !tbaa !9
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds %struct.doublecomplex, ptr %1002, i64 %1004
  %1006 = getelementptr inbounds %struct.doublecomplex, ptr %1005, i32 0, i32 0
  %1007 = load double, ptr %1006, align 8, !tbaa !11
  %1008 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1009 = load double, ptr %1008, align 8, !tbaa !11
  %1010 = load ptr, ptr %14, align 8, !tbaa !5
  %1011 = load i32, ptr %23, align 4, !tbaa !9
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %1010, i64 %1012
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %1013, i32 0, i32 1
  %1015 = load double, ptr %1014, align 8, !tbaa !14
  %1016 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1017 = load double, ptr %1016, align 8, !tbaa !14
  %1018 = fmul double %1015, %1017
  %1019 = fneg double %1018
  %1020 = call double @llvm.fmuladd.f64(double %1007, double %1009, double %1019)
  %1021 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1020, ptr %1021, align 8, !tbaa !11
  %1022 = load ptr, ptr %14, align 8, !tbaa !5
  %1023 = load i32, ptr %23, align 4, !tbaa !9
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds %struct.doublecomplex, ptr %1022, i64 %1024
  %1026 = getelementptr inbounds %struct.doublecomplex, ptr %1025, i32 0, i32 0
  %1027 = load double, ptr %1026, align 8, !tbaa !11
  %1028 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1029 = load double, ptr %1028, align 8, !tbaa !14
  %1030 = load ptr, ptr %14, align 8, !tbaa !5
  %1031 = load i32, ptr %23, align 4, !tbaa !9
  %1032 = sext i32 %1031 to i64
  %1033 = getelementptr inbounds %struct.doublecomplex, ptr %1030, i64 %1032
  %1034 = getelementptr inbounds %struct.doublecomplex, ptr %1033, i32 0, i32 1
  %1035 = load double, ptr %1034, align 8, !tbaa !14
  %1036 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1037 = load double, ptr %1036, align 8, !tbaa !11
  %1038 = fmul double %1035, %1037
  %1039 = call double @llvm.fmuladd.f64(double %1027, double %1029, double %1038)
  %1040 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1039, ptr %1040, align 8, !tbaa !14
  %1041 = load i32, ptr %34, align 4, !tbaa !9
  %1042 = load i32, ptr %31, align 4, !tbaa !9
  %1043 = add nsw i32 %1042, 1
  %1044 = load i32, ptr %19, align 4, !tbaa !9
  %1045 = mul nsw i32 %1043, %1044
  %1046 = add nsw i32 %1041, %1045
  store i32 %1046, ptr %24, align 4, !tbaa !9
  %1047 = load ptr, ptr %14, align 8, !tbaa !5
  %1048 = load i32, ptr %24, align 4, !tbaa !9
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %1047, i64 %1049
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %1050, i32 0, i32 0
  %1052 = load double, ptr %1051, align 8, !tbaa !11
  %1053 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1054 = load double, ptr %1053, align 8, !tbaa !11
  %1055 = load ptr, ptr %14, align 8, !tbaa !5
  %1056 = load i32, ptr %24, align 4, !tbaa !9
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds %struct.doublecomplex, ptr %1055, i64 %1057
  %1059 = getelementptr inbounds %struct.doublecomplex, ptr %1058, i32 0, i32 1
  %1060 = load double, ptr %1059, align 8, !tbaa !14
  %1061 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1062 = load double, ptr %1061, align 8, !tbaa !14
  %1063 = fmul double %1060, %1062
  %1064 = fneg double %1063
  %1065 = call double @llvm.fmuladd.f64(double %1052, double %1054, double %1064)
  %1066 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %1065, ptr %1066, align 8, !tbaa !11
  %1067 = load ptr, ptr %14, align 8, !tbaa !5
  %1068 = load i32, ptr %24, align 4, !tbaa !9
  %1069 = sext i32 %1068 to i64
  %1070 = getelementptr inbounds %struct.doublecomplex, ptr %1067, i64 %1069
  %1071 = getelementptr inbounds %struct.doublecomplex, ptr %1070, i32 0, i32 0
  %1072 = load double, ptr %1071, align 8, !tbaa !11
  %1073 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1074 = load double, ptr %1073, align 8, !tbaa !14
  %1075 = load ptr, ptr %14, align 8, !tbaa !5
  %1076 = load i32, ptr %24, align 4, !tbaa !9
  %1077 = sext i32 %1076 to i64
  %1078 = getelementptr inbounds %struct.doublecomplex, ptr %1075, i64 %1077
  %1079 = getelementptr inbounds %struct.doublecomplex, ptr %1078, i32 0, i32 1
  %1080 = load double, ptr %1079, align 8, !tbaa !14
  %1081 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1082 = load double, ptr %1081, align 8, !tbaa !11
  %1083 = fmul double %1080, %1082
  %1084 = call double @llvm.fmuladd.f64(double %1072, double %1074, double %1083)
  %1085 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %1084, ptr %1085, align 8, !tbaa !14
  %1086 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1087 = load double, ptr %1086, align 8, !tbaa !11
  %1088 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %1089 = load double, ptr %1088, align 8, !tbaa !11
  %1090 = fadd double %1087, %1089
  %1091 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %1090, ptr %1091, align 8, !tbaa !11
  %1092 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1093 = load double, ptr %1092, align 8, !tbaa !14
  %1094 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %1095 = load double, ptr %1094, align 8, !tbaa !14
  %1096 = fadd double %1093, %1095
  %1097 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %1096, ptr %1097, align 8, !tbaa !14
  %1098 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %1099 = load double, ptr %1098, align 8, !tbaa !11
  %1100 = load ptr, ptr %14, align 8, !tbaa !5
  %1101 = load i32, ptr %22, align 4, !tbaa !9
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds %struct.doublecomplex, ptr %1100, i64 %1102
  %1104 = getelementptr inbounds %struct.doublecomplex, ptr %1103, i32 0, i32 0
  store double %1099, ptr %1104, align 8, !tbaa !11
  %1105 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %1106 = load double, ptr %1105, align 8, !tbaa !14
  %1107 = load ptr, ptr %14, align 8, !tbaa !5
  %1108 = load i32, ptr %22, align 4, !tbaa !9
  %1109 = sext i32 %1108 to i64
  %1110 = getelementptr inbounds %struct.doublecomplex, ptr %1107, i64 %1109
  %1111 = getelementptr inbounds %struct.doublecomplex, ptr %1110, i32 0, i32 1
  store double %1106, ptr %1111, align 8, !tbaa !14
  %1112 = load i32, ptr %34, align 4, !tbaa !9
  %1113 = add nsw i32 %1112, 1
  %1114 = load i32, ptr %35, align 4, !tbaa !9
  %1115 = load i32, ptr %19, align 4, !tbaa !9
  %1116 = mul nsw i32 %1114, %1115
  %1117 = add nsw i32 %1113, %1116
  store i32 %1117, ptr %22, align 4, !tbaa !9
  %1118 = load i32, ptr %34, align 4, !tbaa !9
  %1119 = add nsw i32 %1118, 1
  %1120 = load i32, ptr %31, align 4, !tbaa !9
  %1121 = load i32, ptr %19, align 4, !tbaa !9
  %1122 = mul nsw i32 %1120, %1121
  %1123 = add nsw i32 %1119, %1122
  store i32 %1123, ptr %23, align 4, !tbaa !9
  %1124 = load ptr, ptr %14, align 8, !tbaa !5
  %1125 = load i32, ptr %23, align 4, !tbaa !9
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds %struct.doublecomplex, ptr %1124, i64 %1126
  %1128 = getelementptr inbounds %struct.doublecomplex, ptr %1127, i32 0, i32 0
  %1129 = load double, ptr %1128, align 8, !tbaa !11
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1131 = load double, ptr %1130, align 8, !tbaa !11
  %1132 = load ptr, ptr %14, align 8, !tbaa !5
  %1133 = load i32, ptr %23, align 4, !tbaa !9
  %1134 = sext i32 %1133 to i64
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %1132, i64 %1134
  %1136 = getelementptr inbounds %struct.doublecomplex, ptr %1135, i32 0, i32 1
  %1137 = load double, ptr %1136, align 8, !tbaa !14
  %1138 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1139 = load double, ptr %1138, align 8, !tbaa !14
  %1140 = fmul double %1137, %1139
  %1141 = fneg double %1140
  %1142 = call double @llvm.fmuladd.f64(double %1129, double %1131, double %1141)
  %1143 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1142, ptr %1143, align 8, !tbaa !11
  %1144 = load ptr, ptr %14, align 8, !tbaa !5
  %1145 = load i32, ptr %23, align 4, !tbaa !9
  %1146 = sext i32 %1145 to i64
  %1147 = getelementptr inbounds %struct.doublecomplex, ptr %1144, i64 %1146
  %1148 = getelementptr inbounds %struct.doublecomplex, ptr %1147, i32 0, i32 0
  %1149 = load double, ptr %1148, align 8, !tbaa !11
  %1150 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %1151 = load double, ptr %1150, align 8, !tbaa !14
  %1152 = load ptr, ptr %14, align 8, !tbaa !5
  %1153 = load i32, ptr %23, align 4, !tbaa !9
  %1154 = sext i32 %1153 to i64
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %1152, i64 %1154
  %1156 = getelementptr inbounds %struct.doublecomplex, ptr %1155, i32 0, i32 1
  %1157 = load double, ptr %1156, align 8, !tbaa !14
  %1158 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %1159 = load double, ptr %1158, align 8, !tbaa !11
  %1160 = fmul double %1157, %1159
  %1161 = call double @llvm.fmuladd.f64(double %1149, double %1151, double %1160)
  %1162 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1161, ptr %1162, align 8, !tbaa !14
  %1163 = load i32, ptr %34, align 4, !tbaa !9
  %1164 = add nsw i32 %1163, 1
  %1165 = load i32, ptr %31, align 4, !tbaa !9
  %1166 = add nsw i32 %1165, 1
  %1167 = load i32, ptr %19, align 4, !tbaa !9
  %1168 = mul nsw i32 %1166, %1167
  %1169 = add nsw i32 %1164, %1168
  store i32 %1169, ptr %24, align 4, !tbaa !9
  %1170 = load ptr, ptr %14, align 8, !tbaa !5
  %1171 = load i32, ptr %24, align 4, !tbaa !9
  %1172 = sext i32 %1171 to i64
  %1173 = getelementptr inbounds %struct.doublecomplex, ptr %1170, i64 %1172
  %1174 = getelementptr inbounds %struct.doublecomplex, ptr %1173, i32 0, i32 0
  %1175 = load double, ptr %1174, align 8, !tbaa !11
  %1176 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1177 = load double, ptr %1176, align 8, !tbaa !11
  %1178 = load ptr, ptr %14, align 8, !tbaa !5
  %1179 = load i32, ptr %24, align 4, !tbaa !9
  %1180 = sext i32 %1179 to i64
  %1181 = getelementptr inbounds %struct.doublecomplex, ptr %1178, i64 %1180
  %1182 = getelementptr inbounds %struct.doublecomplex, ptr %1181, i32 0, i32 1
  %1183 = load double, ptr %1182, align 8, !tbaa !14
  %1184 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1185 = load double, ptr %1184, align 8, !tbaa !14
  %1186 = fmul double %1183, %1185
  %1187 = fneg double %1186
  %1188 = call double @llvm.fmuladd.f64(double %1175, double %1177, double %1187)
  %1189 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %1188, ptr %1189, align 8, !tbaa !11
  %1190 = load ptr, ptr %14, align 8, !tbaa !5
  %1191 = load i32, ptr %24, align 4, !tbaa !9
  %1192 = sext i32 %1191 to i64
  %1193 = getelementptr inbounds %struct.doublecomplex, ptr %1190, i64 %1192
  %1194 = getelementptr inbounds %struct.doublecomplex, ptr %1193, i32 0, i32 0
  %1195 = load double, ptr %1194, align 8, !tbaa !11
  %1196 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %1197 = load double, ptr %1196, align 8, !tbaa !14
  %1198 = load ptr, ptr %14, align 8, !tbaa !5
  %1199 = load i32, ptr %24, align 4, !tbaa !9
  %1200 = sext i32 %1199 to i64
  %1201 = getelementptr inbounds %struct.doublecomplex, ptr %1198, i64 %1200
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %1201, i32 0, i32 1
  %1203 = load double, ptr %1202, align 8, !tbaa !14
  %1204 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %1205 = load double, ptr %1204, align 8, !tbaa !11
  %1206 = fmul double %1203, %1205
  %1207 = call double @llvm.fmuladd.f64(double %1195, double %1197, double %1206)
  %1208 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %1207, ptr %1208, align 8, !tbaa !14
  %1209 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1210 = load double, ptr %1209, align 8, !tbaa !11
  %1211 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %1212 = load double, ptr %1211, align 8, !tbaa !11
  %1213 = fadd double %1210, %1212
  %1214 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %1213, ptr %1214, align 8, !tbaa !11
  %1215 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1216 = load double, ptr %1215, align 8, !tbaa !14
  %1217 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %1218 = load double, ptr %1217, align 8, !tbaa !14
  %1219 = fadd double %1216, %1218
  %1220 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %1219, ptr %1220, align 8, !tbaa !14
  %1221 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %1222 = load double, ptr %1221, align 8, !tbaa !11
  %1223 = load ptr, ptr %14, align 8, !tbaa !5
  %1224 = load i32, ptr %22, align 4, !tbaa !9
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds %struct.doublecomplex, ptr %1223, i64 %1225
  %1227 = getelementptr inbounds %struct.doublecomplex, ptr %1226, i32 0, i32 0
  store double %1222, ptr %1227, align 8, !tbaa !11
  %1228 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %1229 = load double, ptr %1228, align 8, !tbaa !14
  %1230 = load ptr, ptr %14, align 8, !tbaa !5
  %1231 = load i32, ptr %22, align 4, !tbaa !9
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds %struct.doublecomplex, ptr %1230, i64 %1232
  %1234 = getelementptr inbounds %struct.doublecomplex, ptr %1233, i32 0, i32 1
  store double %1229, ptr %1234, align 8, !tbaa !14
  br label %1235

1235:                                             ; preds = %952
  %1236 = load i32, ptr %35, align 4, !tbaa !9
  %1237 = add nsw i32 %1236, 1
  store i32 %1237, ptr %35, align 4, !tbaa !9
  br label %948, !llvm.loop !27

1238:                                             ; preds = %948
  %1239 = load i32, ptr %34, align 4, !tbaa !9
  %1240 = add nsw i32 %1239, 2
  store i32 %1240, ptr %34, align 4, !tbaa !9
  br label %1241

1241:                                             ; preds = %1238, %943
  br label %838, !llvm.loop !28

1242:                                             ; preds = %838
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %1243

1243:                                             ; preds = %1719, %1242
  %1244 = load i32, ptr %34, align 4, !tbaa !9
  %1245 = load i32, ptr %46, align 4, !tbaa !9
  %1246 = icmp sle i32 %1244, %1245
  br i1 %1246, label %1247, label %1720

1247:                                             ; preds = %1243
  %1248 = load ptr, ptr %13, align 8, !tbaa !5
  %1249 = load i32, ptr %47, align 4, !tbaa !9
  %1250 = load i32, ptr %34, align 4, !tbaa !9
  %1251 = add nsw i32 %1249, %1250
  %1252 = sext i32 %1251 to i64
  %1253 = getelementptr inbounds i32, ptr %1248, i64 %1252
  %1254 = load i32, ptr %1253, align 4, !tbaa !9
  %1255 = icmp sgt i32 %1254, 0
  br i1 %1255, label %1256, label %1360

1256:                                             ; preds = %1247
  %1257 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1257, ptr %21, align 4, !tbaa !9
  %1258 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %1258, ptr %35, align 4, !tbaa !9
  br label %1259

1259:                                             ; preds = %1354, %1256
  %1260 = load i32, ptr %35, align 4, !tbaa !9
  %1261 = load i32, ptr %21, align 4, !tbaa !9
  %1262 = icmp sle i32 %1260, %1261
  br i1 %1262, label %1263, label %1357

1263:                                             ; preds = %1259
  %1264 = load i32, ptr %43, align 4, !tbaa !9
  %1265 = load i32, ptr %34, align 4, !tbaa !9
  %1266 = add nsw i32 %1264, %1265
  %1267 = load i32, ptr %35, align 4, !tbaa !9
  %1268 = load i32, ptr %19, align 4, !tbaa !9
  %1269 = mul nsw i32 %1267, %1268
  %1270 = add nsw i32 %1266, %1269
  store i32 %1270, ptr %22, align 4, !tbaa !9
  %1271 = load i32, ptr %47, align 4, !tbaa !9
  %1272 = load i32, ptr %34, align 4, !tbaa !9
  %1273 = add nsw i32 %1271, %1272
  %1274 = load i32, ptr %31, align 4, !tbaa !9
  %1275 = load i32, ptr %19, align 4, !tbaa !9
  %1276 = mul nsw i32 %1274, %1275
  %1277 = add nsw i32 %1273, %1276
  store i32 %1277, ptr %23, align 4, !tbaa !9
  %1278 = load i32, ptr %43, align 4, !tbaa !9
  %1279 = load i32, ptr %34, align 4, !tbaa !9
  %1280 = add nsw i32 %1278, %1279
  %1281 = load i32, ptr %35, align 4, !tbaa !9
  %1282 = load i32, ptr %19, align 4, !tbaa !9
  %1283 = mul nsw i32 %1281, %1282
  %1284 = add nsw i32 %1280, %1283
  store i32 %1284, ptr %24, align 4, !tbaa !9
  %1285 = load ptr, ptr %14, align 8, !tbaa !5
  %1286 = load i32, ptr %23, align 4, !tbaa !9
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds %struct.doublecomplex, ptr %1285, i64 %1287
  %1289 = getelementptr inbounds %struct.doublecomplex, ptr %1288, i32 0, i32 0
  %1290 = load double, ptr %1289, align 8, !tbaa !11
  %1291 = load ptr, ptr %14, align 8, !tbaa !5
  %1292 = load i32, ptr %24, align 4, !tbaa !9
  %1293 = sext i32 %1292 to i64
  %1294 = getelementptr inbounds %struct.doublecomplex, ptr %1291, i64 %1293
  %1295 = getelementptr inbounds %struct.doublecomplex, ptr %1294, i32 0, i32 0
  %1296 = load double, ptr %1295, align 8, !tbaa !11
  %1297 = load ptr, ptr %14, align 8, !tbaa !5
  %1298 = load i32, ptr %23, align 4, !tbaa !9
  %1299 = sext i32 %1298 to i64
  %1300 = getelementptr inbounds %struct.doublecomplex, ptr %1297, i64 %1299
  %1301 = getelementptr inbounds %struct.doublecomplex, ptr %1300, i32 0, i32 1
  %1302 = load double, ptr %1301, align 8, !tbaa !14
  %1303 = load ptr, ptr %14, align 8, !tbaa !5
  %1304 = load i32, ptr %24, align 4, !tbaa !9
  %1305 = sext i32 %1304 to i64
  %1306 = getelementptr inbounds %struct.doublecomplex, ptr %1303, i64 %1305
  %1307 = getelementptr inbounds %struct.doublecomplex, ptr %1306, i32 0, i32 1
  %1308 = load double, ptr %1307, align 8, !tbaa !14
  %1309 = fmul double %1302, %1308
  %1310 = fneg double %1309
  %1311 = call double @llvm.fmuladd.f64(double %1290, double %1296, double %1310)
  %1312 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %1311, ptr %1312, align 8, !tbaa !11
  %1313 = load ptr, ptr %14, align 8, !tbaa !5
  %1314 = load i32, ptr %23, align 4, !tbaa !9
  %1315 = sext i32 %1314 to i64
  %1316 = getelementptr inbounds %struct.doublecomplex, ptr %1313, i64 %1315
  %1317 = getelementptr inbounds %struct.doublecomplex, ptr %1316, i32 0, i32 0
  %1318 = load double, ptr %1317, align 8, !tbaa !11
  %1319 = load ptr, ptr %14, align 8, !tbaa !5
  %1320 = load i32, ptr %24, align 4, !tbaa !9
  %1321 = sext i32 %1320 to i64
  %1322 = getelementptr inbounds %struct.doublecomplex, ptr %1319, i64 %1321
  %1323 = getelementptr inbounds %struct.doublecomplex, ptr %1322, i32 0, i32 1
  %1324 = load double, ptr %1323, align 8, !tbaa !14
  %1325 = load ptr, ptr %14, align 8, !tbaa !5
  %1326 = load i32, ptr %23, align 4, !tbaa !9
  %1327 = sext i32 %1326 to i64
  %1328 = getelementptr inbounds %struct.doublecomplex, ptr %1325, i64 %1327
  %1329 = getelementptr inbounds %struct.doublecomplex, ptr %1328, i32 0, i32 1
  %1330 = load double, ptr %1329, align 8, !tbaa !14
  %1331 = load ptr, ptr %14, align 8, !tbaa !5
  %1332 = load i32, ptr %24, align 4, !tbaa !9
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds %struct.doublecomplex, ptr %1331, i64 %1333
  %1335 = getelementptr inbounds %struct.doublecomplex, ptr %1334, i32 0, i32 0
  %1336 = load double, ptr %1335, align 8, !tbaa !11
  %1337 = fmul double %1330, %1336
  %1338 = call double @llvm.fmuladd.f64(double %1318, double %1324, double %1337)
  %1339 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %1338, ptr %1339, align 8, !tbaa !14
  %1340 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %1341 = load double, ptr %1340, align 8, !tbaa !11
  %1342 = load ptr, ptr %14, align 8, !tbaa !5
  %1343 = load i32, ptr %22, align 4, !tbaa !9
  %1344 = sext i32 %1343 to i64
  %1345 = getelementptr inbounds %struct.doublecomplex, ptr %1342, i64 %1344
  %1346 = getelementptr inbounds %struct.doublecomplex, ptr %1345, i32 0, i32 0
  store double %1341, ptr %1346, align 8, !tbaa !11
  %1347 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %1348 = load double, ptr %1347, align 8, !tbaa !14
  %1349 = load ptr, ptr %14, align 8, !tbaa !5
  %1350 = load i32, ptr %22, align 4, !tbaa !9
  %1351 = sext i32 %1350 to i64
  %1352 = getelementptr inbounds %struct.doublecomplex, ptr %1349, i64 %1351
  %1353 = getelementptr inbounds %struct.doublecomplex, ptr %1352, i32 0, i32 1
  store double %1348, ptr %1353, align 8, !tbaa !14
  br label %1354

1354:                                             ; preds = %1263
  %1355 = load i32, ptr %35, align 4, !tbaa !9
  %1356 = add nsw i32 %1355, 1
  store i32 %1356, ptr %35, align 4, !tbaa !9
  br label %1259, !llvm.loop !29

1357:                                             ; preds = %1259
  %1358 = load i32, ptr %34, align 4, !tbaa !9
  %1359 = add nsw i32 %1358, 1
  store i32 %1359, ptr %34, align 4, !tbaa !9
  br label %1719

1360:                                             ; preds = %1247
  %1361 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1361, ptr %21, align 4, !tbaa !9
  %1362 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %1362, ptr %35, align 4, !tbaa !9
  br label %1363

1363:                                             ; preds = %1713, %1360
  %1364 = load i32, ptr %35, align 4, !tbaa !9
  %1365 = load i32, ptr %21, align 4, !tbaa !9
  %1366 = icmp sle i32 %1364, %1365
  br i1 %1366, label %1367, label %1716

1367:                                             ; preds = %1363
  %1368 = load i32, ptr %43, align 4, !tbaa !9
  %1369 = load i32, ptr %34, align 4, !tbaa !9
  %1370 = add nsw i32 %1368, %1369
  %1371 = load i32, ptr %35, align 4, !tbaa !9
  %1372 = load i32, ptr %19, align 4, !tbaa !9
  %1373 = mul nsw i32 %1371, %1372
  %1374 = add nsw i32 %1370, %1373
  store i32 %1374, ptr %22, align 4, !tbaa !9
  %1375 = load ptr, ptr %14, align 8, !tbaa !5
  %1376 = load i32, ptr %22, align 4, !tbaa !9
  %1377 = sext i32 %1376 to i64
  %1378 = getelementptr inbounds %struct.doublecomplex, ptr %1375, i64 %1377
  %1379 = getelementptr inbounds %struct.doublecomplex, ptr %1378, i32 0, i32 0
  %1380 = load double, ptr %1379, align 8, !tbaa !11
  %1381 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %1380, ptr %1381, align 8, !tbaa !11
  %1382 = load ptr, ptr %14, align 8, !tbaa !5
  %1383 = load i32, ptr %22, align 4, !tbaa !9
  %1384 = sext i32 %1383 to i64
  %1385 = getelementptr inbounds %struct.doublecomplex, ptr %1382, i64 %1384
  %1386 = getelementptr inbounds %struct.doublecomplex, ptr %1385, i32 0, i32 1
  %1387 = load double, ptr %1386, align 8, !tbaa !14
  %1388 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %1387, ptr %1388, align 8, !tbaa !14
  %1389 = load i32, ptr %43, align 4, !tbaa !9
  %1390 = load i32, ptr %34, align 4, !tbaa !9
  %1391 = add nsw i32 %1389, %1390
  %1392 = add nsw i32 %1391, 1
  %1393 = load i32, ptr %35, align 4, !tbaa !9
  %1394 = load i32, ptr %19, align 4, !tbaa !9
  %1395 = mul nsw i32 %1393, %1394
  %1396 = add nsw i32 %1392, %1395
  store i32 %1396, ptr %22, align 4, !tbaa !9
  %1397 = load ptr, ptr %14, align 8, !tbaa !5
  %1398 = load i32, ptr %22, align 4, !tbaa !9
  %1399 = sext i32 %1398 to i64
  %1400 = getelementptr inbounds %struct.doublecomplex, ptr %1397, i64 %1399
  %1401 = getelementptr inbounds %struct.doublecomplex, ptr %1400, i32 0, i32 0
  %1402 = load double, ptr %1401, align 8, !tbaa !11
  %1403 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %1402, ptr %1403, align 8, !tbaa !11
  %1404 = load ptr, ptr %14, align 8, !tbaa !5
  %1405 = load i32, ptr %22, align 4, !tbaa !9
  %1406 = sext i32 %1405 to i64
  %1407 = getelementptr inbounds %struct.doublecomplex, ptr %1404, i64 %1406
  %1408 = getelementptr inbounds %struct.doublecomplex, ptr %1407, i32 0, i32 1
  %1409 = load double, ptr %1408, align 8, !tbaa !14
  %1410 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %1409, ptr %1410, align 8, !tbaa !14
  %1411 = load i32, ptr %43, align 4, !tbaa !9
  %1412 = load i32, ptr %34, align 4, !tbaa !9
  %1413 = add nsw i32 %1411, %1412
  %1414 = load i32, ptr %35, align 4, !tbaa !9
  %1415 = load i32, ptr %19, align 4, !tbaa !9
  %1416 = mul nsw i32 %1414, %1415
  %1417 = add nsw i32 %1413, %1416
  store i32 %1417, ptr %22, align 4, !tbaa !9
  %1418 = load i32, ptr %47, align 4, !tbaa !9
  %1419 = load i32, ptr %34, align 4, !tbaa !9
  %1420 = add nsw i32 %1418, %1419
  %1421 = load i32, ptr %31, align 4, !tbaa !9
  %1422 = load i32, ptr %19, align 4, !tbaa !9
  %1423 = mul nsw i32 %1421, %1422
  %1424 = add nsw i32 %1420, %1423
  store i32 %1424, ptr %23, align 4, !tbaa !9
  %1425 = load i32, ptr %43, align 4, !tbaa !9
  %1426 = load i32, ptr %34, align 4, !tbaa !9
  %1427 = add nsw i32 %1425, %1426
  %1428 = load i32, ptr %35, align 4, !tbaa !9
  %1429 = load i32, ptr %19, align 4, !tbaa !9
  %1430 = mul nsw i32 %1428, %1429
  %1431 = add nsw i32 %1427, %1430
  store i32 %1431, ptr %24, align 4, !tbaa !9
  %1432 = load ptr, ptr %14, align 8, !tbaa !5
  %1433 = load i32, ptr %23, align 4, !tbaa !9
  %1434 = sext i32 %1433 to i64
  %1435 = getelementptr inbounds %struct.doublecomplex, ptr %1432, i64 %1434
  %1436 = getelementptr inbounds %struct.doublecomplex, ptr %1435, i32 0, i32 0
  %1437 = load double, ptr %1436, align 8, !tbaa !11
  %1438 = load ptr, ptr %14, align 8, !tbaa !5
  %1439 = load i32, ptr %24, align 4, !tbaa !9
  %1440 = sext i32 %1439 to i64
  %1441 = getelementptr inbounds %struct.doublecomplex, ptr %1438, i64 %1440
  %1442 = getelementptr inbounds %struct.doublecomplex, ptr %1441, i32 0, i32 0
  %1443 = load double, ptr %1442, align 8, !tbaa !11
  %1444 = load ptr, ptr %14, align 8, !tbaa !5
  %1445 = load i32, ptr %23, align 4, !tbaa !9
  %1446 = sext i32 %1445 to i64
  %1447 = getelementptr inbounds %struct.doublecomplex, ptr %1444, i64 %1446
  %1448 = getelementptr inbounds %struct.doublecomplex, ptr %1447, i32 0, i32 1
  %1449 = load double, ptr %1448, align 8, !tbaa !14
  %1450 = load ptr, ptr %14, align 8, !tbaa !5
  %1451 = load i32, ptr %24, align 4, !tbaa !9
  %1452 = sext i32 %1451 to i64
  %1453 = getelementptr inbounds %struct.doublecomplex, ptr %1450, i64 %1452
  %1454 = getelementptr inbounds %struct.doublecomplex, ptr %1453, i32 0, i32 1
  %1455 = load double, ptr %1454, align 8, !tbaa !14
  %1456 = fmul double %1449, %1455
  %1457 = fneg double %1456
  %1458 = call double @llvm.fmuladd.f64(double %1437, double %1443, double %1457)
  %1459 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1458, ptr %1459, align 8, !tbaa !11
  %1460 = load ptr, ptr %14, align 8, !tbaa !5
  %1461 = load i32, ptr %23, align 4, !tbaa !9
  %1462 = sext i32 %1461 to i64
  %1463 = getelementptr inbounds %struct.doublecomplex, ptr %1460, i64 %1462
  %1464 = getelementptr inbounds %struct.doublecomplex, ptr %1463, i32 0, i32 0
  %1465 = load double, ptr %1464, align 8, !tbaa !11
  %1466 = load ptr, ptr %14, align 8, !tbaa !5
  %1467 = load i32, ptr %24, align 4, !tbaa !9
  %1468 = sext i32 %1467 to i64
  %1469 = getelementptr inbounds %struct.doublecomplex, ptr %1466, i64 %1468
  %1470 = getelementptr inbounds %struct.doublecomplex, ptr %1469, i32 0, i32 1
  %1471 = load double, ptr %1470, align 8, !tbaa !14
  %1472 = load ptr, ptr %14, align 8, !tbaa !5
  %1473 = load i32, ptr %23, align 4, !tbaa !9
  %1474 = sext i32 %1473 to i64
  %1475 = getelementptr inbounds %struct.doublecomplex, ptr %1472, i64 %1474
  %1476 = getelementptr inbounds %struct.doublecomplex, ptr %1475, i32 0, i32 1
  %1477 = load double, ptr %1476, align 8, !tbaa !14
  %1478 = load ptr, ptr %14, align 8, !tbaa !5
  %1479 = load i32, ptr %24, 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 !11
  %1484 = fmul double %1477, %1483
  %1485 = call double @llvm.fmuladd.f64(double %1465, double %1471, double %1484)
  %1486 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1485, ptr %1486, align 8, !tbaa !14
  %1487 = load i32, ptr %47, align 4, !tbaa !9
  %1488 = load i32, ptr %34, align 4, !tbaa !9
  %1489 = add nsw i32 %1487, %1488
  %1490 = load i32, ptr %31, align 4, !tbaa !9
  %1491 = add nsw i32 %1490, 1
  %1492 = load i32, ptr %19, align 4, !tbaa !9
  %1493 = mul nsw i32 %1491, %1492
  %1494 = add nsw i32 %1489, %1493
  store i32 %1494, ptr %25, align 4, !tbaa !9
  %1495 = load i32, ptr %43, align 4, !tbaa !9
  %1496 = load i32, ptr %34, align 4, !tbaa !9
  %1497 = add nsw i32 %1495, %1496
  %1498 = add nsw i32 %1497, 1
  %1499 = load i32, ptr %35, align 4, !tbaa !9
  %1500 = load i32, ptr %19, align 4, !tbaa !9
  %1501 = mul nsw i32 %1499, %1500
  %1502 = add nsw i32 %1498, %1501
  store i32 %1502, ptr %26, align 4, !tbaa !9
  %1503 = load ptr, ptr %14, align 8, !tbaa !5
  %1504 = load i32, ptr %25, align 4, !tbaa !9
  %1505 = sext i32 %1504 to i64
  %1506 = getelementptr inbounds %struct.doublecomplex, ptr %1503, i64 %1505
  %1507 = getelementptr inbounds %struct.doublecomplex, ptr %1506, i32 0, i32 0
  %1508 = load double, ptr %1507, align 8, !tbaa !11
  %1509 = load ptr, ptr %14, align 8, !tbaa !5
  %1510 = load i32, ptr %26, align 4, !tbaa !9
  %1511 = sext i32 %1510 to i64
  %1512 = getelementptr inbounds %struct.doublecomplex, ptr %1509, i64 %1511
  %1513 = getelementptr inbounds %struct.doublecomplex, ptr %1512, i32 0, i32 0
  %1514 = load double, ptr %1513, align 8, !tbaa !11
  %1515 = load ptr, ptr %14, align 8, !tbaa !5
  %1516 = load i32, ptr %25, align 4, !tbaa !9
  %1517 = sext i32 %1516 to i64
  %1518 = getelementptr inbounds %struct.doublecomplex, ptr %1515, i64 %1517
  %1519 = getelementptr inbounds %struct.doublecomplex, ptr %1518, i32 0, i32 1
  %1520 = load double, ptr %1519, align 8, !tbaa !14
  %1521 = load ptr, ptr %14, align 8, !tbaa !5
  %1522 = load i32, ptr %26, align 4, !tbaa !9
  %1523 = sext i32 %1522 to i64
  %1524 = getelementptr inbounds %struct.doublecomplex, ptr %1521, i64 %1523
  %1525 = getelementptr inbounds %struct.doublecomplex, ptr %1524, i32 0, i32 1
  %1526 = load double, ptr %1525, align 8, !tbaa !14
  %1527 = fmul double %1520, %1526
  %1528 = fneg double %1527
  %1529 = call double @llvm.fmuladd.f64(double %1508, double %1514, double %1528)
  %1530 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %1529, ptr %1530, align 8, !tbaa !11
  %1531 = load ptr, ptr %14, align 8, !tbaa !5
  %1532 = load i32, ptr %25, align 4, !tbaa !9
  %1533 = sext i32 %1532 to i64
  %1534 = getelementptr inbounds %struct.doublecomplex, ptr %1531, i64 %1533
  %1535 = getelementptr inbounds %struct.doublecomplex, ptr %1534, i32 0, i32 0
  %1536 = load double, ptr %1535, align 8, !tbaa !11
  %1537 = load ptr, ptr %14, align 8, !tbaa !5
  %1538 = load i32, ptr %26, align 4, !tbaa !9
  %1539 = sext i32 %1538 to i64
  %1540 = getelementptr inbounds %struct.doublecomplex, ptr %1537, i64 %1539
  %1541 = getelementptr inbounds %struct.doublecomplex, ptr %1540, i32 0, i32 1
  %1542 = load double, ptr %1541, align 8, !tbaa !14
  %1543 = load ptr, ptr %14, align 8, !tbaa !5
  %1544 = load i32, ptr %25, align 4, !tbaa !9
  %1545 = sext i32 %1544 to i64
  %1546 = getelementptr inbounds %struct.doublecomplex, ptr %1543, i64 %1545
  %1547 = getelementptr inbounds %struct.doublecomplex, ptr %1546, i32 0, i32 1
  %1548 = load double, ptr %1547, align 8, !tbaa !14
  %1549 = load ptr, ptr %14, align 8, !tbaa !5
  %1550 = load i32, ptr %26, align 4, !tbaa !9
  %1551 = sext i32 %1550 to i64
  %1552 = getelementptr inbounds %struct.doublecomplex, ptr %1549, i64 %1551
  %1553 = getelementptr inbounds %struct.doublecomplex, ptr %1552, i32 0, i32 0
  %1554 = load double, ptr %1553, align 8, !tbaa !11
  %1555 = fmul double %1548, %1554
  %1556 = call double @llvm.fmuladd.f64(double %1536, double %1542, double %1555)
  %1557 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %1556, ptr %1557, align 8, !tbaa !14
  %1558 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1559 = load double, ptr %1558, align 8, !tbaa !11
  %1560 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %1561 = load double, ptr %1560, align 8, !tbaa !11
  %1562 = fadd double %1559, %1561
  %1563 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %1562, ptr %1563, align 8, !tbaa !11
  %1564 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1565 = load double, ptr %1564, align 8, !tbaa !14
  %1566 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %1567 = load double, ptr %1566, align 8, !tbaa !14
  %1568 = fadd double %1565, %1567
  %1569 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %1568, ptr %1569, align 8, !tbaa !14
  %1570 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %1571 = load double, ptr %1570, align 8, !tbaa !11
  %1572 = load ptr, ptr %14, align 8, !tbaa !5
  %1573 = load i32, ptr %22, align 4, !tbaa !9
  %1574 = sext i32 %1573 to i64
  %1575 = getelementptr inbounds %struct.doublecomplex, ptr %1572, i64 %1574
  %1576 = getelementptr inbounds %struct.doublecomplex, ptr %1575, i32 0, i32 0
  store double %1571, ptr %1576, align 8, !tbaa !11
  %1577 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %1578 = load double, ptr %1577, align 8, !tbaa !14
  %1579 = load ptr, ptr %14, align 8, !tbaa !5
  %1580 = load i32, ptr %22, align 4, !tbaa !9
  %1581 = sext i32 %1580 to i64
  %1582 = getelementptr inbounds %struct.doublecomplex, ptr %1579, i64 %1581
  %1583 = getelementptr inbounds %struct.doublecomplex, ptr %1582, i32 0, i32 1
  store double %1578, ptr %1583, align 8, !tbaa !14
  %1584 = load i32, ptr %43, align 4, !tbaa !9
  %1585 = load i32, ptr %34, align 4, !tbaa !9
  %1586 = add nsw i32 %1584, %1585
  %1587 = add nsw i32 %1586, 1
  %1588 = load i32, ptr %35, align 4, !tbaa !9
  %1589 = load i32, ptr %19, align 4, !tbaa !9
  %1590 = mul nsw i32 %1588, %1589
  %1591 = add nsw i32 %1587, %1590
  store i32 %1591, ptr %22, align 4, !tbaa !9
  %1592 = load i32, ptr %47, align 4, !tbaa !9
  %1593 = load i32, ptr %34, align 4, !tbaa !9
  %1594 = add nsw i32 %1592, %1593
  %1595 = add nsw i32 %1594, 1
  %1596 = load i32, ptr %31, align 4, !tbaa !9
  %1597 = load i32, ptr %19, align 4, !tbaa !9
  %1598 = mul nsw i32 %1596, %1597
  %1599 = add nsw i32 %1595, %1598
  store i32 %1599, ptr %23, align 4, !tbaa !9
  %1600 = load ptr, ptr %14, align 8, !tbaa !5
  %1601 = load i32, ptr %23, align 4, !tbaa !9
  %1602 = sext i32 %1601 to i64
  %1603 = getelementptr inbounds %struct.doublecomplex, ptr %1600, i64 %1602
  %1604 = getelementptr inbounds %struct.doublecomplex, ptr %1603, i32 0, i32 0
  %1605 = load double, ptr %1604, align 8, !tbaa !11
  %1606 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1607 = load double, ptr %1606, align 8, !tbaa !11
  %1608 = load ptr, ptr %14, align 8, !tbaa !5
  %1609 = load i32, ptr %23, align 4, !tbaa !9
  %1610 = sext i32 %1609 to i64
  %1611 = getelementptr inbounds %struct.doublecomplex, ptr %1608, i64 %1610
  %1612 = getelementptr inbounds %struct.doublecomplex, ptr %1611, i32 0, i32 1
  %1613 = load double, ptr %1612, align 8, !tbaa !14
  %1614 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1615 = load double, ptr %1614, align 8, !tbaa !14
  %1616 = fmul double %1613, %1615
  %1617 = fneg double %1616
  %1618 = call double @llvm.fmuladd.f64(double %1605, double %1607, double %1617)
  %1619 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %1618, ptr %1619, align 8, !tbaa !11
  %1620 = load ptr, ptr %14, align 8, !tbaa !5
  %1621 = load i32, ptr %23, align 4, !tbaa !9
  %1622 = sext i32 %1621 to i64
  %1623 = getelementptr inbounds %struct.doublecomplex, ptr %1620, i64 %1622
  %1624 = getelementptr inbounds %struct.doublecomplex, ptr %1623, i32 0, i32 0
  %1625 = load double, ptr %1624, align 8, !tbaa !11
  %1626 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %1627 = load double, ptr %1626, align 8, !tbaa !14
  %1628 = load ptr, ptr %14, align 8, !tbaa !5
  %1629 = load i32, ptr %23, align 4, !tbaa !9
  %1630 = sext i32 %1629 to i64
  %1631 = getelementptr inbounds %struct.doublecomplex, ptr %1628, i64 %1630
  %1632 = getelementptr inbounds %struct.doublecomplex, ptr %1631, i32 0, i32 1
  %1633 = load double, ptr %1632, align 8, !tbaa !14
  %1634 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %1635 = load double, ptr %1634, align 8, !tbaa !11
  %1636 = fmul double %1633, %1635
  %1637 = call double @llvm.fmuladd.f64(double %1625, double %1627, double %1636)
  %1638 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %1637, ptr %1638, align 8, !tbaa !14
  %1639 = load i32, ptr %47, align 4, !tbaa !9
  %1640 = load i32, ptr %34, align 4, !tbaa !9
  %1641 = add nsw i32 %1639, %1640
  %1642 = add nsw i32 %1641, 1
  %1643 = load i32, ptr %31, align 4, !tbaa !9
  %1644 = add nsw i32 %1643, 1
  %1645 = load i32, ptr %19, align 4, !tbaa !9
  %1646 = mul nsw i32 %1644, %1645
  %1647 = add nsw i32 %1642, %1646
  store i32 %1647, ptr %24, align 4, !tbaa !9
  %1648 = load ptr, ptr %14, align 8, !tbaa !5
  %1649 = load i32, ptr %24, align 4, !tbaa !9
  %1650 = sext i32 %1649 to i64
  %1651 = getelementptr inbounds %struct.doublecomplex, ptr %1648, i64 %1650
  %1652 = getelementptr inbounds %struct.doublecomplex, ptr %1651, i32 0, i32 0
  %1653 = load double, ptr %1652, align 8, !tbaa !11
  %1654 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1655 = load double, ptr %1654, align 8, !tbaa !11
  %1656 = load ptr, ptr %14, align 8, !tbaa !5
  %1657 = load i32, ptr %24, align 4, !tbaa !9
  %1658 = sext i32 %1657 to i64
  %1659 = getelementptr inbounds %struct.doublecomplex, ptr %1656, i64 %1658
  %1660 = getelementptr inbounds %struct.doublecomplex, ptr %1659, i32 0, i32 1
  %1661 = load double, ptr %1660, align 8, !tbaa !14
  %1662 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1663 = load double, ptr %1662, align 8, !tbaa !14
  %1664 = fmul double %1661, %1663
  %1665 = fneg double %1664
  %1666 = call double @llvm.fmuladd.f64(double %1653, double %1655, double %1665)
  %1667 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %1666, ptr %1667, align 8, !tbaa !11
  %1668 = load ptr, ptr %14, align 8, !tbaa !5
  %1669 = load i32, ptr %24, align 4, !tbaa !9
  %1670 = sext i32 %1669 to i64
  %1671 = getelementptr inbounds %struct.doublecomplex, ptr %1668, i64 %1670
  %1672 = getelementptr inbounds %struct.doublecomplex, ptr %1671, i32 0, i32 0
  %1673 = load double, ptr %1672, align 8, !tbaa !11
  %1674 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %1675 = load double, ptr %1674, align 8, !tbaa !14
  %1676 = load ptr, ptr %14, align 8, !tbaa !5
  %1677 = load i32, ptr %24, align 4, !tbaa !9
  %1678 = sext i32 %1677 to i64
  %1679 = getelementptr inbounds %struct.doublecomplex, ptr %1676, i64 %1678
  %1680 = getelementptr inbounds %struct.doublecomplex, ptr %1679, i32 0, i32 1
  %1681 = load double, ptr %1680, align 8, !tbaa !14
  %1682 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %1683 = load double, ptr %1682, align 8, !tbaa !11
  %1684 = fmul double %1681, %1683
  %1685 = call double @llvm.fmuladd.f64(double %1673, double %1675, double %1684)
  %1686 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %1685, ptr %1686, align 8, !tbaa !14
  %1687 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %1688 = load double, ptr %1687, align 8, !tbaa !11
  %1689 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %1690 = load double, ptr %1689, align 8, !tbaa !11
  %1691 = fadd double %1688, %1690
  %1692 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %1691, ptr %1692, align 8, !tbaa !11
  %1693 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %1694 = load double, ptr %1693, align 8, !tbaa !14
  %1695 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %1696 = load double, ptr %1695, align 8, !tbaa !14
  %1697 = fadd double %1694, %1696
  %1698 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %1697, ptr %1698, align 8, !tbaa !14
  %1699 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %1700 = load double, ptr %1699, align 8, !tbaa !11
  %1701 = load ptr, ptr %14, align 8, !tbaa !5
  %1702 = load i32, ptr %22, align 4, !tbaa !9
  %1703 = sext i32 %1702 to i64
  %1704 = getelementptr inbounds %struct.doublecomplex, ptr %1701, i64 %1703
  %1705 = getelementptr inbounds %struct.doublecomplex, ptr %1704, i32 0, i32 0
  store double %1700, ptr %1705, align 8, !tbaa !11
  %1706 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %1707 = load double, ptr %1706, align 8, !tbaa !14
  %1708 = load ptr, ptr %14, align 8, !tbaa !5
  %1709 = load i32, ptr %22, align 4, !tbaa !9
  %1710 = sext i32 %1709 to i64
  %1711 = getelementptr inbounds %struct.doublecomplex, ptr %1708, i64 %1710
  %1712 = getelementptr inbounds %struct.doublecomplex, ptr %1711, i32 0, i32 1
  store double %1707, ptr %1712, align 8, !tbaa !14
  br label %1713

1713:                                             ; preds = %1367
  %1714 = load i32, ptr %35, align 4, !tbaa !9
  %1715 = add nsw i32 %1714, 1
  store i32 %1715, ptr %35, align 4, !tbaa !9
  br label %1363, !llvm.loop !30

1716:                                             ; preds = %1363
  %1717 = load i32, ptr %34, align 4, !tbaa !9
  %1718 = add nsw i32 %1717, 2
  store i32 %1718, ptr %34, align 4, !tbaa !9
  br label %1719

1719:                                             ; preds = %1716, %1357
  br label %1243, !llvm.loop !31

1720:                                             ; preds = %1243
  %1721 = load ptr, ptr %10, align 8, !tbaa !5
  %1722 = load i32, ptr %1721, align 4, !tbaa !9
  %1723 = load ptr, ptr %15, align 8, !tbaa !5
  %1724 = load i32, ptr %1723, align 4, !tbaa !9
  %1725 = add nsw i32 %1722, %1724
  %1726 = add nsw i32 %1725, 1
  store i32 %1726, ptr %21, align 4, !tbaa !9
  %1727 = load ptr, ptr %11, align 8, !tbaa !5
  %1728 = load i32, ptr %47, align 4, !tbaa !9
  %1729 = add nsw i32 %1728, 1
  %1730 = load i32, ptr %47, align 4, !tbaa !9
  %1731 = add nsw i32 %1730, 1
  %1732 = load i32, ptr %17, align 4, !tbaa !9
  %1733 = mul nsw i32 %1731, %1732
  %1734 = add nsw i32 %1729, %1733
  %1735 = sext i32 %1734 to i64
  %1736 = getelementptr inbounds %struct.doublecomplex, ptr %1727, i64 %1735
  %1737 = load ptr, ptr %12, align 8, !tbaa !5
  %1738 = load ptr, ptr %14, align 8, !tbaa !5
  %1739 = load i32, ptr %43, align 4, !tbaa !9
  %1740 = add nsw i32 %1739, 1
  %1741 = load i32, ptr %19, align 4, !tbaa !9
  %1742 = add nsw i32 %1740, %1741
  %1743 = sext i32 %1742 to i64
  %1744 = getelementptr inbounds %struct.doublecomplex, ptr %1738, i64 %1743
  call void @ztrmm_(ptr noundef @.str.1, ptr noundef @.str, ptr noundef @.str.3, ptr noundef @.str, ptr noundef %46, ptr noundef %46, ptr noundef @c_b1, ptr noundef %1736, ptr noundef %1737, ptr noundef %1744, ptr noundef %21)
  %1745 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1745, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %1746

1746:                                             ; preds = %1800, %1720
  %1747 = load i32, ptr %34, align 4, !tbaa !9
  %1748 = load i32, ptr %21, align 4, !tbaa !9
  %1749 = icmp sle i32 %1747, %1748
  br i1 %1749, label %1750, label %1803

1750:                                             ; preds = %1746
  %1751 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1751, ptr %22, align 4, !tbaa !9
  %1752 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %1752, ptr %35, align 4, !tbaa !9
  br label %1753

1753:                                             ; preds = %1796, %1750
  %1754 = load i32, ptr %35, align 4, !tbaa !9
  %1755 = load i32, ptr %22, align 4, !tbaa !9
  %1756 = icmp sle i32 %1754, %1755
  br i1 %1756, label %1757, label %1799

1757:                                             ; preds = %1753
  %1758 = load i32, ptr %47, align 4, !tbaa !9
  %1759 = load i32, ptr %34, align 4, !tbaa !9
  %1760 = add nsw i32 %1758, %1759
  %1761 = load i32, ptr %47, align 4, !tbaa !9
  %1762 = load i32, ptr %35, align 4, !tbaa !9
  %1763 = add nsw i32 %1761, %1762
  %1764 = load i32, ptr %17, align 4, !tbaa !9
  %1765 = mul nsw i32 %1763, %1764
  %1766 = add nsw i32 %1760, %1765
  store i32 %1766, ptr %23, align 4, !tbaa !9
  %1767 = load i32, ptr %43, align 4, !tbaa !9
  %1768 = load i32, ptr %34, align 4, !tbaa !9
  %1769 = add nsw i32 %1767, %1768
  %1770 = load i32, ptr %35, align 4, !tbaa !9
  %1771 = load i32, ptr %19, align 4, !tbaa !9
  %1772 = mul nsw i32 %1770, %1771
  %1773 = add nsw i32 %1769, %1772
  store i32 %1773, ptr %24, align 4, !tbaa !9
  %1774 = load ptr, ptr %14, align 8, !tbaa !5
  %1775 = load i32, ptr %24, align 4, !tbaa !9
  %1776 = sext i32 %1775 to i64
  %1777 = getelementptr inbounds %struct.doublecomplex, ptr %1774, i64 %1776
  %1778 = getelementptr inbounds %struct.doublecomplex, ptr %1777, i32 0, i32 0
  %1779 = load double, ptr %1778, align 8, !tbaa !11
  %1780 = load ptr, ptr %11, align 8, !tbaa !5
  %1781 = load i32, ptr %23, align 4, !tbaa !9
  %1782 = sext i32 %1781 to i64
  %1783 = getelementptr inbounds %struct.doublecomplex, ptr %1780, i64 %1782
  %1784 = getelementptr inbounds %struct.doublecomplex, ptr %1783, i32 0, i32 0
  store double %1779, ptr %1784, align 8, !tbaa !11
  %1785 = load ptr, ptr %14, align 8, !tbaa !5
  %1786 = load i32, ptr %24, align 4, !tbaa !9
  %1787 = sext i32 %1786 to i64
  %1788 = getelementptr inbounds %struct.doublecomplex, ptr %1785, i64 %1787
  %1789 = getelementptr inbounds %struct.doublecomplex, ptr %1788, i32 0, i32 1
  %1790 = load double, ptr %1789, align 8, !tbaa !14
  %1791 = load ptr, ptr %11, align 8, !tbaa !5
  %1792 = load i32, ptr %23, align 4, !tbaa !9
  %1793 = sext i32 %1792 to i64
  %1794 = getelementptr inbounds %struct.doublecomplex, ptr %1791, i64 %1793
  %1795 = getelementptr inbounds %struct.doublecomplex, ptr %1794, i32 0, i32 1
  store double %1790, ptr %1795, align 8, !tbaa !14
  br label %1796

1796:                                             ; preds = %1757
  %1797 = load i32, ptr %35, align 4, !tbaa !9
  %1798 = add nsw i32 %1797, 1
  store i32 %1798, ptr %35, align 4, !tbaa !9
  br label %1753, !llvm.loop !32

1799:                                             ; preds = %1753
  br label %1800

1800:                                             ; preds = %1799
  %1801 = load i32, ptr %34, align 4, !tbaa !9
  %1802 = add nsw i32 %1801, 1
  store i32 %1802, ptr %34, align 4, !tbaa !9
  br label %1746, !llvm.loop !33

1803:                                             ; preds = %1746
  %1804 = load ptr, ptr %10, align 8, !tbaa !5
  %1805 = load i32, ptr %1804, align 4, !tbaa !9
  %1806 = load ptr, ptr %15, align 8, !tbaa !5
  %1807 = load i32, ptr %1806, align 4, !tbaa !9
  %1808 = add nsw i32 %1805, %1807
  %1809 = add nsw i32 %1808, 1
  store i32 %1809, ptr %21, align 4, !tbaa !9
  %1810 = load ptr, ptr %10, align 8, !tbaa !5
  %1811 = load i32, ptr %1810, align 4, !tbaa !9
  %1812 = load ptr, ptr %15, align 8, !tbaa !5
  %1813 = load i32, ptr %1812, align 4, !tbaa !9
  %1814 = add nsw i32 %1811, %1813
  %1815 = add nsw i32 %1814, 1
  store i32 %1815, ptr %22, align 4, !tbaa !9
  %1816 = load ptr, ptr %11, align 8, !tbaa !5
  %1817 = load i32, ptr %47, align 4, !tbaa !9
  %1818 = add nsw i32 %1817, 1
  %1819 = load i32, ptr %17, align 4, !tbaa !9
  %1820 = mul nsw i32 %1818, %1819
  %1821 = add nsw i32 %1820, 1
  %1822 = sext i32 %1821 to i64
  %1823 = getelementptr inbounds %struct.doublecomplex, ptr %1816, i64 %1822
  %1824 = load ptr, ptr %12, align 8, !tbaa !5
  %1825 = load ptr, ptr %14, align 8, !tbaa !5
  %1826 = load i32, ptr %20, align 4, !tbaa !9
  %1827 = sext i32 %1826 to i64
  %1828 = getelementptr inbounds %struct.doublecomplex, ptr %1825, i64 %1827
  %1829 = load ptr, ptr %14, align 8, !tbaa !5
  %1830 = load i32, ptr %43, align 4, !tbaa !9
  %1831 = add nsw i32 %1830, 1
  %1832 = load i32, ptr %19, align 4, !tbaa !9
  %1833 = add nsw i32 %1831, %1832
  %1834 = sext i32 %1833 to i64
  %1835 = getelementptr inbounds %struct.doublecomplex, ptr %1829, i64 %1834
  call void @zgemm_(ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %46, ptr noundef %46, ptr noundef %47, ptr noundef @c_b1, ptr noundef %1823, ptr noundef %1824, ptr noundef %1828, ptr noundef %21, ptr noundef @c_b2, ptr noundef %1835, ptr noundef %22)
  %1836 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1836, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %1837

1837:                                             ; preds = %1920, %1803
  %1838 = load i32, ptr %34, align 4, !tbaa !9
  %1839 = load i32, ptr %21, align 4, !tbaa !9
  %1840 = icmp sle i32 %1838, %1839
  br i1 %1840, label %1841, label %1923

1841:                                             ; preds = %1837
  %1842 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1842, ptr %22, align 4, !tbaa !9
  %1843 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %1843, ptr %35, align 4, !tbaa !9
  br label %1844

1844:                                             ; preds = %1916, %1841
  %1845 = load i32, ptr %35, align 4, !tbaa !9
  %1846 = load i32, ptr %22, align 4, !tbaa !9
  %1847 = icmp sle i32 %1845, %1846
  br i1 %1847, label %1848, label %1919

1848:                                             ; preds = %1844
  %1849 = load i32, ptr %47, align 4, !tbaa !9
  %1850 = load i32, ptr %34, align 4, !tbaa !9
  %1851 = add nsw i32 %1849, %1850
  %1852 = load i32, ptr %47, align 4, !tbaa !9
  %1853 = load i32, ptr %35, align 4, !tbaa !9
  %1854 = add nsw i32 %1852, %1853
  %1855 = load i32, ptr %17, align 4, !tbaa !9
  %1856 = mul nsw i32 %1854, %1855
  %1857 = add nsw i32 %1851, %1856
  store i32 %1857, ptr %23, align 4, !tbaa !9
  %1858 = load i32, ptr %47, align 4, !tbaa !9
  %1859 = load i32, ptr %34, align 4, !tbaa !9
  %1860 = add nsw i32 %1858, %1859
  %1861 = load i32, ptr %47, align 4, !tbaa !9
  %1862 = load i32, ptr %35, align 4, !tbaa !9
  %1863 = add nsw i32 %1861, %1862
  %1864 = load i32, ptr %17, align 4, !tbaa !9
  %1865 = mul nsw i32 %1863, %1864
  %1866 = add nsw i32 %1860, %1865
  store i32 %1866, ptr %24, align 4, !tbaa !9
  %1867 = load i32, ptr %43, align 4, !tbaa !9
  %1868 = load i32, ptr %34, align 4, !tbaa !9
  %1869 = add nsw i32 %1867, %1868
  %1870 = load i32, ptr %35, align 4, !tbaa !9
  %1871 = load i32, ptr %19, align 4, !tbaa !9
  %1872 = mul nsw i32 %1870, %1871
  %1873 = add nsw i32 %1869, %1872
  store i32 %1873, ptr %25, align 4, !tbaa !9
  %1874 = load ptr, ptr %11, align 8, !tbaa !5
  %1875 = load i32, ptr %24, align 4, !tbaa !9
  %1876 = sext i32 %1875 to i64
  %1877 = getelementptr inbounds %struct.doublecomplex, ptr %1874, i64 %1876
  %1878 = getelementptr inbounds %struct.doublecomplex, ptr %1877, i32 0, i32 0
  %1879 = load double, ptr %1878, align 8, !tbaa !11
  %1880 = load ptr, ptr %14, align 8, !tbaa !5
  %1881 = load i32, ptr %25, align 4, !tbaa !9
  %1882 = sext i32 %1881 to i64
  %1883 = getelementptr inbounds %struct.doublecomplex, ptr %1880, i64 %1882
  %1884 = getelementptr inbounds %struct.doublecomplex, ptr %1883, i32 0, i32 0
  %1885 = load double, ptr %1884, align 8, !tbaa !11
  %1886 = fadd double %1879, %1885
  %1887 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %1886, ptr %1887, align 8, !tbaa !11
  %1888 = load ptr, ptr %11, align 8, !tbaa !5
  %1889 = load i32, ptr %24, align 4, !tbaa !9
  %1890 = sext i32 %1889 to i64
  %1891 = getelementptr inbounds %struct.doublecomplex, ptr %1888, i64 %1890
  %1892 = getelementptr inbounds %struct.doublecomplex, ptr %1891, i32 0, i32 1
  %1893 = load double, ptr %1892, align 8, !tbaa !14
  %1894 = load ptr, ptr %14, align 8, !tbaa !5
  %1895 = load i32, ptr %25, align 4, !tbaa !9
  %1896 = sext i32 %1895 to i64
  %1897 = getelementptr inbounds %struct.doublecomplex, ptr %1894, i64 %1896
  %1898 = getelementptr inbounds %struct.doublecomplex, ptr %1897, i32 0, i32 1
  %1899 = load double, ptr %1898, align 8, !tbaa !14
  %1900 = fadd double %1893, %1899
  %1901 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %1900, ptr %1901, align 8, !tbaa !14
  %1902 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %1903 = load double, ptr %1902, align 8, !tbaa !11
  %1904 = load ptr, ptr %11, align 8, !tbaa !5
  %1905 = load i32, ptr %23, align 4, !tbaa !9
  %1906 = sext i32 %1905 to i64
  %1907 = getelementptr inbounds %struct.doublecomplex, ptr %1904, i64 %1906
  %1908 = getelementptr inbounds %struct.doublecomplex, ptr %1907, i32 0, i32 0
  store double %1903, ptr %1908, align 8, !tbaa !11
  %1909 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %1910 = load double, ptr %1909, align 8, !tbaa !14
  %1911 = load ptr, ptr %11, align 8, !tbaa !5
  %1912 = load i32, ptr %23, align 4, !tbaa !9
  %1913 = sext i32 %1912 to i64
  %1914 = getelementptr inbounds %struct.doublecomplex, ptr %1911, i64 %1913
  %1915 = getelementptr inbounds %struct.doublecomplex, ptr %1914, i32 0, i32 1
  store double %1910, ptr %1915, align 8, !tbaa !14
  br label %1916

1916:                                             ; preds = %1848
  %1917 = load i32, ptr %35, align 4, !tbaa !9
  %1918 = add nsw i32 %1917, 1
  store i32 %1918, ptr %35, align 4, !tbaa !9
  br label %1844, !llvm.loop !34

1919:                                             ; preds = %1844
  br label %1920

1920:                                             ; preds = %1919
  %1921 = load i32, ptr %34, align 4, !tbaa !9
  %1922 = add nsw i32 %1921, 1
  store i32 %1922, ptr %34, align 4, !tbaa !9
  br label %1837, !llvm.loop !35

1923:                                             ; preds = %1837
  %1924 = load ptr, ptr %10, align 8, !tbaa !5
  %1925 = load i32, ptr %1924, align 4, !tbaa !9
  %1926 = load ptr, ptr %15, align 8, !tbaa !5
  %1927 = load i32, ptr %1926, align 4, !tbaa !9
  %1928 = add nsw i32 %1925, %1927
  %1929 = add nsw i32 %1928, 1
  store i32 %1929, ptr %21, align 4, !tbaa !9
  %1930 = load ptr, ptr %9, align 8, !tbaa !5
  %1931 = load ptr, ptr %11, align 8, !tbaa !5
  %1932 = load i32, ptr %18, align 4, !tbaa !9
  %1933 = sext i32 %1932 to i64
  %1934 = getelementptr inbounds %struct.doublecomplex, ptr %1931, i64 %1933
  %1935 = load ptr, ptr %12, align 8, !tbaa !5
  %1936 = load ptr, ptr %14, align 8, !tbaa !5
  %1937 = load i32, ptr %20, align 4, !tbaa !9
  %1938 = sext i32 %1937 to i64
  %1939 = getelementptr inbounds %struct.doublecomplex, ptr %1936, i64 %1938
  call void @ztrmm_(ptr noundef @.str.1, ptr noundef %1930, ptr noundef @.str.3, ptr noundef @.str, ptr noundef %47, ptr noundef %46, ptr noundef @c_b1, ptr noundef %1934, ptr noundef %1935, ptr noundef %1939, ptr noundef %21)
  %1940 = load i32, ptr %47, align 4, !tbaa !9
  store i32 %1940, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %1941

1941:                                             ; preds = %1990, %1923
  %1942 = load i32, ptr %34, align 4, !tbaa !9
  %1943 = load i32, ptr %21, align 4, !tbaa !9
  %1944 = icmp sle i32 %1942, %1943
  br i1 %1944, label %1945, label %1993

1945:                                             ; preds = %1941
  %1946 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %1946, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %1947

1947:                                             ; preds = %1986, %1945
  %1948 = load i32, ptr %35, align 4, !tbaa !9
  %1949 = load i32, ptr %22, align 4, !tbaa !9
  %1950 = icmp sle i32 %1948, %1949
  br i1 %1950, label %1951, label %1989

1951:                                             ; preds = %1947
  %1952 = load i32, ptr %34, align 4, !tbaa !9
  %1953 = load i32, ptr %47, align 4, !tbaa !9
  %1954 = load i32, ptr %35, align 4, !tbaa !9
  %1955 = add nsw i32 %1953, %1954
  %1956 = load i32, ptr %17, align 4, !tbaa !9
  %1957 = mul nsw i32 %1955, %1956
  %1958 = add nsw i32 %1952, %1957
  store i32 %1958, ptr %23, align 4, !tbaa !9
  %1959 = load i32, ptr %34, align 4, !tbaa !9
  %1960 = load i32, ptr %35, align 4, !tbaa !9
  %1961 = load i32, ptr %19, align 4, !tbaa !9
  %1962 = mul nsw i32 %1960, %1961
  %1963 = add nsw i32 %1959, %1962
  store i32 %1963, ptr %24, align 4, !tbaa !9
  %1964 = load ptr, ptr %14, align 8, !tbaa !5
  %1965 = load i32, ptr %24, align 4, !tbaa !9
  %1966 = sext i32 %1965 to i64
  %1967 = getelementptr inbounds %struct.doublecomplex, ptr %1964, i64 %1966
  %1968 = getelementptr inbounds %struct.doublecomplex, ptr %1967, i32 0, i32 0
  %1969 = load double, ptr %1968, align 8, !tbaa !11
  %1970 = load ptr, ptr %11, align 8, !tbaa !5
  %1971 = load i32, ptr %23, align 4, !tbaa !9
  %1972 = sext i32 %1971 to i64
  %1973 = getelementptr inbounds %struct.doublecomplex, ptr %1970, i64 %1972
  %1974 = getelementptr inbounds %struct.doublecomplex, ptr %1973, i32 0, i32 0
  store double %1969, ptr %1974, align 8, !tbaa !11
  %1975 = load ptr, ptr %14, align 8, !tbaa !5
  %1976 = load i32, ptr %24, align 4, !tbaa !9
  %1977 = sext i32 %1976 to i64
  %1978 = getelementptr inbounds %struct.doublecomplex, ptr %1975, i64 %1977
  %1979 = getelementptr inbounds %struct.doublecomplex, ptr %1978, i32 0, i32 1
  %1980 = load double, ptr %1979, align 8, !tbaa !14
  %1981 = load ptr, ptr %11, align 8, !tbaa !5
  %1982 = load i32, ptr %23, align 4, !tbaa !9
  %1983 = sext i32 %1982 to i64
  %1984 = getelementptr inbounds %struct.doublecomplex, ptr %1981, i64 %1983
  %1985 = getelementptr inbounds %struct.doublecomplex, ptr %1984, i32 0, i32 1
  store double %1980, ptr %1985, align 8, !tbaa !14
  br label %1986

1986:                                             ; preds = %1951
  %1987 = load i32, ptr %35, align 4, !tbaa !9
  %1988 = add nsw i32 %1987, 1
  store i32 %1988, ptr %35, align 4, !tbaa !9
  br label %1947, !llvm.loop !36

1989:                                             ; preds = %1947
  br label %1990

1990:                                             ; preds = %1989
  %1991 = load i32, ptr %34, align 4, !tbaa !9
  %1992 = add nsw i32 %1991, 1
  store i32 %1992, ptr %34, align 4, !tbaa !9
  br label %1941, !llvm.loop !37

1993:                                             ; preds = %1941
  br label %632, !llvm.loop !38

1994:                                             ; preds = %632
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %1995

1995:                                             ; preds = %2076, %1994
  %1996 = load i32, ptr %34, align 4, !tbaa !9
  %1997 = load ptr, ptr %10, align 8, !tbaa !5
  %1998 = load i32, ptr %1997, align 4, !tbaa !9
  %1999 = icmp sle i32 %1996, %1998
  br i1 %1999, label %2000, label %2079

2000:                                             ; preds = %1995
  %2001 = load ptr, ptr %13, align 8, !tbaa !5
  %2002 = load i32, ptr %34, align 4, !tbaa !9
  %2003 = sext i32 %2002 to i64
  %2004 = getelementptr inbounds i32, ptr %2001, i64 %2003
  %2005 = load i32, ptr %2004, align 4, !tbaa !9
  %2006 = icmp sgt i32 %2005, 0
  br i1 %2006, label %2007, label %2037

2007:                                             ; preds = %2000
  %2008 = load ptr, ptr %13, align 8, !tbaa !5
  %2009 = load i32, ptr %34, align 4, !tbaa !9
  %2010 = sext i32 %2009 to i64
  %2011 = getelementptr inbounds i32, ptr %2008, i64 %2010
  %2012 = load i32, ptr %2011, align 4, !tbaa !9
  store i32 %2012, ptr %45, align 4, !tbaa !9
  %2013 = load i32, ptr %34, align 4, !tbaa !9
  %2014 = load i32, ptr %45, align 4, !tbaa !9
  %2015 = icmp slt i32 %2013, %2014
  br i1 %2015, label %2016, label %2024

2016:                                             ; preds = %2007
  %2017 = load ptr, ptr %9, align 8, !tbaa !5
  %2018 = load ptr, ptr %10, align 8, !tbaa !5
  %2019 = load ptr, ptr %11, align 8, !tbaa !5
  %2020 = load i32, ptr %18, align 4, !tbaa !9
  %2021 = sext i32 %2020 to i64
  %2022 = getelementptr inbounds %struct.doublecomplex, ptr %2019, i64 %2021
  %2023 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %2017, ptr noundef %2018, ptr noundef %2022, ptr noundef %2023, ptr noundef %34, ptr noundef %45)
  br label %2024

2024:                                             ; preds = %2016, %2007
  %2025 = load i32, ptr %34, align 4, !tbaa !9
  %2026 = load i32, ptr %45, align 4, !tbaa !9
  %2027 = icmp sgt i32 %2025, %2026
  br i1 %2027, label %2028, label %2036

2028:                                             ; preds = %2024
  %2029 = load ptr, ptr %9, align 8, !tbaa !5
  %2030 = load ptr, ptr %10, align 8, !tbaa !5
  %2031 = load ptr, ptr %11, align 8, !tbaa !5
  %2032 = load i32, ptr %18, align 4, !tbaa !9
  %2033 = sext i32 %2032 to i64
  %2034 = getelementptr inbounds %struct.doublecomplex, ptr %2031, i64 %2033
  %2035 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %2029, ptr noundef %2030, ptr noundef %2034, ptr noundef %2035, ptr noundef %45, ptr noundef %34)
  br label %2036

2036:                                             ; preds = %2028, %2024
  br label %2076

2037:                                             ; preds = %2000
  %2038 = load ptr, ptr %13, align 8, !tbaa !5
  %2039 = load i32, ptr %34, align 4, !tbaa !9
  %2040 = sext i32 %2039 to i64
  %2041 = getelementptr inbounds i32, ptr %2038, i64 %2040
  %2042 = load i32, ptr %2041, align 4, !tbaa !9
  %2043 = sub nsw i32 0, %2042
  store i32 %2043, ptr %45, align 4, !tbaa !9
  %2044 = load i32, ptr %34, align 4, !tbaa !9
  %2045 = add nsw i32 %2044, 1
  store i32 %2045, ptr %34, align 4, !tbaa !9
  %2046 = load i32, ptr %34, align 4, !tbaa !9
  %2047 = sub nsw i32 %2046, 1
  %2048 = load i32, ptr %45, align 4, !tbaa !9
  %2049 = icmp slt i32 %2047, %2048
  br i1 %2049, label %2050, label %2060

2050:                                             ; preds = %2037
  %2051 = load i32, ptr %34, align 4, !tbaa !9
  %2052 = sub nsw i32 %2051, 1
  store i32 %2052, ptr %21, align 4, !tbaa !9
  %2053 = load ptr, ptr %9, align 8, !tbaa !5
  %2054 = load ptr, ptr %10, align 8, !tbaa !5
  %2055 = load ptr, ptr %11, align 8, !tbaa !5
  %2056 = load i32, ptr %18, align 4, !tbaa !9
  %2057 = sext i32 %2056 to i64
  %2058 = getelementptr inbounds %struct.doublecomplex, ptr %2055, i64 %2057
  %2059 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %2053, ptr noundef %2054, ptr noundef %2058, ptr noundef %2059, ptr noundef %21, ptr noundef %45)
  br label %2060

2060:                                             ; preds = %2050, %2037
  %2061 = load i32, ptr %34, align 4, !tbaa !9
  %2062 = sub nsw i32 %2061, 1
  %2063 = load i32, ptr %45, align 4, !tbaa !9
  %2064 = icmp sgt i32 %2062, %2063
  br i1 %2064, label %2065, label %2075

2065:                                             ; preds = %2060
  %2066 = load i32, ptr %34, align 4, !tbaa !9
  %2067 = sub nsw i32 %2066, 1
  store i32 %2067, ptr %21, align 4, !tbaa !9
  %2068 = load ptr, ptr %9, align 8, !tbaa !5
  %2069 = load ptr, ptr %10, align 8, !tbaa !5
  %2070 = load ptr, ptr %11, align 8, !tbaa !5
  %2071 = load i32, ptr %18, align 4, !tbaa !9
  %2072 = sext i32 %2071 to i64
  %2073 = getelementptr inbounds %struct.doublecomplex, ptr %2070, i64 %2072
  %2074 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %2068, ptr noundef %2069, ptr noundef %2073, ptr noundef %2074, ptr noundef %45, ptr noundef %21)
  br label %2075

2075:                                             ; preds = %2065, %2060
  br label %2076

2076:                                             ; preds = %2075, %2036
  %2077 = load i32, ptr %34, align 4, !tbaa !9
  %2078 = add nsw i32 %2077, 1
  store i32 %2078, ptr %34, align 4, !tbaa !9
  br label %1995, !llvm.loop !39

2079:                                             ; preds = %1995
  br label %4027

2080:                                             ; preds = %237
  %2081 = load ptr, ptr %9, align 8, !tbaa !5
  %2082 = load ptr, ptr %10, align 8, !tbaa !5
  %2083 = load ptr, ptr %11, align 8, !tbaa !5
  %2084 = load i32, ptr %18, align 4, !tbaa !9
  %2085 = sext i32 %2084 to i64
  %2086 = getelementptr inbounds %struct.doublecomplex, ptr %2083, i64 %2085
  %2087 = load ptr, ptr %12, align 8, !tbaa !5
  %2088 = load ptr, ptr %16, align 8, !tbaa !5
  %2089 = call i32 @ztrtri_(ptr noundef %2081, ptr noundef @.str, ptr noundef %2082, ptr noundef %2086, ptr noundef %2087, ptr noundef %2088)
  %2090 = load ptr, ptr %10, align 8, !tbaa !5
  %2091 = load i32, ptr %2090, align 4, !tbaa !9
  store i32 %2091, ptr %36, align 4, !tbaa !9
  br label %2092

2092:                                             ; preds = %2462, %2080
  %2093 = load i32, ptr %36, align 4, !tbaa !9
  %2094 = icmp sge i32 %2093, 1
  br i1 %2094, label %2095, label %2463

2095:                                             ; preds = %2092
  %2096 = load ptr, ptr %13, align 8, !tbaa !5
  %2097 = load i32, ptr %36, align 4, !tbaa !9
  %2098 = sext i32 %2097 to i64
  %2099 = getelementptr inbounds i32, ptr %2096, i64 %2098
  %2100 = load i32, ptr %2099, align 4, !tbaa !9
  %2101 = icmp sgt i32 %2100, 0
  br i1 %2101, label %2102, label %2149

2102:                                             ; preds = %2095
  %2103 = load i32, ptr %36, align 4, !tbaa !9
  %2104 = load i32, ptr %31, align 4, !tbaa !9
  %2105 = load i32, ptr %19, align 4, !tbaa !9
  %2106 = mul nsw i32 %2104, %2105
  %2107 = add nsw i32 %2103, %2106
  store i32 %2107, ptr %21, align 4, !tbaa !9
  %2108 = load i32, ptr %36, align 4, !tbaa !9
  %2109 = load i32, ptr %36, align 4, !tbaa !9
  %2110 = load i32, ptr %17, align 4, !tbaa !9
  %2111 = mul nsw i32 %2109, %2110
  %2112 = add nsw i32 %2108, %2111
  store i32 %2112, ptr %22, align 4, !tbaa !9
  %2113 = load ptr, ptr %11, align 8, !tbaa !5
  %2114 = load i32, ptr %22, align 4, !tbaa !9
  %2115 = sext i32 %2114 to i64
  %2116 = getelementptr inbounds %struct.doublecomplex, ptr %2113, i64 %2115
  %2117 = getelementptr inbounds %struct.doublecomplex, ptr %2116, i32 0, i32 0
  %2118 = load double, ptr %2117, align 8, !tbaa !11
  %2119 = fdiv double 1.000000e+00, %2118
  store double %2119, ptr %27, align 8, !tbaa !18
  %2120 = load double, ptr %27, align 8, !tbaa !18
  %2121 = load ptr, ptr %14, align 8, !tbaa !5
  %2122 = load i32, ptr %21, align 4, !tbaa !9
  %2123 = sext i32 %2122 to i64
  %2124 = getelementptr inbounds %struct.doublecomplex, ptr %2121, i64 %2123
  %2125 = getelementptr inbounds %struct.doublecomplex, ptr %2124, i32 0, i32 0
  store double %2120, ptr %2125, align 8, !tbaa !11
  %2126 = load ptr, ptr %14, align 8, !tbaa !5
  %2127 = load i32, ptr %21, align 4, !tbaa !9
  %2128 = sext i32 %2127 to i64
  %2129 = getelementptr inbounds %struct.doublecomplex, ptr %2126, i64 %2128
  %2130 = getelementptr inbounds %struct.doublecomplex, ptr %2129, i32 0, i32 1
  store double 0.000000e+00, ptr %2130, align 8, !tbaa !14
  %2131 = load i32, ptr %36, align 4, !tbaa !9
  %2132 = load i32, ptr %31, align 4, !tbaa !9
  %2133 = add nsw i32 %2132, 1
  %2134 = load i32, ptr %19, align 4, !tbaa !9
  %2135 = mul nsw i32 %2133, %2134
  %2136 = add nsw i32 %2131, %2135
  store i32 %2136, ptr %21, align 4, !tbaa !9
  %2137 = load ptr, ptr %14, align 8, !tbaa !5
  %2138 = load i32, ptr %21, align 4, !tbaa !9
  %2139 = sext i32 %2138 to i64
  %2140 = getelementptr inbounds %struct.doublecomplex, ptr %2137, i64 %2139
  %2141 = getelementptr inbounds %struct.doublecomplex, ptr %2140, i32 0, i32 0
  store double 0.000000e+00, ptr %2141, align 8, !tbaa !11
  %2142 = load ptr, ptr %14, align 8, !tbaa !5
  %2143 = load i32, ptr %21, align 4, !tbaa !9
  %2144 = sext i32 %2143 to i64
  %2145 = getelementptr inbounds %struct.doublecomplex, ptr %2142, i64 %2144
  %2146 = getelementptr inbounds %struct.doublecomplex, ptr %2145, i32 0, i32 1
  store double 0.000000e+00, ptr %2146, align 8, !tbaa !14
  %2147 = load i32, ptr %36, align 4, !tbaa !9
  %2148 = add nsw i32 %2147, -1
  store i32 %2148, ptr %36, align 4, !tbaa !9
  br label %2462

2149:                                             ; preds = %2095
  %2150 = load ptr, ptr %14, align 8, !tbaa !5
  %2151 = load i32, ptr %36, align 4, !tbaa !9
  %2152 = sub nsw i32 %2151, 1
  %2153 = load i32, ptr %19, align 4, !tbaa !9
  %2154 = add nsw i32 %2152, %2153
  %2155 = sext i32 %2154 to i64
  %2156 = getelementptr inbounds %struct.doublecomplex, ptr %2150, i64 %2155
  %2157 = call { double, double } @Cd(ptr noundef %2156)
  %2158 = extractvalue { double, double } %2157, 0
  %2159 = extractvalue { double, double } %2157, 1
  %2160 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %2161 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  store double %2158, ptr %2160, align 8
  store double %2159, ptr %2161, align 8
  %2162 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %2163 = load double, ptr %2162, align 8
  %2164 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %2165 = load double, ptr %2164, align 8
  %2166 = call double @cabs(double noundef %2163, double noundef %2165) #6
  store double %2166, ptr %27, align 8, !tbaa !18
  %2167 = load double, ptr %27, align 8, !tbaa !18
  %2168 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  store double %2167, ptr %2168, align 8, !tbaa !11
  %2169 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  store double 0.000000e+00, ptr %2169, align 8, !tbaa !14
  %2170 = load i32, ptr %36, align 4, !tbaa !9
  %2171 = sub nsw i32 %2170, 1
  %2172 = load i32, ptr %36, align 4, !tbaa !9
  %2173 = sub nsw i32 %2172, 1
  %2174 = load i32, ptr %17, align 4, !tbaa !9
  %2175 = mul nsw i32 %2173, %2174
  %2176 = add nsw i32 %2171, %2175
  store i32 %2176, ptr %21, align 4, !tbaa !9
  %2177 = load ptr, ptr %11, align 8, !tbaa !5
  %2178 = load i32, ptr %21, align 4, !tbaa !9
  %2179 = sext i32 %2178 to i64
  %2180 = getelementptr inbounds %struct.doublecomplex, ptr %2177, i64 %2179
  %2181 = getelementptr inbounds %struct.doublecomplex, ptr %2180, i32 0, i32 0
  %2182 = load double, ptr %2181, align 8, !tbaa !11
  store double %2182, ptr %27, align 8, !tbaa !18
  %2183 = load double, ptr %27, align 8, !tbaa !18
  %2184 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %2183, ptr %2184, align 8, !tbaa !11
  %2185 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double 0.000000e+00, ptr %2185, align 8, !tbaa !14
  %2186 = call { double, double } @Cd(ptr noundef %29)
  %2187 = extractvalue { double, double } %2186, 0
  %2188 = extractvalue { double, double } %2186, 1
  %2189 = call { double, double } @Cd(ptr noundef %37)
  %2190 = extractvalue { double, double } %2189, 0
  %2191 = extractvalue { double, double } %2189, 1
  %2192 = call { double, double } @__divdc3(double noundef %2187, double noundef %2188, double noundef %2190, double noundef %2191) #6
  %2193 = extractvalue { double, double } %2192, 0
  %2194 = extractvalue { double, double } %2192, 1
  %2195 = call ptr @_pCd(ptr noundef %28)
  %2196 = getelementptr inbounds { double, double }, ptr %2195, i32 0, i32 0
  %2197 = getelementptr inbounds { double, double }, ptr %2195, i32 0, i32 1
  store double %2193, ptr %2196, align 8
  store double %2194, ptr %2197, align 8
  %2198 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2199 = load double, ptr %2198, align 8, !tbaa !11
  %2200 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %2199, ptr %2200, align 8, !tbaa !11
  %2201 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2202 = load double, ptr %2201, align 8, !tbaa !14
  %2203 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %2202, ptr %2203, align 8, !tbaa !14
  %2204 = load i32, ptr %36, align 4, !tbaa !9
  %2205 = load i32, ptr %36, align 4, !tbaa !9
  %2206 = load i32, ptr %17, align 4, !tbaa !9
  %2207 = mul nsw i32 %2205, %2206
  %2208 = add nsw i32 %2204, %2207
  store i32 %2208, ptr %21, align 4, !tbaa !9
  %2209 = load ptr, ptr %11, align 8, !tbaa !5
  %2210 = load i32, ptr %21, align 4, !tbaa !9
  %2211 = sext i32 %2210 to i64
  %2212 = getelementptr inbounds %struct.doublecomplex, ptr %2209, i64 %2211
  %2213 = getelementptr inbounds %struct.doublecomplex, ptr %2212, i32 0, i32 0
  %2214 = load double, ptr %2213, align 8, !tbaa !11
  store double %2214, ptr %27, align 8, !tbaa !18
  %2215 = load double, ptr %27, align 8, !tbaa !18
  %2216 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %2215, ptr %2216, align 8, !tbaa !11
  %2217 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double 0.000000e+00, ptr %2217, align 8, !tbaa !14
  %2218 = call { double, double } @Cd(ptr noundef %29)
  %2219 = extractvalue { double, double } %2218, 0
  %2220 = extractvalue { double, double } %2218, 1
  %2221 = call { double, double } @Cd(ptr noundef %37)
  %2222 = extractvalue { double, double } %2221, 0
  %2223 = extractvalue { double, double } %2221, 1
  %2224 = call { double, double } @__divdc3(double noundef %2219, double noundef %2220, double noundef %2222, double noundef %2223) #6
  %2225 = extractvalue { double, double } %2224, 0
  %2226 = extractvalue { double, double } %2224, 1
  %2227 = call ptr @_pCd(ptr noundef %28)
  %2228 = getelementptr inbounds { double, double }, ptr %2227, i32 0, i32 0
  %2229 = getelementptr inbounds { double, double }, ptr %2227, i32 0, i32 1
  store double %2225, ptr %2228, align 8
  store double %2226, ptr %2229, align 8
  %2230 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2231 = load double, ptr %2230, align 8, !tbaa !11
  %2232 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  store double %2231, ptr %2232, align 8, !tbaa !11
  %2233 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2234 = load double, ptr %2233, align 8, !tbaa !14
  %2235 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  store double %2234, ptr %2235, align 8, !tbaa !14
  %2236 = load ptr, ptr %14, align 8, !tbaa !5
  %2237 = load i32, ptr %36, align 4, !tbaa !9
  %2238 = sub nsw i32 %2237, 1
  %2239 = load i32, ptr %19, align 4, !tbaa !9
  %2240 = add nsw i32 %2238, %2239
  %2241 = sext i32 %2240 to i64
  %2242 = getelementptr inbounds %struct.doublecomplex, ptr %2236, i64 %2241
  %2243 = call { double, double } @Cd(ptr noundef %2242)
  %2244 = extractvalue { double, double } %2243, 0
  %2245 = extractvalue { double, double } %2243, 1
  %2246 = call { double, double } @Cd(ptr noundef %37)
  %2247 = extractvalue { double, double } %2246, 0
  %2248 = extractvalue { double, double } %2246, 1
  %2249 = call { double, double } @__divdc3(double noundef %2244, double noundef %2245, double noundef %2247, double noundef %2248) #6
  %2250 = extractvalue { double, double } %2249, 0
  %2251 = extractvalue { double, double } %2249, 1
  %2252 = call ptr @_pCd(ptr noundef %28)
  %2253 = getelementptr inbounds { double, double }, ptr %2252, i32 0, i32 0
  %2254 = getelementptr inbounds { double, double }, ptr %2252, i32 0, i32 1
  store double %2250, ptr %2253, align 8
  store double %2251, ptr %2254, align 8
  %2255 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2256 = load double, ptr %2255, align 8, !tbaa !11
  %2257 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  store double %2256, ptr %2257, align 8, !tbaa !11
  %2258 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2259 = load double, ptr %2258, align 8, !tbaa !14
  %2260 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  store double %2259, ptr %2260, align 8, !tbaa !14
  %2261 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %2262 = load double, ptr %2261, align 8, !tbaa !11
  %2263 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  %2264 = load double, ptr %2263, align 8, !tbaa !11
  %2265 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %2266 = load double, ptr %2265, align 8, !tbaa !14
  %2267 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  %2268 = load double, ptr %2267, align 8, !tbaa !14
  %2269 = fmul double %2266, %2268
  %2270 = fneg double %2269
  %2271 = call double @llvm.fmuladd.f64(double %2262, double %2264, double %2270)
  %2272 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %2271, ptr %2272, align 8, !tbaa !11
  %2273 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %2274 = load double, ptr %2273, align 8, !tbaa !11
  %2275 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 1
  %2276 = load double, ptr %2275, align 8, !tbaa !14
  %2277 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %2278 = load double, ptr %2277, align 8, !tbaa !14
  %2279 = getelementptr inbounds %struct.doublecomplex, ptr %48, i32 0, i32 0
  %2280 = load double, ptr %2279, align 8, !tbaa !11
  %2281 = fmul double %2278, %2280
  %2282 = call double @llvm.fmuladd.f64(double %2274, double %2276, double %2281)
  %2283 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %2282, ptr %2283, align 8, !tbaa !14
  %2284 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %2285 = load double, ptr %2284, align 8, !tbaa !11
  %2286 = fsub double %2285, 1.000000e+00
  %2287 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %2286, ptr %2287, align 8, !tbaa !11
  %2288 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %2289 = load double, ptr %2288, align 8, !tbaa !14
  %2290 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %2289, ptr %2290, align 8, !tbaa !14
  %2291 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2292 = load double, ptr %2291, align 8, !tbaa !11
  %2293 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %2294 = load double, ptr %2293, align 8, !tbaa !11
  %2295 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2296 = load double, ptr %2295, align 8, !tbaa !14
  %2297 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %2298 = load double, ptr %2297, align 8, !tbaa !14
  %2299 = fmul double %2296, %2298
  %2300 = fneg double %2299
  %2301 = call double @llvm.fmuladd.f64(double %2292, double %2294, double %2300)
  %2302 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %2301, ptr %2302, align 8, !tbaa !11
  %2303 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 0
  %2304 = load double, ptr %2303, align 8, !tbaa !11
  %2305 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %2306 = load double, ptr %2305, align 8, !tbaa !14
  %2307 = getelementptr inbounds %struct.doublecomplex, ptr %37, i32 0, i32 1
  %2308 = load double, ptr %2307, align 8, !tbaa !14
  %2309 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %2310 = load double, ptr %2309, align 8, !tbaa !11
  %2311 = fmul double %2308, %2310
  %2312 = call double @llvm.fmuladd.f64(double %2304, double %2306, double %2311)
  %2313 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %2312, ptr %2313, align 8, !tbaa !14
  %2314 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2315 = load double, ptr %2314, align 8, !tbaa !11
  %2316 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 0
  store double %2315, ptr %2316, align 8, !tbaa !11
  %2317 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2318 = load double, ptr %2317, align 8, !tbaa !14
  %2319 = getelementptr inbounds %struct.doublecomplex, ptr %33, i32 0, i32 1
  store double %2318, ptr %2319, align 8, !tbaa !14
  %2320 = load i32, ptr %36, align 4, !tbaa !9
  %2321 = sub nsw i32 %2320, 1
  %2322 = load i32, ptr %31, align 4, !tbaa !9
  %2323 = load i32, ptr %19, align 4, !tbaa !9
  %2324 = mul nsw i32 %2322, %2323
  %2325 = add nsw i32 %2321, %2324
  store i32 %2325, ptr %21, align 4, !tbaa !9
  %2326 = call { double, double } @Cd(ptr noundef %48)
  %2327 = extractvalue { double, double } %2326, 0
  %2328 = extractvalue { double, double } %2326, 1
  %2329 = call { double, double } @Cd(ptr noundef %33)
  %2330 = extractvalue { double, double } %2329, 0
  %2331 = extractvalue { double, double } %2329, 1
  %2332 = call { double, double } @__divdc3(double noundef %2327, double noundef %2328, double noundef %2330, double noundef %2331) #6
  %2333 = extractvalue { double, double } %2332, 0
  %2334 = extractvalue { double, double } %2332, 1
  %2335 = call ptr @_pCd(ptr noundef %28)
  %2336 = getelementptr inbounds { double, double }, ptr %2335, i32 0, i32 0
  %2337 = getelementptr inbounds { double, double }, ptr %2335, i32 0, i32 1
  store double %2333, ptr %2336, align 8
  store double %2334, ptr %2337, align 8
  %2338 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2339 = load double, ptr %2338, align 8, !tbaa !11
  %2340 = load ptr, ptr %14, align 8, !tbaa !5
  %2341 = load i32, ptr %21, align 4, !tbaa !9
  %2342 = sext i32 %2341 to i64
  %2343 = getelementptr inbounds %struct.doublecomplex, ptr %2340, i64 %2342
  %2344 = getelementptr inbounds %struct.doublecomplex, ptr %2343, i32 0, i32 0
  store double %2339, ptr %2344, align 8, !tbaa !11
  %2345 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2346 = load double, ptr %2345, align 8, !tbaa !14
  %2347 = load ptr, ptr %14, align 8, !tbaa !5
  %2348 = load i32, ptr %21, align 4, !tbaa !9
  %2349 = sext i32 %2348 to i64
  %2350 = getelementptr inbounds %struct.doublecomplex, ptr %2347, i64 %2349
  %2351 = getelementptr inbounds %struct.doublecomplex, ptr %2350, i32 0, i32 1
  store double %2346, ptr %2351, align 8, !tbaa !14
  %2352 = load i32, ptr %36, align 4, !tbaa !9
  %2353 = load i32, ptr %31, align 4, !tbaa !9
  %2354 = load i32, ptr %19, align 4, !tbaa !9
  %2355 = mul nsw i32 %2353, %2354
  %2356 = add nsw i32 %2352, %2355
  store i32 %2356, ptr %21, align 4, !tbaa !9
  %2357 = call { double, double } @Cd(ptr noundef %41)
  %2358 = extractvalue { double, double } %2357, 0
  %2359 = extractvalue { double, double } %2357, 1
  %2360 = call { double, double } @Cd(ptr noundef %33)
  %2361 = extractvalue { double, double } %2360, 0
  %2362 = extractvalue { double, double } %2360, 1
  %2363 = call { double, double } @__divdc3(double noundef %2358, double noundef %2359, double noundef %2361, double noundef %2362) #6
  %2364 = extractvalue { double, double } %2363, 0
  %2365 = extractvalue { double, double } %2363, 1
  %2366 = call ptr @_pCd(ptr noundef %28)
  %2367 = getelementptr inbounds { double, double }, ptr %2366, i32 0, i32 0
  %2368 = getelementptr inbounds { double, double }, ptr %2366, i32 0, i32 1
  store double %2364, ptr %2367, align 8
  store double %2365, ptr %2368, align 8
  %2369 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2370 = load double, ptr %2369, align 8, !tbaa !11
  %2371 = load ptr, ptr %14, align 8, !tbaa !5
  %2372 = load i32, ptr %21, align 4, !tbaa !9
  %2373 = sext i32 %2372 to i64
  %2374 = getelementptr inbounds %struct.doublecomplex, ptr %2371, i64 %2373
  %2375 = getelementptr inbounds %struct.doublecomplex, ptr %2374, i32 0, i32 0
  store double %2370, ptr %2375, align 8, !tbaa !11
  %2376 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2377 = load double, ptr %2376, align 8, !tbaa !14
  %2378 = load ptr, ptr %14, align 8, !tbaa !5
  %2379 = load i32, ptr %21, align 4, !tbaa !9
  %2380 = sext i32 %2379 to i64
  %2381 = getelementptr inbounds %struct.doublecomplex, ptr %2378, i64 %2380
  %2382 = getelementptr inbounds %struct.doublecomplex, ptr %2381, i32 0, i32 1
  store double %2377, ptr %2382, align 8, !tbaa !14
  %2383 = load i32, ptr %36, align 4, !tbaa !9
  %2384 = load i32, ptr %31, align 4, !tbaa !9
  %2385 = add nsw i32 %2384, 1
  %2386 = load i32, ptr %19, align 4, !tbaa !9
  %2387 = mul nsw i32 %2385, %2386
  %2388 = add nsw i32 %2383, %2387
  store i32 %2388, ptr %21, align 4, !tbaa !9
  %2389 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 0
  %2390 = load double, ptr %2389, align 8, !tbaa !11
  %2391 = fneg double %2390
  %2392 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %2391, ptr %2392, align 8, !tbaa !11
  %2393 = getelementptr inbounds %struct.doublecomplex, ptr %32, i32 0, i32 1
  %2394 = load double, ptr %2393, align 8, !tbaa !14
  %2395 = fneg double %2394
  %2396 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %2395, ptr %2396, align 8, !tbaa !14
  %2397 = call { double, double } @Cd(ptr noundef %29)
  %2398 = extractvalue { double, double } %2397, 0
  %2399 = extractvalue { double, double } %2397, 1
  %2400 = call { double, double } @Cd(ptr noundef %33)
  %2401 = extractvalue { double, double } %2400, 0
  %2402 = extractvalue { double, double } %2400, 1
  %2403 = call { double, double } @__divdc3(double noundef %2398, double noundef %2399, double noundef %2401, double noundef %2402) #6
  %2404 = extractvalue { double, double } %2403, 0
  %2405 = extractvalue { double, double } %2403, 1
  %2406 = call ptr @_pCd(ptr noundef %28)
  %2407 = getelementptr inbounds { double, double }, ptr %2406, i32 0, i32 0
  %2408 = getelementptr inbounds { double, double }, ptr %2406, i32 0, i32 1
  store double %2404, ptr %2407, align 8
  store double %2405, ptr %2408, align 8
  %2409 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2410 = load double, ptr %2409, align 8, !tbaa !11
  %2411 = load ptr, ptr %14, align 8, !tbaa !5
  %2412 = load i32, ptr %21, align 4, !tbaa !9
  %2413 = sext i32 %2412 to i64
  %2414 = getelementptr inbounds %struct.doublecomplex, ptr %2411, i64 %2413
  %2415 = getelementptr inbounds %struct.doublecomplex, ptr %2414, i32 0, i32 0
  store double %2410, ptr %2415, align 8, !tbaa !11
  %2416 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2417 = load double, ptr %2416, align 8, !tbaa !14
  %2418 = load ptr, ptr %14, align 8, !tbaa !5
  %2419 = load i32, ptr %21, align 4, !tbaa !9
  %2420 = sext i32 %2419 to i64
  %2421 = getelementptr inbounds %struct.doublecomplex, ptr %2418, i64 %2420
  %2422 = getelementptr inbounds %struct.doublecomplex, ptr %2421, i32 0, i32 1
  store double %2417, ptr %2422, align 8, !tbaa !14
  %2423 = load i32, ptr %36, align 4, !tbaa !9
  %2424 = sub nsw i32 %2423, 1
  %2425 = load i32, ptr %31, align 4, !tbaa !9
  %2426 = add nsw i32 %2425, 1
  %2427 = load i32, ptr %19, align 4, !tbaa !9
  %2428 = mul nsw i32 %2426, %2427
  %2429 = add nsw i32 %2424, %2428
  store i32 %2429, ptr %21, align 4, !tbaa !9
  %2430 = load ptr, ptr %14, align 8, !tbaa !5
  %2431 = load i32, ptr %36, align 4, !tbaa !9
  %2432 = load i32, ptr %31, align 4, !tbaa !9
  %2433 = add nsw i32 %2432, 1
  %2434 = load i32, ptr %19, align 4, !tbaa !9
  %2435 = mul nsw i32 %2433, %2434
  %2436 = add nsw i32 %2431, %2435
  %2437 = sext i32 %2436 to i64
  %2438 = getelementptr inbounds %struct.doublecomplex, ptr %2430, i64 %2437
  %2439 = call { double, double } @Cd(ptr noundef %2438)
  %2440 = extractvalue { double, double } %2439, 0
  %2441 = extractvalue { double, double } %2439, 1
  %2442 = fneg double %2441
  %2443 = call ptr @_pCd(ptr noundef %28)
  %2444 = getelementptr inbounds { double, double }, ptr %2443, i32 0, i32 0
  %2445 = getelementptr inbounds { double, double }, ptr %2443, i32 0, i32 1
  store double %2440, ptr %2444, align 8
  store double %2442, ptr %2445, align 8
  %2446 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2447 = load double, ptr %2446, align 8, !tbaa !11
  %2448 = load ptr, ptr %14, align 8, !tbaa !5
  %2449 = load i32, ptr %21, align 4, !tbaa !9
  %2450 = sext i32 %2449 to i64
  %2451 = getelementptr inbounds %struct.doublecomplex, ptr %2448, i64 %2450
  %2452 = getelementptr inbounds %struct.doublecomplex, ptr %2451, i32 0, i32 0
  store double %2447, ptr %2452, align 8, !tbaa !11
  %2453 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2454 = load double, ptr %2453, align 8, !tbaa !14
  %2455 = load ptr, ptr %14, align 8, !tbaa !5
  %2456 = load i32, ptr %21, align 4, !tbaa !9
  %2457 = sext i32 %2456 to i64
  %2458 = getelementptr inbounds %struct.doublecomplex, ptr %2455, i64 %2457
  %2459 = getelementptr inbounds %struct.doublecomplex, ptr %2458, i32 0, i32 1
  store double %2454, ptr %2459, align 8, !tbaa !14
  %2460 = load i32, ptr %36, align 4, !tbaa !9
  %2461 = add nsw i32 %2460, -2
  store i32 %2461, ptr %36, align 4, !tbaa !9
  br label %2462

2462:                                             ; preds = %2149, %2102
  br label %2092, !llvm.loop !40

2463:                                             ; preds = %2092
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %2464

2464:                                             ; preds = %3943, %2463
  %2465 = load i32, ptr %47, align 4, !tbaa !9
  %2466 = load ptr, ptr %10, align 8, !tbaa !5
  %2467 = load i32, ptr %2466, align 4, !tbaa !9
  %2468 = icmp slt i32 %2465, %2467
  br i1 %2468, label %2469, label %3947

2469:                                             ; preds = %2464
  %2470 = load ptr, ptr %15, align 8, !tbaa !5
  %2471 = load i32, ptr %2470, align 4, !tbaa !9
  store i32 %2471, ptr %46, align 4, !tbaa !9
  %2472 = load i32, ptr %47, align 4, !tbaa !9
  %2473 = load i32, ptr %46, align 4, !tbaa !9
  %2474 = add nsw i32 %2472, %2473
  %2475 = load ptr, ptr %10, align 8, !tbaa !5
  %2476 = load i32, ptr %2475, align 4, !tbaa !9
  %2477 = icmp sge i32 %2474, %2476
  br i1 %2477, label %2478, label %2483

2478:                                             ; preds = %2469
  %2479 = load ptr, ptr %10, align 8, !tbaa !5
  %2480 = load i32, ptr %2479, align 4, !tbaa !9
  %2481 = load i32, ptr %47, align 4, !tbaa !9
  %2482 = sub nsw i32 %2480, %2481
  store i32 %2482, ptr %46, align 4, !tbaa !9
  br label %2515

2483:                                             ; preds = %2469
  store i32 0, ptr %39, align 4, !tbaa !9
  %2484 = load i32, ptr %47, align 4, !tbaa !9
  %2485 = load i32, ptr %46, align 4, !tbaa !9
  %2486 = add nsw i32 %2484, %2485
  store i32 %2486, ptr %21, align 4, !tbaa !9
  %2487 = load i32, ptr %47, align 4, !tbaa !9
  %2488 = add nsw i32 %2487, 1
  store i32 %2488, ptr %34, align 4, !tbaa !9
  br label %2489

2489:                                             ; preds = %2504, %2483
  %2490 = load i32, ptr %34, align 4, !tbaa !9
  %2491 = load i32, ptr %21, align 4, !tbaa !9
  %2492 = icmp sle i32 %2490, %2491
  br i1 %2492, label %2493, label %2507

2493:                                             ; preds = %2489
  %2494 = load ptr, ptr %13, align 8, !tbaa !5
  %2495 = load i32, ptr %34, align 4, !tbaa !9
  %2496 = sext i32 %2495 to i64
  %2497 = getelementptr inbounds i32, ptr %2494, i64 %2496
  %2498 = load i32, ptr %2497, align 4, !tbaa !9
  %2499 = icmp slt i32 %2498, 0
  br i1 %2499, label %2500, label %2503

2500:                                             ; preds = %2493
  %2501 = load i32, ptr %39, align 4, !tbaa !9
  %2502 = add nsw i32 %2501, 1
  store i32 %2502, ptr %39, align 4, !tbaa !9
  br label %2503

2503:                                             ; preds = %2500, %2493
  br label %2504

2504:                                             ; preds = %2503
  %2505 = load i32, ptr %34, align 4, !tbaa !9
  %2506 = add nsw i32 %2505, 1
  store i32 %2506, ptr %34, align 4, !tbaa !9
  br label %2489, !llvm.loop !41

2507:                                             ; preds = %2489
  %2508 = load i32, ptr %39, align 4, !tbaa !9
  %2509 = srem i32 %2508, 2
  %2510 = icmp eq i32 %2509, 1
  br i1 %2510, label %2511, label %2514

2511:                                             ; preds = %2507
  %2512 = load i32, ptr %46, align 4, !tbaa !9
  %2513 = add nsw i32 %2512, 1
  store i32 %2513, ptr %46, align 4, !tbaa !9
  br label %2514

2514:                                             ; preds = %2511, %2507
  br label %2515

2515:                                             ; preds = %2514, %2478
  %2516 = load ptr, ptr %10, align 8, !tbaa !5
  %2517 = load i32, ptr %2516, align 4, !tbaa !9
  %2518 = load i32, ptr %47, align 4, !tbaa !9
  %2519 = sub nsw i32 %2517, %2518
  %2520 = load i32, ptr %46, align 4, !tbaa !9
  %2521 = sub nsw i32 %2519, %2520
  store i32 %2521, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %2522

2522:                                             ; preds = %2575, %2515
  %2523 = load i32, ptr %34, align 4, !tbaa !9
  %2524 = load i32, ptr %21, align 4, !tbaa !9
  %2525 = icmp sle i32 %2523, %2524
  br i1 %2525, label %2526, label %2578

2526:                                             ; preds = %2522
  %2527 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %2527, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %2528

2528:                                             ; preds = %2571, %2526
  %2529 = load i32, ptr %35, align 4, !tbaa !9
  %2530 = load i32, ptr %22, align 4, !tbaa !9
  %2531 = icmp sle i32 %2529, %2530
  br i1 %2531, label %2532, label %2574

2532:                                             ; preds = %2528
  %2533 = load i32, ptr %34, align 4, !tbaa !9
  %2534 = load i32, ptr %35, align 4, !tbaa !9
  %2535 = load i32, ptr %19, align 4, !tbaa !9
  %2536 = mul nsw i32 %2534, %2535
  %2537 = add nsw i32 %2533, %2536
  store i32 %2537, ptr %23, align 4, !tbaa !9
  %2538 = load i32, ptr %47, align 4, !tbaa !9
  %2539 = load i32, ptr %46, align 4, !tbaa !9
  %2540 = add nsw i32 %2538, %2539
  %2541 = load i32, ptr %34, align 4, !tbaa !9
  %2542 = add nsw i32 %2540, %2541
  %2543 = load i32, ptr %47, align 4, !tbaa !9
  %2544 = load i32, ptr %35, align 4, !tbaa !9
  %2545 = add nsw i32 %2543, %2544
  %2546 = load i32, ptr %17, align 4, !tbaa !9
  %2547 = mul nsw i32 %2545, %2546
  %2548 = add nsw i32 %2542, %2547
  store i32 %2548, ptr %24, align 4, !tbaa !9
  %2549 = load ptr, ptr %11, align 8, !tbaa !5
  %2550 = load i32, ptr %24, align 4, !tbaa !9
  %2551 = sext i32 %2550 to i64
  %2552 = getelementptr inbounds %struct.doublecomplex, ptr %2549, i64 %2551
  %2553 = getelementptr inbounds %struct.doublecomplex, ptr %2552, i32 0, i32 0
  %2554 = load double, ptr %2553, align 8, !tbaa !11
  %2555 = load ptr, ptr %14, align 8, !tbaa !5
  %2556 = load i32, ptr %23, align 4, !tbaa !9
  %2557 = sext i32 %2556 to i64
  %2558 = getelementptr inbounds %struct.doublecomplex, ptr %2555, i64 %2557
  %2559 = getelementptr inbounds %struct.doublecomplex, ptr %2558, i32 0, i32 0
  store double %2554, ptr %2559, align 8, !tbaa !11
  %2560 = load ptr, ptr %11, align 8, !tbaa !5
  %2561 = load i32, ptr %24, align 4, !tbaa !9
  %2562 = sext i32 %2561 to i64
  %2563 = getelementptr inbounds %struct.doublecomplex, ptr %2560, i64 %2562
  %2564 = getelementptr inbounds %struct.doublecomplex, ptr %2563, i32 0, i32 1
  %2565 = load double, ptr %2564, align 8, !tbaa !14
  %2566 = load ptr, ptr %14, align 8, !tbaa !5
  %2567 = load i32, ptr %23, align 4, !tbaa !9
  %2568 = sext i32 %2567 to i64
  %2569 = getelementptr inbounds %struct.doublecomplex, ptr %2566, i64 %2568
  %2570 = getelementptr inbounds %struct.doublecomplex, ptr %2569, i32 0, i32 1
  store double %2565, ptr %2570, align 8, !tbaa !14
  br label %2571

2571:                                             ; preds = %2532
  %2572 = load i32, ptr %35, align 4, !tbaa !9
  %2573 = add nsw i32 %2572, 1
  store i32 %2573, ptr %35, align 4, !tbaa !9
  br label %2528, !llvm.loop !42

2574:                                             ; preds = %2528
  br label %2575

2575:                                             ; preds = %2574
  %2576 = load i32, ptr %34, align 4, !tbaa !9
  %2577 = add nsw i32 %2576, 1
  store i32 %2577, ptr %34, align 4, !tbaa !9
  br label %2522, !llvm.loop !43

2578:                                             ; preds = %2522
  %2579 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %2579, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %2580

2580:                                             ; preds = %2680, %2578
  %2581 = load i32, ptr %34, align 4, !tbaa !9
  %2582 = load i32, ptr %21, align 4, !tbaa !9
  %2583 = icmp sle i32 %2581, %2582
  br i1 %2583, label %2584, label %2683

2584:                                             ; preds = %2580
  %2585 = load i32, ptr %43, align 4, !tbaa !9
  %2586 = load i32, ptr %34, align 4, !tbaa !9
  %2587 = add nsw i32 %2585, %2586
  %2588 = load i32, ptr %34, align 4, !tbaa !9
  %2589 = load i32, ptr %19, align 4, !tbaa !9
  %2590 = mul nsw i32 %2588, %2589
  %2591 = add nsw i32 %2587, %2590
  store i32 %2591, ptr %22, align 4, !tbaa !9
  %2592 = load ptr, ptr %14, align 8, !tbaa !5
  %2593 = load i32, ptr %22, align 4, !tbaa !9
  %2594 = sext i32 %2593 to i64
  %2595 = getelementptr inbounds %struct.doublecomplex, ptr %2592, i64 %2594
  %2596 = getelementptr inbounds %struct.doublecomplex, ptr %2595, i32 0, i32 0
  store double 1.000000e+00, ptr %2596, align 8, !tbaa !11
  %2597 = load ptr, ptr %14, align 8, !tbaa !5
  %2598 = load i32, ptr %22, align 4, !tbaa !9
  %2599 = sext i32 %2598 to i64
  %2600 = getelementptr inbounds %struct.doublecomplex, ptr %2597, i64 %2599
  %2601 = getelementptr inbounds %struct.doublecomplex, ptr %2600, i32 0, i32 1
  store double 0.000000e+00, ptr %2601, align 8, !tbaa !14
  %2602 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %2602, ptr %22, align 4, !tbaa !9
  %2603 = load i32, ptr %34, align 4, !tbaa !9
  %2604 = add nsw i32 %2603, 1
  store i32 %2604, ptr %35, align 4, !tbaa !9
  br label %2605

2605:                                             ; preds = %2627, %2584
  %2606 = load i32, ptr %35, align 4, !tbaa !9
  %2607 = load i32, ptr %22, align 4, !tbaa !9
  %2608 = icmp sle i32 %2606, %2607
  br i1 %2608, label %2609, label %2630

2609:                                             ; preds = %2605
  %2610 = load i32, ptr %43, align 4, !tbaa !9
  %2611 = load i32, ptr %34, align 4, !tbaa !9
  %2612 = add nsw i32 %2610, %2611
  %2613 = load i32, ptr %35, align 4, !tbaa !9
  %2614 = load i32, ptr %19, align 4, !tbaa !9
  %2615 = mul nsw i32 %2613, %2614
  %2616 = add nsw i32 %2612, %2615
  store i32 %2616, ptr %23, align 4, !tbaa !9
  %2617 = load ptr, ptr %14, align 8, !tbaa !5
  %2618 = load i32, ptr %23, align 4, !tbaa !9
  %2619 = sext i32 %2618 to i64
  %2620 = getelementptr inbounds %struct.doublecomplex, ptr %2617, i64 %2619
  %2621 = getelementptr inbounds %struct.doublecomplex, ptr %2620, i32 0, i32 0
  store double 0.000000e+00, ptr %2621, align 8, !tbaa !11
  %2622 = load ptr, ptr %14, align 8, !tbaa !5
  %2623 = load i32, ptr %23, align 4, !tbaa !9
  %2624 = sext i32 %2623 to i64
  %2625 = getelementptr inbounds %struct.doublecomplex, ptr %2622, i64 %2624
  %2626 = getelementptr inbounds %struct.doublecomplex, ptr %2625, i32 0, i32 1
  store double 0.000000e+00, ptr %2626, align 8, !tbaa !14
  br label %2627

2627:                                             ; preds = %2609
  %2628 = load i32, ptr %35, align 4, !tbaa !9
  %2629 = add nsw i32 %2628, 1
  store i32 %2629, ptr %35, align 4, !tbaa !9
  br label %2605, !llvm.loop !44

2630:                                             ; preds = %2605
  %2631 = load i32, ptr %34, align 4, !tbaa !9
  %2632 = sub nsw i32 %2631, 1
  store i32 %2632, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %2633

2633:                                             ; preds = %2676, %2630
  %2634 = load i32, ptr %35, align 4, !tbaa !9
  %2635 = load i32, ptr %22, align 4, !tbaa !9
  %2636 = icmp sle i32 %2634, %2635
  br i1 %2636, label %2637, label %2679

2637:                                             ; preds = %2633
  %2638 = load i32, ptr %43, align 4, !tbaa !9
  %2639 = load i32, ptr %34, align 4, !tbaa !9
  %2640 = add nsw i32 %2638, %2639
  %2641 = load i32, ptr %35, align 4, !tbaa !9
  %2642 = load i32, ptr %19, align 4, !tbaa !9
  %2643 = mul nsw i32 %2641, %2642
  %2644 = add nsw i32 %2640, %2643
  store i32 %2644, ptr %23, align 4, !tbaa !9
  %2645 = load i32, ptr %47, align 4, !tbaa !9
  %2646 = load i32, ptr %34, align 4, !tbaa !9
  %2647 = add nsw i32 %2645, %2646
  %2648 = load i32, ptr %47, align 4, !tbaa !9
  %2649 = load i32, ptr %35, align 4, !tbaa !9
  %2650 = add nsw i32 %2648, %2649
  %2651 = load i32, ptr %17, align 4, !tbaa !9
  %2652 = mul nsw i32 %2650, %2651
  %2653 = add nsw i32 %2647, %2652
  store i32 %2653, ptr %24, align 4, !tbaa !9
  %2654 = load ptr, ptr %11, align 8, !tbaa !5
  %2655 = load i32, ptr %24, align 4, !tbaa !9
  %2656 = sext i32 %2655 to i64
  %2657 = getelementptr inbounds %struct.doublecomplex, ptr %2654, i64 %2656
  %2658 = getelementptr inbounds %struct.doublecomplex, ptr %2657, i32 0, i32 0
  %2659 = load double, ptr %2658, align 8, !tbaa !11
  %2660 = load ptr, ptr %14, align 8, !tbaa !5
  %2661 = load i32, ptr %23, align 4, !tbaa !9
  %2662 = sext i32 %2661 to i64
  %2663 = getelementptr inbounds %struct.doublecomplex, ptr %2660, i64 %2662
  %2664 = getelementptr inbounds %struct.doublecomplex, ptr %2663, i32 0, i32 0
  store double %2659, ptr %2664, align 8, !tbaa !11
  %2665 = load ptr, ptr %11, align 8, !tbaa !5
  %2666 = load i32, ptr %24, align 4, !tbaa !9
  %2667 = sext i32 %2666 to i64
  %2668 = getelementptr inbounds %struct.doublecomplex, ptr %2665, i64 %2667
  %2669 = getelementptr inbounds %struct.doublecomplex, ptr %2668, i32 0, i32 1
  %2670 = load double, ptr %2669, align 8, !tbaa !14
  %2671 = load ptr, ptr %14, align 8, !tbaa !5
  %2672 = load i32, ptr %23, align 4, !tbaa !9
  %2673 = sext i32 %2672 to i64
  %2674 = getelementptr inbounds %struct.doublecomplex, ptr %2671, i64 %2673
  %2675 = getelementptr inbounds %struct.doublecomplex, ptr %2674, i32 0, i32 1
  store double %2670, ptr %2675, align 8, !tbaa !14
  br label %2676

2676:                                             ; preds = %2637
  %2677 = load i32, ptr %35, align 4, !tbaa !9
  %2678 = add nsw i32 %2677, 1
  store i32 %2678, ptr %35, align 4, !tbaa !9
  br label %2633, !llvm.loop !45

2679:                                             ; preds = %2633
  br label %2680

2680:                                             ; preds = %2679
  %2681 = load i32, ptr %34, align 4, !tbaa !9
  %2682 = add nsw i32 %2681, 1
  store i32 %2682, ptr %34, align 4, !tbaa !9
  br label %2580, !llvm.loop !46

2683:                                             ; preds = %2580
  %2684 = load ptr, ptr %10, align 8, !tbaa !5
  %2685 = load i32, ptr %2684, align 4, !tbaa !9
  %2686 = load i32, ptr %47, align 4, !tbaa !9
  %2687 = sub nsw i32 %2685, %2686
  %2688 = load i32, ptr %46, align 4, !tbaa !9
  %2689 = sub nsw i32 %2687, %2688
  store i32 %2689, ptr %34, align 4, !tbaa !9
  br label %2690

2690:                                             ; preds = %3116, %2683
  %2691 = load i32, ptr %34, align 4, !tbaa !9
  %2692 = icmp sge i32 %2691, 1
  br i1 %2692, label %2693, label %3117

2693:                                             ; preds = %2690
  %2694 = load ptr, ptr %13, align 8, !tbaa !5
  %2695 = load i32, ptr %47, align 4, !tbaa !9
  %2696 = load i32, ptr %46, align 4, !tbaa !9
  %2697 = add nsw i32 %2695, %2696
  %2698 = load i32, ptr %34, align 4, !tbaa !9
  %2699 = add nsw i32 %2697, %2698
  %2700 = sext i32 %2699 to i64
  %2701 = getelementptr inbounds i32, ptr %2694, i64 %2700
  %2702 = load i32, ptr %2701, align 4, !tbaa !9
  %2703 = icmp sgt i32 %2702, 0
  br i1 %2703, label %2704, label %2805

2704:                                             ; preds = %2693
  %2705 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %2705, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %2706

2706:                                             ; preds = %2799, %2704
  %2707 = load i32, ptr %35, align 4, !tbaa !9
  %2708 = load i32, ptr %21, align 4, !tbaa !9
  %2709 = icmp sle i32 %2707, %2708
  br i1 %2709, label %2710, label %2802

2710:                                             ; preds = %2706
  %2711 = load i32, ptr %34, align 4, !tbaa !9
  %2712 = load i32, ptr %35, align 4, !tbaa !9
  %2713 = load i32, ptr %19, align 4, !tbaa !9
  %2714 = mul nsw i32 %2712, %2713
  %2715 = add nsw i32 %2711, %2714
  store i32 %2715, ptr %22, align 4, !tbaa !9
  %2716 = load i32, ptr %47, align 4, !tbaa !9
  %2717 = load i32, ptr %46, align 4, !tbaa !9
  %2718 = add nsw i32 %2716, %2717
  %2719 = load i32, ptr %34, align 4, !tbaa !9
  %2720 = add nsw i32 %2718, %2719
  %2721 = load i32, ptr %31, align 4, !tbaa !9
  %2722 = load i32, ptr %19, align 4, !tbaa !9
  %2723 = mul nsw i32 %2721, %2722
  %2724 = add nsw i32 %2720, %2723
  store i32 %2724, ptr %23, align 4, !tbaa !9
  %2725 = load i32, ptr %34, align 4, !tbaa !9
  %2726 = load i32, ptr %35, align 4, !tbaa !9
  %2727 = load i32, ptr %19, align 4, !tbaa !9
  %2728 = mul nsw i32 %2726, %2727
  %2729 = add nsw i32 %2725, %2728
  store i32 %2729, ptr %24, align 4, !tbaa !9
  %2730 = load ptr, ptr %14, align 8, !tbaa !5
  %2731 = load i32, ptr %23, align 4, !tbaa !9
  %2732 = sext i32 %2731 to i64
  %2733 = getelementptr inbounds %struct.doublecomplex, ptr %2730, i64 %2732
  %2734 = getelementptr inbounds %struct.doublecomplex, ptr %2733, i32 0, i32 0
  %2735 = load double, ptr %2734, align 8, !tbaa !11
  %2736 = load ptr, ptr %14, align 8, !tbaa !5
  %2737 = load i32, ptr %24, align 4, !tbaa !9
  %2738 = sext i32 %2737 to i64
  %2739 = getelementptr inbounds %struct.doublecomplex, ptr %2736, i64 %2738
  %2740 = getelementptr inbounds %struct.doublecomplex, ptr %2739, i32 0, i32 0
  %2741 = load double, ptr %2740, align 8, !tbaa !11
  %2742 = load ptr, ptr %14, align 8, !tbaa !5
  %2743 = load i32, ptr %23, align 4, !tbaa !9
  %2744 = sext i32 %2743 to i64
  %2745 = getelementptr inbounds %struct.doublecomplex, ptr %2742, i64 %2744
  %2746 = getelementptr inbounds %struct.doublecomplex, ptr %2745, i32 0, i32 1
  %2747 = load double, ptr %2746, align 8, !tbaa !14
  %2748 = load ptr, ptr %14, align 8, !tbaa !5
  %2749 = load i32, ptr %24, align 4, !tbaa !9
  %2750 = sext i32 %2749 to i64
  %2751 = getelementptr inbounds %struct.doublecomplex, ptr %2748, i64 %2750
  %2752 = getelementptr inbounds %struct.doublecomplex, ptr %2751, i32 0, i32 1
  %2753 = load double, ptr %2752, align 8, !tbaa !14
  %2754 = fmul double %2747, %2753
  %2755 = fneg double %2754
  %2756 = call double @llvm.fmuladd.f64(double %2735, double %2741, double %2755)
  %2757 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %2756, ptr %2757, align 8, !tbaa !11
  %2758 = load ptr, ptr %14, align 8, !tbaa !5
  %2759 = load i32, ptr %23, align 4, !tbaa !9
  %2760 = sext i32 %2759 to i64
  %2761 = getelementptr inbounds %struct.doublecomplex, ptr %2758, i64 %2760
  %2762 = getelementptr inbounds %struct.doublecomplex, ptr %2761, i32 0, i32 0
  %2763 = load double, ptr %2762, align 8, !tbaa !11
  %2764 = load ptr, ptr %14, align 8, !tbaa !5
  %2765 = load i32, ptr %24, align 4, !tbaa !9
  %2766 = sext i32 %2765 to i64
  %2767 = getelementptr inbounds %struct.doublecomplex, ptr %2764, i64 %2766
  %2768 = getelementptr inbounds %struct.doublecomplex, ptr %2767, i32 0, i32 1
  %2769 = load double, ptr %2768, align 8, !tbaa !14
  %2770 = load ptr, ptr %14, align 8, !tbaa !5
  %2771 = load i32, ptr %23, align 4, !tbaa !9
  %2772 = sext i32 %2771 to i64
  %2773 = getelementptr inbounds %struct.doublecomplex, ptr %2770, i64 %2772
  %2774 = getelementptr inbounds %struct.doublecomplex, ptr %2773, i32 0, i32 1
  %2775 = load double, ptr %2774, align 8, !tbaa !14
  %2776 = load ptr, ptr %14, align 8, !tbaa !5
  %2777 = load i32, ptr %24, align 4, !tbaa !9
  %2778 = sext i32 %2777 to i64
  %2779 = getelementptr inbounds %struct.doublecomplex, ptr %2776, i64 %2778
  %2780 = getelementptr inbounds %struct.doublecomplex, ptr %2779, i32 0, i32 0
  %2781 = load double, ptr %2780, align 8, !tbaa !11
  %2782 = fmul double %2775, %2781
  %2783 = call double @llvm.fmuladd.f64(double %2763, double %2769, double %2782)
  %2784 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %2783, ptr %2784, align 8, !tbaa !14
  %2785 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2786 = load double, ptr %2785, align 8, !tbaa !11
  %2787 = load ptr, ptr %14, align 8, !tbaa !5
  %2788 = load i32, ptr %22, align 4, !tbaa !9
  %2789 = sext i32 %2788 to i64
  %2790 = getelementptr inbounds %struct.doublecomplex, ptr %2787, i64 %2789
  %2791 = getelementptr inbounds %struct.doublecomplex, ptr %2790, i32 0, i32 0
  store double %2786, ptr %2791, align 8, !tbaa !11
  %2792 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2793 = load double, ptr %2792, align 8, !tbaa !14
  %2794 = load ptr, ptr %14, align 8, !tbaa !5
  %2795 = load i32, ptr %22, align 4, !tbaa !9
  %2796 = sext i32 %2795 to i64
  %2797 = getelementptr inbounds %struct.doublecomplex, ptr %2794, i64 %2796
  %2798 = getelementptr inbounds %struct.doublecomplex, ptr %2797, i32 0, i32 1
  store double %2793, ptr %2798, align 8, !tbaa !14
  br label %2799

2799:                                             ; preds = %2710
  %2800 = load i32, ptr %35, align 4, !tbaa !9
  %2801 = add nsw i32 %2800, 1
  store i32 %2801, ptr %35, align 4, !tbaa !9
  br label %2706, !llvm.loop !47

2802:                                             ; preds = %2706
  %2803 = load i32, ptr %34, align 4, !tbaa !9
  %2804 = add nsw i32 %2803, -1
  store i32 %2804, ptr %34, align 4, !tbaa !9
  br label %3116

2805:                                             ; preds = %2693
  %2806 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %2806, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %2807

2807:                                             ; preds = %3110, %2805
  %2808 = load i32, ptr %35, align 4, !tbaa !9
  %2809 = load i32, ptr %21, align 4, !tbaa !9
  %2810 = icmp sle i32 %2808, %2809
  br i1 %2810, label %2811, label %3113

2811:                                             ; preds = %2807
  %2812 = load i32, ptr %34, align 4, !tbaa !9
  %2813 = load i32, ptr %35, align 4, !tbaa !9
  %2814 = load i32, ptr %19, align 4, !tbaa !9
  %2815 = mul nsw i32 %2813, %2814
  %2816 = add nsw i32 %2812, %2815
  store i32 %2816, ptr %22, align 4, !tbaa !9
  %2817 = load ptr, ptr %14, align 8, !tbaa !5
  %2818 = load i32, ptr %22, align 4, !tbaa !9
  %2819 = sext i32 %2818 to i64
  %2820 = getelementptr inbounds %struct.doublecomplex, ptr %2817, i64 %2819
  %2821 = getelementptr inbounds %struct.doublecomplex, ptr %2820, i32 0, i32 0
  %2822 = load double, ptr %2821, align 8, !tbaa !11
  %2823 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  store double %2822, ptr %2823, align 8, !tbaa !11
  %2824 = load ptr, ptr %14, align 8, !tbaa !5
  %2825 = load i32, ptr %22, align 4, !tbaa !9
  %2826 = sext i32 %2825 to i64
  %2827 = getelementptr inbounds %struct.doublecomplex, ptr %2824, i64 %2826
  %2828 = getelementptr inbounds %struct.doublecomplex, ptr %2827, i32 0, i32 1
  %2829 = load double, ptr %2828, align 8, !tbaa !14
  %2830 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  store double %2829, ptr %2830, align 8, !tbaa !14
  %2831 = load i32, ptr %34, align 4, !tbaa !9
  %2832 = sub nsw i32 %2831, 1
  %2833 = load i32, ptr %35, align 4, !tbaa !9
  %2834 = load i32, ptr %19, align 4, !tbaa !9
  %2835 = mul nsw i32 %2833, %2834
  %2836 = add nsw i32 %2832, %2835
  store i32 %2836, ptr %22, align 4, !tbaa !9
  %2837 = load ptr, ptr %14, align 8, !tbaa !5
  %2838 = load i32, ptr %22, align 4, !tbaa !9
  %2839 = sext i32 %2838 to i64
  %2840 = getelementptr inbounds %struct.doublecomplex, ptr %2837, i64 %2839
  %2841 = getelementptr inbounds %struct.doublecomplex, ptr %2840, i32 0, i32 0
  %2842 = load double, ptr %2841, align 8, !tbaa !11
  %2843 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  store double %2842, ptr %2843, align 8, !tbaa !11
  %2844 = load ptr, ptr %14, align 8, !tbaa !5
  %2845 = load i32, ptr %22, align 4, !tbaa !9
  %2846 = sext i32 %2845 to i64
  %2847 = getelementptr inbounds %struct.doublecomplex, ptr %2844, i64 %2846
  %2848 = getelementptr inbounds %struct.doublecomplex, ptr %2847, i32 0, i32 1
  %2849 = load double, ptr %2848, align 8, !tbaa !14
  %2850 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  store double %2849, ptr %2850, align 8, !tbaa !14
  %2851 = load i32, ptr %34, align 4, !tbaa !9
  %2852 = load i32, ptr %35, align 4, !tbaa !9
  %2853 = load i32, ptr %19, align 4, !tbaa !9
  %2854 = mul nsw i32 %2852, %2853
  %2855 = add nsw i32 %2851, %2854
  store i32 %2855, ptr %22, align 4, !tbaa !9
  %2856 = load i32, ptr %47, align 4, !tbaa !9
  %2857 = load i32, ptr %46, align 4, !tbaa !9
  %2858 = add nsw i32 %2856, %2857
  %2859 = load i32, ptr %34, align 4, !tbaa !9
  %2860 = add nsw i32 %2858, %2859
  %2861 = load i32, ptr %31, align 4, !tbaa !9
  %2862 = load i32, ptr %19, align 4, !tbaa !9
  %2863 = mul nsw i32 %2861, %2862
  %2864 = add nsw i32 %2860, %2863
  store i32 %2864, ptr %23, align 4, !tbaa !9
  %2865 = load ptr, ptr %14, align 8, !tbaa !5
  %2866 = load i32, ptr %23, align 4, !tbaa !9
  %2867 = sext i32 %2866 to i64
  %2868 = getelementptr inbounds %struct.doublecomplex, ptr %2865, i64 %2867
  %2869 = getelementptr inbounds %struct.doublecomplex, ptr %2868, i32 0, i32 0
  %2870 = load double, ptr %2869, align 8, !tbaa !11
  %2871 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2872 = load double, ptr %2871, align 8, !tbaa !11
  %2873 = load ptr, ptr %14, align 8, !tbaa !5
  %2874 = load i32, ptr %23, align 4, !tbaa !9
  %2875 = sext i32 %2874 to i64
  %2876 = getelementptr inbounds %struct.doublecomplex, ptr %2873, i64 %2875
  %2877 = getelementptr inbounds %struct.doublecomplex, ptr %2876, i32 0, i32 1
  %2878 = load double, ptr %2877, align 8, !tbaa !14
  %2879 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2880 = load double, ptr %2879, align 8, !tbaa !14
  %2881 = fmul double %2878, %2880
  %2882 = fneg double %2881
  %2883 = call double @llvm.fmuladd.f64(double %2870, double %2872, double %2882)
  %2884 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %2883, ptr %2884, align 8, !tbaa !11
  %2885 = load ptr, ptr %14, align 8, !tbaa !5
  %2886 = load i32, ptr %23, align 4, !tbaa !9
  %2887 = sext i32 %2886 to i64
  %2888 = getelementptr inbounds %struct.doublecomplex, ptr %2885, i64 %2887
  %2889 = getelementptr inbounds %struct.doublecomplex, ptr %2888, i32 0, i32 0
  %2890 = load double, ptr %2889, align 8, !tbaa !11
  %2891 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %2892 = load double, ptr %2891, align 8, !tbaa !14
  %2893 = load ptr, ptr %14, align 8, !tbaa !5
  %2894 = load i32, ptr %23, align 4, !tbaa !9
  %2895 = sext i32 %2894 to i64
  %2896 = getelementptr inbounds %struct.doublecomplex, ptr %2893, i64 %2895
  %2897 = getelementptr inbounds %struct.doublecomplex, ptr %2896, i32 0, i32 1
  %2898 = load double, ptr %2897, align 8, !tbaa !14
  %2899 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %2900 = load double, ptr %2899, align 8, !tbaa !11
  %2901 = fmul double %2898, %2900
  %2902 = call double @llvm.fmuladd.f64(double %2890, double %2892, double %2901)
  %2903 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %2902, ptr %2903, align 8, !tbaa !14
  %2904 = load i32, ptr %47, align 4, !tbaa !9
  %2905 = load i32, ptr %46, align 4, !tbaa !9
  %2906 = add nsw i32 %2904, %2905
  %2907 = load i32, ptr %34, align 4, !tbaa !9
  %2908 = add nsw i32 %2906, %2907
  %2909 = load i32, ptr %31, align 4, !tbaa !9
  %2910 = add nsw i32 %2909, 1
  %2911 = load i32, ptr %19, align 4, !tbaa !9
  %2912 = mul nsw i32 %2910, %2911
  %2913 = add nsw i32 %2908, %2912
  store i32 %2913, ptr %24, align 4, !tbaa !9
  %2914 = load ptr, ptr %14, align 8, !tbaa !5
  %2915 = load i32, ptr %24, align 4, !tbaa !9
  %2916 = sext i32 %2915 to i64
  %2917 = getelementptr inbounds %struct.doublecomplex, ptr %2914, i64 %2916
  %2918 = getelementptr inbounds %struct.doublecomplex, ptr %2917, i32 0, i32 0
  %2919 = load double, ptr %2918, align 8, !tbaa !11
  %2920 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %2921 = load double, ptr %2920, align 8, !tbaa !11
  %2922 = load ptr, ptr %14, align 8, !tbaa !5
  %2923 = load i32, ptr %24, align 4, !tbaa !9
  %2924 = sext i32 %2923 to i64
  %2925 = getelementptr inbounds %struct.doublecomplex, ptr %2922, i64 %2924
  %2926 = getelementptr inbounds %struct.doublecomplex, ptr %2925, i32 0, i32 1
  %2927 = load double, ptr %2926, align 8, !tbaa !14
  %2928 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %2929 = load double, ptr %2928, align 8, !tbaa !14
  %2930 = fmul double %2927, %2929
  %2931 = fneg double %2930
  %2932 = call double @llvm.fmuladd.f64(double %2919, double %2921, double %2931)
  %2933 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %2932, ptr %2933, align 8, !tbaa !11
  %2934 = load ptr, ptr %14, align 8, !tbaa !5
  %2935 = load i32, ptr %24, align 4, !tbaa !9
  %2936 = sext i32 %2935 to i64
  %2937 = getelementptr inbounds %struct.doublecomplex, ptr %2934, i64 %2936
  %2938 = getelementptr inbounds %struct.doublecomplex, ptr %2937, i32 0, i32 0
  %2939 = load double, ptr %2938, align 8, !tbaa !11
  %2940 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %2941 = load double, ptr %2940, align 8, !tbaa !14
  %2942 = load ptr, ptr %14, align 8, !tbaa !5
  %2943 = load i32, ptr %24, align 4, !tbaa !9
  %2944 = sext i32 %2943 to i64
  %2945 = getelementptr inbounds %struct.doublecomplex, ptr %2942, i64 %2944
  %2946 = getelementptr inbounds %struct.doublecomplex, ptr %2945, i32 0, i32 1
  %2947 = load double, ptr %2946, align 8, !tbaa !14
  %2948 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %2949 = load double, ptr %2948, align 8, !tbaa !11
  %2950 = fmul double %2947, %2949
  %2951 = call double @llvm.fmuladd.f64(double %2939, double %2941, double %2950)
  %2952 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %2951, ptr %2952, align 8, !tbaa !14
  %2953 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %2954 = load double, ptr %2953, align 8, !tbaa !11
  %2955 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %2956 = load double, ptr %2955, align 8, !tbaa !11
  %2957 = fadd double %2954, %2956
  %2958 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %2957, ptr %2958, align 8, !tbaa !11
  %2959 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %2960 = load double, ptr %2959, align 8, !tbaa !14
  %2961 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %2962 = load double, ptr %2961, align 8, !tbaa !14
  %2963 = fadd double %2960, %2962
  %2964 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %2963, ptr %2964, align 8, !tbaa !14
  %2965 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %2966 = load double, ptr %2965, align 8, !tbaa !11
  %2967 = load ptr, ptr %14, align 8, !tbaa !5
  %2968 = load i32, ptr %22, align 4, !tbaa !9
  %2969 = sext i32 %2968 to i64
  %2970 = getelementptr inbounds %struct.doublecomplex, ptr %2967, i64 %2969
  %2971 = getelementptr inbounds %struct.doublecomplex, ptr %2970, i32 0, i32 0
  store double %2966, ptr %2971, align 8, !tbaa !11
  %2972 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %2973 = load double, ptr %2972, align 8, !tbaa !14
  %2974 = load ptr, ptr %14, align 8, !tbaa !5
  %2975 = load i32, ptr %22, align 4, !tbaa !9
  %2976 = sext i32 %2975 to i64
  %2977 = getelementptr inbounds %struct.doublecomplex, ptr %2974, i64 %2976
  %2978 = getelementptr inbounds %struct.doublecomplex, ptr %2977, i32 0, i32 1
  store double %2973, ptr %2978, align 8, !tbaa !14
  %2979 = load i32, ptr %34, align 4, !tbaa !9
  %2980 = sub nsw i32 %2979, 1
  %2981 = load i32, ptr %35, align 4, !tbaa !9
  %2982 = load i32, ptr %19, align 4, !tbaa !9
  %2983 = mul nsw i32 %2981, %2982
  %2984 = add nsw i32 %2980, %2983
  store i32 %2984, ptr %22, align 4, !tbaa !9
  %2985 = load i32, ptr %47, align 4, !tbaa !9
  %2986 = load i32, ptr %46, align 4, !tbaa !9
  %2987 = add nsw i32 %2985, %2986
  %2988 = load i32, ptr %34, align 4, !tbaa !9
  %2989 = add nsw i32 %2987, %2988
  %2990 = sub nsw i32 %2989, 1
  %2991 = load i32, ptr %31, align 4, !tbaa !9
  %2992 = add nsw i32 %2991, 1
  %2993 = load i32, ptr %19, align 4, !tbaa !9
  %2994 = mul nsw i32 %2992, %2993
  %2995 = add nsw i32 %2990, %2994
  store i32 %2995, ptr %23, align 4, !tbaa !9
  %2996 = load ptr, ptr %14, align 8, !tbaa !5
  %2997 = load i32, ptr %23, align 4, !tbaa !9
  %2998 = sext i32 %2997 to i64
  %2999 = getelementptr inbounds %struct.doublecomplex, ptr %2996, i64 %2998
  %3000 = getelementptr inbounds %struct.doublecomplex, ptr %2999, i32 0, i32 0
  %3001 = load double, ptr %3000, align 8, !tbaa !11
  %3002 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %3003 = load double, ptr %3002, align 8, !tbaa !11
  %3004 = load ptr, ptr %14, align 8, !tbaa !5
  %3005 = load i32, ptr %23, align 4, !tbaa !9
  %3006 = sext i32 %3005 to i64
  %3007 = getelementptr inbounds %struct.doublecomplex, ptr %3004, i64 %3006
  %3008 = getelementptr inbounds %struct.doublecomplex, ptr %3007, i32 0, i32 1
  %3009 = load double, ptr %3008, align 8, !tbaa !14
  %3010 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %3011 = load double, ptr %3010, align 8, !tbaa !14
  %3012 = fmul double %3009, %3011
  %3013 = fneg double %3012
  %3014 = call double @llvm.fmuladd.f64(double %3001, double %3003, double %3013)
  %3015 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %3014, ptr %3015, align 8, !tbaa !11
  %3016 = load ptr, ptr %14, align 8, !tbaa !5
  %3017 = load i32, ptr %23, align 4, !tbaa !9
  %3018 = sext i32 %3017 to i64
  %3019 = getelementptr inbounds %struct.doublecomplex, ptr %3016, i64 %3018
  %3020 = getelementptr inbounds %struct.doublecomplex, ptr %3019, i32 0, i32 0
  %3021 = load double, ptr %3020, align 8, !tbaa !11
  %3022 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %3023 = load double, ptr %3022, align 8, !tbaa !14
  %3024 = load ptr, ptr %14, align 8, !tbaa !5
  %3025 = load i32, ptr %23, align 4, !tbaa !9
  %3026 = sext i32 %3025 to i64
  %3027 = getelementptr inbounds %struct.doublecomplex, ptr %3024, i64 %3026
  %3028 = getelementptr inbounds %struct.doublecomplex, ptr %3027, i32 0, i32 1
  %3029 = load double, ptr %3028, align 8, !tbaa !14
  %3030 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %3031 = load double, ptr %3030, align 8, !tbaa !11
  %3032 = fmul double %3029, %3031
  %3033 = call double @llvm.fmuladd.f64(double %3021, double %3023, double %3032)
  %3034 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %3033, ptr %3034, align 8, !tbaa !14
  %3035 = load i32, ptr %47, align 4, !tbaa !9
  %3036 = load i32, ptr %46, align 4, !tbaa !9
  %3037 = add nsw i32 %3035, %3036
  %3038 = load i32, ptr %34, align 4, !tbaa !9
  %3039 = add nsw i32 %3037, %3038
  %3040 = sub nsw i32 %3039, 1
  %3041 = load i32, ptr %31, align 4, !tbaa !9
  %3042 = load i32, ptr %19, align 4, !tbaa !9
  %3043 = mul nsw i32 %3041, %3042
  %3044 = add nsw i32 %3040, %3043
  store i32 %3044, ptr %24, align 4, !tbaa !9
  %3045 = load ptr, ptr %14, align 8, !tbaa !5
  %3046 = load i32, ptr %24, align 4, !tbaa !9
  %3047 = sext i32 %3046 to i64
  %3048 = getelementptr inbounds %struct.doublecomplex, ptr %3045, i64 %3047
  %3049 = getelementptr inbounds %struct.doublecomplex, ptr %3048, i32 0, i32 0
  %3050 = load double, ptr %3049, align 8, !tbaa !11
  %3051 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %3052 = load double, ptr %3051, align 8, !tbaa !11
  %3053 = load ptr, ptr %14, align 8, !tbaa !5
  %3054 = load i32, ptr %24, align 4, !tbaa !9
  %3055 = sext i32 %3054 to i64
  %3056 = getelementptr inbounds %struct.doublecomplex, ptr %3053, i64 %3055
  %3057 = getelementptr inbounds %struct.doublecomplex, ptr %3056, i32 0, i32 1
  %3058 = load double, ptr %3057, align 8, !tbaa !14
  %3059 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %3060 = load double, ptr %3059, align 8, !tbaa !14
  %3061 = fmul double %3058, %3060
  %3062 = fneg double %3061
  %3063 = call double @llvm.fmuladd.f64(double %3050, double %3052, double %3062)
  %3064 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %3063, ptr %3064, align 8, !tbaa !11
  %3065 = load ptr, ptr %14, align 8, !tbaa !5
  %3066 = load i32, ptr %24, align 4, !tbaa !9
  %3067 = sext i32 %3066 to i64
  %3068 = getelementptr inbounds %struct.doublecomplex, ptr %3065, i64 %3067
  %3069 = getelementptr inbounds %struct.doublecomplex, ptr %3068, i32 0, i32 0
  %3070 = load double, ptr %3069, align 8, !tbaa !11
  %3071 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 1
  %3072 = load double, ptr %3071, align 8, !tbaa !14
  %3073 = load ptr, ptr %14, align 8, !tbaa !5
  %3074 = load i32, ptr %24, align 4, !tbaa !9
  %3075 = sext i32 %3074 to i64
  %3076 = getelementptr inbounds %struct.doublecomplex, ptr %3073, i64 %3075
  %3077 = getelementptr inbounds %struct.doublecomplex, ptr %3076, i32 0, i32 1
  %3078 = load double, ptr %3077, align 8, !tbaa !14
  %3079 = getelementptr inbounds %struct.doublecomplex, ptr %49, i32 0, i32 0
  %3080 = load double, ptr %3079, align 8, !tbaa !11
  %3081 = fmul double %3078, %3080
  %3082 = call double @llvm.fmuladd.f64(double %3070, double %3072, double %3081)
  %3083 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %3082, ptr %3083, align 8, !tbaa !14
  %3084 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %3085 = load double, ptr %3084, align 8, !tbaa !11
  %3086 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %3087 = load double, ptr %3086, align 8, !tbaa !11
  %3088 = fadd double %3085, %3087
  %3089 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %3088, ptr %3089, align 8, !tbaa !11
  %3090 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %3091 = load double, ptr %3090, align 8, !tbaa !14
  %3092 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %3093 = load double, ptr %3092, align 8, !tbaa !14
  %3094 = fadd double %3091, %3093
  %3095 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %3094, ptr %3095, align 8, !tbaa !14
  %3096 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %3097 = load double, ptr %3096, align 8, !tbaa !11
  %3098 = load ptr, ptr %14, align 8, !tbaa !5
  %3099 = load i32, ptr %22, align 4, !tbaa !9
  %3100 = sext i32 %3099 to i64
  %3101 = getelementptr inbounds %struct.doublecomplex, ptr %3098, i64 %3100
  %3102 = getelementptr inbounds %struct.doublecomplex, ptr %3101, i32 0, i32 0
  store double %3097, ptr %3102, align 8, !tbaa !11
  %3103 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %3104 = load double, ptr %3103, align 8, !tbaa !14
  %3105 = load ptr, ptr %14, align 8, !tbaa !5
  %3106 = load i32, ptr %22, align 4, !tbaa !9
  %3107 = sext i32 %3106 to i64
  %3108 = getelementptr inbounds %struct.doublecomplex, ptr %3105, i64 %3107
  %3109 = getelementptr inbounds %struct.doublecomplex, ptr %3108, i32 0, i32 1
  store double %3104, ptr %3109, align 8, !tbaa !14
  br label %3110

3110:                                             ; preds = %2811
  %3111 = load i32, ptr %35, align 4, !tbaa !9
  %3112 = add nsw i32 %3111, 1
  store i32 %3112, ptr %35, align 4, !tbaa !9
  br label %2807, !llvm.loop !48

3113:                                             ; preds = %2807
  %3114 = load i32, ptr %34, align 4, !tbaa !9
  %3115 = add nsw i32 %3114, -2
  store i32 %3115, ptr %34, align 4, !tbaa !9
  br label %3116

3116:                                             ; preds = %3113, %2802
  br label %2690, !llvm.loop !49

3117:                                             ; preds = %2690
  %3118 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3118, ptr %34, align 4, !tbaa !9
  br label %3119

3119:                                             ; preds = %3568, %3117
  %3120 = load i32, ptr %34, align 4, !tbaa !9
  %3121 = icmp sge i32 %3120, 1
  br i1 %3121, label %3122, label %3569

3122:                                             ; preds = %3119
  %3123 = load ptr, ptr %13, align 8, !tbaa !5
  %3124 = load i32, ptr %47, align 4, !tbaa !9
  %3125 = load i32, ptr %34, align 4, !tbaa !9
  %3126 = add nsw i32 %3124, %3125
  %3127 = sext i32 %3126 to i64
  %3128 = getelementptr inbounds i32, ptr %3123, i64 %3127
  %3129 = load i32, ptr %3128, align 4, !tbaa !9
  %3130 = icmp sgt i32 %3129, 0
  br i1 %3130, label %3131, label %3234

3131:                                             ; preds = %3122
  %3132 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3132, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %3133

3133:                                             ; preds = %3228, %3131
  %3134 = load i32, ptr %35, align 4, !tbaa !9
  %3135 = load i32, ptr %21, align 4, !tbaa !9
  %3136 = icmp sle i32 %3134, %3135
  br i1 %3136, label %3137, label %3231

3137:                                             ; preds = %3133
  %3138 = load i32, ptr %43, align 4, !tbaa !9
  %3139 = load i32, ptr %34, align 4, !tbaa !9
  %3140 = add nsw i32 %3138, %3139
  %3141 = load i32, ptr %35, align 4, !tbaa !9
  %3142 = load i32, ptr %19, align 4, !tbaa !9
  %3143 = mul nsw i32 %3141, %3142
  %3144 = add nsw i32 %3140, %3143
  store i32 %3144, ptr %22, align 4, !tbaa !9
  %3145 = load i32, ptr %47, align 4, !tbaa !9
  %3146 = load i32, ptr %34, align 4, !tbaa !9
  %3147 = add nsw i32 %3145, %3146
  %3148 = load i32, ptr %31, align 4, !tbaa !9
  %3149 = load i32, ptr %19, align 4, !tbaa !9
  %3150 = mul nsw i32 %3148, %3149
  %3151 = add nsw i32 %3147, %3150
  store i32 %3151, ptr %23, align 4, !tbaa !9
  %3152 = load i32, ptr %43, align 4, !tbaa !9
  %3153 = load i32, ptr %34, align 4, !tbaa !9
  %3154 = add nsw i32 %3152, %3153
  %3155 = load i32, ptr %35, align 4, !tbaa !9
  %3156 = load i32, ptr %19, align 4, !tbaa !9
  %3157 = mul nsw i32 %3155, %3156
  %3158 = add nsw i32 %3154, %3157
  store i32 %3158, ptr %24, align 4, !tbaa !9
  %3159 = load ptr, ptr %14, align 8, !tbaa !5
  %3160 = load i32, ptr %23, align 4, !tbaa !9
  %3161 = sext i32 %3160 to i64
  %3162 = getelementptr inbounds %struct.doublecomplex, ptr %3159, i64 %3161
  %3163 = getelementptr inbounds %struct.doublecomplex, ptr %3162, i32 0, i32 0
  %3164 = load double, ptr %3163, align 8, !tbaa !11
  %3165 = load ptr, ptr %14, align 8, !tbaa !5
  %3166 = load i32, ptr %24, align 4, !tbaa !9
  %3167 = sext i32 %3166 to i64
  %3168 = getelementptr inbounds %struct.doublecomplex, ptr %3165, i64 %3167
  %3169 = getelementptr inbounds %struct.doublecomplex, ptr %3168, i32 0, i32 0
  %3170 = load double, ptr %3169, align 8, !tbaa !11
  %3171 = load ptr, ptr %14, align 8, !tbaa !5
  %3172 = load i32, ptr %23, align 4, !tbaa !9
  %3173 = sext i32 %3172 to i64
  %3174 = getelementptr inbounds %struct.doublecomplex, ptr %3171, i64 %3173
  %3175 = getelementptr inbounds %struct.doublecomplex, ptr %3174, i32 0, i32 1
  %3176 = load double, ptr %3175, align 8, !tbaa !14
  %3177 = load ptr, ptr %14, align 8, !tbaa !5
  %3178 = load i32, ptr %24, align 4, !tbaa !9
  %3179 = sext i32 %3178 to i64
  %3180 = getelementptr inbounds %struct.doublecomplex, ptr %3177, i64 %3179
  %3181 = getelementptr inbounds %struct.doublecomplex, ptr %3180, i32 0, i32 1
  %3182 = load double, ptr %3181, align 8, !tbaa !14
  %3183 = fmul double %3176, %3182
  %3184 = fneg double %3183
  %3185 = call double @llvm.fmuladd.f64(double %3164, double %3170, double %3184)
  %3186 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %3185, ptr %3186, align 8, !tbaa !11
  %3187 = load ptr, ptr %14, align 8, !tbaa !5
  %3188 = load i32, ptr %23, align 4, !tbaa !9
  %3189 = sext i32 %3188 to i64
  %3190 = getelementptr inbounds %struct.doublecomplex, ptr %3187, i64 %3189
  %3191 = getelementptr inbounds %struct.doublecomplex, ptr %3190, i32 0, i32 0
  %3192 = load double, ptr %3191, align 8, !tbaa !11
  %3193 = load ptr, ptr %14, align 8, !tbaa !5
  %3194 = load i32, ptr %24, align 4, !tbaa !9
  %3195 = sext i32 %3194 to i64
  %3196 = getelementptr inbounds %struct.doublecomplex, ptr %3193, i64 %3195
  %3197 = getelementptr inbounds %struct.doublecomplex, ptr %3196, i32 0, i32 1
  %3198 = load double, ptr %3197, align 8, !tbaa !14
  %3199 = load ptr, ptr %14, align 8, !tbaa !5
  %3200 = load i32, ptr %23, align 4, !tbaa !9
  %3201 = sext i32 %3200 to i64
  %3202 = getelementptr inbounds %struct.doublecomplex, ptr %3199, i64 %3201
  %3203 = getelementptr inbounds %struct.doublecomplex, ptr %3202, i32 0, i32 1
  %3204 = load double, ptr %3203, align 8, !tbaa !14
  %3205 = load ptr, ptr %14, align 8, !tbaa !5
  %3206 = load i32, ptr %24, align 4, !tbaa !9
  %3207 = sext i32 %3206 to i64
  %3208 = getelementptr inbounds %struct.doublecomplex, ptr %3205, i64 %3207
  %3209 = getelementptr inbounds %struct.doublecomplex, ptr %3208, i32 0, i32 0
  %3210 = load double, ptr %3209, align 8, !tbaa !11
  %3211 = fmul double %3204, %3210
  %3212 = call double @llvm.fmuladd.f64(double %3192, double %3198, double %3211)
  %3213 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %3212, ptr %3213, align 8, !tbaa !14
  %3214 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %3215 = load double, ptr %3214, align 8, !tbaa !11
  %3216 = load ptr, ptr %14, align 8, !tbaa !5
  %3217 = load i32, ptr %22, align 4, !tbaa !9
  %3218 = sext i32 %3217 to i64
  %3219 = getelementptr inbounds %struct.doublecomplex, ptr %3216, i64 %3218
  %3220 = getelementptr inbounds %struct.doublecomplex, ptr %3219, i32 0, i32 0
  store double %3215, ptr %3220, align 8, !tbaa !11
  %3221 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %3222 = load double, ptr %3221, align 8, !tbaa !14
  %3223 = load ptr, ptr %14, align 8, !tbaa !5
  %3224 = load i32, ptr %22, align 4, !tbaa !9
  %3225 = sext i32 %3224 to i64
  %3226 = getelementptr inbounds %struct.doublecomplex, ptr %3223, i64 %3225
  %3227 = getelementptr inbounds %struct.doublecomplex, ptr %3226, i32 0, i32 1
  store double %3222, ptr %3227, align 8, !tbaa !14
  br label %3228

3228:                                             ; preds = %3137
  %3229 = load i32, ptr %35, align 4, !tbaa !9
  %3230 = add nsw i32 %3229, 1
  store i32 %3230, ptr %35, align 4, !tbaa !9
  br label %3133, !llvm.loop !50

3231:                                             ; preds = %3133
  %3232 = load i32, ptr %34, align 4, !tbaa !9
  %3233 = add nsw i32 %3232, -1
  store i32 %3233, ptr %34, align 4, !tbaa !9
  br label %3568

3234:                                             ; preds = %3122
  %3235 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3235, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %3236

3236:                                             ; preds = %3562, %3234
  %3237 = load i32, ptr %35, align 4, !tbaa !9
  %3238 = load i32, ptr %21, align 4, !tbaa !9
  %3239 = icmp sle i32 %3237, %3238
  br i1 %3239, label %3240, label %3565

3240:                                             ; preds = %3236
  %3241 = load i32, ptr %43, align 4, !tbaa !9
  %3242 = load i32, ptr %34, align 4, !tbaa !9
  %3243 = add nsw i32 %3241, %3242
  %3244 = load i32, ptr %35, align 4, !tbaa !9
  %3245 = load i32, ptr %19, align 4, !tbaa !9
  %3246 = mul nsw i32 %3244, %3245
  %3247 = add nsw i32 %3243, %3246
  store i32 %3247, ptr %22, align 4, !tbaa !9
  %3248 = load ptr, ptr %14, align 8, !tbaa !5
  %3249 = load i32, ptr %22, align 4, !tbaa !9
  %3250 = sext i32 %3249 to i64
  %3251 = getelementptr inbounds %struct.doublecomplex, ptr %3248, i64 %3250
  %3252 = getelementptr inbounds %struct.doublecomplex, ptr %3251, i32 0, i32 0
  %3253 = load double, ptr %3252, align 8, !tbaa !11
  %3254 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  store double %3253, ptr %3254, align 8, !tbaa !11
  %3255 = load ptr, ptr %14, align 8, !tbaa !5
  %3256 = load i32, ptr %22, align 4, !tbaa !9
  %3257 = sext i32 %3256 to i64
  %3258 = getelementptr inbounds %struct.doublecomplex, ptr %3255, i64 %3257
  %3259 = getelementptr inbounds %struct.doublecomplex, ptr %3258, i32 0, i32 1
  %3260 = load double, ptr %3259, align 8, !tbaa !14
  %3261 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  store double %3260, ptr %3261, align 8, !tbaa !14
  %3262 = load i32, ptr %43, align 4, !tbaa !9
  %3263 = load i32, ptr %34, align 4, !tbaa !9
  %3264 = add nsw i32 %3262, %3263
  %3265 = sub nsw i32 %3264, 1
  %3266 = load i32, ptr %35, align 4, !tbaa !9
  %3267 = load i32, ptr %19, align 4, !tbaa !9
  %3268 = mul nsw i32 %3266, %3267
  %3269 = add nsw i32 %3265, %3268
  store i32 %3269, ptr %22, align 4, !tbaa !9
  %3270 = load ptr, ptr %14, align 8, !tbaa !5
  %3271 = load i32, ptr %22, align 4, !tbaa !9
  %3272 = sext i32 %3271 to i64
  %3273 = getelementptr inbounds %struct.doublecomplex, ptr %3270, i64 %3272
  %3274 = getelementptr inbounds %struct.doublecomplex, ptr %3273, i32 0, i32 0
  %3275 = load double, ptr %3274, align 8, !tbaa !11
  %3276 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %3275, ptr %3276, align 8, !tbaa !11
  %3277 = load ptr, ptr %14, align 8, !tbaa !5
  %3278 = load i32, ptr %22, align 4, !tbaa !9
  %3279 = sext i32 %3278 to i64
  %3280 = getelementptr inbounds %struct.doublecomplex, ptr %3277, i64 %3279
  %3281 = getelementptr inbounds %struct.doublecomplex, ptr %3280, i32 0, i32 1
  %3282 = load double, ptr %3281, align 8, !tbaa !14
  %3283 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %3282, ptr %3283, align 8, !tbaa !14
  %3284 = load i32, ptr %43, align 4, !tbaa !9
  %3285 = load i32, ptr %34, align 4, !tbaa !9
  %3286 = add nsw i32 %3284, %3285
  %3287 = load i32, ptr %35, align 4, !tbaa !9
  %3288 = load i32, ptr %19, align 4, !tbaa !9
  %3289 = mul nsw i32 %3287, %3288
  %3290 = add nsw i32 %3286, %3289
  store i32 %3290, ptr %22, align 4, !tbaa !9
  %3291 = load i32, ptr %47, align 4, !tbaa !9
  %3292 = load i32, ptr %34, align 4, !tbaa !9
  %3293 = add nsw i32 %3291, %3292
  %3294 = load i32, ptr %31, align 4, !tbaa !9
  %3295 = load i32, ptr %19, align 4, !tbaa !9
  %3296 = mul nsw i32 %3294, %3295
  %3297 = add nsw i32 %3293, %3296
  store i32 %3297, ptr %23, align 4, !tbaa !9
  %3298 = load i32, ptr %43, align 4, !tbaa !9
  %3299 = load i32, ptr %34, align 4, !tbaa !9
  %3300 = add nsw i32 %3298, %3299
  %3301 = load i32, ptr %35, align 4, !tbaa !9
  %3302 = load i32, ptr %19, align 4, !tbaa !9
  %3303 = mul nsw i32 %3301, %3302
  %3304 = add nsw i32 %3300, %3303
  store i32 %3304, ptr %24, align 4, !tbaa !9
  %3305 = load ptr, ptr %14, align 8, !tbaa !5
  %3306 = load i32, ptr %23, align 4, !tbaa !9
  %3307 = sext i32 %3306 to i64
  %3308 = getelementptr inbounds %struct.doublecomplex, ptr %3305, i64 %3307
  %3309 = getelementptr inbounds %struct.doublecomplex, ptr %3308, i32 0, i32 0
  %3310 = load double, ptr %3309, align 8, !tbaa !11
  %3311 = load ptr, ptr %14, align 8, !tbaa !5
  %3312 = load i32, ptr %24, align 4, !tbaa !9
  %3313 = sext i32 %3312 to i64
  %3314 = getelementptr inbounds %struct.doublecomplex, ptr %3311, i64 %3313
  %3315 = getelementptr inbounds %struct.doublecomplex, ptr %3314, i32 0, i32 0
  %3316 = load double, ptr %3315, align 8, !tbaa !11
  %3317 = load ptr, ptr %14, align 8, !tbaa !5
  %3318 = load i32, ptr %23, align 4, !tbaa !9
  %3319 = sext i32 %3318 to i64
  %3320 = getelementptr inbounds %struct.doublecomplex, ptr %3317, i64 %3319
  %3321 = getelementptr inbounds %struct.doublecomplex, ptr %3320, i32 0, i32 1
  %3322 = load double, ptr %3321, align 8, !tbaa !14
  %3323 = load ptr, ptr %14, align 8, !tbaa !5
  %3324 = load i32, ptr %24, align 4, !tbaa !9
  %3325 = sext i32 %3324 to i64
  %3326 = getelementptr inbounds %struct.doublecomplex, ptr %3323, i64 %3325
  %3327 = getelementptr inbounds %struct.doublecomplex, ptr %3326, i32 0, i32 1
  %3328 = load double, ptr %3327, align 8, !tbaa !14
  %3329 = fmul double %3322, %3328
  %3330 = fneg double %3329
  %3331 = call double @llvm.fmuladd.f64(double %3310, double %3316, double %3330)
  %3332 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %3331, ptr %3332, align 8, !tbaa !11
  %3333 = load ptr, ptr %14, align 8, !tbaa !5
  %3334 = load i32, ptr %23, align 4, !tbaa !9
  %3335 = sext i32 %3334 to i64
  %3336 = getelementptr inbounds %struct.doublecomplex, ptr %3333, i64 %3335
  %3337 = getelementptr inbounds %struct.doublecomplex, ptr %3336, i32 0, i32 0
  %3338 = load double, ptr %3337, align 8, !tbaa !11
  %3339 = load ptr, ptr %14, align 8, !tbaa !5
  %3340 = load i32, ptr %24, align 4, !tbaa !9
  %3341 = sext i32 %3340 to i64
  %3342 = getelementptr inbounds %struct.doublecomplex, ptr %3339, i64 %3341
  %3343 = getelementptr inbounds %struct.doublecomplex, ptr %3342, i32 0, i32 1
  %3344 = load double, ptr %3343, align 8, !tbaa !14
  %3345 = load ptr, ptr %14, align 8, !tbaa !5
  %3346 = load i32, ptr %23, align 4, !tbaa !9
  %3347 = sext i32 %3346 to i64
  %3348 = getelementptr inbounds %struct.doublecomplex, ptr %3345, i64 %3347
  %3349 = getelementptr inbounds %struct.doublecomplex, ptr %3348, i32 0, i32 1
  %3350 = load double, ptr %3349, align 8, !tbaa !14
  %3351 = load ptr, ptr %14, align 8, !tbaa !5
  %3352 = load i32, ptr %24, align 4, !tbaa !9
  %3353 = sext i32 %3352 to i64
  %3354 = getelementptr inbounds %struct.doublecomplex, ptr %3351, i64 %3353
  %3355 = getelementptr inbounds %struct.doublecomplex, ptr %3354, i32 0, i32 0
  %3356 = load double, ptr %3355, align 8, !tbaa !11
  %3357 = fmul double %3350, %3356
  %3358 = call double @llvm.fmuladd.f64(double %3338, double %3344, double %3357)
  %3359 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %3358, ptr %3359, align 8, !tbaa !14
  %3360 = load i32, ptr %47, align 4, !tbaa !9
  %3361 = load i32, ptr %34, align 4, !tbaa !9
  %3362 = add nsw i32 %3360, %3361
  %3363 = load i32, ptr %31, align 4, !tbaa !9
  %3364 = add nsw i32 %3363, 1
  %3365 = load i32, ptr %19, align 4, !tbaa !9
  %3366 = mul nsw i32 %3364, %3365
  %3367 = add nsw i32 %3362, %3366
  store i32 %3367, ptr %25, align 4, !tbaa !9
  %3368 = load ptr, ptr %14, align 8, !tbaa !5
  %3369 = load i32, ptr %25, align 4, !tbaa !9
  %3370 = sext i32 %3369 to i64
  %3371 = getelementptr inbounds %struct.doublecomplex, ptr %3368, i64 %3370
  %3372 = getelementptr inbounds %struct.doublecomplex, ptr %3371, i32 0, i32 0
  %3373 = load double, ptr %3372, align 8, !tbaa !11
  %3374 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %3375 = load double, ptr %3374, align 8, !tbaa !11
  %3376 = load ptr, ptr %14, align 8, !tbaa !5
  %3377 = load i32, ptr %25, align 4, !tbaa !9
  %3378 = sext i32 %3377 to i64
  %3379 = getelementptr inbounds %struct.doublecomplex, ptr %3376, i64 %3378
  %3380 = getelementptr inbounds %struct.doublecomplex, ptr %3379, i32 0, i32 1
  %3381 = load double, ptr %3380, align 8, !tbaa !14
  %3382 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %3383 = load double, ptr %3382, align 8, !tbaa !14
  %3384 = fmul double %3381, %3383
  %3385 = fneg double %3384
  %3386 = call double @llvm.fmuladd.f64(double %3373, double %3375, double %3385)
  %3387 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %3386, ptr %3387, align 8, !tbaa !11
  %3388 = load ptr, ptr %14, align 8, !tbaa !5
  %3389 = load i32, ptr %25, align 4, !tbaa !9
  %3390 = sext i32 %3389 to i64
  %3391 = getelementptr inbounds %struct.doublecomplex, ptr %3388, i64 %3390
  %3392 = getelementptr inbounds %struct.doublecomplex, ptr %3391, i32 0, i32 0
  %3393 = load double, ptr %3392, align 8, !tbaa !11
  %3394 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %3395 = load double, ptr %3394, align 8, !tbaa !14
  %3396 = load ptr, ptr %14, align 8, !tbaa !5
  %3397 = load i32, ptr %25, align 4, !tbaa !9
  %3398 = sext i32 %3397 to i64
  %3399 = getelementptr inbounds %struct.doublecomplex, ptr %3396, i64 %3398
  %3400 = getelementptr inbounds %struct.doublecomplex, ptr %3399, i32 0, i32 1
  %3401 = load double, ptr %3400, align 8, !tbaa !14
  %3402 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %3403 = load double, ptr %3402, align 8, !tbaa !11
  %3404 = fmul double %3401, %3403
  %3405 = call double @llvm.fmuladd.f64(double %3393, double %3395, double %3404)
  %3406 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %3405, ptr %3406, align 8, !tbaa !14
  %3407 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %3408 = load double, ptr %3407, align 8, !tbaa !11
  %3409 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %3410 = load double, ptr %3409, align 8, !tbaa !11
  %3411 = fadd double %3408, %3410
  %3412 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %3411, ptr %3412, align 8, !tbaa !11
  %3413 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %3414 = load double, ptr %3413, align 8, !tbaa !14
  %3415 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %3416 = load double, ptr %3415, align 8, !tbaa !14
  %3417 = fadd double %3414, %3416
  %3418 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %3417, ptr %3418, align 8, !tbaa !14
  %3419 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %3420 = load double, ptr %3419, align 8, !tbaa !11
  %3421 = load ptr, ptr %14, align 8, !tbaa !5
  %3422 = load i32, ptr %22, align 4, !tbaa !9
  %3423 = sext i32 %3422 to i64
  %3424 = getelementptr inbounds %struct.doublecomplex, ptr %3421, i64 %3423
  %3425 = getelementptr inbounds %struct.doublecomplex, ptr %3424, i32 0, i32 0
  store double %3420, ptr %3425, align 8, !tbaa !11
  %3426 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %3427 = load double, ptr %3426, align 8, !tbaa !14
  %3428 = load ptr, ptr %14, align 8, !tbaa !5
  %3429 = load i32, ptr %22, align 4, !tbaa !9
  %3430 = sext i32 %3429 to i64
  %3431 = getelementptr inbounds %struct.doublecomplex, ptr %3428, i64 %3430
  %3432 = getelementptr inbounds %struct.doublecomplex, ptr %3431, i32 0, i32 1
  store double %3427, ptr %3432, align 8, !tbaa !14
  %3433 = load i32, ptr %43, align 4, !tbaa !9
  %3434 = load i32, ptr %34, align 4, !tbaa !9
  %3435 = add nsw i32 %3433, %3434
  %3436 = sub nsw i32 %3435, 1
  %3437 = load i32, ptr %35, align 4, !tbaa !9
  %3438 = load i32, ptr %19, align 4, !tbaa !9
  %3439 = mul nsw i32 %3437, %3438
  %3440 = add nsw i32 %3436, %3439
  store i32 %3440, ptr %22, align 4, !tbaa !9
  %3441 = load i32, ptr %47, align 4, !tbaa !9
  %3442 = load i32, ptr %34, align 4, !tbaa !9
  %3443 = add nsw i32 %3441, %3442
  %3444 = sub nsw i32 %3443, 1
  %3445 = load i32, ptr %31, align 4, !tbaa !9
  %3446 = add nsw i32 %3445, 1
  %3447 = load i32, ptr %19, align 4, !tbaa !9
  %3448 = mul nsw i32 %3446, %3447
  %3449 = add nsw i32 %3444, %3448
  store i32 %3449, ptr %23, align 4, !tbaa !9
  %3450 = load ptr, ptr %14, align 8, !tbaa !5
  %3451 = load i32, ptr %23, align 4, !tbaa !9
  %3452 = sext i32 %3451 to i64
  %3453 = getelementptr inbounds %struct.doublecomplex, ptr %3450, i64 %3452
  %3454 = getelementptr inbounds %struct.doublecomplex, ptr %3453, i32 0, i32 0
  %3455 = load double, ptr %3454, align 8, !tbaa !11
  %3456 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %3457 = load double, ptr %3456, align 8, !tbaa !11
  %3458 = load ptr, ptr %14, align 8, !tbaa !5
  %3459 = load i32, ptr %23, align 4, !tbaa !9
  %3460 = sext i32 %3459 to i64
  %3461 = getelementptr inbounds %struct.doublecomplex, ptr %3458, i64 %3460
  %3462 = getelementptr inbounds %struct.doublecomplex, ptr %3461, i32 0, i32 1
  %3463 = load double, ptr %3462, align 8, !tbaa !14
  %3464 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %3465 = load double, ptr %3464, align 8, !tbaa !14
  %3466 = fmul double %3463, %3465
  %3467 = fneg double %3466
  %3468 = call double @llvm.fmuladd.f64(double %3455, double %3457, double %3467)
  %3469 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  store double %3468, ptr %3469, align 8, !tbaa !11
  %3470 = load ptr, ptr %14, align 8, !tbaa !5
  %3471 = load i32, ptr %23, align 4, !tbaa !9
  %3472 = sext i32 %3471 to i64
  %3473 = getelementptr inbounds %struct.doublecomplex, ptr %3470, i64 %3472
  %3474 = getelementptr inbounds %struct.doublecomplex, ptr %3473, i32 0, i32 0
  %3475 = load double, ptr %3474, align 8, !tbaa !11
  %3476 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 1
  %3477 = load double, ptr %3476, align 8, !tbaa !14
  %3478 = load ptr, ptr %14, align 8, !tbaa !5
  %3479 = load i32, ptr %23, align 4, !tbaa !9
  %3480 = sext i32 %3479 to i64
  %3481 = getelementptr inbounds %struct.doublecomplex, ptr %3478, i64 %3480
  %3482 = getelementptr inbounds %struct.doublecomplex, ptr %3481, i32 0, i32 1
  %3483 = load double, ptr %3482, align 8, !tbaa !14
  %3484 = getelementptr inbounds %struct.doublecomplex, ptr %44, i32 0, i32 0
  %3485 = load double, ptr %3484, align 8, !tbaa !11
  %3486 = fmul double %3483, %3485
  %3487 = call double @llvm.fmuladd.f64(double %3475, double %3477, double %3486)
  %3488 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  store double %3487, ptr %3488, align 8, !tbaa !14
  %3489 = load i32, ptr %47, align 4, !tbaa !9
  %3490 = load i32, ptr %34, align 4, !tbaa !9
  %3491 = add nsw i32 %3489, %3490
  %3492 = sub nsw i32 %3491, 1
  %3493 = load i32, ptr %31, align 4, !tbaa !9
  %3494 = load i32, ptr %19, align 4, !tbaa !9
  %3495 = mul nsw i32 %3493, %3494
  %3496 = add nsw i32 %3492, %3495
  store i32 %3496, ptr %24, align 4, !tbaa !9
  %3497 = load ptr, ptr %14, align 8, !tbaa !5
  %3498 = load i32, ptr %24, align 4, !tbaa !9
  %3499 = sext i32 %3498 to i64
  %3500 = getelementptr inbounds %struct.doublecomplex, ptr %3497, i64 %3499
  %3501 = getelementptr inbounds %struct.doublecomplex, ptr %3500, i32 0, i32 0
  %3502 = load double, ptr %3501, align 8, !tbaa !11
  %3503 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %3504 = load double, ptr %3503, align 8, !tbaa !11
  %3505 = load ptr, ptr %14, align 8, !tbaa !5
  %3506 = load i32, ptr %24, align 4, !tbaa !9
  %3507 = sext i32 %3506 to i64
  %3508 = getelementptr inbounds %struct.doublecomplex, ptr %3505, i64 %3507
  %3509 = getelementptr inbounds %struct.doublecomplex, ptr %3508, i32 0, i32 1
  %3510 = load double, ptr %3509, align 8, !tbaa !14
  %3511 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %3512 = load double, ptr %3511, align 8, !tbaa !14
  %3513 = fmul double %3510, %3512
  %3514 = fneg double %3513
  %3515 = call double @llvm.fmuladd.f64(double %3502, double %3504, double %3514)
  %3516 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  store double %3515, ptr %3516, align 8, !tbaa !11
  %3517 = load ptr, ptr %14, align 8, !tbaa !5
  %3518 = load i32, ptr %24, align 4, !tbaa !9
  %3519 = sext i32 %3518 to i64
  %3520 = getelementptr inbounds %struct.doublecomplex, ptr %3517, i64 %3519
  %3521 = getelementptr inbounds %struct.doublecomplex, ptr %3520, i32 0, i32 0
  %3522 = load double, ptr %3521, align 8, !tbaa !11
  %3523 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  %3524 = load double, ptr %3523, align 8, !tbaa !14
  %3525 = load ptr, ptr %14, align 8, !tbaa !5
  %3526 = load i32, ptr %24, align 4, !tbaa !9
  %3527 = sext i32 %3526 to i64
  %3528 = getelementptr inbounds %struct.doublecomplex, ptr %3525, i64 %3527
  %3529 = getelementptr inbounds %struct.doublecomplex, ptr %3528, i32 0, i32 1
  %3530 = load double, ptr %3529, align 8, !tbaa !14
  %3531 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  %3532 = load double, ptr %3531, align 8, !tbaa !11
  %3533 = fmul double %3530, %3532
  %3534 = call double @llvm.fmuladd.f64(double %3522, double %3524, double %3533)
  %3535 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  store double %3534, ptr %3535, align 8, !tbaa !14
  %3536 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 0
  %3537 = load double, ptr %3536, align 8, !tbaa !11
  %3538 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 0
  %3539 = load double, ptr %3538, align 8, !tbaa !11
  %3540 = fadd double %3537, %3539
  %3541 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %3540, ptr %3541, align 8, !tbaa !11
  %3542 = getelementptr inbounds %struct.doublecomplex, ptr %29, i32 0, i32 1
  %3543 = load double, ptr %3542, align 8, !tbaa !14
  %3544 = getelementptr inbounds %struct.doublecomplex, ptr %30, i32 0, i32 1
  %3545 = load double, ptr %3544, align 8, !tbaa !14
  %3546 = fadd double %3543, %3545
  %3547 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %3546, ptr %3547, align 8, !tbaa !14
  %3548 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %3549 = load double, ptr %3548, align 8, !tbaa !11
  %3550 = load ptr, ptr %14, align 8, !tbaa !5
  %3551 = load i32, ptr %22, align 4, !tbaa !9
  %3552 = sext i32 %3551 to i64
  %3553 = getelementptr inbounds %struct.doublecomplex, ptr %3550, i64 %3552
  %3554 = getelementptr inbounds %struct.doublecomplex, ptr %3553, i32 0, i32 0
  store double %3549, ptr %3554, align 8, !tbaa !11
  %3555 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %3556 = load double, ptr %3555, align 8, !tbaa !14
  %3557 = load ptr, ptr %14, align 8, !tbaa !5
  %3558 = load i32, ptr %22, align 4, !tbaa !9
  %3559 = sext i32 %3558 to i64
  %3560 = getelementptr inbounds %struct.doublecomplex, ptr %3557, i64 %3559
  %3561 = getelementptr inbounds %struct.doublecomplex, ptr %3560, i32 0, i32 1
  store double %3556, ptr %3561, align 8, !tbaa !14
  br label %3562

3562:                                             ; preds = %3240
  %3563 = load i32, ptr %35, align 4, !tbaa !9
  %3564 = add nsw i32 %3563, 1
  store i32 %3564, ptr %35, align 4, !tbaa !9
  br label %3236, !llvm.loop !51

3565:                                             ; preds = %3236
  %3566 = load i32, ptr %34, align 4, !tbaa !9
  %3567 = add nsw i32 %3566, -2
  store i32 %3567, ptr %34, align 4, !tbaa !9
  br label %3568

3568:                                             ; preds = %3565, %3231
  br label %3119, !llvm.loop !52

3569:                                             ; preds = %3119
  %3570 = load ptr, ptr %10, align 8, !tbaa !5
  %3571 = load i32, ptr %3570, align 4, !tbaa !9
  %3572 = load ptr, ptr %15, align 8, !tbaa !5
  %3573 = load i32, ptr %3572, align 4, !tbaa !9
  %3574 = add nsw i32 %3571, %3573
  %3575 = add nsw i32 %3574, 1
  store i32 %3575, ptr %21, align 4, !tbaa !9
  %3576 = load ptr, ptr %9, align 8, !tbaa !5
  %3577 = load ptr, ptr %11, align 8, !tbaa !5
  %3578 = load i32, ptr %47, align 4, !tbaa !9
  %3579 = add nsw i32 %3578, 1
  %3580 = load i32, ptr %47, align 4, !tbaa !9
  %3581 = add nsw i32 %3580, 1
  %3582 = load i32, ptr %17, align 4, !tbaa !9
  %3583 = mul nsw i32 %3581, %3582
  %3584 = add nsw i32 %3579, %3583
  %3585 = sext i32 %3584 to i64
  %3586 = getelementptr inbounds %struct.doublecomplex, ptr %3577, i64 %3585
  %3587 = load ptr, ptr %12, align 8, !tbaa !5
  %3588 = load ptr, ptr %14, align 8, !tbaa !5
  %3589 = load i32, ptr %43, align 4, !tbaa !9
  %3590 = add nsw i32 %3589, 1
  %3591 = load i32, ptr %19, align 4, !tbaa !9
  %3592 = add nsw i32 %3590, %3591
  %3593 = sext i32 %3592 to i64
  %3594 = getelementptr inbounds %struct.doublecomplex, ptr %3588, i64 %3593
  call void @ztrmm_(ptr noundef @.str.1, ptr noundef %3576, ptr noundef @.str.3, ptr noundef @.str, ptr noundef %46, ptr noundef %46, ptr noundef @c_b1, ptr noundef %3586, ptr noundef %3587, ptr noundef %3594, ptr noundef %21)
  %3595 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3595, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %3596

3596:                                             ; preds = %3649, %3569
  %3597 = load i32, ptr %34, align 4, !tbaa !9
  %3598 = load i32, ptr %21, align 4, !tbaa !9
  %3599 = icmp sle i32 %3597, %3598
  br i1 %3599, label %3600, label %3652

3600:                                             ; preds = %3596
  %3601 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %3601, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %3602

3602:                                             ; preds = %3645, %3600
  %3603 = load i32, ptr %35, align 4, !tbaa !9
  %3604 = load i32, ptr %22, align 4, !tbaa !9
  %3605 = icmp sle i32 %3603, %3604
  br i1 %3605, label %3606, label %3648

3606:                                             ; preds = %3602
  %3607 = load i32, ptr %47, align 4, !tbaa !9
  %3608 = load i32, ptr %34, align 4, !tbaa !9
  %3609 = add nsw i32 %3607, %3608
  %3610 = load i32, ptr %47, align 4, !tbaa !9
  %3611 = load i32, ptr %35, align 4, !tbaa !9
  %3612 = add nsw i32 %3610, %3611
  %3613 = load i32, ptr %17, align 4, !tbaa !9
  %3614 = mul nsw i32 %3612, %3613
  %3615 = add nsw i32 %3609, %3614
  store i32 %3615, ptr %23, align 4, !tbaa !9
  %3616 = load i32, ptr %43, align 4, !tbaa !9
  %3617 = load i32, ptr %34, align 4, !tbaa !9
  %3618 = add nsw i32 %3616, %3617
  %3619 = load i32, ptr %35, align 4, !tbaa !9
  %3620 = load i32, ptr %19, align 4, !tbaa !9
  %3621 = mul nsw i32 %3619, %3620
  %3622 = add nsw i32 %3618, %3621
  store i32 %3622, ptr %24, align 4, !tbaa !9
  %3623 = load ptr, ptr %14, align 8, !tbaa !5
  %3624 = load i32, ptr %24, align 4, !tbaa !9
  %3625 = sext i32 %3624 to i64
  %3626 = getelementptr inbounds %struct.doublecomplex, ptr %3623, i64 %3625
  %3627 = getelementptr inbounds %struct.doublecomplex, ptr %3626, i32 0, i32 0
  %3628 = load double, ptr %3627, align 8, !tbaa !11
  %3629 = load ptr, ptr %11, align 8, !tbaa !5
  %3630 = load i32, ptr %23, align 4, !tbaa !9
  %3631 = sext i32 %3630 to i64
  %3632 = getelementptr inbounds %struct.doublecomplex, ptr %3629, i64 %3631
  %3633 = getelementptr inbounds %struct.doublecomplex, ptr %3632, i32 0, i32 0
  store double %3628, ptr %3633, align 8, !tbaa !11
  %3634 = load ptr, ptr %14, align 8, !tbaa !5
  %3635 = load i32, ptr %24, align 4, !tbaa !9
  %3636 = sext i32 %3635 to i64
  %3637 = getelementptr inbounds %struct.doublecomplex, ptr %3634, i64 %3636
  %3638 = getelementptr inbounds %struct.doublecomplex, ptr %3637, i32 0, i32 1
  %3639 = load double, ptr %3638, align 8, !tbaa !14
  %3640 = load ptr, ptr %11, align 8, !tbaa !5
  %3641 = load i32, ptr %23, align 4, !tbaa !9
  %3642 = sext i32 %3641 to i64
  %3643 = getelementptr inbounds %struct.doublecomplex, ptr %3640, i64 %3642
  %3644 = getelementptr inbounds %struct.doublecomplex, ptr %3643, i32 0, i32 1
  store double %3639, ptr %3644, align 8, !tbaa !14
  br label %3645

3645:                                             ; preds = %3606
  %3646 = load i32, ptr %35, align 4, !tbaa !9
  %3647 = add nsw i32 %3646, 1
  store i32 %3647, ptr %35, align 4, !tbaa !9
  br label %3602, !llvm.loop !53

3648:                                             ; preds = %3602
  br label %3649

3649:                                             ; preds = %3648
  %3650 = load i32, ptr %34, align 4, !tbaa !9
  %3651 = add nsw i32 %3650, 1
  store i32 %3651, ptr %34, align 4, !tbaa !9
  br label %3596, !llvm.loop !54

3652:                                             ; preds = %3596
  %3653 = load i32, ptr %47, align 4, !tbaa !9
  %3654 = load i32, ptr %46, align 4, !tbaa !9
  %3655 = add nsw i32 %3653, %3654
  %3656 = load ptr, ptr %10, align 8, !tbaa !5
  %3657 = load i32, ptr %3656, align 4, !tbaa !9
  %3658 = icmp slt i32 %3655, %3657
  br i1 %3658, label %3659, label %3884

3659:                                             ; preds = %3652
  %3660 = load ptr, ptr %10, align 8, !tbaa !5
  %3661 = load i32, ptr %3660, align 4, !tbaa !9
  %3662 = load i32, ptr %46, align 4, !tbaa !9
  %3663 = sub nsw i32 %3661, %3662
  %3664 = load i32, ptr %47, align 4, !tbaa !9
  %3665 = sub nsw i32 %3663, %3664
  store i32 %3665, ptr %21, align 4, !tbaa !9
  %3666 = load ptr, ptr %10, align 8, !tbaa !5
  %3667 = load i32, ptr %3666, align 4, !tbaa !9
  %3668 = load ptr, ptr %15, align 8, !tbaa !5
  %3669 = load i32, ptr %3668, align 4, !tbaa !9
  %3670 = add nsw i32 %3667, %3669
  %3671 = add nsw i32 %3670, 1
  store i32 %3671, ptr %22, align 4, !tbaa !9
  %3672 = load ptr, ptr %10, align 8, !tbaa !5
  %3673 = load i32, ptr %3672, align 4, !tbaa !9
  %3674 = load ptr, ptr %15, align 8, !tbaa !5
  %3675 = load i32, ptr %3674, align 4, !tbaa !9
  %3676 = add nsw i32 %3673, %3675
  %3677 = add nsw i32 %3676, 1
  store i32 %3677, ptr %23, align 4, !tbaa !9
  %3678 = load ptr, ptr %11, align 8, !tbaa !5
  %3679 = load i32, ptr %47, align 4, !tbaa !9
  %3680 = load i32, ptr %46, align 4, !tbaa !9
  %3681 = add nsw i32 %3679, %3680
  %3682 = add nsw i32 %3681, 1
  %3683 = load i32, ptr %47, align 4, !tbaa !9
  %3684 = add nsw i32 %3683, 1
  %3685 = load i32, ptr %17, align 4, !tbaa !9
  %3686 = mul nsw i32 %3684, %3685
  %3687 = add nsw i32 %3682, %3686
  %3688 = sext i32 %3687 to i64
  %3689 = getelementptr inbounds %struct.doublecomplex, ptr %3678, i64 %3688
  %3690 = load ptr, ptr %12, align 8, !tbaa !5
  %3691 = load ptr, ptr %14, align 8, !tbaa !5
  %3692 = load i32, ptr %20, align 4, !tbaa !9
  %3693 = sext i32 %3692 to i64
  %3694 = getelementptr inbounds %struct.doublecomplex, ptr %3691, i64 %3693
  %3695 = load ptr, ptr %14, align 8, !tbaa !5
  %3696 = load i32, ptr %43, align 4, !tbaa !9
  %3697 = add nsw i32 %3696, 1
  %3698 = load i32, ptr %19, align 4, !tbaa !9
  %3699 = add nsw i32 %3697, %3698
  %3700 = sext i32 %3699 to i64
  %3701 = getelementptr inbounds %struct.doublecomplex, ptr %3695, i64 %3700
  call void @zgemm_(ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %46, ptr noundef %46, ptr noundef %21, ptr noundef @c_b1, ptr noundef %3689, ptr noundef %3690, ptr noundef %3694, ptr noundef %22, ptr noundef @c_b2, ptr noundef %3701, ptr noundef %23)
  %3702 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3702, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %3703

3703:                                             ; preds = %3785, %3659
  %3704 = load i32, ptr %34, align 4, !tbaa !9
  %3705 = load i32, ptr %21, align 4, !tbaa !9
  %3706 = icmp sle i32 %3704, %3705
  br i1 %3706, label %3707, label %3788

3707:                                             ; preds = %3703
  %3708 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %3708, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %3709

3709:                                             ; preds = %3781, %3707
  %3710 = load i32, ptr %35, align 4, !tbaa !9
  %3711 = load i32, ptr %22, align 4, !tbaa !9
  %3712 = icmp sle i32 %3710, %3711
  br i1 %3712, label %3713, label %3784

3713:                                             ; preds = %3709
  %3714 = load i32, ptr %47, align 4, !tbaa !9
  %3715 = load i32, ptr %34, align 4, !tbaa !9
  %3716 = add nsw i32 %3714, %3715
  %3717 = load i32, ptr %47, align 4, !tbaa !9
  %3718 = load i32, ptr %35, align 4, !tbaa !9
  %3719 = add nsw i32 %3717, %3718
  %3720 = load i32, ptr %17, align 4, !tbaa !9
  %3721 = mul nsw i32 %3719, %3720
  %3722 = add nsw i32 %3716, %3721
  store i32 %3722, ptr %23, align 4, !tbaa !9
  %3723 = load i32, ptr %47, align 4, !tbaa !9
  %3724 = load i32, ptr %34, align 4, !tbaa !9
  %3725 = add nsw i32 %3723, %3724
  %3726 = load i32, ptr %47, align 4, !tbaa !9
  %3727 = load i32, ptr %35, align 4, !tbaa !9
  %3728 = add nsw i32 %3726, %3727
  %3729 = load i32, ptr %17, align 4, !tbaa !9
  %3730 = mul nsw i32 %3728, %3729
  %3731 = add nsw i32 %3725, %3730
  store i32 %3731, ptr %24, align 4, !tbaa !9
  %3732 = load i32, ptr %43, align 4, !tbaa !9
  %3733 = load i32, ptr %34, align 4, !tbaa !9
  %3734 = add nsw i32 %3732, %3733
  %3735 = load i32, ptr %35, align 4, !tbaa !9
  %3736 = load i32, ptr %19, align 4, !tbaa !9
  %3737 = mul nsw i32 %3735, %3736
  %3738 = add nsw i32 %3734, %3737
  store i32 %3738, ptr %25, align 4, !tbaa !9
  %3739 = load ptr, ptr %11, align 8, !tbaa !5
  %3740 = load i32, ptr %24, align 4, !tbaa !9
  %3741 = sext i32 %3740 to i64
  %3742 = getelementptr inbounds %struct.doublecomplex, ptr %3739, i64 %3741
  %3743 = getelementptr inbounds %struct.doublecomplex, ptr %3742, i32 0, i32 0
  %3744 = load double, ptr %3743, align 8, !tbaa !11
  %3745 = load ptr, ptr %14, align 8, !tbaa !5
  %3746 = load i32, ptr %25, align 4, !tbaa !9
  %3747 = sext i32 %3746 to i64
  %3748 = getelementptr inbounds %struct.doublecomplex, ptr %3745, i64 %3747
  %3749 = getelementptr inbounds %struct.doublecomplex, ptr %3748, i32 0, i32 0
  %3750 = load double, ptr %3749, align 8, !tbaa !11
  %3751 = fadd double %3744, %3750
  %3752 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  store double %3751, ptr %3752, align 8, !tbaa !11
  %3753 = load ptr, ptr %11, align 8, !tbaa !5
  %3754 = load i32, ptr %24, align 4, !tbaa !9
  %3755 = sext i32 %3754 to i64
  %3756 = getelementptr inbounds %struct.doublecomplex, ptr %3753, i64 %3755
  %3757 = getelementptr inbounds %struct.doublecomplex, ptr %3756, i32 0, i32 1
  %3758 = load double, ptr %3757, align 8, !tbaa !14
  %3759 = load ptr, ptr %14, align 8, !tbaa !5
  %3760 = load i32, ptr %25, align 4, !tbaa !9
  %3761 = sext i32 %3760 to i64
  %3762 = getelementptr inbounds %struct.doublecomplex, ptr %3759, i64 %3761
  %3763 = getelementptr inbounds %struct.doublecomplex, ptr %3762, i32 0, i32 1
  %3764 = load double, ptr %3763, align 8, !tbaa !14
  %3765 = fadd double %3758, %3764
  %3766 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  store double %3765, ptr %3766, align 8, !tbaa !14
  %3767 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 0
  %3768 = load double, ptr %3767, align 8, !tbaa !11
  %3769 = load ptr, ptr %11, align 8, !tbaa !5
  %3770 = load i32, ptr %23, align 4, !tbaa !9
  %3771 = sext i32 %3770 to i64
  %3772 = getelementptr inbounds %struct.doublecomplex, ptr %3769, i64 %3771
  %3773 = getelementptr inbounds %struct.doublecomplex, ptr %3772, i32 0, i32 0
  store double %3768, ptr %3773, align 8, !tbaa !11
  %3774 = getelementptr inbounds %struct.doublecomplex, ptr %28, i32 0, i32 1
  %3775 = load double, ptr %3774, align 8, !tbaa !14
  %3776 = load ptr, ptr %11, align 8, !tbaa !5
  %3777 = load i32, ptr %23, align 4, !tbaa !9
  %3778 = sext i32 %3777 to i64
  %3779 = getelementptr inbounds %struct.doublecomplex, ptr %3776, i64 %3778
  %3780 = getelementptr inbounds %struct.doublecomplex, ptr %3779, i32 0, i32 1
  store double %3775, ptr %3780, align 8, !tbaa !14
  br label %3781

3781:                                             ; preds = %3713
  %3782 = load i32, ptr %35, align 4, !tbaa !9
  %3783 = add nsw i32 %3782, 1
  store i32 %3783, ptr %35, align 4, !tbaa !9
  br label %3709, !llvm.loop !55

3784:                                             ; preds = %3709
  br label %3785

3785:                                             ; preds = %3784
  %3786 = load i32, ptr %34, align 4, !tbaa !9
  %3787 = add nsw i32 %3786, 1
  store i32 %3787, ptr %34, align 4, !tbaa !9
  br label %3703, !llvm.loop !56

3788:                                             ; preds = %3703
  %3789 = load ptr, ptr %10, align 8, !tbaa !5
  %3790 = load i32, ptr %3789, align 4, !tbaa !9
  %3791 = load i32, ptr %46, align 4, !tbaa !9
  %3792 = sub nsw i32 %3790, %3791
  %3793 = load i32, ptr %47, align 4, !tbaa !9
  %3794 = sub nsw i32 %3792, %3793
  store i32 %3794, ptr %21, align 4, !tbaa !9
  %3795 = load ptr, ptr %10, align 8, !tbaa !5
  %3796 = load i32, ptr %3795, align 4, !tbaa !9
  %3797 = load ptr, ptr %15, align 8, !tbaa !5
  %3798 = load i32, ptr %3797, align 4, !tbaa !9
  %3799 = add nsw i32 %3796, %3798
  %3800 = add nsw i32 %3799, 1
  store i32 %3800, ptr %22, align 4, !tbaa !9
  %3801 = load ptr, ptr %9, align 8, !tbaa !5
  %3802 = load ptr, ptr %11, align 8, !tbaa !5
  %3803 = load i32, ptr %47, align 4, !tbaa !9
  %3804 = load i32, ptr %46, align 4, !tbaa !9
  %3805 = add nsw i32 %3803, %3804
  %3806 = add nsw i32 %3805, 1
  %3807 = load i32, ptr %47, align 4, !tbaa !9
  %3808 = load i32, ptr %46, align 4, !tbaa !9
  %3809 = add nsw i32 %3807, %3808
  %3810 = add nsw i32 %3809, 1
  %3811 = load i32, ptr %17, align 4, !tbaa !9
  %3812 = mul nsw i32 %3810, %3811
  %3813 = add nsw i32 %3806, %3812
  %3814 = sext i32 %3813 to i64
  %3815 = getelementptr inbounds %struct.doublecomplex, ptr %3802, i64 %3814
  %3816 = load ptr, ptr %12, align 8, !tbaa !5
  %3817 = load ptr, ptr %14, align 8, !tbaa !5
  %3818 = load i32, ptr %20, align 4, !tbaa !9
  %3819 = sext i32 %3818 to i64
  %3820 = getelementptr inbounds %struct.doublecomplex, ptr %3817, i64 %3819
  call void @ztrmm_(ptr noundef @.str.1, ptr noundef %3801, ptr noundef @.str.3, ptr noundef @.str, ptr noundef %21, ptr noundef %46, ptr noundef @c_b1, ptr noundef %3815, ptr noundef %3816, ptr noundef %3820, ptr noundef %22)
  %3821 = load ptr, ptr %10, align 8, !tbaa !5
  %3822 = load i32, ptr %3821, align 4, !tbaa !9
  %3823 = load i32, ptr %47, align 4, !tbaa !9
  %3824 = sub nsw i32 %3822, %3823
  %3825 = load i32, ptr %46, align 4, !tbaa !9
  %3826 = sub nsw i32 %3824, %3825
  store i32 %3826, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %3827

3827:                                             ; preds = %3880, %3788
  %3828 = load i32, ptr %34, align 4, !tbaa !9
  %3829 = load i32, ptr %21, align 4, !tbaa !9
  %3830 = icmp sle i32 %3828, %3829
  br i1 %3830, label %3831, label %3883

3831:                                             ; preds = %3827
  %3832 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3832, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %3833

3833:                                             ; preds = %3876, %3831
  %3834 = load i32, ptr %35, align 4, !tbaa !9
  %3835 = load i32, ptr %22, align 4, !tbaa !9
  %3836 = icmp sle i32 %3834, %3835
  br i1 %3836, label %3837, label %3879

3837:                                             ; preds = %3833
  %3838 = load i32, ptr %47, align 4, !tbaa !9
  %3839 = load i32, ptr %46, align 4, !tbaa !9
  %3840 = add nsw i32 %3838, %3839
  %3841 = load i32, ptr %34, align 4, !tbaa !9
  %3842 = add nsw i32 %3840, %3841
  %3843 = load i32, ptr %47, align 4, !tbaa !9
  %3844 = load i32, ptr %35, align 4, !tbaa !9
  %3845 = add nsw i32 %3843, %3844
  %3846 = load i32, ptr %17, align 4, !tbaa !9
  %3847 = mul nsw i32 %3845, %3846
  %3848 = add nsw i32 %3842, %3847
  store i32 %3848, ptr %23, align 4, !tbaa !9
  %3849 = load i32, ptr %34, align 4, !tbaa !9
  %3850 = load i32, ptr %35, align 4, !tbaa !9
  %3851 = load i32, ptr %19, align 4, !tbaa !9
  %3852 = mul nsw i32 %3850, %3851
  %3853 = add nsw i32 %3849, %3852
  store i32 %3853, ptr %24, align 4, !tbaa !9
  %3854 = load ptr, ptr %14, align 8, !tbaa !5
  %3855 = load i32, ptr %24, align 4, !tbaa !9
  %3856 = sext i32 %3855 to i64
  %3857 = getelementptr inbounds %struct.doublecomplex, ptr %3854, i64 %3856
  %3858 = getelementptr inbounds %struct.doublecomplex, ptr %3857, i32 0, i32 0
  %3859 = load double, ptr %3858, align 8, !tbaa !11
  %3860 = load ptr, ptr %11, align 8, !tbaa !5
  %3861 = load i32, ptr %23, align 4, !tbaa !9
  %3862 = sext i32 %3861 to i64
  %3863 = getelementptr inbounds %struct.doublecomplex, ptr %3860, i64 %3862
  %3864 = getelementptr inbounds %struct.doublecomplex, ptr %3863, i32 0, i32 0
  store double %3859, ptr %3864, align 8, !tbaa !11
  %3865 = load ptr, ptr %14, align 8, !tbaa !5
  %3866 = load i32, ptr %24, align 4, !tbaa !9
  %3867 = sext i32 %3866 to i64
  %3868 = getelementptr inbounds %struct.doublecomplex, ptr %3865, i64 %3867
  %3869 = getelementptr inbounds %struct.doublecomplex, ptr %3868, i32 0, i32 1
  %3870 = load double, ptr %3869, align 8, !tbaa !14
  %3871 = load ptr, ptr %11, align 8, !tbaa !5
  %3872 = load i32, ptr %23, align 4, !tbaa !9
  %3873 = sext i32 %3872 to i64
  %3874 = getelementptr inbounds %struct.doublecomplex, ptr %3871, i64 %3873
  %3875 = getelementptr inbounds %struct.doublecomplex, ptr %3874, i32 0, i32 1
  store double %3870, ptr %3875, align 8, !tbaa !14
  br label %3876

3876:                                             ; preds = %3837
  %3877 = load i32, ptr %35, align 4, !tbaa !9
  %3878 = add nsw i32 %3877, 1
  store i32 %3878, ptr %35, align 4, !tbaa !9
  br label %3833, !llvm.loop !57

3879:                                             ; preds = %3833
  br label %3880

3880:                                             ; preds = %3879
  %3881 = load i32, ptr %34, align 4, !tbaa !9
  %3882 = add nsw i32 %3881, 1
  store i32 %3882, ptr %34, align 4, !tbaa !9
  br label %3827, !llvm.loop !58

3883:                                             ; preds = %3827
  br label %3943

3884:                                             ; preds = %3652
  %3885 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %3885, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %3886

3886:                                             ; preds = %3939, %3884
  %3887 = load i32, ptr %34, align 4, !tbaa !9
  %3888 = load i32, ptr %21, align 4, !tbaa !9
  %3889 = icmp sle i32 %3887, %3888
  br i1 %3889, label %3890, label %3942

3890:                                             ; preds = %3886
  %3891 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %3891, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %3892

3892:                                             ; preds = %3935, %3890
  %3893 = load i32, ptr %35, align 4, !tbaa !9
  %3894 = load i32, ptr %22, align 4, !tbaa !9
  %3895 = icmp sle i32 %3893, %3894
  br i1 %3895, label %3896, label %3938

3896:                                             ; preds = %3892
  %3897 = load i32, ptr %47, align 4, !tbaa !9
  %3898 = load i32, ptr %34, align 4, !tbaa !9
  %3899 = add nsw i32 %3897, %3898
  %3900 = load i32, ptr %47, align 4, !tbaa !9
  %3901 = load i32, ptr %35, align 4, !tbaa !9
  %3902 = add nsw i32 %3900, %3901
  %3903 = load i32, ptr %17, align 4, !tbaa !9
  %3904 = mul nsw i32 %3902, %3903
  %3905 = add nsw i32 %3899, %3904
  store i32 %3905, ptr %23, align 4, !tbaa !9
  %3906 = load i32, ptr %43, align 4, !tbaa !9
  %3907 = load i32, ptr %34, align 4, !tbaa !9
  %3908 = add nsw i32 %3906, %3907
  %3909 = load i32, ptr %35, align 4, !tbaa !9
  %3910 = load i32, ptr %19, align 4, !tbaa !9
  %3911 = mul nsw i32 %3909, %3910
  %3912 = add nsw i32 %3908, %3911
  store i32 %3912, ptr %24, align 4, !tbaa !9
  %3913 = load ptr, ptr %14, align 8, !tbaa !5
  %3914 = load i32, ptr %24, align 4, !tbaa !9
  %3915 = sext i32 %3914 to i64
  %3916 = getelementptr inbounds %struct.doublecomplex, ptr %3913, i64 %3915
  %3917 = getelementptr inbounds %struct.doublecomplex, ptr %3916, i32 0, i32 0
  %3918 = load double, ptr %3917, align 8, !tbaa !11
  %3919 = load ptr, ptr %11, align 8, !tbaa !5
  %3920 = load i32, ptr %23, align 4, !tbaa !9
  %3921 = sext i32 %3920 to i64
  %3922 = getelementptr inbounds %struct.doublecomplex, ptr %3919, i64 %3921
  %3923 = getelementptr inbounds %struct.doublecomplex, ptr %3922, i32 0, i32 0
  store double %3918, ptr %3923, align 8, !tbaa !11
  %3924 = load ptr, ptr %14, align 8, !tbaa !5
  %3925 = load i32, ptr %24, align 4, !tbaa !9
  %3926 = sext i32 %3925 to i64
  %3927 = getelementptr inbounds %struct.doublecomplex, ptr %3924, i64 %3926
  %3928 = getelementptr inbounds %struct.doublecomplex, ptr %3927, i32 0, i32 1
  %3929 = load double, ptr %3928, align 8, !tbaa !14
  %3930 = load ptr, ptr %11, align 8, !tbaa !5
  %3931 = load i32, ptr %23, align 4, !tbaa !9
  %3932 = sext i32 %3931 to i64
  %3933 = getelementptr inbounds %struct.doublecomplex, ptr %3930, i64 %3932
  %3934 = getelementptr inbounds %struct.doublecomplex, ptr %3933, i32 0, i32 1
  store double %3929, ptr %3934, align 8, !tbaa !14
  br label %3935

3935:                                             ; preds = %3896
  %3936 = load i32, ptr %35, align 4, !tbaa !9
  %3937 = add nsw i32 %3936, 1
  store i32 %3937, ptr %35, align 4, !tbaa !9
  br label %3892, !llvm.loop !59

3938:                                             ; preds = %3892
  br label %3939

3939:                                             ; preds = %3938
  %3940 = load i32, ptr %34, align 4, !tbaa !9
  %3941 = add nsw i32 %3940, 1
  store i32 %3941, ptr %34, align 4, !tbaa !9
  br label %3886, !llvm.loop !60

3942:                                             ; preds = %3886
  br label %3943

3943:                                             ; preds = %3942, %3883
  %3944 = load i32, ptr %46, align 4, !tbaa !9
  %3945 = load i32, ptr %47, align 4, !tbaa !9
  %3946 = add nsw i32 %3945, %3944
  store i32 %3946, ptr %47, align 4, !tbaa !9
  br label %2464, !llvm.loop !61

3947:                                             ; preds = %2464
  %3948 = load ptr, ptr %10, align 8, !tbaa !5
  %3949 = load i32, ptr %3948, align 4, !tbaa !9
  store i32 %3949, ptr %34, align 4, !tbaa !9
  br label %3950

3950:                                             ; preds = %4023, %3947
  %3951 = load i32, ptr %34, align 4, !tbaa !9
  %3952 = icmp sge i32 %3951, 1
  br i1 %3952, label %3953, label %4026

3953:                                             ; preds = %3950
  %3954 = load ptr, ptr %13, align 8, !tbaa !5
  %3955 = load i32, ptr %34, align 4, !tbaa !9
  %3956 = sext i32 %3955 to i64
  %3957 = getelementptr inbounds i32, ptr %3954, i64 %3956
  %3958 = load i32, ptr %3957, align 4, !tbaa !9
  %3959 = icmp sgt i32 %3958, 0
  br i1 %3959, label %3960, label %3990

3960:                                             ; preds = %3953
  %3961 = load ptr, ptr %13, align 8, !tbaa !5
  %3962 = load i32, ptr %34, align 4, !tbaa !9
  %3963 = sext i32 %3962 to i64
  %3964 = getelementptr inbounds i32, ptr %3961, i64 %3963
  %3965 = load i32, ptr %3964, align 4, !tbaa !9
  store i32 %3965, ptr %45, align 4, !tbaa !9
  %3966 = load i32, ptr %34, align 4, !tbaa !9
  %3967 = load i32, ptr %45, align 4, !tbaa !9
  %3968 = icmp slt i32 %3966, %3967
  br i1 %3968, label %3969, label %3977

3969:                                             ; preds = %3960
  %3970 = load ptr, ptr %9, align 8, !tbaa !5
  %3971 = load ptr, ptr %10, align 8, !tbaa !5
  %3972 = load ptr, ptr %11, align 8, !tbaa !5
  %3973 = load i32, ptr %18, align 4, !tbaa !9
  %3974 = sext i32 %3973 to i64
  %3975 = getelementptr inbounds %struct.doublecomplex, ptr %3972, i64 %3974
  %3976 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %3970, ptr noundef %3971, ptr noundef %3975, ptr noundef %3976, ptr noundef %34, ptr noundef %45)
  br label %3977

3977:                                             ; preds = %3969, %3960
  %3978 = load i32, ptr %34, align 4, !tbaa !9
  %3979 = load i32, ptr %45, align 4, !tbaa !9
  %3980 = icmp sgt i32 %3978, %3979
  br i1 %3980, label %3981, label %3989

3981:                                             ; preds = %3977
  %3982 = load ptr, ptr %9, align 8, !tbaa !5
  %3983 = load ptr, ptr %10, align 8, !tbaa !5
  %3984 = load ptr, ptr %11, align 8, !tbaa !5
  %3985 = load i32, ptr %18, align 4, !tbaa !9
  %3986 = sext i32 %3985 to i64
  %3987 = getelementptr inbounds %struct.doublecomplex, ptr %3984, i64 %3986
  %3988 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %3982, ptr noundef %3983, ptr noundef %3987, ptr noundef %3988, ptr noundef %45, ptr noundef %34)
  br label %3989

3989:                                             ; preds = %3981, %3977
  br label %4023

3990:                                             ; preds = %3953
  %3991 = load ptr, ptr %13, align 8, !tbaa !5
  %3992 = load i32, ptr %34, align 4, !tbaa !9
  %3993 = sext i32 %3992 to i64
  %3994 = getelementptr inbounds i32, ptr %3991, i64 %3993
  %3995 = load i32, ptr %3994, align 4, !tbaa !9
  %3996 = sub nsw i32 0, %3995
  store i32 %3996, ptr %45, align 4, !tbaa !9
  %3997 = load i32, ptr %34, align 4, !tbaa !9
  %3998 = load i32, ptr %45, align 4, !tbaa !9
  %3999 = icmp slt i32 %3997, %3998
  br i1 %3999, label %4000, label %4008

4000:                                             ; preds = %3990
  %4001 = load ptr, ptr %9, align 8, !tbaa !5
  %4002 = load ptr, ptr %10, align 8, !tbaa !5
  %4003 = load ptr, ptr %11, align 8, !tbaa !5
  %4004 = load i32, ptr %18, align 4, !tbaa !9
  %4005 = sext i32 %4004 to i64
  %4006 = getelementptr inbounds %struct.doublecomplex, ptr %4003, i64 %4005
  %4007 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %4001, ptr noundef %4002, ptr noundef %4006, ptr noundef %4007, ptr noundef %34, ptr noundef %45)
  br label %4008

4008:                                             ; preds = %4000, %3990
  %4009 = load i32, ptr %34, align 4, !tbaa !9
  %4010 = load i32, ptr %45, align 4, !tbaa !9
  %4011 = icmp sgt i32 %4009, %4010
  br i1 %4011, label %4012, label %4020

4012:                                             ; preds = %4008
  %4013 = load ptr, ptr %9, align 8, !tbaa !5
  %4014 = load ptr, ptr %10, align 8, !tbaa !5
  %4015 = load ptr, ptr %11, align 8, !tbaa !5
  %4016 = load i32, ptr %18, align 4, !tbaa !9
  %4017 = sext i32 %4016 to i64
  %4018 = getelementptr inbounds %struct.doublecomplex, ptr %4015, i64 %4017
  %4019 = load ptr, ptr %12, align 8, !tbaa !5
  call void @zheswapr_(ptr noundef %4013, ptr noundef %4014, ptr noundef %4018, ptr noundef %4019, ptr noundef %45, ptr noundef %34)
  br label %4020

4020:                                             ; preds = %4012, %4008
  %4021 = load i32, ptr %34, align 4, !tbaa !9
  %4022 = add nsw i32 %4021, -1
  store i32 %4022, ptr %34, align 4, !tbaa !9
  br label %4023

4023:                                             ; preds = %4020, %3989
  %4024 = load i32, ptr %34, align 4, !tbaa !9
  %4025 = add nsw i32 %4024, -1
  store i32 %4025, ptr %34, align 4, !tbaa !9
  br label %3950, !llvm.loop !62

4026:                                             ; preds = %3950
  br label %4027

4027:                                             ; preds = %4026, %2079
  store i32 1, ptr %51, align 4
  br label %4028

4028:                                             ; preds = %4027, %230, %183, %127, %118
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  ret void
}

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

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

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

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

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

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

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

declare { double, double } @__divdc3(double, double, double, double)

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @_pCd(ptr noundef) #4

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!13, !13, i64 0}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !16}
!37 = distinct !{!37, !16}
!38 = distinct !{!38, !16}
!39 = distinct !{!39, !16}
!40 = distinct !{!40, !16}
!41 = distinct !{!41, !16}
!42 = distinct !{!42, !16}
!43 = distinct !{!43, !16}
!44 = distinct !{!44, !16}
!45 = distinct !{!45, !16}
!46 = distinct !{!46, !16}
!47 = distinct !{!47, !16}
!48 = distinct !{!48, !16}
!49 = distinct !{!49, !16}
!50 = distinct !{!50, !16}
!51 = distinct !{!51, !16}
!52 = distinct !{!52, !16}
!53 = distinct !{!53, !16}
!54 = distinct !{!54, !16}
!55 = distinct !{!55, !16}
!56 = distinct !{!56, !16}
!57 = distinct !{!57, !16}
!58 = distinct !{!58, !16}
!59 = distinct !{!59, !16}
!60 = distinct !{!60, !16}
!61 = distinct !{!61, !16}
!62 = distinct !{!62, !16}


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

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

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

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

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

42:                                               ; preds = %39
  %.pr = load i32, ptr %7, align 4, !tbaa !5
  %.not941 = icmp eq i32 %.pr, 0
  br i1 %.not941, label %46, label %.thread

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

.thread:                                          ; preds = %.thread.sink.split, %42
  %43 = phi i32 [ %.pr, %42 ], [ %.sink, %.thread.sink.split ]
  %44 = sub nsw i32 0, %43
  store i32 %44, ptr %9, align 4, !tbaa !5
  %45 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %9, i32 noundef 8) #8
  br label %.loopexit

46:                                               ; preds = %42
  %47 = icmp eq i32 %37, 0
  br i1 %47, label %.loopexit, label %48

48:                                               ; preds = %46
  call void @zsyconv_(ptr noundef %0, ptr noundef nonnull @.str.3, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef %5, ptr noundef nonnull %17) #8
  %49 = load i32, ptr %1, align 4, !tbaa !5
  br i1 %.not, label %75, label %50

50:                                               ; preds = %48
  store i32 %49, ptr %7, align 4, !tbaa !5
  %51 = icmp sgt i32 %49, 0
  br i1 %51, label %.lr.ph, label %.loopexit1023.thread1561

.loopexit1023.thread1561:                         ; preds = %50
  store i32 0, ptr %7, align 4, !tbaa !5
  %52 = load i32, ptr %1, align 4, !tbaa !5
  %53 = load i32, ptr %6, align 4, !tbaa !5
  %54 = add nsw i32 %53, 2
  br label %105

.lr.ph:                                           ; preds = %50
  %55 = add i32 %23, 1
  %56 = zext nneg i32 %49 to i64
  br label %57

57:                                               ; preds = %.lr.ph, %72
  %indvars.iv = phi i64 [ %56, %.lr.ph ], [ %indvars.iv.next, %72 ]
  %58 = trunc nuw nsw i64 %indvars.iv to i32
  %59 = mul i32 %55, %58
  %60 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv
  %61 = load i32, ptr %60, align 4, !tbaa !5
  %62 = icmp sgt i32 %61, 0
  br i1 %62, label %63, label %72

63:                                               ; preds = %57
  %64 = sext i32 %59 to i64
  %65 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %64
  %66 = load double, ptr %65, align 8, !tbaa !9
  %67 = fcmp oeq double %66, 0.000000e+00
  br i1 %67, label %68, label %72

68:                                               ; preds = %63
  %69 = getelementptr inbounds i8, ptr %65, i64 8
  %70 = load double, ptr %69, align 8, !tbaa !12
  %71 = fcmp oeq double %70, 0.000000e+00
  br i1 %71, label %.loopexit, label %72

72:                                               ; preds = %57, %63, %68
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %73 = trunc nuw nsw i64 %indvars.iv.next to i32
  store i32 %73, ptr %7, align 4, !tbaa !5
  %74 = icmp sgt i64 %indvars.iv, 1
  br i1 %74, label %57, label %..loopexit1025_crit_edge, !llvm.loop !13

75:                                               ; preds = %48
  store i32 %49, ptr %9, align 4, !tbaa !5
  store i32 1, ptr %7, align 4, !tbaa !5
  %.not9431031 = icmp slt i32 %49, 1
  br i1 %.not9431031, label %.loopexit1023.thread, label %.lr.ph1033

.loopexit1023.thread:                             ; preds = %75
  store i32 0, ptr %7, align 4, !tbaa !5
  %76 = load i32, ptr %1, align 4, !tbaa !5
  %77 = load i32, ptr %6, align 4, !tbaa !5
  %78 = add nsw i32 %77, 2
  br label %694

.lr.ph1033:                                       ; preds = %75
  %79 = add i32 %23, 1
  %80 = add nsw i32 %49, -1
  %81 = mul i32 %80, %79
  %82 = add i32 %23, %81
  %83 = add i32 %82, 1
  %84 = add nuw i32 %49, 1
  %wide.trip.count = zext i32 %84 to i64
  br label %85

85:                                               ; preds = %.lr.ph1033, %100
  %indvars.iv1360 = phi i64 [ 1, %.lr.ph1033 ], [ %indvars.iv.next1361, %100 ]
  %86 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv1360
  %87 = load i32, ptr %86, align 4, !tbaa !5
  %88 = icmp sgt i32 %87, 0
  br i1 %88, label %89, label %100

89:                                               ; preds = %85
  %90 = trunc nuw nsw i64 %indvars.iv1360 to i32
  %91 = mul i32 %79, %90
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %92
  %94 = load double, ptr %93, align 8, !tbaa !9
  %95 = fcmp oeq double %94, 0.000000e+00
  br i1 %95, label %96, label %100

96:                                               ; preds = %89
  %97 = getelementptr inbounds i8, ptr %93, i64 8
  %98 = load double, ptr %97, align 8, !tbaa !12
  %99 = fcmp oeq double %98, 0.000000e+00
  br i1 %99, label %.loopexit, label %100

100:                                              ; preds = %85, %89, %96
  %indvars.iv.next1361 = add nuw nsw i64 %indvars.iv1360, 1
  %101 = trunc nsw i64 %indvars.iv.next1361 to i32
  store i32 %101, ptr %7, align 4, !tbaa !5
  %exitcond.not = icmp eq i64 %indvars.iv.next1361, %wide.trip.count
  br i1 %exitcond.not, label %..loopexit1023_crit_edge, label %85, !llvm.loop !15

..loopexit1023_crit_edge:                         ; preds = %100
  store i32 %83, ptr %10, align 4, !tbaa !5
  br label %.loopexit1023

..loopexit1025_crit_edge:                         ; preds = %72
  store i32 %59, ptr %9, align 4, !tbaa !5
  br label %.loopexit1023

.loopexit1023:                                    ; preds = %..loopexit1025_crit_edge, %..loopexit1023_crit_edge
  store i32 0, ptr %7, align 4, !tbaa !5
  %102 = load i32, ptr %1, align 4, !tbaa !5
  %103 = load i32, ptr %6, align 4, !tbaa !5
  %104 = add nsw i32 %103, 2
  br i1 %.not, label %694, label %105

105:                                              ; preds = %.loopexit1023.thread1561, %.loopexit1023
  %106 = phi i32 [ %54, %.loopexit1023.thread1561 ], [ %104, %.loopexit1023 ]
  %107 = phi i32 [ %53, %.loopexit1023.thread1561 ], [ %103, %.loopexit1023 ]
  %108 = phi i32 [ %52, %.loopexit1023.thread1561 ], [ %102, %.loopexit1023 ]
  %109 = call i32 @ztrtri_(ptr noundef %0, ptr noundef nonnull @.str, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %7) #8
  %110 = load i32, ptr %1, align 4, !tbaa !5
  %.not9771036 = icmp slt i32 %110, 1
  br i1 %.not9771036, label %.loopexit, label %.lr.ph1038

.lr.ph1038:                                       ; preds = %105
  %111 = getelementptr inbounds i8, ptr %16, i64 8
  %112 = add i32 %23, 1
  %113 = getelementptr inbounds i8, ptr %13, i64 8
  %114 = getelementptr inbounds i8, ptr %18, i64 8
  %115 = getelementptr inbounds i8, ptr %22, i64 8
  %116 = mul nsw i32 %106, %30
  %117 = add nsw i32 %107, 3
  %118 = mul nsw i32 %117, %30
  br label %119

119:                                              ; preds = %.lr.ph1038, %276
  %120 = phi i32 [ %110, %.lr.ph1038 ], [ %277, %276 ]
  %.09011037 = phi i32 [ 1, %.lr.ph1038 ], [ %.1902, %276 ]
  %121 = sext i32 %.09011037 to i64
  %122 = getelementptr inbounds i32, ptr %26, i64 %121
  %123 = load i32, ptr %122, align 4, !tbaa !5
  %124 = icmp sgt i32 %123, 0
  br i1 %124, label %125, label %139

125:                                              ; preds = %119
  %126 = add nsw i32 %.09011037, %116
  %127 = mul i32 %.09011037, %112
  store i32 %127, ptr %10, align 4, !tbaa !5
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %128
  %130 = load double, ptr %129, align 8, !tbaa !9
  %131 = fdiv double 1.000000e+00, %130
  %132 = sext i32 %126 to i64
  %133 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %132
  store double %131, ptr %133, align 8, !tbaa !9
  %134 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %132, i32 1
  store double 0.000000e+00, ptr %134, align 8, !tbaa !12
  %135 = add nsw i32 %.09011037, %118
  store i32 %135, ptr %9, align 4, !tbaa !5
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %136
  %138 = add nsw i32 %.09011037, 1
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %137, i8 0, i64 16, i1 false)
  br label %276

139:                                              ; preds = %119
  %140 = add nsw i32 %.09011037, 1
  %141 = add nsw i32 %140, %30
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %142
  %144 = call { double, double } @Cd(ptr noundef %143)
  %145 = extractvalue { double, double } %144, 0
  %146 = extractvalue { double, double } %144, 1
  %147 = call double @cabs(double noundef %145, double noundef %146) #8
  store double %147, ptr %16, align 16, !tbaa !9
  store double 0.000000e+00, ptr %111, align 8, !tbaa !12
  %148 = mul i32 %.09011037, %112
  store i32 %148, ptr %9, align 4, !tbaa !5
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %149
  %151 = load double, ptr %150, align 8, !tbaa !9
  store double %151, ptr %13, align 16, !tbaa !9
  store double 0.000000e+00, ptr %113, align 8, !tbaa !12
  %152 = call { double, double } @Cd(ptr noundef nonnull %13)
  %153 = extractvalue { double, double } %152, 0
  %154 = extractvalue { double, double } %152, 1
  %155 = call { double, double } @Cd(ptr noundef nonnull %16)
  %156 = extractvalue { double, double } %155, 0
  %157 = extractvalue { double, double } %155, 1
  %158 = call { double, double } @__divdc3(double noundef %153, double noundef %154, double noundef %156, double noundef %157) #8
  %159 = extractvalue { double, double } %158, 0
  %160 = extractvalue { double, double } %158, 1
  %161 = call ptr @_pCd(ptr noundef nonnull %12)
  %162 = getelementptr inbounds i8, ptr %161, i64 8
  store double %159, ptr %161, align 8
  store double %160, ptr %162, align 8
  %163 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %163, ptr %18, align 16, !tbaa !16
  %164 = mul i32 %140, %112
  store i32 %164, ptr %9, align 4, !tbaa !5
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %165
  %167 = load double, ptr %166, align 8, !tbaa !9
  store double %167, ptr %13, align 16, !tbaa !9
  store double 0.000000e+00, ptr %113, align 8, !tbaa !12
  %168 = call { double, double } @Cd(ptr noundef nonnull %13)
  %169 = extractvalue { double, double } %168, 0
  %170 = extractvalue { double, double } %168, 1
  %171 = call { double, double } @Cd(ptr noundef nonnull %16)
  %172 = extractvalue { double, double } %171, 0
  %173 = extractvalue { double, double } %171, 1
  %174 = call { double, double } @__divdc3(double noundef %169, double noundef %170, double noundef %172, double noundef %173) #8
  %175 = extractvalue { double, double } %174, 0
  %176 = extractvalue { double, double } %174, 1
  %177 = call ptr @_pCd(ptr noundef nonnull %12)
  %178 = getelementptr inbounds i8, ptr %177, i64 8
  store double %175, ptr %177, align 8
  store double %176, ptr %178, align 8
  %179 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %179, ptr %22, align 16, !tbaa !16
  %180 = call { double, double } @Cd(ptr noundef %143)
  %181 = extractvalue { double, double } %180, 0
  %182 = extractvalue { double, double } %180, 1
  %183 = call { double, double } @Cd(ptr noundef nonnull %16)
  %184 = extractvalue { double, double } %183, 0
  %185 = extractvalue { double, double } %183, 1
  %186 = call { double, double } @__divdc3(double noundef %181, double noundef %182, double noundef %184, double noundef %185) #8
  %187 = extractvalue { double, double } %186, 0
  %188 = extractvalue { double, double } %186, 1
  %189 = call ptr @_pCd(ptr noundef nonnull %12)
  %190 = getelementptr inbounds i8, ptr %189, i64 8
  store double %187, ptr %189, align 8
  store double %188, ptr %190, align 8
  %191 = load double, ptr %18, align 16, !tbaa !9
  %192 = load double, ptr %22, align 16, !tbaa !9
  %193 = load double, ptr %114, align 8, !tbaa !12
  %194 = load double, ptr %115, align 8, !tbaa !12
  %195 = fneg double %193
  %196 = fmul double %194, %195
  %197 = call double @llvm.fmuladd.f64(double %191, double %192, double %196)
  %198 = fmul double %192, %193
  %199 = call double @llvm.fmuladd.f64(double %191, double %194, double %198)
  %200 = fadd double %197, -1.000000e+00
  store double %200, ptr %13, align 16, !tbaa !9
  store double %199, ptr %113, align 8, !tbaa !12
  %201 = load <2 x double>, ptr %16, align 16
  %202 = load double, ptr %111, align 8, !tbaa !12
  %203 = fneg double %202
  %204 = add nsw i32 %.09011037, %116
  store i32 %204, ptr %9, align 4, !tbaa !5
  %205 = add nsw i32 %140, %118
  %206 = add nsw i32 %.09011037, %118
  %207 = load <2 x double>, ptr %12, align 16, !tbaa !16
  %208 = insertelement <2 x double> poison, double %199, i64 0
  %209 = insertelement <2 x double> %208, double %200, i64 1
  %210 = insertelement <2 x double> poison, double %203, i64 0
  %211 = insertelement <2 x double> %210, double %202, i64 1
  %212 = fmul <2 x double> %209, %211
  %213 = shufflevector <2 x double> %201, <2 x double> poison, <2 x i32> zeroinitializer
  %214 = shufflevector <2 x double> %209, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %215 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %213, <2 x double> %214, <2 x double> %212)
  store <2 x double> %215, ptr %14, align 16, !tbaa !16
  store <2 x double> %215, ptr %12, align 16, !tbaa !16
  %216 = call { double, double } @Cd(ptr noundef nonnull %22)
  %217 = extractvalue { double, double } %216, 0
  %218 = extractvalue { double, double } %216, 1
  %219 = call { double, double } @Cd(ptr noundef nonnull %14)
  %220 = extractvalue { double, double } %219, 0
  %221 = extractvalue { double, double } %219, 1
  %222 = call { double, double } @__divdc3(double noundef %217, double noundef %218, double noundef %220, double noundef %221) #8
  %223 = extractvalue { double, double } %222, 0
  %224 = extractvalue { double, double } %222, 1
  %225 = call ptr @_pCd(ptr noundef nonnull %12)
  %226 = getelementptr inbounds i8, ptr %225, i64 8
  store double %223, ptr %225, align 8
  store double %224, ptr %226, align 8
  %227 = load i32, ptr %9, align 4, !tbaa !5
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %228
  %230 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %230, ptr %229, align 8, !tbaa !16
  store i32 %205, ptr %9, align 4, !tbaa !5
  %231 = call { double, double } @Cd(ptr noundef nonnull %18)
  %232 = extractvalue { double, double } %231, 0
  %233 = extractvalue { double, double } %231, 1
  %234 = call { double, double } @Cd(ptr noundef nonnull %14)
  %235 = extractvalue { double, double } %234, 0
  %236 = extractvalue { double, double } %234, 1
  %237 = call { double, double } @__divdc3(double noundef %232, double noundef %233, double noundef %235, double noundef %236) #8
  %238 = extractvalue { double, double } %237, 0
  %239 = extractvalue { double, double } %237, 1
  %240 = call ptr @_pCd(ptr noundef nonnull %12)
  %241 = getelementptr inbounds i8, ptr %240, i64 8
  store double %238, ptr %240, align 8
  store double %239, ptr %241, align 8
  %242 = load i32, ptr %9, align 4, !tbaa !5
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %243
  %245 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %245, ptr %244, align 8, !tbaa !16
  store i32 %206, ptr %9, align 4, !tbaa !5
  %246 = fneg <2 x double> %207
  store <2 x double> %246, ptr %13, align 16, !tbaa !16
  %247 = call { double, double } @Cd(ptr noundef nonnull %13)
  %248 = extractvalue { double, double } %247, 0
  %249 = extractvalue { double, double } %247, 1
  %250 = call { double, double } @Cd(ptr noundef nonnull %14)
  %251 = extractvalue { double, double } %250, 0
  %252 = extractvalue { double, double } %250, 1
  %253 = call { double, double } @__divdc3(double noundef %248, double noundef %249, double noundef %251, double noundef %252) #8
  %254 = extractvalue { double, double } %253, 0
  %255 = extractvalue { double, double } %253, 1
  %256 = call ptr @_pCd(ptr noundef nonnull %12)
  %257 = getelementptr inbounds i8, ptr %256, i64 8
  store double %254, ptr %256, align 8
  store double %255, ptr %257, align 8
  %258 = load i32, ptr %9, align 4, !tbaa !5
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %259
  %261 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %261, ptr %260, align 8, !tbaa !16
  %262 = add nsw i32 %140, %116
  store i32 %262, ptr %9, align 4, !tbaa !5
  %263 = sext i32 %206 to i64
  %264 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %263
  %265 = call { double, double } @Cd(ptr noundef %264)
  %266 = extractvalue { double, double } %265, 0
  %267 = extractvalue { double, double } %265, 1
  %268 = fneg double %267
  %269 = call ptr @_pCd(ptr noundef nonnull %12)
  %270 = getelementptr inbounds i8, ptr %269, i64 8
  store double %266, ptr %269, align 8
  store double %268, ptr %270, align 8
  %271 = load i32, ptr %9, align 4, !tbaa !5
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %272
  %274 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %274, ptr %273, align 8, !tbaa !16
  %275 = add nsw i32 %.09011037, 2
  %.pre = load i32, ptr %1, align 4, !tbaa !5
  br label %276

276:                                              ; preds = %139, %125
  %277 = phi i32 [ %120, %125 ], [ %.pre, %139 ]
  %.1902 = phi i32 [ %138, %125 ], [ %275, %139 ]
  %.not977 = icmp sgt i32 %.1902, %277
  br i1 %.not977, label %._crit_edge, label %119, !llvm.loop !17

._crit_edge:                                      ; preds = %276
  %invariant.gep = getelementptr i8, ptr %25, i64 16
  %278 = icmp sgt i32 %277, 0
  br i1 %278, label %.lr.ph1152, label %.loopexit

.lr.ph1152:                                       ; preds = %._crit_edge
  %279 = mul nsw i32 %106, %30
  %280 = add nsw i32 %107, 3
  %281 = mul nsw i32 %280, %30
  %282 = add i32 %23, 1
  %283 = add i32 %29, 2
  %284 = add i32 %283, %108
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %285
  %287 = sext i32 %30 to i64
  %288 = sext i32 %108 to i64
  %289 = sext i32 %23 to i64
  %invariant.gep1625 = getelementptr %struct.doublecomplex, ptr %32, i64 %288
  %invariant.gep1627 = getelementptr %struct.doublecomplex, ptr %32, i64 %288
  br label %292

.thread-pre-split1012_crit_edge.split:            ; preds = %._crit_edge1143
  %290 = add i32 %644, %648
  store i32 %290, ptr %11, align 4, !tbaa !5
  br label %thread-pre-split1012

thread-pre-split1012:                             ; preds = %.thread-pre-split1012_crit_edge.split, %.lr.ph1148.split.us.preheader
  %.us-phi1150 = phi i32 [ %649, %.thread-pre-split1012_crit_edge.split ], [ %652, %.lr.ph1148.split.us.preheader ]
  store i32 %645, ptr %10, align 4, !tbaa !5
  store i32 %.us-phi1150, ptr %15, align 4, !tbaa !5
  br label %292

.preheader1019:                                   ; preds = %639
  %.pre1547 = load i32, ptr %1, align 4, !tbaa !5
  %291 = icmp slt i32 %.pre1547, 1
  store i32 1, ptr %15, align 4, !tbaa !5
  br i1 %291, label %.loopexit, label %.lr.ph1155

292:                                              ; preds = %thread-pre-split1012, %.lr.ph1152
  %293 = phi i32 [ %277, %.lr.ph1152 ], [ %644, %thread-pre-split1012 ]
  %294 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %294, ptr %20, align 4, !tbaa !5
  %.not980 = icmp sgt i32 %293, %294
  br i1 %.not980, label %296, label %295

295:                                              ; preds = %292
  store i32 %293, ptr %20, align 4, !tbaa !5
  br label %._crit_edge1044.thread

296:                                              ; preds = %292
  %297 = add nuw nsw i32 %293, 1
  %298 = sub i32 %297, %294
  %.not9821039 = icmp sgt i32 %298, %293
  br i1 %.not9821039, label %._crit_edge1044.thread, label %.lr.ph1043.preheader

.lr.ph1043.preheader:                             ; preds = %296
  %299 = sext i32 %298 to i64
  %300 = add i32 %294, -1
  %301 = zext i32 %300 to i64
  %302 = add nuw nsw i64 %301, 1
  %min.iters.check = icmp ult i32 %300, 7
  br i1 %min.iters.check, label %.lr.ph1043.preheader1756, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph1043.preheader
  %n.vec = and i64 %302, 8589934584
  %ind.end = add nsw i64 %n.vec, %299
  %invariant.gep1901 = getelementptr i32, ptr %26, i64 %299
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %306, %vector.body ]
  %vec.phi1710 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %307, %vector.body ]
  %gep1902 = getelementptr i32, ptr %invariant.gep1901, i64 %index
  %303 = getelementptr inbounds i8, ptr %gep1902, i64 16
  %wide.load = load <4 x i32>, ptr %gep1902, align 4, !tbaa !5
  %wide.load1711 = load <4 x i32>, ptr %303, align 4, !tbaa !5
  %304 = lshr <4 x i32> %wide.load, <i32 31, i32 31, i32 31, i32 31>
  %305 = lshr <4 x i32> %wide.load1711, <i32 31, i32 31, i32 31, i32 31>
  %306 = add <4 x i32> %304, %vec.phi
  %307 = add <4 x i32> %305, %vec.phi1710
  %index.next = add nuw i64 %index, 8
  %308 = icmp eq i64 %index.next, %n.vec
  br i1 %308, label %middle.block, label %vector.body, !llvm.loop !18

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %307, %306
  %309 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %302, %n.vec
  br i1 %cmp.n, label %._crit_edge1044, label %.lr.ph1043.preheader1756

.lr.ph1043.preheader1756:                         ; preds = %middle.block, %.lr.ph1043.preheader
  %indvars.iv1363.ph = phi i64 [ %299, %.lr.ph1043.preheader ], [ %ind.end, %middle.block ]
  %.01041.ph = phi i32 [ 0, %.lr.ph1043.preheader ], [ %309, %middle.block ]
  br label %.lr.ph1043

.lr.ph1043:                                       ; preds = %.lr.ph1043.preheader1756, %.lr.ph1043
  %indvars.iv1363 = phi i64 [ %indvars.iv.next1364, %.lr.ph1043 ], [ %indvars.iv1363.ph, %.lr.ph1043.preheader1756 ]
  %.01041 = phi i32 [ %spec.select1009, %.lr.ph1043 ], [ %.01041.ph, %.lr.ph1043.preheader1756 ]
  %310 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv1363
  %311 = load i32, ptr %310, align 4, !tbaa !5
  %312 = lshr i32 %311, 31
  %spec.select1009 = add i32 %312, %.01041
  %indvars.iv.next1364 = add nsw i64 %indvars.iv1363, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next1364 to i32
  %exitcond1366.not = icmp eq i32 %297, %lftr.wideiv
  br i1 %exitcond1366.not, label %._crit_edge1044, label %.lr.ph1043, !llvm.loop !21

._crit_edge1044:                                  ; preds = %.lr.ph1043, %middle.block
  %spec.select1009.lcssa = phi i32 [ %309, %middle.block ], [ %spec.select1009, %.lr.ph1043 ]
  %313 = and i32 %spec.select1009.lcssa, -2147483647
  %314 = icmp eq i32 %313, 1
  br i1 %314, label %315, label %._crit_edge1044.thread

315:                                              ; preds = %._crit_edge1044
  %316 = add nsw i32 %294, 1
  store i32 %316, ptr %20, align 4, !tbaa !5
  br label %._crit_edge1044.thread

._crit_edge1044.thread:                           ; preds = %296, %._crit_edge1044, %315, %295
  %317 = phi i32 [ %294, %._crit_edge1044 ], [ %316, %315 ], [ %293, %295 ], [ %294, %296 ]
  %318 = sub nsw i32 %293, %317
  store i32 %318, ptr %21, align 4, !tbaa !5
  %.not9841053 = icmp slt i32 %318, 1
  br i1 %.not9841053, label %353, label %.lr.ph1056

.lr.ph1056:                                       ; preds = %._crit_edge1044.thread
  %.not10081047 = icmp slt i32 %317, 1
  br i1 %.not10081047, label %.lr.ph1056.split.us.preheader, label %.lr.ph1050.preheader

.lr.ph1050.preheader:                             ; preds = %.lr.ph1056
  %319 = add nuw i32 %293, 1
  %320 = sub i32 %319, %317
  %wide.trip.count1375 = zext i32 %320 to i64
  %321 = zext nneg i32 %317 to i64
  %xtraiter = and i64 %321, 1
  %322 = icmp eq i32 %317, 1
  %unroll_iter = and i64 %321, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph1050

.lr.ph1056.split.us.preheader:                    ; preds = %.lr.ph1056
  %323 = add nuw i32 %293, 1
  %324 = sub i32 %323, %317
  br label %._crit_edge1057

.lr.ph1050:                                       ; preds = %.lr.ph1050.preheader, %._crit_edge1051
  %indvars.iv1372 = phi i64 [ 1, %.lr.ph1050.preheader ], [ %indvars.iv.next1373, %._crit_edge1051 ]
  %325 = getelementptr %struct.doublecomplex, ptr %25, i64 %indvars.iv1372
  br i1 %322, label %._crit_edge1051.unr-lcssa, label %.lr.ph1050.new

.lr.ph1050.new:                                   ; preds = %.lr.ph1050
  %invariant.gep1903 = getelementptr %struct.doublecomplex, ptr %32, i64 %indvars.iv1372
  br label %326

326:                                              ; preds = %326, %.lr.ph1050.new
  %indvars.iv1367 = phi i64 [ 1, %.lr.ph1050.new ], [ %indvars.iv.next1368.1, %326 ]
  %niter = phi i64 [ 0, %.lr.ph1050.new ], [ %niter.next.1, %326 ]
  %327 = mul nsw i64 %indvars.iv1367, %287
  %328 = trunc nuw nsw i64 %indvars.iv1367 to i32
  %329 = add nuw nsw i32 %318, %328
  %330 = mul nsw i32 %329, %23
  %331 = sext i32 %330 to i64
  %332 = getelementptr %struct.doublecomplex, ptr %325, i64 %331
  %gep1904 = getelementptr %struct.doublecomplex, ptr %invariant.gep1903, i64 %327
  %333 = load <2 x double>, ptr %332, align 8, !tbaa !16
  store <2 x double> %333, ptr %gep1904, align 8, !tbaa !16
  %indvars.iv.next1368 = add nuw nsw i64 %indvars.iv1367, 1
  %334 = mul nsw i64 %indvars.iv.next1368, %287
  %335 = add nsw i64 %334, %indvars.iv1372
  %336 = trunc nuw nsw i64 %indvars.iv.next1368 to i32
  %337 = add nuw nsw i32 %318, %336
  %338 = mul nsw i32 %337, %23
  %339 = sext i32 %338 to i64
  %340 = getelementptr %struct.doublecomplex, ptr %325, i64 %339
  %341 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %335
  %342 = load <2 x double>, ptr %340, align 8, !tbaa !16
  store <2 x double> %342, ptr %341, align 8, !tbaa !16
  %indvars.iv.next1368.1 = add nuw nsw i64 %indvars.iv1367, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge1051.unr-lcssa, label %326, !llvm.loop !22

._crit_edge1051.unr-lcssa:                        ; preds = %326, %.lr.ph1050
  %.lcssa1760.ph = phi i64 [ poison, %.lr.ph1050 ], [ %335, %326 ]
  %indvars.iv1367.unr = phi i64 [ 1, %.lr.ph1050 ], [ %indvars.iv.next1368.1, %326 ]
  br i1 %lcmp.mod.not, label %._crit_edge1051, label %._crit_edge1051.epilog-lcssa

._crit_edge1051.epilog-lcssa:                     ; preds = %._crit_edge1051.unr-lcssa
  %343 = mul nsw i64 %indvars.iv1367.unr, %287
  %344 = add nsw i64 %343, %indvars.iv1372
  %345 = trunc nuw nsw i64 %indvars.iv1367.unr to i32
  %346 = add nuw nsw i32 %318, %345
  %347 = mul nsw i32 %346, %23
  %348 = sext i32 %347 to i64
  %349 = getelementptr %struct.doublecomplex, ptr %325, i64 %348
  %350 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %344
  %351 = load <2 x double>, ptr %349, align 8, !tbaa !16
  store <2 x double> %351, ptr %350, align 8, !tbaa !16
  br label %._crit_edge1051

._crit_edge1051:                                  ; preds = %._crit_edge1051.unr-lcssa, %._crit_edge1051.epilog-lcssa
  %.lcssa1760 = phi i64 [ %.lcssa1760.ph, %._crit_edge1051.unr-lcssa ], [ %344, %._crit_edge1051.epilog-lcssa ]
  %indvars.iv.next1373 = add nuw nsw i64 %indvars.iv1372, 1
  %exitcond1376.not = icmp eq i64 %indvars.iv.next1373, %wide.trip.count1375
  br i1 %exitcond1376.not, label %._crit_edge1057.split, label %.lr.ph1050, !llvm.loop !23

._crit_edge1057.split:                            ; preds = %._crit_edge1051
  %352 = trunc nsw i64 %.lcssa1760 to i32
  store i32 %352, ptr %11, align 4, !tbaa !5
  br label %._crit_edge1057

._crit_edge1057:                                  ; preds = %.lr.ph1056.split.us.preheader, %._crit_edge1057.split
  %.us-phi = phi i32 [ %320, %._crit_edge1057.split ], [ %324, %.lr.ph1056.split.us.preheader ]
  store i32 %317, ptr %10, align 4, !tbaa !5
  br label %353

353:                                              ; preds = %._crit_edge1057, %._crit_edge1044.thread
  %storemerge983.lcssa = phi i32 [ %.us-phi, %._crit_edge1057 ], [ 1, %._crit_edge1044.thread ]
  store i32 %storemerge983.lcssa, ptr %15, align 4, !tbaa !5
  %.not9861071 = icmp slt i32 %317, 1
  br i1 %.not9861071, label %.preheader1022, label %.lr.ph1074.preheader

.lr.ph1074.preheader:                             ; preds = %353
  %354 = zext nneg i32 %317 to i64
  %355 = add nuw i32 %317, 1
  %wide.trip.count1390 = zext i32 %355 to i64
  %wide.trip.count1387 = zext nneg i32 %317 to i64
  br label %.lr.ph1074

..preheader1022_crit_edge:                        ; preds = %388
  store i32 %317, ptr %10, align 4, !tbaa !5
  br label %.preheader1022

.preheader1022:                                   ; preds = %..preheader1022_crit_edge, %353
  br i1 %.not9841053, label %.preheader1021, label %.lr.ph1096

.lr.ph1096:                                       ; preds = %.preheader1022
  %356 = add i32 %317, 1
  %wide.trip.count1395 = zext i32 %356 to i64
  %wide.trip.count1400 = zext i32 %356 to i64
  br label %390

.lr.ph1074:                                       ; preds = %.lr.ph1074.preheader, %388
  %indvar = phi i64 [ 0, %.lr.ph1074.preheader ], [ %indvar.next, %388 ]
  %indvars.iv1382 = phi i64 [ 1, %.lr.ph1074.preheader ], [ %indvars.iv.next1383, %388 ]
  %357 = add nsw i64 %indvars.iv1382, %288
  %358 = mul nsw i64 %indvars.iv1382, %287
  %359 = getelementptr %struct.doublecomplex, ptr %32, i64 %357
  %360 = getelementptr %struct.doublecomplex, ptr %359, i64 %358
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %360, align 8, !tbaa !16
  %.not1006.not1059 = icmp ugt i64 %indvars.iv1382, 1
  br i1 %.not1006.not1059, label %.lr.ph1062.preheader, label %373

.lr.ph1062.preheader:                             ; preds = %.lr.ph1074
  %361 = add i64 %indvar, -1
  %xtraiter1785 = and i64 %indvar, 3
  %362 = icmp ult i64 %361, 3
  br i1 %362, label %._crit_edge1063.unr-lcssa, label %.lr.ph1062.preheader.new

.lr.ph1062.preheader.new:                         ; preds = %.lr.ph1062.preheader
  %unroll_iter1788 = and i64 %indvar, -4
  %invariant.gep1905 = getelementptr %struct.doublecomplex, ptr %32, i64 %357
  %invariant.gep1907 = getelementptr %struct.doublecomplex, ptr %32, i64 %357
  %invariant.gep1909 = getelementptr %struct.doublecomplex, ptr %32, i64 %357
  br label %.lr.ph1062

.lr.ph1062:                                       ; preds = %.lr.ph1062, %.lr.ph1062.preheader.new
  %indvars.iv1377 = phi i64 [ 1, %.lr.ph1062.preheader.new ], [ %indvars.iv.next1378.3, %.lr.ph1062 ]
  %niter1789 = phi i64 [ 0, %.lr.ph1062.preheader.new ], [ %niter1789.next.3, %.lr.ph1062 ]
  %363 = mul nsw i64 %indvars.iv1377, %287
  %gep1906 = getelementptr %struct.doublecomplex, ptr %invariant.gep1905, i64 %363
  %indvars.iv.next1378 = add nuw nsw i64 %indvars.iv1377, 1
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %gep1906, i8 0, i64 16, i1 false)
  %364 = mul nsw i64 %indvars.iv.next1378, %287
  %gep1908 = getelementptr %struct.doublecomplex, ptr %invariant.gep1907, i64 %364
  %indvars.iv.next1378.1 = add nuw nsw i64 %indvars.iv1377, 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %gep1908, i8 0, i64 16, i1 false)
  %365 = mul nsw i64 %indvars.iv.next1378.1, %287
  %gep1910 = getelementptr %struct.doublecomplex, ptr %invariant.gep1909, i64 %365
  %indvars.iv.next1378.2 = add nuw nsw i64 %indvars.iv1377, 3
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %gep1910, i8 0, i64 16, i1 false)
  %366 = mul nsw i64 %indvars.iv.next1378.2, %287
  %367 = add nsw i64 %366, %357
  %368 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %367
  %indvars.iv.next1378.3 = add nuw nsw i64 %indvars.iv1377, 4
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %368, i8 0, i64 16, i1 false)
  %niter1789.next.3 = add i64 %niter1789, 4
  %niter1789.ncmp.3 = icmp eq i64 %niter1789.next.3, %unroll_iter1788
  br i1 %niter1789.ncmp.3, label %._crit_edge1063.unr-lcssa, label %.lr.ph1062, !llvm.loop !24

._crit_edge1063.unr-lcssa:                        ; preds = %.lr.ph1062, %.lr.ph1062.preheader
  %.lcssa1761.ph = phi i64 [ poison, %.lr.ph1062.preheader ], [ %367, %.lr.ph1062 ]
  %indvars.iv1377.unr = phi i64 [ 1, %.lr.ph1062.preheader ], [ %indvars.iv.next1378.3, %.lr.ph1062 ]
  %lcmp.mod1786.not = icmp eq i64 %xtraiter1785, 0
  br i1 %lcmp.mod1786.not, label %._crit_edge1063, label %.lr.ph1062.epil

.lr.ph1062.epil:                                  ; preds = %._crit_edge1063.unr-lcssa, %.lr.ph1062.epil
  %indvars.iv1377.epil = phi i64 [ %indvars.iv.next1378.epil, %.lr.ph1062.epil ], [ %indvars.iv1377.unr, %._crit_edge1063.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph1062.epil ], [ 0, %._crit_edge1063.unr-lcssa ]
  %369 = mul nsw i64 %indvars.iv1377.epil, %287
  %370 = add nsw i64 %369, %357
  %371 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %370
  %indvars.iv.next1378.epil = add nuw nsw i64 %indvars.iv1377.epil, 1
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %371, i8 0, i64 16, i1 false)
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1785
  br i1 %epil.iter.cmp.not, label %._crit_edge1063, label %.lr.ph1062.epil, !llvm.loop !25

._crit_edge1063:                                  ; preds = %.lr.ph1062.epil, %._crit_edge1063.unr-lcssa
  %.lcssa1761 = phi i64 [ %.lcssa1761.ph, %._crit_edge1063.unr-lcssa ], [ %370, %.lr.ph1062.epil ]
  %372 = trunc nsw i64 %.lcssa1761 to i32
  store i32 %372, ptr %11, align 4, !tbaa !5
  br label %373

373:                                              ; preds = %._crit_edge1063, %.lr.ph1074
  %.not1007.not1065 = icmp ult i64 %indvars.iv1382, %354
  br i1 %.not1007.not1065, label %.lr.ph1068, label %388

.lr.ph1068:                                       ; preds = %373
  %374 = trunc nuw nsw i64 %indvars.iv1382 to i32
  %375 = add nsw i32 %318, %374
  br label %376

376:                                              ; preds = %.lr.ph1068, %376
  %indvars.iv1384 = phi i64 [ %indvars.iv1382, %.lr.ph1068 ], [ %indvars.iv.next1385, %376 ]
  %indvars.iv.next1385 = add nuw nsw i64 %indvars.iv1384, 1
  %377 = mul nsw i64 %indvars.iv.next1385, %287
  %378 = add nsw i64 %377, %357
  %379 = trunc nsw i64 %indvars.iv.next1385 to i32
  %380 = add nsw i32 %318, %379
  %381 = mul nsw i32 %380, %23
  %382 = add nsw i32 %375, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %383
  %385 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %378
  %386 = load <2 x double>, ptr %384, align 8, !tbaa !16
  store <2 x double> %386, ptr %385, align 8, !tbaa !16
  %exitcond1388.not = icmp eq i64 %indvars.iv.next1385, %wide.trip.count1387
  br i1 %exitcond1388.not, label %._crit_edge1069, label %376, !llvm.loop !27

._crit_edge1069:                                  ; preds = %376
  %387 = trunc nsw i64 %378 to i32
  store i32 %387, ptr %11, align 4, !tbaa !5
  br label %388

388:                                              ; preds = %._crit_edge1069, %373
  %indvars.iv.next1383 = add nuw nsw i64 %indvars.iv1382, 1
  %exitcond1391.not = icmp eq i64 %indvars.iv.next1383, %wide.trip.count1390
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond1391.not, label %..preheader1022_crit_edge, label %.lr.ph1074, !llvm.loop !28

.preheader1021.loopexit:                          ; preds = %485
  store i32 %317, ptr %9, align 4, !tbaa !5
  br label %.preheader1021

.preheader1021:                                   ; preds = %.preheader1021.loopexit, %.preheader1022
  br i1 %.not9861071, label %._crit_edge1119, label %.lr.ph1118.preheader

.lr.ph1118.preheader:                             ; preds = %.preheader1021
  %389 = add nuw i32 %317, 1
  br label %.lr.ph1118

390:                                              ; preds = %.lr.ph1096, %485
  %storemerge10051095 = phi i32 [ 1, %.lr.ph1096 ], [ %486, %485 ]
  %391 = sext i32 %storemerge10051095 to i64
  %392 = getelementptr inbounds i32, ptr %26, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !5
  %394 = icmp sgt i32 %393, 0
  br i1 %394, label %395, label %416

395:                                              ; preds = %390
  br i1 %.not9861071, label %485, label %.lr.ph1089

.lr.ph1089:                                       ; preds = %395
  %396 = add nsw i32 %storemerge10051095, %279
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %397
  %399 = getelementptr inbounds i8, ptr %398, i64 8
  br label %400

400:                                              ; preds = %.lr.ph1089, %400
  %indvars.iv1397 = phi i64 [ 1, %.lr.ph1089 ], [ %indvars.iv.next1398, %400 ]
  %401 = mul nsw i64 %indvars.iv1397, %287
  %402 = add nsw i64 %401, %391
  %403 = load double, ptr %398, align 8, !tbaa !9
  %404 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %402
  %405 = load double, ptr %399, align 8, !tbaa !12
  %406 = fneg double %405
  %407 = load <2 x double>, ptr %404, align 8, !tbaa !16
  %408 = insertelement <2 x double> poison, double %405, i64 0
  %409 = insertelement <2 x double> %408, double %406, i64 1
  %410 = fmul <2 x double> %407, %409
  %411 = shufflevector <2 x double> %410, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %412 = insertelement <2 x double> poison, double %403, i64 0
  %413 = shufflevector <2 x double> %412, <2 x double> poison, <2 x i32> zeroinitializer
  %414 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %413, <2 x double> %407, <2 x double> %411)
  store <2 x double> %414, ptr %404, align 8, !tbaa !16
  %indvars.iv.next1398 = add nuw nsw i64 %indvars.iv1397, 1
  %exitcond1401.not = icmp eq i64 %indvars.iv.next1398, %wide.trip.count1400
  br i1 %exitcond1401.not, label %._crit_edge1090, label %400, !llvm.loop !29

._crit_edge1090:                                  ; preds = %400
  %415 = trunc nsw i64 %402 to i32
  store i32 %415, ptr %10, align 4, !tbaa !5
  store i32 %396, ptr %11, align 4, !tbaa !5
  br label %.sink.split1648

416:                                              ; preds = %390
  br i1 %.not9861071, label %485, label %.lr.ph1079

.lr.ph1079:                                       ; preds = %416
  %417 = add nsw i32 %storemerge10051095, 1
  %418 = add nsw i32 %storemerge10051095, %279
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %419
  %421 = getelementptr inbounds i8, ptr %420, i64 8
  %422 = add nsw i32 %storemerge10051095, %281
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %423
  %425 = getelementptr inbounds i8, ptr %424, i64 8
  %426 = add nsw i32 %417, %279
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %427
  %429 = getelementptr inbounds i8, ptr %428, i64 8
  %430 = add nsw i32 %417, %281
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %431
  %433 = getelementptr inbounds i8, ptr %432, i64 8
  %434 = sext i32 %417 to i64
  %invariant.gep1911 = getelementptr %struct.doublecomplex, ptr %32, i64 %391
  br label %435

435:                                              ; preds = %.lr.ph1079, %435
  %indvars.iv1392 = phi i64 [ 1, %.lr.ph1079 ], [ %indvars.iv.next1393, %435 ]
  %436 = mul nsw i64 %indvars.iv1392, %287
  %gep1912 = getelementptr %struct.doublecomplex, ptr %invariant.gep1911, i64 %436
  %437 = add nsw i64 %436, %434
  %438 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %437
  %439 = load double, ptr %420, align 8, !tbaa !9
  %440 = load double, ptr %421, align 8, !tbaa !12
  %441 = fneg double %440
  %442 = load double, ptr %424, align 8, !tbaa !9
  %443 = load double, ptr %425, align 8, !tbaa !12
  %444 = fneg double %443
  %445 = load <2 x double>, ptr %gep1912, align 8, !tbaa !16
  %446 = load <2 x double>, ptr %438, align 8, !tbaa !16
  %447 = insertelement <2 x double> poison, double %440, i64 0
  %448 = insertelement <2 x double> %447, double %441, i64 1
  %449 = fmul <2 x double> %445, %448
  %450 = shufflevector <2 x double> %449, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %451 = insertelement <2 x double> poison, double %439, i64 0
  %452 = shufflevector <2 x double> %451, <2 x double> poison, <2 x i32> zeroinitializer
  %453 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %452, <2 x double> %445, <2 x double> %450)
  %454 = insertelement <2 x double> poison, double %443, i64 0
  %455 = insertelement <2 x double> %454, double %444, i64 1
  %456 = fmul <2 x double> %446, %455
  %457 = shufflevector <2 x double> %456, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %458 = insertelement <2 x double> poison, double %442, i64 0
  %459 = shufflevector <2 x double> %458, <2 x double> poison, <2 x i32> zeroinitializer
  %460 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %459, <2 x double> %446, <2 x double> %457)
  %461 = fadd <2 x double> %453, %460
  store <2 x double> %461, ptr %gep1912, align 8, !tbaa !16
  %462 = load double, ptr %428, align 8, !tbaa !9
  %463 = load double, ptr %429, align 8, !tbaa !12
  %464 = fneg double %463
  %465 = load double, ptr %432, align 8, !tbaa !9
  %466 = load double, ptr %433, align 8, !tbaa !12
  %467 = fneg double %466
  %468 = shufflevector <2 x double> %445, <2 x double> %446, <2 x i32> <i32 3, i32 0>
  %469 = insertelement <2 x double> poison, double %467, i64 0
  %470 = insertelement <2 x double> %469, double %463, i64 1
  %471 = fmul <2 x double> %468, %470
  %472 = insertelement <2 x double> poison, double %465, i64 0
  %473 = insertelement <2 x double> %472, double %462, i64 1
  %474 = shufflevector <2 x double> %446, <2 x double> %445, <2 x i32> <i32 0, i32 3>
  %475 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %473, <2 x double> %474, <2 x double> %471)
  %476 = insertelement <2 x double> poison, double %466, i64 0
  %477 = insertelement <2 x double> %476, double %464, i64 1
  %478 = fmul <2 x double> %474, %477
  %479 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %473, <2 x double> %468, <2 x double> %478)
  %480 = shufflevector <2 x double> %479, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %481 = fadd <2 x double> %475, %480
  store <2 x double> %481, ptr %438, align 8, !tbaa !16
  %indvars.iv.next1393 = add nuw nsw i64 %indvars.iv1392, 1
  %exitcond1396.not = icmp eq i64 %indvars.iv.next1393, %wide.trip.count1395
  br i1 %exitcond1396.not, label %._crit_edge1080, label %435, !llvm.loop !30

._crit_edge1080:                                  ; preds = %435
  %482 = trunc nsw i64 %437 to i32
  store i32 %482, ptr %10, align 4, !tbaa !5
  store i32 %426, ptr %11, align 4, !tbaa !5
  %483 = shufflevector <2 x double> %480, <2 x double> %475, <2 x i32> <i32 0, i32 3>
  store <2 x double> %483, ptr %13, align 16, !tbaa !16
  br label %.sink.split1648

.sink.split1648:                                  ; preds = %._crit_edge1090, %._crit_edge1080
  %.sink1643.ph = phi i32 [ 2, %._crit_edge1080 ], [ 1, %._crit_edge1090 ]
  %484 = phi <2 x double> [ %481, %._crit_edge1080 ], [ %414, %._crit_edge1090 ]
  store <2 x double> %484, ptr %12, align 16, !tbaa !16
  br label %485

485:                                              ; preds = %.sink.split1648, %416, %395
  %.sink1643 = phi i32 [ 1, %395 ], [ 2, %416 ], [ %.sink1643.ph, %.sink.split1648 ]
  %486 = add nsw i32 %storemerge10051095, %.sink1643
  %.not987 = icmp sgt i32 %486, %318
  br i1 %.not987, label %.preheader1021.loopexit, label %390, !llvm.loop !31

.lr.ph1118:                                       ; preds = %.lr.ph1118.preheader, %589
  %storemerge10011117 = phi i32 [ %590, %589 ], [ 1, %.lr.ph1118.preheader ]
  %487 = add nsw i32 %storemerge10011117, %318
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i32, ptr %26, i64 %488
  %490 = load i32, ptr %489, align 4, !tbaa !5
  %491 = icmp sgt i32 %490, 0
  %.not10001108 = icmp sgt i32 %storemerge10011117, %317
  br i1 %491, label %492, label %516

492:                                              ; preds = %.lr.ph1118
  br i1 %.not10001108, label %589, label %.lr.ph1111

.lr.ph1111:                                       ; preds = %492
  %493 = add nsw i32 %storemerge10011117, %108
  %494 = add nsw i32 %487, %279
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %495
  %497 = getelementptr inbounds i8, ptr %496, i64 8
  %498 = sext i32 %storemerge10011117 to i64
  %499 = sext i32 %493 to i64
  br label %500

500:                                              ; preds = %.lr.ph1111, %500
  %indvars.iv1407 = phi i64 [ %498, %.lr.ph1111 ], [ %indvars.iv.next1408, %500 ]
  %501 = mul nsw i64 %indvars.iv1407, %287
  %502 = add nsw i64 %501, %499
  %503 = load double, ptr %496, align 8, !tbaa !9
  %504 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %502
  %505 = load double, ptr %497, align 8, !tbaa !12
  %506 = fneg double %505
  %507 = load <2 x double>, ptr %504, align 8, !tbaa !16
  %508 = insertelement <2 x double> poison, double %505, i64 0
  %509 = insertelement <2 x double> %508, double %506, i64 1
  %510 = fmul <2 x double> %507, %509
  %511 = shufflevector <2 x double> %510, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %512 = insertelement <2 x double> poison, double %503, i64 0
  %513 = shufflevector <2 x double> %512, <2 x double> poison, <2 x i32> zeroinitializer
  %514 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %513, <2 x double> %507, <2 x double> %511)
  store <2 x double> %514, ptr %504, align 8, !tbaa !16
  %indvars.iv.next1408 = add nsw i64 %indvars.iv1407, 1
  %lftr.wideiv1410 = trunc i64 %indvars.iv.next1408 to i32
  %exitcond1411.not = icmp eq i32 %389, %lftr.wideiv1410
  br i1 %exitcond1411.not, label %._crit_edge1112, label %500, !llvm.loop !32

._crit_edge1112:                                  ; preds = %500
  %515 = trunc nsw i64 %502 to i32
  store i32 %515, ptr %10, align 4, !tbaa !5
  store i32 %494, ptr %11, align 4, !tbaa !5
  br label %.sink.split1649

516:                                              ; preds = %.lr.ph1118
  br i1 %.not10001108, label %589, label %.lr.ph1101

.lr.ph1101:                                       ; preds = %516
  %517 = add nsw i32 %storemerge10011117, %108
  %518 = add nsw i32 %487, %279
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %519
  %521 = getelementptr inbounds i8, ptr %520, i64 8
  %522 = add nsw i32 %487, %281
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %523
  %525 = getelementptr inbounds i8, ptr %524, i64 8
  %526 = add nsw i32 %487, 1
  %527 = add nsw i32 %526, %279
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %528
  %530 = getelementptr inbounds i8, ptr %529, i64 8
  %531 = add nsw i32 %526, %281
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %532
  %534 = getelementptr inbounds i8, ptr %533, i64 8
  %535 = sext i32 %storemerge10011117 to i64
  %536 = sext i32 %517 to i64
  %invariant.gep1913 = getelementptr %struct.doublecomplex, ptr %32, i64 %536
  br label %537

537:                                              ; preds = %.lr.ph1101, %537
  %indvars.iv1402 = phi i64 [ %535, %.lr.ph1101 ], [ %indvars.iv.next1403, %537 ]
  %538 = mul nsw i64 %indvars.iv1402, %287
  %gep1914 = getelementptr %struct.doublecomplex, ptr %invariant.gep1913, i64 %538
  %539 = trunc nsw i64 %538 to i32
  %540 = add i32 %517, %539
  %541 = add i32 %540, 1
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %542
  %544 = load double, ptr %520, align 8, !tbaa !9
  %545 = load double, ptr %521, align 8, !tbaa !12
  %546 = fneg double %545
  %547 = load double, ptr %524, align 8, !tbaa !9
  %548 = load double, ptr %525, align 8, !tbaa !12
  %549 = fneg double %548
  %550 = load <2 x double>, ptr %gep1914, align 8, !tbaa !16
  %551 = load <2 x double>, ptr %543, align 8, !tbaa !16
  %552 = insertelement <2 x double> poison, double %545, i64 0
  %553 = insertelement <2 x double> %552, double %546, i64 1
  %554 = fmul <2 x double> %550, %553
  %555 = shufflevector <2 x double> %554, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %556 = insertelement <2 x double> poison, double %544, i64 0
  %557 = shufflevector <2 x double> %556, <2 x double> poison, <2 x i32> zeroinitializer
  %558 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %557, <2 x double> %550, <2 x double> %555)
  %559 = insertelement <2 x double> poison, double %548, i64 0
  %560 = insertelement <2 x double> %559, double %549, i64 1
  %561 = fmul <2 x double> %551, %560
  %562 = shufflevector <2 x double> %561, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %563 = insertelement <2 x double> poison, double %547, i64 0
  %564 = shufflevector <2 x double> %563, <2 x double> poison, <2 x i32> zeroinitializer
  %565 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %564, <2 x double> %551, <2 x double> %562)
  %566 = fadd <2 x double> %558, %565
  store <2 x double> %566, ptr %gep1914, align 8, !tbaa !16
  %567 = load double, ptr %529, align 8, !tbaa !9
  %568 = load double, ptr %530, align 8, !tbaa !12
  %569 = fneg double %568
  %570 = load double, ptr %533, align 8, !tbaa !9
  %571 = load double, ptr %534, align 8, !tbaa !12
  %572 = fneg double %571
  %573 = shufflevector <2 x double> %550, <2 x double> %551, <2 x i32> <i32 3, i32 0>
  %574 = insertelement <2 x double> poison, double %572, i64 0
  %575 = insertelement <2 x double> %574, double %568, i64 1
  %576 = fmul <2 x double> %573, %575
  %577 = insertelement <2 x double> poison, double %570, i64 0
  %578 = insertelement <2 x double> %577, double %567, i64 1
  %579 = shufflevector <2 x double> %551, <2 x double> %550, <2 x i32> <i32 0, i32 3>
  %580 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %578, <2 x double> %579, <2 x double> %576)
  %581 = insertelement <2 x double> poison, double %571, i64 0
  %582 = insertelement <2 x double> %581, double %569, i64 1
  %583 = fmul <2 x double> %579, %582
  %584 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %578, <2 x double> %573, <2 x double> %583)
  %585 = shufflevector <2 x double> %584, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %586 = fadd <2 x double> %580, %585
  store <2 x double> %586, ptr %543, align 8, !tbaa !16
  %indvars.iv.next1403 = add nsw i64 %indvars.iv1402, 1
  %lftr.wideiv1405 = trunc i64 %indvars.iv.next1403 to i32
  %exitcond1406.not = icmp eq i32 %389, %lftr.wideiv1405
  br i1 %exitcond1406.not, label %._crit_edge1102, label %537, !llvm.loop !33

._crit_edge1102:                                  ; preds = %537
  store i32 %541, ptr %10, align 4, !tbaa !5
  store i32 %527, ptr %11, align 4, !tbaa !5
  %587 = shufflevector <2 x double> %585, <2 x double> %580, <2 x i32> <i32 0, i32 3>
  store <2 x double> %587, ptr %13, align 16, !tbaa !16
  br label %.sink.split1649

.sink.split1649:                                  ; preds = %._crit_edge1112, %._crit_edge1102
  %.sink1644.ph = phi i32 [ 2, %._crit_edge1102 ], [ 1, %._crit_edge1112 ]
  %588 = phi <2 x double> [ %586, %._crit_edge1102 ], [ %514, %._crit_edge1112 ]
  store <2 x double> %588, ptr %12, align 16, !tbaa !16
  br label %589

589:                                              ; preds = %.sink.split1649, %516, %492
  %.sink1644 = phi i32 [ 1, %492 ], [ 2, %516 ], [ %.sink1644.ph, %.sink.split1649 ]
  %590 = add nsw i32 %storemerge10011117, %.sink1644
  %.not988 = icmp sgt i32 %590, %317
  br i1 %.not988, label %._crit_edge1119.loopexit, label %.lr.ph1118, !llvm.loop !34

._crit_edge1119.loopexit:                         ; preds = %589
  store i32 %317, ptr %9, align 4, !tbaa !5
  br label %._crit_edge1119

._crit_edge1119:                                  ; preds = %._crit_edge1119.loopexit, %.preheader1021
  %storemerge1001.lcssa = phi i32 [ 1, %.preheader1021 ], [ %590, %._crit_edge1119.loopexit ]
  store i32 %storemerge1001.lcssa, ptr %15, align 4, !tbaa !5
  %591 = load i32, ptr %1, align 4, !tbaa !5
  %592 = add i32 %294, 1
  %593 = add i32 %592, %591
  store i32 %593, ptr %9, align 4, !tbaa !5
  %594 = add nsw i32 %318, 1
  %595 = mul i32 %594, %282
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %596
  call void @ztrmm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, ptr noundef nonnull %20, ptr noundef nonnull %20, ptr noundef nonnull @c_b1, ptr noundef %597, ptr noundef nonnull %3, ptr noundef %286, ptr noundef nonnull %9) #8
  %598 = load i32, ptr %20, align 4, !tbaa !5
  %.not9901123 = icmp slt i32 %598, 1
  %.pre1546 = load i32, ptr %21, align 4, !tbaa !5
  br i1 %.not9901123, label %613, label %.lr.ph1126

.lr.ph1126:                                       ; preds = %._crit_edge1119
  %599 = sext i32 %.pre1546 to i64
  %600 = add nuw i32 %598, 1
  %wide.trip.count1420 = zext i32 %600 to i64
  br label %601

601:                                              ; preds = %.lr.ph1126, %611
  %indvars.iv1412 = phi i64 [ 1, %.lr.ph1126 ], [ %indvars.iv.next1413, %611 ]
  %602 = add nsw i64 %indvars.iv1412, %599
  %gep1626 = getelementptr %struct.doublecomplex, ptr %invariant.gep1625, i64 %indvars.iv1412
  br label %603

603:                                              ; preds = %601, %603
  %indvars.iv1414 = phi i64 [ %indvars.iv1412, %601 ], [ %indvars.iv.next1415, %603 ]
  %604 = add nsw i64 %indvars.iv1414, %599
  %605 = mul nsw i64 %604, %289
  %606 = add nsw i64 %602, %605
  %607 = mul nsw i64 %indvars.iv1414, %287
  %608 = getelementptr %struct.doublecomplex, ptr %gep1626, i64 %607
  %609 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %606
  %610 = load <2 x double>, ptr %608, align 8, !tbaa !16
  store <2 x double> %610, ptr %609, align 8, !tbaa !16
  %indvars.iv.next1415 = add nuw nsw i64 %indvars.iv1414, 1
  %exitcond1418.not = icmp eq i64 %indvars.iv.next1415, %wide.trip.count1420
  br i1 %exitcond1418.not, label %611, label %603, !llvm.loop !35

611:                                              ; preds = %603
  %indvars.iv.next1413 = add nuw nsw i64 %indvars.iv1412, 1
  %exitcond1421.not = icmp eq i64 %indvars.iv.next1413, %wide.trip.count1420
  br i1 %exitcond1421.not, label %._crit_edge1127, label %601, !llvm.loop !36

._crit_edge1127:                                  ; preds = %611
  %612 = trunc nsw i64 %606 to i32
  store i32 %612, ptr %11, align 4, !tbaa !5
  br label %613

613:                                              ; preds = %._crit_edge1127, %._crit_edge1119
  %storemerge989.lcssa = phi i32 [ %600, %._crit_edge1127 ], [ 1, %._crit_edge1119 ]
  store i32 %storemerge989.lcssa, ptr %15, align 4, !tbaa !5
  %614 = load i32, ptr %1, align 4, !tbaa !5
  %615 = load i32, ptr %6, align 4, !tbaa !5
  %616 = add i32 %614, 1
  %617 = add i32 %616, %615
  store i32 %617, ptr %9, align 4, !tbaa !5
  store i32 %617, ptr %10, align 4, !tbaa !5
  %618 = add nsw i32 %.pre1546, 1
  %619 = mul nsw i32 %618, %23
  %620 = sext i32 %619 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %620
  call void @zgemm_(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %20, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull @c_b1, ptr noundef %gep, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %9, ptr noundef nonnull @c_b2, ptr noundef %286, ptr noundef nonnull %10) #8
  %621 = load i32, ptr %20, align 4, !tbaa !5
  %.not9921133 = icmp slt i32 %621, 1
  br i1 %.not9921133, label %639, label %.lr.ph1136

.lr.ph1136:                                       ; preds = %613
  %622 = load i32, ptr %21, align 4, !tbaa !5
  %623 = sext i32 %622 to i64
  %624 = add nuw i32 %621, 1
  %wide.trip.count1430 = zext i32 %624 to i64
  br label %625

625:                                              ; preds = %.lr.ph1136, %637
  %indvars.iv1422 = phi i64 [ 1, %.lr.ph1136 ], [ %indvars.iv.next1423, %637 ]
  %626 = add nsw i64 %indvars.iv1422, %623
  %gep1628 = getelementptr %struct.doublecomplex, ptr %invariant.gep1627, i64 %indvars.iv1422
  br label %627

627:                                              ; preds = %625, %627
  %indvars.iv1424 = phi i64 [ %indvars.iv1422, %625 ], [ %indvars.iv.next1425, %627 ]
  %628 = add nsw i64 %indvars.iv1424, %623
  %629 = mul nsw i64 %628, %289
  %630 = add nsw i64 %626, %629
  %631 = mul nsw i64 %indvars.iv1424, %287
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %630
  %633 = getelementptr %struct.doublecomplex, ptr %gep1628, i64 %631
  %634 = load <2 x double>, ptr %632, align 8, !tbaa !16
  %635 = load <2 x double>, ptr %633, align 8, !tbaa !16
  %636 = fadd <2 x double> %634, %635
  store <2 x double> %636, ptr %632, align 8, !tbaa !16
  %indvars.iv.next1425 = add nuw nsw i64 %indvars.iv1424, 1
  %exitcond1428.not = icmp eq i64 %indvars.iv.next1425, %wide.trip.count1430
  br i1 %exitcond1428.not, label %637, label %627, !llvm.loop !37

637:                                              ; preds = %627
  %indvars.iv.next1423 = add nuw nsw i64 %indvars.iv1422, 1
  %exitcond1431.not = icmp eq i64 %indvars.iv.next1423, %wide.trip.count1430
  br i1 %exitcond1431.not, label %._crit_edge1137, label %625, !llvm.loop !38

._crit_edge1137:                                  ; preds = %637
  %638 = trunc nsw i64 %630 to i32
  store i32 %621, ptr %10, align 4, !tbaa !5
  store i32 %638, ptr %11, align 4, !tbaa !5
  store <2 x double> %636, ptr %12, align 16, !tbaa !16
  br label %639

639:                                              ; preds = %._crit_edge1137, %613
  %storemerge991.lcssa = phi i32 [ %624, %._crit_edge1137 ], [ 1, %613 ]
  store i32 %storemerge991.lcssa, ptr %15, align 4, !tbaa !5
  %640 = load i32, ptr %1, align 4, !tbaa !5
  %641 = load i32, ptr %6, align 4, !tbaa !5
  %642 = add i32 %640, 1
  %643 = add i32 %642, %641
  store i32 %643, ptr %9, align 4, !tbaa !5
  call void @ztrmm_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, ptr noundef nonnull %21, ptr noundef nonnull %20, ptr noundef nonnull @c_b1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %9) #8
  %644 = load i32, ptr %21, align 4, !tbaa !5
  store i32 %644, ptr %9, align 4, !tbaa !5
  %.not9941145 = icmp slt i32 %644, 1
  br i1 %.not9941145, label %.preheader1019, label %.lr.ph1148, !llvm.loop !39

.lr.ph1148:                                       ; preds = %639
  %645 = load i32, ptr %20, align 4, !tbaa !5
  %.not9951139 = icmp slt i32 %645, 1
  br i1 %.not9951139, label %.lr.ph1148.split.us.preheader, label %.lr.ph1142.preheader

.lr.ph1142.preheader:                             ; preds = %.lr.ph1148
  %646 = zext nneg i32 %644 to i64
  %647 = add nuw i32 %645, %644
  %648 = mul i32 %23, %647
  %649 = add nuw i32 %644, 1
  %wide.trip.count1440 = zext i32 %649 to i64
  %650 = zext nneg i32 %645 to i64
  %xtraiter1791 = and i64 %650, 1
  %651 = icmp eq i32 %645, 1
  %unroll_iter1794 = and i64 %650, 2147483646
  %lcmp.mod1793.not = icmp eq i64 %xtraiter1791, 0
  br label %.lr.ph1142

.lr.ph1148.split.us.preheader:                    ; preds = %.lr.ph1148
  %652 = add nuw i32 %644, 1
  br label %thread-pre-split1012

.lr.ph1142:                                       ; preds = %.lr.ph1142.preheader, %._crit_edge1143
  %indvars.iv1437 = phi i64 [ 1, %.lr.ph1142.preheader ], [ %indvars.iv.next1438, %._crit_edge1143 ]
  %invariant.gep1629 = getelementptr %struct.doublecomplex, ptr %32, i64 %indvars.iv1437
  br i1 %651, label %._crit_edge1143.unr-lcssa, label %.lr.ph1142.new

.lr.ph1142.new:                                   ; preds = %.lr.ph1142
  %invariant.gep1915 = getelementptr %struct.doublecomplex, ptr %25, i64 %indvars.iv1437
  %invariant.gep1917 = getelementptr %struct.doublecomplex, ptr %25, i64 %indvars.iv1437
  br label %653

653:                                              ; preds = %653, %.lr.ph1142.new
  %indvars.iv1432 = phi i64 [ 1, %.lr.ph1142.new ], [ %indvars.iv.next1433.1, %653 ]
  %niter1795 = phi i64 [ 0, %.lr.ph1142.new ], [ %niter1795.next.1, %653 ]
  %654 = add nuw nsw i64 %indvars.iv1432, %646
  %655 = mul nsw i64 %654, %289
  %656 = mul nsw i64 %indvars.iv1432, %287
  %gep1630 = getelementptr %struct.doublecomplex, ptr %invariant.gep1629, i64 %656
  %gep1916 = getelementptr %struct.doublecomplex, ptr %invariant.gep1915, i64 %655
  %657 = load <2 x double>, ptr %gep1630, align 8, !tbaa !16
  store <2 x double> %657, ptr %gep1916, align 8, !tbaa !16
  %indvars.iv.next1433 = add nuw nsw i64 %indvars.iv1432, 1
  %658 = add nuw nsw i64 %indvars.iv.next1433, %646
  %659 = mul nsw i64 %658, %289
  %660 = mul nsw i64 %indvars.iv.next1433, %287
  %gep1630.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep1629, i64 %660
  %gep1918 = getelementptr %struct.doublecomplex, ptr %invariant.gep1917, i64 %659
  %661 = load <2 x double>, ptr %gep1630.1, align 8, !tbaa !16
  store <2 x double> %661, ptr %gep1918, align 8, !tbaa !16
  %indvars.iv.next1433.1 = add nuw nsw i64 %indvars.iv1432, 2
  %niter1795.next.1 = add i64 %niter1795, 2
  %niter1795.ncmp.1 = icmp eq i64 %niter1795.next.1, %unroll_iter1794
  br i1 %niter1795.ncmp.1, label %._crit_edge1143.unr-lcssa, label %653, !llvm.loop !40

._crit_edge1143.unr-lcssa:                        ; preds = %653, %.lr.ph1142
  %indvars.iv1432.unr = phi i64 [ 1, %.lr.ph1142 ], [ %indvars.iv.next1433.1, %653 ]
  br i1 %lcmp.mod1793.not, label %._crit_edge1143, label %._crit_edge1143.epilog-lcssa

._crit_edge1143.epilog-lcssa:                     ; preds = %._crit_edge1143.unr-lcssa
  %662 = add nuw nsw i64 %indvars.iv1432.unr, %646
  %663 = mul nsw i64 %662, %289
  %664 = mul nsw i64 %indvars.iv1432.unr, %287
  %gep1630.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep1629, i64 %664
  %665 = getelementptr %struct.doublecomplex, ptr %25, i64 %663
  %666 = getelementptr %struct.doublecomplex, ptr %665, i64 %indvars.iv1437
  %667 = load <2 x double>, ptr %gep1630.epil, align 8, !tbaa !16
  store <2 x double> %667, ptr %666, align 8, !tbaa !16
  br label %._crit_edge1143

._crit_edge1143:                                  ; preds = %._crit_edge1143.unr-lcssa, %._crit_edge1143.epilog-lcssa
  %indvars.iv.next1438 = add nuw nsw i64 %indvars.iv1437, 1
  %exitcond1441.not = icmp eq i64 %indvars.iv.next1438, %wide.trip.count1440
  br i1 %exitcond1441.not, label %.thread-pre-split1012_crit_edge.split, label %.lr.ph1142, !llvm.loop !41

.lr.ph1155:                                       ; preds = %.preheader1019, %690
  %storemerge9781154 = phi i32 [ %692, %690 ], [ 1, %.preheader1019 ]
  %668 = sext i32 %storemerge9781154 to i64
  %669 = getelementptr inbounds i32, ptr %26, i64 %668
  %670 = load i32, ptr %669, align 4, !tbaa !5
  %671 = icmp sgt i32 %670, 0
  br i1 %671, label %672, label %679

672:                                              ; preds = %.lr.ph1155
  store i32 %670, ptr %19, align 4, !tbaa !5
  %673 = icmp slt i32 %storemerge9781154, %670
  br i1 %673, label %674, label %675

674:                                              ; preds = %672
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %15, ptr noundef nonnull %19) #8
  %.pre1550 = load i32, ptr %15, align 4, !tbaa !5
  %.pre1551 = load i32, ptr %19, align 4, !tbaa !5
  br label %675

675:                                              ; preds = %674, %672
  %676 = phi i32 [ %.pre1551, %674 ], [ %670, %672 ]
  %677 = phi i32 [ %.pre1550, %674 ], [ %storemerge9781154, %672 ]
  %678 = icmp sgt i32 %677, %676
  br i1 %678, label %.sink.split, label %690

679:                                              ; preds = %.lr.ph1155
  %680 = sub nsw i32 0, %670
  store i32 %680, ptr %19, align 4, !tbaa !5
  %681 = add nsw i32 %storemerge9781154, 1
  store i32 %681, ptr %15, align 4, !tbaa !5
  %682 = icmp slt i32 %storemerge9781154, %680
  br i1 %682, label %683, label %684

683:                                              ; preds = %679
  store i32 %storemerge9781154, ptr %9, align 4, !tbaa !5
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %9, ptr noundef nonnull %19) #8
  %.pre1548 = load i32, ptr %15, align 4, !tbaa !5
  %.pre1549 = load i32, ptr %19, align 4, !tbaa !5
  br label %684

684:                                              ; preds = %683, %679
  %685 = phi i32 [ %.pre1549, %683 ], [ %680, %679 ]
  %686 = phi i32 [ %.pre1548, %683 ], [ %681, %679 ]
  %687 = add nsw i32 %686, -1
  %688 = icmp sgt i32 %687, %685
  br i1 %688, label %689, label %690

689:                                              ; preds = %684
  store i32 %687, ptr %9, align 4, !tbaa !5
  br label %.sink.split

.sink.split:                                      ; preds = %675, %689
  %.sink1645 = phi ptr [ %9, %689 ], [ %15, %675 ]
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %.sink1645) #8
  br label %690

690:                                              ; preds = %.sink.split, %684, %675
  %691 = load i32, ptr %15, align 4, !tbaa !5
  %692 = add nsw i32 %691, 1
  store i32 %692, ptr %15, align 4, !tbaa !5
  %693 = load i32, ptr %1, align 4, !tbaa !5
  %.not979.not = icmp slt i32 %691, %693
  br i1 %.not979.not, label %.lr.ph1155, label %.loopexit, !llvm.loop !42

694:                                              ; preds = %.loopexit1023.thread, %.loopexit1023
  %695 = phi i32 [ %78, %.loopexit1023.thread ], [ %104, %.loopexit1023 ]
  %696 = phi i32 [ %77, %.loopexit1023.thread ], [ %103, %.loopexit1023 ]
  %697 = phi i32 [ %76, %.loopexit1023.thread ], [ %102, %.loopexit1023 ]
  %698 = call i32 @ztrtri_(ptr noundef %0, ptr noundef nonnull @.str, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %7) #8
  %699 = load i32, ptr %1, align 4, !tbaa !5
  %700 = icmp sgt i32 %699, 0
  br i1 %700, label %.lr.ph1158, label %.loopexit

.lr.ph1158:                                       ; preds = %694
  %701 = getelementptr inbounds i8, ptr %16, i64 8
  %702 = add i32 %23, 1
  %703 = getelementptr inbounds i8, ptr %13, i64 8
  %704 = getelementptr inbounds i8, ptr %18, i64 8
  %705 = getelementptr inbounds i8, ptr %22, i64 8
  %706 = mul nsw i32 %695, %30
  %707 = add nsw i32 %696, 3
  %708 = mul nsw i32 %707, %30
  br label %723

.preheader1018:                                   ; preds = %879
  %.pre1552 = load i32, ptr %1, align 4, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !5
  %709 = icmp sgt i32 %.pre1552, 0
  br i1 %709, label %.lr.ph1282, label %.loopexit

.lr.ph1282:                                       ; preds = %.preheader1018
  %710 = mul nsw i32 %695, %30
  %711 = add nsw i32 %696, 3
  %712 = mul nsw i32 %711, %30
  %713 = add i32 %712, -1
  %714 = add i32 %710, -1
  %715 = add i32 %23, 1
  %716 = add i32 %29, 2
  %717 = add i32 %716, %697
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %718
  %720 = sext i32 %30 to i64
  %721 = sext i32 %23 to i64
  %722 = sext i32 %697 to i64
  %invariant.gep1635 = getelementptr %struct.doublecomplex, ptr %32, i64 %722
  %invariant.gep1637 = getelementptr %struct.doublecomplex, ptr %32, i64 %722
  %invariant.gep1639 = getelementptr %struct.doublecomplex, ptr %32, i64 %722
  br label %882

723:                                              ; preds = %.lr.ph1158, %879
  %.29031156 = phi i32 [ %699, %.lr.ph1158 ], [ %.3904, %879 ]
  %724 = zext nneg i32 %.29031156 to i64
  %725 = getelementptr inbounds i32, ptr %26, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !5
  %727 = icmp sgt i32 %726, 0
  br i1 %727, label %728, label %742

728:                                              ; preds = %723
  %729 = add nsw i32 %.29031156, %706
  %730 = mul i32 %.29031156, %702
  store i32 %730, ptr %10, align 4, !tbaa !5
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %731
  %733 = load double, ptr %732, align 8, !tbaa !9
  %734 = fdiv double 1.000000e+00, %733
  %735 = sext i32 %729 to i64
  %736 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %735
  store double %734, ptr %736, align 8, !tbaa !9
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %735, i32 1
  store double 0.000000e+00, ptr %737, align 8, !tbaa !12
  %738 = add nsw i32 %.29031156, %708
  store i32 %738, ptr %9, align 4, !tbaa !5
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %739
  %741 = add nsw i32 %.29031156, -1
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %740, i8 0, i64 16, i1 false)
  br label %879

742:                                              ; preds = %723
  %743 = add nsw i32 %.29031156, -1
  %744 = add i32 %.29031156, %29
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %745
  %747 = call { double, double } @Cd(ptr noundef %746)
  %748 = extractvalue { double, double } %747, 0
  %749 = extractvalue { double, double } %747, 1
  %750 = call double @cabs(double noundef %748, double noundef %749) #8
  store double %750, ptr %16, align 16, !tbaa !9
  store double 0.000000e+00, ptr %701, align 8, !tbaa !12
  %751 = mul i32 %743, %702
  store i32 %751, ptr %9, align 4, !tbaa !5
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %752
  %754 = load double, ptr %753, align 8, !tbaa !9
  store double %754, ptr %13, align 16, !tbaa !9
  store double 0.000000e+00, ptr %703, align 8, !tbaa !12
  %755 = call { double, double } @Cd(ptr noundef nonnull %13)
  %756 = extractvalue { double, double } %755, 0
  %757 = extractvalue { double, double } %755, 1
  %758 = call { double, double } @Cd(ptr noundef nonnull %16)
  %759 = extractvalue { double, double } %758, 0
  %760 = extractvalue { double, double } %758, 1
  %761 = call { double, double } @__divdc3(double noundef %756, double noundef %757, double noundef %759, double noundef %760) #8
  %762 = extractvalue { double, double } %761, 0
  %763 = extractvalue { double, double } %761, 1
  %764 = call ptr @_pCd(ptr noundef nonnull %12)
  %765 = getelementptr inbounds i8, ptr %764, i64 8
  store double %762, ptr %764, align 8
  store double %763, ptr %765, align 8
  %766 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %766, ptr %18, align 16, !tbaa !16
  %767 = mul i32 %.29031156, %702
  store i32 %767, ptr %9, align 4, !tbaa !5
  %768 = sext i32 %767 to i64
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %768
  %770 = load double, ptr %769, align 8, !tbaa !9
  store double %770, ptr %13, align 16, !tbaa !9
  store double 0.000000e+00, ptr %703, align 8, !tbaa !12
  %771 = call { double, double } @Cd(ptr noundef nonnull %13)
  %772 = extractvalue { double, double } %771, 0
  %773 = extractvalue { double, double } %771, 1
  %774 = call { double, double } @Cd(ptr noundef nonnull %16)
  %775 = extractvalue { double, double } %774, 0
  %776 = extractvalue { double, double } %774, 1
  %777 = call { double, double } @__divdc3(double noundef %772, double noundef %773, double noundef %775, double noundef %776) #8
  %778 = extractvalue { double, double } %777, 0
  %779 = extractvalue { double, double } %777, 1
  %780 = call ptr @_pCd(ptr noundef nonnull %12)
  %781 = getelementptr inbounds i8, ptr %780, i64 8
  store double %778, ptr %780, align 8
  store double %779, ptr %781, align 8
  %782 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %782, ptr %22, align 16, !tbaa !16
  %783 = call { double, double } @Cd(ptr noundef %746)
  %784 = extractvalue { double, double } %783, 0
  %785 = extractvalue { double, double } %783, 1
  %786 = call { double, double } @Cd(ptr noundef nonnull %16)
  %787 = extractvalue { double, double } %786, 0
  %788 = extractvalue { double, double } %786, 1
  %789 = call { double, double } @__divdc3(double noundef %784, double noundef %785, double noundef %787, double noundef %788) #8
  %790 = extractvalue { double, double } %789, 0
  %791 = extractvalue { double, double } %789, 1
  %792 = call ptr @_pCd(ptr noundef nonnull %12)
  %793 = getelementptr inbounds i8, ptr %792, i64 8
  store double %790, ptr %792, align 8
  store double %791, ptr %793, align 8
  %794 = load double, ptr %18, align 16, !tbaa !9
  %795 = load double, ptr %22, align 16, !tbaa !9
  %796 = load double, ptr %704, align 8, !tbaa !12
  %797 = load double, ptr %705, align 8, !tbaa !12
  %798 = fneg double %796
  %799 = fmul double %797, %798
  %800 = call double @llvm.fmuladd.f64(double %794, double %795, double %799)
  %801 = fmul double %795, %796
  %802 = call double @llvm.fmuladd.f64(double %794, double %797, double %801)
  %803 = fadd double %800, -1.000000e+00
  store double %803, ptr %13, align 16, !tbaa !9
  store double %802, ptr %703, align 8, !tbaa !12
  %804 = load <2 x double>, ptr %16, align 16
  %805 = load double, ptr %701, align 8, !tbaa !12
  %806 = fneg double %805
  %807 = add nsw i32 %743, %706
  store i32 %807, ptr %9, align 4, !tbaa !5
  %808 = add nsw i32 %.29031156, %706
  %809 = add nsw i32 %.29031156, %708
  %810 = load <2 x double>, ptr %12, align 16, !tbaa !16
  %811 = insertelement <2 x double> poison, double %802, i64 0
  %812 = insertelement <2 x double> %811, double %803, i64 1
  %813 = insertelement <2 x double> poison, double %806, i64 0
  %814 = insertelement <2 x double> %813, double %805, i64 1
  %815 = fmul <2 x double> %812, %814
  %816 = shufflevector <2 x double> %804, <2 x double> poison, <2 x i32> zeroinitializer
  %817 = shufflevector <2 x double> %812, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %818 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %816, <2 x double> %817, <2 x double> %815)
  store <2 x double> %818, ptr %14, align 16, !tbaa !16
  store <2 x double> %818, ptr %12, align 16, !tbaa !16
  %819 = call { double, double } @Cd(ptr noundef nonnull %22)
  %820 = extractvalue { double, double } %819, 0
  %821 = extractvalue { double, double } %819, 1
  %822 = call { double, double } @Cd(ptr noundef nonnull %14)
  %823 = extractvalue { double, double } %822, 0
  %824 = extractvalue { double, double } %822, 1
  %825 = call { double, double } @__divdc3(double noundef %820, double noundef %821, double noundef %823, double noundef %824) #8
  %826 = extractvalue { double, double } %825, 0
  %827 = extractvalue { double, double } %825, 1
  %828 = call ptr @_pCd(ptr noundef nonnull %12)
  %829 = getelementptr inbounds i8, ptr %828, i64 8
  store double %826, ptr %828, align 8
  store double %827, ptr %829, align 8
  %830 = load i32, ptr %9, align 4, !tbaa !5
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %831
  %833 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %833, ptr %832, align 8, !tbaa !16
  store i32 %808, ptr %9, align 4, !tbaa !5
  %834 = call { double, double } @Cd(ptr noundef nonnull %18)
  %835 = extractvalue { double, double } %834, 0
  %836 = extractvalue { double, double } %834, 1
  %837 = call { double, double } @Cd(ptr noundef nonnull %14)
  %838 = extractvalue { double, double } %837, 0
  %839 = extractvalue { double, double } %837, 1
  %840 = call { double, double } @__divdc3(double noundef %835, double noundef %836, double noundef %838, double noundef %839) #8
  %841 = extractvalue { double, double } %840, 0
  %842 = extractvalue { double, double } %840, 1
  %843 = call ptr @_pCd(ptr noundef nonnull %12)
  %844 = getelementptr inbounds i8, ptr %843, i64 8
  store double %841, ptr %843, align 8
  store double %842, ptr %844, align 8
  %845 = load i32, ptr %9, align 4, !tbaa !5
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %846
  %848 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %848, ptr %847, align 8, !tbaa !16
  store i32 %809, ptr %9, align 4, !tbaa !5
  %849 = fneg <2 x double> %810
  store <2 x double> %849, ptr %13, align 16, !tbaa !16
  %850 = call { double, double } @Cd(ptr noundef nonnull %13)
  %851 = extractvalue { double, double } %850, 0
  %852 = extractvalue { double, double } %850, 1
  %853 = call { double, double } @Cd(ptr noundef nonnull %14)
  %854 = extractvalue { double, double } %853, 0
  %855 = extractvalue { double, double } %853, 1
  %856 = call { double, double } @__divdc3(double noundef %851, double noundef %852, double noundef %854, double noundef %855) #8
  %857 = extractvalue { double, double } %856, 0
  %858 = extractvalue { double, double } %856, 1
  %859 = call ptr @_pCd(ptr noundef nonnull %12)
  %860 = getelementptr inbounds i8, ptr %859, i64 8
  store double %857, ptr %859, align 8
  store double %858, ptr %860, align 8
  %861 = load i32, ptr %9, align 4, !tbaa !5
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %862
  %864 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %864, ptr %863, align 8, !tbaa !16
  %865 = add nsw i32 %743, %708
  store i32 %865, ptr %9, align 4, !tbaa !5
  %866 = sext i32 %809 to i64
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %866
  %868 = call { double, double } @Cd(ptr noundef %867)
  %869 = extractvalue { double, double } %868, 0
  %870 = extractvalue { double, double } %868, 1
  %871 = fneg double %870
  %872 = call ptr @_pCd(ptr noundef nonnull %12)
  %873 = getelementptr inbounds i8, ptr %872, i64 8
  store double %869, ptr %872, align 8
  store double %871, ptr %873, align 8
  %874 = load i32, ptr %9, align 4, !tbaa !5
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %875
  %877 = load <2 x double>, ptr %12, align 16, !tbaa !16
  store <2 x double> %877, ptr %876, align 8, !tbaa !16
  %878 = add nsw i32 %.29031156, -2
  br label %879

879:                                              ; preds = %742, %728
  %.3904 = phi i32 [ %741, %728 ], [ %878, %742 ]
  %880 = icmp sgt i32 %.3904, 0
  br i1 %880, label %723, label %.preheader1018, !llvm.loop !43

.preheader:                                       ; preds = %.loopexit1014
  store i32 %1375, ptr %15, align 4, !tbaa !5
  %881 = icmp sgt i32 %1375, 0
  br i1 %881, label %.lr.ph1285, label %.loopexit

882:                                              ; preds = %.lr.ph1282, %.loopexit1014
  %883 = phi i32 [ %.pre1552, %.lr.ph1282 ], [ %1375, %.loopexit1014 ]
  %884 = phi i32 [ 0, %.lr.ph1282 ], [ %.pre-phi, %.loopexit1014 ]
  %885 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %885, ptr %20, align 4, !tbaa !5
  %886 = add nsw i32 %885, %884
  %.not947 = icmp slt i32 %886, %883
  br i1 %.not947, label %889, label %887

887:                                              ; preds = %882
  %888 = sub nsw i32 %883, %884
  store i32 %888, ptr %20, align 4, !tbaa !5
  br label %.thread1569

889:                                              ; preds = %882
  %.not949.not1161 = icmp sgt i32 %885, 0
  br i1 %.not949.not1161, label %.lr.ph1165, label %.thread1569

.lr.ph1165:                                       ; preds = %889
  %890 = add nsw i32 %886, 1
  %min.iters.check1714 = icmp ult i32 %885, 8
  br i1 %min.iters.check1714, label %scalar.ph1713.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph1165
  %891 = add i32 %884, 1
  %892 = add i32 %884, %885
  %893 = icmp slt i32 %892, %891
  br i1 %893, label %scalar.ph1713.preheader, label %vector.ph1715

vector.ph1715:                                    ; preds = %vector.scevcheck
  %n.vec1717 = and i32 %885, 2147483640
  %ind.end1718 = add i32 %884, %n.vec1717
  br label %vector.body1720

vector.body1720:                                  ; preds = %vector.body1720, %vector.ph1715
  %index1721 = phi i32 [ 0, %vector.ph1715 ], [ %index.next1727, %vector.body1720 ]
  %vec.phi1722 = phi <4 x i32> [ zeroinitializer, %vector.ph1715 ], [ %900, %vector.body1720 ]
  %vec.phi1723 = phi <4 x i32> [ zeroinitializer, %vector.ph1715 ], [ %901, %vector.body1720 ]
  %offset.idx1724 = add i32 %884, %index1721
  %894 = add i32 %offset.idx1724, 1
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds i32, ptr %26, i64 %895
  %897 = getelementptr inbounds i8, ptr %896, i64 16
  %wide.load1725 = load <4 x i32>, ptr %896, align 4, !tbaa !5
  %wide.load1726 = load <4 x i32>, ptr %897, align 4, !tbaa !5
  %898 = lshr <4 x i32> %wide.load1725, <i32 31, i32 31, i32 31, i32 31>
  %899 = lshr <4 x i32> %wide.load1726, <i32 31, i32 31, i32 31, i32 31>
  %900 = add <4 x i32> %898, %vec.phi1722
  %901 = add <4 x i32> %899, %vec.phi1723
  %index.next1727 = add nuw i32 %index1721, 8
  %902 = icmp eq i32 %index.next1727, %n.vec1717
  br i1 %902, label %middle.block1712, label %vector.body1720, !llvm.loop !44

middle.block1712:                                 ; preds = %vector.body1720
  %bin.rdx1728 = add <4 x i32> %901, %900
  %903 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx1728)
  %cmp.n1729 = icmp eq i32 %885, %n.vec1717
  br i1 %cmp.n1729, label %.loopexit1731, label %scalar.ph1713.preheader

scalar.ph1713.preheader:                          ; preds = %middle.block1712, %vector.scevcheck, %.lr.ph1165
  %storemerge948.in1168.in.ph = phi i32 [ %884, %vector.scevcheck ], [ %884, %.lr.ph1165 ], [ %ind.end1718, %middle.block1712 ]
  %.21162.ph = phi i32 [ 0, %vector.scevcheck ], [ 0, %.lr.ph1165 ], [ %903, %middle.block1712 ]
  %904 = add i32 %884, %885
  %905 = sub i32 %904, %storemerge948.in1168.in.ph
  %906 = add i32 %884, -1
  %907 = add i32 %906, %885
  %908 = sub i32 %907, %storemerge948.in1168.in.ph
  %xtraiter1796 = and i32 %905, 3
  %lcmp.mod1797.not = icmp eq i32 %xtraiter1796, 0
  br i1 %lcmp.mod1797.not, label %scalar.ph1713.prol.loopexit, label %scalar.ph1713.prol

scalar.ph1713.prol:                               ; preds = %scalar.ph1713.preheader, %scalar.ph1713.prol
  %storemerge948.in1168.in.prol = phi i32 [ %storemerge948.in1168.prol, %scalar.ph1713.prol ], [ %storemerge948.in1168.in.ph, %scalar.ph1713.preheader ]
  %.21162.prol = phi i32 [ %spec.select1010.prol, %scalar.ph1713.prol ], [ %.21162.ph, %scalar.ph1713.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %scalar.ph1713.prol ], [ 0, %scalar.ph1713.preheader ]
  %storemerge948.in1168.prol = add i32 %storemerge948.in1168.in.prol, 1
  %909 = sext i32 %storemerge948.in1168.prol to i64
  %910 = getelementptr inbounds i32, ptr %26, i64 %909
  %911 = load i32, ptr %910, align 4, !tbaa !5
  %912 = lshr i32 %911, 31
  %spec.select1010.prol = add i32 %912, %.21162.prol
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter1796
  br i1 %prol.iter.cmp.not, label %scalar.ph1713.prol.loopexit, label %scalar.ph1713.prol, !llvm.loop !45

scalar.ph1713.prol.loopexit:                      ; preds = %scalar.ph1713.prol, %scalar.ph1713.preheader
  %spec.select1010.lcssa1733.unr = phi i32 [ poison, %scalar.ph1713.preheader ], [ %spec.select1010.prol, %scalar.ph1713.prol ]
  %storemerge948.in1168.in.unr = phi i32 [ %storemerge948.in1168.in.ph, %scalar.ph1713.preheader ], [ %storemerge948.in1168.prol, %scalar.ph1713.prol ]
  %.21162.unr = phi i32 [ %.21162.ph, %scalar.ph1713.preheader ], [ %spec.select1010.prol, %scalar.ph1713.prol ]
  %913 = icmp ult i32 %908, 3
  br i1 %913, label %.loopexit1731, label %scalar.ph1713

scalar.ph1713:                                    ; preds = %scalar.ph1713.prol.loopexit, %scalar.ph1713
  %storemerge948.in1168.in = phi i32 [ %storemerge948.in1168.3, %scalar.ph1713 ], [ %storemerge948.in1168.in.unr, %scalar.ph1713.prol.loopexit ]
  %.21162 = phi i32 [ %spec.select1010.3, %scalar.ph1713 ], [ %.21162.unr, %scalar.ph1713.prol.loopexit ]
  %storemerge948.in1168 = add i32 %storemerge948.in1168.in, 1
  %914 = sext i32 %storemerge948.in1168 to i64
  %915 = getelementptr inbounds i32, ptr %26, i64 %914
  %916 = load i32, ptr %915, align 4, !tbaa !5
  %917 = lshr i32 %916, 31
  %spec.select1010 = add i32 %917, %.21162
  %storemerge948.in1168.1 = add i32 %storemerge948.in1168.in, 2
  %918 = sext i32 %storemerge948.in1168.1 to i64
  %919 = getelementptr inbounds i32, ptr %26, i64 %918
  %920 = load i32, ptr %919, align 4, !tbaa !5
  %921 = lshr i32 %920, 31
  %spec.select1010.1 = add i32 %921, %spec.select1010
  %storemerge948.in1168.2 = add i32 %storemerge948.in1168.in, 3
  %922 = sext i32 %storemerge948.in1168.2 to i64
  %923 = getelementptr inbounds i32, ptr %26, i64 %922
  %924 = load i32, ptr %923, align 4, !tbaa !5
  %925 = lshr i32 %924, 31
  %spec.select1010.2 = add i32 %925, %spec.select1010.1
  %storemerge948.in1168.3 = add i32 %storemerge948.in1168.in, 4
  %926 = sext i32 %storemerge948.in1168.3 to i64
  %927 = getelementptr inbounds i32, ptr %26, i64 %926
  %928 = load i32, ptr %927, align 4, !tbaa !5
  %929 = lshr i32 %928, 31
  %spec.select1010.3 = add i32 %929, %spec.select1010.2
  %exitcond1442.not.3 = icmp eq i32 %storemerge948.in1168.3, %886
  br i1 %exitcond1442.not.3, label %.loopexit1731, label %scalar.ph1713, !llvm.loop !46

.loopexit1731:                                    ; preds = %scalar.ph1713.prol.loopexit, %scalar.ph1713, %middle.block1712
  %spec.select1010.lcssa = phi i32 [ %903, %middle.block1712 ], [ %spec.select1010.lcssa1733.unr, %scalar.ph1713.prol.loopexit ], [ %spec.select1010.3, %scalar.ph1713 ]
  store i32 %890, ptr %15, align 4, !tbaa !5
  %930 = and i32 %spec.select1010.lcssa, -2147483647
  %931 = icmp eq i32 %930, 1
  br i1 %931, label %932, label %.thread1569

932:                                              ; preds = %.loopexit1731
  %933 = add nuw nsw i32 %885, 1
  store i32 %933, ptr %20, align 4, !tbaa !5
  br label %.thread1569

.thread1569:                                      ; preds = %889, %.loopexit1731, %932, %887
  %934 = phi i32 [ %885, %.loopexit1731 ], [ %933, %932 ], [ %888, %887 ], [ %885, %889 ]
  %935 = add i32 %934, %884
  %936 = sub i32 %883, %935
  %.not9511175 = icmp slt i32 %936, 1
  br i1 %.not9511175, label %964, label %.lr.ph1178

.lr.ph1178:                                       ; preds = %.thread1569
  %.not9761169 = icmp slt i32 %934, 1
  br i1 %.not9761169, label %._crit_edge1179, label %.lr.ph1172.preheader

.lr.ph1172.preheader:                             ; preds = %.lr.ph1178
  %937 = sext i32 %884 to i64
  %938 = sext i32 %935 to i64
  %939 = add i32 %883, 1
  %940 = sub i32 %939, %935
  %wide.trip.count1451 = zext i32 %940 to i64
  %invariant.gep1631 = getelementptr %struct.doublecomplex, ptr %25, i64 %938
  %941 = zext nneg i32 %934 to i64
  %xtraiter1799 = and i64 %941, 1
  %942 = icmp eq i32 %934, 1
  %unroll_iter1803 = and i64 %941, 2147483646
  %lcmp.mod1801.not = icmp eq i64 %xtraiter1799, 0
  br label %.lr.ph1172

.lr.ph1172:                                       ; preds = %.lr.ph1172.preheader, %._crit_edge1173
  %indvars.iv1448 = phi i64 [ 1, %.lr.ph1172.preheader ], [ %indvars.iv.next1449, %._crit_edge1173 ]
  %gep1632 = getelementptr %struct.doublecomplex, ptr %invariant.gep1631, i64 %indvars.iv1448
  br i1 %942, label %._crit_edge1173.unr-lcssa, label %.lr.ph1172.new

.lr.ph1172.new:                                   ; preds = %.lr.ph1172
  %invariant.gep1919 = getelementptr %struct.doublecomplex, ptr %32, i64 %indvars.iv1448
  br label %943

943:                                              ; preds = %943, %.lr.ph1172.new
  %indvars.iv1443 = phi i64 [ 1, %.lr.ph1172.new ], [ %indvars.iv.next1444.1, %943 ]
  %niter1804 = phi i64 [ 0, %.lr.ph1172.new ], [ %niter1804.next.1, %943 ]
  %944 = mul nsw i64 %indvars.iv1443, %720
  %945 = add nsw i64 %indvars.iv1443, %937
  %946 = mul nsw i64 %945, %721
  %947 = getelementptr %struct.doublecomplex, ptr %gep1632, i64 %946
  %gep1920 = getelementptr %struct.doublecomplex, ptr %invariant.gep1919, i64 %944
  %948 = load <2 x double>, ptr %947, align 8, !tbaa !16
  store <2 x double> %948, ptr %gep1920, align 8, !tbaa !16
  %indvars.iv.next1444 = add nuw nsw i64 %indvars.iv1443, 1
  %949 = mul nsw i64 %indvars.iv.next1444, %720
  %950 = add nsw i64 %949, %indvars.iv1448
  %951 = add nsw i64 %indvars.iv.next1444, %937
  %952 = mul nsw i64 %951, %721
  %953 = getelementptr %struct.doublecomplex, ptr %gep1632, i64 %952
  %954 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %950
  %955 = load <2 x double>, ptr %953, align 8, !tbaa !16
  store <2 x double> %955, ptr %954, align 8, !tbaa !16
  %indvars.iv.next1444.1 = add nuw nsw i64 %indvars.iv1443, 2
  %niter1804.next.1 = add i64 %niter1804, 2
  %niter1804.ncmp.1 = icmp eq i64 %niter1804.next.1, %unroll_iter1803
  br i1 %niter1804.ncmp.1, label %._crit_edge1173.unr-lcssa, label %943, !llvm.loop !47

._crit_edge1173.unr-lcssa:                        ; preds = %943, %.lr.ph1172
  %.lcssa1734.ph = phi i64 [ poison, %.lr.ph1172 ], [ %950, %943 ]
  %indvars.iv1443.unr = phi i64 [ 1, %.lr.ph1172 ], [ %indvars.iv.next1444.1, %943 ]
  br i1 %lcmp.mod1801.not, label %._crit_edge1173, label %._crit_edge1173.epilog-lcssa

._crit_edge1173.epilog-lcssa:                     ; preds = %._crit_edge1173.unr-lcssa
  %956 = mul nsw i64 %indvars.iv1443.unr, %720
  %957 = add nsw i64 %956, %indvars.iv1448
  %958 = add nsw i64 %indvars.iv1443.unr, %937
  %959 = mul nsw i64 %958, %721
  %960 = getelementptr %struct.doublecomplex, ptr %gep1632, i64 %959
  %961 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %957
  %962 = load <2 x double>, ptr %960, align 8, !tbaa !16
  store <2 x double> %962, ptr %961, align 8, !tbaa !16
  br label %._crit_edge1173

._crit_edge1173:                                  ; preds = %._crit_edge1173.unr-lcssa, %._crit_edge1173.epilog-lcssa
  %.lcssa1734 = phi i64 [ %.lcssa1734.ph, %._crit_edge1173.unr-lcssa ], [ %957, %._crit_edge1173.epilog-lcssa ]
  %indvars.iv.next1449 = add nuw nsw i64 %indvars.iv1448, 1
  %exitcond1452.not = icmp eq i64 %indvars.iv.next1449, %wide.trip.count1451
  br i1 %exitcond1452.not, label %._crit_edge1179.split, label %.lr.ph1172, !llvm.loop !48

._crit_edge1179.split:                            ; preds = %._crit_edge1173
  %963 = trunc nsw i64 %.lcssa1734 to i32
  store i32 %963, ptr %11, align 4, !tbaa !5
  br label %._crit_edge1179

._crit_edge1179:                                  ; preds = %.lr.ph1178, %._crit_edge1179.split
  store i32 %934, ptr %10, align 4, !tbaa !5
  br label %964

964:                                              ; preds = %._crit_edge1179, %.thread1569
  %.not9531194 = icmp slt i32 %934, 1
  br i1 %.not9531194, label %.preheader1017, label %.lr.ph1197.preheader

.lr.ph1197.preheader:                             ; preds = %964
  %965 = sext i32 %884 to i64
  %966 = zext nneg i32 %934 to i64
  %967 = add nsw i32 %934, -1
  %968 = add nuw i32 %934, 1
  %wide.trip.count1466 = zext i32 %968 to i64
  %wide.trip.count1458 = zext nneg i32 %934 to i64
  %invariant.gep1633 = getelementptr %struct.doublecomplex, ptr %25, i64 %965
  br label %.lr.ph1197

..preheader1017_crit_edge:                        ; preds = %1002
  store i32 %967, ptr %10, align 4, !tbaa !5
  br label %.preheader1017

.preheader1017:                                   ; preds = %..preheader1017_crit_edge, %964
  %storemerge952.lcssa = phi i32 [ %968, %..preheader1017_crit_edge ], [ 1, %964 ]
  store i32 %storemerge952.lcssa, ptr %15, align 4, !tbaa !5
  %969 = icmp sgt i32 %936, 0
  br i1 %969, label %.lr.ph1219, label %.preheader1016

.lr.ph1219:                                       ; preds = %.preheader1017
  %970 = add i32 %934, 1
  %wide.trip.count1471 = zext i32 %970 to i64
  %wide.trip.count1476 = zext i32 %970 to i64
  br label %1005

.lr.ph1197:                                       ; preds = %.lr.ph1197.preheader, %1002
  %indvar1806 = phi i64 [ 0, %.lr.ph1197.preheader ], [ %indvar.next1807, %1002 ]
  %indvars.iv1453 = phi i64 [ 1, %.lr.ph1197.preheader ], [ %indvars.iv.next1454, %1002 ]
  %971 = add nsw i64 %indvars.iv1453, %722
  %972 = mul nsw i64 %indvars.iv1453, %720
  %973 = getelementptr %struct.doublecomplex, ptr %32, i64 %971
  %974 = getelementptr %struct.doublecomplex, ptr %973, i64 %972
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %974, align 8, !tbaa !16
  %.not974.not1182 = icmp ult i64 %indvars.iv1453, %966
  br i1 %.not974.not1182, label %.lr.ph1185, label %979

.lr.ph1185:                                       ; preds = %.lr.ph1197, %.lr.ph1185
  %indvars.iv1455 = phi i64 [ %indvars.iv.next1456, %.lr.ph1185 ], [ %indvars.iv1453, %.lr.ph1197 ]
  %indvars.iv.next1456 = add nuw nsw i64 %indvars.iv1455, 1
  %975 = mul nsw i64 %indvars.iv.next1456, %720
  %976 = add nsw i64 %975, %971
  %977 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %976
  %exitcond1459.not = icmp eq i64 %indvars.iv.next1456, %wide.trip.count1458
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %977, i8 0, i64 16, i1 false)
  br i1 %exitcond1459.not, label %._crit_edge1186, label %.lr.ph1185, !llvm.loop !49

._crit_edge1186:                                  ; preds = %.lr.ph1185
  %978 = trunc nsw i64 %976 to i32
  store i32 %978, ptr %11, align 4, !tbaa !5
  br label %979

979:                                              ; preds = %._crit_edge1186, %.lr.ph1197
  %.not975.not1188 = icmp ugt i64 %indvars.iv1453, 1
  br i1 %.not975.not1188, label %.lr.ph1191, label %1002

.lr.ph1191:                                       ; preds = %979
  %gep1634 = getelementptr %struct.doublecomplex, ptr %invariant.gep1633, i64 %indvars.iv1453
  %xtraiter1808 = and i64 %indvar1806, 1
  %980 = icmp eq i64 %indvar1806, 1
  br i1 %980, label %._crit_edge1192.unr-lcssa, label %.lr.ph1191.new

.lr.ph1191.new:                                   ; preds = %.lr.ph1191
  %unroll_iter1812 = and i64 %indvar1806, -2
  %invariant.gep1921 = getelementptr %struct.doublecomplex, ptr %32, i64 %971
  br label %981

981:                                              ; preds = %981, %.lr.ph1191.new
  %indvars.iv1460 = phi i64 [ 1, %.lr.ph1191.new ], [ %indvars.iv.next1461.1, %981 ]
  %niter1813 = phi i64 [ 0, %.lr.ph1191.new ], [ %niter1813.next.1, %981 ]
  %982 = mul nsw i64 %indvars.iv1460, %720
  %983 = add nsw i64 %indvars.iv1460, %965
  %984 = mul nsw i64 %983, %721
  %985 = getelementptr %struct.doublecomplex, ptr %gep1634, i64 %984
  %gep1922 = getelementptr %struct.doublecomplex, ptr %invariant.gep1921, i64 %982
  %986 = load <2 x double>, ptr %985, align 8, !tbaa !16
  store <2 x double> %986, ptr %gep1922, align 8, !tbaa !16
  %indvars.iv.next1461 = add nuw nsw i64 %indvars.iv1460, 1
  %987 = mul nsw i64 %indvars.iv.next1461, %720
  %988 = add nsw i64 %987, %971
  %989 = add nsw i64 %indvars.iv.next1461, %965
  %990 = mul nsw i64 %989, %721
  %991 = getelementptr %struct.doublecomplex, ptr %gep1634, i64 %990
  %992 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %988
  %993 = load <2 x double>, ptr %991, align 8, !tbaa !16
  store <2 x double> %993, ptr %992, align 8, !tbaa !16
  %indvars.iv.next1461.1 = add nuw nsw i64 %indvars.iv1460, 2
  %niter1813.next.1 = add i64 %niter1813, 2
  %niter1813.ncmp.1 = icmp eq i64 %niter1813.next.1, %unroll_iter1812
  br i1 %niter1813.ncmp.1, label %._crit_edge1192.unr-lcssa, label %981, !llvm.loop !50

._crit_edge1192.unr-lcssa:                        ; preds = %981, %.lr.ph1191
  %.lcssa1736.ph = phi i64 [ poison, %.lr.ph1191 ], [ %988, %981 ]
  %indvars.iv1460.unr = phi i64 [ 1, %.lr.ph1191 ], [ %indvars.iv.next1461.1, %981 ]
  %lcmp.mod1810.not = icmp eq i64 %xtraiter1808, 0
  br i1 %lcmp.mod1810.not, label %._crit_edge1192, label %._crit_edge1192.epilog-lcssa

._crit_edge1192.epilog-lcssa:                     ; preds = %._crit_edge1192.unr-lcssa
  %994 = mul nsw i64 %indvars.iv1460.unr, %720
  %995 = add nsw i64 %994, %971
  %996 = add nsw i64 %indvars.iv1460.unr, %965
  %997 = mul nsw i64 %996, %721
  %998 = getelementptr %struct.doublecomplex, ptr %gep1634, i64 %997
  %999 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %995
  %1000 = load <2 x double>, ptr %998, align 8, !tbaa !16
  store <2 x double> %1000, ptr %999, align 8, !tbaa !16
  br label %._crit_edge1192

._crit_edge1192:                                  ; preds = %._crit_edge1192.unr-lcssa, %._crit_edge1192.epilog-lcssa
  %.lcssa1736 = phi i64 [ %.lcssa1736.ph, %._crit_edge1192.unr-lcssa ], [ %995, %._crit_edge1192.epilog-lcssa ]
  %1001 = trunc nsw i64 %.lcssa1736 to i32
  store i32 %1001, ptr %11, align 4, !tbaa !5
  br label %1002

1002:                                             ; preds = %._crit_edge1192, %979
  %indvars.iv.next1454 = add nuw nsw i64 %indvars.iv1453, 1
  %exitcond1467.not = icmp eq i64 %indvars.iv.next1454, %wide.trip.count1466
  %indvar.next1807 = add i64 %indvar1806, 1
  br i1 %exitcond1467.not, label %..preheader1017_crit_edge, label %.lr.ph1197, !llvm.loop !51

.preheader1016.loopexit:                          ; preds = %1104
  store i32 %934, ptr %9, align 4, !tbaa !5
  br label %.preheader1016

.preheader1016:                                   ; preds = %.preheader1016.loopexit, %.preheader1017
  %1003 = icmp sgt i32 %934, 0
  br i1 %1003, label %.lr.ph1240, label %._crit_edge1241

.lr.ph1240:                                       ; preds = %.preheader1016
  %1004 = add nuw i32 %934, 1
  %wide.trip.count1481 = zext i32 %1004 to i64
  %wide.trip.count1486 = zext i32 %1004 to i64
  br label %1107

1005:                                             ; preds = %.lr.ph1219, %1104
  %storemerge9731218 = phi i32 [ %936, %.lr.ph1219 ], [ %1105, %1104 ]
  %1006 = add nsw i32 %storemerge9731218, %935
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds i32, ptr %26, i64 %1007
  %1009 = load i32, ptr %1008, align 4, !tbaa !5
  %1010 = icmp sgt i32 %1009, 0
  br i1 %1010, label %1011, label %1033

1011:                                             ; preds = %1005
  br i1 %.not9531194, label %1104, label %.lr.ph1213

.lr.ph1213:                                       ; preds = %1011
  %1012 = add nsw i32 %1006, %710
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1013
  %1015 = getelementptr inbounds i8, ptr %1014, i64 8
  %1016 = zext nneg i32 %storemerge9731218 to i64
  br label %1017

1017:                                             ; preds = %.lr.ph1213, %1017
  %indvars.iv1473 = phi i64 [ 1, %.lr.ph1213 ], [ %indvars.iv.next1474, %1017 ]
  %1018 = mul nsw i64 %indvars.iv1473, %720
  %1019 = add nsw i64 %1018, %1016
  %1020 = load double, ptr %1014, align 8, !tbaa !9
  %1021 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1019
  %1022 = load double, ptr %1015, align 8, !tbaa !12
  %1023 = fneg double %1022
  %1024 = load <2 x double>, ptr %1021, align 8, !tbaa !16
  %1025 = insertelement <2 x double> poison, double %1022, i64 0
  %1026 = insertelement <2 x double> %1025, double %1023, i64 1
  %1027 = fmul <2 x double> %1024, %1026
  %1028 = shufflevector <2 x double> %1027, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1029 = insertelement <2 x double> poison, double %1020, i64 0
  %1030 = shufflevector <2 x double> %1029, <2 x double> poison, <2 x i32> zeroinitializer
  %1031 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1030, <2 x double> %1024, <2 x double> %1028)
  store <2 x double> %1031, ptr %1021, align 8, !tbaa !16
  %indvars.iv.next1474 = add nuw nsw i64 %indvars.iv1473, 1
  %exitcond1477.not = icmp eq i64 %indvars.iv.next1474, %wide.trip.count1476
  br i1 %exitcond1477.not, label %._crit_edge1214, label %1017, !llvm.loop !52

._crit_edge1214:                                  ; preds = %1017
  %1032 = trunc nsw i64 %1019 to i32
  store i32 %1032, ptr %10, align 4, !tbaa !5
  store i32 %1012, ptr %11, align 4, !tbaa !5
  br label %.sink.split1650

1033:                                             ; preds = %1005
  br i1 %.not9531194, label %1104, label %.lr.ph1203

.lr.ph1203:                                       ; preds = %1033
  %1034 = add nsw i32 %storemerge9731218, -1
  %1035 = add nsw i32 %1006, %710
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1036
  %1038 = getelementptr inbounds i8, ptr %1037, i64 8
  %1039 = add nsw i32 %1006, %712
  %1040 = sext i32 %1039 to i64
  %1041 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1040
  %1042 = getelementptr inbounds i8, ptr %1041, i64 8
  %1043 = add nsw i32 %1006, -1
  %1044 = add nsw i32 %1043, %712
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1045
  %1047 = getelementptr inbounds i8, ptr %1046, i64 8
  %1048 = add nsw i32 %1043, %710
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1049
  %1051 = getelementptr inbounds i8, ptr %1050, i64 8
  %1052 = zext nneg i32 %storemerge9731218 to i64
  %1053 = zext nneg i32 %1034 to i64
  %invariant.gep1923 = getelementptr %struct.doublecomplex, ptr %32, i64 %1052
  br label %1054

1054:                                             ; preds = %.lr.ph1203, %1054
  %indvars.iv1468 = phi i64 [ 1, %.lr.ph1203 ], [ %indvars.iv.next1469, %1054 ]
  %1055 = mul nsw i64 %indvars.iv1468, %720
  %gep1924 = getelementptr %struct.doublecomplex, ptr %invariant.gep1923, i64 %1055
  %1056 = add nsw i64 %1055, %1053
  %1057 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1056
  %1058 = load double, ptr %1037, align 8, !tbaa !9
  %1059 = load double, ptr %1038, align 8, !tbaa !12
  %1060 = fneg double %1059
  %1061 = load double, ptr %1041, align 8, !tbaa !9
  %1062 = load double, ptr %1042, align 8, !tbaa !12
  %1063 = fneg double %1062
  %1064 = load <2 x double>, ptr %gep1924, align 8, !tbaa !16
  %1065 = load <2 x double>, ptr %1057, align 8, !tbaa !16
  %1066 = insertelement <2 x double> poison, double %1059, i64 0
  %1067 = insertelement <2 x double> %1066, double %1060, i64 1
  %1068 = fmul <2 x double> %1064, %1067
  %1069 = shufflevector <2 x double> %1068, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1070 = insertelement <2 x double> poison, double %1058, i64 0
  %1071 = shufflevector <2 x double> %1070, <2 x double> poison, <2 x i32> zeroinitializer
  %1072 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1071, <2 x double> %1064, <2 x double> %1069)
  %1073 = insertelement <2 x double> poison, double %1062, i64 0
  %1074 = insertelement <2 x double> %1073, double %1063, i64 1
  %1075 = fmul <2 x double> %1065, %1074
  %1076 = shufflevector <2 x double> %1075, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1077 = insertelement <2 x double> poison, double %1061, i64 0
  %1078 = shufflevector <2 x double> %1077, <2 x double> poison, <2 x i32> zeroinitializer
  %1079 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1078, <2 x double> %1065, <2 x double> %1076)
  %1080 = fadd <2 x double> %1072, %1079
  store <2 x double> %1080, ptr %gep1924, align 8, !tbaa !16
  %1081 = load double, ptr %1046, align 8, !tbaa !9
  %1082 = load double, ptr %1047, align 8, !tbaa !12
  %1083 = fneg double %1082
  %1084 = load double, ptr %1050, align 8, !tbaa !9
  %1085 = load double, ptr %1051, align 8, !tbaa !12
  %1086 = fneg double %1085
  %1087 = shufflevector <2 x double> %1064, <2 x double> %1065, <2 x i32> <i32 3, i32 0>
  %1088 = insertelement <2 x double> poison, double %1086, i64 0
  %1089 = insertelement <2 x double> %1088, double %1082, i64 1
  %1090 = fmul <2 x double> %1087, %1089
  %1091 = insertelement <2 x double> poison, double %1084, i64 0
  %1092 = insertelement <2 x double> %1091, double %1081, i64 1
  %1093 = shufflevector <2 x double> %1065, <2 x double> %1064, <2 x i32> <i32 0, i32 3>
  %1094 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1092, <2 x double> %1093, <2 x double> %1090)
  %1095 = insertelement <2 x double> poison, double %1085, i64 0
  %1096 = insertelement <2 x double> %1095, double %1083, i64 1
  %1097 = fmul <2 x double> %1093, %1096
  %1098 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1092, <2 x double> %1087, <2 x double> %1097)
  %1099 = shufflevector <2 x double> %1098, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1100 = fadd <2 x double> %1094, %1099
  store <2 x double> %1100, ptr %1057, align 8, !tbaa !16
  %indvars.iv.next1469 = add nuw nsw i64 %indvars.iv1468, 1
  %exitcond1472.not = icmp eq i64 %indvars.iv.next1469, %wide.trip.count1471
  br i1 %exitcond1472.not, label %._crit_edge1204, label %1054, !llvm.loop !53

._crit_edge1204:                                  ; preds = %1054
  %1101 = trunc nsw i64 %1056 to i32
  store i32 %1101, ptr %10, align 4, !tbaa !5
  store i32 %1044, ptr %11, align 4, !tbaa !5
  %1102 = shufflevector <2 x double> %1099, <2 x double> %1094, <2 x i32> <i32 0, i32 3>
  store <2 x double> %1102, ptr %13, align 16, !tbaa !16
  br label %.sink.split1650

.sink.split1650:                                  ; preds = %._crit_edge1214, %._crit_edge1204
  %.sink1646.ph = phi i32 [ -2, %._crit_edge1204 ], [ -1, %._crit_edge1214 ]
  %1103 = phi <2 x double> [ %1100, %._crit_edge1204 ], [ %1031, %._crit_edge1214 ]
  store <2 x double> %1103, ptr %12, align 16, !tbaa !16
  br label %1104

1104:                                             ; preds = %.sink.split1650, %1033, %1011
  %.sink1646 = phi i32 [ -1, %1011 ], [ -2, %1033 ], [ %.sink1646.ph, %.sink.split1650 ]
  %1105 = add nsw i32 %storemerge9731218, %.sink1646
  %1106 = icmp sgt i32 %1105, 0
  br i1 %1106, label %1005, label %.preheader1016.loopexit, !llvm.loop !54

1107:                                             ; preds = %.lr.ph1240, %1200
  %storemerge9691239 = phi i32 [ %934, %.lr.ph1240 ], [ %1202, %1200 ]
  %1108 = add nsw i32 %storemerge9691239, %884
  %1109 = sext i32 %1108 to i64
  %1110 = getelementptr inbounds i32, ptr %26, i64 %1109
  %1111 = load i32, ptr %1110, align 4, !tbaa !5
  %1112 = icmp sgt i32 %1111, 0
  %1113 = add nsw i32 %storemerge9691239, %697
  %1114 = add nsw i32 %1108, %710
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1115
  %1117 = getelementptr inbounds i8, ptr %1116, i64 8
  br i1 %1112, label %.lr.ph1234, label %.lr.ph1224

.lr.ph1234:                                       ; preds = %1107
  %1118 = sext i32 %1113 to i64
  br label %1119

1119:                                             ; preds = %.lr.ph1234, %1119
  %indvars.iv1483 = phi i64 [ 1, %.lr.ph1234 ], [ %indvars.iv.next1484, %1119 ]
  %1120 = mul nsw i64 %indvars.iv1483, %720
  %1121 = add nsw i64 %1120, %1118
  %1122 = load double, ptr %1116, align 8, !tbaa !9
  %1123 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1121
  %1124 = load double, ptr %1117, align 8, !tbaa !12
  %1125 = fneg double %1124
  %1126 = load <2 x double>, ptr %1123, align 8, !tbaa !16
  %1127 = insertelement <2 x double> poison, double %1124, i64 0
  %1128 = insertelement <2 x double> %1127, double %1125, i64 1
  %1129 = fmul <2 x double> %1126, %1128
  %1130 = shufflevector <2 x double> %1129, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1131 = insertelement <2 x double> poison, double %1122, i64 0
  %1132 = shufflevector <2 x double> %1131, <2 x double> poison, <2 x i32> zeroinitializer
  %1133 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1132, <2 x double> %1126, <2 x double> %1130)
  store <2 x double> %1133, ptr %1123, align 8, !tbaa !16
  %indvars.iv.next1484 = add nuw nsw i64 %indvars.iv1483, 1
  %exitcond1487.not = icmp eq i64 %indvars.iv.next1484, %wide.trip.count1486
  br i1 %exitcond1487.not, label %._crit_edge1235, label %1119, !llvm.loop !55

._crit_edge1235:                                  ; preds = %1119
  %1134 = trunc nsw i64 %1121 to i32
  store i32 %1134, ptr %10, align 4, !tbaa !5
  store i32 %1114, ptr %11, align 4, !tbaa !5
  br label %1200

.lr.ph1224:                                       ; preds = %1107
  %1135 = add nsw i32 %1108, %712
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1136
  %1138 = getelementptr inbounds i8, ptr %1137, i64 8
  %1139 = add i32 %713, %1108
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1140
  %1142 = getelementptr inbounds i8, ptr %1141, i64 8
  %1143 = add i32 %714, %storemerge9691239
  %1144 = add i32 %1143, %884
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1145
  %1147 = getelementptr inbounds i8, ptr %1146, i64 8
  %1148 = sext i32 %1113 to i64
  %invariant.gep1925 = getelementptr %struct.doublecomplex, ptr %32, i64 %1148
  br label %1149

1149:                                             ; preds = %.lr.ph1224, %1149
  %indvars.iv1478 = phi i64 [ 1, %.lr.ph1224 ], [ %indvars.iv.next1479, %1149 ]
  %1150 = mul nsw i64 %indvars.iv1478, %720
  %gep1926 = getelementptr %struct.doublecomplex, ptr %invariant.gep1925, i64 %1150
  %1151 = trunc nsw i64 %1150 to i32
  %1152 = add i32 %1113, %1151
  %1153 = add i32 %1152, -1
  %1154 = sext i32 %1153 to i64
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %32, i64 %1154
  %1156 = load double, ptr %1116, align 8, !tbaa !9
  %1157 = load double, ptr %1117, align 8, !tbaa !12
  %1158 = fneg double %1157
  %1159 = load double, ptr %1137, align 8, !tbaa !9
  %1160 = load double, ptr %1138, align 8, !tbaa !12
  %1161 = fneg double %1160
  %1162 = load <2 x double>, ptr %gep1926, align 8, !tbaa !16
  %1163 = load <2 x double>, ptr %1155, align 8, !tbaa !16
  %1164 = insertelement <2 x double> poison, double %1157, i64 0
  %1165 = insertelement <2 x double> %1164, double %1158, i64 1
  %1166 = fmul <2 x double> %1162, %1165
  %1167 = shufflevector <2 x double> %1166, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1168 = insertelement <2 x double> poison, double %1156, i64 0
  %1169 = shufflevector <2 x double> %1168, <2 x double> poison, <2 x i32> zeroinitializer
  %1170 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1169, <2 x double> %1162, <2 x double> %1167)
  %1171 = insertelement <2 x double> poison, double %1160, i64 0
  %1172 = insertelement <2 x double> %1171, double %1161, i64 1
  %1173 = fmul <2 x double> %1163, %1172
  %1174 = shufflevector <2 x double> %1173, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1175 = insertelement <2 x double> poison, double %1159, i64 0
  %1176 = shufflevector <2 x double> %1175, <2 x double> poison, <2 x i32> zeroinitializer
  %1177 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1176, <2 x double> %1163, <2 x double> %1174)
  %1178 = fadd <2 x double> %1170, %1177
  store <2 x double> %1178, ptr %gep1926, align 8, !tbaa !16
  %1179 = load double, ptr %1141, align 8, !tbaa !9
  %1180 = load double, ptr %1142, align 8, !tbaa !12
  %1181 = fneg double %1180
  %1182 = load double, ptr %1146, align 8, !tbaa !9
  %1183 = load double, ptr %1147, align 8, !tbaa !12
  %1184 = fneg double %1183
  %1185 = shufflevector <2 x double> %1162, <2 x double> %1163, <2 x i32> <i32 3, i32 0>
  %1186 = insertelement <2 x double> poison, double %1184, i64 0
  %1187 = insertelement <2 x double> %1186, double %1180, i64 1
  %1188 = fmul <2 x double> %1185, %1187
  %1189 = insertelement <2 x double> poison, double %1182, i64 0
  %1190 = insertelement <2 x double> %1189, double %1179, i64 1
  %1191 = shufflevector <2 x double> %1163, <2 x double> %1162, <2 x i32> <i32 0, i32 3>
  %1192 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1190, <2 x double> %1191, <2 x double> %1188)
  %1193 = insertelement <2 x double> poison, double %1183, i64 0
  %1194 = insertelement <2 x double> %1193, double %1181, i64 1
  %1195 = fmul <2 x double> %1191, %1194
  %1196 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1190, <2 x double> %1185, <2 x double> %1195)
  %1197 = shufflevector <2 x double> %1196, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %1198 = fadd <2 x double> %1192, %1197
  store <2 x double> %1198, ptr %1155, align 8, !tbaa !16
  %indvars.iv.next1479 = add nuw nsw i64 %indvars.iv1478, 1
  %exitcond1482.not = icmp eq i64 %indvars.iv.next1479, %wide.trip.count1481
  br i1 %exitcond1482.not, label %._crit_edge1225, label %1149, !llvm.loop !56

._crit_edge1225:                                  ; preds = %1149
  store i32 %1153, ptr %10, align 4, !tbaa !5
  store i32 %1139, ptr %11, align 4, !tbaa !5
  %1199 = shufflevector <2 x double> %1197, <2 x double> %1192, <2 x i32> <i32 0, i32 3>
  store <2 x double> %1199, ptr %13, align 16, !tbaa !16
  br label %1200

1200:                                             ; preds = %._crit_edge1225, %._crit_edge1235
  %.sink1647 = phi i32 [ -2, %._crit_edge1225 ], [ -1, %._crit_edge1235 ]
  %1201 = phi <2 x double> [ %1198, %._crit_edge1225 ], [ %1133, %._crit_edge1235 ]
  %1202 = add nsw i32 %storemerge9691239, %.sink1647
  %1203 = icmp sgt i32 %1202, 0
  br i1 %1203, label %1107, label %._crit_edge1241.loopexit, !llvm.loop !57

._crit_edge1241.loopexit:                         ; preds = %1200
  store i32 %934, ptr %9, align 4, !tbaa !5
  store <2 x double> %1201, ptr %12, align 16, !tbaa !16
  br label %._crit_edge1241

._crit_edge1241:                                  ; preds = %._crit_edge1241.loopexit, %.preheader1016
  %storemerge969.lcssa = phi i32 [ %934, %.preheader1016 ], [ %1202, %._crit_edge1241.loopexit ]
  store i32 %storemerge969.lcssa, ptr %15, align 4, !tbaa !5
  %1204 = add i32 %883, 1
  %1205 = add i32 %1204, %885
  store i32 %1205, ptr %9, align 4, !tbaa !5
  %1206 = add nsw i32 %884, 1
  %1207 = mul i32 %1206, %715
  %1208 = sext i32 %1207 to i64
  %1209 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1208
  call void @ztrmm_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, ptr noundef nonnull %20, ptr noundef nonnull %20, ptr noundef nonnull @c_b1, ptr noundef %1209, ptr noundef nonnull %3, ptr noundef %719, ptr noundef nonnull %9) #8
  %1210 = load i32, ptr %20, align 4, !tbaa !5
  %.not9551245 = icmp slt i32 %1210, 1
  %.pre1553 = load i32, ptr %21, align 4, !tbaa !5
  br i1 %.not9551245, label %.thread1571, label %.lr.ph1248

.lr.ph1248:                                       ; preds = %._crit_edge1241
  %1211 = sext i32 %.pre1553 to i64
  %1212 = add nuw i32 %1210, 1
  %wide.trip.count1502 = zext i32 %1212 to i64
  br label %1213

1213:                                             ; preds = %.lr.ph1248, %1240
  %indvar1815 = phi i64 [ 0, %.lr.ph1248 ], [ %indvar.next1816, %1240 ]
  %indvars.iv1497 = phi i64 [ 1, %.lr.ph1248 ], [ %indvars.iv.next1498, %1240 ]
  %1214 = add nsw i64 %indvars.iv1497, %1211
  %gep1636 = getelementptr %struct.doublecomplex, ptr %invariant.gep1635, i64 %indvars.iv1497
  %1215 = icmp eq i64 %indvar1815, 0
  br i1 %1215, label %.unr-lcssa, label %.new

.new:                                             ; preds = %1213
  %1216 = add i64 %indvar1815, 1
  %unroll_iter1821 = and i64 %1216, -2
  %1217 = getelementptr %struct.doublecomplex, ptr %25, i64 %1214
  br label %1218

1218:                                             ; preds = %1218, %.new
  %indvars.iv1488 = phi i64 [ 1, %.new ], [ %indvars.iv.next1489.1, %1218 ]
  %niter1822 = phi i64 [ 0, %.new ], [ %niter1822.next.1, %1218 ]
  %1219 = add nsw i64 %indvars.iv1488, %1211
  %1220 = mul nsw i64 %1219, %721
  %1221 = mul nsw i64 %indvars.iv1488, %720
  %1222 = getelementptr %struct.doublecomplex, ptr %gep1636, i64 %1221
  %1223 = getelementptr %struct.doublecomplex, ptr %1217, i64 %1220
  %1224 = load <2 x double>, ptr %1222, align 8, !tbaa !16
  store <2 x double> %1224, ptr %1223, align 8, !tbaa !16
  %indvars.iv.next1489 = add nuw nsw i64 %indvars.iv1488, 1
  %1225 = add nsw i64 %indvars.iv.next1489, %1211
  %1226 = mul nsw i64 %1225, %721
  %1227 = add nsw i64 %1214, %1226
  %1228 = mul nsw i64 %indvars.iv.next1489, %720
  %1229 = getelementptr %struct.doublecomplex, ptr %gep1636, i64 %1228
  %1230 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1227
  %1231 = load <2 x double>, ptr %1229, align 8, !tbaa !16
  store <2 x double> %1231, ptr %1230, align 8, !tbaa !16
  %indvars.iv.next1489.1 = add nuw nsw i64 %indvars.iv1488, 2
  %niter1822.next.1 = add i64 %niter1822, 2
  %niter1822.ncmp.1 = icmp eq i64 %niter1822.next.1, %unroll_iter1821
  br i1 %niter1822.ncmp.1, label %.unr-lcssa, label %1218, !llvm.loop !58

.unr-lcssa:                                       ; preds = %1218, %1213
  %.lcssa1750.ph = phi i64 [ poison, %1213 ], [ %1227, %1218 ]
  %indvars.iv1488.unr = phi i64 [ 1, %1213 ], [ %indvars.iv.next1489.1, %1218 ]
  %1232 = and i64 %indvar1815, 1
  %lcmp.mod1819.not.not = icmp eq i64 %1232, 0
  br i1 %lcmp.mod1819.not.not, label %.epilog-lcssa, label %1240

.epilog-lcssa:                                    ; preds = %.unr-lcssa
  %1233 = add nsw i64 %indvars.iv1488.unr, %1211
  %1234 = mul nsw i64 %1233, %721
  %1235 = add nsw i64 %1214, %1234
  %1236 = mul nsw i64 %indvars.iv1488.unr, %720
  %1237 = getelementptr %struct.doublecomplex, ptr %gep1636, i64 %1236
  %1238 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1235
  %1239 = load <2 x double>, ptr %1237, align 8, !tbaa !16
  store <2 x double> %1239, ptr %1238, align 8, !tbaa !16
  br label %1240

1240:                                             ; preds = %.unr-lcssa, %.epilog-lcssa
  %.lcssa1750 = phi i64 [ %.lcssa1750.ph, %.unr-lcssa ], [ %1235, %.epilog-lcssa ]
  %indvars.iv.next1498 = add nuw nsw i64 %indvars.iv1497, 1
  %exitcond1503.not = icmp eq i64 %indvars.iv.next1498, %wide.trip.count1502
  %indvar.next1816 = add i64 %indvar1815, 1
  br i1 %exitcond1503.not, label %1241, label %1213, !llvm.loop !59

1241:                                             ; preds = %1240
  %1242 = trunc nsw i64 %.lcssa1750 to i32
  %1243 = trunc nuw nsw i64 %indvars.iv1497 to i32
  store i32 %1243, ptr %10, align 4, !tbaa !5
  store i32 %1242, ptr %11, align 4, !tbaa !5
  store i32 %1212, ptr %15, align 4, !tbaa !5
  %1244 = add nsw i32 %.pre1553, %1210
  %1245 = load i32, ptr %1, align 4, !tbaa !5
  %1246 = icmp slt i32 %1244, %1245
  br i1 %1246, label %1250, label %1342

.thread1571:                                      ; preds = %._crit_edge1241
  store i32 1, ptr %15, align 4, !tbaa !5
  %1247 = add nsw i32 %.pre1553, %1210
  %1248 = load i32, ptr %1, align 4, !tbaa !5
  %1249 = icmp slt i32 %1247, %1248
  br i1 %1249, label %1250, label %.thread1573

.thread1573:                                      ; preds = %.thread1571
  store i32 %1210, ptr %9, align 4, !tbaa !5
  br label %.loopexit1014

1250:                                             ; preds = %.thread1571, %1241
  %1251 = phi i32 [ %1248, %.thread1571 ], [ %1245, %1241 ]
  %1252 = phi i32 [ %1247, %.thread1571 ], [ %1244, %1241 ]
  %1253 = sub i32 %1251, %1252
  store i32 %1253, ptr %9, align 4, !tbaa !5
  %1254 = load i32, ptr %6, align 4, !tbaa !5
  %1255 = add i32 %1251, 1
  %1256 = add i32 %1255, %1254
  store i32 %1256, ptr %10, align 4, !tbaa !5
  store i32 %1256, ptr %11, align 4, !tbaa !5
  %1257 = add nsw i32 %1252, 1
  %1258 = add nsw i32 %.pre1553, 1
  %1259 = mul nsw i32 %1258, %23
  %1260 = add nsw i32 %1257, %1259
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1261
  call void @zgemm_(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %20, ptr noundef nonnull %20, ptr noundef nonnull %9, ptr noundef nonnull @c_b1, ptr noundef %1262, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %10, ptr noundef nonnull @c_b2, ptr noundef %719, ptr noundef nonnull %11) #8
  %1263 = load i32, ptr %20, align 4, !tbaa !5
  %.not9601262 = icmp slt i32 %1263, 1
  %.pre1554 = load i32, ptr %21, align 4, !tbaa !5
  br i1 %.not9601262, label %1301, label %.lr.ph1265

.lr.ph1265:                                       ; preds = %1250
  %1264 = sext i32 %.pre1554 to i64
  %1265 = add nuw i32 %1263, 1
  %wide.trip.count1534 = zext i32 %1265 to i64
  br label %1266

1266:                                             ; preds = %.lr.ph1265, %1299
  %indvar1837 = phi i64 [ 0, %.lr.ph1265 ], [ %indvar.next1838, %1299 ]
  %indvars.iv1529 = phi i64 [ 1, %.lr.ph1265 ], [ %indvars.iv.next1530, %1299 ]
  %1267 = add nsw i64 %indvars.iv1529, %1264
  %gep1640 = getelementptr %struct.doublecomplex, ptr %invariant.gep1639, i64 %indvars.iv1529
  %1268 = icmp eq i64 %indvar1837, 0
  br i1 %1268, label %.unr-lcssa1835, label %.new1834

.new1834:                                         ; preds = %1266
  %1269 = add i64 %indvar1837, 1
  %unroll_iter1845 = and i64 %1269, -2
  %1270 = getelementptr %struct.doublecomplex, ptr %25, i64 %1267
  br label %1271

1271:                                             ; preds = %1271, %.new1834
  %indvars.iv1520 = phi i64 [ 1, %.new1834 ], [ %indvars.iv.next1521.1, %1271 ]
  %niter1846 = phi i64 [ 0, %.new1834 ], [ %niter1846.next.1, %1271 ]
  %1272 = add nsw i64 %indvars.iv1520, %1264
  %1273 = mul nsw i64 %1272, %721
  %1274 = mul nsw i64 %indvars.iv1520, %720
  %1275 = getelementptr %struct.doublecomplex, ptr %1270, i64 %1273
  %1276 = getelementptr %struct.doublecomplex, ptr %gep1640, i64 %1274
  %1277 = load <2 x double>, ptr %1275, align 8, !tbaa !16
  %1278 = load <2 x double>, ptr %1276, align 8, !tbaa !16
  %1279 = fadd <2 x double> %1277, %1278
  store <2 x double> %1279, ptr %1275, align 8, !tbaa !16
  %indvars.iv.next1521 = add nuw nsw i64 %indvars.iv1520, 1
  %1280 = add nsw i64 %indvars.iv.next1521, %1264
  %1281 = mul nsw i64 %1280, %721
  %1282 = add nsw i64 %1267, %1281
  %1283 = mul nsw i64 %indvars.iv.next1521, %720
  %1284 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1282
  %1285 = getelementptr %struct.doublecomplex, ptr %gep1640, i64 %1283
  %1286 = load <2 x double>, ptr %1284, align 8, !tbaa !16
  %1287 = load <2 x double>, ptr %1285, align 8, !tbaa !16
  %1288 = fadd <2 x double> %1286, %1287
  store <2 x double> %1288, ptr %1284, align 8, !tbaa !16
  %indvars.iv.next1521.1 = add nuw nsw i64 %indvars.iv1520, 2
  %niter1846.next.1 = add i64 %niter1846, 2
  %niter1846.ncmp.1 = icmp eq i64 %niter1846.next.1, %unroll_iter1845
  br i1 %niter1846.ncmp.1, label %.unr-lcssa1835, label %1271, !llvm.loop !60

.unr-lcssa1835:                                   ; preds = %1271, %1266
  %.lcssa1753.ph = phi i64 [ poison, %1266 ], [ %1282, %1271 ]
  %.lcssa1752.ph = phi <2 x double> [ poison, %1266 ], [ %1288, %1271 ]
  %indvars.iv1520.unr = phi i64 [ 1, %1266 ], [ %indvars.iv.next1521.1, %1271 ]
  %1289 = and i64 %indvar1837, 1
  %lcmp.mod1841.not.not = icmp eq i64 %1289, 0
  br i1 %lcmp.mod1841.not.not, label %.epilog-lcssa1842, label %1299

.epilog-lcssa1842:                                ; preds = %.unr-lcssa1835
  %1290 = add nsw i64 %indvars.iv1520.unr, %1264
  %1291 = mul nsw i64 %1290, %721
  %1292 = add nsw i64 %1267, %1291
  %1293 = mul nsw i64 %indvars.iv1520.unr, %720
  %1294 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1292
  %1295 = getelementptr %struct.doublecomplex, ptr %gep1640, i64 %1293
  %1296 = load <2 x double>, ptr %1294, align 8, !tbaa !16
  %1297 = load <2 x double>, ptr %1295, align 8, !tbaa !16
  %1298 = fadd <2 x double> %1296, %1297
  store <2 x double> %1298, ptr %1294, align 8, !tbaa !16
  br label %1299

1299:                                             ; preds = %.unr-lcssa1835, %.epilog-lcssa1842
  %.lcssa1753 = phi i64 [ %.lcssa1753.ph, %.unr-lcssa1835 ], [ %1292, %.epilog-lcssa1842 ]
  %.lcssa1752 = phi <2 x double> [ %.lcssa1752.ph, %.unr-lcssa1835 ], [ %1298, %.epilog-lcssa1842 ]
  %indvars.iv.next1530 = add nuw nsw i64 %indvars.iv1529, 1
  %exitcond1535.not = icmp eq i64 %indvars.iv.next1530, %wide.trip.count1534
  %indvar.next1838 = add i64 %indvar1837, 1
  br i1 %exitcond1535.not, label %._crit_edge1266, label %1266, !llvm.loop !61

._crit_edge1266:                                  ; preds = %1299
  %1300 = trunc nsw i64 %.lcssa1753 to i32
  store i32 %1300, ptr %11, align 4, !tbaa !5
  store <2 x double> %.lcssa1752, ptr %12, align 16, !tbaa !16
  br label %1301

1301:                                             ; preds = %._crit_edge1266, %1250
  %storemerge959.lcssa = phi i32 [ %1265, %._crit_edge1266 ], [ 1, %1250 ]
  store i32 %storemerge959.lcssa, ptr %15, align 4, !tbaa !5
  %1302 = load i32, ptr %1, align 4, !tbaa !5
  %1303 = add i32 %.pre1554, %1263
  %1304 = sub i32 %1302, %1303
  store i32 %1304, ptr %9, align 4, !tbaa !5
  %1305 = load i32, ptr %6, align 4, !tbaa !5
  %1306 = add i32 %1302, 1
  %1307 = add i32 %1306, %1305
  store i32 %1307, ptr %10, align 4, !tbaa !5
  %1308 = add nsw i32 %1303, 1
  %1309 = mul i32 %1308, %715
  %1310 = sext i32 %1309 to i64
  %1311 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1310
  call void @ztrmm_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, ptr noundef nonnull %9, ptr noundef nonnull %20, ptr noundef nonnull @c_b1, ptr noundef %1311, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %10) #8
  %1312 = load i32, ptr %1, align 4, !tbaa !5
  %1313 = load i32, ptr %21, align 4, !tbaa !5
  %1314 = load i32, ptr %20, align 4, !tbaa !5
  %1315 = add i32 %1314, %1313
  %1316 = sub i32 %1312, %1315
  store i32 %1316, ptr %9, align 4, !tbaa !5
  %.not9621274 = icmp slt i32 %1316, 1
  br i1 %.not9621274, label %.loopexit1014, label %.lr.ph1277

.lr.ph1277:                                       ; preds = %1301
  %.not9631268 = icmp slt i32 %1314, 1
  br i1 %.not9631268, label %.lr.ph1277.split.us.preheader, label %.lr.ph1271.preheader

.lr.ph1271.preheader:                             ; preds = %.lr.ph1277
  %1317 = sext i32 %1313 to i64
  %1318 = sext i32 %1315 to i64
  %1319 = mul i32 %23, %1315
  %1320 = add i32 %1312, 1
  %1321 = sub i32 %1320, %1315
  %wide.trip.count1544 = zext i32 %1321 to i64
  %1322 = zext nneg i32 %1314 to i64
  %xtraiter1848 = and i64 %1322, 1
  %1323 = icmp eq i32 %1314, 1
  %unroll_iter1851 = and i64 %1322, 2147483646
  %invariant.gep1928 = getelementptr %struct.doublecomplex, ptr %25, i64 %1318
  %invariant.gep1930 = getelementptr %struct.doublecomplex, ptr %25, i64 %1318
  %lcmp.mod1850.not = icmp eq i64 %xtraiter1848, 0
  %invariant.gep1932 = getelementptr %struct.doublecomplex, ptr %25, i64 %1318
  br label %.lr.ph1271

.lr.ph1277.split.us.preheader:                    ; preds = %.lr.ph1277
  %1324 = add i32 %1312, 1
  %1325 = sub i32 %1324, %1315
  br label %..loopexit1014_crit_edge

.lr.ph1271:                                       ; preds = %.lr.ph1271.preheader, %._crit_edge1272
  %indvars.iv1541 = phi i64 [ 1, %.lr.ph1271.preheader ], [ %indvars.iv.next1542, %._crit_edge1272 ]
  %invariant.gep1641 = getelementptr %struct.doublecomplex, ptr %32, i64 %indvars.iv1541
  br i1 %1323, label %._crit_edge1272.unr-lcssa, label %.lr.ph1271.new

.lr.ph1271.new:                                   ; preds = %.lr.ph1271
  %gep1929 = getelementptr %struct.doublecomplex, ptr %invariant.gep1928, i64 %indvars.iv1541
  %gep1931 = getelementptr %struct.doublecomplex, ptr %invariant.gep1930, i64 %indvars.iv1541
  br label %1326

1326:                                             ; preds = %1326, %.lr.ph1271.new
  %indvars.iv1536 = phi i64 [ 1, %.lr.ph1271.new ], [ %indvars.iv.next1537.1, %1326 ]
  %niter1852 = phi i64 [ 0, %.lr.ph1271.new ], [ %niter1852.next.1, %1326 ]
  %1327 = add nsw i64 %indvars.iv1536, %1317
  %1328 = mul nsw i64 %1327, %721
  %1329 = mul nsw i64 %indvars.iv1536, %720
  %gep1642 = getelementptr %struct.doublecomplex, ptr %invariant.gep1641, i64 %1329
  %1330 = getelementptr %struct.doublecomplex, ptr %gep1929, i64 %1328
  %1331 = load <2 x double>, ptr %gep1642, align 8, !tbaa !16
  store <2 x double> %1331, ptr %1330, align 8, !tbaa !16
  %indvars.iv.next1537 = add nuw nsw i64 %indvars.iv1536, 1
  %1332 = add nsw i64 %indvars.iv.next1537, %1317
  %1333 = mul nsw i64 %1332, %721
  %1334 = mul nsw i64 %indvars.iv.next1537, %720
  %gep1642.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep1641, i64 %1334
  %1335 = getelementptr %struct.doublecomplex, ptr %gep1931, i64 %1333
  %1336 = load <2 x double>, ptr %gep1642.1, align 8, !tbaa !16
  store <2 x double> %1336, ptr %1335, align 8, !tbaa !16
  %indvars.iv.next1537.1 = add nuw nsw i64 %indvars.iv1536, 2
  %niter1852.next.1 = add i64 %niter1852, 2
  %niter1852.ncmp.1 = icmp eq i64 %niter1852.next.1, %unroll_iter1851
  br i1 %niter1852.ncmp.1, label %._crit_edge1272.unr-lcssa, label %1326, !llvm.loop !62

._crit_edge1272.unr-lcssa:                        ; preds = %1326, %.lr.ph1271
  %indvars.iv1536.unr = phi i64 [ 1, %.lr.ph1271 ], [ %indvars.iv.next1537.1, %1326 ]
  br i1 %lcmp.mod1850.not, label %._crit_edge1272, label %._crit_edge1272.epilog-lcssa

._crit_edge1272.epilog-lcssa:                     ; preds = %._crit_edge1272.unr-lcssa
  %1337 = add nsw i64 %indvars.iv1536.unr, %1317
  %1338 = mul nsw i64 %1337, %721
  %1339 = mul nsw i64 %indvars.iv1536.unr, %720
  %gep1642.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep1641, i64 %1339
  %gep1933 = getelementptr %struct.doublecomplex, ptr %invariant.gep1932, i64 %indvars.iv1541
  %1340 = getelementptr %struct.doublecomplex, ptr %gep1933, i64 %1338
  %1341 = load <2 x double>, ptr %gep1642.epil, align 8, !tbaa !16
  store <2 x double> %1341, ptr %1340, align 8, !tbaa !16
  br label %._crit_edge1272

._crit_edge1272:                                  ; preds = %._crit_edge1272.unr-lcssa, %._crit_edge1272.epilog-lcssa
  %indvars.iv.next1542 = add nuw nsw i64 %indvars.iv1541, 1
  %exitcond1545.not = icmp eq i64 %indvars.iv.next1542, %wide.trip.count1544
  br i1 %exitcond1545.not, label %..loopexit1014_crit_edge.split, label %.lr.ph1271, !llvm.loop !63

1342:                                             ; preds = %1241
  store i32 %1210, ptr %9, align 4, !tbaa !5
  br i1 %.not9551245, label %.loopexit1014, label %.lr.ph1256.preheader

.lr.ph1256.preheader:                             ; preds = %1342
  %1343 = sext i32 %.pre1553 to i64
  %1344 = add nuw i32 %1210, 1
  %wide.trip.count1518 = zext i32 %1344 to i64
  br label %.lr.ph1256

.lr.ph1256:                                       ; preds = %.lr.ph1256.preheader, %1371
  %indvar1825 = phi i64 [ 0, %.lr.ph1256.preheader ], [ %indvar.next1826, %1371 ]
  %indvars.iv1513 = phi i64 [ 1, %.lr.ph1256.preheader ], [ %indvars.iv.next1514, %1371 ]
  %1345 = add nsw i64 %indvars.iv1513, %1343
  %gep1638 = getelementptr %struct.doublecomplex, ptr %invariant.gep1637, i64 %indvars.iv1513
  %1346 = icmp eq i64 %indvar1825, 0
  br i1 %1346, label %.unr-lcssa1823, label %.lr.ph1256.new

.lr.ph1256.new:                                   ; preds = %.lr.ph1256
  %1347 = add i64 %indvar1825, 1
  %unroll_iter1832 = and i64 %1347, -2
  %1348 = getelementptr %struct.doublecomplex, ptr %25, i64 %1345
  br label %1349

1349:                                             ; preds = %1349, %.lr.ph1256.new
  %indvars.iv1504 = phi i64 [ 1, %.lr.ph1256.new ], [ %indvars.iv.next1505.1, %1349 ]
  %niter1833 = phi i64 [ 0, %.lr.ph1256.new ], [ %niter1833.next.1, %1349 ]
  %1350 = add nsw i64 %indvars.iv1504, %1343
  %1351 = mul nsw i64 %1350, %721
  %1352 = mul nsw i64 %indvars.iv1504, %720
  %1353 = getelementptr %struct.doublecomplex, ptr %gep1638, i64 %1352
  %1354 = getelementptr %struct.doublecomplex, ptr %1348, i64 %1351
  %1355 = load <2 x double>, ptr %1353, align 8, !tbaa !16
  store <2 x double> %1355, ptr %1354, align 8, !tbaa !16
  %indvars.iv.next1505 = add nuw nsw i64 %indvars.iv1504, 1
  %1356 = add nsw i64 %indvars.iv.next1505, %1343
  %1357 = mul nsw i64 %1356, %721
  %1358 = add nsw i64 %1345, %1357
  %1359 = mul nsw i64 %indvars.iv.next1505, %720
  %1360 = getelementptr %struct.doublecomplex, ptr %gep1638, i64 %1359
  %1361 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1358
  %1362 = load <2 x double>, ptr %1360, align 8, !tbaa !16
  store <2 x double> %1362, ptr %1361, align 8, !tbaa !16
  %indvars.iv.next1505.1 = add nuw nsw i64 %indvars.iv1504, 2
  %niter1833.next.1 = add i64 %niter1833, 2
  %niter1833.ncmp.1 = icmp eq i64 %niter1833.next.1, %unroll_iter1832
  br i1 %niter1833.ncmp.1, label %.unr-lcssa1823, label %1349, !llvm.loop !64

.unr-lcssa1823:                                   ; preds = %1349, %.lr.ph1256
  %.lcssa1751.ph = phi i64 [ poison, %.lr.ph1256 ], [ %1358, %1349 ]
  %indvars.iv1504.unr = phi i64 [ 1, %.lr.ph1256 ], [ %indvars.iv.next1505.1, %1349 ]
  %1363 = and i64 %indvar1825, 1
  %lcmp.mod1829.not.not = icmp eq i64 %1363, 0
  br i1 %lcmp.mod1829.not.not, label %.epilog-lcssa1830, label %1371

.epilog-lcssa1830:                                ; preds = %.unr-lcssa1823
  %1364 = add nsw i64 %indvars.iv1504.unr, %1343
  %1365 = mul nsw i64 %1364, %721
  %1366 = add nsw i64 %1345, %1365
  %1367 = mul nsw i64 %indvars.iv1504.unr, %720
  %1368 = getelementptr %struct.doublecomplex, ptr %gep1638, i64 %1367
  %1369 = getelementptr inbounds %struct.doublecomplex, ptr %25, i64 %1366
  %1370 = load <2 x double>, ptr %1368, align 8, !tbaa !16
  store <2 x double> %1370, ptr %1369, align 8, !tbaa !16
  br label %1371

1371:                                             ; preds = %.unr-lcssa1823, %.epilog-lcssa1830
  %.lcssa1751 = phi i64 [ %.lcssa1751.ph, %.unr-lcssa1823 ], [ %1366, %.epilog-lcssa1830 ]
  %indvars.iv.next1514 = add nuw nsw i64 %indvars.iv1513, 1
  %exitcond1519.not = icmp eq i64 %indvars.iv.next1514, %wide.trip.count1518
  %indvar.next1826 = add i64 %indvar1825, 1
  br i1 %exitcond1519.not, label %..loopexit1015_crit_edge, label %.lr.ph1256, !llvm.loop !65

..loopexit1014_crit_edge.split:                   ; preds = %._crit_edge1272
  %1372 = add i32 %1312, %1319
  store i32 %1372, ptr %11, align 4, !tbaa !5
  br label %..loopexit1014_crit_edge

..loopexit1014_crit_edge:                         ; preds = %.lr.ph1277.split.us.preheader, %..loopexit1014_crit_edge.split
  %.us-phi1279 = phi i32 [ %1321, %..loopexit1014_crit_edge.split ], [ %1325, %.lr.ph1277.split.us.preheader ]
  store i32 %1314, ptr %10, align 4, !tbaa !5
  br label %.loopexit1014

..loopexit1015_crit_edge:                         ; preds = %1371
  %1373 = trunc nsw i64 %.lcssa1751 to i32
  %1374 = trunc nuw nsw i64 %indvars.iv1513 to i32
  store i32 %1374, ptr %10, align 4, !tbaa !5
  store i32 %1373, ptr %11, align 4, !tbaa !5
  br label %.loopexit1014

.loopexit1014:                                    ; preds = %1342, %..loopexit1015_crit_edge, %.thread1573, %1301, %..loopexit1014_crit_edge
  %.pre-phi = phi i32 [ %1315, %..loopexit1014_crit_edge ], [ %1315, %1301 ], [ %1244, %..loopexit1015_crit_edge ], [ %1244, %1342 ], [ %1247, %.thread1573 ]
  %1375 = phi i32 [ %1312, %..loopexit1014_crit_edge ], [ %1312, %1301 ], [ %1245, %..loopexit1015_crit_edge ], [ %1245, %1342 ], [ %1248, %.thread1573 ]
  %storemerge = phi i32 [ %.us-phi1279, %..loopexit1014_crit_edge ], [ 1, %1301 ], [ %1344, %..loopexit1015_crit_edge ], [ 1, %1342 ], [ 1, %.thread1573 ]
  store i32 %storemerge, ptr %15, align 4, !tbaa !5
  store i32 %.pre-phi, ptr %21, align 4, !tbaa !5
  %1376 = icmp slt i32 %.pre-phi, %1375
  br i1 %1376, label %882, label %.preheader, !llvm.loop !66

.lr.ph1285:                                       ; preds = %.preheader, %1401
  %storemerge9461284 = phi i32 [ %1403, %1401 ], [ %1375, %.preheader ]
  %1377 = zext nneg i32 %storemerge9461284 to i64
  %1378 = getelementptr inbounds i32, ptr %26, i64 %1377
  %1379 = load i32, ptr %1378, align 4, !tbaa !5
  %1380 = icmp sgt i32 %1379, 0
  br i1 %1380, label %1381, label %1389

1381:                                             ; preds = %.lr.ph1285
  store i32 %1379, ptr %19, align 4, !tbaa !5
  %1382 = icmp ult i32 %storemerge9461284, %1379
  br i1 %1382, label %1383, label %1384

1383:                                             ; preds = %1381
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %15, ptr noundef nonnull %19) #8
  %.pre1558 = load i32, ptr %15, align 4, !tbaa !5
  %.pre1559 = load i32, ptr %19, align 4, !tbaa !5
  br label %1384

1384:                                             ; preds = %1383, %1381
  %1385 = phi i32 [ %.pre1559, %1383 ], [ %1379, %1381 ]
  %1386 = phi i32 [ %.pre1558, %1383 ], [ %storemerge9461284, %1381 ]
  %1387 = icmp sgt i32 %1386, %1385
  br i1 %1387, label %1388, label %1401

1388:                                             ; preds = %1384
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %15) #8
  %.pre1560 = load i32, ptr %15, align 4, !tbaa !5
  br label %1401

1389:                                             ; preds = %.lr.ph1285
  %1390 = sub nsw i32 0, %1379
  store i32 %1390, ptr %19, align 4, !tbaa !5
  %1391 = icmp ult i32 %storemerge9461284, %1390
  br i1 %1391, label %1392, label %1393

1392:                                             ; preds = %1389
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %15, ptr noundef nonnull %19) #8
  %.pre1555 = load i32, ptr %15, align 4, !tbaa !5
  %.pre1556 = load i32, ptr %19, align 4, !tbaa !5
  br label %1393

1393:                                             ; preds = %1392, %1389
  %1394 = phi i32 [ %.pre1556, %1392 ], [ %1390, %1389 ]
  %1395 = phi i32 [ %.pre1555, %1392 ], [ %storemerge9461284, %1389 ]
  %1396 = icmp sgt i32 %1395, %1394
  br i1 %1396, label %1397, label %1398

1397:                                             ; preds = %1393
  call void @zheswapr_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %15) #8
  %.pre1557 = load i32, ptr %15, align 4, !tbaa !5
  br label %1398

1398:                                             ; preds = %1397, %1393
  %1399 = phi i32 [ %.pre1557, %1397 ], [ %1395, %1393 ]
  %1400 = add nsw i32 %1399, -1
  br label %1401

1401:                                             ; preds = %1384, %1388, %1398
  %1402 = phi i32 [ %1386, %1384 ], [ %.pre1560, %1388 ], [ %1400, %1398 ]
  %1403 = add nsw i32 %1402, -1
  store i32 %1403, ptr %15, align 4, !tbaa !5
  %1404 = icmp sgt i32 %1402, 1
  br i1 %1404, label %.lr.ph1285, label %.loopexit, !llvm.loop !67

.loopexit:                                        ; preds = %68, %96, %690, %1401, %.preheader1018, %694, %._crit_edge, %105, %.preheader1019, %.preheader, %46, %.thread
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  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 void @zsyconv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare { double, double } @__divdc3(double, double, double, double) local_unnamed_addr

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @_pCd(ptr noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #6

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!11, !11, i64 0}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14, !19, !20}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !14, !20, !19}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!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}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14, !19, !20}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !14, !19}
!47 = distinct !{!47, !14}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14}
!50 = distinct !{!50, !14}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}
!53 = distinct !{!53, !14}
!54 = distinct !{!54, !14}
!55 = distinct !{!55, !14}
!56 = distinct !{!56, !14}
!57 = distinct !{!57, !14}
!58 = distinct !{!58, !14}
!59 = distinct !{!59, !14}
!60 = distinct !{!60, !14}
!61 = distinct !{!61, !14}
!62 = distinct !{!62, !14}
!63 = distinct !{!63, !14}
!64 = distinct !{!64, !14}
!65 = distinct !{!65, !14}
!66 = distinct !{!66, !14}
!67 = distinct !{!67, !14}


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