; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/BLAS/SRC (chpr)

; 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.complex = type { float, float }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @f2c_chpr(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %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 i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca float, align 4
  %20 = alloca %struct.complex, align 4
  %21 = alloca %struct.complex, align 4
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca %struct.complex, align 4
  %31 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %32 = load ptr, ptr %13, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.complex, ptr %32, i32 -1
  store ptr %33, ptr %13, align 8, !tbaa !5
  %34 = load ptr, ptr %11, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.complex, ptr %34, i32 -1
  store ptr %35, ptr %11, align 8, !tbaa !5
  store i64 0, ptr %29, align 8, !tbaa !9
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = call i64 @lsame_(ptr noundef %36, ptr noundef @.str)
  %38 = icmp ne i64 %37, 0
  br i1 %38, label %44, label %39

39:                                               ; preds = %6
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  %41 = call i64 @lsame_(ptr noundef %40, ptr noundef @.str.1)
  %42 = icmp ne i64 %41, 0
  br i1 %42, label %44, label %43

43:                                               ; preds = %39
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %56

44:                                               ; preds = %39, %6
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = load i64, ptr %45, align 8, !tbaa !9
  %47 = icmp slt i64 %46, 0
  br i1 %47, label %48, label %49

48:                                               ; preds = %44
  store i64 2, ptr %29, align 8, !tbaa !9
  br label %55

49:                                               ; preds = %44
  %50 = load ptr, ptr %12, align 8, !tbaa !5
  %51 = load i64, ptr %50, align 8, !tbaa !9
  %52 = icmp eq i64 %51, 0
  br i1 %52, label %53, label %54

53:                                               ; preds = %49
  store i64 5, ptr %29, align 8, !tbaa !9
  br label %54

54:                                               ; preds = %53, %49
  br label %55

55:                                               ; preds = %54, %48
  br label %56

56:                                               ; preds = %55, %43
  %57 = load i64, ptr %29, align 8, !tbaa !9
  %58 = icmp ne i64 %57, 0
  br i1 %58, label %59, label %61

59:                                               ; preds = %56
  %60 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %29)
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %985

61:                                               ; preds = %56
  %62 = load ptr, ptr %9, align 8, !tbaa !5
  %63 = load i64, ptr %62, align 8, !tbaa !9
  %64 = icmp eq i64 %63, 0
  br i1 %64, label %69, label %65

65:                                               ; preds = %61
  %66 = load ptr, ptr %10, align 8, !tbaa !5
  %67 = load float, ptr %66, align 4, !tbaa !11
  %68 = fcmp oeq float %67, 0.000000e+00
  br i1 %68, label %69, label %70

69:                                               ; preds = %65, %61
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %985

70:                                               ; preds = %65
  %71 = load ptr, ptr %12, align 8, !tbaa !5
  %72 = load i64, ptr %71, align 8, !tbaa !9
  %73 = icmp sle i64 %72, 0
  br i1 %73, label %74, label %82

74:                                               ; preds = %70
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = load i64, ptr %75, align 8, !tbaa !9
  %77 = sub nsw i64 %76, 1
  %78 = load ptr, ptr %12, align 8, !tbaa !5
  %79 = load i64, ptr %78, align 8, !tbaa !9
  %80 = mul nsw i64 %77, %79
  %81 = sub nsw i64 1, %80
  store i64 %81, ptr %28, align 8, !tbaa !9
  br label %88

82:                                               ; preds = %70
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  %84 = load i64, ptr %83, align 8, !tbaa !9
  %85 = icmp ne i64 %84, 1
  br i1 %85, label %86, label %87

86:                                               ; preds = %82
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %87

87:                                               ; preds = %86, %82
  br label %88

88:                                               ; preds = %87, %74
  store i64 1, ptr %25, align 8, !tbaa !9
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = call i64 @lsame_(ptr noundef %89, ptr noundef @.str)
  %91 = icmp ne i64 %90, 0
  br i1 %91, label %92, label %543

92:                                               ; preds = %88
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = load i64, ptr %93, align 8, !tbaa !9
  %95 = icmp eq i64 %94, 1
  br i1 %95, label %96, label %314

96:                                               ; preds = %92
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  store i64 %98, ptr %14, align 8, !tbaa !9
  store i64 1, ptr %23, align 8, !tbaa !9
  br label %99

99:                                               ; preds = %310, %96
  %100 = load i64, ptr %23, align 8, !tbaa !9
  %101 = load i64, ptr %14, align 8, !tbaa !9
  %102 = icmp sle i64 %100, %101
  br i1 %102, label %103, label %313

103:                                              ; preds = %99
  %104 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %104, ptr %15, align 8, !tbaa !9
  %105 = load ptr, ptr %11, align 8, !tbaa !5
  %106 = load i64, ptr %15, align 8, !tbaa !9
  %107 = getelementptr inbounds %struct.complex, ptr %105, i64 %106
  %108 = getelementptr inbounds %struct.complex, ptr %107, i32 0, i32 0
  %109 = load float, ptr %108, align 4, !tbaa !13
  %110 = fcmp une float %109, 0.000000e+00
  br i1 %110, label %118, label %111

111:                                              ; preds = %103
  %112 = load ptr, ptr %11, align 8, !tbaa !5
  %113 = load i64, ptr %15, align 8, !tbaa !9
  %114 = getelementptr inbounds %struct.complex, ptr %112, i64 %113
  %115 = getelementptr inbounds %struct.complex, ptr %114, i32 0, i32 1
  %116 = load float, ptr %115, align 4, !tbaa !15
  %117 = fcmp une float %116, 0.000000e+00
  br i1 %117, label %118, label %283

118:                                              ; preds = %111, %103
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = load i64, ptr %23, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct.complex, ptr %119, i64 %120
  call void @r_cnjg(ptr noundef %21, ptr noundef %121)
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = load float, ptr %122, align 4, !tbaa !11
  %124 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %125 = load float, ptr %124, align 4, !tbaa !13
  %126 = fmul float %123, %125
  %127 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %126, ptr %127, align 4, !tbaa !13
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = load float, ptr %128, align 4, !tbaa !11
  %130 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %131 = load float, ptr %130, align 4, !tbaa !15
  %132 = fmul float %129, %131
  %133 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %132, ptr %133, align 4, !tbaa !15
  %134 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %135 = load float, ptr %134, align 4, !tbaa !13
  %136 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  store float %135, ptr %136, align 4, !tbaa !13
  %137 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %138 = load float, ptr %137, align 4, !tbaa !15
  %139 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  store float %138, ptr %139, align 4, !tbaa !15
  %140 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %140, ptr %24, align 8, !tbaa !9
  %141 = load i64, ptr %23, align 8, !tbaa !9
  %142 = sub nsw i64 %141, 1
  store i64 %142, ptr %15, align 8, !tbaa !9
  store i64 1, ptr %22, align 8, !tbaa !9
  br label %143

143:                                              ; preds = %218, %118
  %144 = load i64, ptr %22, align 8, !tbaa !9
  %145 = load i64, ptr %15, align 8, !tbaa !9
  %146 = icmp sle i64 %144, %145
  br i1 %146, label %147, label %221

147:                                              ; preds = %143
  %148 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %148, ptr %16, align 8, !tbaa !9
  %149 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %149, ptr %17, align 8, !tbaa !9
  %150 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %150, ptr %18, align 8, !tbaa !9
  %151 = load ptr, ptr %11, align 8, !tbaa !5
  %152 = load i64, ptr %18, align 8, !tbaa !9
  %153 = getelementptr inbounds %struct.complex, ptr %151, i64 %152
  %154 = getelementptr inbounds %struct.complex, ptr %153, i32 0, i32 0
  %155 = load float, ptr %154, align 4, !tbaa !13
  %156 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %157 = load float, ptr %156, align 4, !tbaa !13
  %158 = load ptr, ptr %11, align 8, !tbaa !5
  %159 = load i64, ptr %18, align 8, !tbaa !9
  %160 = getelementptr inbounds %struct.complex, ptr %158, i64 %159
  %161 = getelementptr inbounds %struct.complex, ptr %160, i32 0, i32 1
  %162 = load float, ptr %161, align 4, !tbaa !15
  %163 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %164 = load float, ptr %163, align 4, !tbaa !15
  %165 = fmul float %162, %164
  %166 = fneg float %165
  %167 = call float @llvm.fmuladd.f32(float %155, float %157, float %166)
  %168 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  store float %167, ptr %168, align 4, !tbaa !13
  %169 = load ptr, ptr %11, align 8, !tbaa !5
  %170 = load i64, ptr %18, align 8, !tbaa !9
  %171 = getelementptr inbounds %struct.complex, ptr %169, i64 %170
  %172 = getelementptr inbounds %struct.complex, ptr %171, i32 0, i32 0
  %173 = load float, ptr %172, align 4, !tbaa !13
  %174 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %175 = load float, ptr %174, align 4, !tbaa !15
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = load i64, ptr %18, align 8, !tbaa !9
  %178 = getelementptr inbounds %struct.complex, ptr %176, i64 %177
  %179 = getelementptr inbounds %struct.complex, ptr %178, i32 0, i32 1
  %180 = load float, ptr %179, align 4, !tbaa !15
  %181 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %182 = load float, ptr %181, align 4, !tbaa !13
  %183 = fmul float %180, %182
  %184 = call float @llvm.fmuladd.f32(float %173, float %175, float %183)
  %185 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  store float %184, ptr %185, align 4, !tbaa !15
  %186 = load ptr, ptr %13, align 8, !tbaa !5
  %187 = load i64, ptr %17, align 8, !tbaa !9
  %188 = getelementptr inbounds %struct.complex, ptr %186, i64 %187
  %189 = getelementptr inbounds %struct.complex, ptr %188, i32 0, i32 0
  %190 = load float, ptr %189, align 4, !tbaa !13
  %191 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %192 = load float, ptr %191, align 4, !tbaa !13
  %193 = fadd float %190, %192
  %194 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %193, ptr %194, align 4, !tbaa !13
  %195 = load ptr, ptr %13, align 8, !tbaa !5
  %196 = load i64, ptr %17, align 8, !tbaa !9
  %197 = getelementptr inbounds %struct.complex, ptr %195, i64 %196
  %198 = getelementptr inbounds %struct.complex, ptr %197, i32 0, i32 1
  %199 = load float, ptr %198, align 4, !tbaa !15
  %200 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %201 = load float, ptr %200, align 4, !tbaa !15
  %202 = fadd float %199, %201
  %203 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %202, ptr %203, align 4, !tbaa !15
  %204 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %205 = load float, ptr %204, align 4, !tbaa !13
  %206 = load ptr, ptr %13, align 8, !tbaa !5
  %207 = load i64, ptr %16, align 8, !tbaa !9
  %208 = getelementptr inbounds %struct.complex, ptr %206, i64 %207
  %209 = getelementptr inbounds %struct.complex, ptr %208, i32 0, i32 0
  store float %205, ptr %209, align 4, !tbaa !13
  %210 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %211 = load float, ptr %210, align 4, !tbaa !15
  %212 = load ptr, ptr %13, align 8, !tbaa !5
  %213 = load i64, ptr %16, align 8, !tbaa !9
  %214 = getelementptr inbounds %struct.complex, ptr %212, i64 %213
  %215 = getelementptr inbounds %struct.complex, ptr %214, i32 0, i32 1
  store float %211, ptr %215, align 4, !tbaa !15
  %216 = load i64, ptr %24, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %24, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %147
  %219 = load i64, ptr %22, align 8, !tbaa !9
  %220 = add nsw i64 %219, 1
  store i64 %220, ptr %22, align 8, !tbaa !9
  br label %143, !llvm.loop !16

221:                                              ; preds = %143
  %222 = load i64, ptr %25, align 8, !tbaa !9
  %223 = load i64, ptr %23, align 8, !tbaa !9
  %224 = add nsw i64 %222, %223
  %225 = sub nsw i64 %224, 1
  store i64 %225, ptr %15, align 8, !tbaa !9
  %226 = load i64, ptr %25, align 8, !tbaa !9
  %227 = load i64, ptr %23, align 8, !tbaa !9
  %228 = add nsw i64 %226, %227
  %229 = sub nsw i64 %228, 1
  store i64 %229, ptr %16, align 8, !tbaa !9
  %230 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %230, ptr %17, align 8, !tbaa !9
  %231 = load ptr, ptr %11, align 8, !tbaa !5
  %232 = load i64, ptr %17, align 8, !tbaa !9
  %233 = getelementptr inbounds %struct.complex, ptr %231, i64 %232
  %234 = getelementptr inbounds %struct.complex, ptr %233, i32 0, i32 0
  %235 = load float, ptr %234, align 4, !tbaa !13
  %236 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %237 = load float, ptr %236, align 4, !tbaa !13
  %238 = load ptr, ptr %11, align 8, !tbaa !5
  %239 = load i64, ptr %17, align 8, !tbaa !9
  %240 = getelementptr inbounds %struct.complex, ptr %238, i64 %239
  %241 = getelementptr inbounds %struct.complex, ptr %240, i32 0, i32 1
  %242 = load float, ptr %241, align 4, !tbaa !15
  %243 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %244 = load float, ptr %243, align 4, !tbaa !15
  %245 = fmul float %242, %244
  %246 = fneg float %245
  %247 = call float @llvm.fmuladd.f32(float %235, float %237, float %246)
  %248 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %247, ptr %248, align 4, !tbaa !13
  %249 = load ptr, ptr %11, align 8, !tbaa !5
  %250 = load i64, ptr %17, align 8, !tbaa !9
  %251 = getelementptr inbounds %struct.complex, ptr %249, i64 %250
  %252 = getelementptr inbounds %struct.complex, ptr %251, i32 0, i32 0
  %253 = load float, ptr %252, align 4, !tbaa !13
  %254 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %255 = load float, ptr %254, align 4, !tbaa !15
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = load i64, ptr %17, align 8, !tbaa !9
  %258 = getelementptr inbounds %struct.complex, ptr %256, i64 %257
  %259 = getelementptr inbounds %struct.complex, ptr %258, i32 0, i32 1
  %260 = load float, ptr %259, align 4, !tbaa !15
  %261 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %262 = load float, ptr %261, align 4, !tbaa !13
  %263 = fmul float %260, %262
  %264 = call float @llvm.fmuladd.f32(float %253, float %255, float %263)
  %265 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %264, ptr %265, align 4, !tbaa !15
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = load i64, ptr %16, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.complex, ptr %266, i64 %267
  %269 = getelementptr inbounds %struct.complex, ptr %268, i32 0, i32 0
  %270 = load float, ptr %269, align 4, !tbaa !13
  %271 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %272 = load float, ptr %271, align 4, !tbaa !13
  %273 = fadd float %270, %272
  store float %273, ptr %19, align 4, !tbaa !11
  %274 = load float, ptr %19, align 4, !tbaa !11
  %275 = load ptr, ptr %13, align 8, !tbaa !5
  %276 = load i64, ptr %15, align 8, !tbaa !9
  %277 = getelementptr inbounds %struct.complex, ptr %275, i64 %276
  %278 = getelementptr inbounds %struct.complex, ptr %277, i32 0, i32 0
  store float %274, ptr %278, align 4, !tbaa !13
  %279 = load ptr, ptr %13, align 8, !tbaa !5
  %280 = load i64, ptr %15, align 8, !tbaa !9
  %281 = getelementptr inbounds %struct.complex, ptr %279, i64 %280
  %282 = getelementptr inbounds %struct.complex, ptr %281, i32 0, i32 1
  store float 0.000000e+00, ptr %282, align 4, !tbaa !15
  br label %306

