void R_Perdew_Zunger(rho, Vc, Ec, Pc) double rho[], Vc[], *Ec, *Pc;
{
  int i;
  double onethird, fourthird, twothird;
  double two_to_onethird;
  double pi, rs_scale;
  double rs, n;
  double log_rs, sqrt_rs;
  double denominator;
  double ec_p;
  double uc_p;
  int Ngrid;
  double *ec_functional;
  double *tmp;
  onethird = 1.0 / 3.0;
  fourthird = 4.0 / 3.0;
  twothird = 2.0 / 3.0;
  two_to_onethird = pow(2.0, onethird);
  pi = 4.0 * atan(1.0);
  rs_scale = pow((0.75 / pi), (1.0 / 3.0));
  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);
    if (rs >= 1.0) {
      sqrt_rs = sqrt(rs);
      denominator = (1.0 + 1.0529 * sqrt_rs + 0.3334 * rs);
      ec_p = -0.1423 / denominator;
      uc_p = ec_p - onethird * -0.1423 *
                        (0.5 * 1.0529 * sqrt_rs + 0.3334 * rs) /
                        (denominator * denominator);
    } else {
      log_rs = log(rs);
      ec_p = 0.03110 * log_rs + -0.0480 + 0.00200 * rs * log_rs + -0.0116 * rs;
      uc_p = ec_p -
             onethird * (0.03110 + 0.00200 * (rs * log_rs + rs) + -0.0116 * rs);
    }
    ec_functional[i] = ec_p;
    Vc[i] = uc_p;
  }
  for (i = 0; i < Ngrid; ++i)
    tmp[i] = (rho[i]) * ec_functional[i];
  *Ec = Integrate_LogGrid(tmp);
  for (i = 0; i < Ngrid; ++i)
    tmp[i] = (rho[i]) * Vc[i];
  *Pc = Integrate_LogGrid(tmp);
  dealloc_LogGrid(ec_functional);
  dealloc_LogGrid(tmp);
}


