void R_Perdew_Wang(rho, Vc_out, Ec_out, Pc_out) double rho[], Vc_out[], *Ec_out,
    *Pc_out;
{
  int i;
  double onethird;
  double onesixth;
  double sevensixth;
  double pi, rs_scale;
  double rs, rss, n;
  double Q0, Q1, Q2, Q3;
  double ec, ec_rs;
  double uc;
  int Ngrid;
  double *ec_functional;
  double *tmp;
  pi = 4.0 * atan(1.0);
  onethird = 1.0 / 3.0;
  onesixth = 1.0 / 6.0;
  sevensixth = 7.0 / 6.0;
  pi = 4.0 * atan(1.0);
  rs_scale = pow((0.75 / pi), (onethird));
  Ngrid = N_LogGrid();
  ec_functional = alloc_LogGrid();
  tmp = alloc_LogGrid();
  for (i = 0; i < Ngrid; ++i) {
    n = rho[i] / (4.0 * pi) + 1.0e-80;
    rs = rs_scale / pow(n, onethird);
    rss = sqrt(rs);
    Q0 = -2 * 0.0310907 * (1.0 + 0.213700 * rs);
    Q1 = 2 * 0.0310907 * rss *
         (7.595700 + rss * (3.587600 + rss * (1.638200 + 0.492940 * rss)));
    Q2 = log(1.0 + 1.0 / Q1);
    Q3 = 0.0310907 * (7.595700 / rss + 2.0 * 3.587600 +
                      rss * (3.0 * 1.638200 + 4.0 * 0.492940 * rss));
    ec = Q0 * Q2;
    ec_rs = -2.0 * 0.0310907 * 0.213700 * Q2 - Q0 * Q3 / (Q1 * (1 + Q1));
    uc = ec - rs * ec_rs / 3.0;
    ec_functional[i] = ec;
    Vc_out[i] = uc;
  }
  for (i = 0; i < Ngrid; ++i)
    tmp[i] = (rho[i]) * ec_functional[i];
  *Ec_out = Integrate_LogGrid(tmp);
  for (i = 0; i < Ngrid; ++i)
    tmp[i] = (rho[i]) * Vc_out[i];
  *Pc_out = Integrate_LogGrid(tmp);
  dealloc_LogGrid(ec_functional);
  dealloc_LogGrid(tmp);
}