283:                                              ; preds = %111
  %284 = load i64, ptr %25, align 8, !tbaa !9
  %285 = load i64, ptr %23, align 8, !tbaa !9
  %286 = add nsw i64 %284, %285
  %287 = sub nsw i64 %286, 1
  store i64 %287, ptr %15, align 8, !tbaa !9
  %288 = load i64, ptr %25, align 8, !tbaa !9
  %289 = load i64, ptr %23, align 8, !tbaa !9
  %290 = add nsw i64 %288, %289
  %291 = sub nsw i64 %290, 1
  store i64 %291, ptr %16, align 8, !tbaa !9
  %292 = load ptr, ptr %13, align 8, !tbaa !5
  %293 = load i64, ptr %16, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.complex, ptr %292, i64 %293
  %295 = getelementptr inbounds %struct.complex, ptr %294, i32 0, i32 0
  %296 = load float, ptr %295, align 4, !tbaa !13
  store float %296, ptr %19, align 4, !tbaa !11
  %297 = load float, ptr %19, align 4, !tbaa !11
  %298 = load ptr, ptr %13, align 8, !tbaa !5
  %299 = load i64, ptr %15, align 8, !tbaa !9
  %300 = getelementptr inbounds %struct.complex, ptr %298, i64 %299
  %301 = getelementptr inbounds %struct.complex, ptr %300, i32 0, i32 0
  store float %297, ptr %301, align 4, !tbaa !13
  %302 = load ptr, ptr %13, align 8, !tbaa !5
  %303 = load i64, ptr %15, align 8, !tbaa !9
  %304 = getelementptr inbounds %struct.complex, ptr %302, i64 %303
  %305 = getelementptr inbounds %struct.complex, ptr %304, i32 0, i32 1
  store float 0.000000e+00, ptr %305, align 4, !tbaa !15
  br label %306

306:                                              ; preds = %283, %221
  %307 = load i64, ptr %23, align 8, !tbaa !9
  %308 = load i64, ptr %25, align 8, !tbaa !9
  %309 = add nsw i64 %308, %307
  store i64 %309, ptr %25, align 8, !tbaa !9
  br label %310

310:                                              ; preds = %306
  %311 = load i64, ptr %23, align 8, !tbaa !9
  %312 = add nsw i64 %311, 1
  store i64 %312, ptr %23, align 8, !tbaa !9
  br label %99, !llvm.loop !18

313:                                              ; preds = %99
  br label %542

314:                                              ; preds = %92
  %315 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %315, ptr %27, align 8, !tbaa !9
  %316 = load ptr, ptr %9, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !9
  store i64 %317, ptr %14, align 8, !tbaa !9
  store i64 1, ptr %23, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %538, %314
  %319 = load i64, ptr %23, align 8, !tbaa !9
  %320 = load i64, ptr %14, align 8, !tbaa !9
  %321 = icmp sle i64 %319, %320
  br i1 %321, label %322, label %541

322:                                              ; preds = %318
  %323 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %323, ptr %15, align 8, !tbaa !9
  %324 = load ptr, ptr %11, align 8, !tbaa !5
  %325 = load i64, ptr %15, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.complex, ptr %324, i64 %325
  %327 = getelementptr inbounds %struct.complex, ptr %326, i32 0, i32 0
  %328 = load float, ptr %327, align 4, !tbaa !13
  %329 = fcmp une float %328, 0.000000e+00
  br i1 %329, label %337, label %330

330:                                              ; preds = %322
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = load i64, ptr %15, align 8, !tbaa !9
  %333 = getelementptr inbounds %struct.complex, ptr %331, i64 %332
  %334 = getelementptr inbounds %struct.complex, ptr %333, i32 0, i32 1
  %335 = load float, ptr %334, align 4, !tbaa !15
  %336 = fcmp une float %335, 0.000000e+00
  br i1 %336, label %337, label %507

337:                                              ; preds = %330, %322
  %338 = load ptr, ptr %11, align 8, !tbaa !5
  %339 = load i64, ptr %27, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct.complex, ptr %338, i64 %339
  call void @r_cnjg(ptr noundef %21, ptr noundef %340)
  %341 = load ptr, ptr %10, align 8, !tbaa !5
  %342 = load float, ptr %341, align 4, !tbaa !11
  %343 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %344 = load float, ptr %343, align 4, !tbaa !13
  %345 = fmul float %342, %344
  %346 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %345, ptr %346, align 4, !tbaa !13
  %347 = load ptr, ptr %10, align 8, !tbaa !5
  %348 = load float, ptr %347, align 4, !tbaa !11
  %349 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %350 = load float, ptr %349, align 4, !tbaa !15
  %351 = fmul float %348, %350
  %352 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %351, ptr %352, align 4, !tbaa !15
  %353 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %354 = load float, ptr %353, align 4, !tbaa !13
  %355 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  store float %354, ptr %355, align 4, !tbaa !13
  %356 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %357 = load float, ptr %356, align 4, !tbaa !15
  %358 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  store float %357, ptr %358, align 4, !tbaa !15
  %359 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %359, ptr %26, align 8, !tbaa !9
  %360 = load i64, ptr %25, align 8, !tbaa !9
  %361 = load i64, ptr %23, align 8, !tbaa !9
  %362 = add nsw i64 %360, %361
  %363 = sub nsw i64 %362, 2
  store i64 %363, ptr %15, align 8, !tbaa !9
  %364 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %364, ptr %24, align 8, !tbaa !9
  br label %365

365:                                              ; preds = %442, %337
  %366 = load i64, ptr %24, align 8, !tbaa !9
  %367 = load i64, ptr %15, align 8, !tbaa !9
  %368 = icmp sle i64 %366, %367
  br i1 %368, label %369, label %445

369:                                              ; preds = %365
  %370 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %370, ptr %16, align 8, !tbaa !9
  %371 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %371, ptr %17, align 8, !tbaa !9
  %372 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %372, ptr %18, align 8, !tbaa !9
  %373 = load ptr, ptr %11, align 8, !tbaa !5
  %374 = load i64, ptr %18, align 8, !tbaa !9
  %375 = getelementptr inbounds %struct.complex, ptr %373, i64 %374
  %376 = getelementptr inbounds %struct.complex, ptr %375, i32 0, i32 0
  %377 = load float, ptr %376, align 4, !tbaa !13
  %378 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %379 = load float, ptr %378, align 4, !tbaa !13
  %380 = load ptr, ptr %11, align 8, !tbaa !5
  %381 = load i64, ptr %18, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.complex, ptr %380, i64 %381
  %383 = getelementptr inbounds %struct.complex, ptr %382, i32 0, i32 1
  %384 = load float, ptr %383, align 4, !tbaa !15
  %385 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %386 = load float, ptr %385, align 4, !tbaa !15
  %387 = fmul float %384, %386
  %388 = fneg float %387
  %389 = call float @llvm.fmuladd.f32(float %377, float %379, float %388)
  %390 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  store float %389, ptr %390, align 4, !tbaa !13
  %391 = load ptr, ptr %11, align 8, !tbaa !5
  %392 = load i64, ptr %18, align 8, !tbaa !9
  %393 = getelementptr inbounds %struct.complex, ptr %391, i64 %392
  %394 = getelementptr inbounds %struct.complex, ptr %393, i32 0, i32 0
  %395 = load float, ptr %394, align 4, !tbaa !13
  %396 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %397 = load float, ptr %396, align 4, !tbaa !15
  %398 = load ptr, ptr %11, align 8, !tbaa !5
  %399 = load i64, ptr %18, align 8, !tbaa !9
  %400 = getelementptr inbounds %struct.complex, ptr %398, i64 %399
  %401 = getelementptr inbounds %struct.complex, ptr %400, i32 0, i32 1
  %402 = load float, ptr %401, align 4, !tbaa !15
  %403 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %404 = load float, ptr %403, align 4, !tbaa !13
  %405 = fmul float %402, %404
  %406 = call float @llvm.fmuladd.f32(float %395, float %397, float %405)
  %407 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  store float %406, ptr %407, align 4, !tbaa !15
  %408 = load ptr, ptr %13, align 8, !tbaa !5
  %409 = load i64, ptr %17, align 8, !tbaa !9
  %410 = getelementptr inbounds %struct.complex, ptr %408, i64 %409
  %411 = getelementptr inbounds %struct.complex, ptr %410, i32 0, i32 0
  %412 = load float, ptr %411, align 4, !tbaa !13
  %413 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %414 = load float, ptr %413, align 4, !tbaa !13
  %415 = fadd float %412, %414
  %416 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %415, ptr %416, align 4, !tbaa !13
  %417 = load ptr, ptr %13, align 8, !tbaa !5
  %418 = load i64, ptr %17, align 8, !tbaa !9
  %419 = getelementptr inbounds %struct.complex, ptr %417, i64 %418
  %420 = getelementptr inbounds %struct.complex, ptr %419, i32 0, i32 1
  %421 = load float, ptr %420, align 4, !tbaa !15
  %422 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %423 = load float, ptr %422, align 4, !tbaa !15
  %424 = fadd float %421, %423
  %425 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %424, ptr %425, align 4, !tbaa !15
  %426 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %427 = load float, ptr %426, align 4, !tbaa !13
  %428 = load ptr, ptr %13, align 8, !tbaa !5
  %429 = load i64, ptr %16, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.complex, ptr %428, i64 %429
  %431 = getelementptr inbounds %struct.complex, ptr %430, i32 0, i32 0
  store float %427, ptr %431, align 4, !tbaa !13
  %432 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %433 = load float, ptr %432, align 4, !tbaa !15
  %434 = load ptr, ptr %13, align 8, !tbaa !5
  %435 = load i64, ptr %16, align 8, !tbaa !9
  %436 = getelementptr inbounds %struct.complex, ptr %434, i64 %435
  %437 = getelementptr inbounds %struct.complex, ptr %436, i32 0, i32 1
  store float %433, ptr %437, align 4, !tbaa !15
  %438 = load ptr, ptr %12, align 8, !tbaa !5
  %439 = load i64, ptr %438, align 8, !tbaa !9
  %440 = load i64, ptr %26, align 8, !tbaa !9
  %441 = add nsw i64 %440, %439
  store i64 %441, ptr %26, align 8, !tbaa !9
  br label %442

442:                                              ; preds = %369
  %443 = load i64, ptr %24, align 8, !tbaa !9
  %444 = add nsw i64 %443, 1
  store i64 %444, ptr %24, align 8, !tbaa !9
  br label %365, !llvm.loop !19

445:                                              ; preds = %365
  %446 = load i64, ptr %25, align 8, !tbaa !9
  %447 = load i64, ptr %23, align 8, !tbaa !9
  %448 = add nsw i64 %446, %447
  %449 = sub nsw i64 %448, 1
  store i64 %449, ptr %15, align 8, !tbaa !9
  %450 = load i64, ptr %25, align 8, !tbaa !9
  %451 = load i64, ptr %23, align 8, !tbaa !9
  %452 = add nsw i64 %450, %451
  %453 = sub nsw i64 %452, 1
  store i64 %453, ptr %16, align 8, !tbaa !9
  %454 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %454, ptr %17, align 8, !tbaa !9
  %455 = load ptr, ptr %11, align 8, !tbaa !5
  %456 = load i64, ptr %17, align 8, !tbaa !9
  %457 = getelementptr inbounds %struct.complex, ptr %455, i64 %456
  %458 = getelementptr inbounds %struct.complex, ptr %457, i32 0, i32 0
  %459 = load float, ptr %458, align 4, !tbaa !13
  %460 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %461 = load float, ptr %460, align 4, !tbaa !13
  %462 = load ptr, ptr %11, align 8, !tbaa !5
  %463 = load i64, ptr %17, align 8, !tbaa !9
  %464 = getelementptr inbounds %struct.complex, ptr %462, i64 %463
  %465 = getelementptr inbounds %struct.complex, ptr %464, i32 0, i32 1
  %466 = load float, ptr %465, align 4, !tbaa !15
  %467 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %468 = load float, ptr %467, align 4, !tbaa !15
  %469 = fmul float %466, %468
  %470 = fneg float %469
  %471 = call float @llvm.fmuladd.f32(float %459, float %461, float %470)
  %472 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %471, ptr %472, align 4, !tbaa !13
  %473 = load ptr, ptr %11, align 8, !tbaa !5
  %474 = load i64, ptr %17, align 8, !tbaa !9
  %475 = getelementptr inbounds %struct.complex, ptr %473, i64 %474
  %476 = getelementptr inbounds %struct.complex, ptr %475, i32 0, i32 0
  %477 = load float, ptr %476, align 4, !tbaa !13
  %478 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %479 = load float, ptr %478, align 4, !tbaa !15
  %480 = load ptr, ptr %11, align 8, !tbaa !5
  %481 = load i64, ptr %17, align 8, !tbaa !9
  %482 = getelementptr inbounds %struct.complex, ptr %480, i64 %481
  %483 = getelementptr inbounds %struct.complex, ptr %482, i32 0, i32 1
  %484 = load float, ptr %483, align 4, !tbaa !15
  %485 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %486 = load float, ptr %485, align 4, !tbaa !13
  %487 = fmul float %484, %486
  %488 = call float @llvm.fmuladd.f32(float %477, float %479, float %487)
  %489 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %488, ptr %489, align 4, !tbaa !15
  %490 = load ptr, ptr %13, align 8, !tbaa !5
  %491 = load i64, ptr %16, align 8, !tbaa !9
  %492 = getelementptr inbounds %struct.complex, ptr %490, i64 %491
  %493 = getelementptr inbounds %struct.complex, ptr %492, i32 0, i32 0
  %494 = load float, ptr %493, align 4, !tbaa !13
  %495 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %496 = load float, ptr %495, align 4, !tbaa !13
  %497 = fadd float %494, %496
  store float %497, ptr %19, align 4, !tbaa !11
  %498 = load float, ptr %19, align 4, !tbaa !11
  %499 = load ptr, ptr %13, align 8, !tbaa !5
  %500 = load i64, ptr %15, align 8, !tbaa !9
  %501 = getelementptr inbounds %struct.complex, ptr %499, i64 %500
  %502 = getelementptr inbounds %struct.complex, ptr %501, i32 0, i32 0
  store float %498, ptr %502, align 4, !tbaa !13
  %503 = load ptr, ptr %13, align 8, !tbaa !5
  %504 = load i64, ptr %15, align 8, !tbaa !9
  %505 = getelementptr inbounds %struct.complex, ptr %503, i64 %504
  %506 = getelementptr inbounds %struct.complex, ptr %505, i32 0, i32 1
  store float 0.000000e+00, ptr %506, align 4, !tbaa !15
  br label %530

