int rpmva(a, n, x, m, y)
int n, m;
double *a, *x, *y;
{
  int i, j, k, nn, nk, kk, l, count, tail;
  double *ax, *b;
  double a1, t1, t2;
  k = log(n - 0.5) / log(2.0) + 1;
  nn = 1;
  for (i = 0; i < k; i++)
    nn = nn << 1;
  nk = nn >> 1;
  a1 = a[n - 1];
  if (a1 + 1.0 == 1.0) {
    printf("(rpmva)coefficient too small,please check.\n");
    return (0);
  }
  b = (double *)malloc(nn * sizeof(double));
  ax = (double *)malloc(nk * sizeof(double));
  for (i = 0; i < n; i++)
    b[i] = a[i] / a1;
  for (i = n; i < nn; i++)
    b[i] = 0.0;
  l = nn >> 1;
  count = 1;
  for (i = 1; i < k; i++) {
    tail = l - 1;
    for (j = 0; j < count; j++) {
      b[tail] = b[tail] - 1.0;
      for (kk = 1; kk < l; kk++)
        b[tail - kk] = b[tail - kk] - b[tail] * b[tail - kk + l];
      tail = tail + 2 * l;
    }
    l = l >> 1;
    count = count << 1;
  }
  for (kk = 0; kk < m; kk++) {
    t1 = x[kk];
    for (i = 0; i < nk; i++)
      ax[i] = t1 + b[2 * i];
    tail = 1;
    l = 2;
    t2 = t1;
    for (i = 1; i < k; i++) {
      t2 = t2 * t2;
      for (j = 0; j < nk; j = j + l)
        ax[j] = ax[j] + ax[j + tail] * (t2 + b[2 * (j + tail) - 1]);
      tail = tail << 1;
      l = l << 1;
    }
    t2 = t2 * t2 / t1;
    if (nn != n)
      ax[0] -= t2;
    y[kk] = ax[0] * a1;
  }
  free(b);
  free(ax);
  return (1);
}


