#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 */
int M_PI;
double log(int);
int pow(int, int);
void getDFT_cChachiyo(double rhoa, double rhob, double *Exc, double *dEdrhoa,
                      double *dEdrhob) {
  double rho = rhoa + rhob;
  if (rho > 1.0E-10) {
    double z = (rhoa - rhob) / rho;
    double f = (pow(1. + z, 4. / 3) + pow(1. - z, 4. / 3) - 2.) / 2 /
               (pow(2., 1. / 3) - 1.);
    double dfdz = 4. / 3 * (pow(1. + z, 1. / 3) - pow(1. - z, 1. / 3)) / 2 /
                  (pow(2., 1. / 3) - 1.);
    double rs = pow(3. / 4 / M_PI / rho, 1. / 3);
    double a = -0.01554535;
    double b = 20.4562557;
    double e0 = a * log(1. + b / rs + b / rs / rs);
    double de0drs = a / (1. + b / rs + b / rs / rs) * b *
                    (-1. / rs / rs - 2. / rs / rs / rs);
    a = a / 2.0;
    b = 27.4203609;
    double e1 = a * log(1. + b / rs + b / rs / rs);
    double de1drs = a / (1. + b / rs + b / rs / rs) * b *
                    (-1. / rs / rs - 2. / rs / rs / rs);
    double delta = e1 - e0;
    double e = e0 + delta * f;
    double dedz = delta * dfdz;
    double dedrs = de0drs + f * (de1drs - de0drs);
    *dEdrhoa += e + dedrs * (-1. / 3 * rs) + dedz * 2.0 * rhob / rho;
    *dEdrhob += e + dedrs * (-1. / 3 * rs) - dedz * 2.0 * rhoa / rho;
    *Exc += e * rho;
  }
}