507:                                              ; preds = %330
  %508 = load i64, ptr %25, align 8, !tbaa !9
  %509 = load i64, ptr %23, align 8, !tbaa !9
  %510 = add nsw i64 %508, %509
  %511 = sub nsw i64 %510, 1
  store i64 %511, ptr %15, align 8, !tbaa !9
  %512 = load i64, ptr %25, align 8, !tbaa !9
  %513 = load i64, ptr %23, align 8, !tbaa !9
  %514 = add nsw i64 %512, %513
  %515 = sub nsw i64 %514, 1
  store i64 %515, ptr %16, align 8, !tbaa !9
  %516 = load ptr, ptr %13, align 8, !tbaa !5
  %517 = load i64, ptr %16, align 8, !tbaa !9
  %518 = getelementptr inbounds %struct.complex, ptr %516, i64 %517
  %519 = getelementptr inbounds %struct.complex, ptr %518, i32 0, i32 0
  %520 = load float, ptr %519, align 4, !tbaa !13
  store float %520, ptr %19, align 4, !tbaa !11
  %521 = load float, ptr %19, align 4, !tbaa !11
  %522 = load ptr, ptr %13, align 8, !tbaa !5
  %523 = load i64, ptr %15, align 8, !tbaa !9
  %524 = getelementptr inbounds %struct.complex, ptr %522, i64 %523
  %525 = getelementptr inbounds %struct.complex, ptr %524, i32 0, i32 0
  store float %521, ptr %525, align 4, !tbaa !13
  %526 = load ptr, ptr %13, align 8, !tbaa !5
  %527 = load i64, ptr %15, align 8, !tbaa !9
  %528 = getelementptr inbounds %struct.complex, ptr %526, i64 %527
  %529 = getelementptr inbounds %struct.complex, ptr %528, i32 0, i32 1
  store float 0.000000e+00, ptr %529, align 4, !tbaa !15
  br label %530

530:                                              ; preds = %507, %445
  %531 = load ptr, ptr %12, align 8, !tbaa !5
  %532 = load i64, ptr %531, align 8, !tbaa !9
  %533 = load i64, ptr %27, align 8, !tbaa !9
  %534 = add nsw i64 %533, %532
  store i64 %534, ptr %27, align 8, !tbaa !9
  %535 = load i64, ptr %23, align 8, !tbaa !9
  %536 = load i64, ptr %25, align 8, !tbaa !9
  %537 = add nsw i64 %536, %535
  store i64 %537, ptr %25, align 8, !tbaa !9
  br label %538

538:                                              ; preds = %530
  %539 = load i64, ptr %23, align 8, !tbaa !9
  %540 = add nsw i64 %539, 1
  store i64 %540, ptr %23, align 8, !tbaa !9
  br label %318, !llvm.loop !20

541:                                              ; preds = %318
  br label %542

542:                                              ; preds = %541, %313
  br label %984

543:                                              ; preds = %88
  %544 = load ptr, ptr %12, align 8, !tbaa !5
  %545 = load i64, ptr %544, align 8, !tbaa !9
  %546 = icmp eq i64 %545, 1
  br i1 %546, label %547, label %760

547:                                              ; preds = %543
  %548 = load ptr, ptr %9, align 8, !tbaa !5
  %549 = load i64, ptr %548, align 8, !tbaa !9
  store i64 %549, ptr %14, align 8, !tbaa !9
  store i64 1, ptr %23, align 8, !tbaa !9
  br label %550

550:                                              ; preds = %756, %547
  %551 = load i64, ptr %23, align 8, !tbaa !9
  %552 = load i64, ptr %14, align 8, !tbaa !9
  %553 = icmp sle i64 %551, %552
  br i1 %553, label %554, label %759

554:                                              ; preds = %550
  %555 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %555, ptr %15, align 8, !tbaa !9
  %556 = load ptr, ptr %11, align 8, !tbaa !5
  %557 = load i64, ptr %15, align 8, !tbaa !9
  %558 = getelementptr inbounds %struct.complex, ptr %556, i64 %557
  %559 = getelementptr inbounds %struct.complex, ptr %558, i32 0, i32 0
  %560 = load float, ptr %559, align 4, !tbaa !13
  %561 = fcmp une float %560, 0.000000e+00
  br i1 %561, label %569, label %562

562:                                              ; preds = %554
  %563 = load ptr, ptr %11, align 8, !tbaa !5
  %564 = load i64, ptr %15, align 8, !tbaa !9
  %565 = getelementptr inbounds %struct.complex, ptr %563, i64 %564
  %566 = getelementptr inbounds %struct.complex, ptr %565, i32 0, i32 1
  %567 = load float, ptr %566, align 4, !tbaa !15
  %568 = fcmp une float %567, 0.000000e+00
  br i1 %568, label %569, label %731

569:                                              ; preds = %562, %554
  %570 = load ptr, ptr %11, align 8, !tbaa !5
  %571 = load i64, ptr %23, align 8, !tbaa !9
  %572 = getelementptr inbounds %struct.complex, ptr %570, i64 %571
  call void @r_cnjg(ptr noundef %21, ptr noundef %572)
  %573 = load ptr, ptr %10, align 8, !tbaa !5
  %574 = load float, ptr %573, align 4, !tbaa !11
  %575 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %576 = load float, ptr %575, align 4, !tbaa !13
  %577 = fmul float %574, %576
  %578 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %577, ptr %578, align 4, !tbaa !13
  %579 = load ptr, ptr %10, align 8, !tbaa !5
  %580 = load float, ptr %579, align 4, !tbaa !11
  %581 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %582 = load float, ptr %581, align 4, !tbaa !15
  %583 = fmul float %580, %582
  %584 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %583, ptr %584, align 4, !tbaa !15
  %585 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %586 = load float, ptr %585, align 4, !tbaa !13
  %587 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  store float %586, ptr %587, align 4, !tbaa !13
  %588 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %589 = load float, ptr %588, align 4, !tbaa !15
  %590 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  store float %589, ptr %590, align 4, !tbaa !15
  %591 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %591, ptr %15, align 8, !tbaa !9
  %592 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %592, ptr %16, align 8, !tbaa !9
  %593 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %593, ptr %17, align 8, !tbaa !9
  %594 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %595 = load float, ptr %594, align 4, !tbaa !13
  %596 = load ptr, ptr %11, align 8, !tbaa !5
  %597 = load i64, ptr %17, align 8, !tbaa !9
  %598 = getelementptr inbounds %struct.complex, ptr %596, i64 %597
  %599 = getelementptr inbounds %struct.complex, ptr %598, i32 0, i32 0
  %600 = load float, ptr %599, align 4, !tbaa !13
  %601 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %602 = load float, ptr %601, align 4, !tbaa !15
  %603 = load ptr, ptr %11, align 8, !tbaa !5
  %604 = load i64, ptr %17, align 8, !tbaa !9
  %605 = getelementptr inbounds %struct.complex, ptr %603, i64 %604
  %606 = getelementptr inbounds %struct.complex, ptr %605, i32 0, i32 1
  %607 = load float, ptr %606, align 4, !tbaa !15
  %608 = fmul float %602, %607
  %609 = fneg float %608
  %610 = call float @llvm.fmuladd.f32(float %595, float %600, float %609)
  %611 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %610, ptr %611, align 4, !tbaa !13
  %612 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %613 = load float, ptr %612, align 4, !tbaa !13
  %614 = load ptr, ptr %11, align 8, !tbaa !5
  %615 = load i64, ptr %17, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct.complex, ptr %614, i64 %615
  %617 = getelementptr inbounds %struct.complex, ptr %616, i32 0, i32 1
  %618 = load float, ptr %617, align 4, !tbaa !15
  %619 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %620 = load float, ptr %619, align 4, !tbaa !15
  %621 = load ptr, ptr %11, align 8, !tbaa !5
  %622 = load i64, ptr %17, align 8, !tbaa !9
  %623 = getelementptr inbounds %struct.complex, ptr %621, i64 %622
  %624 = getelementptr inbounds %struct.complex, ptr %623, i32 0, i32 0
  %625 = load float, ptr %624, align 4, !tbaa !13
  %626 = fmul float %620, %625
  %627 = call float @llvm.fmuladd.f32(float %613, float %618, float %626)
  %628 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %627, ptr %628, align 4, !tbaa !15
  %629 = load ptr, ptr %13, align 8, !tbaa !5
  %630 = load i64, ptr %16, align 8, !tbaa !9
  %631 = getelementptr inbounds %struct.complex, ptr %629, i64 %630
  %632 = getelementptr inbounds %struct.complex, ptr %631, i32 0, i32 0
  %633 = load float, ptr %632, align 4, !tbaa !13
  %634 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %635 = load float, ptr %634, align 4, !tbaa !13
  %636 = fadd float %633, %635
  store float %636, ptr %19, align 4, !tbaa !11
  %637 = load float, ptr %19, align 4, !tbaa !11
  %638 = load ptr, ptr %13, align 8, !tbaa !5
  %639 = load i64, ptr %15, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.complex, ptr %638, i64 %639
  %641 = getelementptr inbounds %struct.complex, ptr %640, i32 0, i32 0
  store float %637, ptr %641, align 4, !tbaa !13
  %642 = load ptr, ptr %13, align 8, !tbaa !5
  %643 = load i64, ptr %15, align 8, !tbaa !9
  %644 = getelementptr inbounds %struct.complex, ptr %642, i64 %643
  %645 = getelementptr inbounds %struct.complex, ptr %644, i32 0, i32 1
  store float 0.000000e+00, ptr %645, align 4, !tbaa !15
  %646 = load i64, ptr %25, align 8, !tbaa !9
  %647 = add nsw i64 %646, 1
  store i64 %647, ptr %24, align 8, !tbaa !9
  %648 = load ptr, ptr %9, align 8, !tbaa !5
  %649 = load i64, ptr %648, align 8, !tbaa !9
  store i64 %649, ptr %15, align 8, !tbaa !9
  %650 = load i64, ptr %23, align 8, !tbaa !9
  %651 = add nsw i64 %650, 1
  store i64 %651, ptr %22, align 8, !tbaa !9
  br label %652

652:                                              ; preds = %727, %569
  %653 = load i64, ptr %22, align 8, !tbaa !9
  %654 = load i64, ptr %15, align 8, !tbaa !9
  %655 = icmp sle i64 %653, %654
  br i1 %655, label %656, label %730

656:                                              ; preds = %652
  %657 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %657, ptr %16, align 8, !tbaa !9
  %658 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %658, ptr %17, align 8, !tbaa !9
  %659 = load i64, ptr %22, align 8, !tbaa !9
  store i64 %659, ptr %18, align 8, !tbaa !9
  %660 = load ptr, ptr %11, align 8, !tbaa !5
  %661 = load i64, ptr %18, align 8, !tbaa !9
  %662 = getelementptr inbounds %struct.complex, ptr %660, i64 %661
  %663 = getelementptr inbounds %struct.complex, ptr %662, i32 0, i32 0
  %664 = load float, ptr %663, align 4, !tbaa !13
  %665 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %666 = load float, ptr %665, align 4, !tbaa !13
  %667 = load ptr, ptr %11, align 8, !tbaa !5
  %668 = load i64, ptr %18, align 8, !tbaa !9
  %669 = getelementptr inbounds %struct.complex, ptr %667, i64 %668
  %670 = getelementptr inbounds %struct.complex, ptr %669, i32 0, i32 1
  %671 = load float, ptr %670, align 4, !tbaa !15
  %672 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %673 = load float, ptr %672, align 4, !tbaa !15
  %674 = fmul float %671, %673
  %675 = fneg float %674
  %676 = call float @llvm.fmuladd.f32(float %664, float %666, float %675)
  %677 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  store float %676, ptr %677, align 4, !tbaa !13
  %678 = load ptr, ptr %11, align 8, !tbaa !5
  %679 = load i64, ptr %18, align 8, !tbaa !9
  %680 = getelementptr inbounds %struct.complex, ptr %678, i64 %679
  %681 = getelementptr inbounds %struct.complex, ptr %680, i32 0, i32 0
  %682 = load float, ptr %681, align 4, !tbaa !13
  %683 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %684 = load float, ptr %683, align 4, !tbaa !15
  %685 = load ptr, ptr %11, align 8, !tbaa !5
  %686 = load i64, ptr %18, align 8, !tbaa !9
  %687 = getelementptr inbounds %struct.complex, ptr %685, i64 %686
  %688 = getelementptr inbounds %struct.complex, ptr %687, i32 0, i32 1
  %689 = load float, ptr %688, align 4, !tbaa !15
  %690 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %691 = load float, ptr %690, align 4, !tbaa !13
  %692 = fmul float %689, %691
  %693 = call float @llvm.fmuladd.f32(float %682, float %684, float %692)
  %694 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  store float %693, ptr %694, align 4, !tbaa !15
  %695 = load ptr, ptr %13, align 8, !tbaa !5
  %696 = load i64, ptr %17, align 8, !tbaa !9
  %697 = getelementptr inbounds %struct.complex, ptr %695, i64 %696
  %698 = getelementptr inbounds %struct.complex, ptr %697, i32 0, i32 0
  %699 = load float, ptr %698, align 4, !tbaa !13
  %700 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %701 = load float, ptr %700, align 4, !tbaa !13
  %702 = fadd float %699, %701
  %703 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %702, ptr %703, align 4, !tbaa !13
  %704 = load ptr, ptr %13, align 8, !tbaa !5
  %705 = load i64, ptr %17, align 8, !tbaa !9
  %706 = getelementptr inbounds %struct.complex, ptr %704, i64 %705
  %707 = getelementptr inbounds %struct.complex, ptr %706, i32 0, i32 1
  %708 = load float, ptr %707, align 4, !tbaa !15
  %709 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %710 = load float, ptr %709, align 4, !tbaa !15
  %711 = fadd float %708, %710
  %712 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %711, ptr %712, align 4, !tbaa !15
  %713 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %714 = load float, ptr %713, align 4, !tbaa !13
  %715 = load ptr, ptr %13, align 8, !tbaa !5
  %716 = load i64, ptr %16, align 8, !tbaa !9
  %717 = getelementptr inbounds %struct.complex, ptr %715, i64 %716
  %718 = getelementptr inbounds %struct.complex, ptr %717, i32 0, i32 0
  store float %714, ptr %718, align 4, !tbaa !13
  %719 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %720 = load float, ptr %719, align 4, !tbaa !15
  %721 = load ptr, ptr %13, align 8, !tbaa !5
  %722 = load i64, ptr %16, align 8, !tbaa !9
  %723 = getelementptr inbounds %struct.complex, ptr %721, i64 %722
  %724 = getelementptr inbounds %struct.complex, ptr %723, i32 0, i32 1
  store float %720, ptr %724, align 4, !tbaa !15
  %725 = load i64, ptr %24, align 8, !tbaa !9
  %726 = add nsw i64 %725, 1
  store i64 %726, ptr %24, align 8, !tbaa !9
  br label %727