x86 assembly (clang, -O0):
<R_Perdew_Wang>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  0xe6d(%rip),%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xe55(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe64(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe4f(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe3a(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe25(%rip),%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xe0d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xdf4(%rip),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
call   1060 <pow@plt>
movsd  %xmm0,-0x50(%rbp)
mov    $0x0,%al
call   10a0 <N_LogGrid@plt>
mov    %eax,-0xa4(%rbp)
mov    $0x0,%al
call   1090 <alloc_LogGrid@plt>
cltq
mov    %rax,-0xb0(%rbp)
mov    $0x0,%al
call   1090 <alloc_LogGrid@plt>
cltq
mov    %rax,-0xb8(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xa4(%rbp),%eax
jge    14ab <R_Perdew_Wang+0x32b>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd90(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe0f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
call   1060 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  0xdb2(%rip),%xmm0
mulsd  %xmm0,%xmm1
movsd  0xd26(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xd92(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xd79(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm3
movsd  0xd4d(%rip),%xmm4
mulsd  %xmm4,%xmm3
movsd  0xd49(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm2
movsd  0xd29(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd11(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xcac(%rip),%xmm1
divsd  -0x78(%rbp),%xmm1
movsd  0xc9f(%rip),%xmm0
addsd  %xmm1,%xmm0
call   1050 <log@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  0xcd9(%rip),%xmm0
divsd  -0x60(%rbp),%xmm0
movsd  0xcc4(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  0xc9e(%rip),%xmm3
mulsd  %xmm3,%xmm2
movsd  0xc9a(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc76(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  -0x78(%rbp),%xmm2
movsd  0xc09(%rip),%xmm3
addsd  -0x78(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xc05(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm1
mulsd  -0x98(%rbp),%xmm1
ff
movsd  0xbd0(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    -0xb0(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1254 <R_Perdew_Wang+0xd4>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xa4(%rbp),%eax
jge    14fc <R_Perdew_Wang+0x37c>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xb0(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0xb8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    14b2 <R_Perdew_Wang+0x332>
mov    -0xb8(%rbp),%rdi
mov    $0x0,%al
call   1040 <Integrate_LogGrid@plt>
cvtsi2sd %eax,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xa4(%rbp),%eax
jge    1564 <R_Perdew_Wang+0x3e4>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0xb8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    151d <R_Perdew_Wang+0x39d>
mov    -0xb8(%rbp),%rdi
mov    $0x0,%al
call   1040 <Integrate_LogGrid@plt>
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0xb0(%rbp),%rdi
mov    $0x0,%al
call   1080 <dealloc_LogGrid@plt>
mov    -0xb8(%rbp),%rdi
mov    $0x0,%al
call   1080 <dealloc_LogGrid@plt>
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<R_Perdew_Wang>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rcx,%r14
mov    %rdx,0x8(%rsp)
mov    %rsi,%r15
mov    %rdi,%rbx
movsd  0xe5c(%rip),%xmm0
call   1030 <atan@plt>
movsd  0xe4f(%rip),%xmm0
call   1030 <atan@plt>
xor    %eax,%eax
call   10a0 <N_LogGrid@plt>
mov    %eax,%ebp
xor    %eax,%eax
call   1090 <alloc_LogGrid@plt>
movslq %eax,%r12
xor    %eax,%eax
call   1090 <alloc_LogGrid@plt>
movslq %eax,%r13
test   %ebp,%ebp
jle    1387 <R_Perdew_Wang+0x207>
mov    %r14,0x18(%rsp)
mov    %ebp,0x4(%rsp)
mov    %ebp,%ebp
xor    %r14d,%r14d
jmp    131f <R_Perdew_Wang+0x19f>
xchg   %ax,%ax
movapd %xmm1,%xmm0
call   1070 <sqrt@plt>
movsd  0x10(%rsp),%xmm1
movapd %xmm0,%xmm3
movsd  %xmm3,0x20(%rsp)
mulsd  0xe17(%rip),%xmm1
movsd  0xde7(%rip),%xmm4
addsd  %xmm4,%xmm1
mulsd  0xe0b(%rip),%xmm1
movsd  %xmm1,0x30(%rsp)
movapd %xmm3,%xmm0
mulsd  0xe01(%rip),%xmm0
movapd %xmm3,%xmm2
mulsd  0xdfd(%rip),%xmm2
addsd  0xdfd(%rip),%xmm2
mulsd  %xmm3,%xmm2
addsd  0xdf9(%rip),%xmm2
mulsd  %xmm3,%xmm2
movsd  0xdf5(%rip),%xmm1
addsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x28(%rsp)
movapd %xmm4,%xmm0
divsd  %xmm2,%xmm0
addsd  %xmm4,%xmm0
call   1050 <log@plt>
movsd  0xdce(%rip),%xmm1
movsd  0x20(%rsp),%xmm3
divsd  %xmm3,%xmm1
addsd  0xdc4(%rip),%xmm1
movapd %xmm3,%xmm2
mulsd  0xdc0(%rip),%xmm2
addsd  0xdc0(%rip),%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mulsd  0xdb8(%rip),%xmm2
movapd %xmm0,%xmm1
movsd  0x30(%rsp),%xmm4
mulsd  %xmm4,%xmm1
movsd  0x28(%rsp),%xmm5
movapd %xmm5,%xmm3
addsd  0xd20(%rip),%xmm3
mulsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm2
divsd  %xmm3,%xmm2
mulsd  0xd8c(%rip),%xmm0
addsd  %xmm2,%xmm0
mulsd  0x10(%rsp),%xmm0
divsd  0xd82(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm1,(%r12,%r14,8)
movsd  %xmm0,(%r15,%r14,8)
add    $0x1,%r14
cmp    %r14,%rbp
je     136e <R_Perdew_Wang+0x1ee>
movsd  (%rbx,%r14,8),%xmm0
divsd  0xcdb(%rip),%xmm0
addsd  0xcdb(%rip),%xmm0
movsd  0xcdb(%rip),%xmm1
call   1060 <pow@plt>
movsd  0xcd6(%rip),%xmm1
divsd  %xmm0,%xmm1
ucomisd 0xd3a(%rip),%xmm1
movsd  %xmm1,0x10(%rsp)
jb     11f0 <R_Perdew_Wang+0x70>
xorps  %xmm3,%xmm3
sqrtsd %xmm1,%xmm3
jmp    1203 <R_Perdew_Wang+0x83>
mov    0x4(%rsp),%eax
test   %eax,%eax
mov    0x18(%rsp),%r14
jle    1387 <R_Perdew_Wang+0x207>
cmp    $0x4,%eax
jae    13d9 <R_Perdew_Wang+0x259>
xor    %eax,%eax
jmp    14e4 <R_Perdew_Wang+0x364>
mov    %r13,%rdi
xor    %eax,%eax
call   1040 <Integrate_LogGrid@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    0x8(%rsp),%rax
movsd  %xmm0,(%rax)
mov    %r13,%rdi
xor    %eax,%eax
call   1040 <Integrate_LogGrid@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,(%r14)
mov    %r12,%rdi
xor    %eax,%eax
call   1080 <dealloc_LogGrid@plt>
mov    %r13,%rdi
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1080 <dealloc_LogGrid@plt>
lea    0x0(,%rbp,8),%rax
add    %r13,%rax
lea    (%rbx,%rbp,8),%rcx
lea    (%r12,%rbp,8),%rdx
cmp    %rcx,%r13
setb   %sil
cmp    %rbx,%rax
seta   %dil
cmp    %rdx,%r13
setb   %cl
cmp    %rax,%r12
setb   %dl
xor    %eax,%eax
test   %dil,%sil
jne    14e4 <R_Perdew_Wang+0x364>
and    %dl,%cl
jne    14e4 <R_Perdew_Wang+0x364>
mov    %ebp,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     1779 <R_Perdew_Wang+0x5f9>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
nop
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movupd (%r12,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%r12,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x0(%r13,%rcx,8)
movupd %xmm0,0x10(%r13,%rcx,8)
movupd 0x20(%rbx,%rcx,8),%xmm0
movupd 0x30(%rbx,%rcx,8),%xmm1
movupd 0x20(%r12,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x30(%r12,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x20(%r13,%rcx,8)
movupd %xmm0,0x30(%r13,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rsi
jne    1440 <R_Perdew_Wang+0x2c0>
test   $0x1,%dl
je     14db <R_Perdew_Wang+0x35b>
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movupd (%r12,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%r12,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x0(%r13,%rcx,8)
movupd %xmm0,0x10(%r13,%rcx,8)
cmp    %rbp,%rax
je     1587 <R_Perdew_Wang+0x407>
mov    %rax,%rcx
not    %rcx
add    %rbp,%rcx
mov    %rbp,%rdx
and    $0x3,%rdx
je     151c <R_Perdew_Wang+0x39c>
cs nopw 0x0(%rax,%rax,1)
movsd  (%rbx,%rax,8),%xmm0
mulsd  (%r12,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    1500 <R_Perdew_Wang+0x380>
cmp    $0x3,%rcx
jb     1587 <R_Perdew_Wang+0x407>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rbx,%rax,8),%xmm0
mulsd  (%r12,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
movsd  0x8(%rbx,%rax,8),%xmm0
mulsd  0x8(%r12,%rax,8),%xmm0
movsd  %xmm0,0x8(%r13,%rax,8)
movsd  0x10(%rbx,%rax,8),%xmm0
mulsd  0x10(%r12,%rax,8),%xmm0
movsd  %xmm0,0x10(%r13,%rax,8)
movsd  0x18(%rbx,%rax,8),%xmm0
mulsd  0x18(%r12,%rax,8),%xmm0
movsd  %xmm0,0x18(%r13,%rax,8)
add    $0x4,%rax
cmp    %rax,%rbp
jne    1530 <R_Perdew_Wang+0x3b0>
mov    %r13,%rdi
xor    %eax,%eax
call   1040 <Integrate_LogGrid@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    0x8(%rsp),%rax
movsd  %xmm0,(%rax)
mov    0x4(%rsp),%eax
test   %eax,%eax
jle    13a1 <R_Perdew_Wang+0x221>
cmp    $0x4,%eax
jae    165c <R_Perdew_Wang+0x4dc>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
add    %rbp,%rcx
mov    %rbp,%rdx
and    $0x3,%rdx
je     15ec <R_Perdew_Wang+0x46c>
nopw   0x0(%rax,%rax,1)
movsd  (%rbx,%rax,8),%xmm0
mulsd  (%r15,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    15d0 <R_Perdew_Wang+0x450>
cmp    $0x3,%rcx
jb     13a1 <R_Perdew_Wang+0x221>
cs nopw 0x0(%rax,%rax,1)
movsd  (%rbx,%rax,8),%xmm0
mulsd  (%r15,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
movsd  0x8(%rbx,%rax,8),%xmm0
mulsd  0x8(%r15,%rax,8),%xmm0
movsd  %xmm0,0x8(%r13,%rax,8)
movsd  0x10(%rbx,%rax,8),%xmm0
mulsd  0x10(%r15,%rax,8),%xmm0
movsd  %xmm0,0x10(%r13,%rax,8)
movsd  0x18(%rbx,%rax,8),%xmm0
mulsd  0x18(%r15,%rax,8),%xmm0
movsd  %xmm0,0x18(%r13,%rax,8)
add    $0x4,%rax
cmp    %rax,%rbp
jne    1600 <R_Perdew_Wang+0x480>
jmp    13a1 <R_Perdew_Wang+0x221>
lea    0x0(,%rbp,8),%rax
add    %r13,%rax
lea    (%rbx,%rbp,8),%rcx
cmp    %rcx,%r13
setb   %dil
cmp    %rbx,%rax
seta   %dl
lea    (%r15,%rbp,8),%rcx
cmp    %rcx,%r13
setb   %cl
cmp    %r15,%rax
seta   %sil
xor    %eax,%eax
test   %dl,%dil
jne    15b8 <R_Perdew_Wang+0x438>
and    %sil,%cl
jne    15b8 <R_Perdew_Wang+0x438>
mov    %ebp,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     1789 <R_Perdew_Wang+0x609>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movupd (%r15,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%r15,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x0(%r13,%rcx,8)
movupd %xmm0,0x10(%r13,%rcx,8)
movupd 0x20(%rbx,%rcx,8),%xmm0
movupd 0x30(%rbx,%rcx,8),%xmm1
movupd 0x20(%r15,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x30(%r15,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x20(%r13,%rcx,8)
movupd %xmm0,0x30(%r13,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rsi
jne    16d0 <R_Perdew_Wang+0x550>
test   $0x1,%dl
je     176b <R_Perdew_Wang+0x5eb>
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movupd (%r15,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%r15,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x0(%r13,%rcx,8)
movupd %xmm0,0x10(%r13,%rcx,8)
cmp    %rbp,%rax
je     13a1 <R_Perdew_Wang+0x221>
jmp    15b8 <R_Perdew_Wang+0x438>
xor    %ecx,%ecx
test   $0x1,%dl
jne    14ad <R_Perdew_Wang+0x32d>
jmp    14db <R_Perdew_Wang+0x35b>
xor    %ecx,%ecx
test   $0x1,%dl
jne    173d <R_Perdew_Wang+0x5bd>
jmp    176b <R_Perdew_Wang+0x5eb>

LLVM IR (-O0):
define void @R_Perdew_Wang(double* %0, double* %1, double* %2, double* %3) {
%5 = alloca double*
%6 = alloca double*
%7 = alloca double*
%8 = alloca double*
%9 = alloca i32
%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 i32
%26 = alloca double*
%27 = alloca double*
store double* %0, double** %5
store double* %1, double** %6
store double* %2, double** %7
store double* %3, double** %8
%28 = call double @atan(double 1.000000e+00)
%29 = fmul double 4.000000e+00, %28
store double %29, double* %13
store double 0x3FD5555555555555, double* %10
store double 0x3FC5555555555555, double* %11
store double 0x3FF2AAAAAAAAAAAB, double* %12
%30 = call double @atan(double 1.000000e+00)
%31 = fmul double 4.000000e+00, %30
store double %31, double* %13
%32 = load double, double* %13
%33 = fdiv double 7.500000e-01, %32
%34 = load double, double* %10
%35 = call double @pow(double %33, double %34)
store double %35, double* %14
%36 = call i32 (...) @N_LogGrid()
store i32 %36, i32* %25
%37 = call i32 (...) @alloc_LogGrid()
%38 = sext i32 %37 to i64
%39 = inttoptr i64 %38 to double*
store double* %39, double** %26
%40 = call i32 (...) @alloc_LogGrid()
%41 = sext i32 %40 to i64
%42 = inttoptr i64 %41 to double*
store double* %42, double** %27
store i32 0, i32* %9
br label %43
43: ; preds = %118, %4
%44 = load i32, i32* %9
%45 = load i32, i32* %25
%46 = icmp slt i32 %44, %45
br i1 %46, label %47, label %121
47: ; preds = %43
%48 = load double*, double** %5
%49 = load i32, i32* %9
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double, double* %48, i64 %50
%52 = load double, double* %51
%53 = load double, double* %13
%54 = fmul double 4.000000e+00, %53
%55 = fdiv double %52, %54
%56 = fadd double %55, 0x2F52F8AC174D6123
store double %56, double* %17
%57 = load double, double* %14
%58 = load double, double* %17
%59 = load double, double* %10
%60 = call double @pow(double %58, double %59)
%61 = fdiv double %57, %60
store double %61, double* %15
%62 = load double, double* %15
%63 = call double @sqrt(double %62)
store double %63, double* %16
%64 = load double, double* %15
%65 = call double @llvm.fmuladd.f64(double 2.137000e-01, double %64, double 1.000000e+00)
%66 = fmul double -6.218140e-02, %65
store double %66, double* %18
%67 = load double, double* %16
%68 = fmul double 6.218140e-02, %67
%69 = load double, double* %16
%70 = load double, double* %16
%71 = load double, double* %16
%72 = call double @llvm.fmuladd.f64(double 4.929400e-01, double %71, double 1.638200e+00)
%73 = call double @llvm.fmuladd.f64(double %70, double %72, double 3.587600e+00)
%74 = call double @llvm.fmuladd.f64(double %69, double %73, double 0x401E61FF2E48E8A7)
%75 = fmul double %68, %74
store double %75, double* %19
%76 = load double, double* %19
%77 = fdiv double 1.000000e+00, %76
%78 = fadd double 1.000000e+00, %77
%79 = call double @log(double %78)
store double %79, double* %20
%80 = load double, double* %16
%81 = fdiv double 0x401E61FF2E48E8A7, %80
%82 = fadd double %81, 7.175200e+00
%83 = load double, double* %16
%84 = load double, double* %16
%85 = call double @llvm.fmuladd.f64(double 1.971760e+00, double %84, double 4.914600e+00)
%86 = call double @llvm.fmuladd.f64(double %83, double %85, double %82)
%87 = fmul double 3.109070e-02, %86
store double %87, double* %21
%88 = load double, double* %18
%89 = load double, double* %20
%90 = fmul double %88, %89
store double %90, double* %22
%91 = load double, double* %20
%92 = load double, double* %18
%93 = load double, double* %21
%94 = fmul double %92, %93
%95 = load double, double* %19
%96 = load double, double* %19
%97 = fadd double 1.000000e+00, %96
%98 = fmul double %95, %97
%99 = fdiv double %94, %98
%100 = fneg double %99
%101 = call double @llvm.fmuladd.f64(double 0xBF8B36D356F9BECD, double %91, double %100)
store double %101, double* %23
%102 = load double, double* %22
%103 = load double, double* %15
%104 = load double, double* %23
%105 = fmul double %103, %104
%106 = fdiv double %105, 3.000000e+00
%107 = fsub double %102, %106
store double %107, double* %24
%108 = load double, double* %22
%109 = load double*, double** %26
%110 = load i32, i32* %9
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds double, double* %109, i64 %111
store double %108, double* %112
%113 = load double, double* %24
%114 = load double*, double** %6
%115 = load i32, i32* %9
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds double, double* %114, i64 %116
store double %113, double* %117
br label %118
118: ; preds = %47
%119 = load i32, i32* %9
%120 = add nsw i32 %119, 1
store i32 %120, i32* %9
br label %43
121: ; preds = %43
store i32 0, i32* %9
br label %122
122: ; preds = %142, %121
%123 = load i32, i32* %9
%124 = load i32, i32* %25
%125 = icmp slt i32 %123, %124
br i1 %125, label %126, label %145
126: ; preds = %122
%127 = load double*, double** %5
%128 = load i32, i32* %9
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds double, double* %127, i64 %129
%131 = load double, double* %130
%132 = load double*, double** %26
%133 = load i32, i32* %9
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds double, double* %132, i64 %134
%136 = load double, double* %135
%137 = fmul double %131, %136
%138 = load double*, double** %27
%139 = load i32, i32* %9
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds double, double* %138, i64 %140
store double %137, double* %141
br label %142
142: ; preds = %126
%143 = load i32, i32* %9
%144 = add nsw i32 %143, 1
store i32 %144, i32* %9
br label %122
145: ; preds = %122
%146 = load double*, double** %27
%147 = call i32 (double*, ...) bitcast (i32 (...)* @Integrate_LogGrid to i32 (double*, ...)*)(double* %146)
%148 = sitofp i32 %147 to double
%149 = load double*, double** %7
store double %148, double* %149
store i32 0, i32* %9
br label %150
150: ; preds = %170, %145
%151 = load i32, i32* %9
%152 = load i32, i32* %25
%153 = icmp slt i32 %151, %152
br i1 %153, label %154, label %173
154: ; preds = %150
%155 = load double*, double** %5
%156 = load i32, i32* %9
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds double, double* %155, i64 %157
%159 = load double, double* %158
%160 = load double*, double** %6
%161 = load i32, i32* %9
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds double, double* %160, i64 %162
%164 = load double, double* %163
%165 = fmul double %159, %164
%166 = load double*, double** %27
%167 = load i32, i32* %9
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds double, double* %166, i64 %168
store double %165, double* %169
br label %170
170: ; preds = %154
%171 = load i32, i32* %9
%172 = add nsw i32 %171, 1
store i32 %172, i32* %9
br label %150
173: ; preds = %150
%174 = load double*, double** %27
%175 = call i32 (double*, ...) bitcast (i32 (...)* @Integrate_LogGrid to i32 (double*, ...)*)(double* %174)
%176 = sitofp i32 %175 to double
%177 = load double*, double** %8
store double %176, double* %177
%178 = load double*, double** %26
%179 = call i32 (double*, ...) bitcast (i32 (...)* @dealloc_LogGrid to i32 (double*, ...)*)(double* %178)
%180 = load double*, double** %27
%181 = call i32 (double*, ...) bitcast (i32 (...)* @dealloc_LogGrid to i32 (double*, ...)*)(double* %180)
ret void
}

LLVM IR (-O2):
define void @R_Perdew_Wang(double* nocapture %0, double* nocapture %1, double* nocapture writeonly %2, double* nocapture writeonly %3) {
%5 = tail call double @atan(double 1.000000e+00)
%6 = tail call double @atan(double 1.000000e+00)
%7 = tail call i32 (...) @N_LogGrid()
%8 = tail call i32 (...) @alloc_LogGrid()
%9 = sext i32 %8 to i64
%10 = inttoptr i64 %9 to double*
%11 = inttoptr i64 %9 to i8*
%12 = tail call i32 (...) @alloc_LogGrid()
%13 = sext i32 %12 to i64
%14 = inttoptr i64 %13 to double*
%15 = inttoptr i64 %13 to i8*
%16 = icmp sgt i32 %7, 0
br i1 %16, label %17, label %203
17: ; preds = %4
%18 = zext i32 %7 to i64
br label %134
19: ; preds = %134
br i1 %16, label %20, label %203
20: ; preds = %19
%21 = zext i32 %7 to i64
%22 = icmp ult i32 %7, 4
br i1 %22, label %113, label %23
23: ; preds = %20
%24 = getelementptr double, double* %14, i64 %18
%25 = bitcast double* %24 to i8*
%26 = getelementptr double, double* %0, i64 %18
%27 = bitcast double* %26 to i8*
%28 = getelementptr double, double* %10, i64 %18
%29 = bitcast double* %28 to i8*
%30 = icmp ult i8* %15, %27
%31 = icmp ugt double* %24, %0
%32 = and i1 %30, %31
%33 = icmp ult i8* %15, %29
%34 = icmp ult i8* %11, %25
%35 = and i1 %33, %34
%36 = or i1 %32, %35
br i1 %36, label %113, label %37
37: ; preds = %23
%38 = and i64 %18, 4294967292
%39 = add nsw i64 %38, -4
%40 = lshr exact i64 %39, 2
%41 = add nuw nsw i64 %40, 1
%42 = and i64 %41, 1
%43 = icmp eq i64 %39, 0
br i1 %43, label %89, label %44
44: ; preds = %37
%45 = and i64 %41, 9223372036854775806
br label %46
46: ; preds = %46, %44
%47 = phi i64 [ 0, %44 ], [ %86, %46 ]
%48 = phi i64 [ 0, %44 ], [ %87, %46 ]
%49 = getelementptr inbounds double, double* %0, i64 %47
%50 = bitcast double* %49 to <2 x double>*
%51 = load <2 x double>, <2 x double>* %50
%52 = getelementptr inbounds double, double* %49, i64 2
%53 = bitcast double* %52 to <2 x double>*
%54 = load <2 x double>, <2 x double>* %53
%55 = getelementptr inbounds double, double* %10, i64 %47
%56 = bitcast double* %55 to <2 x double>*
%57 = load <2 x double>, <2 x double>* %56
%58 = getelementptr inbounds double, double* %55, i64 2
%59 = bitcast double* %58 to <2 x double>*
%60 = load <2 x double>, <2 x double>* %59
%61 = fmul <2 x double> %51, %57
%62 = fmul <2 x double> %54, %60
%63 = getelementptr inbounds double, double* %14, i64 %47
%64 = bitcast double* %63 to <2 x double>*
store <2 x double> %61, <2 x double>* %64
%65 = getelementptr inbounds double, double* %63, i64 2
%66 = bitcast double* %65 to <2 x double>*
store <2 x double> %62, <2 x double>* %66
%67 = or i64 %47, 4
%68 = getelementptr inbounds double, double* %0, i64 %67
%69 = bitcast double* %68 to <2 x double>*
%70 = load <2 x double>, <2 x double>* %69
%71 = getelementptr inbounds double, double* %68, i64 2
%72 = bitcast double* %71 to <2 x double>*
%73 = load <2 x double>, <2 x double>* %72
%74 = getelementptr inbounds double, double* %10, i64 %67
%75 = bitcast double* %74 to <2 x double>*
%76 = load <2 x double>, <2 x double>* %75
%77 = getelementptr inbounds double, double* %74, i64 2
%78 = bitcast double* %77 to <2 x double>*
%79 = load <2 x double>, <2 x double>* %78
%80 = fmul <2 x double> %70, %76
%81 = fmul <2 x double> %73, %79
%82 = getelementptr inbounds double, double* %14, i64 %67
%83 = bitcast double* %82 to <2 x double>*
store <2 x double> %80, <2 x double>* %83
%84 = getelementptr inbounds double, double* %82, i64 2
%85 = bitcast double* %84 to <2 x double>*
store <2 x double> %81, <2 x double>* %85
%86 = add nuw i64 %47, 8
%87 = add i64 %48, 2
%88 = icmp eq i64 %87, %45
br i1 %88, label %89, label %46
89: ; preds = %46, %37
%90 = phi i64 [ 0, %37 ], [ %86, %46 ]
%91 = icmp eq i64 %42, 0
br i1 %91, label %111, label %92
92: ; preds = %89
%93 = getelementptr inbounds double, double* %0, i64 %90
%94 = bitcast double* %93 to <2 x double>*
%95 = load <2 x double>, <2 x double>* %94
%96 = getelementptr inbounds double, double* %93, i64 2
%97 = bitcast double* %96 to <2 x double>*
%98 = load <2 x double>, <2 x double>* %97
%99 = getelementptr inbounds double, double* %10, i64 %90
%100 = bitcast double* %99 to <2 x double>*
%101 = load <2 x double>, <2 x double>* %100
%102 = getelementptr inbounds double, double* %99, i64 2
%103 = bitcast double* %102 to <2 x double>*
%104 = load <2 x double>, <2 x double>* %103
%105 = fmul <2 x double> %95, %101
%106 = fmul <2 x double> %98, %104
%107 = getelementptr inbounds double, double* %14, i64 %90
%108 = bitcast double* %107 to <2 x double>*
store <2 x double> %105, <2 x double>* %108
%109 = getelementptr inbounds double, double* %107, i64 2
%110 = bitcast double* %109 to <2 x double>*
store <2 x double> %106, <2 x double>* %110
br label %111
111: ; preds = %89, %92
%112 = icmp eq i64 %38, %18
br i1 %112, label %206, label %113
113: ; preds = %23, %20, %111
%114 = phi i64 [ 0, %23 ], [ 0, %20 ], [ %38, %111 ]
%115 = xor i64 %114, -1
%116 = add nsw i64 %115, %18
%117 = and i64 %18, 3
%118 = icmp eq i64 %117, 0
br i1 %118, label %131, label %119
119: ; preds = %113, %119
%120 = phi i64 [ %128, %119 ], [ %114, %113 ]
%121 = phi i64 [ %129, %119 ], [ 0, %113 ]
%122 = getelementptr inbounds double, double* %0, i64 %120
%123 = load double, double* %122
%124 = getelementptr inbounds double, double* %10, i64 %120
%125 = load double, double* %124
%126 = fmul double %123, %125
%127 = getelementptr inbounds double, double* %14, i64 %120
store double %126, double* %127
%128 = add nuw nsw i64 %120, 1
%129 = add i64 %121, 1
%130 = icmp eq i64 %129, %117
br i1 %130, label %131, label %119
131: ; preds = %119, %113
%132 = phi i64 [ %114, %113 ], [ %128, %119 ]
%133 = icmp ult i64 %116, 3
br i1 %133, label %206, label %172
134: ; preds = %17, %134
%135 = phi i64 [ 0, %17 ], [ %170, %134 ]
%136 = getelementptr inbounds double, double* %0, i64 %135
%137 = load double, double* %136
%138 = fdiv double %137, 0x402921FB54442D18
%139 = fadd double %138, 0x2F52F8AC174D6123
%140 = tail call double @pow(double %139, double 0x3FD5555555555555)
%141 = fdiv double 0x3FE3D9E945CF0E15, %140
%142 = tail call double @sqrt(double %141)
%143 = tail call double @llvm.fmuladd.f64(double %141, double 2.137000e-01, double 1.000000e+00)
%144 = fmul double %143, -6.218140e-02
%145 = fmul double %142, 6.218140e-02
%146 = tail call double @llvm.fmuladd.f64(double %142, double 4.929400e-01, double 1.638200e+00)
%147 = tail call double @llvm.fmuladd.f64(double %142, double %146, double 3.587600e+00)
%148 = tail call double @llvm.fmuladd.f64(double %142, double %147, double 0x401E61FF2E48E8A7)
%149 = fmul double %145, %148
%150 = fdiv double 1.000000e+00, %149
%151 = fadd double %150, 1.000000e+00
%152 = tail call double @log(double %151)
%153 = fdiv double 0x401E61FF2E48E8A7, %142
%154 = fadd double %153, 7.175200e+00
%155 = tail call double @llvm.fmuladd.f64(double %142, double 1.971760e+00, double 4.914600e+00)
%156 = tail call double @llvm.fmuladd.f64(double %142, double %155, double %154)
%157 = fmul double %156, 3.109070e-02
%158 = fmul double %152, %144
%159 = fadd double %149, 1.000000e+00
%160 = fmul double %149, %159
%161 = fneg double %144
%162 = fmul double %157, %161
%163 = fdiv double %162, %160
%164 = tail call double @llvm.fmuladd.f64(double %152, double 0xBF8B36D356F9BECD, double %163)
%165 = fmul double %141, %164
%166 = fdiv double %165, 3.000000e+00
%167 = fsub double %158, %166
%168 = getelementptr inbounds double, double* %10, i64 %135
store double %158, double* %168
%169 = getelementptr inbounds double, double* %1, i64 %135
store double %167, double* %169
%170 = add nuw nsw i64 %135, 1
%171 = icmp eq i64 %170, %18
br i1 %171, label %19, label %134
172: ; preds = %131, %172
%173 = phi i64 [ %201, %172 ], [ %132, %131 ]
%174 = getelementptr inbounds double, double* %0, i64 %173
%175 = load double, double* %174
%176 = getelementptr inbounds double, double* %10, i64 %173
%177 = load double, double* %176
%178 = fmul double %175, %177
%179 = getelementptr inbounds double, double* %14, i64 %173
store double %178, double* %179
%180 = add nuw nsw i64 %173, 1
%181 = getelementptr inbounds double, double* %0, i64 %180
%182 = load double, double* %181
%183 = getelementptr inbounds double, double* %10, i64 %180
%184 = load double, double* %183
%185 = fmul double %182, %184
%186 = getelementptr inbounds double, double* %14, i64 %180
store double %185, double* %186
%187 = add nuw nsw i64 %173, 2
%188 = getelementptr inbounds double, double* %0, i64 %187
%189 = load double, double* %188
%190 = getelementptr inbounds double, double* %10, i64 %187
%191 = load double, double* %190
%192 = fmul double %189, %191
%193 = getelementptr inbounds double, double* %14, i64 %187
store double %192, double* %193
%194 = add nuw nsw i64 %173, 3
%195 = getelementptr inbounds double, double* %0, i64 %194
%196 = load double, double* %195
%197 = getelementptr inbounds double, double* %10, i64 %194
%198 = load double, double* %197
%199 = fmul double %196, %198
%200 = getelementptr inbounds double, double* %14, i64 %194
store double %199, double* %200
%201 = add nuw nsw i64 %173, 4
%202 = icmp eq i64 %201, %21
br i1 %202, label %206, label %172
203: ; preds = %19, %4
%204 = tail call i32 (double*, ...) bitcast (i32 (...)* @Integrate_LogGrid to i32 (double*, ...)*)(double* %14)
%205 = sitofp i32 %204 to double
store double %205, double* %2
br label %353
206: ; preds = %131, %172, %111
%207 = tail call i32 (double*, ...) bitcast (i32 (...)* @Integrate_LogGrid to i32 (double*, ...)*)(double* %14)
%208 = sitofp i32 %207 to double
store double %208, double* %2
br i1 %16, label %209, label %353
209: ; preds = %206
%210 = zext i32 %7 to i64
%211 = icmp ult i32 %7, 4
br i1 %211, label %301, label %212
212: ; preds = %209
%213 = getelementptr double, double* %14, i64 %18
%214 = getelementptr double, double* %0, i64 %18
%215 = bitcast double* %214 to i8*
%216 = getelementptr double, double* %1, i64 %18
%217 = bitcast double* %216 to i8*
%218 = icmp ult i8* %15, %215
%219 = icmp ugt double* %213, %0
%220 = and i1 %218, %219
%221 = icmp ult i8* %15, %217
%222 = icmp ugt double* %213, %1
%223 = and i1 %221, %222
%224 = or i1 %220, %223
br i1 %224, label %301, label %225
225: ; preds = %212
%226 = and i64 %18, 4294967292
%227 = add nsw i64 %226, -4
%228 = lshr exact i64 %227, 2
%229 = add nuw nsw i64 %228, 1
%230 = and i64 %229, 1
%231 = icmp eq i64 %227, 0
br i1 %231, label %277, label %232
232: ; preds = %225
%233 = and i64 %229, 9223372036854775806
br label %234
234: ; preds = %234, %232
%235 = phi i64 [ 0, %232 ], [ %274, %234 ]
%236 = phi i64 [ 0, %232 ], [ %275, %234 ]
%237 = getelementptr inbounds double, double* %0, i64 %235
%238 = bitcast double* %237 to <2 x double>*
%239 = load <2 x double>, <2 x double>* %238
%240 = getelementptr inbounds double, double* %237, i64 2
%241 = bitcast double* %240 to <2 x double>*
%242 = load <2 x double>, <2 x double>* %241
%243 = getelementptr inbounds double, double* %1, i64 %235
%244 = bitcast double* %243 to <2 x double>*
%245 = load <2 x double>, <2 x double>* %244
%246 = getelementptr inbounds double, double* %243, i64 2
%247 = bitcast double* %246 to <2 x double>*
%248 = load <2 x double>, <2 x double>* %247
%249 = fmul <2 x double> %239, %245
%250 = fmul <2 x double> %242, %248
%251 = getelementptr inbounds double, double* %14, i64 %235
%252 = bitcast double* %251 to <2 x double>*
store <2 x double> %249, <2 x double>* %252
%253 = getelementptr inbounds double, double* %251, i64 2
%254 = bitcast double* %253 to <2 x double>*
store <2 x double> %250, <2 x double>* %254
%255 = or i64 %235, 4
%256 = getelementptr inbounds double, double* %0, i64 %255
%257 = bitcast double* %256 to <2 x double>*
%258 = load <2 x double>, <2 x double>* %257
%259 = getelementptr inbounds double, double* %256, i64 2
%260 = bitcast double* %259 to <2 x double>*
%261 = load <2 x double>, <2 x double>* %260
%262 = getelementptr inbounds double, double* %1, i64 %255
%263 = bitcast double* %262 to <2 x double>*
%264 = load <2 x double>, <2 x double>* %263
%265 = getelementptr inbounds double, double* %262, i64 2
%266 = bitcast double* %265 to <2 x double>*
%267 = load <2 x double>, <2 x double>* %266
%268 = fmul <2 x double> %258, %264
%269 = fmul <2 x double> %261, %267
%270 = getelementptr inbounds double, double* %14, i64 %255
%271 = bitcast double* %270 to <2 x double>*
store <2 x double> %268, <2 x double>* %271
%272 = getelementptr inbounds double, double* %270, i64 2
%273 = bitcast double* %272 to <2 x double>*
store <2 x double> %269, <2 x double>* %273
%274 = add nuw i64 %235, 8
%275 = add i64 %236, 2
%276 = icmp eq i64 %275, %233
br i1 %276, label %277, label %234
277: ; preds = %234, %225
%278 = phi i64 [ 0, %225 ], [ %274, %234 ]
%279 = icmp eq i64 %230, 0
br i1 %279, label %299, label %280
280: ; preds = %277
%281 = getelementptr inbounds double, double* %0, i64 %278
%282 = bitcast double* %281 to <2 x double>*
%283 = load <2 x double>, <2 x double>* %282
%284 = getelementptr inbounds double, double* %281, i64 2
%285 = bitcast double* %284 to <2 x double>*
%286 = load <2 x double>, <2 x double>* %285
%287 = getelementptr inbounds double, double* %1, i64 %278
%288 = bitcast double* %287 to <2 x double>*
%289 = load <2 x double>, <2 x double>* %288
%290 = getelementptr inbounds double, double* %287, i64 2
%291 = bitcast double* %290 to <2 x double>*
%292 = load <2 x double>, <2 x double>* %291
%293 = fmul <2 x double> %283, %289
%294 = fmul <2 x double> %286, %292
%295 = getelementptr inbounds double, double* %14, i64 %278
%296 = bitcast double* %295 to <2 x double>*
store <2 x double> %293, <2 x double>* %296
%297 = getelementptr inbounds double, double* %295, i64 2
%298 = bitcast double* %297 to <2 x double>*
store <2 x double> %294, <2 x double>* %298
br label %299
299: ; preds = %277, %280
%300 = icmp eq i64 %226, %18
br i1 %300, label %353, label %301
301: ; preds = %212, %209, %299
%302 = phi i64 [ 0, %212 ], [ 0, %209 ], [ %226, %299 ]
%303 = xor i64 %302, -1
%304 = add nsw i64 %303, %18
%305 = and i64 %18, 3
%306 = icmp eq i64 %305, 0
br i1 %306, label %319, label %307
307: ; preds = %301, %307
%308 = phi i64 [ %316, %307 ], [ %302, %301 ]
%309 = phi i64 [ %317, %307 ], [ 0, %301 ]
%310 = getelementptr inbounds double, double* %0, i64 %308
%311 = load double, double* %310
%312 = getelementptr inbounds double, double* %1, i64 %308
%313 = load double, double* %312
%314 = fmul double %311, %313
%315 = getelementptr inbounds double, double* %14, i64 %308
store double %314, double* %315
%316 = add nuw nsw i64 %308, 1
%317 = add i64 %309, 1
%318 = icmp eq i64 %317, %305
br i1 %318, label %319, label %307
319: ; preds = %307, %301
%320 = phi i64 [ %302, %301 ], [ %316, %307 ]
%321 = icmp ult i64 %304, 3
br i1 %321, label %353, label %322
322: ; preds = %319, %322
%323 = phi i64 [ %351, %322 ], [ %320, %319 ]
%324 = getelementptr inbounds double, double* %0, i64 %323
%325 = load double, double* %324
%326 = getelementptr inbounds double, double* %1, i64 %323
%327 = load double, double* %326
%328 = fmul double %325, %327
%329 = getelementptr inbounds double, double* %14, i64 %323
store double %328, double* %329
%330 = add nuw nsw i64 %323, 1
%331 = getelementptr inbounds double, double* %0, i64 %330
%332 = load double, double* %331
%333 = getelementptr inbounds double, double* %1, i64 %330
%334 = load double, double* %333
%335 = fmul double %332, %334
%336 = getelementptr inbounds double, double* %14, i64 %330
store double %335, double* %336
%337 = add nuw nsw i64 %323, 2
%338 = getelementptr inbounds double, double* %0, i64 %337
%339 = load double, double* %338
%340 = getelementptr inbounds double, double* %1, i64 %337
%341 = load double, double* %340
%342 = fmul double %339, %341
%343 = getelementptr inbounds double, double* %14, i64 %337
store double %342, double* %343
%344 = add nuw nsw i64 %323, 3
%345 = getelementptr inbounds double, double* %0, i64 %344
%346 = load double, double* %345
%347 = getelementptr inbounds double, double* %1, i64 %344
%348 = load double, double* %347
%349 = fmul double %346, %348
%350 = getelementptr inbounds double, double* %14, i64 %344
store double %349, double* %350
%351 = add nuw nsw i64 %323, 4
%352 = icmp eq i64 %351, %210
br i1 %352, label %353, label %322
353: ; preds = %319, %322, %299, %203, %206
%354 = tail call i32 (double*, ...) bitcast (i32 (...)* @Integrate_LogGrid to i32 (double*, ...)*)(double* %14)
%355 = sitofp i32 %354 to double
store double %355, double* %3
%356 = tail call i32 (double*, ...) bitcast (i32 (...)* @dealloc_LogGrid to i32 (double*, ...)*)(double* %10)
%357 = tail call i32 (double*, ...) bitcast (i32 (...)* @dealloc_LogGrid to i32 (double*, ...)*)(double* %14)
ret void
}