#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double atan2(double, double);
int /*<<< orphan*/ fht(float *);
void fft(float *x_real, float *x_imag, float *energy, float *phi, int N) {
  float a, b;
  int i, j;
  fht(x_real);
  energy[0] = x_real[0] * x_real[0];
  for (i = 1, j = N - 1; i < N / 2; i++, j--) {
    a = x_real[i];
    b = x_real[j];
    energy[i] = (a * a + b * b) / 2.0;
    if (energy[i] < 0.0005) {
      energy[i] = 0.0005;
      phi[i] = 0;
    } else
      phi[i] = 0.7853981 + atan2(-(double)a, (double)b);
  }
  energy[N / 2] = x_real[N / 2] * x_real[N / 2];
  phi[N / 2] = atan2(0.0, (double)x_real[N / 2]);
  for (i = 1; i < N / 2; i++) {
    energy[N / 2 + i] = energy[N / 2 - i];
    phi[N / 2 + i] = -phi[N / 2 - i];
  }
}


x86 assembly (clang, -O0):
<fft>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <fht@plt>
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulss  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movl   $0x1,-0x30(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
cmp    %ecx,%eax
jge    12a6 <fft+0x186>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x28(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movss  -0x2c(%rbp),%xmm1
mulss  -0x2c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe2e(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdf8(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    123c <fft+0x11c>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  0xdf6(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    128a <fft+0x16a>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movss  -0x2c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
call   1030 <atan2@plt>
movaps %xmm0,%xmm1
movsd  0xd9b(%rip),%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    128f <fft+0x16f>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1170 <fft+0x50>
mov    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x60(%rbp),%rax
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x58(%rbp),%rax
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x50(%rbp),%rax
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x48(%rbp),%rax
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
call   1030 <atan2@plt>
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x40(%rbp),%rax
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x64(%rbp),%eax
cmp    %ecx,%eax
jge    1431 <fft+0x311>
mov    -0x18(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x88(%rbp),%rax
sub    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x80(%rbp),%rax
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x78(%rbp),%rax
sub    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x70(%rbp),%rax
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1362 <fft+0x242>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fft>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r8d,%ebx
mov    %rcx,%r14
mov    %rdx,%r15
mov    %rdi,%rbp
call   1040 <fht@plt>
movss  0x0(%rbp),%xmm0
mulss  %xmm0,%xmm0
movss  %xmm0,(%r15)
mov    %ebx,%eax
shr    $0x1f,%eax
add    %ebx,%eax
sar    %eax
mov    %eax,(%rsp)
mov    %ebx,0x4(%rsp)
cmp    $0x4,%ebx
jl     1226 <fft+0x106>
mov    0x4(%rsp),%ebx
mov    (%rsp),%eax
cmp    $0x3,%eax
mov    $0x2,%r13d
cmovge %eax,%r13d
add    $0xffffffffffffffff,%rbx
mov    $0x1,%r12d
movss  0xe77(%rip),%xmm4
movsd  0xe77(%rip),%xmm5
jmp    11e3 <fft+0xc3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cvtss2sd %xmm0,%xmm0
xorps  0xe75(%rip),%xmm0
cvtss2sd %xmm1,%xmm1
call   1030 <atan2@plt>
movsd  0xe4c(%rip),%xmm5
movss  0xe3c(%rip),%xmm4
addsd  0xe44(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14,%r12,4)
add    $0x1,%r12
add    $0xffffffffffffffff,%rbx
cmp    %r12,%r13
je     1226 <fft+0x106>
movss  0x0(%rbp,%r12,4),%xmm0
movss  0x0(%rbp,%rbx,4),%xmm1
movaps %xmm1,%xmm2
mulss  %xmm1,%xmm2
movaps %xmm0,%xmm3
mulss  %xmm0,%xmm3
addss  %xmm2,%xmm3
mulss  %xmm4,%xmm3
movss  %xmm3,(%r15,%r12,4)
xorps  %xmm2,%xmm2
cvtss2sd %xmm3,%xmm2
ucomisd %xmm2,%xmm5
jbe    11a0 <fft+0x80>
movl   $0x3a03126f,(%r15,%r12,4)
3a
xorps  %xmm0,%xmm0
jmp    11d0 <fft+0xb0>
mov    (%rsp),%ebx
movslq %ebx,%r13
movss  0x0(%rbp,%r13,4),%xmm0
mulss  %xmm0,%xmm0
movss  %xmm0,(%r15,%r13,4)
movss  0x0(%rbp,%r13,4),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
call   1030 <atan2@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14,%r13,4)
mov    0x4(%rsp),%edx
cmp    $0x4,%edx
jl     1325 <fft+0x205>
cmp    $0x3,%ebx
mov    $0x2,%ecx
cmovge %ebx,%ecx
add    $0xffffffffffffffff,%rcx
mov    $0x1,%eax
cmp    $0x6,%edx
jl     12f8 <fft+0x1d8>
lea    (%r15,%r13,4),%rdx
lea    (%r14,%r13,4),%rsi
mov    %rcx,%rdi
and    $0xfffffffffffffffe,%rdi
neg    %rdi
mov    $0x1,%eax
mov    $0xffffffffffffffff,%rbp
movaps 0xd88(%rip),%xmm0
nopl   0x0(%rax,%rax,1)
movss  (%rdx,%rbp,4),%xmm1
movss  %xmm1,(%rdx,%rax,4)
movss  (%rsi,%rbp,4),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,(%rsi,%rax,4)
movss  -0x4(%rdx,%rbp,4),%xmm1
movss  %xmm1,0x4(%rdx,%rax,4)
movss  -0x4(%rsi,%rbp,4),%xmm1
xorps  %xmm0,%xmm1
movss  %xmm1,0x4(%rsi,%rax,4)
add    $0xfffffffffffffffe,%rbp
lea    (%rdi,%rax,1),%rbx
add    $0x2,%rbx
add    $0x2,%rax
cmp    $0x1,%rbx
jne    12b0 <fft+0x190>
test   $0x1,%cl
je     1325 <fft+0x205>
mov    %r13,%rcx
sub    %rax,%rcx
movss  (%r15,%rcx,4),%xmm0
add    %r13,%rax
movss  %xmm0,(%r15,%rax,4)
movss  (%r14,%rcx,4),%xmm0
xorps  0xd11(%rip),%xmm0
movss  %xmm0,(%r14,%rax,4)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @fft(float* %0, float* %1, float* %2, float* %3, i32 %4) {
%6 = alloca float*
%7 = alloca float*
%8 = alloca float*
%9 = alloca float*
%10 = alloca i32
%11 = alloca float
%12 = alloca float
%13 = alloca i32
%14 = alloca i32
store float* %0, float** %6
store float* %1, float** %7
store float* %2, float** %8
store float* %3, float** %9
store i32 %4, i32* %10
%15 = load float*, float** %6
%16 = call i32 @fht(float* %15)
%17 = load float*, float** %6
%18 = getelementptr inbounds float, float* %17, i64 0
%19 = load float, float* %18
%20 = load float*, float** %6
%21 = getelementptr inbounds float, float* %20, i64 0
%22 = load float, float* %21
%23 = fmul float %19, %22
%24 = load float*, float** %8
%25 = getelementptr inbounds float, float* %24, i64 0
store float %23, float* %25
store i32 1, i32* %13
%26 = load i32, i32* %10
%27 = sub nsw i32 %26, 1
store i32 %27, i32* %14
br label %28
28: ; preds = %87, %5
%29 = load i32, i32* %13
%30 = load i32, i32* %10
%31 = sdiv i32 %30, 2
%32 = icmp slt i32 %29, %31
br i1 %32, label %33, label %92
33: ; preds = %28
%34 = load float*, float** %6
%35 = load i32, i32* %13
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds float, float* %34, i64 %36
%38 = load float, float* %37
store float %38, float* %11
%39 = load float*, float** %6
%40 = load i32, i32* %14
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds float, float* %39, i64 %41
%43 = load float, float* %42
store float %43, float* %12
%44 = load float, float* %11
%45 = load float, float* %11
%46 = load float, float* %12
%47 = load float, float* %12
%48 = fmul float %46, %47
%49 = call float @llvm.fmuladd.f32(float %44, float %45, float %48)
%50 = fpext float %49 to double
%51 = fdiv double %50, 2.000000e+00
%52 = fptrunc double %51 to float
%53 = load float*, float** %8
%54 = load i32, i32* %13
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds float, float* %53, i64 %55
store float %52, float* %56
%57 = load float*, float** %8
%58 = load i32, i32* %13
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds float, float* %57, i64 %59
%61 = load float, float* %60
%62 = fpext float %61 to double
%63 = fcmp olt double %62, 5.000000e-04
br i1 %63, label %64, label %73
64: ; preds = %33
%65 = load float*, float** %8
%66 = load i32, i32* %13
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds float, float* %65, i64 %67
store float 0x3F40624DE0000000, float* %68
%69 = load float*, float** %9
%70 = load i32, i32* %13
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds float, float* %69, i64 %71
store float 0.000000e+00, float* %72
br label %86
73: ; preds = %33
%74 = load float, float* %11
%75 = fpext float %74 to double
%76 = fneg double %75
%77 = load float, float* %12
%78 = fpext float %77 to double
%79 = call double @atan2(double %76, double %78)
%80 = fadd double 0x3FE921FB323AE5AF, %79
%81 = fptrunc double %80 to float
%82 = load float*, float** %9
%83 = load i32, i32* %13
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds float, float* %82, i64 %84
store float %81, float* %85
br label %86
86: ; preds = %73, %64
br label %87
87: ; preds = %86
%88 = load i32, i32* %13
%89 = add nsw i32 %88, 1
store i32 %89, i32* %13
%90 = load i32, i32* %14
%91 = add nsw i32 %90, -1
store i32 %91, i32* %14
br label %28
92: ; preds = %28
%93 = load float*, float** %6
%94 = load i32, i32* %10
%95 = sdiv i32 %94, 2
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds float, float* %93, i64 %96
%98 = load float, float* %97
%99 = load float*, float** %6
%100 = load i32, i32* %10
%101 = sdiv i32 %100, 2
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds float, float* %99, i64 %102
%104 = load float, float* %103
%105 = fmul float %98, %104
%106 = load float*, float** %8
%107 = load i32, i32* %10
%108 = sdiv i32 %107, 2
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds float, float* %106, i64 %109
store float %105, float* %110
%111 = load float*, float** %6
%112 = load i32, i32* %10
%113 = sdiv i32 %112, 2
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds float, float* %111, i64 %114
%116 = load float, float* %115
%117 = fpext float %116 to double
%118 = call double @atan2(double 0.000000e+00, double %117)
%119 = fptrunc double %118 to float
%120 = load float*, float** %9
%121 = load i32, i32* %10
%122 = sdiv i32 %121, 2
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds float, float* %120, i64 %123
store float %119, float* %124
store i32 1, i32* %13
br label %125
125: ; preds = %162, %92
%126 = load i32, i32* %13
%127 = load i32, i32* %10
%128 = sdiv i32 %127, 2
%129 = icmp slt i32 %126, %128
br i1 %129, label %130, label %165
130: ; preds = %125
%131 = load float*, float** %8
%132 = load i32, i32* %10
%133 = sdiv i32 %132, 2
%134 = load i32, i32* %13
%135 = sub nsw i32 %133, %134
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds float, float* %131, i64 %136
%138 = load float, float* %137
%139 = load float*, float** %8
%140 = load i32, i32* %10
%141 = sdiv i32 %140, 2
%142 = load i32, i32* %13
%143 = add nsw i32 %141, %142
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds float, float* %139, i64 %144
store float %138, float* %145
%146 = load float*, float** %9
%147 = load i32, i32* %10
%148 = sdiv i32 %147, 2
%149 = load i32, i32* %13
%150 = sub nsw i32 %148, %149
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds float, float* %146, i64 %151
%153 = load float, float* %152
%154 = fneg float %153
%155 = load float*, float** %9
%156 = load i32, i32* %10
%157 = sdiv i32 %156, 2
%158 = load i32, i32* %13
%159 = add nsw i32 %157, %158
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds float, float* %155, i64 %160
store float %154, float* %161
br label %162
162: ; preds = %130
%163 = load i32, i32* %13
%164 = add nsw i32 %163, 1
store i32 %164, i32* %13
br label %125
165: ; preds = %125
ret void
}

LLVM IR (-O2):
define void @fft(float* %0, float* nocapture readnone %1, float* nocapture %2, float* nocapture %3, i32 %4) {
%6 = tail call i32 @fht(float* %0)
%7 = load float, float* %0
%8 = fmul float %7, %7
store float %8, float* %2
%9 = sdiv i32 %4, 2
%10 = icmp sgt i32 %4, 3
br i1 %10, label %11, label %42
11: ; preds = %5
%12 = zext i32 %4 to i64
%13 = call i32 @llvm.smax.i32(i32 %9, i32 2)
%14 = zext i32 %13 to i64
br label %15
15: ; preds = %11, %37
%16 = phi i64 [ 1, %11 ], [ %40, %37 ]
%17 = phi i64 [ %12, %11 ], [ %18, %37 ]
%18 = add nsw i64 %17, -1
%19 = getelementptr inbounds float, float* %0, i64 %16
%20 = load float, float* %19
%21 = getelementptr inbounds float, float* %0, i64 %18
%22 = load float, float* %21
%23 = fmul float %22, %22
%24 = tail call float @llvm.fmuladd.f32(float %20, float %20, float %23)
%25 = fmul float %24, 5.000000e-01
%26 = getelementptr inbounds float, float* %2, i64 %16
store float %25, float* %26
%27 = fpext float %25 to double
%28 = fcmp olt double %27, 5.000000e-04
br i1 %28, label %29, label %30
29: ; preds = %15
store float 0x3F40624DE0000000, float* %26
br label %37
30: ; preds = %15
%31 = fpext float %20 to double
%32 = fneg double %31
%33 = fpext float %22 to double
%34 = tail call double @atan2(double %32, double %33)
%35 = fadd double %34, 0x3FE921FB323AE5AF
%36 = fptrunc double %35 to float
br label %37
37: ; preds = %29, %30
%38 = phi float [ 0.000000e+00, %29 ], [ %36, %30 ]
%39 = getelementptr inbounds float, float* %3, i64 %16
store float %38, float* %39
%40 = add nuw nsw i64 %16, 1
%41 = icmp eq i64 %40, %14
br i1 %41, label %42, label %15
42: ; preds = %37, %5
%43 = sext i32 %9 to i64
%44 = getelementptr inbounds float, float* %0, i64 %43
%45 = load float, float* %44
%46 = fmul float %45, %45
%47 = getelementptr inbounds float, float* %2, i64 %43
store float %46, float* %47
%48 = load float, float* %44
%49 = fpext float %48 to double
%50 = tail call double @atan2(double 0.000000e+00, double %49)
%51 = fptrunc double %50 to float
%52 = getelementptr inbounds float, float* %3, i64 %43
store float %51, float* %52
br i1 %10, label %53, label %99
53: ; preds = %42
%54 = call i32 @llvm.smax.i32(i32 %9, i32 2)
%55 = zext i32 %54 to i64
%56 = add nsw i64 %55, -1
%57 = and i64 %56, 1
%58 = icmp slt i32 %4, 6
br i1 %58, label %86, label %59
59: ; preds = %53
%60 = and i64 %56, -2
br label %61
61: ; preds = %61, %59
%62 = phi i64 [ 1, %59 ], [ %83, %61 ]
%63 = phi i64 [ 0, %59 ], [ %84, %61 ]
%64 = sub nsw i64 %43, %62
%65 = getelementptr inbounds float, float* %2, i64 %64
%66 = load float, float* %65
%67 = add nsw i64 %62, %43
%68 = getelementptr inbounds float, float* %2, i64 %67
store float %66, float* %68
%69 = getelementptr inbounds float, float* %3, i64 %64
%70 = load float, float* %69
%71 = fneg float %70
%72 = getelementptr inbounds float, float* %3, i64 %67
store float %71, float* %72
%73 = add nuw nsw i64 %62, 1
%74 = sub nsw i64 %43, %73
%75 = getelementptr inbounds float, float* %2, i64 %74
%76 = load float, float* %75
%77 = add nsw i64 %73, %43
%78 = getelementptr inbounds float, float* %2, i64 %77
store float %76, float* %78
%79 = getelementptr inbounds float, float* %3, i64 %74
%80 = load float, float* %79
%81 = fneg float %80
%82 = getelementptr inbounds float, float* %3, i64 %77
store float %81, float* %82
%83 = add nuw nsw i64 %62, 2
%84 = add i64 %63, 2
%85 = icmp eq i64 %84, %60
br i1 %85, label %86, label %61
86: ; preds = %61, %53
%87 = phi i64 [ 1, %53 ], [ %83, %61 ]
%88 = icmp eq i64 %57, 0
br i1 %88, label %99, label %89
89: ; preds = %86
%90 = sub nsw i64 %43, %87
%91 = getelementptr inbounds float, float* %2, i64 %90
%92 = load float, float* %91
%93 = add nsw i64 %87, %43
%94 = getelementptr inbounds float, float* %2, i64 %93
store float %92, float* %94
%95 = getelementptr inbounds float, float* %3, i64 %90
%96 = load float, float* %95
%97 = fneg float %96
%98 = getelementptr inbounds float, float* %3, i64 %93
store float %97, float* %98
br label %99
99: ; preds = %89, %86, %42
ret void
}