727:                                              ; preds = %656
  %728 = load i64, ptr %22, align 8, !tbaa !9
  %729 = add nsw i64 %728, 1
  store i64 %729, ptr %22, align 8, !tbaa !9
  br label %652, !llvm.loop !21

730:                                              ; preds = %652
  br label %748

731:                                              ; preds = %562
  %732 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %732, ptr %15, align 8, !tbaa !9
  %733 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %733, ptr %16, align 8, !tbaa !9
  %734 = load ptr, ptr %13, align 8, !tbaa !5
  %735 = load i64, ptr %16, align 8, !tbaa !9
  %736 = getelementptr inbounds %struct.complex, ptr %734, i64 %735
  %737 = getelementptr inbounds %struct.complex, ptr %736, i32 0, i32 0
  %738 = load float, ptr %737, align 4, !tbaa !13
  store float %738, ptr %19, align 4, !tbaa !11
  %739 = load float, ptr %19, align 4, !tbaa !11
  %740 = load ptr, ptr %13, align 8, !tbaa !5
  %741 = load i64, ptr %15, align 8, !tbaa !9
  %742 = getelementptr inbounds %struct.complex, ptr %740, i64 %741
  %743 = getelementptr inbounds %struct.complex, ptr %742, i32 0, i32 0
  store float %739, ptr %743, align 4, !tbaa !13
  %744 = load ptr, ptr %13, align 8, !tbaa !5
  %745 = load i64, ptr %15, align 8, !tbaa !9
  %746 = getelementptr inbounds %struct.complex, ptr %744, i64 %745
  %747 = getelementptr inbounds %struct.complex, ptr %746, i32 0, i32 1
  store float 0.000000e+00, ptr %747, align 4, !tbaa !15
  br label %748

748:                                              ; preds = %731, %730
  %749 = load i64, ptr %25, align 8, !tbaa !9
  %750 = load ptr, ptr %9, align 8, !tbaa !5
  %751 = load i64, ptr %750, align 8, !tbaa !9
  %752 = add nsw i64 %749, %751
  %753 = load i64, ptr %23, align 8, !tbaa !9
  %754 = sub nsw i64 %752, %753
  %755 = add nsw i64 %754, 1
  store i64 %755, ptr %25, align 8, !tbaa !9
  br label %756

756:                                              ; preds = %748
  %757 = load i64, ptr %23, align 8, !tbaa !9
  %758 = add nsw i64 %757, 1
  store i64 %758, ptr %23, align 8, !tbaa !9
  br label %550, !llvm.loop !22

759:                                              ; preds = %550
  br label %983

760:                                              ; preds = %543
  %761 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %761, ptr %27, align 8, !tbaa !9
  %762 = load ptr, ptr %9, align 8, !tbaa !5
  %763 = load i64, ptr %762, align 8, !tbaa !9
  store i64 %763, ptr %14, align 8, !tbaa !9
  store i64 1, ptr %23, align 8, !tbaa !9
  br label %764

764:                                              ; preds = %979, %760
  %765 = load i64, ptr %23, align 8, !tbaa !9
  %766 = load i64, ptr %14, align 8, !tbaa !9
  %767 = icmp sle i64 %765, %766
  br i1 %767, label %768, label %982

768:                                              ; preds = %764
  %769 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %769, ptr %15, align 8, !tbaa !9
  %770 = load ptr, ptr %11, align 8, !tbaa !5
  %771 = load i64, ptr %15, align 8, !tbaa !9
  %772 = getelementptr inbounds %struct.complex, ptr %770, i64 %771
  %773 = getelementptr inbounds %struct.complex, ptr %772, i32 0, i32 0
  %774 = load float, ptr %773, align 4, !tbaa !13
  %775 = fcmp une float %774, 0.000000e+00
  br i1 %775, label %783, label %776

776:                                              ; preds = %768
  %777 = load ptr, ptr %11, align 8, !tbaa !5
  %778 = load i64, ptr %15, align 8, !tbaa !9
  %779 = getelementptr inbounds %struct.complex, ptr %777, i64 %778
  %780 = getelementptr inbounds %struct.complex, ptr %779, i32 0, i32 1
  %781 = load float, ptr %780, align 4, !tbaa !15
  %782 = fcmp une float %781, 0.000000e+00
  br i1 %782, label %783, label %950

783:                                              ; preds = %776, %768
  %784 = load ptr, ptr %11, align 8, !tbaa !5
  %785 = load i64, ptr %27, align 8, !tbaa !9
  %786 = getelementptr inbounds %struct.complex, ptr %784, i64 %785
  call void @r_cnjg(ptr noundef %21, ptr noundef %786)
  %787 = load ptr, ptr %10, align 8, !tbaa !5
  %788 = load float, ptr %787, align 4, !tbaa !11
  %789 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %790 = load float, ptr %789, align 4, !tbaa !13
  %791 = fmul float %788, %790
  %792 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %791, ptr %792, align 4, !tbaa !13
  %793 = load ptr, ptr %10, align 8, !tbaa !5
  %794 = load float, ptr %793, align 4, !tbaa !11
  %795 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %796 = load float, ptr %795, align 4, !tbaa !15
  %797 = fmul float %794, %796
  %798 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %797, ptr %798, align 4, !tbaa !15
  %799 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %800 = load float, ptr %799, align 4, !tbaa !13
  %801 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  store float %800, ptr %801, align 4, !tbaa !13
  %802 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %803 = load float, ptr %802, align 4, !tbaa !15
  %804 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  store float %803, ptr %804, align 4, !tbaa !15
  %805 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %805, ptr %15, align 8, !tbaa !9
  %806 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %806, ptr %16, align 8, !tbaa !9
  %807 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %807, ptr %17, align 8, !tbaa !9
  %808 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %809 = load float, ptr %808, align 4, !tbaa !13
  %810 = load ptr, ptr %11, align 8, !tbaa !5
  %811 = load i64, ptr %17, align 8, !tbaa !9
  %812 = getelementptr inbounds %struct.complex, ptr %810, i64 %811
  %813 = getelementptr inbounds %struct.complex, ptr %812, i32 0, i32 0
  %814 = load float, ptr %813, align 4, !tbaa !13
  %815 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %816 = load float, ptr %815, align 4, !tbaa !15
  %817 = load ptr, ptr %11, align 8, !tbaa !5
  %818 = load i64, ptr %17, align 8, !tbaa !9
  %819 = getelementptr inbounds %struct.complex, ptr %817, i64 %818
  %820 = getelementptr inbounds %struct.complex, ptr %819, i32 0, i32 1
  %821 = load float, ptr %820, align 4, !tbaa !15
  %822 = fmul float %816, %821
  %823 = fneg float %822
  %824 = call float @llvm.fmuladd.f32(float %809, float %814, float %823)
  %825 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %824, ptr %825, align 4, !tbaa !13
  %826 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %827 = load float, ptr %826, align 4, !tbaa !13
  %828 = load ptr, ptr %11, align 8, !tbaa !5
  %829 = load i64, ptr %17, align 8, !tbaa !9
  %830 = getelementptr inbounds %struct.complex, ptr %828, i64 %829
  %831 = getelementptr inbounds %struct.complex, ptr %830, i32 0, i32 1
  %832 = load float, ptr %831, align 4, !tbaa !15
  %833 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %834 = load float, ptr %833, align 4, !tbaa !15
  %835 = load ptr, ptr %11, align 8, !tbaa !5
  %836 = load i64, ptr %17, align 8, !tbaa !9
  %837 = getelementptr inbounds %struct.complex, ptr %835, i64 %836
  %838 = getelementptr inbounds %struct.complex, ptr %837, i32 0, i32 0
  %839 = load float, ptr %838, align 4, !tbaa !13
  %840 = fmul float %834, %839
  %841 = call float @llvm.fmuladd.f32(float %827, float %832, float %840)
  %842 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %841, ptr %842, align 4, !tbaa !15
  %843 = load ptr, ptr %13, align 8, !tbaa !5
  %844 = load i64, ptr %16, align 8, !tbaa !9
  %845 = getelementptr inbounds %struct.complex, ptr %843, i64 %844
  %846 = getelementptr inbounds %struct.complex, ptr %845, i32 0, i32 0
  %847 = load float, ptr %846, align 4, !tbaa !13
  %848 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %849 = load float, ptr %848, align 4, !tbaa !13
  %850 = fadd float %847, %849
  store float %850, ptr %19, align 4, !tbaa !11
  %851 = load float, ptr %19, align 4, !tbaa !11
  %852 = load ptr, ptr %13, align 8, !tbaa !5
  %853 = load i64, ptr %15, align 8, !tbaa !9
  %854 = getelementptr inbounds %struct.complex, ptr %852, i64 %853
  %855 = getelementptr inbounds %struct.complex, ptr %854, i32 0, i32 0
  store float %851, ptr %855, align 4, !tbaa !13
  %856 = load ptr, ptr %13, align 8, !tbaa !5
  %857 = load i64, ptr %15, align 8, !tbaa !9
  %858 = getelementptr inbounds %struct.complex, ptr %856, i64 %857
  %859 = getelementptr inbounds %struct.complex, ptr %858, i32 0, i32 1
  store float 0.000000e+00, ptr %859, align 4, !tbaa !15
  %860 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %860, ptr %26, align 8, !tbaa !9
  %861 = load i64, ptr %25, align 8, !tbaa !9
  %862 = load ptr, ptr %9, align 8, !tbaa !5
  %863 = load i64, ptr %862, align 8, !tbaa !9
  %864 = add nsw i64 %861, %863
  %865 = load i64, ptr %23, align 8, !tbaa !9
  %866 = sub nsw i64 %864, %865
  store i64 %866, ptr %15, align 8, !tbaa !9
  %867 = load i64, ptr %25, align 8, !tbaa !9
  %868 = add nsw i64 %867, 1
  store i64 %868, ptr %24, align 8, !tbaa !9
  br label %869

869:                                              ; preds = %946, %783
  %870 = load i64, ptr %24, align 8, !tbaa !9
  %871 = load i64, ptr %15, align 8, !tbaa !9
  %872 = icmp sle i64 %870, %871
  br i1 %872, label %873, label %949