x86 assembly (clang, -O0):
<R_Perdew_Zunger>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  0xe5d(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe80(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe6b(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  0xe51(%rip),%xmm0
call   1060 <pow@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  0xe37(%rip),%xmm0
call   1030 <atan@plt>
movaps %xmm0,%xmm1
movsd  0xe1f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe06(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  0xdf1(%rip),%xmm1
call   1060 <pow@plt>
movsd  %xmm0,-0x58(%rbp)
mov    $0x0,%al
call   10a0 <N_LogGrid@plt>
mov    %eax,-0x94(%rbp)
mov    $0x0,%al
call   1090 <alloc_LogGrid@plt>
cltq
mov    %rax,-0xa0(%rbp)
mov    $0x0,%al
call   1090 <alloc_LogGrid@plt>
cltq
mov    %rax,-0xa8(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    149d <R_Perdew_Zunger+0x31d>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd9f(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdb6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
call   1060 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  0xd50(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1387 <R_Perdew_Zunger+0x207>
movsd  -0x60(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm1
movsd  0xd8a(%rip),%xmm0
mulsd  %xmm0,%xmm1
movsd  0xd1e(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  0xd5d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xd50(%rip),%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  0xd33(%rip),%xmm1
mulsd  -0x30(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  0xd19(%rip),%xmm3
mulsd  -0x60(%rbp),%xmm3
movsd  0xd04(%rip),%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  -0x80(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    1462 <R_Perdew_Zunger+0x2e2>
movsd  -0x60(%rbp),%xmm0
call   1050 <log@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0xcad(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xca9(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xc8d(%rip),%xmm1
mulsd  -0x60(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  0xc66(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm3
movsd  -0x70(%rbp),%xmm4
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
movsd  0xc32(%rip),%xmm2
mulsd  %xmm2,%xmm3
movsd  0xc2e(%rip),%xmm2
addsd  %xmm2,%xmm3
movsd  -0x60(%rbp),%xmm2
movsd  0xc0d(%rip),%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0xa0(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%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    124d <R_Perdew_Zunger+0xcd>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    14ee <R_Perdew_Zunger+0x36e>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xa0(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0xa8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    14a4 <R_Perdew_Zunger+0x324>
mov    -0xa8(%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    -0x94(%rbp),%eax
jge    1556 <R_Perdew_Zunger+0x3d6>
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    -0xa8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    150f <R_Perdew_Zunger+0x38f>
mov    -0xa8(%rbp),%rdi
mov    $0x0,%al
call   1040 <Integrate_LogGrid@plt>
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0xa0(%rbp),%rdi
mov    $0x0,%al
call   1080 <dealloc_LogGrid@plt>
mov    -0xa8(%rbp),%rdi
mov    $0x0,%al
call   1080 <dealloc_LogGrid@plt>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<R_Perdew_Zunger>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rcx,%r14
mov    %rdx,0x18(%rsp)
mov    %rsi,0x8(%rsp)
mov    %rdi,%rbx
movsd  0xe5a(%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,%r15
xor    %eax,%eax
call   1090 <alloc_LogGrid@plt>
movslq %eax,%r13
test   %ebp,%ebp
jle    1375 <R_Perdew_Zunger+0x1f5>
mov    %ebp,%eax
mov    %r14,0x20(%rsp)
mov    %ebp,%edi
xor    %r14d,%r14d
jmp    1288 <R_Perdew_Zunger+0x108>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd %xmm1,%xmm0
movsd  %xmm1,0x10(%rsp)
call   1050 <log@plt>
movapd %xmm0,%xmm2
movsd  0xe3d(%rip),%xmm3
mulsd  %xmm3,%xmm2
addsd  0xe39(%rip),%xmm2
movsd  0x10(%rsp),%xmm5
movapd %xmm5,%xmm1
movsd  0xe2f(%rip),%xmm4
mulsd  %xmm4,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm2,%xmm1
movapd %xmm5,%xmm2
mulsd  0xe1f(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm5,%xmm0
addsd  %xmm5,%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
mulsd  0xe07(%rip),%xmm0
addsd  %xmm1,%xmm0
mov    %ebp,%eax
mov    %r12,%rdi
mov    0x8(%rsp),%rcx
movsd  %xmm1,(%r15,%r14,8)
movsd  %xmm0,(%rcx,%r14,8)
add    $0x1,%r14
cmp    %r14,%rdi
je     1360 <R_Perdew_Zunger+0x1e0>
mov    %rdi,%r12
mov    %eax,%ebp
movsd  (%rbx,%r14,8),%xmm0
divsd  0xd6d(%rip),%xmm0
addsd  0xd6d(%rip),%xmm0
movsd  0xd6d(%rip),%xmm1
call   1060 <pow@plt>
movsd  0xd68(%rip),%xmm1
divsd  %xmm0,%xmm1
ucomisd 0xd3c(%rip),%xmm1
jb     11f0 <R_Perdew_Zunger+0x70>
ucomisd 0xd9e(%rip),%xmm1
jb     12e0 <R_Perdew_Zunger+0x160>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    12f5 <R_Perdew_Zunger+0x175>
nopl   (%rax)
movapd %xmm1,%xmm0
movsd  %xmm1,0x10(%rsp)
call   1070 <sqrt@plt>
movsd  0x10(%rsp),%xmm1
mov    %ebp,%eax
mov    %r12,%rdi
mov    0x8(%rsp),%rcx
movapd %xmm0,%xmm2
mulsd  0xd1d(%rip),%xmm2
addsd  0xced(%rip),%xmm2
mulsd  0xd15(%rip),%xmm1
addsd  %xmm1,%xmm2
mulsd  0xd11(%rip),%xmm0
addsd  %xmm1,%xmm0
mulsd  0xd0d(%rip),%xmm0
movapd 0xd45(%rip),%xmm1
unpcklpd %xmm0,%xmm1
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
addsd  %xmm1,%xmm0
jmp    126f <R_Perdew_Zunger+0xef>
test   %eax,%eax
mov    0x20(%rsp),%r14
jle    1375 <R_Perdew_Zunger+0x1f5>
cmp    $0x4,%eax
jae    13c7 <R_Perdew_Zunger+0x247>
xor    %eax,%eax
jmp    14d4 <R_Perdew_Zunger+0x354>
mov    %r13,%rdi
xor    %eax,%eax
call   1040 <Integrate_LogGrid@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    0x18(%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    %r15,%rdi
xor    %eax,%eax
call   1080 <dealloc_LogGrid@plt>
mov    %r13,%rdi
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1080 <dealloc_LogGrid@plt>
lea    0x0(,%rdi,8),%rax
add    %r13,%rax
lea    (%rbx,%rdi,8),%rcx
lea    (%r15,%rdi,8),%rdx
cmp    %rcx,%r13
setb   %sil
cmp    %rbx,%rax
seta   %r8b
cmp    %rdx,%r13
setb   %cl
cmp    %rax,%r15
setb   %dl
xor    %eax,%eax
test   %r8b,%sil
jne    14d4 <R_Perdew_Zunger+0x354>
and    %dl,%cl
jne    14d4 <R_Perdew_Zunger+0x354>
mov    %edi,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     1753 <R_Perdew_Zunger+0x5d3>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
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    1430 <R_Perdew_Zunger+0x2b0>
test   $0x1,%dl
je     14cb <R_Perdew_Zunger+0x34b>
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    %rdi,%rax
je     1577 <R_Perdew_Zunger+0x3f7>
mov    %rax,%rcx
not    %rcx
add    %rdi,%rcx
mov    %rdi,%rdx
and    $0x3,%rdx
je     150c <R_Perdew_Zunger+0x38c>
cs 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    14f0 <R_Perdew_Zunger+0x370>
cmp    $0x3,%rcx
jb     1577 <R_Perdew_Zunger+0x3f7>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
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,%rdi
jne    1520 <R_Perdew_Zunger+0x3a0>
mov    %r13,%rdi
xor    %eax,%eax
call   1040 <Integrate_LogGrid@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    0x18(%rsp),%rax
movsd  %xmm0,(%rax)
test   %ebp,%ebp
mov    0x8(%rsp),%rdi
jle    138f <R_Perdew_Zunger+0x20f>
cmp    $0x4,%ebp
jae    1648 <R_Perdew_Zunger+0x4c8>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
add    %r12,%rcx
mov    %r12,%rdx
and    $0x3,%rdx
je     15db <R_Perdew_Zunger+0x45b>
nopl   0x0(%rax,%rax,1)
movsd  (%rbx,%rax,8),%xmm0
mulsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    15c0 <R_Perdew_Zunger+0x440>
cmp    $0x3,%rcx
jb     138f <R_Perdew_Zunger+0x20f>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rbx,%rax,8),%xmm0
mulsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
movsd  0x8(%rbx,%rax,8),%xmm0
mulsd  0x8(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x8(%r13,%rax,8)
movsd  0x10(%rbx,%rax,8),%xmm0
mulsd  0x10(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x10(%r13,%rax,8)
movsd  0x18(%rbx,%rax,8),%xmm0
mulsd  0x18(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x18(%r13,%rax,8)
add    $0x4,%rax
cmp    %rax,%r12
jne    15f0 <R_Perdew_Zunger+0x470>
jmp    138f <R_Perdew_Zunger+0x20f>
lea    0x0(,%r12,8),%rax
add    %r13,%rax
lea    (%rbx,%r12,8),%rcx
cmp    %rcx,%r13
setb   %r8b
cmp    %rbx,%rax
seta   %dl
lea    (%rdi,%r12,8),%rcx
cmp    %rcx,%r13
setb   %cl
cmp    %rdi,%rax
seta   %sil
xor    %eax,%eax
test   %dl,%r8b
jne    15a9 <R_Perdew_Zunger+0x429>
and    %sil,%cl
jne    15a9 <R_Perdew_Zunger+0x429>
mov    %r12d,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rcx
mov    %rcx,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     1763 <R_Perdew_Zunger+0x5e3>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movupd (%rdi,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%rdi,%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(%rdi,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x30(%rdi,%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    16b0 <R_Perdew_Zunger+0x530>
test   $0x1,%dl
je     1745 <R_Perdew_Zunger+0x5c5>
movupd (%rbx,%rcx,8),%xmm0
movupd 0x10(%rbx,%rcx,8),%xmm1
movupd (%rdi,%rcx,8),%xmm2
mulpd  %xmm0,%xmm2
movupd 0x10(%rdi,%rcx,8),%xmm0
mulpd  %xmm1,%xmm0
movupd %xmm2,0x0(%r13,%rcx,8)
movupd %xmm0,0x10(%r13,%rcx,8)
cmp    %r12,%rax
je     138f <R_Perdew_Zunger+0x20f>
jmp    15a9 <R_Perdew_Zunger+0x429>
xor    %ecx,%ecx
test   $0x1,%dl
jne    149d <R_Perdew_Zunger+0x31d>
jmp    14cb <R_Perdew_Zunger+0x34b>
xor    %ecx,%ecx
test   $0x1,%dl
jne    1719 <R_Perdew_Zunger+0x599>
jmp    1745 <R_Perdew_Zunger+0x5c5>

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

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