x86 assembly (clang, -O0):
<getDFT_cChachiyo>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
movsd  -0x8(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xea3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    15bc <getDFT_cChachiyo+0x49c>
movsd  -0x8(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe9d(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%edi
mov    $0x1,%esi
call   1040 <pow@plt>
mov    %eax,-0xcc(%rbp)
movsd  0xe7c(%rip),%xmm0
subsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%edi
mov    $0x1,%esi
call   1040 <pow@plt>
mov    %eax,%ecx
mov    -0xcc(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe3b(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xe2f(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    $0x2,%edi
xor    %esi,%esi
call   1040 <pow@plt>
movsd  -0xc8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
movsd  0xe1b(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe06(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%edi
xor    %esi,%esi
call   1040 <pow@plt>
mov    %eax,-0xbc(%rbp)
movsd  0xde8(%rip),%xmm0
subsd  -0x38(%rbp),%xmm0
cvttsd2si %xmm0,%edi
xor    %esi,%esi
call   1040 <pow@plt>
mov    %eax,%ecx
mov    -0xbc(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm1
movsd  0xdea(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xd9e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    $0x2,%edi
xor    %esi,%esi
call   1040 <pow@plt>
movsd  -0xb8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
movsd  0xd8a(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x2d3e(%rip),%rax
cvtsi2sdl (%rax),%xmm1
movsd  0xd8a(%rip),%xmm0
divsd  %xmm1,%xmm0
divsd  -0x30(%rbp),%xmm0
cvttsd2si %xmm0,%edi
xor    %esi,%esi
call   1040 <pow@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xd5d(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xd48(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
movsd  0xd14(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1030 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
movsd  0xcc9(%rip),%xmm1
addsd  %xmm2,%xmm1
movsd  -0x60(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xc99(%rip),%xmm1
divsd  -0x50(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
movsd  0xc77(%rip),%xmm2
divsd  -0x50(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0xc4e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xc5d(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
movsd  0xc31(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1030 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
movsd  0xbe6(%rip),%xmm1
addsd  %xmm2,%xmm1
movsd  -0x60(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  0xbb6(%rip),%xmm1
divsd  -0x50(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
movsd  0xb94(%rip),%xmm2
divsd  -0x50(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
divsd  -0x50(%rbp),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x70(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
subsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  0xafb(%rip),%xmm2
mulsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xade(%rip),%xmm1
mulsd  -0x98(%rbp),%xmm1
ff
mulsd  -0x10(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  0xaac(%rip),%xmm2
mulsd  -0x50(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xa8f(%rip),%xmm1
mulsd  -0x98(%rbp),%xmm1
ff
mulsd  -0x8(%rbp),%xmm1
divsd  -0x30(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getDFT_cChachiyo>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
ucomisd 0xec2(%rip),%xmm2
jbe    1410 <getDFT_cChachiyo+0x2f0>
mov    %rdx,%r15
mov    %rsi,%r12
mov    %rdi,%r14
movapd %xmm0,%xmm3
subsd  %xmm1,%xmm3
divsd  %xmm2,%xmm3
movsd  %xmm3,0x8(%rsp)
movsd  %xmm2,0x28(%rsp)
movapd %xmm3,%xmm2
addsd  0xe97(%rip),%xmm2
cvttsd2si %xmm2,%r13d
mov    %r13d,%edi
mov    $0x1,%esi
movsd  %xmm0,0x50(%rsp)
movsd  %xmm1,0x48(%rsp)
call   1040 <pow@plt>
mov    %eax,%ebp
movsd  0xe6f(%rip),%xmm0
subsd  0x8(%rsp),%xmm0
cvttsd2si %xmm0,%ebx
mov    %ebx,%edi
mov    $0x1,%esi
call   1040 <pow@plt>
add    %ebp,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xe50(%rip),%xmm0
mulsd  0xe50(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    $0x2,%edi
xor    %esi,%esi
call   1040 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xe37(%rip),%xmm0
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
mov    %r13d,%edi
xor    %esi,%esi
call   1040 <pow@plt>
mov    %eax,%ebp
mov    %ebx,%edi
xor    %esi,%esi
call   1040 <pow@plt>
sub    %eax,%ebp
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  0xe09(%rip),%xmm0
mulsd  0xdf1(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
mov    $0x2,%edi
xor    %esi,%esi
call   1040 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xdd8(%rip),%xmm0
movsd  0x18(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
mov    0x2d89(%rip),%rax
xorps  %xmm0,%xmm0
cvtsi2sdl (%rax),%xmm0
movsd  0xdc2(%rip),%xmm1
divsd  %xmm0,%xmm1
divsd  0x28(%rsp),%xmm1
cvttsd2si %xmm1,%edi
xor    %esi,%esi
call   1040 <pow@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0xda0(%rip),%xmm2
divsd  %xmm1,%xmm2
movapd %xmm2,%xmm0
addsd  0xd60(%rip),%xmm0
divsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,0x10(%rsp)
cvttsd2si %xmm2,%edi
call   1030 <log@plt>
movsd  0xd79(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x40(%rsp)
divsd  0x10(%rsp),%xmm1
mulsd  0xd59(%rip),%xmm1
movapd %xmm1,%xmm3
movsd  0x20(%rsp),%xmm1
movsd  0xd2f(%rip),%xmm0
divsd  %xmm1,%xmm0
divsd  %xmm1,%xmm0
movapd %xmm0,%xmm2
movsd  0xd0b(%rip),%xmm0
divsd  %xmm1,%xmm0
divsd  %xmm1,%xmm0
divsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x38(%rsp)
mulsd  %xmm0,%xmm3
movsd  %xmm3,0x10(%rsp)
movsd  0xd1b(%rip),%xmm2
divsd  %xmm1,%xmm2
movsd  0xccf(%rip),%xmm0
addsd  %xmm2,%xmm0
divsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,0x30(%rsp)
cvttsd2si %xmm2,%edi
call   1030 <log@plt>
movsd  0xcf4(%rip),%xmm1
mulsd  %xmm1,%xmm0
divsd  0x30(%rsp),%xmm1
mulsd  0xcda(%rip),%xmm1
mulsd  0x38(%rsp),%xmm1
movsd  0x40(%rsp),%xmm4
subsd  %xmm4,%xmm0
movsd  0x18(%rsp),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x8(%rsp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm4,%xmm0
movsd  0x10(%rsp),%xmm4
subsd  %xmm4,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm4,%xmm1
movsd  0x20(%rsp),%xmm4
mulsd  0xca2(%rip),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm0,%xmm4
addsd  %xmm3,%xmm3
movsd  0x48(%rsp),%xmm2
mulsd  %xmm3,%xmm2
movsd  0x28(%rsp),%xmm1
divsd  %xmm1,%xmm2
addsd  %xmm4,%xmm2
addsd  (%r12),%xmm2
movsd  %xmm2,(%r12)
movapd %xmm3,%xmm2
mulsd  0x50(%rsp),%xmm2
divsd  %xmm1,%xmm2
subsd  %xmm2,%xmm4
addsd  (%r15),%xmm4
movsd  %xmm4,(%r15)
mulsd  %xmm1,%xmm0
addsd  (%r14),%xmm0
movsd  %xmm0,(%r14)
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@M_PI = global i32 0
define void @getDFT_cChachiyo(double %0, double %1, double* %2, double* %3, double* %4) {
%6 = alloca double
%7 = alloca double
%8 = alloca double*
%9 = alloca double*
%10 = alloca double*
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
store double %0, double* %6
store double %1, double* %7
store double* %2, double** %8
store double* %3, double** %9
store double* %4, double** %10
%26 = load double, double* %6
%27 = load double, double* %7
%28 = fadd double %26, %27
store double %28, double* %11
%29 = load double, double* %11
%30 = fcmp ogt double %29, 1.000000e-10
br i1 %30, label %31, label %210
31: ; preds = %5
%32 = load double, double* %6
%33 = load double, double* %7
%34 = fsub double %32, %33
%35 = load double, double* %11
%36 = fdiv double %34, %35
store double %36, double* %12
%37 = load double, double* %12
%38 = fadd double 1.000000e+00, %37
%39 = fptosi double %38 to i32
%40 = call i32 @pow(i32 %39, i32 1)
%41 = load double, double* %12
%42 = fsub double 1.000000e+00, %41
%43 = fptosi double %42 to i32
%44 = call i32 @pow(i32 %43, i32 1)
%45 = add nsw i32 %40, %44
%46 = sitofp i32 %45 to double
%47 = fsub double %46, 2.000000e+00
%48 = fdiv double %47, 2.000000e+00
%49 = call i32 @pow(i32 2, i32 0)
%50 = sitofp i32 %49 to double
%51 = fsub double %50, 1.000000e+00
%52 = fdiv double %48, %51
store double %52, double* %13
%53 = load double, double* %12
%54 = fadd double 1.000000e+00, %53
%55 = fptosi double %54 to i32
%56 = call i32 @pow(i32 %55, i32 0)
%57 = load double, double* %12
%58 = fsub double 1.000000e+00, %57
%59 = fptosi double %58 to i32
%60 = call i32 @pow(i32 %59, i32 0)
%61 = sub nsw i32 %56, %60
%62 = sitofp i32 %61 to double
%63 = fmul double 0x3FF5555555555555, %62
%64 = fdiv double %63, 2.000000e+00
%65 = call i32 @pow(i32 2, i32 0)
%66 = sitofp i32 %65 to double
%67 = fsub double %66, 1.000000e+00
%68 = fdiv double %64, %67
store double %68, double* %14
%69 = load i32, i32* @M_PI
%70 = sitofp i32 %69 to double
%71 = fdiv double 7.500000e-01, %70
%72 = load double, double* %11
%73 = fdiv double %71, %72
%74 = fptosi double %73 to i32
%75 = call i32 @pow(i32 %74, i32 0)
%76 = sitofp i32 %75 to double
store double %76, double* %15
store double 0xBF8FD63D8ED6C7F8, double* %16
store double 0x403474CD2C6E1D14, double* %17
%77 = load double, double* %16
%78 = load double, double* %17
%79 = load double, double* %15
%80 = fdiv double %78, %79
%81 = fadd double 1.000000e+00, %80
%82 = load double, double* %17
%83 = load double, double* %15
%84 = fdiv double %82, %83
%85 = load double, double* %15
%86 = fdiv double %84, %85
%87 = fadd double %81, %86
%88 = fptosi double %87 to i32
%89 = call double @log(i32 %88)
%90 = fmul double %77, %89
store double %90, double* %18
%91 = load double, double* %16
%92 = load double, double* %17
%93 = load double, double* %15
%94 = fdiv double %92, %93
%95 = fadd double 1.000000e+00, %94
%96 = load double, double* %17
%97 = load double, double* %15
%98 = fdiv double %96, %97
%99 = load double, double* %15
%100 = fdiv double %98, %99
%101 = fadd double %95, %100
%102 = fdiv double %91, %101
%103 = load double, double* %17
%104 = fmul double %102, %103
%105 = load double, double* %15
%106 = fdiv double -1.000000e+00, %105
%107 = load double, double* %15
%108 = fdiv double %106, %107
%109 = load double, double* %15
%110 = fdiv double 2.000000e+00, %109
%111 = load double, double* %15
%112 = fdiv double %110, %111
%113 = load double, double* %15
%114 = fdiv double %112, %113
%115 = fsub double %108, %114
%116 = fmul double %104, %115
store double %116, double* %19
%117 = load double, double* %16
%118 = fdiv double %117, 2.000000e+00
store double %118, double* %16
store double 0x403B6B9CC59E0462, double* %17
%119 = load double, double* %16
%120 = load double, double* %17
%121 = load double, double* %15
%122 = fdiv double %120, %121
%123 = fadd double 1.000000e+00, %122
%124 = load double, double* %17
%125 = load double, double* %15
%126 = fdiv double %124, %125
%127 = load double, double* %15
%128 = fdiv double %126, %127
%129 = fadd double %123, %128
%130 = fptosi double %129 to i32
%131 = call double @log(i32 %130)
%132 = fmul double %119, %131
store double %132, double* %20
%133 = load double, double* %16
%134 = load double, double* %17
%135 = load double, double* %15
%136 = fdiv double %134, %135
%137 = fadd double 1.000000e+00, %136
%138 = load double, double* %17
%139 = load double, double* %15
%140 = fdiv double %138, %139
%141 = load double, double* %15
%142 = fdiv double %140, %141
%143 = fadd double %137, %142
%144 = fdiv double %133, %143
%145 = load double, double* %17
%146 = fmul double %144, %145
%147 = load double, double* %15
%148 = fdiv double -1.000000e+00, %147
%149 = load double, double* %15
%150 = fdiv double %148, %149
%151 = load double, double* %15
%152 = fdiv double 2.000000e+00, %151
%153 = load double, double* %15
%154 = fdiv double %152, %153
%155 = load double, double* %15
%156 = fdiv double %154, %155
%157 = fsub double %150, %156
%158 = fmul double %146, %157
store double %158, double* %21
%159 = load double, double* %20
%160 = load double, double* %18
%161 = fsub double %159, %160
store double %161, double* %22
%162 = load double, double* %18
%163 = load double, double* %22
%164 = load double, double* %13
%165 = call double @llvm.fmuladd.f64(double %163, double %164, double %162)
store double %165, double* %23
%166 = load double, double* %22
%167 = load double, double* %14
%168 = fmul double %166, %167
store double %168, double* %24
%169 = load double, double* %19
%170 = load double, double* %13
%171 = load double, double* %21
%172 = load double, double* %19
%173 = fsub double %171, %172
%174 = call double @llvm.fmuladd.f64(double %170, double %173, double %169)
store double %174, double* %25
%175 = load double, double* %23
%176 = load double, double* %25
%177 = load double, double* %15
%178 = fmul double 0xBFD5555555555555, %177
%179 = call double @llvm.fmuladd.f64(double %176, double %178, double %175)
%180 = load double, double* %24
%181 = fmul double %180, 2.000000e+00
%182 = load double, double* %7
%183 = fmul double %181, %182
%184 = load double, double* %11
%185 = fdiv double %183, %184
%186 = fadd double %179, %185
%187 = load double*, double** %9
%188 = load double, double* %187
%189 = fadd double %188, %186
store double %189, double* %187
%190 = load double, double* %23
%191 = load double, double* %25
%192 = load double, double* %15
%193 = fmul double 0xBFD5555555555555, %192
%194 = call double @llvm.fmuladd.f64(double %191, double %193, double %190)
%195 = load double, double* %24
%196 = fmul double %195, 2.000000e+00
%197 = load double, double* %6
%198 = fmul double %196, %197
%199 = load double, double* %11
%200 = fdiv double %198, %199
%201 = fsub double %194, %200
%202 = load double*, double** %10
%203 = load double, double* %202
%204 = fadd double %203, %201
store double %204, double* %202
%205 = load double, double* %23
%206 = load double, double* %11
%207 = load double*, double** %8
%208 = load double, double* %207
%209 = call double @llvm.fmuladd.f64(double %205, double %206, double %208)
store double %209, double* %207
br label %210
210: ; preds = %31, %5
ret void
}

LLVM IR (-O2):
@M_PI = global i32 0
define void @getDFT_cChachiyo(double %0, double %1, double* nocapture %2, double* nocapture %3, double* nocapture %4) {
%6 = fadd double %0, %1
%7 = fcmp ogt double %6, 1.000000e-10
br i1 %7, label %8, label %88
8: ; preds = %5
%9 = fsub double %0, %1
%10 = fdiv double %9, %6
%11 = fadd double %10, 1.000000e+00
%12 = fptosi double %11 to i32
%13 = tail call i32 @pow(i32 %12, i32 1)
%14 = fsub double 1.000000e+00, %10
%15 = fptosi double %14 to i32
%16 = tail call i32 @pow(i32 %15, i32 1)
%17 = add nsw i32 %16, %13
%18 = sitofp i32 %17 to double
%19 = fadd double %18, -2.000000e+00
%20 = fmul double %19, 5.000000e-01
%21 = tail call i32 @pow(i32 2, i32 0)
%22 = sitofp i32 %21 to double
%23 = fadd double %22, -1.000000e+00
%24 = fdiv double %20, %23
%25 = tail call i32 @pow(i32 %12, i32 0)
%26 = tail call i32 @pow(i32 %15, i32 0)
%27 = sub nsw i32 %25, %26
%28 = sitofp i32 %27 to double
%29 = fmul double %28, 0x3FF5555555555555
%30 = fmul double %29, 5.000000e-01
%31 = tail call i32 @pow(i32 2, i32 0)
%32 = sitofp i32 %31 to double
%33 = fadd double %32, -1.000000e+00
%34 = fdiv double %30, %33
%35 = load i32, i32* @M_PI
%36 = sitofp i32 %35 to double
%37 = fdiv double 7.500000e-01, %36
%38 = fdiv double %37, %6
%39 = fptosi double %38 to i32
%40 = tail call i32 @pow(i32 %39, i32 0)
%41 = sitofp i32 %40 to double
%42 = fdiv double 0x403474CD2C6E1D14, %41
%43 = fadd double %42, 1.000000e+00
%44 = fdiv double %42, %41
%45 = fadd double %43, %44
%46 = fptosi double %45 to i32
%47 = tail call double @log(i32 %46)
%48 = fmul double %47, 0xBF8FD63D8ED6C7F8
%49 = fdiv double 0xBF8FD63D8ED6C7F8, %45
%50 = fmul double %49, 0x403474CD2C6E1D14
%51 = fdiv double -1.000000e+00, %41
%52 = fdiv double %51, %41
%53 = fdiv double 2.000000e+00, %41
%54 = fdiv double %53, %41
%55 = fdiv double %54, %41
%56 = fsub double %52, %55
%57 = fmul double %56, %50
%58 = fdiv double 0x403B6B9CC59E0462, %41
%59 = fadd double %58, 1.000000e+00
%60 = fdiv double %58, %41
%61 = fadd double %59, %60
%62 = fptosi double %61 to i32
%63 = tail call double @log(i32 %62)
%64 = fmul double %63, 0xBF7FD63D8ED6C7F8
%65 = fdiv double 0xBF7FD63D8ED6C7F8, %61
%66 = fmul double %65, 0x403B6B9CC59E0462
%67 = fmul double %56, %66
%68 = fsub double %64, %48
%69 = tail call double @llvm.fmuladd.f64(double %68, double %24, double %48)
%70 = fmul double %34, %68
%71 = fsub double %67, %57
%72 = tail call double @llvm.fmuladd.f64(double %24, double %71, double %57)
%73 = fmul double %41, 0xBFD5555555555555
%74 = tail call double @llvm.fmuladd.f64(double %72, double %73, double %69)
%75 = fmul double %70, 2.000000e+00
%76 = fmul double %75, %1
%77 = fdiv double %76, %6
%78 = fadd double %77, %74
%79 = load double, double* %3
%80 = fadd double %79, %78
store double %80, double* %3
%81 = fmul double %75, %0
%82 = fdiv double %81, %6
%83 = fsub double %74, %82
%84 = load double, double* %4
%85 = fadd double %84, %83
store double %85, double* %4
%86 = load double, double* %2
%87 = tail call double @llvm.fmuladd.f64(double %69, double %6, double %86)
store double %87, double* %2
br label %88
88: ; preds = %8, %5
ret void
}