873:                                              ; preds = %869
  %874 = load ptr, ptr %12, align 8, !tbaa !5
  %875 = load i64, ptr %874, align 8, !tbaa !9
  %876 = load i64, ptr %26, align 8, !tbaa !9
  %877 = add nsw i64 %876, %875
  store i64 %877, ptr %26, align 8, !tbaa !9
  %878 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %878, ptr %16, align 8, !tbaa !9
  %879 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %879, ptr %17, align 8, !tbaa !9
  %880 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %880, ptr %18, align 8, !tbaa !9
  %881 = load ptr, ptr %11, align 8, !tbaa !5
  %882 = load i64, ptr %18, align 8, !tbaa !9
  %883 = getelementptr inbounds %struct.complex, ptr %881, i64 %882
  %884 = getelementptr inbounds %struct.complex, ptr %883, i32 0, i32 0
  %885 = load float, ptr %884, align 4, !tbaa !13
  %886 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %887 = load float, ptr %886, align 4, !tbaa !13
  %888 = load ptr, ptr %11, align 8, !tbaa !5
  %889 = load i64, ptr %18, align 8, !tbaa !9
  %890 = getelementptr inbounds %struct.complex, ptr %888, i64 %889
  %891 = getelementptr inbounds %struct.complex, ptr %890, i32 0, i32 1
  %892 = load float, ptr %891, align 4, !tbaa !15
  %893 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %894 = load float, ptr %893, align 4, !tbaa !15
  %895 = fmul float %892, %894
  %896 = fneg float %895
  %897 = call float @llvm.fmuladd.f32(float %885, float %887, float %896)
  %898 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  store float %897, ptr %898, align 4, !tbaa !13
  %899 = load ptr, ptr %11, align 8, !tbaa !5
  %900 = load i64, ptr %18, align 8, !tbaa !9
  %901 = getelementptr inbounds %struct.complex, ptr %899, i64 %900
  %902 = getelementptr inbounds %struct.complex, ptr %901, i32 0, i32 0
  %903 = load float, ptr %902, align 4, !tbaa !13
  %904 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 1
  %905 = load float, ptr %904, align 4, !tbaa !15
  %906 = load ptr, ptr %11, align 8, !tbaa !5
  %907 = load i64, ptr %18, align 8, !tbaa !9
  %908 = getelementptr inbounds %struct.complex, ptr %906, i64 %907
  %909 = getelementptr inbounds %struct.complex, ptr %908, i32 0, i32 1
  %910 = load float, ptr %909, align 4, !tbaa !15
  %911 = getelementptr inbounds %struct.complex, ptr %30, i32 0, i32 0
  %912 = load float, ptr %911, align 4, !tbaa !13
  %913 = fmul float %910, %912
  %914 = call float @llvm.fmuladd.f32(float %903, float %905, float %913)
  %915 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  store float %914, ptr %915, align 4, !tbaa !15
  %916 = load ptr, ptr %13, align 8, !tbaa !5
  %917 = load i64, ptr %17, align 8, !tbaa !9
  %918 = getelementptr inbounds %struct.complex, ptr %916, i64 %917
  %919 = getelementptr inbounds %struct.complex, ptr %918, i32 0, i32 0
  %920 = load float, ptr %919, align 4, !tbaa !13
  %921 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 0
  %922 = load float, ptr %921, align 4, !tbaa !13
  %923 = fadd float %920, %922
  %924 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  store float %923, ptr %924, align 4, !tbaa !13
  %925 = load ptr, ptr %13, align 8, !tbaa !5
  %926 = load i64, ptr %17, align 8, !tbaa !9
  %927 = getelementptr inbounds %struct.complex, ptr %925, i64 %926
  %928 = getelementptr inbounds %struct.complex, ptr %927, i32 0, i32 1
  %929 = load float, ptr %928, align 4, !tbaa !15
  %930 = getelementptr inbounds %struct.complex, ptr %21, i32 0, i32 1
  %931 = load float, ptr %930, align 4, !tbaa !15
  %932 = fadd float %929, %931
  %933 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  store float %932, ptr %933, align 4, !tbaa !15
  %934 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 0
  %935 = load float, ptr %934, align 4, !tbaa !13
  %936 = load ptr, ptr %13, align 8, !tbaa !5
  %937 = load i64, ptr %16, align 8, !tbaa !9
  %938 = getelementptr inbounds %struct.complex, ptr %936, i64 %937
  %939 = getelementptr inbounds %struct.complex, ptr %938, i32 0, i32 0
  store float %935, ptr %939, align 4, !tbaa !13
  %940 = getelementptr inbounds %struct.complex, ptr %20, i32 0, i32 1
  %941 = load float, ptr %940, align 4, !tbaa !15
  %942 = load ptr, ptr %13, align 8, !tbaa !5
  %943 = load i64, ptr %16, align 8, !tbaa !9
  %944 = getelementptr inbounds %struct.complex, ptr %942, i64 %943
  %945 = getelementptr inbounds %struct.complex, ptr %944, i32 0, i32 1
  store float %941, ptr %945, align 4, !tbaa !15
  br label %946

946:                                              ; preds = %873
  %947 = load i64, ptr %24, align 8, !tbaa !9
  %948 = add nsw i64 %947, 1
  store i64 %948, ptr %24, align 8, !tbaa !9
  br label %869, !llvm.loop !23

949:                                              ; preds = %869
  br label %967

950:                                              ; preds = %776
  %951 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %951, ptr %15, align 8, !tbaa !9
  %952 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %952, ptr %16, align 8, !tbaa !9
  %953 = load ptr, ptr %13, align 8, !tbaa !5
  %954 = load i64, ptr %16, align 8, !tbaa !9
  %955 = getelementptr inbounds %struct.complex, ptr %953, i64 %954
  %956 = getelementptr inbounds %struct.complex, ptr %955, i32 0, i32 0
  %957 = load float, ptr %956, align 4, !tbaa !13
  store float %957, ptr %19, align 4, !tbaa !11
  %958 = load float, ptr %19, align 4, !tbaa !11
  %959 = load ptr, ptr %13, align 8, !tbaa !5
  %960 = load i64, ptr %15, align 8, !tbaa !9
  %961 = getelementptr inbounds %struct.complex, ptr %959, i64 %960
  %962 = getelementptr inbounds %struct.complex, ptr %961, i32 0, i32 0
  store float %958, ptr %962, align 4, !tbaa !13
  %963 = load ptr, ptr %13, align 8, !tbaa !5
  %964 = load i64, ptr %15, align 8, !tbaa !9
  %965 = getelementptr inbounds %struct.complex, ptr %963, i64 %964
  %966 = getelementptr inbounds %struct.complex, ptr %965, i32 0, i32 1
  store float 0.000000e+00, ptr %966, align 4, !tbaa !15
  br label %967

967:                                              ; preds = %950, %949
  %968 = load ptr, ptr %12, align 8, !tbaa !5
  %969 = load i64, ptr %968, align 8, !tbaa !9
  %970 = load i64, ptr %27, align 8, !tbaa !9
  %971 = add nsw i64 %970, %969
  store i64 %971, ptr %27, align 8, !tbaa !9
  %972 = load i64, ptr %25, align 8, !tbaa !9
  %973 = load ptr, ptr %9, align 8, !tbaa !5
  %974 = load i64, ptr %973, align 8, !tbaa !9
  %975 = add nsw i64 %972, %974
  %976 = load i64, ptr %23, align 8, !tbaa !9
  %977 = sub nsw i64 %975, %976
  %978 = add nsw i64 %977, 1
  store i64 %978, ptr %25, align 8, !tbaa !9
  br label %979

979:                                              ; preds = %967
  %980 = load i64, ptr %23, align 8, !tbaa !9
  %981 = add nsw i64 %980, 1
  store i64 %981, ptr %23, align 8, !tbaa !9
  br label %764, !llvm.loop !24

982:                                              ; preds = %764
  br label %983

983:                                              ; preds = %982, %759
  br label %984

984:                                              ; preds = %983, %542
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %985

985:                                              ; preds = %984, %69, %59
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  %986 = load i32, ptr %7, align 4
  ret i32 %986
}

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !12, i64 0}
!14 = !{!"", !12, i64 0, !12, i64 4}
!15 = !{!14, !12, i64 4}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !17}


; 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.complex = type { float, float }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @f2c_chpr(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef %5) local_unnamed_addr #0 {
  %7 = alloca %struct.complex, align 8
  %8 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %9 = getelementptr inbounds i8, ptr %5, i64 -8
  %10 = getelementptr inbounds i8, ptr %3, i64 -8
  %11 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not = icmp eq i64 %11, 0
  br i1 %.not, label %12, label %15

12:                                               ; preds = %6
  %13 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not375 = icmp eq i64 %13, 0
  br i1 %.not375, label %14, label %15

14:                                               ; preds = %12
  store i64 1, ptr %8, align 8, !tbaa !5
  br label %.thread

15:                                               ; preds = %12, %6
  %16 = load i64, ptr %1, align 8, !tbaa !5
  %17 = icmp slt i64 %16, 0
  br i1 %17, label %18, label %19

18:                                               ; preds = %15
  store i64 2, ptr %8, align 8, !tbaa !5
  br label %.thread

19:                                               ; preds = %15
  %20 = load i64, ptr %4, align 8, !tbaa !5
  %21 = icmp eq i64 %20, 0
  br i1 %21, label %22, label %24

22:                                               ; preds = %19
  store i64 5, ptr %8, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %14, %22, %18
  %23 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %8) #5
  br label %.loopexit388

24:                                               ; preds = %19
  %25 = icmp eq i64 %16, 0
  br i1 %25, label %.loopexit388, label %26

26:                                               ; preds = %24
  %27 = load float, ptr %2, align 4, !tbaa !9
  %28 = fcmp oeq float %27, 0.000000e+00
  br i1 %28, label %.loopexit388, label %29

29:                                               ; preds = %26
  %30 = icmp slt i64 %20, 1
  %31 = add nsw i64 %16, -1
  %32 = mul nsw i64 %20, %31
  %33 = sub nsw i64 1, %32
  %.0 = select i1 %30, i64 %33, i64 1
  %34 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not378 = icmp eq i64 %34, 0
  %35 = load i64, ptr %4, align 8, !tbaa !5
  %36 = icmp eq i64 %35, 1
  %37 = load i64, ptr %1, align 8, !tbaa !5
  %.not381440 = icmp slt i64 %37, 1
  br i1 %.not378, label %209, label %38

38:                                               ; preds = %29
  br i1 %36, label %39, label %120

39:                                               ; preds = %38
  br i1 %.not381440, label %.loopexit388, label %.lr.ph416

.lr.ph416:                                        ; preds = %39
  %40 = add nuw i64 %37, 1
  %scevgep522 = getelementptr i8, ptr %5, i64 4
  %scevgep529 = getelementptr i8, ptr %5, i64 -4
  %scevgep535 = getelementptr i8, ptr %3, i64 4
  %invariant.gep727 = getelementptr i8, ptr %3, i64 -4
  br label %41

41:                                               ; preds = %.lr.ph416, %114
  %scev.check.iv533 = phi ptr [ %5, %.lr.ph416 ], [ %scevgep534, %114 ]
  %scev.check.iv530 = phi ptr [ %scevgep529, %.lr.ph416 ], [ %scevgep531, %114 ]
  %scev.check.iv523 = phi ptr [ %scevgep522, %.lr.ph416 ], [ %scevgep524, %114 ]
  %scev.check.iv = phi ptr [ %5, %.lr.ph416 ], [ %scevgep518, %114 ]
  %indvar516 = phi i64 [ 0, %.lr.ph416 ], [ %indvar.next517, %114 ]
  %indvars.iv457 = phi i64 [ 1, %.lr.ph416 ], [ %indvars.iv.next458, %114 ]
  %indvars.iv = phi i64 [ 2, %.lr.ph416 ], [ %indvars.iv.next, %114 ]
  %.0359414 = phi i64 [ 1, %.lr.ph416 ], [ %118, %114 ]
  %.0365413 = phi i64 [ 1, %.lr.ph416 ], [ %119, %114 ]
  %42 = shl i64 %indvar516, 3
  %43 = add i64 %42, 16
  %44 = shl i64 %indvar516, 3
  %45 = add i64 %44, 16
  %gep728 = getelementptr i8, ptr %invariant.gep727, i64 %44
  %scevgep536 = getelementptr i8, ptr %3, i64 %44
  %46 = shl i64 %indvar516, 3
  %47 = add i64 %46, 8
  %48 = shl i64 %indvar516, 3
  %49 = add i64 %48, 8
  %50 = add i64 %indvar516, -1
  %51 = getelementptr inbounds %struct.complex, ptr %10, i64 %.0365413
  %52 = load float, ptr %51, align 4, !tbaa !11
  %53 = fcmp une float %52, 0.000000e+00
  br i1 %53, label %58, label %54

54:                                               ; preds = %41
  %55 = getelementptr inbounds i8, ptr %51, i64 4
  %56 = load float, ptr %55, align 4, !tbaa !13
  %57 = fcmp une float %56, 0.000000e+00
  br i1 %57, label %58, label %114

58:                                               ; preds = %54, %41
  call void @r_cnjg(ptr noundef nonnull %7, ptr noundef nonnull %51) #5
  %59 = load float, ptr %2, align 4, !tbaa !9
  %60 = load <2 x float>, ptr %7, align 8, !tbaa !9
  %61 = insertelement <2 x float> poison, float %59, i64 0
  %62 = shufflevector <2 x float> %61, <2 x float> poison, <2 x i32> zeroinitializer
  %63 = fmul <2 x float> %62, %60
  %.not386.not404 = icmp ugt i64 %.0365413, 1
  br i1 %.not386.not404, label %.lr.ph408.preheader, label %100

.lr.ph408.preheader:                              ; preds = %58
  %min.iters.check546 = icmp ult i64 %indvar516, 8
  br i1 %min.iters.check546, label %.lr.ph408.preheader704, label %vector.scevcheck515

vector.scevcheck515:                              ; preds = %.lr.ph408.preheader
  %mul.result520 = shl i64 %50, 3
  %64 = getelementptr i8, ptr %scev.check.iv, i64 %mul.result520
  %65 = icmp ult ptr %64, %scev.check.iv
  %mul.result526 = shl i64 %50, 3
  %mul.overflow527 = icmp ugt i64 %50, 2305843009213693951
  %66 = getelementptr i8, ptr %scev.check.iv523, i64 %mul.result526
  %67 = icmp ult ptr %66, %scev.check.iv523
  %68 = or i1 %67, %mul.overflow527
  %69 = or i1 %65, %68
  br i1 %69, label %.lr.ph408.preheader704, label %vector.memcheck528

vector.memcheck528:                               ; preds = %vector.scevcheck515
  %bound0537 = icmp ult ptr %scev.check.iv, %gep728
  %bound1538 = icmp ugt ptr %scev.check.iv530, %3
  %found.conflict539 = and i1 %bound0537, %bound1538
  %bound0540 = icmp ult ptr %scev.check.iv523, %scevgep536
  %bound1541 = icmp ult ptr %scevgep535, %scev.check.iv533
  %found.conflict542 = and i1 %bound0540, %bound1541
  %conflict.rdx543 = or i1 %found.conflict539, %found.conflict542
  br i1 %conflict.rdx543, label %.lr.ph408.preheader704, label %vector.ph547

vector.ph547:                                     ; preds = %vector.memcheck528
  %n.vec549 = and i64 %indvar516, 4611686018427387900
  %ind.end550 = add nuw i64 %.0359414, %n.vec549
  %ind.end552 = or disjoint i64 %n.vec549, 1
  %broadcast.splat562 = shufflevector <2 x float> %63, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat564 = shufflevector <2 x float> %63, <2 x float> poison, <4 x i32> zeroinitializer
  %70 = getelementptr %struct.complex, ptr %9, i64 %.0359414
  br label %vector.body554

