void interp4_table0_complex_per(
    const double *r_ck, const double *i_ck, const int K1, const int K2,
    const int K3, const int K4, const double *r_h1, const double *i_h1,
    const double *r_h2, const double *i_h2, const double *r_h3,
    const double *i_h3, const double *r_h4, const double *i_h4, const int J1,
    const int J2, const int J3, const int J4, const int L1, const int L2,
    const int L3, const int L4, const double *p_tm, const int M, double *r_fm,
    double *i_fm) {
  {
    const int ncenter1 = floor(J1 * L1 / 2.);
    r_h1 += ncenter1;
    i_h1 += ncenter1;
  }
  {
    const int ncenter2 = floor(J2 * L2 / 2.);
    r_h2 += ncenter2;
    i_h2 += ncenter2;
  }
  {
    const int ncenter3 = floor(J3 * L3 / 2.);
    r_h3 += ncenter3;
    i_h3 += ncenter3;
  }
  {
    const int ncenter4 = floor(J4 * L4 / 2.);
    r_h4 += ncenter4;
    i_h4 += ncenter4;
  }
  for (int mm = 0; mm < M; mm++) {
    int jj1, jj2, jj3, jj4;
    const double t4 = p_tm[3 * M];
    const double t3 = p_tm[2 * M];
    const double t2 = p_tm[M];
    const double t1 = *p_tm++;
    double sum4r = 0;
    double sum4i = 0;
    const int koff1 = 1 + floor(t1 - J1 / 2.);
    const int koff2 = 1 + floor(t2 - J2 / 2.);
    const int koff3 = 1 + floor(t3 - J3 / 2.);
    int k4 = 1 + floor(t4 - J4 / 2.);
    for (jj4 = 0; jj4 < J4; jj4++, k4++) {
      const double p4 = (t4 - k4) * L4;
      const int n4 = floor(p4 + 0.5);
      const double coef4r = r_h4[n4];
      const double coef4i = i_h4[n4];
      const int k4mod = ((k4) - (K4)*floor((k4) / (double)(K4)));
      const long k4Idx = k4mod * K3 * K2 * K1;
      double sum3r = 0;
      double sum3i = 0;
      int k3 = koff3;
      for (jj3 = 0; jj3 < J3; jj3++, k3++) {
        const double p3 = (t3 - k3) * L3;
        const int n3 = floor(p3 + 0.5);
        const double coef3r = r_h3[n3];
        const double coef3i = i_h3[n3];
        const int k3mod = ((k3) - (K3)*floor((k3) / (double)(K3)));
        const long k3Idx = k3mod * K2 * K1;
        double sum2r = 0;
        double sum2i = 0;
        int k2 = koff2;
        for (jj2 = 0; jj2 < J2; jj2++, k2++) {
          const double p2 = (t2 - k2) * L2;
          const int n2 = floor(p2 + 0.5);
          const double coef2r = r_h2[n2];
          const double coef2i = i_h2[n2];
          const int k2mod = ((k2) - (K2)*floor((k2) / (double)(K2)));
          const long k2Idx = k2mod * K1;
          register double sum1r = 0;
          register double sum1i = 0;
          int k1 = koff1;
          for (jj1 = 0; jj1 < J1; jj1++, k1++) {
            const double p1 = (t1 - k1) * L1;
            const int n1 = floor(p1 + 0.5);
            register const double coef1r = r_h1[n1];
            register const double coef1i = i_h1[n1];
            const int k1mod = ((k1) - (K1)*floor((k1) / (double)(K1)));
            const long kk = k4Idx + k3Idx + k2Idx + k1mod;
            sum1r += coef1r * r_ck[kk] - coef1i * i_ck[kk];
            sum1i += coef1r * i_ck[kk] + coef1i * r_ck[kk];
          }
          sum2r += coef2r * sum1r - coef2i * sum1i;
          sum2i += coef2r * sum1i + coef2i * sum1r;
        }
        sum3r += coef3r * sum2r - coef3i * sum2i;
        sum3i += coef3r * sum2i + coef3i * sum2r;
      }
      sum4r += coef4r * sum3r - coef4i * sum3i;
      sum4i += coef4r * sum3i + coef4i * sum3r;
    }
    *r_fm++ = sum4r;
    *i_fm++ = sum4i;
  }
}