x86 assembly (clang, -O0):
<rpmva>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8,-0x30(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm0
movsd  0xea6(%rip),%xmm1
subsd  %xmm1,%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xe85(%rip),%xmm0
call   1060 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  0xe61(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    11db <rpmva+0x9b>
mov    -0x40(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11b8 <rpmva+0x78>
mov    -0x40(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xdfd(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  0xdf0(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    123a <rpmva+0xfa>
jp     123a <rpmva+0xfa>
lea    0xdf1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x4(%rbp)
jmp    159f <rpmva+0x45f>
movslq -0x40(%rbp),%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,-0x68(%rbp)
movslq -0x44(%rbp),%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    129c <rpmva+0x15c>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x70(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1263 <rpmva+0x123>
mov    -0x14(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    12cc <rpmva+0x18c>
mov    -0x68(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12a2 <rpmva+0x162>
mov    -0x40(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x50(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    13f3 <rpmva+0x2b3>
mov    -0x4c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    13d3 <rpmva+0x293>
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xce0(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    13b7 <rpmva+0x277>
mov    -0x68(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x48(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x68(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1338 <rpmva+0x1f8>
mov    -0x54(%rbp),%eax
mov    -0x4c(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12ff <rpmva+0x1bf>
mov    -0x4c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x50(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12e3 <rpmva+0x1a3>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1586 <rpmva+0x446>
mov    -0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    145d <rpmva+0x31d>
movsd  -0x78(%rbp),%xmm0
mov    -0x68(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    141f <rpmva+0x2df>
movl   $0x1,-0x54(%rbp)
movl   $0x2,-0x4c(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1529 <rpmva+0x3e9>
movsd  -0x80(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1509 <rpmva+0x3c9>
mov    -0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x60(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x80(%rbp),%xmm2
mov    -0x68(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x54(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    149e <rpmva+0x35e>
mov    -0x54(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x4c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    147c <rpmva+0x33c>
movsd  -0x80(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     155e <rpmva+0x41e>
movsd  -0x80(%rbp),%xmm1
mov    -0x60(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x60(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    13fa <rpmva+0x2ba>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
mov    -0x60(%rbp),%rdi
call   1030 <free@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rpmva>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xf8,%rsp
mov    %r8,0x90(%rsp)
mov    %ecx,%r14d
mov    %rdx,0x88(%rsp)
mov    %esi,%ebp
mov    %rdi,%r13
cvtsi2sd %esi,%xmm0
addsd  0xe7b(%rip),%xmm0
call   1070 <log@plt>
divsd  0xe76(%rip),%xmm0
addsd  0xe76(%rip),%xmm0
cvttsd2si %xmm0,%edx
test   %edx,%edx
jle    11b6 <rpmva+0x66>
lea    -0x1(%rdx),%ecx
mov    %edx,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
jae    11bd <rpmva+0x6d>
mov    $0x1,%esi
jmp    11d8 <rpmva+0x88>
mov    $0x1,%esi
jmp    11e7 <rpmva+0x97>
mov    %edx,%ecx
and    $0xfffffff8,%ecx
mov    $0x1,%esi
nopw   0x0(%rax,%rax,1)
shl    $0x8,%esi
add    $0xfffffff8,%ecx
jne    11d0 <rpmva+0x80>
test   %eax,%eax
je     11e7 <rpmva+0x97>
nopl   0x0(%rax)
add    %esi,%esi
add    $0xffffffff,%eax
jne    11e0 <rpmva+0x90>
movslq %ebp,%r15
movsd  -0x8(%r13,%r15,8),%xmm2
movsd  0xe17(%rip),%xmm0
movapd %xmm2,%xmm1
addsd  %xmm0,%xmm1
ucomisd %xmm0,%xmm1
jne    121c <rpmva+0xcc>
jp     121c <rpmva+0xcc>
lea    0xe20(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
jmp    196a <rpmva+0x81a>
mov    %r14d,0x34(%rsp)
mov    %esi,%ebx
sar    %ebx
mov    %esi,0xc(%rsp)
movslq %esi,%rdi
shl    $0x3,%rdi
mov    %rdx,0x10(%rsp)
movapd %xmm2,0x40(%rsp)
call   1060 <malloc@plt>
mov    %rax,%r14
mov    %ebx,0x1c(%rsp)
movslq %ebx,%rbx
lea    0x0(,%rbx,8),%rdi
call   1060 <malloc@plt>
movapd 0x40(%rsp),%xmm8
mov    0x10(%rsp),%rsi
mov    %rax,%r12
test   %ebp,%ebp
jle    131b <rpmva+0x1cb>
mov    %ebp,%eax
cmp    $0x1,%ebp
jne    127c <rpmva+0x12c>
xor    %ecx,%ecx
jmp    1300 <rpmva+0x1b0>
mov    %eax,%ecx
and    $0xfffffffe,%ecx
movapd %xmm8,%xmm0
unpcklpd %xmm8,%xmm0
lea    -0x2(%rcx),%rsi
mov    %rsi,%rdx
shr    %rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     197c <rpmva+0x82c>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movupd 0x0(%r13,%rsi,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,(%r14,%rsi,8)
movupd 0x10(%r13,%rsi,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x10(%r14,%rsi,8)
add    $0x4,%rsi
add    $0xfffffffffffffffe,%rdi
jne    12b0 <rpmva+0x160>
test   $0x1,%dl
je     12f3 <rpmva+0x1a3>
movupd 0x0(%r13,%rsi,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,(%r14,%rsi,8)
cmp    %rax,%rcx
mov    0x10(%rsp),%rsi
je     131b <rpmva+0x1cb>
nopl   (%rax)
movsd  0x0(%r13,%rcx,8),%xmm0
divsd  %xmm8,%xmm0
movsd  %xmm0,(%r14,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1300 <rpmva+0x1b0>
mov    %rbx,0xf0(%rsp)
cmp    %ebp,0xc(%rsp)
jle    1350 <rpmva+0x200>
lea    (%r14,%r15,8),%rdi
mov    %ebp,%eax
not    %eax
add    0xc(%rsp),%eax
lea    0x8(,%rax,8),%rdx
xor    %esi,%esi
call   1050 <memset@plt>
movapd 0x40(%rsp),%xmm8
mov    0x10(%rsp),%rsi
mov    %ebp,0x38(%rsp)
cmp    $0x2,%esi
jl     1778 <rpmva+0x628>
lea    -0x20(%r14),%rax
mov    %rax,0x68(%rsp)
lea    -0x8(%r14),%rax
mov    %rax,0x60(%rsp)
mov    $0x1,%ecx
movsd  0xc9c(%rip),%xmm0
movapd 0xc9c(%rip),%xmm1
mov    $0x1,%ebx
mov    0x1c(%rsp),%eax
mov    %eax,%ebp
jmp    13b8 <rpmva+0x268>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
sar    %ebp
add    %ebx,%ebx
mov    0x3c(%rsp),%ecx
add    $0x1,%ecx
mov    0x10(%rsp),%rsi
cmp    %esi,%ecx
je     1778 <rpmva+0x628>
mov    %ecx,0x3c(%rsp)
test   %ebx,%ebx
jle    13a0 <rpmva+0x250>
lea    0x0(%rbp,%rbp,1),%eax
movslq %ebp,%rdi
movslq %eax,%r10
mov    %edi,%r8d
lea    -0x3(%r8),%rax
lea    0x0(,%rdi,8),%rdx
mov    %rdi,%r13
shl    $0x4,%r13
lea    -0x18(%r13),%rcx
mov    %rcx,0xe0(%rsp)
lea    0x0(,%r8,8),%rcx
mov    %rdx,0xc0(%rsp)
sub    %rcx,%rdx
mov    %rdx,0xb8(%rsp)
mov    %r13,%rdx
sub    %rcx,%rdx
mov    %rdx,0xb0(%rsp)
lea    -0x10(%r13),%rcx
mov    %rcx,0xa8(%rsp)
lea    -0x2(%r8),%rsi
mov    $0x8,%ecx
mul    %rcx
seto   0x7(%rsp)
neg    %rax
mov    %rax,0xd8(%rsp)
mov    %rsi,0x50(%rsp)
mov    %rsi,%rdx
and    $0xfffffffffffffffc,%rdx
mov    %r8,0xe8(%rsp)
neg    %r8
mov    %rdx,%rax
neg    %rax
mov    %rax,0x78(%rsp)
mov    0x68(%rsp),%r15
lea    (%r15,%r13,1),%r9
mov    0x60(%rsp),%rcx
add    %rcx,%r13
lea    -0x1(%rdi),%r11
lea    -0x18(,%rdi,8),%rsi
ff
mov    %rsi,0xd0(%rsp)
mov    %r10,0x40(%rsp)
lea    0x0(,%r10,8),%rsi
lea    -0x8(,%rdi,8),%rax
ff
mov    %rax,0xa0(%rsp)
lea    -0x10(,%rdi,8),%rax
ff
mov    %rax,0x98(%rsp)
mov    %rdx,0x80(%rsp)
lea    0x2(%rdx),%rax
mov    %rax,0x70(%rsp)
lea    (%r15,%rdi,8),%r15
mov    %rdi,0x58(%rsp)
lea    (%rcx,%rdi,8),%r10
xor    %edi,%edi
mov    %ebx,0x8(%rsp)
mov    %rbp,0x20(%rsp)
jmp    14fd <rpmva+0x3ad>
nopl   0x0(%rax)
add    0x40(%rsp),%r11
add    $0x1,%rdi
add    %rsi,%r9
add    %rsi,%r15
add    %rsi,%r10
add    %rsi,%r13
cmp    %ebx,%edi
je     13a0 <rpmva+0x250>
movsd  (%r14,%r11,8),%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,(%r14,%r11,8)
cmp    $0x2,%ebp
jl     14e0 <rpmva+0x390>
movsd  -0x8(%r14,%r11,8),%xmm3
mov    0x58(%rsp),%rax
lea    -0x1(%r11,%rax,1),%rcx
mulsd  (%r14,%rcx,8),%xmm2
subsd  %xmm2,%xmm3
movsd  %xmm3,-0x8(%r14,%r11,8)
je     14e0 <rpmva+0x390>
mov    $0x2,%edx
cmpq   $0x4,0x50(%rsp)
jb     16d1 <rpmva+0x581>
mov    %rsi,%rcx
imul   %rdi,%rcx
mov    0xd0(%rsp),%rax
lea    (%rax,%rcx,1),%rbx
add    %r14,%rbx
mov    0xe0(%rsp),%rax
lea    (%rax,%rcx,1),%rbp
add    %r14,%rbp
mov    0xd8(%rsp),%rdx
lea    (%rbx,%rdx,1),%rax
cmp    %rbx,%rax
seta   %al
or     0x7(%rsp),%al
lea    (%rdx,%rbp,1),%rbx
cmp    %rbp,%rbx
seta   %bl
test   %al,%al
jne    16c3 <rpmva+0x573>
or     0x7(%rsp),%bl
jne    16c3 <rpmva+0x573>
mov    0xa0(%rsp),%rax
add    %rcx,%rax
add    %r14,%rax
mov    %rax,0x28(%rsp)
mov    0xc0(%rsp),%rax
add    %rcx,%rax
add    %r14,%rax
mov    %rax,0xc8(%rsp)
mov    0xb8(%rsp),%rax
lea    (%rax,%rcx,1),%rbp
add    %r14,%rbp
mov    0x98(%rsp),%rax
add    %rcx,%rax
add    %r14,%rax
mov    0xb0(%rsp),%rbx
add    %rcx,%rbx
add    %r14,%rbx
add    0xa8(%rsp),%rcx
add    %r14,%rcx
cmp    %rax,0x28(%rsp)
setb   0x28(%rsp)
cmp    0xc8(%rsp),%rbp
setb   %dl
cmp    %rcx,%rbp
setb   %cl
cmp    %rax,%rbx
setb   %bl
test   %dl,0x28(%rsp)
mov    $0x2,%edx
jne    176a <rpmva+0x61a>
and    %bl,%cl
mov    0x8(%rsp),%ebx
mov    0x20(%rsp),%rbp
jne    16d1 <rpmva+0x581>
movsd  (%r14,%r11,8),%xmm2
unpcklpd %xmm2,%xmm2
xorpd  %xmm1,%xmm2
xor    %ecx,%ecx
mov    0x78(%rsp),%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd -0x10(%r15,%rcx,8),%xmm3
movupd (%r15,%rcx,8),%xmm4
movupd -0x10(%r9,%rcx,8),%xmm5
movupd (%r9,%rcx,8),%xmm6
movapd %xmm2,%xmm7
shufpd $0x1,%xmm2,%xmm7
mulpd  %xmm7,%xmm6
addpd  %xmm4,%xmm6
movupd %xmm6,(%r15,%rcx,8)
mulpd  %xmm5,%xmm7
addpd  %xmm3,%xmm7
movupd %xmm7,-0x10(%r15,%rcx,8)
add    $0xfffffffffffffffc,%rcx
cmp    %rcx,%rax
jne    1660 <rpmva+0x510>
mov    0x70(%rsp),%rdx
mov    0x80(%rsp),%rax
cmp    %rax,0x50(%rsp)
je     14e0 <rpmva+0x390>
jmp    16d1 <rpmva+0x581>
mov    0x8(%rsp),%ebx
mov    0x20(%rsp),%rbp
mov    $0x2,%edx
mov    0xe8(%rsp),%rax
sub    %edx,%eax
mov    %rdx,%rcx
test   $0x1,%al
je     1710 <rpmva+0x5c0>
movsd  (%r14,%r11,8),%xmm2
mov    %r11,%rax
sub    %rdx,%rax
mov    0x58(%rsp),%rcx
add    %rax,%rcx
mulsd  (%r14,%rcx,8),%xmm2
movsd  (%r14,%rax,8),%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,(%r14,%rax,8)
lea    0x1(%rdx),%rcx
not    %rdx
cmp    %r8,%rdx
je     14e0 <rpmva+0x390>
neg    %rcx
nop
movsd  (%r14,%r11,8),%xmm2
movsd  -0x8(%r10,%rcx,8),%xmm3
movsd  (%r10,%rcx,8),%xmm4
mulsd  0x0(%r13,%rcx,8),%xmm2
subsd  %xmm2,%xmm4
movsd  %xmm4,(%r10,%rcx,8)
movsd  (%r14,%r11,8),%xmm2
mulsd  -0x8(%r13,%rcx,8),%xmm2
subsd  %xmm2,%xmm3
movsd  %xmm3,-0x8(%r10,%rcx,8)
add    $0xfffffffffffffffe,%rcx
cmp    %rcx,%r8
jne    1720 <rpmva+0x5d0>
jmp    14e0 <rpmva+0x390>
mov    0x8(%rsp),%ebx
mov    0x20(%rsp),%rbp
jmp    16d1 <rpmva+0x581>
mov    0x34(%rsp),%eax
test   %eax,%eax
mov    0xc(%rsp),%edi
jle    1955 <rpmva+0x805>
mov    0x1c(%rsp),%ecx
cmp    $0x2,%ecx
mov    %eax,%edx
mov    $0x1,%r15d
cmovge %ecx,%r15d
mov    %r15d,%eax
and    $0x3,%eax
test   %rax,%rax
mov    $0x4,%ecx
cmovne %rax,%rcx
mov    %edx,%r9d
mov    %r15,%r10
sub    %rcx,%r10
lea    0x20(%r14),%rax
mov    %rax,0x40(%rsp)
xor    %r11d,%r11d
mov    0xf0(%rsp),%r8
jmp    1808 <rpmva+0x6b8>
nopl   0x0(%rax)
mulsd  %xmm1,%xmm1
divsd  %xmm0,%xmm1
movsd  (%r12),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r12)
mulsd  %xmm8,%xmm0
mov    0x90(%rsp),%rax
movsd  %xmm0,(%rax,%r11,8)
add    $0x1,%r11
cmp    %r9,%r11
je     1955 <rpmva+0x805>
mov    0x88(%rsp),%rax
movsd  (%rax,%r11,8),%xmm0
cmp    $0x2,%edi
jl     18ab <rpmva+0x75b>
cmp    $0x4,%r15d
ja     1830 <rpmva+0x6e0>
xor    %eax,%eax
jmp    1878 <rpmva+0x728>
nopl   0x0(%rax)
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
mov    0x40(%rsp),%rax
xor    %ecx,%ecx
nop
movupd -0x20(%rax),%xmm2
movupd (%rax),%xmm3
movhpd -0x10(%rax),%xmm2
movhpd 0x10(%rax),%xmm3
addpd  %xmm1,%xmm2
addpd  %xmm1,%xmm3
movupd %xmm2,(%r12,%rcx,8)
movupd %xmm3,0x10(%r12,%rcx,8)
add    $0x4,%rcx
add    $0x40,%rax
cmp    %rcx,%r10
jne    1840 <rpmva+0x6f0>
mov    %r10,%rax
mov    %rax,%rcx
shl    $0x4,%rcx
add    %r14,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%r12,%rax,8)
add    $0x1,%rax
add    $0x10,%rcx
cmp    %rax,%r15
jne    1890 <rpmva+0x740>
movapd %xmm0,%xmm1
cmp    $0x2,%esi
jl     1940 <rpmva+0x7f0>
mov    $0x2,%r13d
mov    $0x1,%ecx
movapd %xmm0,%xmm1
mov    $0x1,%edx
jmp    18e5 <rpmva+0x795>
xchg   %ax,%ax
add    %edx,%edx
add    %r13d,%r13d
add    $0x1,%ecx
mov    0x10(%rsp),%rsi
cmp    %esi,%ecx
mov    0xc(%rsp),%edi
je     1940 <rpmva+0x7f0>
mulsd  %xmm1,%xmm1
cmp    $0x2,%edi
jl     18d0 <rpmva+0x780>
movslq %r13d,%rdi
movslq %edx,%rsi
lea    (%rsi,%rsi,1),%eax
add    $0xffffffff,%eax
lea    (%rdi,%rdi,1),%ebx
lea    (%r12,%rsi,8),%rbp
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cltq
movsd  (%r14,%rax,8),%xmm2
addsd  %xmm1,%xmm2
mulsd  0x0(%rbp,%rsi,8),%xmm2
addsd  (%r12,%rsi,8),%xmm2
movsd  %xmm2,(%r12,%rsi,8)
add    %rdi,%rsi
add    %ebx,%eax
cmp    %r8,%rsi
jl     1910 <rpmva+0x7c0>
jmp    18d0 <rpmva+0x780>
nopw   0x0(%rax,%rax,1)
cmp    0x38(%rsp),%edi
jne    17d0 <rpmva+0x680>
movsd  (%r12),%xmm0
jmp    17e8 <rpmva+0x698>
mov    %r14,%rdi
call   1030 <free@plt>
mov    %r12,%rdi
call   1030 <free@plt>
mov    $0x1,%eax
add    $0xf8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %esi,%esi
test   $0x1,%dl
jne    12e2 <rpmva+0x192>
jmp    12f3 <rpmva+0x1a3>

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

LLVM IR (-O2):
@str = [43 x i8] c"(rpmva)coefficient too small,please check.\00"
define i32 @rpmva(double* nocapture %0, i32 %1, double* nocapture %2, i32 %3, double* nocapture writeonly %4) {
%6 = sitofp i32 %1 to double
%7 = fadd double %6, -5.000000e-01
%8 = tail call double @log(double %7)
%9 = fdiv double %8, 0x3FE62E42FEFA39EF
%10 = fadd double %9, 1.000000e+00
%11 = fptosi double %10 to i32
%12 = icmp sgt i32 %11, 0
br i1 %12, label %13, label %35
13: ; preds = %5
%14 = add i32 %11, -1
%15 = and i32 %11, 7
%16 = icmp ult i32 %14, 7
br i1 %16, label %25, label %17
17: ; preds = %13
%18 = and i32 %11, -8
br label %19
19: ; preds = %19, %17
%20 = phi i32 [ 1, %17 ], [ %22, %19 ]
%21 = phi i32 [ 0, %17 ], [ %23, %19 ]
%22 = shl i32 %20, 8
%23 = add i32 %21, 8
%24 = icmp eq i32 %23, %18
br i1 %24, label %25, label %19
25: ; preds = %19, %13
%26 = phi i32 [ undef, %13 ], [ %22, %19 ]
%27 = phi i32 [ 1, %13 ], [ %22, %19 ]
%28 = icmp eq i32 %15, 0
br i1 %28, label %35, label %29
29: ; preds = %25, %29
%30 = phi i32 [ %32, %29 ], [ %27, %25 ]
%31 = phi i32 [ %33, %29 ], [ 0, %25 ]
%32 = shl i32 %30, 1
%33 = add i32 %31, 1
%34 = icmp eq i32 %33, %15
br i1 %34, label %35, label %29
35: ; preds = %25, %29, %5
%36 = phi i32 [ 1, %5 ], [ %26, %25 ], [ %32, %29 ]
%37 = ashr i32 %36, 1
%38 = add nsw i32 %1, -1
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds double, double* %0, i64 %39
%41 = load double, double* %40
%42 = fadd double %41, 1.000000e+00
%43 = fcmp oeq double %42, 1.000000e+00
br i1 %43, label %44, label %46
44: ; preds = %35
%45 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str, i64 0, i64 0))
br label %416
46: ; preds = %35
%47 = sext i32 %36 to i64
%48 = shl nsw i64 %47, 3
%49 = tail call i8* @malloc(i64 %48)
%50 = bitcast i8* %49 to double*
%51 = sext i32 %37 to i64
%52 = shl nsw i64 %51, 3
%53 = tail call i8* @malloc(i64 %52)
%54 = bitcast i8* %53 to double*
%55 = icmp sgt i32 %1, 0
br i1 %55, label %56, label %103
56: ; preds = %46
%57 = zext i32 %1 to i64
%58 = icmp eq i32 %1, 1
br i1 %58, label %101, label %59
59: ; preds = %56
%60 = and i64 %57, 4294967294
%61 = insertelement <2 x double> poison, double %41, i64 0
%62 = shufflevector <2 x double> %61, <2 x double> poison, <2 x i32> zeroinitializer
%63 = add nsw i64 %60, -2
%64 = lshr exact i64 %63, 1
%65 = add nuw i64 %64, 1
%66 = and i64 %65, 1
%67 = icmp eq i64 %63, 0
br i1 %67, label %89, label %68
68: ; preds = %59
%69 = and i64 %65, -2
br label %70
70: ; preds = %70, %68
%71 = phi i64 [ 0, %68 ], [ %86, %70 ]
%72 = phi i64 [ 0, %68 ], [ %87, %70 ]
%73 = getelementptr inbounds double, double* %0, i64 %71
%74 = bitcast double* %73 to <2 x double>*
%75 = load <2 x double>, <2 x double>* %74
%76 = fdiv <2 x double> %75, %62
%77 = getelementptr inbounds double, double* %50, i64 %71
%78 = bitcast double* %77 to <2 x double>*
store <2 x double> %76, <2 x double>* %78
%79 = or i64 %71, 2
%80 = getelementptr inbounds double, double* %0, i64 %79
%81 = bitcast double* %80 to <2 x double>*
%82 = load <2 x double>, <2 x double>* %81
%83 = fdiv <2 x double> %82, %62
%84 = getelementptr inbounds double, double* %50, i64 %79
%85 = bitcast double* %84 to <2 x double>*
store <2 x double> %83, <2 x double>* %85
%86 = add nuw i64 %71, 4
%87 = add nuw i64 %72, 2
%88 = icmp eq i64 %87, %69
br i1 %88, label %89, label %70
89: ; preds = %70, %59
%90 = phi i64 [ 0, %59 ], [ %86, %70 ]
%91 = icmp eq i64 %66, 0
br i1 %91, label %99, label %92
92: ; preds = %89
%93 = getelementptr inbounds double, double* %0, i64 %90
%94 = bitcast double* %93 to <2 x double>*
%95 = load <2 x double>, <2 x double>* %94
%96 = fdiv <2 x double> %95, %62
%97 = getelementptr inbounds double, double* %50, i64 %90
%98 = bitcast double* %97 to <2 x double>*
store <2 x double> %96, <2 x double>* %98
br label %99
99: ; preds = %89, %92
%100 = icmp eq i64 %60, %57
br i1 %100, label %103, label %101
101: ; preds = %56, %99
%102 = phi i64 [ 0, %56 ], [ %60, %99 ]
br label %114
103: ; preds = %114, %99, %46
%104 = icmp sgt i32 %36, %1
br i1 %104, label %105, label %122
105: ; preds = %103
%106 = sext i32 %1 to i64
%107 = shl nsw i64 %106, 3
%108 = getelementptr i8, i8* %49, i64 %107
%109 = xor i32 %1, -1
%110 = add i32 %36, %109
%111 = zext i32 %110 to i64
%112 = shl nuw nsw i64 %111, 3
%113 = add nuw nsw i64 %112, 8
br label %122
114: ; preds = %101, %114
%115 = phi i64 [ %120, %114 ], [ %102, %101 ]
%116 = getelementptr inbounds double, double* %0, i64 %115
%117 = load double, double* %116
%118 = fdiv double %117, %41
%119 = getelementptr inbounds double, double* %50, i64 %115
store double %118, double* %119
%120 = add nuw nsw i64 %115, 1
%121 = icmp eq i64 %120, %57
br i1 %121, label %103, label %114
122: ; preds = %105, %103
%123 = icmp sgt i32 %11, 1
br i1 %123, label %137, label %124
124: ; preds = %320, %122
%125 = icmp sgt i32 %3, 0
br i1 %125, label %126, label %415
126: ; preds = %124
%127 = icmp sgt i32 %36, 1
%128 = icmp eq i32 %36, %1
%129 = call i32 @llvm.smax.i32(i32 %37, i32 1)
%130 = zext i32 %3 to i64
%131 = zext i32 %129 to i64
%132 = icmp ult i32 %129, 5
%133 = and i64 %131, 3
%134 = icmp eq i64 %133, 0
%135 = select i1 %134, i64 4, i64 %133
%136 = sub nsw i64 %131, %135
br label %325
137: ; preds = %122, %320
%138 = phi i32 [ %323, %320 ], [ 1, %122 ]
%139 = phi i32 [ %322, %320 ], [ 1, %122 ]
%140 = phi i32 [ %321, %320 ], [ %37, %122 ]
%141 = icmp sgt i32 %139, 0
br i1 %141, label %142, label %320
142: ; preds = %137
%143 = icmp sgt i32 %140, 1
%144 = shl nsw i32 %140, 1
%145 = sext i32 %140 to i64
%146 = add nsw i64 %145, -1
%147 = sext i32 %144 to i64
%148 = zext i32 %140 to i64
%149 = add nsw i64 %148, -3
%150 = shl nsw i64 %145, 3
%151 = add nsw i64 %150, -24
%152 = shl nsw i64 %147, 3
%153 = shl nsw i64 %145, 4
%154 = add nsw i64 %153, -24
%155 = shl nsw i64 %145, 3
%156 = add nsw i64 %155, -8
%157 = shl nsw i64 %147, 3
%158 = shl nuw nsw i64 %148, 3
%159 = sub nsw i64 %155, %158
%160 = add nsw i64 %155, -16
%161 = shl nsw i64 %145, 4
%162 = sub nsw i64 %161, %158
%163 = add nsw i64 %161, -16
%164 = add nsw i64 %148, -2
%165 = icmp eq i32 %140, 2
%166 = icmp ult i64 %164, 4
%167 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %149, i64 8)
%168 = extractvalue { i64, i1 } %167, 0
%169 = extractvalue { i64, i1 } %167, 1
%170 = sub i64 0, %168
%171 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %149, i64 8)
%172 = extractvalue { i64, i1 } %171, 0
%173 = extractvalue { i64, i1 } %171, 1
%174 = sub i64 0, %172
%175 = and i64 %164, -4
%176 = or i64 %175, 2
%177 = icmp eq i64 %164, %175
%178 = sub nsw i64 0, %148
br label %179
179: ; preds = %142, %315
%180 = phi i64 [ 0, %142 ], [ %319, %315 ]
%181 = phi i64 [ %146, %142 ], [ %316, %315 ]
%182 = phi i32 [ 0, %142 ], [ %317, %315 ]
%183 = mul i64 %157, %180
%184 = add i64 %156, %183
%185 = getelementptr i8, i8* %49, i64 %184
%186 = add i64 %155, %183
%187 = getelementptr i8, i8* %49, i64 %186
%188 = add i64 %159, %183
%189 = getelementptr i8, i8* %49, i64 %188
%190 = add i64 %160, %183
%191 = getelementptr i8, i8* %49, i64 %190
%192 = add i64 %162, %183
%193 = getelementptr i8, i8* %49, i64 %192
%194 = add i64 %163, %183
%195 = getelementptr i8, i8* %49, i64 %194
%196 = mul i64 %152, %180
%197 = add i64 %151, %196
%198 = getelementptr i8, i8* %49, i64 %197
%199 = add i64 %154, %196
%200 = getelementptr i8, i8* %49, i64 %199
%201 = getelementptr inbounds double, double* %50, i64 %181
%202 = load double, double* %201
%203 = fadd double %202, -1.000000e+00
store double %203, double* %201
br i1 %143, label %204, label %315
204: ; preds = %179
%205 = add nsw i64 %181, -1
%206 = getelementptr inbounds double, double* %50, i64 %205
%207 = load double, double* %206
%208 = add nsw i64 %205, %145
%209 = getelementptr inbounds double, double* %50, i64 %208
%210 = load double, double* %209
%211 = fneg double %203
%212 = tail call double @llvm.fmuladd.f64(double %211, double %210, double %207)
store double %212, double* %206
br i1 %165, label %315, label %213
213: ; preds = %204
br i1 %166, label %272, label %214
214: ; preds = %213
%215 = getelementptr i8, i8* %198, i64 %170
%216 = icmp ugt i8* %215, %198
%217 = or i1 %216, %169
%218 = getelementptr i8, i8* %200, i64 %174
%219 = icmp ugt i8* %218, %200
%220 = or i1 %219, %173
%221 = or i1 %217, %220
br i1 %221, label %272, label %222
222: ; preds = %214
%223 = icmp ult i8* %185, %191
%224 = icmp ult i8* %189, %187
%225 = and i1 %223, %224
%226 = icmp ult i8* %189, %195
%227 = icmp ult i8* %193, %191
%228 = and i1 %226, %227
%229 = or i1 %225, %228
br i1 %229, label %272, label %230
230: ; preds = %222
%231 = load double, double* %201
%232 = insertelement <2 x double> poison, double %231, i64 0
%233 = shufflevector <2 x double> %232, <2 x double> poison, <2 x i32> zeroinitializer
%234 = insertelement <2 x double> poison, double %231, i64 0
%235 = shufflevector <2 x double> %234, <2 x double> poison, <2 x i32> zeroinitializer
%236 = fneg <2 x double> %233
%237 = fneg <2 x double> %235
br label %238
238: ; preds = %238, %230
%239 = phi i64 [ 0, %230 ], [ %269, %238 ]
%240 = or i64 %239, 2
%241 = sub nsw i64 %181, %240
%242 = getelementptr inbounds double, double* %50, i64 %241
%243 = getelementptr inbounds double, double* %242, i64 -1
%244 = bitcast double* %243 to <2 x double>*
%245 = load <2 x double>, <2 x double>* %244
%246 = shufflevector <2 x double> %245, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%247 = getelementptr inbounds double, double* %242, i64 -2
%248 = getelementptr inbounds double, double* %247, i64 -1
%249 = bitcast double* %248 to <2 x double>*
%250 = load <2 x double>, <2 x double>* %249
%251 = shufflevector <2 x double> %250, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%252 = add nsw i64 %241, %145
%253 = getelementptr inbounds double, double* %50, i64 %252
%254 = getelementptr inbounds double, double* %253, i64 -1
%255 = bitcast double* %254 to <2 x double>*
%256 = load <2 x double>, <2 x double>* %255
%257 = shufflevector <2 x double> %256, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%258 = getelementptr inbounds double, double* %253, i64 -2
%259 = getelementptr inbounds double, double* %258, i64 -1
%260 = bitcast double* %259 to <2 x double>*
%261 = load <2 x double>, <2 x double>* %260
%262 = shufflevector <2 x double> %261, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%263 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %236, <2 x double> %257, <2 x double> %246)
%264 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %237, <2 x double> %262, <2 x double> %251)
%265 = shufflevector <2 x double> %263, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%266 = bitcast double* %243 to <2 x double>*
store <2 x double> %265, <2 x double>* %266
%267 = shufflevector <2 x double> %264, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%268 = bitcast double* %248 to <2 x double>*
store <2 x double> %267, <2 x double>* %268
%269 = add nuw i64 %239, 4
%270 = icmp eq i64 %269, %175
br i1 %270, label %271, label %238
271: ; preds = %238
br i1 %177, label %315, label %272
272: ; preds = %222, %214, %213, %271
%273 = phi i64 [ 2, %222 ], [ 2, %214 ], [ 2, %213 ], [ %176, %271 ]
%274 = sub nsw i64 %148, %273
%275 = xor i64 %273, -1
%276 = and i64 %274, 1
%277 = icmp eq i64 %276, 0
br i1 %277, label %289, label %278
278: ; preds = %272
%279 = load double, double* %201
%280 = sub nsw i64 %181, %273
%281 = getelementptr inbounds double, double* %50, i64 %280
%282 = load double, double* %281
%283 = add nsw i64 %280, %145
%284 = getelementptr inbounds double, double* %50, i64 %283
%285 = load double, double* %284
%286 = fneg double %279
%287 = tail call double @llvm.fmuladd.f64(double %286, double %285, double %282)
store double %287, double* %281
%288 = add nuw nsw i64 %273, 1
br label %289
289: ; preds = %278, %272
%290 = phi i64 [ %273, %272 ], [ %288, %278 ]
%291 = icmp eq i64 %275, %178
br i1 %291, label %315, label %292
292: ; preds = %289, %292
%293 = phi i64 [ %313, %292 ], [ %290, %289 ]
%294 = load double, double* %201
%295 = sub nsw i64 %181, %293
%296 = getelementptr inbounds double, double* %50, i64 %295
%297 = load double, double* %296
%298 = add nsw i64 %295, %145
%299 = getelementptr inbounds double, double* %50, i64 %298
%300 = load double, double* %299
%301 = fneg double %294
%302 = tail call double @llvm.fmuladd.f64(double %301, double %300, double %297)
store double %302, double* %296
%303 = xor i64 %293, -1
%304 = load double, double* %201
%305 = add i64 %181, %303
%306 = getelementptr inbounds double, double* %50, i64 %305
%307 = load double, double* %306
%308 = add nsw i64 %305, %145
%309 = getelementptr inbounds double, double* %50, i64 %308
%310 = load double, double* %309
%311 = fneg double %304
%312 = tail call double @llvm.fmuladd.f64(double %311, double %310, double %307)
store double %312, double* %306
%313 = add nuw nsw i64 %293, 2
%314 = icmp eq i64 %313, %148
br i1 %314, label %315, label %292
315: ; preds = %289, %292, %204, %271, %179
%316 = add i64 %181, %147
%317 = add nuw nsw i32 %182, 1
%318 = icmp eq i32 %317, %139
%319 = add i64 %180, 1
br i1 %318, label %320, label %179
320: ; preds = %315, %137
%321 = ashr i32 %140, 1
%322 = shl i32 %139, 1
%323 = add nuw nsw i32 %138, 1
%324 = icmp eq i32 %323, %11
br i1 %324, label %124, label %137
325: ; preds = %126, %409
%326 = phi i64 [ 0, %126 ], [ %413, %409 ]
%327 = getelementptr inbounds double, double* %2, i64 %326
%328 = load double, double* %327
br i1 %127, label %329, label %358
329: ; preds = %325
br i1 %132, label %330, label %332
330: ; preds = %337, %329
%331 = phi i64 [ 0, %329 ], [ %136, %337 ]
br label %359
332: ; preds = %329
%333 = insertelement <2 x double> poison, double %328, i64 0
%334 = shufflevector <2 x double> %333, <2 x double> poison, <2 x i32> zeroinitializer
%335 = insertelement <2 x double> poison, double %328, i64 0
%336 = shufflevector <2 x double> %335, <2 x double> poison, <2 x i32> zeroinitializer
br label %337
337: ; preds = %337, %332
%338 = phi i64 [ 0, %332 ], [ %356, %337 ]
%339 = shl nuw nsw i64 %338, 1
%340 = shl i64 %338, 1
%341 = or i64 %340, 4
%342 = getelementptr inbounds double, double* %50, i64 %339
%343 = getelementptr inbounds double, double* %50, i64 %341
%344 = bitcast double* %342 to <4 x double>*
%345 = bitcast double* %343 to <4 x double>*
%346 = load <4 x double>, <4 x double>* %344
%347 = load <4 x double>, <4 x double>* %345
%348 = shufflevector <4 x double> %346, <4 x double> poison, <2 x i32> <i32 0, i32 2>
%349 = shufflevector <4 x double> %347, <4 x double> poison, <2 x i32> <i32 0, i32 2>
%350 = fadd <2 x double> %334, %348
%351 = fadd <2 x double> %336, %349
%352 = getelementptr inbounds double, double* %54, i64 %338
%353 = bitcast double* %352 to <2 x double>*
store <2 x double> %350, <2 x double>* %353
%354 = getelementptr inbounds double, double* %352, i64 2
%355 = bitcast double* %354 to <2 x double>*
store <2 x double> %351, <2 x double>* %355
%356 = add nuw i64 %338, 4
%357 = icmp eq i64 %356, %136
br i1 %357, label %330, label %337
358: ; preds = %359, %325
br i1 %123, label %368, label %400
359: ; preds = %330, %359
%360 = phi i64 [ %366, %359 ], [ %331, %330 ]
%361 = shl nuw nsw i64 %360, 1
%362 = getelementptr inbounds double, double* %50, i64 %361
%363 = load double, double* %362
%364 = fadd double %328, %363
%365 = getelementptr inbounds double, double* %54, i64 %360
store double %364, double* %365
%366 = add nuw nsw i64 %360, 1
%367 = icmp eq i64 %366, %131
br i1 %367, label %358, label %359
368: ; preds = %358, %395
%369 = phi double [ %373, %395 ], [ %328, %358 ]
%370 = phi i32 [ %398, %395 ], [ 1, %358 ]
%371 = phi i32 [ %396, %395 ], [ 1, %358 ]
%372 = phi i32 [ %397, %395 ], [ 2, %358 ]
%373 = fmul double %369, %369
br i1 %127, label %374, label %395
374: ; preds = %368
%375 = sext i32 %372 to i64
%376 = sext i32 %371 to i64
br label %377
377: ; preds = %374, %377
%378 = phi i64 [ 0, %374 ], [ %393, %377 ]
%379 = trunc i64 %378 to i32
%380 = getelementptr inbounds double, double* %54, i64 %378
%381 = load double, double* %380
%382 = add nsw i64 %378, %376
%383 = add nsw i32 %371, %379
%384 = getelementptr inbounds double, double* %54, i64 %382
%385 = load double, double* %384
%386 = shl nsw i32 %383, 1
%387 = add nsw i32 %386, -1
%388 = sext i32 %387 to i64
%389 = getelementptr inbounds double, double* %50, i64 %388
%390 = load double, double* %389
%391 = fadd double %373, %390
%392 = tail call double @llvm.fmuladd.f64(double %385, double %391, double %381)
store double %392, double* %380
%393 = add nsw i64 %378, %375
%394 = icmp slt i64 %393, %51
br i1 %394, label %377, label %395
395: ; preds = %377, %368
%396 = shl i32 %371, 1
%397 = shl i32 %372, 1
%398 = add nuw nsw i32 %370, 1
%399 = icmp eq i32 %398, %11
br i1 %399, label %400, label %368
400: ; preds = %395, %358
%401 = phi double [ %328, %358 ], [ %373, %395 ]
br i1 %128, label %402, label %404
402: ; preds = %400
%403 = load double, double* %54
br label %409
404: ; preds = %400
%405 = fmul double %401, %401
%406 = fdiv double %405, %328
%407 = load double, double* %54
%408 = fsub double %407, %406
store double %408, double* %54
br label %409
409: ; preds = %402, %404
%410 = phi double [ %403, %402 ], [ %408, %404 ]
%411 = fmul double %41, %410
%412 = getelementptr inbounds double, double* %4, i64 %326
store double %411, double* %412
%413 = add nuw nsw i64 %326, 1
%414 = icmp eq i64 %413, %130
br i1 %414, label %415, label %325
415: ; preds = %409, %124
tail call void @free(i8* %49)
tail call void @free(i8* %53)
br label %416
416: ; preds = %415, %44
%417 = phi i32 [ 0, %44 ], [ 1, %415 ]
ret i32 %417
}