vector.body554:                                   ; preds = %vector.body554, %vector.ph547
  %index555 = phi i64 [ 0, %vector.ph547 ], [ %index.next569, %vector.body554 ]
  %71 = getelementptr %struct.complex, ptr %3, i64 %index555
  %wide.vec558 = load <8 x float>, ptr %71, align 4, !tbaa !9
  %strided.vec559 = shufflevector <8 x float> %wide.vec558, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec560 = shufflevector <8 x float> %wide.vec558, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %72 = fneg <4 x float> %strided.vec560
  %73 = fmul <4 x float> %broadcast.splat562, %72
  %74 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec559, <4 x float> %broadcast.splat564, <4 x float> %73)
  %75 = fmul <4 x float> %broadcast.splat564, %strided.vec560
  %76 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec559, <4 x float> %broadcast.splat562, <4 x float> %75)
  %77 = getelementptr %struct.complex, ptr %70, i64 %index555
  %wide.vec565 = load <8 x float>, ptr %77, align 4, !tbaa !9
  %strided.vec566 = shufflevector <8 x float> %wide.vec565, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec567 = shufflevector <8 x float> %wide.vec565, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %78 = fadd <4 x float> %74, %strided.vec566
  %79 = fadd <4 x float> %76, %strided.vec567
  %interleaved.vec568 = shufflevector <4 x float> %78, <4 x float> %79, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec568, ptr %77, align 4, !tbaa !9
  %index.next569 = add nuw i64 %index555, 4
  %80 = icmp eq i64 %index.next569, %n.vec549
  br i1 %80, label %middle.block544, label %vector.body554, !llvm.loop !14

middle.block544:                                  ; preds = %vector.body554
  %cmp.n570 = icmp eq i64 %indvar516, %n.vec549
  %81 = shufflevector <4 x float> %74, <4 x float> %76, <2 x i32> <i32 3, i32 7>
  br i1 %cmp.n570, label %._crit_edge409, label %.lr.ph408.preheader704

.lr.ph408.preheader704:                           ; preds = %middle.block544, %vector.memcheck528, %vector.scevcheck515, %.lr.ph408.preheader
  %.0361406.ph = phi i64 [ %.0359414, %vector.memcheck528 ], [ %.0359414, %vector.scevcheck515 ], [ %.0359414, %.lr.ph408.preheader ], [ %ind.end550, %middle.block544 ]
  %.0369405.ph = phi i64 [ 1, %vector.memcheck528 ], [ 1, %vector.scevcheck515 ], [ 1, %.lr.ph408.preheader ], [ %ind.end552, %middle.block544 ]
  br label %.lr.ph408

.lr.ph408:                                        ; preds = %.lr.ph408.preheader704, %.lr.ph408
  %.0361406 = phi i64 [ %97, %.lr.ph408 ], [ %.0361406.ph, %.lr.ph408.preheader704 ]
  %.0369405 = phi i64 [ %98, %.lr.ph408 ], [ %.0369405.ph, %.lr.ph408.preheader704 ]
  %82 = getelementptr inbounds %struct.complex, ptr %10, i64 %.0369405
  %83 = load float, ptr %82, align 4, !tbaa !11
  %84 = getelementptr inbounds i8, ptr %82, i64 4
  %85 = load float, ptr %84, align 4, !tbaa !13
  %86 = fneg float %85
  %87 = insertelement <2 x float> poison, float %85, i64 0
  %88 = insertelement <2 x float> %87, float %86, i64 1
  %89 = fmul <2 x float> %63, %88
  %90 = shufflevector <2 x float> %89, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %91 = insertelement <2 x float> poison, float %83, i64 0
  %92 = shufflevector <2 x float> %91, <2 x float> poison, <2 x i32> zeroinitializer
  %93 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %92, <2 x float> %63, <2 x float> %90)
  %94 = getelementptr inbounds %struct.complex, ptr %9, i64 %.0361406
  %95 = load <2 x float>, ptr %94, align 4, !tbaa !9
  %96 = fadd <2 x float> %93, %95
  store <2 x float> %96, ptr %94, align 4, !tbaa !9
  %97 = add i64 %.0361406, 1
  %98 = add nuw nsw i64 %.0369405, 1
  %exitcond459.not = icmp eq i64 %97, %indvars.iv457
  br i1 %exitcond459.not, label %._crit_edge409, label %.lr.ph408, !llvm.loop !18

._crit_edge409:                                   ; preds = %.lr.ph408, %middle.block544
  %99 = phi <2 x float> [ %81, %middle.block544 ], [ %93, %.lr.ph408 ]
  store <2 x float> %99, ptr %7, align 8, !tbaa !9
  br label %100

100:                                              ; preds = %._crit_edge409, %58
  %101 = load float, ptr %51, align 4, !tbaa !11
  %102 = getelementptr inbounds i8, ptr %51, i64 4
  %103 = load float, ptr %102, align 4, !tbaa !13
  %104 = fneg float %103
  %105 = extractelement <2 x float> %63, i64 1
  %106 = fmul float %105, %104
  %107 = extractelement <2 x float> %63, i64 0
  %108 = call float @llvm.fmuladd.f32(float %101, float %107, float %106)
  %109 = getelementptr %struct.complex, ptr %9, i64 %.0359414
  %110 = getelementptr %struct.complex, ptr %109, i64 %.0365413
  %111 = getelementptr i8, ptr %110, i64 -8
  %112 = load float, ptr %111, align 4, !tbaa !11
  %113 = fadd float %112, %108
  store float %113, ptr %111, align 4, !tbaa !11
  br label %114

114:                                              ; preds = %54, %100
  %115 = getelementptr %struct.complex, ptr %9, i64 %.0359414
  %116 = getelementptr %struct.complex, ptr %115, i64 %.0365413
  %117 = getelementptr i8, ptr %116, i64 -4
  store float 0.000000e+00, ptr %117, align 4, !tbaa !13
  %118 = add nuw nsw i64 %.0359414, %.0365413
  %119 = add nuw nsw i64 %.0365413, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %indvars.iv.next458 = add i64 %indvars.iv457, %indvars.iv
  %exitcond460.not = icmp eq i64 %indvars.iv, %40
  %indvar.next517 = add i64 %indvar516, 1
  %scevgep518 = getelementptr i8, ptr %scev.check.iv, i64 %49
  %scevgep524 = getelementptr i8, ptr %scev.check.iv523, i64 %47
  %scevgep531 = getelementptr i8, ptr %scev.check.iv530, i64 %45
  %scevgep534 = getelementptr i8, ptr %scev.check.iv533, i64 %43
  br i1 %exitcond460.not, label %.loopexit388, label %41, !llvm.loop !19

120:                                              ; preds = %38
  br i1 %.not381440, label %.loopexit388, label %.lr.ph403

.lr.ph403:                                        ; preds = %120
  %scevgep = getelementptr i8, ptr %5, i64 -8
  %scevgep486 = getelementptr i8, ptr %5, i64 -4
  %scevgep491 = getelementptr i8, ptr %5, i64 -8
  %121 = shl i64 %.0, 3
  %122 = add i64 %121, -8
  %scevgep495 = getelementptr i8, ptr %3, i64 %122
  %scevgep497 = getelementptr i8, ptr %5, i64 -4
  %123 = getelementptr i8, ptr %3, i64 %121
  %scevgep501 = getelementptr i8, ptr %123, i64 -4
  %invariant.gep = getelementptr i8, ptr %5, i64 -12
  %124 = getelementptr i8, ptr %3, i64 %121
  %125 = getelementptr i8, ptr %124, i64 -12
  %invariant.gep725 = getelementptr i8, ptr %5, i64 -8
  %126 = getelementptr i8, ptr %3, i64 %122
  %127 = getelementptr %struct.complex, ptr %10, i64 %.0
  br label %128

128:                                              ; preds = %.lr.ph403, %205
  %indvar = phi i64 [ 0, %.lr.ph403 ], [ %indvar.next, %205 ]
  %129 = phi i64 [ %35, %.lr.ph403 ], [ %206, %205 ]
  %.0356401 = phi i64 [ %.0, %.lr.ph403 ], [ %207, %205 ]
  %.1360399 = phi i64 [ 1, %.lr.ph403 ], [ %.pre-phi, %205 ]
  %.1366398 = phi i64 [ 1, %.lr.ph403 ], [ %208, %205 ]
  %130 = shl i64 %indvar, 3
  %gep = getelementptr i8, ptr %invariant.gep, i64 %130
  %scevgep496 = getelementptr i8, ptr %125, i64 %130
  %gep726 = getelementptr i8, ptr %invariant.gep725, i64 %130
  %scevgep502 = getelementptr i8, ptr %126, i64 %130
  %131 = add i64 %indvar, -1
  %132 = getelementptr inbounds %struct.complex, ptr %10, i64 %.0356401
  %133 = load float, ptr %132, align 4, !tbaa !11
  %134 = fcmp une float %133, 0.000000e+00
  br i1 %134, label %139, label %135

135:                                              ; preds = %128
  %136 = getelementptr inbounds i8, ptr %132, i64 4
  %137 = load float, ptr %136, align 4, !tbaa !13
  %138 = fcmp une float %137, 0.000000e+00
  br i1 %138, label %139, label %201

139:                                              ; preds = %135, %128
  call void @r_cnjg(ptr noundef nonnull %7, ptr noundef nonnull %132) #5
  %140 = load float, ptr %2, align 4, !tbaa !9
  %141 = load <2 x float>, ptr %7, align 8, !tbaa !9
  %142 = insertelement <2 x float> poison, float %140, i64 0
  %143 = shufflevector <2 x float> %142, <2 x float> poison, <2 x i32> zeroinitializer
  %144 = fmul <2 x float> %143, %141
  %145 = add nuw nsw i64 %.1360399, %.1366398
  %146 = add nsw i64 %145, -2
  %.not384393 = icmp sgt i64 %.1360399, %146
  %.pre.pre = load i64, ptr %4, align 8, !tbaa !5
  br i1 %.not384393, label %187, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %139
  %min.iters.check = icmp ult i64 %indvar, 8
  br i1 %min.iters.check, label %.lr.ph.preheader709, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph.preheader
  %ident.check = icmp ne i64 %.pre.pre, 1
  %147 = shl i64 %.1360399, 3
  %scevgep485 = getelementptr i8, ptr %scevgep, i64 %147
  %mul.result = shl i64 %131, 3
  %mul.overflow = icmp ugt i64 %131, 2305843009213693951
  %148 = getelementptr i8, ptr %scevgep485, i64 %mul.result
  %149 = icmp ult ptr %148, %scevgep485
  %150 = or i1 %149, %mul.overflow
  %scevgep487 = getelementptr i8, ptr %scevgep486, i64 %147
  %mul.result489 = shl i64 %131, 3
  %151 = getelementptr i8, ptr %scevgep487, i64 %mul.result489
  %152 = icmp ult ptr %151, %scevgep487
  %153 = or i1 %ident.check, %150
  %154 = or i1 %152, %153
  br i1 %154, label %.lr.ph.preheader709, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %155 = shl i64 %.1360399, 3
  %scevgep492 = getelementptr i8, ptr %scevgep491, i64 %155
  %scevgep494 = getelementptr i8, ptr %gep, i64 %155
  %scevgep498 = getelementptr i8, ptr %scevgep497, i64 %155
  %scevgep500 = getelementptr i8, ptr %gep726, i64 %155
  %bound0 = icmp ult ptr %scevgep492, %scevgep496
  %bound1 = icmp ult ptr %scevgep495, %scevgep494
  %found.conflict = and i1 %bound0, %bound1
  %bound0503 = icmp ult ptr %scevgep498, %scevgep502
  %bound1504 = icmp ult ptr %scevgep501, %scevgep500
  %found.conflict505 = and i1 %bound0503, %bound1504
  %conflict.rdx = or i1 %found.conflict, %found.conflict505
  br i1 %conflict.rdx, label %.lr.ph.preheader709, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %indvar, 4611686018427387900
  %156 = mul nuw nsw i64 %n.vec, %.pre.pre
  %ind.end = add i64 %.0, %156
  %ind.end506 = add i64 %.1360399, %n.vec
  %broadcast.splat = shufflevector <2 x float> %144, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat511 = shufflevector <2 x float> %144, <2 x float> poison, <4 x i32> zeroinitializer
  %157 = getelementptr %struct.complex, ptr %9, i64 %.1360399
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %158 = getelementptr %struct.complex, ptr %127, i64 %index
  %wide.vec = load <8 x float>, ptr %158, align 4, !tbaa !9
  %strided.vec = shufflevector <8 x float> %wide.vec, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec509 = shufflevector <8 x float> %wide.vec, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %159 = fneg <4 x float> %strided.vec509
  %160 = fmul <4 x float> %broadcast.splat, %159
  %161 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec, <4 x float> %broadcast.splat511, <4 x float> %160)
  %162 = fmul <4 x float> %broadcast.splat511, %strided.vec509
  %163 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec, <4 x float> %broadcast.splat, <4 x float> %162)
  %164 = getelementptr %struct.complex, ptr %157, i64 %index
  %wide.vec512 = load <8 x float>, ptr %164, align 4, !tbaa !9
  %strided.vec513 = shufflevector <8 x float> %wide.vec512, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec514 = shufflevector <8 x float> %wide.vec512, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %165 = fadd <4 x float> %161, %strided.vec513
  %166 = fadd <4 x float> %163, %strided.vec514
  %interleaved.vec = shufflevector <4 x float> %165, <4 x float> %166, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec, ptr %164, align 4, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %167 = icmp eq i64 %index.next, %n.vec
  br i1 %167, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %indvar, %n.vec
  %168 = shufflevector <4 x float> %161, <4 x float> %163, <2 x i32> <i32 3, i32 7>
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader709