x86 assembly (clang, -O0):
<interp4_table0_complex_per>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1d0,%rsp
mov    0xa8(%rbp),%rax
mov    0xa0(%rbp),%rax
mov    0x98(%rbp),%eax
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%eax
mov    0x80(%rbp),%eax
mov    0x78(%rbp),%eax
mov    0x70(%rbp),%eax
mov    0x68(%rbp),%eax
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
mov    0x50(%rbp),%eax
imul   0x70(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xe63(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%ecx
mov    0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x10(%rbp)
mov    -0x24(%rbp),%ecx
mov    0x18(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x18(%rbp)
mov    0x58(%rbp),%eax
imul   0x78(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xe16(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x20(%rbp)
mov    -0x28(%rbp),%ecx
mov    0x28(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x28(%rbp)
mov    0x60(%rbp),%eax
imul   0x80(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xdc6(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    0x30(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x30(%rbp)
mov    -0x2c(%rbp),%ecx
mov    0x38(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x38(%rbp)
mov    0x68(%rbp),%eax
imul   0x88(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xd76(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%ecx
mov    0x40(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x40(%rbp)
mov    -0x30(%rbp),%ecx
mov    0x48(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x48(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x98(%rbp),%eax
jge    1bbd <interp4_table0_complex_per+0xaad>
mov    0x90(%rbp),%rax
imul   $0x3,0x98(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x90(%rbp),%rax
mov    0x98(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x90(%rbp),%rax
movslq 0x98(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x90(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,0x90(%rbp)
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
cvtsi2sdl 0x50(%rbp),%xmm1
movsd  0xc96(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1030 <floor@plt>
movaps %xmm0,%xmm1
movsd  0xc86(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x7c(%rbp)
movsd  -0x60(%rbp),%xmm0
cvtsi2sdl 0x58(%rbp),%xmm1
movsd  0xc61(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1030 <floor@plt>
movaps %xmm0,%xmm1
movsd  0xc51(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x80(%rbp)
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl 0x60(%rbp),%xmm1
movsd  0xc2c(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1030 <floor@plt>
movaps %xmm0,%xmm1
movsd  0xc1c(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x84(%rbp)
movsd  -0x50(%rbp),%xmm0
cvtsi2sdl 0x68(%rbp),%xmm1
movsd  0xbf4(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
call   1030 <floor@plt>
movaps %xmm0,%xmm1
movsd  0xbe4(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x88(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    0x68(%rbp),%eax
jge    1b73 <interp4_table0_complex_per+0xa63>
movsd  -0x50(%rbp),%xmm0
cvtsi2sdl -0x88(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x88(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xb9e(%rip),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x94(%rbp)
mov    0x40(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x48(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
cvtsi2sdl -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
cvtsi2sdl -0x20(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
cvtsi2sdl -0x88(%rbp),%xmm0
ff
cvtsi2sdl -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
movsd  -0x1a0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x198(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xac(%rbp)
mov    -0xac(%rbp),%eax
imul   -0x1c(%rbp),%eax
imul   -0x18(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0xb8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x84(%rbp),%eax
mov    %eax,-0xcc(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x60(%rbp),%eax
jge    1adb <interp4_table0_complex_per+0x9cb>
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0xcc(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x80(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xa6b(%rip),%xmm0
addsd  -0xd8(%rbp),%xmm0
ff
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0xdc(%rbp)
mov    0x30(%rbp),%rax
movslq -0xdc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    0x38(%rbp),%rax
movslq -0xdc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
cvtsi2sdl -0xcc(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
cvtsi2sdl -0x1c(%rbp),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
cvtsi2sdl -0xcc(%rbp),%xmm0
ff
cvtsi2sdl -0x1c(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
movsd  -0x1b0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1a8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
imul   -0x18(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x100(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x80(%rbp),%eax
mov    %eax,-0x114(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x58(%rbp),%eax
jge    1a37 <interp4_table0_complex_per+0x927>
movsd  -0x60(%rbp),%xmm0
cvtsi2sdl -0x114(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0x942(%rip),%xmm0
addsd  -0x120(%rbp),%xmm0
ff
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x124(%rbp)
mov    0x20(%rbp),%rax
movslq -0x124(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x124(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
cvtsi2sdl -0x114(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
cvtsi2sdl -0x18(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
cvtsi2sdl -0x114(%rbp),%xmm0
ff
cvtsi2sdl -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
movsd  -0x1c0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1b8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x13c(%rbp)
mov    -0x13c(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x148(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x7c(%rbp),%eax
mov    %eax,-0x15c(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x50(%rbp),%eax
jge    1993 <interp4_table0_complex_per+0x883>
movsd  -0x68(%rbp),%xmm0
cvtsi2sdl -0x15c(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x70(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  0x81d(%rip),%xmm0
addsd  -0x168(%rbp),%xmm0
ff
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x16c(%rbp)
mov    0x10(%rbp),%rax
movslq -0x16c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x16c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
cvtsi2sdl -0x15c(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
cvtsi2sdl -0x14(%rbp),%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
cvtsi2sdl -0x15c(%rbp),%xmm0
ff
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1030 <floor@plt>
movsd  -0x1d0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1c8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x184(%rbp)
mov    -0xb8(%rbp),%rax
add    -0x100(%rbp),%rax
add    -0x148(%rbp),%rax
movslq -0x184(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x190(%rbp)
movsd  -0x178(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
mov    -0x190(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x180(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
mov    -0x190(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x178(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x190(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x180(%rbp),%xmm1
ff
mov    -0x8(%rbp),%rax
mov    -0x190(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x15c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x15c(%rbp)
jmp    17bd <interp4_table0_complex_per+0x6ad>
movsd  -0x130(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
mulsd  -0x158(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
movsd  -0x158(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
mulsd  -0x150(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x114(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x114(%rbp)
jmp    1698 <interp4_table0_complex_per+0x588>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  -0x110(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x110(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    156c <interp4_table0_complex_per+0x45c>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  -0xc8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    1439 <interp4_table0_complex_per+0x329>
movsd  -0x70(%rbp),%xmm0
mov    0xa0(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,0xa0(%rbp)
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,0xa8(%rbp)
movsd  %xmm0,(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12cb <interp4_table0_complex_per+0x1bb>
add    $0x1d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<interp4_table0_complex_per>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x258,%rsp
mov    %r9d,(%rsp)
mov    %r8d,%r14d
mov    %ecx,0x8(%rsp)
mov    %edx,0xc(%rsp)
mov    %rsi,0x138(%rsp)
mov    %rdi,%rbx
mov    0x318(%rsp),%r13d
mov    0x308(%rsp),%r12d
mov    0x300(%rsp),%r15d
mov    0x2f8(%rsp),%ebp
mov    0x2f0(%rsp),%eax
imul   0x2d0(%rsp),%eax
cvtsi2sd %eax,%xmm0
mulsd  0xe8b(%rip),%xmm0
call   1030 <floor@plt>
movsd  %xmm0,0x10(%rsp)
mov    %ebp,%eax
imul   0x2d8(%rsp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe67(%rip),%xmm0
call   1030 <floor@plt>
movsd  %xmm0,0x28(%rsp)
mov    %r15d,%eax
imul   0x2e0(%rsp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe42(%rip),%xmm0
call   1030 <floor@plt>
movsd  %xmm0,0x20(%rsp)
mov    %r12d,%eax
imul   0x2e8(%rsp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe1d(%rip),%xmm0
call   1030 <floor@plt>
movsd  0xe10(%rip),%xmm1
test   %r13d,%r13d
jle    1a20 <interp4_table0_complex_per+0x910>
mov    %r14d,%edi
mov    %rbx,%r8
mov    0x328(%rsp),%r14
mov    0x320(%rsp),%rdx
cvttsd2si 0x10(%rsp),%eax
cltq
shl    $0x3,%rax
mov    0x290(%rsp),%rcx
add    %rax,%rcx
mov    %rcx,0x120(%rsp)
add    0x298(%rsp),%rax
mov    %rax,0x128(%rsp)
cvttsd2si 0x28(%rsp),%eax
cltq
shl    $0x3,%rax
mov    0x2a0(%rsp),%rcx
add    %rax,%rcx
mov    %rcx,0x110(%rsp)
add    0x2a8(%rsp),%rax
mov    %rax,0x118(%rsp)
cvttsd2si 0x20(%rsp),%eax
cltq
shl    $0x3,%rax
mov    0x2b0(%rsp),%rcx
add    %rax,%rcx
mov    %rcx,0xf0(%rsp)
add    0x2b8(%rsp),%rax
mov    %rax,0xf8(%rsp)
cvttsd2si %xmm0,%eax
cltq
shl    $0x3,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %r12d,%xmm0
movsd  %xmm0,0xc8(%rsp)
mov    0x2c0(%rsp),%rcx
add    %rax,%rcx
mov    %rcx,0xc0(%rsp)
add    0x2c8(%rsp),%rax
mov    %rax,0xd0(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl (%rsp),%xmm0
mov    0x310(%rsp),%rbx
cvtsi2sd %r15d,%xmm2
movsd  %xmm2,0xe8(%rsp)
mov    0x318(%rsp),%eax
mov    %rax,%rcx
lea    (%rax,%rax,2),%eax
cltq
mov    %rax,0x78(%rsp)
xorps  %xmm2,%xmm2
cvtsi2sdl 0x2f8(%rsp),%xmm2
movsd  %xmm2,0x108(%rsp)
lea    (%rcx,%rcx,1),%eax
cltq
mov    %rax,0xa0(%rsp)
mov    0x8(%rsp),%r15d
xorps  %xmm2,%xmm2
cvtsi2sd %r15d,%xmm2
mov    0xc(%rsp),%eax
imul   %eax,%r15d
cvtsi2sdl 0x2f0(%rsp),%xmm3
movsd  %xmm3,0x130(%rsp)
mov    %r15d,0x8(%rsp)
xorps  %xmm3,%xmm3
cvtsi2sd %edi,%xmm3
imul   %edi,%r15d
mov    %r15d,0x38(%rsp)
mov    %ecx,%ecx
mov    %rcx,0x98(%rsp)
cvtsi2sdl 0x2d0(%rsp),%xmm4
mulsd  %xmm1,%xmm4
movsd  %xmm4,0x90(%rsp)
xorps  %xmm4,%xmm4
cvtsi2sdl 0x2d8(%rsp),%xmm4
mulsd  %xmm1,%xmm4
movsd  %xmm4,0x88(%rsp)
xorps  %xmm4,%xmm4
cvtsi2sdl 0x2e0(%rsp),%xmm4
cvtsi2sdl 0x2e8(%rsp),%xmm5
mulsd  %xmm1,%xmm4
movsd  %xmm4,0x80(%rsp)
mulsd  %xmm1,%xmm5
movsd  %xmm5,0x70(%rsp)
movapd 0xc39(%rip),%xmm1
movapd %xmm0,0x150(%rsp)
xorpd  %xmm1,%xmm0
movapd %xmm0,0x140(%rsp)
movapd %xmm3,0x1a0(%rsp)
xorpd  %xmm1,%xmm3
movapd %xmm3,0x190(%rsp)
movapd %xmm2,0x1f0(%rsp)
xorpd  %xmm1,%xmm2
movapd %xmm2,0x1e0(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x230(%rsp)
xorpd  %xmm0,%xmm1
movapd %xmm1,0x240(%rsp)
xor    %ebp,%ebp
mov    %r8,0x20(%rsp)
mov    0x128(%rsp),%r13
mov    0x120(%rsp),%r15
jmp    1497 <interp4_table0_complex_per+0x387>
nop
xorpd  %xmm0,%xmm0
mov    0xa8(%rsp),%rbx
add    $0x8,%rbx
mov    0xb0(%rsp),%rdx
movhpd %xmm0,(%rdx)
add    $0x8,%rdx
mov    0xb8(%rsp),%r14
movlpd %xmm0,(%r14)
add    $0x8,%r14
mov    0x34(%rsp),%ebp
add    $0x1,%ebp
mov    0x318(%rsp),%eax
cmp    %eax,%ebp
je     1a20 <interp4_table0_complex_per+0x910>
mov    %rdx,0xb0(%rsp)
mov    0xa0(%rsp),%rax
movsd  (%rbx,%rax,8),%xmm0
movsd  %xmm0,0x60(%rsp)
mov    0x98(%rsp),%rax
movsd  (%rbx,%rax,8),%xmm0
movsd  %xmm0,0x68(%rsp)
movsd  (%rbx),%xmm0
movsd  %xmm0,0x28(%rsp)
subsd  0x90(%rsp),%xmm0
call   1030 <floor@plt>
movsd  %xmm0,(%rsp)
movsd  0x68(%rsp),%xmm0
subsd  0x88(%rsp),%xmm0
call   1030 <floor@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x60(%rsp),%xmm0
subsd  0x80(%rsp),%xmm0
call   1030 <floor@plt>
cmpl   $0x0,0x2e8(%rsp)
mov    %r14,0xb8(%rsp)
mov    %rbx,0xa8(%rsp)
mov    %ebp,0x34(%rsp)
jle    1450 <interp4_table0_complex_per+0x340>
movsd  0xace(%rip),%xmm3
movsd  (%rsp),%xmm1
addsd  %xmm3,%xmm1
cvttsd2si %xmm1,%eax
mov    %eax,0x54(%rsp)
mov    0x78(%rsp),%rax
movsd  (%rbx,%rax,8),%xmm1
movsd  0x10(%rsp),%xmm2
addsd  %xmm3,%xmm2
cvttsd2si %xmm2,%eax
mov    %eax,0x48(%rsp)
addsd  %xmm3,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,0x3c(%rsp)
movsd  %xmm1,0xd8(%rsp)
movapd %xmm1,%xmm0
subsd  0x70(%rsp),%xmm0
call   1030 <floor@plt>
addsd  0xa75(%rip),%xmm0
cvttsd2si %xmm0,%eax
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
movsd  0xa5b(%rip),%xmm1
jmp    161f <interp4_table0_complex_per+0x50f>
nopw   0x0(%rax,%rax,1)
movapd 0x160(%rsp),%xmm2
movapd %xmm2,%xmm0
movapd 0xa4b(%rip),%xmm1
xorpd  %xmm1,%xmm0
unpcklpd %xmm3,%xmm2
movapd %xmm3,%xmm1
shufpd $0x1,%xmm0,%xmm1
mulpd  %xmm2,%xmm1
movapd 0x170(%rsp),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm3,%xmm2
addpd  %xmm1,%xmm2
movapd 0x180(%rsp),%xmm0
addpd  %xmm2,%xmm0
mov    0x40(%rsp),%ecx
add    $0x1,%ecx
mov    0x44(%rsp),%eax
add    $0x1,%eax
cmp    0x2e8(%rsp),%ecx
movsd  0x9e7(%rip),%xmm1
je     1454 <interp4_table0_complex_per+0x344>
mov    %ecx,0x40(%rsp)
movapd %xmm0,0x180(%rsp)
mov    %eax,0x44(%rsp)
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  %xmm2,(%rsp)
movsd  0xd8(%rsp),%xmm0
subsd  %xmm2,%xmm0
mulsd  0xc8(%rsp),%xmm0
addsd  %xmm1,%xmm0
call   1030 <floor@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rsp),%xmm0
divsd  0x150(%rsp),%xmm0
call   1030 <floor@plt>
cvttsd2si 0x10(%rsp),%eax
cltq
mov    0xc0(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm1
movaps %xmm1,0x170(%rsp)
mov    0xd0(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm1
movapd %xmm1,0x160(%rsp)
xorpd  %xmm3,%xmm3
cmpl   $0x0,0x2e0(%rsp)
jle    15b0 <interp4_table0_complex_per+0x4a0>
mulsd  0x140(%rsp),%xmm0
addsd  (%rsp),%xmm0
cvttsd2si %xmm0,%eax
imul   0x38(%rsp),%eax
cltq
mov    %rax,0xe0(%rsp)
xorpd  %xmm3,%xmm3
xor    %eax,%eax
mov    0x3c(%rsp),%ecx
jmp    1753 <interp4_table0_complex_per+0x643>
cs nopw 0x0(%rax,%rax,1)
movapd 0x1b0(%rsp),%xmm2
movapd %xmm2,%xmm0
xorpd  0x90b(%rip),%xmm0
unpcklpd %xmm3,%xmm2
movapd %xmm3,%xmm1
shufpd $0x1,%xmm0,%xmm1
mulpd  %xmm2,%xmm1
movapd 0x1c0(%rsp),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm3,%xmm0
addpd  %xmm1,%xmm0
movapd 0x1d0(%rsp),%xmm3
addpd  %xmm0,%xmm3
mov    0x50(%rsp),%eax
add    $0x1,%eax
mov    0x4c(%rsp),%ecx
add    $0x1,%ecx
cmp    0x2e0(%rsp),%eax
je     15b0 <interp4_table0_complex_per+0x4a0>
mov    %eax,0x50(%rsp)
movapd %xmm3,0x1d0(%rsp)
mov    %ecx,0x4c(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  0x60(%rsp),%xmm0
movsd  %xmm1,(%rsp)
subsd  %xmm1,%xmm0
mulsd  0xe8(%rsp),%xmm0
addsd  0x875(%rip),%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
cltq
mov    0xf0(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm0
movaps %xmm0,0x1c0(%rsp)
mov    0xf8(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm0
movapd %xmm0,0x1b0(%rsp)
xorpd  %xmm3,%xmm3
cmpl   $0x0,0x2d8(%rsp)
jle    16f0 <interp4_table0_complex_per+0x5e0>
movsd  (%rsp),%xmm0
divsd  0x1a0(%rsp),%xmm0
call   1030 <floor@plt>
mulsd  0x190(%rsp),%xmm0
addsd  (%rsp),%xmm0
cvttsd2si %xmm0,%eax
imul   0x8(%rsp),%eax
cltq
add    0xe0(%rsp),%rax
mov    %rax,0x100(%rsp)
xorpd  %xmm3,%xmm3
xor    %eax,%eax
mov    0x48(%rsp),%ecx
jmp    187f <interp4_table0_complex_per+0x76f>
nopl   0x0(%rax,%rax,1)
movapd 0x200(%rsp),%xmm2
movapd %xmm2,%xmm0
xorpd  %xmm4,%xmm0
unpcklpd %xmm3,%xmm2
movapd %xmm3,%xmm1
shufpd $0x1,%xmm0,%xmm1
mulpd  %xmm2,%xmm1
movapd 0x210(%rsp),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm3,%xmm0
addpd  %xmm1,%xmm0
movapd 0x220(%rsp),%xmm3
addpd  %xmm0,%xmm3
mov    0x5c(%rsp),%eax
add    $0x1,%eax
mov    0x58(%rsp),%ecx
add    $0x1,%ecx
cmp    0x2d8(%rsp),%eax
je     16f0 <interp4_table0_complex_per+0x5e0>
mov    %eax,0x5c(%rsp)
movapd %xmm3,0x220(%rsp)
mov    %ecx,0x58(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  0x68(%rsp),%xmm0
movsd  %xmm1,(%rsp)
subsd  %xmm1,%xmm0
mulsd  0x108(%rsp),%xmm0
movsd  0x749(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
cltq
mov    0x110(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm0
movaps %xmm0,0x210(%rsp)
mov    0x118(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm0
movapd %xmm0,0x200(%rsp)
xorpd  %xmm3,%xmm3
cmpl   $0x0,0x2d0(%rsp)
movapd 0x70b(%rip),%xmm4
jle    1820 <interp4_table0_complex_per+0x710>
movsd  (%rsp),%xmm0
divsd  0x1f0(%rsp),%xmm0
call   1030 <floor@plt>
mulsd  0x1e0(%rsp),%xmm0
addsd  (%rsp),%xmm0
cvttsd2si %xmm0,%eax
imul   0xc(%rsp),%eax
movslq %eax,%rbx
add    0x100(%rsp),%rbx
xorpd  %xmm3,%xmm3
mov    0x2d0(%rsp),%ebp
mov    0x54(%rsp),%r14d
movapd %xmm3,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
movsd  %xmm1,(%rsp)
movsd  0x28(%rsp),%xmm0
subsd  %xmm1,%xmm0
mulsd  0x130(%rsp),%xmm0
addsd  0x682(%rip),%xmm0
call   1030 <floor@plt>
cvttsd2si %xmm0,%eax
movslq %eax,%r12
movsd  (%rsp),%xmm0
divsd  0x230(%rsp),%xmm0
call   1030 <floor@plt>
movapd 0x66b(%rip),%xmm4
mulsd  0x240(%rsp),%xmm0
addsd  (%rsp),%xmm0
cvttsd2si %xmm0,%eax
cltq
add    %rbx,%rax
movsd  0x0(%r13,%r12,8),%xmm0
movapd %xmm0,%xmm1
xorpd  %xmm4,%xmm1
mov    0x138(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm2
unpcklpd %xmm2,%xmm0
mov    0x20(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm3
unpcklpd %xmm3,%xmm2
unpcklpd %xmm1,%xmm3
mulpd  %xmm0,%xmm3
movsd  (%r15,%r12,8),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm2
addpd  %xmm3,%xmm2
movapd 0x10(%rsp),%xmm3
addpd  %xmm2,%xmm3
add    $0x1,%r14d
add    $0xffffffff,%ebp
jne    1950 <interp4_table0_complex_per+0x840>
jmp    1820 <interp4_table0_complex_per+0x710>
add    $0x258,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @interp4_table0_complex_per(double* %0, double* %1, i32 %2, i32 %3, i32 %4, i32 %5, double* %6, double* %7, double* %8, double* %9, double* %10, double* %11, double* %12, double* %13, i32 %14, i32 %15, i32 %16, i32 %17, i32 %18, i32 %19, i32 %20, i32 %21, double* %22, i32 %23, double* %24, double* %25) {
%27 = alloca double*
%28 = alloca double*
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca double*
%34 = alloca double*
%35 = alloca double*
%36 = alloca double*
%37 = alloca double*
%38 = alloca double*
%39 = alloca double*
%40 = alloca double*
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca double*
%50 = alloca i32
%51 = alloca double*
%52 = alloca double*
%53 = alloca i32
%54 = alloca i32
%55 = alloca i32
%56 = alloca i32
%57 = alloca i32
%58 = alloca i32
%59 = alloca i32
%60 = alloca i32
%61 = alloca i32
%62 = alloca double
%63 = alloca double
%64 = alloca double
%65 = alloca double
%66 = alloca double
%67 = alloca double
%68 = alloca i32
%69 = alloca i32
%70 = alloca i32
%71 = alloca i32
%72 = alloca double
%73 = alloca i32
%74 = alloca double
%75 = alloca double
%76 = alloca i32
%77 = alloca i64
%78 = alloca double
%79 = alloca double
%80 = alloca i32
%81 = alloca double
%82 = alloca i32
%83 = alloca double
%84 = alloca double
%85 = alloca i32
%86 = alloca i64
%87 = alloca double
%88 = alloca double
%89 = alloca i32
%90 = alloca double
%91 = alloca i32
%92 = alloca double
%93 = alloca double
%94 = alloca i32
%95 = alloca i64
%96 = alloca double
%97 = alloca double
%98 = alloca i32
%99 = alloca double
%100 = alloca i32
%101 = alloca double
%102 = alloca double
%103 = alloca i32
%104 = alloca i64
store double* %0, double** %27
store double* %1, double** %28
store i32 %2, i32* %29
store i32 %3, i32* %30
store i32 %4, i32* %31
store i32 %5, i32* %32
store double* %6, double** %33
store double* %7, double** %34
store double* %8, double** %35
store double* %9, double** %36
store double* %10, double** %37
store double* %11, double** %38
store double* %12, double** %39
store double* %13, double** %40
store i32 %14, i32* %41
store i32 %15, i32* %42
store i32 %16, i32* %43
store i32 %17, i32* %44
store i32 %18, i32* %45
store i32 %19, i32* %46
store i32 %20, i32* %47
store i32 %21, i32* %48
store double* %22, double** %49
store i32 %23, i32* %50
store double* %24, double** %51
store double* %25, double** %52
%105 = load i32, i32* %41
%106 = load i32, i32* %45
%107 = mul nsw i32 %105, %106
%108 = sitofp i32 %107 to double
%109 = fdiv double %108, 2.000000e+00
%110 = call double @llvm.floor.f64(double %109)
%111 = fptosi double %110 to i32
store i32 %111, i32* %53
%112 = load i32, i32* %53
%113 = load double*, double** %33
%114 = sext i32 %112 to i64
%115 = getelementptr inbounds double, double* %113, i64 %114
store double* %115, double** %33
%116 = load i32, i32* %53
%117 = load double*, double** %34
%118 = sext i32 %116 to i64
%119 = getelementptr inbounds double, double* %117, i64 %118
store double* %119, double** %34
%120 = load i32, i32* %42
%121 = load i32, i32* %46
%122 = mul nsw i32 %120, %121
%123 = sitofp i32 %122 to double
%124 = fdiv double %123, 2.000000e+00
%125 = call double @llvm.floor.f64(double %124)
%126 = fptosi double %125 to i32
store i32 %126, i32* %54
%127 = load i32, i32* %54
%128 = load double*, double** %35
%129 = sext i32 %127 to i64
%130 = getelementptr inbounds double, double* %128, i64 %129
store double* %130, double** %35
%131 = load i32, i32* %54
%132 = load double*, double** %36
%133 = sext i32 %131 to i64
%134 = getelementptr inbounds double, double* %132, i64 %133
store double* %134, double** %36
%135 = load i32, i32* %43
%136 = load i32, i32* %47
%137 = mul nsw i32 %135, %136
%138 = sitofp i32 %137 to double
%139 = fdiv double %138, 2.000000e+00
%140 = call double @llvm.floor.f64(double %139)
%141 = fptosi double %140 to i32
store i32 %141, i32* %55
%142 = load i32, i32* %55
%143 = load double*, double** %37
%144 = sext i32 %142 to i64
%145 = getelementptr inbounds double, double* %143, i64 %144
store double* %145, double** %37
%146 = load i32, i32* %55
%147 = load double*, double** %38
%148 = sext i32 %146 to i64
%149 = getelementptr inbounds double, double* %147, i64 %148
store double* %149, double** %38
%150 = load i32, i32* %44
%151 = load i32, i32* %48
%152 = mul nsw i32 %150, %151
%153 = sitofp i32 %152 to double
%154 = fdiv double %153, 2.000000e+00
%155 = call double @llvm.floor.f64(double %154)
%156 = fptosi double %155 to i32
store i32 %156, i32* %56
%157 = load i32, i32* %56
%158 = load double*, double** %39
%159 = sext i32 %157 to i64
%160 = getelementptr inbounds double, double* %158, i64 %159
store double* %160, double** %39
%161 = load i32, i32* %56
%162 = load double*, double** %40
%163 = sext i32 %161 to i64
%164 = getelementptr inbounds double, double* %162, i64 %163
store double* %164, double** %40
store i32 0, i32* %57
br label %165
165: ; preds = %517, %26
%166 = load i32, i32* %57
%167 = load i32, i32* %50
%168 = icmp slt i32 %166, %167
br i1 %168, label %169, label %520
169: ; preds = %165
%170 = load double*, double** %49
%171 = load i32, i32* %50
%172 = mul nsw i32 3, %171
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds double, double* %170, i64 %173
%175 = load double, double* %174
store double %175, double* %62
%176 = load double*, double** %49
%177 = load i32, i32* %50
%178 = mul nsw i32 2, %177
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds double, double* %176, i64 %179
%181 = load double, double* %180
store double %181, double* %63
%182 = load double*, double** %49
%183 = load i32, i32* %50
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds double, double* %182, i64 %184
%186 = load double, double* %185
store double %186, double* %64
%187 = load double*, double** %49
%188 = getelementptr inbounds double, double* %187, i32 1
store double* %188, double** %49
%189 = load double, double* %187
store double %189, double* %65
store double 0.000000e+00, double* %66
store double 0.000000e+00, double* %67
%190 = load double, double* %65
%191 = load i32, i32* %41
%192 = sitofp i32 %191 to double
%193 = fdiv double %192, 2.000000e+00
%194 = fsub double %190, %193
%195 = call double @llvm.floor.f64(double %194)
%196 = fadd double 1.000000e+00, %195
%197 = fptosi double %196 to i32
store i32 %197, i32* %68
%198 = load double, double* %64
%199 = load i32, i32* %42
%200 = sitofp i32 %199 to double
%201 = fdiv double %200, 2.000000e+00
%202 = fsub double %198, %201
%203 = call double @llvm.floor.f64(double %202)
%204 = fadd double 1.000000e+00, %203
%205 = fptosi double %204 to i32
store i32 %205, i32* %69
%206 = load double, double* %63
%207 = load i32, i32* %43
%208 = sitofp i32 %207 to double
%209 = fdiv double %208, 2.000000e+00
%210 = fsub double %206, %209
%211 = call double @llvm.floor.f64(double %210)
%212 = fadd double 1.000000e+00, %211
%213 = fptosi double %212 to i32
store i32 %213, i32* %70
%214 = load double, double* %62
%215 = load i32, i32* %44
%216 = sitofp i32 %215 to double
%217 = fdiv double %216, 2.000000e+00
%218 = fsub double %214, %217
%219 = call double @llvm.floor.f64(double %218)
%220 = fadd double 1.000000e+00, %219
%221 = fptosi double %220 to i32
store i32 %221, i32* %71
store i32 0, i32* %61
br label %222
222: ; preds = %505, %169
%223 = load i32, i32* %61
%224 = load i32, i32* %44
%225 = icmp slt i32 %223, %224
br i1 %225, label %226, label %510
226: ; preds = %222
%227 = load double, double* %62
%228 = load i32, i32* %71
%229 = sitofp i32 %228 to double
%230 = fsub double %227, %229
%231 = load i32, i32* %48
%232 = sitofp i32 %231 to double
%233 = fmul double %230, %232
store double %233, double* %72
%234 = load double, double* %72
%235 = fadd double %234, 5.000000e-01
%236 = call double @llvm.floor.f64(double %235)
%237 = fptosi double %236 to i32
store i32 %237, i32* %73
%238 = load double*, double** %39
%239 = load i32, i32* %73
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds double, double* %238, i64 %240
%242 = load double, double* %241
store double %242, double* %74
%243 = load double*, double** %40
%244 = load i32, i32* %73
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds double, double* %243, i64 %245
%247 = load double, double* %246
store double %247, double* %75
%248 = load i32, i32* %71
%249 = sitofp i32 %248 to double
%250 = load i32, i32* %32
%251 = sitofp i32 %250 to double
%252 = load i32, i32* %71
%253 = sitofp i32 %252 to double
%254 = load i32, i32* %32
%255 = sitofp i32 %254 to double
%256 = fdiv double %253, %255
%257 = call double @llvm.floor.f64(double %256)
%258 = fneg double %251
%259 = call double @llvm.fmuladd.f64(double %258, double %257, double %249)
%260 = fptosi double %259 to i32
store i32 %260, i32* %76
%261 = load i32, i32* %76
%262 = load i32, i32* %31
%263 = mul nsw i32 %261, %262
%264 = load i32, i32* %30
%265 = mul nsw i32 %263, %264
%266 = load i32, i32* %29
%267 = mul nsw i32 %265, %266
%268 = sext i32 %267 to i64
store i64 %268, i64* %77
store double 0.000000e+00, double* %78
store double 0.000000e+00, double* %79
%269 = load i32, i32* %70
store i32 %269, i32* %80
store i32 0, i32* %60
br label %270
270: ; preds = %482, %226
%271 = load i32, i32* %60
%272 = load i32, i32* %43
%273 = icmp slt i32 %271, %272
br i1 %273, label %274, label %487
274: ; preds = %270
%275 = load double, double* %63
%276 = load i32, i32* %80
%277 = sitofp i32 %276 to double
%278 = fsub double %275, %277
%279 = load i32, i32* %47
%280 = sitofp i32 %279 to double
%281 = fmul double %278, %280
store double %281, double* %81
%282 = load double, double* %81
%283 = fadd double %282, 5.000000e-01
%284 = call double @llvm.floor.f64(double %283)
%285 = fptosi double %284 to i32
store i32 %285, i32* %82
%286 = load double*, double** %37
%287 = load i32, i32* %82
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds double, double* %286, i64 %288
%290 = load double, double* %289
store double %290, double* %83
%291 = load double*, double** %38
%292 = load i32, i32* %82
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds double, double* %291, i64 %293
%295 = load double, double* %294
store double %295, double* %84
%296 = load i32, i32* %80
%297 = sitofp i32 %296 to double
%298 = load i32, i32* %31
%299 = sitofp i32 %298 to double
%300 = load i32, i32* %80
%301 = sitofp i32 %300 to double
%302 = load i32, i32* %31
%303 = sitofp i32 %302 to double
%304 = fdiv double %301, %303
%305 = call double @llvm.floor.f64(double %304)
%306 = fneg double %299
%307 = call double @llvm.fmuladd.f64(double %306, double %305, double %297)
%308 = fptosi double %307 to i32
store i32 %308, i32* %85
%309 = load i32, i32* %85
%310 = load i32, i32* %30
%311 = mul nsw i32 %309, %310
%312 = load i32, i32* %29
%313 = mul nsw i32 %311, %312
%314 = sext i32 %313 to i64
store i64 %314, i64* %86
store double 0.000000e+00, double* %87
store double 0.000000e+00, double* %88
%315 = load i32, i32* %69
store i32 %315, i32* %89
store i32 0, i32* %59
br label %316
316: ; preds = %459, %274
%317 = load i32, i32* %59
%318 = load i32, i32* %42
%319 = icmp slt i32 %317, %318
br i1 %319, label %320, label %464
320: ; preds = %316
%321 = load double, double* %64
%322 = load i32, i32* %89
%323 = sitofp i32 %322 to double
%324 = fsub double %321, %323
%325 = load i32, i32* %46
%326 = sitofp i32 %325 to double
%327 = fmul double %324, %326
store double %327, double* %90
%328 = load double, double* %90
%329 = fadd double %328, 5.000000e-01
%330 = call double @llvm.floor.f64(double %329)
%331 = fptosi double %330 to i32
store i32 %331, i32* %91
%332 = load double*, double** %35
%333 = load i32, i32* %91
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds double, double* %332, i64 %334
%336 = load double, double* %335
store double %336, double* %92
%337 = load double*, double** %36
%338 = load i32, i32* %91
%339 = sext i32 %338 to i64
%340 = getelementptr inbounds double, double* %337, i64 %339
%341 = load double, double* %340
store double %341, double* %93
%342 = load i32, i32* %89
%343 = sitofp i32 %342 to double
%344 = load i32, i32* %30
%345 = sitofp i32 %344 to double
%346 = load i32, i32* %89
%347 = sitofp i32 %346 to double
%348 = load i32, i32* %30
%349 = sitofp i32 %348 to double
%350 = fdiv double %347, %349
%351 = call double @llvm.floor.f64(double %350)
%352 = fneg double %345
%353 = call double @llvm.fmuladd.f64(double %352, double %351, double %343)
%354 = fptosi double %353 to i32
store i32 %354, i32* %94
%355 = load i32, i32* %94
%356 = load i32, i32* %29
%357 = mul nsw i32 %355, %356
%358 = sext i32 %357 to i64
store i64 %358, i64* %95
store double 0.000000e+00, double* %96
store double 0.000000e+00, double* %97
%359 = load i32, i32* %68
store i32 %359, i32* %98
store i32 0, i32* %58
br label %360
360: ; preds = %436, %320
%361 = load i32, i32* %58
%362 = load i32, i32* %41
%363 = icmp slt i32 %361, %362
br i1 %363, label %364, label %441
364: ; preds = %360
%365 = load double, double* %65
%366 = load i32, i32* %98
%367 = sitofp i32 %366 to double
%368 = fsub double %365, %367
%369 = load i32, i32* %45
%370 = sitofp i32 %369 to double
%371 = fmul double %368, %370
store double %371, double* %99
%372 = load double, double* %99
%373 = fadd double %372, 5.000000e-01
%374 = call double @llvm.floor.f64(double %373)
%375 = fptosi double %374 to i32
store i32 %375, i32* %100
%376 = load double*, double** %33
%377 = load i32, i32* %100
%378 = sext i32 %377 to i64
%379 = getelementptr inbounds double, double* %376, i64 %378
%380 = load double, double* %379
store double %380, double* %101
%381 = load double*, double** %34
%382 = load i32, i32* %100
%383 = sext i32 %382 to i64
%384 = getelementptr inbounds double, double* %381, i64 %383
%385 = load double, double* %384
store double %385, double* %102
%386 = load i32, i32* %98
%387 = sitofp i32 %386 to double
%388 = load i32, i32* %29
%389 = sitofp i32 %388 to double
%390 = load i32, i32* %98
%391 = sitofp i32 %390 to double
%392 = load i32, i32* %29
%393 = sitofp i32 %392 to double
%394 = fdiv double %391, %393
%395 = call double @llvm.floor.f64(double %394)
%396 = fneg double %389
%397 = call double @llvm.fmuladd.f64(double %396, double %395, double %387)
%398 = fptosi double %397 to i32
store i32 %398, i32* %103
%399 = load i64, i64* %77
%400 = load i64, i64* %86
%401 = add nsw i64 %399, %400
%402 = load i64, i64* %95
%403 = add nsw i64 %401, %402
%404 = load i32, i32* %103
%405 = sext i32 %404 to i64
%406 = add nsw i64 %403, %405
store i64 %406, i64* %104
%407 = load double, double* %101
%408 = load double*, double** %27
%409 = load i64, i64* %104
%410 = getelementptr inbounds double, double* %408, i64 %409
%411 = load double, double* %410
%412 = load double, double* %102
%413 = load double*, double** %28
%414 = load i64, i64* %104
%415 = getelementptr inbounds double, double* %413, i64 %414
%416 = load double, double* %415
%417 = fmul double %412, %416
%418 = fneg double %417
%419 = call double @llvm.fmuladd.f64(double %407, double %411, double %418)
%420 = load double, double* %96
%421 = fadd double %420, %419
store double %421, double* %96
%422 = load double, double* %101
%423 = load double*, double** %28
%424 = load i64, i64* %104
%425 = getelementptr inbounds double, double* %423, i64 %424
%426 = load double, double* %425
%427 = load double, double* %102
%428 = load double*, double** %27
%429 = load i64, i64* %104
%430 = getelementptr inbounds double, double* %428, i64 %429
%431 = load double, double* %430
%432 = fmul double %427, %431
%433 = call double @llvm.fmuladd.f64(double %422, double %426, double %432)
%434 = load double, double* %97
%435 = fadd double %434, %433
store double %435, double* %97
br label %436
436: ; preds = %364
%437 = load i32, i32* %58
%438 = add nsw i32 %437, 1
store i32 %438, i32* %58
%439 = load i32, i32* %98
%440 = add nsw i32 %439, 1
store i32 %440, i32* %98
br label %360
441: ; preds = %360
%442 = load double, double* %92
%443 = load double, double* %96
%444 = load double, double* %93
%445 = load double, double* %97
%446 = fmul double %444, %445
%447 = fneg double %446
%448 = call double @llvm.fmuladd.f64(double %442, double %443, double %447)
%449 = load double, double* %87
%450 = fadd double %449, %448
store double %450, double* %87
%451 = load double, double* %92
%452 = load double, double* %97
%453 = load double, double* %93
%454 = load double, double* %96
%455 = fmul double %453, %454
%456 = call double @llvm.fmuladd.f64(double %451, double %452, double %455)
%457 = load double, double* %88
%458 = fadd double %457, %456
store double %458, double* %88
br label %459
459: ; preds = %441
%460 = load i32, i32* %59
%461 = add nsw i32 %460, 1
store i32 %461, i32* %59
%462 = load i32, i32* %89
%463 = add nsw i32 %462, 1
store i32 %463, i32* %89
br label %316
464: ; preds = %316
%465 = load double, double* %83
%466 = load double, double* %87
%467 = load double, double* %84
%468 = load double, double* %88
%469 = fmul double %467, %468
%470 = fneg double %469
%471 = call double @llvm.fmuladd.f64(double %465, double %466, double %470)
%472 = load double, double* %78
%473 = fadd double %472, %471
store double %473, double* %78
%474 = load double, double* %83
%475 = load double, double* %88
%476 = load double, double* %84
%477 = load double, double* %87
%478 = fmul double %476, %477
%479 = call double @llvm.fmuladd.f64(double %474, double %475, double %478)
%480 = load double, double* %79
%481 = fadd double %480, %479
store double %481, double* %79
br label %482
482: ; preds = %464
%483 = load i32, i32* %60
%484 = add nsw i32 %483, 1
store i32 %484, i32* %60
%485 = load i32, i32* %80
%486 = add nsw i32 %485, 1
store i32 %486, i32* %80
br label %270
487: ; preds = %270
%488 = load double, double* %74
%489 = load double, double* %78
%490 = load double, double* %75
%491 = load double, double* %79
%492 = fmul double %490, %491
%493 = fneg double %492
%494 = call double @llvm.fmuladd.f64(double %488, double %489, double %493)
%495 = load double, double* %66
%496 = fadd double %495, %494
store double %496, double* %66
%497 = load double, double* %74
%498 = load double, double* %79
%499 = load double, double* %75
%500 = load double, double* %78
%501 = fmul double %499, %500
%502 = call double @llvm.fmuladd.f64(double %497, double %498, double %501)
%503 = load double, double* %67
%504 = fadd double %503, %502
store double %504, double* %67
br label %505
505: ; preds = %487
%506 = load i32, i32* %61
%507 = add nsw i32 %506, 1
store i32 %507, i32* %61
%508 = load i32, i32* %71
%509 = add nsw i32 %508, 1
store i32 %509, i32* %71
br label %222
510: ; preds = %222
%511 = load double, double* %66
%512 = load double*, double** %51
%513 = getelementptr inbounds double, double* %512, i32 1
store double* %513, double** %51
store double %511, double* %512
%514 = load double, double* %67
%515 = load double*, double** %52
%516 = getelementptr inbounds double, double* %515, i32 1
store double* %516, double** %52
store double %514, double* %515
br label %517
517: ; preds = %510
%518 = load i32, i32* %57
%519 = add nsw i32 %518, 1
store i32 %519, i32* %57
br label %165
520: ; preds = %165
ret void
}

LLVM IR (-O2):
define void @interp4_table0_complex_per(double* nocapture %0, double* nocapture %1, i32 %2, i32 %3, i32 %4, i32 %5, double* nocapture %6, double* nocapture %7, double* nocapture %8, double* nocapture %9, double* nocapture %10, double* nocapture %11, double* nocapture %12, double* nocapture %13, i32 %14, i32 %15, i32 %16, i32 %17, i32 %18, i32 %19, i32 %20, i32 %21, double* nocapture %22, i32 %23, double* nocapture writeonly %24, double* nocapture writeonly %25) {
%27 = mul nsw i32 %18, %14
%28 = sitofp i32 %27 to double
%29 = fmul double %28, 5.000000e-01
%30 = tail call double @llvm.floor.f64(double %29)
%31 = fptosi double %30 to i32
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds double, double* %6, i64 %32
%34 = getelementptr inbounds double, double* %7, i64 %32
%35 = mul nsw i32 %19, %15
%36 = sitofp i32 %35 to double
%37 = fmul double %36, 5.000000e-01
%38 = tail call double @llvm.floor.f64(double %37)
%39 = fptosi double %38 to i32
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds double, double* %8, i64 %40
%42 = getelementptr inbounds double, double* %9, i64 %40
%43 = mul nsw i32 %20, %16
%44 = sitofp i32 %43 to double
%45 = fmul double %44, 5.000000e-01
%46 = tail call double @llvm.floor.f64(double %45)
%47 = fptosi double %46 to i32
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds double, double* %10, i64 %48
%50 = getelementptr inbounds double, double* %11, i64 %48
%51 = mul nsw i32 %21, %17
%52 = sitofp i32 %51 to double
%53 = fmul double %52, 5.000000e-01
%54 = tail call double @llvm.floor.f64(double %53)
%55 = fptosi double %54 to i32
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double, double* %12, i64 %56
%58 = getelementptr inbounds double, double* %13, i64 %56
%59 = icmp sgt i32 %23, 0
br i1 %59, label %60, label %92
60: ; preds = %26
%61 = mul nsw i32 %23, 3
%62 = sext i32 %61 to i64
%63 = shl nuw nsw i32 %23, 1
%64 = sext i32 %63 to i64
%65 = zext i32 %23 to i64
%66 = sitofp i32 %14 to double
%67 = fmul double %66, 5.000000e-01
%68 = sitofp i32 %15 to double
%69 = fmul double %68, 5.000000e-01
%70 = sitofp i32 %16 to double
%71 = fmul double %70, 5.000000e-01
%72 = sitofp i32 %17 to double
%73 = fmul double %72, 5.000000e-01
%74 = icmp sgt i32 %17, 0
%75 = sitofp i32 %21 to double
%76 = sitofp i32 %5 to double
%77 = fneg double %76
%78 = mul i32 %3, %2
%79 = mul i32 %78, %4
%80 = icmp sgt i32 %16, 0
%81 = sitofp i32 %20 to double
%82 = sitofp i32 %4 to double
%83 = fneg double %82
%84 = icmp sgt i32 %15, 0
%85 = sitofp i32 %19 to double
%86 = sitofp i32 %3 to double
%87 = fneg double %86
%88 = icmp sgt i32 %14, 0
%89 = sitofp i32 %18 to double
%90 = sitofp i32 %2 to double
%91 = fneg double %90
br label %93
92: ; preds = %278, %26
ret void
93: ; preds = %60, %278
%94 = phi double* [ %22, %60 ], [ %104, %278 ]
%95 = phi double* [ %24, %60 ], [ %280, %278 ]
%96 = phi double* [ %25, %60 ], [ %282, %278 ]
%97 = phi i32 [ 0, %60 ], [ %284, %278 ]
%98 = getelementptr inbounds double, double* %94, i64 %62
%99 = load double, double* %98
%100 = getelementptr inbounds double, double* %94, i64 %64
%101 = load double, double* %100
%102 = getelementptr inbounds double, double* %94, i64 %65
%103 = load double, double* %102
%104 = getelementptr inbounds double, double* %94, i64 1
%105 = load double, double* %94
%106 = fsub double %105, %67
%107 = tail call double @llvm.floor.f64(double %106)
%108 = fadd double %107, 1.000000e+00
%109 = fptosi double %108 to i32
%110 = fsub double %103, %69
%111 = tail call double @llvm.floor.f64(double %110)
%112 = fadd double %111, 1.000000e+00
%113 = fptosi double %112 to i32
%114 = fsub double %101, %71
%115 = tail call double @llvm.floor.f64(double %114)
%116 = fadd double %115, 1.000000e+00
%117 = fptosi double %116 to i32
br i1 %74, label %118, label %278
118: ; preds = %93
%119 = fsub double %99, %73
%120 = tail call double @llvm.floor.f64(double %119)
%121 = fadd double %120, 1.000000e+00
%122 = fptosi double %121 to i32
br label %123
123: ; preds = %118, %262
%124 = phi i32 [ %275, %262 ], [ 0, %118 ]
%125 = phi i32 [ %276, %262 ], [ %122, %118 ]
%126 = phi <2 x double> [ %274, %262 ], [ zeroinitializer, %118 ]
%127 = sitofp i32 %125 to double
%128 = fsub double %99, %127
%129 = fmul double %128, %75
%130 = fadd double %129, 5.000000e-01
%131 = tail call double @llvm.floor.f64(double %130)
%132 = fptosi double %131 to i32
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds double, double* %57, i64 %133
%135 = load double, double* %134
%136 = getelementptr inbounds double, double* %58, i64 %133
%137 = load double, double* %136
%138 = fdiv double %127, %76
%139 = tail call double @llvm.floor.f64(double %138)
%140 = tail call double @llvm.fmuladd.f64(double %77, double %139, double %127)
%141 = fptosi double %140 to i32
%142 = mul i32 %79, %141
%143 = sext i32 %142 to i64
br i1 %80, label %144, label %262
144: ; preds = %123, %246
%145 = phi i32 [ %259, %246 ], [ 0, %123 ]
%146 = phi i32 [ %260, %246 ], [ %117, %123 ]
%147 = phi <2 x double> [ %258, %246 ], [ zeroinitializer, %123 ]
%148 = sitofp i32 %146 to double
%149 = fsub double %101, %148
%150 = fmul double %149, %81
%151 = fadd double %150, 5.000000e-01
%152 = tail call double @llvm.floor.f64(double %151)
%153 = fptosi double %152 to i32
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds double, double* %49, i64 %154
%156 = load double, double* %155
%157 = getelementptr inbounds double, double* %50, i64 %154
%158 = load double, double* %157
br i1 %84, label %159, label %246
159: ; preds = %144
%160 = fdiv double %148, %82
%161 = tail call double @llvm.floor.f64(double %160)
%162 = tail call double @llvm.fmuladd.f64(double %83, double %161, double %148)
%163 = fptosi double %162 to i32
%164 = mul i32 %78, %163
%165 = sext i32 %164 to i64
%166 = add nsw i64 %165, %143
br label %167
167: ; preds = %159, %230
%168 = phi i32 [ %113, %159 ], [ %244, %230 ]
%169 = phi i32 [ 0, %159 ], [ %243, %230 ]
%170 = phi <2 x double> [ zeroinitializer, %159 ], [ %242, %230 ]
%171 = sitofp i32 %168 to double
%172 = fsub double %103, %171
%173 = fmul double %172, %85
%174 = fadd double %173, 5.000000e-01
%175 = tail call double @llvm.floor.f64(double %174)
%176 = fptosi double %175 to i32
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds double, double* %41, i64 %177
%179 = load double, double* %178
%180 = getelementptr inbounds double, double* %42, i64 %177
%181 = load double, double* %180
br i1 %88, label %182, label %230
182: ; preds = %167
%183 = fdiv double %171, %86
%184 = tail call double @llvm.floor.f64(double %183)
%185 = tail call double @llvm.fmuladd.f64(double %87, double %184, double %171)
%186 = fptosi double %185 to i32
%187 = mul nsw i32 %186, %2
%188 = sext i32 %187 to i64
%189 = add nsw i64 %166, %188
br label %190
190: ; preds = %182, %190
%191 = phi i32 [ %109, %182 ], [ %228, %190 ]
%192 = phi i32 [ 0, %182 ], [ %227, %190 ]
%193 = phi <2 x double> [ zeroinitializer, %182 ], [ %226, %190 ]
%194 = sitofp i32 %191 to double
%195 = fsub double %105, %194
%196 = fmul double %195, %89
%197 = fadd double %196, 5.000000e-01
%198 = tail call double @llvm.floor.f64(double %197)
%199 = fptosi double %198 to i32
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds double, double* %33, i64 %200
%202 = load double, double* %201
%203 = getelementptr inbounds double, double* %34, i64 %200
%204 = load double, double* %203
%205 = fdiv double %194, %90
%206 = tail call double @llvm.floor.f64(double %205)
%207 = tail call double @llvm.fmuladd.f64(double %91, double %206, double %194)
%208 = fptosi double %207 to i32
%209 = sext i32 %208 to i64
%210 = add nsw i64 %189, %209
%211 = getelementptr inbounds double, double* %0, i64 %210
%212 = load double, double* %211
%213 = getelementptr inbounds double, double* %1, i64 %210
%214 = load double, double* %213
%215 = fneg double %204
%216 = insertelement <2 x double> poison, double %204, i64 0
%217 = insertelement <2 x double> %216, double %214, i64 1
%218 = insertelement <2 x double> poison, double %212, i64 0
%219 = insertelement <2 x double> %218, double %215, i64 1
%220 = fmul <2 x double> %217, %219
%221 = insertelement <2 x double> poison, double %202, i64 0
%222 = shufflevector <2 x double> %221, <2 x double> poison, <2 x i32> zeroinitializer
%223 = insertelement <2 x double> poison, double %214, i64 0
%224 = insertelement <2 x double> %223, double %212, i64 1
%225 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %222, <2 x double> %224, <2 x double> %220)
%226 = fadd <2 x double> %193, %225
%227 = add nuw nsw i32 %192, 1
%228 = add nsw i32 %191, 1
%229 = icmp eq i32 %227, %14
br i1 %229, label %230, label %190
230: ; preds = %190, %167
%231 = phi <2 x double> [ zeroinitializer, %167 ], [ %226, %190 ]
%232 = fneg double %181
%233 = insertelement <2 x double> poison, double %181, i64 0
%234 = shufflevector <2 x double> %233, <2 x double> %231, <2 x i32> <i32 0, i32 2>
%235 = extractelement <2 x double> %231, i64 1
%236 = insertelement <2 x double> poison, double %235, i64 0
%237 = insertelement <2 x double> %236, double %232, i64 1
%238 = fmul <2 x double> %234, %237
%239 = insertelement <2 x double> poison, double %179, i64 0
%240 = shufflevector <2 x double> %239, <2 x double> poison, <2 x i32> zeroinitializer
%241 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %240, <2 x double> %231, <2 x double> %238)
%242 = fadd <2 x double> %170, %241
%243 = add nuw nsw i32 %169, 1
%244 = add nsw i32 %168, 1
%245 = icmp eq i32 %243, %15
br i1 %245, label %246, label %167
246: ; preds = %230, %144
%247 = phi <2 x double> [ zeroinitializer, %144 ], [ %242, %230 ]
%248 = fneg double %158
%249 = insertelement <2 x double> poison, double %158, i64 0
%250 = shufflevector <2 x double> %249, <2 x double> %247, <2 x i32> <i32 0, i32 2>
%251 = extractelement <2 x double> %247, i64 1
%252 = insertelement <2 x double> poison, double %251, i64 0
%253 = insertelement <2 x double> %252, double %248, i64 1
%254 = fmul <2 x double> %250, %253
%255 = insertelement <2 x double> poison, double %156, i64 0
%256 = shufflevector <2 x double> %255, <2 x double> poison, <2 x i32> zeroinitializer
%257 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %256, <2 x double> %247, <2 x double> %254)
%258 = fadd <2 x double> %147, %257
%259 = add nuw nsw i32 %145, 1
%260 = add nsw i32 %146, 1
%261 = icmp eq i32 %259, %16
br i1 %261, label %262, label %144
262: ; preds = %246, %123
%263 = phi <2 x double> [ zeroinitializer, %123 ], [ %258, %246 ]
%264 = fneg double %137
%265 = insertelement <2 x double> poison, double %137, i64 0
%266 = shufflevector <2 x double> %265, <2 x double> %263, <2 x i32> <i32 0, i32 2>
%267 = extractelement <2 x double> %263, i64 1
%268 = insertelement <2 x double> poison, double %267, i64 0
%269 = insertelement <2 x double> %268, double %264, i64 1
%270 = fmul <2 x double> %266, %269
%271 = insertelement <2 x double> poison, double %135, i64 0
%272 = shufflevector <2 x double> %271, <2 x double> poison, <2 x i32> zeroinitializer
%273 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %272, <2 x double> %263, <2 x double> %270)
%274 = fadd <2 x double> %126, %273
%275 = add nuw nsw i32 %124, 1
%276 = add nsw i32 %125, 1
%277 = icmp eq i32 %275, %17
br i1 %277, label %278, label %123
278: ; preds = %262, %93
%279 = phi <2 x double> [ zeroinitializer, %93 ], [ %274, %262 ]
%280 = getelementptr inbounds double, double* %95, i64 1
%281 = extractelement <2 x double> %279, i64 1
store double %281, double* %95
%282 = getelementptr inbounds double, double* %96, i64 1
%283 = extractelement <2 x double> %279, i64 0
store double %283, double* %96
%284 = add nuw nsw i32 %97, 1
%285 = icmp eq i32 %284, %23
br i1 %285, label %92, label %93
}