.lr.ph.preheader709:                              ; preds = %middle.block, %vector.memcheck, %vector.scevcheck, %.lr.ph.preheader
  %.0357395.ph = phi i64 [ %.0, %vector.memcheck ], [ %.0, %vector.scevcheck ], [ %.0, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.1362394.ph = phi i64 [ %.1360399, %vector.memcheck ], [ %.1360399, %vector.scevcheck ], [ %.1360399, %.lr.ph.preheader ], [ %ind.end506, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader709, %.lr.ph
  %.0357395 = phi i64 [ %184, %.lr.ph ], [ %.0357395.ph, %.lr.ph.preheader709 ]
  %.1362394 = phi i64 [ %185, %.lr.ph ], [ %.1362394.ph, %.lr.ph.preheader709 ]
  %169 = getelementptr inbounds %struct.complex, ptr %10, i64 %.0357395
  %170 = load float, ptr %169, align 4, !tbaa !11
  %171 = getelementptr inbounds i8, ptr %169, i64 4
  %172 = load float, ptr %171, align 4, !tbaa !13
  %173 = fneg float %172
  %174 = insertelement <2 x float> poison, float %172, i64 0
  %175 = insertelement <2 x float> %174, float %173, i64 1
  %176 = fmul <2 x float> %144, %175
  %177 = shufflevector <2 x float> %176, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %178 = insertelement <2 x float> poison, float %170, i64 0
  %179 = shufflevector <2 x float> %178, <2 x float> poison, <2 x i32> zeroinitializer
  %180 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %179, <2 x float> %144, <2 x float> %177)
  %181 = getelementptr inbounds %struct.complex, ptr %9, i64 %.1362394
  %182 = load <2 x float>, ptr %181, align 4, !tbaa !9
  %183 = fadd <2 x float> %180, %182
  store <2 x float> %183, ptr %181, align 4, !tbaa !9
  %184 = add nsw i64 %.pre.pre, %.0357395
  %185 = add nuw nsw i64 %.1362394, 1
  %.not384.not = icmp slt i64 %.1362394, %146
  br i1 %.not384.not, label %.lr.ph, label %._crit_edge, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph, %middle.block
  %186 = phi <2 x float> [ %168, %middle.block ], [ %180, %.lr.ph ]
  store <2 x float> %186, ptr %7, align 8, !tbaa !9
  br label %187

187:                                              ; preds = %._crit_edge, %139
  %188 = load float, ptr %132, align 4, !tbaa !11
  %189 = getelementptr inbounds i8, ptr %132, i64 4
  %190 = load float, ptr %189, align 4, !tbaa !13
  %191 = fneg float %190
  %192 = extractelement <2 x float> %144, i64 1
  %193 = fmul float %192, %191
  %194 = extractelement <2 x float> %144, i64 0
  %195 = call float @llvm.fmuladd.f32(float %188, float %194, float %193)
  %196 = getelementptr %struct.complex, ptr %9, i64 %145
  %197 = getelementptr i8, ptr %196, i64 -8
  %198 = load float, ptr %197, align 4, !tbaa !11
  %199 = fadd float %198, %195
  store float %199, ptr %197, align 4, !tbaa !11
  %200 = getelementptr i8, ptr %196, i64 -4
  store float 0.000000e+00, ptr %200, align 4, !tbaa !13
  br label %205

201:                                              ; preds = %135
  %202 = getelementptr %struct.complex, ptr %9, i64 %.1360399
  %203 = getelementptr %struct.complex, ptr %202, i64 %.1366398
  %204 = getelementptr i8, ptr %203, i64 -4
  store float 0.000000e+00, ptr %204, align 4, !tbaa !13
  %.pre = add nuw nsw i64 %.1360399, %.1366398
  br label %205

205:                                              ; preds = %201, %187
  %.pre-phi = phi i64 [ %.pre, %201 ], [ %145, %187 ]
  %206 = phi i64 [ %129, %201 ], [ %.pre.pre, %187 ]
  %207 = add nsw i64 %206, %.0356401
  %208 = add nuw i64 %.1366398, 1
  %exitcond.not = icmp eq i64 %.1366398, %37
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond.not, label %.loopexit388, label %128, !llvm.loop !22

209:                                              ; preds = %29
  br i1 %36, label %210, label %290

210:                                              ; preds = %209
  br i1 %.not381440, label %.loopexit388, label %.lr.ph446

.lr.ph446:                                        ; preds = %210
  %scevgep640 = getelementptr i8, ptr %5, i64 4
  %scevgep647 = getelementptr i8, ptr %5, i64 4
  %scevgep652 = getelementptr i8, ptr %5, i64 4
  %scevgep654 = getelementptr i8, ptr %5, i64 8
  %invariant.gep729 = getelementptr i8, ptr %3, i64 8
  %invariant.gep731 = getelementptr i8, ptr %3, i64 12
  br label %211

211:                                              ; preds = %.lr.ph446, %.loopexit
  %indvar634 = phi i64 [ 0, %.lr.ph446 ], [ %indvar.next635, %.loopexit ]
  %212 = phi i64 [ %37, %.lr.ph446 ], [ %286, %.loopexit ]
  %.2443 = phi i64 [ 1, %.lr.ph446 ], [ %288, %.loopexit ]
  %.2367441 = phi i64 [ 1, %.lr.ph446 ], [ %289, %.loopexit ]
  %213 = xor i64 %indvar634, -1
  %214 = shl i64 %indvar634, 3
  %gep730 = getelementptr i8, ptr %invariant.gep729, i64 %214
  %gep732 = getelementptr i8, ptr %invariant.gep731, i64 %214
  %215 = getelementptr i8, ptr %3, i64 %214
  %216 = getelementptr inbounds %struct.complex, ptr %10, i64 %.2367441
  %217 = load float, ptr %216, align 4, !tbaa !11
  %218 = fcmp une float %217, 0.000000e+00
  br i1 %218, label %223, label %219

219:                                              ; preds = %211
  %220 = getelementptr inbounds i8, ptr %216, i64 4
  %221 = load float, ptr %220, align 4, !tbaa !13
  %222 = fcmp une float %221, 0.000000e+00
  br i1 %222, label %223, label %283

223:                                              ; preds = %219, %211
  call void @r_cnjg(ptr noundef nonnull %7, ptr noundef nonnull %216) #5
  %224 = load float, ptr %2, align 4, !tbaa !9
  %225 = load <2 x float>, ptr %7, align 8, !tbaa !9
  %226 = insertelement <2 x float> poison, float %224, i64 0
  %227 = shufflevector <2 x float> %226, <2 x float> poison, <2 x i32> zeroinitializer
  %228 = fmul <2 x float> %227, %225
  %229 = load float, ptr %216, align 4, !tbaa !11
  %230 = getelementptr inbounds i8, ptr %216, i64 4
  %231 = load float, ptr %230, align 4, !tbaa !13
  %232 = extractelement <2 x float> %228, i64 1
  %233 = fneg float %232
  %234 = fmul float %231, %233
  %235 = extractelement <2 x float> %228, i64 0
  %236 = call float @llvm.fmuladd.f32(float %235, float %229, float %234)
  %237 = getelementptr inbounds %struct.complex, ptr %9, i64 %.2443
  %238 = load float, ptr %237, align 4, !tbaa !11
  %239 = fadd float %238, %236
  store float %239, ptr %237, align 4, !tbaa !11
  %240 = getelementptr inbounds i8, ptr %237, i64 4
  store float 0.000000e+00, ptr %240, align 4, !tbaa !13
  %241 = load i64, ptr %1, align 8, !tbaa !5
  %.not382.not433 = icmp slt i64 %.2367441, %241
  br i1 %.not382.not433, label %.lr.ph437.preheader, label %.loopexit

.lr.ph437.preheader:                              ; preds = %223
  %242 = add i64 %241, %213
  %min.iters.check667 = icmp ult i64 %242, 8
  br i1 %min.iters.check667, label %.lr.ph437.preheader696, label %vector.scevcheck633

vector.scevcheck633:                              ; preds = %.lr.ph437.preheader
  %reass.sub694 = sub i64 %241, %indvar634
  %243 = add i64 %reass.sub694, -2
  %244 = shl i64 %.2443, 3
  %scevgep636 = getelementptr i8, ptr %5, i64 %244
  %mul.result638 = shl i64 %243, 3
  %245 = getelementptr i8, ptr %scevgep636, i64 %mul.result638
  %246 = icmp ult ptr %245, %scevgep636
  %scevgep641 = getelementptr i8, ptr %scevgep640, i64 %244
  %mul.result643 = shl i64 %243, 3
  %mul.overflow644 = icmp ugt i64 %243, 2305843009213693951
  %247 = getelementptr i8, ptr %scevgep641, i64 %mul.result643
  %248 = icmp ult ptr %247, %scevgep641
  %249 = or i1 %248, %mul.overflow644
  %250 = or i1 %246, %249
  br i1 %250, label %.lr.ph437.preheader696, label %vector.memcheck645

vector.memcheck645:                               ; preds = %vector.scevcheck633
  %251 = shl i64 %.2443, 3
  %scevgep646 = getelementptr i8, ptr %5, i64 %251
  %reass.sub695 = sub i64 %241, %indvar634
  %252 = shl i64 %reass.sub695, 3
  %253 = add i64 %252, -16
  %254 = add i64 %251, %253
  %scevgep648 = getelementptr i8, ptr %scevgep647, i64 %254
  %scevgep651 = getelementptr i8, ptr %gep732, i64 %253
  %scevgep653 = getelementptr i8, ptr %scevgep652, i64 %251
  %scevgep655 = getelementptr i8, ptr %scevgep654, i64 %254
  %scevgep657 = getelementptr i8, ptr %215, i64 %252
  %bound0658 = icmp ult ptr %scevgep646, %scevgep651
  %bound1659 = icmp ult ptr %gep730, %scevgep648
  %found.conflict660 = and i1 %bound0658, %bound1659
  %bound0661 = icmp ult ptr %scevgep653, %scevgep657
  %bound1662 = icmp ult ptr %gep732, %scevgep655
  %found.conflict663 = and i1 %bound0661, %bound1662
  %conflict.rdx664 = or i1 %found.conflict660, %found.conflict663
  br i1 %conflict.rdx664, label %.lr.ph437.preheader696, label %vector.ph668

vector.ph668:                                     ; preds = %vector.memcheck645
  %n.vec670 = and i64 %242, -4
  %ind.end671 = add i64 %.2443, %n.vec670
  %ind.end673 = add i64 %.2367441, %n.vec670
  %broadcast.splat683 = shufflevector <2 x float> %228, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat685 = shufflevector <2 x float> %228, <2 x float> poison, <4 x i32> zeroinitializer
  %255 = getelementptr %struct.complex, ptr %3, i64 %.2367441
  %256 = getelementptr %struct.complex, ptr %5, i64 %.2443
  br label %vector.body675

vector.body675:                                   ; preds = %vector.body675, %vector.ph668
  %index676 = phi i64 [ 0, %vector.ph668 ], [ %index.next690, %vector.body675 ]
  %257 = getelementptr %struct.complex, ptr %255, i64 %index676
  %wide.vec679 = load <8 x float>, ptr %257, align 4, !tbaa !9
  %strided.vec680 = shufflevector <8 x float> %wide.vec679, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec681 = shufflevector <8 x float> %wide.vec679, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %258 = fneg <4 x float> %strided.vec681
  %259 = fmul <4 x float> %broadcast.splat683, %258
  %260 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec680, <4 x float> %broadcast.splat685, <4 x float> %259)
  %261 = fmul <4 x float> %broadcast.splat685, %strided.vec681
  %262 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec680, <4 x float> %broadcast.splat683, <4 x float> %261)
  %263 = getelementptr %struct.complex, ptr %256, i64 %index676
  %wide.vec686 = load <8 x float>, ptr %263, align 4, !tbaa !9
  %strided.vec687 = shufflevector <8 x float> %wide.vec686, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec688 = shufflevector <8 x float> %wide.vec686, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %264 = fadd <4 x float> %260, %strided.vec687
  %265 = fadd <4 x float> %262, %strided.vec688
  %interleaved.vec689 = shufflevector <4 x float> %264, <4 x float> %265, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec689, ptr %263, align 4, !tbaa !9
  %index.next690 = add nuw i64 %index676, 4
  %266 = icmp eq i64 %index.next690, %n.vec670
  br i1 %266, label %middle.block665, label %vector.body675, !llvm.loop !23

middle.block665:                                  ; preds = %vector.body675
  %cmp.n691 = icmp eq i64 %242, %n.vec670
  %267 = shufflevector <4 x float> %260, <4 x float> %262, <2 x i32> <i32 3, i32 7>
  br i1 %cmp.n691, label %..loopexit_crit_edge, label %.lr.ph437.preheader696

.lr.ph437.preheader696:                           ; preds = %middle.block665, %vector.memcheck645, %vector.scevcheck633, %.lr.ph437.preheader
  %.2363.in435.ph = phi i64 [ %.2443, %vector.memcheck645 ], [ %.2443, %vector.scevcheck633 ], [ %.2443, %.lr.ph437.preheader ], [ %ind.end671, %middle.block665 ]
  %.1370.in434.ph = phi i64 [ %.2367441, %vector.memcheck645 ], [ %.2367441, %vector.scevcheck633 ], [ %.2367441, %.lr.ph437.preheader ], [ %ind.end673, %middle.block665 ]
  br label %.lr.ph437

.lr.ph437:                                        ; preds = %.lr.ph437.preheader696, %.lr.ph437
  %.2363.in435 = phi i64 [ %.2363, %.lr.ph437 ], [ %.2363.in435.ph, %.lr.ph437.preheader696 ]
  %.1370.in434 = phi i64 [ %.1370, %.lr.ph437 ], [ %.1370.in434.ph, %.lr.ph437.preheader696 ]
  %.1370 = add nuw nsw i64 %.1370.in434, 1
  %.2363 = add nsw i64 %.2363.in435, 1
  %268 = getelementptr %struct.complex, ptr %3, i64 %.1370.in434
  %269 = load float, ptr %268, align 4, !tbaa !11
  %270 = getelementptr inbounds i8, ptr %268, i64 4
  %271 = load float, ptr %270, align 4, !tbaa !13
  %272 = fneg float %271
  %273 = insertelement <2 x float> poison, float %271, i64 0
  %274 = insertelement <2 x float> %273, float %272, i64 1
  %275 = fmul <2 x float> %228, %274
  %276 = shufflevector <2 x float> %275, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %277 = insertelement <2 x float> poison, float %269, i64 0
  %278 = shufflevector <2 x float> %277, <2 x float> poison, <2 x i32> zeroinitializer
  %279 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %278, <2 x float> %228, <2 x float> %276)
  %280 = getelementptr %struct.complex, ptr %5, i64 %.2363.in435
  %281 = load <2 x float>, ptr %280, align 4, !tbaa !9
  %282 = fadd <2 x float> %279, %281
  store <2 x float> %282, ptr %280, align 4, !tbaa !9
  %.not382.not = icmp slt i64 %.1370, %241
  br i1 %.not382.not, label %.lr.ph437, label %..loopexit_crit_edge, !llvm.loop !24

283:                                              ; preds = %219
  %284 = getelementptr inbounds %struct.complex, ptr %9, i64 %.2443, i32 1
  store float 0.000000e+00, ptr %284, align 4, !tbaa !13
  br label %.loopexit

..loopexit_crit_edge:                             ; preds = %.lr.ph437, %middle.block665
  %285 = phi <2 x float> [ %267, %middle.block665 ], [ %279, %.lr.ph437 ]
  store <2 x float> %285, ptr %7, align 8, !tbaa !9
  br label %.loopexit

.loopexit:                                        ; preds = %223, %..loopexit_crit_edge, %283
  %286 = phi i64 [ %241, %223 ], [ %241, %..loopexit_crit_edge ], [ %212, %283 ]
  %reass.sub = sub i64 %.2443, %.2367441
  %287 = add i64 %reass.sub, 1
  %288 = add i64 %287, %286
  %289 = add nuw i64 %.2367441, 1
  %exitcond462.not = icmp eq i64 %.2367441, %37
  %indvar.next635 = add i64 %indvar634, 1
  br i1 %exitcond462.not, label %.loopexit388, label %211, !llvm.loop !25

290:                                              ; preds = %209
  br i1 %.not381440, label %.loopexit388, label %.lr.ph432

.lr.ph432:                                        ; preds = %290
  %scevgep579 = getelementptr i8, ptr %5, i64 4
  %scevgep586 = getelementptr i8, ptr %5, i64 4
  %scevgep589 = getelementptr i8, ptr %3, i64 4
  %scevgep591 = getelementptr i8, ptr %5, i64 4
  %scevgep593 = getelementptr i8, ptr %5, i64 8
  %scevgep595 = getelementptr i8, ptr %3, i64 4
  %scevgep597 = getelementptr i8, ptr %3, i64 8
  br label %291

291:                                              ; preds = %.lr.ph432, %.loopexit389
  %indvar573 = phi i64 [ 0, %.lr.ph432 ], [ %indvar.next574, %.loopexit389 ]
  %292 = phi i64 [ %37, %.lr.ph432 ], [ %371, %.loopexit389 ]
  %293 = phi i64 [ %35, %.lr.ph432 ], [ %372, %.loopexit389 ]
  %.3368.neg430 = phi i64 [ -1, %.lr.ph432 ], [ %.3368.neg, %.loopexit389 ]
  %.1428 = phi i64 [ %.0, %.lr.ph432 ], [ %373, %.loopexit389 ]
  %.3426 = phi i64 [ 1, %.lr.ph432 ], [ %376, %.loopexit389 ]
  %.3368425 = phi i64 [ 1, %.lr.ph432 ], [ %377, %.loopexit389 ]
  %294 = getelementptr inbounds %struct.complex, ptr %10, i64 %.1428
  %295 = load float, ptr %294, align 4, !tbaa !11
  %296 = fcmp une float %295, 0.000000e+00
  br i1 %296, label %301, label %297

297:                                              ; preds = %291
  %298 = getelementptr inbounds i8, ptr %294, i64 4
  %299 = load float, ptr %298, align 4, !tbaa !13
  %300 = fcmp une float %299, 0.000000e+00
  br i1 %300, label %301, label %368

301:                                              ; preds = %297, %291
  call void @r_cnjg(ptr noundef nonnull %7, ptr noundef nonnull %294) #5
  %302 = load float, ptr %2, align 4, !tbaa !9
  %303 = load <2 x float>, ptr %7, align 8, !tbaa !9
  %304 = insertelement <2 x float> poison, float %302, i64 0
  %305 = shufflevector <2 x float> %304, <2 x float> poison, <2 x i32> zeroinitializer
  %306 = fmul <2 x float> %305, %303
  %307 = load float, ptr %294, align 4, !tbaa !11
  %308 = getelementptr inbounds i8, ptr %294, i64 4
  %309 = load float, ptr %308, align 4, !tbaa !13
  %310 = extractelement <2 x float> %306, i64 1
  %311 = fneg float %310
  %312 = fmul float %309, %311
  %313 = extractelement <2 x float> %306, i64 0
  %314 = call float @llvm.fmuladd.f32(float %313, float %307, float %312)
  %315 = getelementptr inbounds %struct.complex, ptr %9, i64 %.3426
  %316 = load float, ptr %315, align 4, !tbaa !11
  %317 = fadd float %316, %314
  store float %317, ptr %315, align 4, !tbaa !11
  %318 = getelementptr inbounds i8, ptr %315, i64 4
  store float 0.000000e+00, ptr %318, align 4, !tbaa !13
  %319 = load i64, ptr %1, align 8, !tbaa !5
  %320 = add i64 %.3426, %.3368.neg430
  %321 = add i64 %320, %319
  %.not380.not417 = icmp slt i64 %.3426, %321
  %.pre463 = load i64, ptr %4, align 8, !tbaa !5
  br i1 %.not380.not417, label %.lr.ph421.preheader, label %.loopexit389

.lr.ph421.preheader:                              ; preds = %301
  %322 = add i64 %319, %.3368.neg430
  %min.iters.check608 = icmp ult i64 %322, 12
  br i1 %min.iters.check608, label %.lr.ph421.preheader699, label %vector.scevcheck571

vector.scevcheck571:                              ; preds = %.lr.ph421.preheader
  %ident.check572 = icmp ne i64 %.pre463, 1
  %reass.sub692 = sub i64 %319, %indvar573
  %323 = add i64 %reass.sub692, -2
  %324 = shl i64 %.3426, 3
  %scevgep575 = getelementptr i8, ptr %5, i64 %324
  %mul.result577 = shl i64 %323, 3
  %mul.overflow578 = icmp ugt i64 %323, 2305843009213693951
  %325 = getelementptr i8, ptr %scevgep575, i64 %mul.result577
  %326 = icmp ult ptr %325, %scevgep575
  %327 = or i1 %326, %mul.overflow578
  %scevgep580 = getelementptr i8, ptr %scevgep579, i64 %324
  %mul.result582 = shl i64 %323, 3
  %328 = getelementptr i8, ptr %scevgep580, i64 %mul.result582
  %329 = icmp ult ptr %328, %scevgep580
  %330 = or i1 %ident.check572, %327
  %331 = or i1 %329, %330
  br i1 %331, label %.lr.ph421.preheader699, label %vector.memcheck584

vector.memcheck584:                               ; preds = %vector.scevcheck571
  %332 = shl i64 %.3426, 3
  %scevgep585 = getelementptr i8, ptr %5, i64 %332
  %reass.sub693 = sub i64 %319, %indvar573
  %333 = shl i64 %reass.sub693, 3
  %334 = add i64 %333, -16
  %335 = add i64 %332, %334
  %scevgep587 = getelementptr i8, ptr %scevgep586, i64 %335
  %336 = shl i64 %.1428, 3
  %scevgep588 = getelementptr i8, ptr %3, i64 %336
  %337 = add i64 %336, %334
  %scevgep590 = getelementptr i8, ptr %scevgep589, i64 %337
  %scevgep592 = getelementptr i8, ptr %scevgep591, i64 %332
  %scevgep594 = getelementptr i8, ptr %scevgep593, i64 %335
  %scevgep596 = getelementptr i8, ptr %scevgep595, i64 %336
  %scevgep598 = getelementptr i8, ptr %scevgep597, i64 %337
  %bound0599 = icmp ult ptr %scevgep585, %scevgep590
  %bound1600 = icmp ult ptr %scevgep588, %scevgep587
  %found.conflict601 = and i1 %bound0599, %bound1600
  %bound0602 = icmp ult ptr %scevgep592, %scevgep598
  %bound1603 = icmp ult ptr %scevgep596, %scevgep594
  %found.conflict604 = and i1 %bound0602, %bound1603
  %conflict.rdx605 = or i1 %found.conflict601, %found.conflict604
  br i1 %conflict.rdx605, label %.lr.ph421.preheader699, label %vector.ph609

vector.ph609:                                     ; preds = %vector.memcheck584
  %n.vec611 = and i64 %322, -4
  %338 = mul nuw i64 %n.vec611, %.pre463
  %ind.end612 = add i64 %.1428, %338
  %ind.end614 = add i64 %.3426, %n.vec611
  %broadcast.splat624 = shufflevector <2 x float> %306, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat626 = shufflevector <2 x float> %306, <2 x float> poison, <4 x i32> zeroinitializer
  %339 = getelementptr %struct.complex, ptr %3, i64 %.1428
  %340 = getelementptr %struct.complex, ptr %5, i64 %.3426
  br label %vector.body616

vector.body616:                                   ; preds = %vector.body616, %vector.ph609
  %index617 = phi i64 [ 0, %vector.ph609 ], [ %index.next631, %vector.body616 ]
  %341 = getelementptr %struct.complex, ptr %339, i64 %index617
  %wide.vec620 = load <8 x float>, ptr %341, align 4, !tbaa !9
  %strided.vec621 = shufflevector <8 x float> %wide.vec620, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec622 = shufflevector <8 x float> %wide.vec620, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %342 = fneg <4 x float> %strided.vec622
  %343 = fmul <4 x float> %broadcast.splat624, %342
  %344 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec621, <4 x float> %broadcast.splat626, <4 x float> %343)
  %345 = fmul <4 x float> %broadcast.splat626, %strided.vec622
  %346 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec621, <4 x float> %broadcast.splat624, <4 x float> %345)
  %347 = getelementptr %struct.complex, ptr %340, i64 %index617
  %wide.vec627 = load <8 x float>, ptr %347, align 4, !tbaa !9
  %strided.vec628 = shufflevector <8 x float> %wide.vec627, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec629 = shufflevector <8 x float> %wide.vec627, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %348 = fadd <4 x float> %344, %strided.vec628
  %349 = fadd <4 x float> %346, %strided.vec629
  %interleaved.vec630 = shufflevector <4 x float> %348, <4 x float> %349, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec630, ptr %347, align 4, !tbaa !9
  %index.next631 = add nuw i64 %index617, 4
  %350 = icmp eq i64 %index.next631, %n.vec611
  br i1 %350, label %middle.block606, label %vector.body616, !llvm.loop !26

middle.block606:                                  ; preds = %vector.body616
  %cmp.n632 = icmp eq i64 %322, %n.vec611
  %351 = shufflevector <4 x float> %344, <4 x float> %346, <2 x i32> <i32 3, i32 7>
  br i1 %cmp.n632, label %..loopexit389_crit_edge, label %.lr.ph421.preheader699

.lr.ph421.preheader699:                           ; preds = %middle.block606, %vector.memcheck584, %vector.scevcheck571, %.lr.ph421.preheader
  %.1358419.ph = phi i64 [ %.1428, %vector.memcheck584 ], [ %.1428, %vector.scevcheck571 ], [ %.1428, %.lr.ph421.preheader ], [ %ind.end612, %middle.block606 ]
  %.3364.in418.ph = phi i64 [ %.3426, %vector.memcheck584 ], [ %.3426, %vector.scevcheck571 ], [ %.3426, %.lr.ph421.preheader ], [ %ind.end614, %middle.block606 ]
  br label %.lr.ph421

.lr.ph421:                                        ; preds = %.lr.ph421.preheader699, %.lr.ph421
  %.1358419 = phi i64 [ %352, %.lr.ph421 ], [ %.1358419.ph, %.lr.ph421.preheader699 ]
  %.3364.in418 = phi i64 [ %.3364, %.lr.ph421 ], [ %.3364.in418.ph, %.lr.ph421.preheader699 ]
  %.3364 = add nsw i64 %.3364.in418, 1
  %352 = add nsw i64 %.pre463, %.1358419
  %353 = getelementptr inbounds %struct.complex, ptr %10, i64 %352
  %354 = load float, ptr %353, align 4, !tbaa !11
  %355 = getelementptr inbounds i8, ptr %353, i64 4
  %356 = load float, ptr %355, align 4, !tbaa !13
  %357 = fneg float %356
  %358 = insertelement <2 x float> poison, float %356, i64 0
  %359 = insertelement <2 x float> %358, float %357, i64 1
  %360 = fmul <2 x float> %306, %359
  %361 = shufflevector <2 x float> %360, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %362 = insertelement <2 x float> poison, float %354, i64 0
  %363 = shufflevector <2 x float> %362, <2 x float> poison, <2 x i32> zeroinitializer
  %364 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %363, <2 x float> %306, <2 x float> %361)
  %365 = getelementptr %struct.complex, ptr %5, i64 %.3364.in418
  %366 = load <2 x float>, ptr %365, align 4, !tbaa !9
  %367 = fadd <2 x float> %364, %366
  store <2 x float> %367, ptr %365, align 4, !tbaa !9
  %.not380.not = icmp slt i64 %.3364, %321
  br i1 %.not380.not, label %.lr.ph421, label %..loopexit389_crit_edge, !llvm.loop !27

368:                                              ; preds = %297
  %369 = getelementptr inbounds %struct.complex, ptr %9, i64 %.3426, i32 1
  store float 0.000000e+00, ptr %369, align 4, !tbaa !13
  br label %.loopexit389

..loopexit389_crit_edge:                          ; preds = %.lr.ph421, %middle.block606
  %370 = phi <2 x float> [ %351, %middle.block606 ], [ %364, %.lr.ph421 ]
  store <2 x float> %370, ptr %7, align 8, !tbaa !9
  br label %.loopexit389

.loopexit389:                                     ; preds = %301, %..loopexit389_crit_edge, %368
  %371 = phi i64 [ %319, %301 ], [ %319, %..loopexit389_crit_edge ], [ %292, %368 ]
  %372 = phi i64 [ %.pre463, %301 ], [ %.pre463, %..loopexit389_crit_edge ], [ %293, %368 ]
  %373 = add nsw i64 %372, %.1428
  %374 = add nsw i64 %.3368.neg430, 1
  %375 = add i64 %374, %.3426
  %376 = add i64 %375, %371
  %377 = add nuw i64 %.3368425, 1
  %.3368.neg = xor i64 %.3368425, -1
  %exitcond461.not = icmp eq i64 %.3368425, %37
  %indvar.next574 = add i64 %indvar573, 1
  br i1 %exitcond461.not, label %.loopexit388, label %291, !llvm.loop !28

.loopexit388:                                     ; preds = %205, %114, %.loopexit389, %.loopexit, %120, %39, %290, %210, %24, %26, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  ret i32 0
}

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

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

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

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

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

; 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 <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #4

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

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

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

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


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