void RRand(int *N, int *TRUK, int *PREDK, int *trcl, int *prcl, double *Rand,
           double *adjRand, double *Eindex) {
  int i, j, n[(*TRUK)][(*PREDK)];
  double sumtr[(*TRUK)], sumpr[(*PREDK)], sumprsq, sumtrsq, sumsq, discordant,
      sumtrprsq;
  double term1, term2, term3;
  double nij2sum, nidot2sum, ndotj2sum;
  for (i = 0; i < (*TRUK); i++) {
    for (j = 0; j < (*PREDK); j++) {
      n[i][j] = 0;
    }
  }
  for (i = 0; i < (*N); i++) {
    n[trcl[i]][prcl[i]] += 1;
  }
  sumtrsq = 0.;
  for (i = 0; i < (*TRUK); i++) {
    sumtr[i] = 0.;
    for (j = 0; j < (*PREDK); j++) {
      sumtr[i] += n[i][j];
    }
    sumtrsq += sumtr[i] * sumtr[i];
  }
  sumprsq = 0.;
  for (j = 0; j < (*PREDK); j++) {
    sumpr[j] = 0.;
    for (i = 0; i < (*TRUK); i++) {
      sumpr[j] += (double)n[i][j];
    }
    sumprsq += sumpr[j] * sumpr[j];
  }
  sumtrprsq = 0.;
  for (i = 0; i < (*TRUK); i++) {
    for (j = 0; j < (*PREDK); j++) {
      sumtrprsq += sumtr[i] * sumtr[i] * sumpr[j] * sumpr[j];
    }
  }
  (*Eindex) = sumtrprsq / ((*N) * ((double)(*N) - 1) +
                           (*N) * (double)(*N) / ((*N) - 1)) -
              (sumprsq + sumtrsq) / ((*N) - 1);
  (*Eindex) *= 2.;
  (*Eindex) /= (*N) * ((double)(*N) - 1);
  sumsq = 0.;
  for (i = 0; i < (*TRUK); i++) {
    for (j = 0; j < (*PREDK); j++) {
      sumsq += (double)n[i][j] * n[i][j];
    }
  }
  nij2sum = 0.;
  for (i = 0; i < (*TRUK); i++) {
    for (j = 0; j < (*PREDK); j++) {
      nij2sum += (double)n[i][j] * (n[i][j] - 1) / 2.0;
    }
  }
  nidot2sum = 0.;
  for (i = 0; i < (*TRUK); i++) {
    nidot2sum += (double)sumtr[i] * (sumtr[i] - 1) / 2.0;
  }
  ndotj2sum = 0.;
  for (i = 0; i < (*PREDK); i++) {
    ndotj2sum += (double)sumpr[i] * (sumpr[i] - 1) / 2.0;
  }
  discordant = 0.5 * (sumtrsq + sumprsq) - sumsq;
  (*Rand) = 1.0 - discordant / ((double)(*N) * ((double)(*N) - 1.) / 2.);
  term3 = nidot2sum * ndotj2sum / ((double)(*N) * ((double)(*N) - 1.) / 2.);
  term1 = nij2sum - term3;
  term2 = (nidot2sum + ndotj2sum) / 2 - term3;
  (*adjRand) = term1 / term2;
}


x86 assembly (clang, -O0):
<RRand>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %rax,-0xd8(%rbp)
mov    %rsp,%rdx
mov    %rdx,-0x40(%rbp)
mov    %rcx,%rdx
imul   %rax,%rdx
lea    0xf(,%rdx,4),%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rdx
sub    %rsi,%rdx
mov    %rdx,-0xd0(%rbp)
mov    %rdx,%rsp
mov    %rcx,-0x48(%rbp)
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xc8(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x58(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xc0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    1233 <RRand+0x133>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1220 <RRand+0x120>
mov    -0xd0(%rbp),%rax
mov    -0xd8(%rbp),%rdx
movslq -0x34(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x38(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11db <RRand+0xdb>
jmp    1225 <RRand+0x125>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11c5 <RRand+0xc5>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x8(%rbp),%rcx
cmp    (%rcx),%eax
jge    1291 <RRand+0x191>
mov    -0xd0(%rbp),%rax
mov    -0xd8(%rbp),%rdx
mov    -0x20(%rbp),%rcx
movslq -0x34(%rbp),%rsi
movslq (%rcx,%rsi,4),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x28(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%edx
add    $0x1,%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    123a <RRand+0x13a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    135a <RRand+0x25a>
mov    -0xc8(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1321 <RRand+0x221>
mov    -0xc8(%rbp),%rax
mov    -0xd0(%rbp),%rcx
mov    -0xd8(%rbp),%rsi
movslq -0x34(%rbp),%rdx
imul   %rsi,%rdx
shl    $0x2,%rdx
add    %rdx,%rcx
movslq -0x38(%rbp),%rdx
cvtsi2sdl (%rcx,%rdx,4),%xmm0
movslq -0x34(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12c9 <RRand+0x1c9>
mov    -0xc8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12a0 <RRand+0x1a0>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1423 <RRand+0x323>
mov    -0xc0(%rbp),%rax
movslq -0x38(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    13ea <RRand+0x2ea>
mov    -0xc0(%rbp),%rax
mov    -0xd0(%rbp),%rcx
mov    -0xd8(%rbp),%rsi
movslq -0x34(%rbp),%rdx
imul   %rsi,%rdx
shl    $0x2,%rdx
add    %rdx,%rcx
movslq -0x38(%rbp),%rdx
cvtsi2sdl (%rcx,%rdx,4),%xmm0
movslq -0x38(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1392 <RRand+0x292>
mov    -0xc0(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1369 <RRand+0x269>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    14c5 <RRand+0x3c5>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    14b2 <RRand+0x3b2>
mov    -0xc0(%rbp),%rax
mov    -0xc8(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm0
movslq -0x34(%rbp),%rdx
mulsd  (%rcx,%rdx,8),%xmm0
movslq -0x38(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    144b <RRand+0x34b>
jmp    14b7 <RRand+0x3b7>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1435 <RRand+0x335>
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm3
movsd  0xb1b(%rip),%xmm2
subsd  %xmm2,%xmm3
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm4
mulsd  %xmm4,%xmm2
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm4
divsd  %xmm4,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  0xabb(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
movsd  0xa93(%rip),%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    162d <RRand+0x52d>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    161a <RRand+0x51a>
mov    -0xd0(%rbp),%rax
mov    -0xd8(%rbp),%rdx
movslq -0x34(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x2,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x38(%rbp),%rsi
cvtsi2sdl (%rcx,%rsi,4),%xmm0
movslq -0x34(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x38(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    15aa <RRand+0x4aa>
jmp    161f <RRand+0x51f>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1594 <RRand+0x494>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    16eb <RRand+0x5eb>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    16d8 <RRand+0x5d8>
mov    -0xd0(%rbp),%rax
mov    -0xd8(%rbp),%rdx
movslq -0x34(%rbp),%rsi
imul   %rdx,%rsi
shl    $0x2,%rsi
mov    %rax,%rcx
add    %rsi,%rcx
movslq -0x38(%rbp),%rsi
cvtsi2sdl (%rcx,%rsi,4),%xmm0
movslq -0x34(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x952(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1655 <RRand+0x555>
jmp    16dd <RRand+0x5dd>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    163f <RRand+0x53f>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    175f <RRand+0x65f>
mov    -0xc8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0x8d3(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8cb(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    16fd <RRand+0x5fd>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    17d3 <RRand+0x6d3>
mov    -0xc0(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0x85f(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x857(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1771 <RRand+0x671>
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x80f(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
movsd  0x7d5(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0x7cd(%rip),%xmm2
divsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movsd  0x7b5(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
movsd  0x781(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0x779(%rip),%xmm2
divsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
movsd  0x739(%rip),%xmm1
divsd  %xmm1,%xmm0
subsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
divsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<RRand>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r9,-0x40(%rbp)
mov    %r8,-0x68(%rbp)
mov    %rdi,-0x60(%rbp)
mov    (%rsi),%esi
mov    (%rdx),%r15d
mov    %r15,%rax
imul   %rsi,%rax
lea    0xf(,%rax,4),%rax
and    $0xfffffffffffffff0,%rax
mov    %rsp,%rdx
sub    %rax,%rdx
mov    %rdx,-0x30(%rbp)
mov    %rdx,%rsp
mov    %rsp,%r14
lea    0xf(,%rsi,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r14
mov    %r14,%rsp
mov    %rsp,%r13
lea    0xf(,%r15,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r13
mov    %r13,%rsp
mov    %rsi,-0x50(%rbp)
test   %esi,%esi
mov    %r14,-0x48(%rbp)
jle    11f2 <RRand+0xe2>
lea    0x0(,%r15,4),%rdx
mov    -0x50(%rbp),%rsi
lea    -0x1(%rsi),%rax
mov    %esi,%r12d
and    $0x3,%r12d
cmp    $0x3,%rax
mov    %rcx,-0x58(%rbp)
mov    %rdx,-0x38(%rbp)
jae    121b <RRand+0x10b>
xor    %ebx,%ebx
test   %r12,%r12
mov    -0x48(%rbp),%r14
je     11f2 <RRand+0xe2>
imul   %r15,%rbx
mov    -0x30(%rbp),%rax
lea    (%rax,%rbx,4),%rbx
jmp    11d9 <RRand+0xc9>
cs nopw 0x0(%rax,%rax,1)
add    %rdx,%rbx
add    $0xffffffffffffffff,%r12
je     11f2 <RRand+0xe2>
test   %r15d,%r15d
jle    11d0 <RRand+0xc0>
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    -0x38(%rbp),%rdx
mov    -0x58(%rbp),%rcx
jmp    11d0 <RRand+0xc0>
mov    -0x60(%rbp),%rax
mov    (%rax),%r8d
test   %r8d,%r8d
mov    -0x50(%rbp),%r12
mov    -0x68(%rbp),%rbx
jle    1321 <RRand+0x211>
cmp    $0x1,%r8d
jne    12b7 <RRand+0x1a7>
xor    %eax,%eax
jmp    1303 <RRand+0x1f3>
and    $0xfffffffc,%esi
mov    %rsi,-0x88(%rbp)
mov    %r15,%rax
shl    $0x4,%rax
mov    %rax,-0x80(%rbp)
lea    0x0(,%r15,8),%rax
mov    %rax,-0x78(%rbp)
lea    (%rdx,%rdx,2),%rax
mov    %rax,-0x70(%rbp)
xor    %ebx,%ebx
mov    -0x30(%rbp),%r14
jmp    1265 <RRand+0x155>
nopl   0x0(%rax)
add    $0x4,%rbx
add    -0x80(%rbp),%r14
cmp    %rbx,-0x88(%rbp)
je     11af <RRand+0x9f>
test   %r15d,%r15d
jle    1250 <RRand+0x140>
mov    %r14,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    -0x38(%rbp),%rax
lea    (%r14,%rax,1),%rdi
xor    %esi,%esi
mov    -0x38(%rbp),%rdx
call   1030 <memset@plt>
mov    -0x78(%rbp),%rax
lea    (%r14,%rax,1),%rdi
xor    %esi,%esi
mov    -0x38(%rbp),%rdx
call   1030 <memset@plt>
mov    -0x70(%rbp),%rax
lea    (%r14,%rax,1),%rdi
xor    %esi,%esi
mov    -0x38(%rbp),%rdx
call   1030 <memset@plt>
mov    -0x38(%rbp),%rdx
mov    -0x58(%rbp),%rcx
jmp    1250 <RRand+0x140>
mov    %r8d,%r9d
and    $0xfffffffe,%r9d
xor    %eax,%eax
mov    -0x30(%rbp),%rdi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq (%rcx,%rax,4),%rdx
imul   %r15,%rdx
lea    (%rdi,%rdx,4),%rdx
movslq (%rbx,%rax,4),%rsi
addl   $0x1,(%rdx,%rsi,4)
movslq 0x4(%rcx,%rax,4),%rdx
imul   %r15,%rdx
lea    (%rdi,%rdx,4),%rdx
movslq 0x4(%rbx,%rax,4),%rsi
addl   $0x1,(%rdx,%rsi,4)
add    $0x2,%rax
cmp    %rax,%r9
jne    12d0 <RRand+0x1c0>
test   $0x1,%r8b
je     1321 <RRand+0x211>
movslq (%rcx,%rax,4),%rcx
imul   %r15,%rcx
mov    -0x30(%rbp),%rdx
lea    (%rdx,%rcx,4),%rcx
movslq (%rbx,%rax,4),%rax
addl   $0x1,(%rcx,%rax,4)
xorpd  %xmm3,%xmm3
xorpd  %xmm10,%xmm10
test   %r12d,%r12d
jle    140a <RRand+0x2fa>
lea    -0x1(%r15),%r9
mov    %r15d,%edx
and    $0x3,%edx
mov    %r15d,%eax
and    $0xfffffffc,%eax
mov    -0x30(%rbp),%r11
lea    0xc(%r11),%rsi
lea    0x0(,%r15,4),%r10
xorpd  %xmm10,%xmm10
xor    %ebx,%ebx
jmp    1382 <RRand+0x272>
nopl   0x0(%rax)
movsd  %xmm1,(%r14,%rbx,8)
mulsd  %xmm1,%xmm1
addsd  %xmm1,%xmm10
add    $0x1,%rbx
add    %r10,%rsi
add    %r10,%r11
cmp    %r12,%rbx
je     140a <RRand+0x2fa>
movq   $0x0,(%r14,%rbx,8)
xorpd  %xmm1,%xmm1
test   %r15d,%r15d
jle    1366 <RRand+0x256>
xorpd  %xmm1,%xmm1
xor    %edi,%edi
cmp    $0x3,%r9
jb     13dc <RRand+0x2cc>
nop
xorps  %xmm2,%xmm2
cvtsi2sdl -0xc(%rsi,%rdi,4),%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm4,%xmm4
cvtsi2sdl -0x8(%rsi,%rdi,4),%xmm4
addsd  %xmm2,%xmm4
xorps  %xmm2,%xmm2
cvtsi2sdl -0x4(%rsi,%rdi,4),%xmm2
xorps  %xmm1,%xmm1
cvtsi2sdl (%rsi,%rdi,4),%xmm1
addsd  %xmm4,%xmm2
addsd  %xmm2,%xmm1
add    $0x4,%rdi
cmp    %rdi,%rax
jne    13a0 <RRand+0x290>
test   %rdx,%rdx
je     1360 <RRand+0x250>
lea    (%r11,%rdi,4),%rdi
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
xorps  %xmm2,%xmm2
cvtsi2sdl (%rdi,%rcx,4),%xmm2
addsd  %xmm2,%xmm1
add    $0x1,%rcx
cmp    %rcx,%rdx
jne    13f0 <RRand+0x2e0>
jmp    1360 <RRand+0x250>
test   %r15d,%r15d
jle    1519 <RRand+0x409>
lea    -0x1(%r12),%r9
mov    %r12d,%r10d
and    $0x3,%r10d
mov    %r12d,%esi
and    $0xfffffffc,%esi
mov    %r15,%rdi
shl    $0x4,%rdi
lea    0x0(,%r15,4),%rbx
lea    (%rbx,%rbx,2),%rax
xorpd  %xmm3,%xmm3
xor    %r14d,%r14d
mov    -0x30(%rbp),%r11
jmp    1470 <RRand+0x360>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  %xmm1,0x0(%r13,%r14,8)
mulsd  %xmm1,%xmm1
addsd  %xmm1,%xmm3
add    $0x1,%r14
add    $0x4,%r11
cmp    %r15,%r14
je     1519 <RRand+0x409>
movq   $0x0,0x0(%r13,%r14,8)
xorpd  %xmm1,%xmm1
test   %r12d,%r12d
jle    1457 <RRand+0x347>
xorpd  %xmm1,%xmm1
cmp    $0x3,%r9
jae    1490 <RRand+0x380>
xor    %edx,%edx
jmp    14dd <RRand+0x3cd>
mov    %r11,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm2,%xmm2
cvtsi2sdl (%rcx),%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsi2sdl (%rcx,%r15,4),%xmm1
xorps  %xmm4,%xmm4
cvtsi2sdl (%rcx,%r15,8),%xmm4
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtsi2sdl (%rcx,%rax,1),%xmm1
addsd  %xmm4,%xmm1
add    $0x4,%rdx
add    %rdi,%rcx
cmp    %rdx,%rsi
jne    14a0 <RRand+0x390>
test   %r10,%r10
je     1450 <RRand+0x340>
imul   %r15,%rdx
lea    (%r11,%rdx,4),%rcx
mov    %r10,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm2,%xmm2
cvtsi2sdl (%rcx),%xmm2
addsd  %xmm2,%xmm1
add    %rbx,%rcx
add    $0xffffffffffffffff,%rdx
jne    1500 <RRand+0x3f0>
jmp    1450 <RRand+0x340>
mov    0x18(%rbp),%r9
xorpd  %xmm1,%xmm1
xorpd  %xmm4,%xmm4
test   %r12d,%r12d
mov    -0x48(%rbp),%r11
jle    1623 <RRand+0x513>
lea    -0x1(%r15),%rdx
mov    %r15d,%esi
and    $0x3,%esi
mov    %r15d,%eax
and    $0xfffffffc,%eax
xorpd  %xmm4,%xmm4
xor    %edi,%edi
jmp    155d <RRand+0x44d>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    %r12,%rdi
je     1623 <RRand+0x513>
test   %r15d,%r15d
jle    1550 <RRand+0x440>
movsd  (%r11,%rdi,8),%xmm2
mulsd  %xmm2,%xmm2
xor    %ebx,%ebx
cmp    $0x3,%rdx
jb     15e5 <RRand+0x4d5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0x0(%r13,%rbx,8),%xmm5
movsd  0x8(%r13,%rbx,8),%xmm6
movapd %xmm2,%xmm7
mulsd  %xmm5,%xmm7
mulsd  %xmm5,%xmm7
addsd  %xmm4,%xmm7
movapd %xmm2,%xmm4
mulsd  %xmm6,%xmm4
mulsd  %xmm6,%xmm4
addsd  %xmm7,%xmm4
movsd  0x10(%r13,%rbx,8),%xmm5
movapd %xmm2,%xmm6
mulsd  %xmm5,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm4,%xmm6
movsd  0x18(%r13,%rbx,8),%xmm5
movapd %xmm2,%xmm4
mulsd  %xmm5,%xmm4
mulsd  %xmm5,%xmm4
addsd  %xmm6,%xmm4
add    $0x4,%rbx
cmp    %rbx,%rax
jne    1580 <RRand+0x470>
test   %rsi,%rsi
je     1550 <RRand+0x440>
lea    0x0(,%rbx,8),%rbx
add    %r13,%rbx
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movsd  (%rbx,%rcx,8),%xmm5
movapd %xmm2,%xmm6
mulsd  %xmm5,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm6,%xmm4
add    $0x1,%rcx
cmp    %rcx,%rsi
jne    1600 <RRand+0x4f0>
jmp    1550 <RRand+0x440>
lea    -0x1(%r8),%eax
xorps  %xmm5,%xmm5
cvtsi2sd %r8d,%xmm5
movsd  0x9c8(%rip),%xmm8
addsd  %xmm5,%xmm8
mulsd  %xmm5,%xmm8
mulsd  %xmm5,%xmm5
xorps  %xmm6,%xmm6
cvtsi2sd %eax,%xmm6
divsd  %xmm6,%xmm5
addsd  %xmm8,%xmm5
divsd  %xmm5,%xmm4
addsd  %xmm3,%xmm10
movapd %xmm10,%xmm3
divsd  %xmm6,%xmm3
subsd  %xmm3,%xmm4
addsd  %xmm4,%xmm4
divsd  %xmm8,%xmm4
movsd  %xmm4,(%r9)
xorpd  %xmm3,%xmm3
xorpd  %xmm4,%xmm4
test   %r12d,%r12d
mov    -0x30(%rbp),%r10
jle    1932 <RRand+0x822>
lea    -0x1(%r15),%r8
mov    %r15d,%edx
and    $0x3,%edx
mov    %r15d,%esi
and    $0xfffffffc,%esi
lea    0xc(%r10),%rdi
lea    0x0(,%r15,4),%r9
xorpd  %xmm3,%xmm3
xor    %ebx,%ebx
jmp    16d3 <RRand+0x5c3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rbx
add    %r9,%rdi
add    %r9,%r10
cmp    %r12,%rbx
je     175e <RRand+0x64e>
test   %r15d,%r15d
jle    16c0 <RRand+0x5b0>
xor    %ecx,%ecx
cmp    $0x3,%r8
jb     172c <RRand+0x61c>
xorps  %xmm1,%xmm1
cvtsi2sdl -0xc(%rdi,%rcx,4),%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm3,%xmm3
cvtsi2sdl -0x8(%rdi,%rcx,4),%xmm3
mulsd  %xmm3,%xmm3
addsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtsi2sdl -0x4(%rdi,%rcx,4),%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm3,%xmm1
xorps  %xmm3,%xmm3
cvtsi2sdl (%rdi,%rcx,4),%xmm3
mulsd  %xmm3,%xmm3
addsd  %xmm1,%xmm3
add    $0x4,%rcx
cmp    %rcx,%rsi
jne    16e0 <RRand+0x5d0>
test   %rdx,%rdx
je     16c0 <RRand+0x5b0>
lea    (%r10,%rcx,4),%rcx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sdl (%rcx,%rax,4),%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm1,%xmm3
add    $0x1,%rax
cmp    %rax,%rdx
jne    1740 <RRand+0x630>
jmp    16c0 <RRand+0x5b0>
test   %r12d,%r12d
jle    1855 <RRand+0x745>
mov    %r15d,%edx
and    $0xfffffffe,%edx
mov    -0x30(%rbp),%rax
add    $0x4,%rax
xorpd  %xmm1,%xmm1
xor    %esi,%esi
movsd  0x885(%rip),%xmm5
jmp    17a0 <RRand+0x690>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rsi
add    %r9,%rax
cmp    %r12,%rsi
je     1834 <RRand+0x724>
test   %r15d,%r15d
jle    1790 <RRand+0x680>
xor    %edi,%edi
test   %r8,%r8
je     17fa <RRand+0x6ea>
nopl   0x0(%rax)
mov    -0x4(%rax,%rdi,4),%ecx
mov    (%rax,%rdi,4),%ebx
xorps  %xmm4,%xmm4
cvtsi2sd %ecx,%xmm4
add    $0xffffffff,%ecx
xorps  %xmm6,%xmm6
cvtsi2sd %ecx,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm1,%xmm6
xorps  %xmm4,%xmm4
cvtsi2sd %ebx,%xmm4
add    $0xffffffff,%ebx
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm5,%xmm1
addsd  %xmm6,%xmm1
add    $0x2,%rdi
cmp    %rdi,%rdx
jne    17b0 <RRand+0x6a0>
test   $0x1,%r15b
mov    -0x30(%rbp),%rbx
je     1790 <RRand+0x680>
mov    %rsi,%rcx
imul   %r15,%rcx
lea    (%rbx,%rcx,4),%rcx
mov    (%rcx,%rdi,4),%ecx
xorps  %xmm4,%xmm4
cvtsi2sd %ecx,%xmm4
add    $0xffffffff,%ecx
xorps  %xmm6,%xmm6
cvtsi2sd %ecx,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm6,%xmm1
jmp    1790 <RRand+0x680>
test   %r12d,%r12d
jle    1859 <RRand+0x749>
lea    -0x1(%r12),%rcx
mov    %r12d,%eax
and    $0x3,%eax
cmp    $0x3,%rcx
jae    1862 <RRand+0x752>
xorpd  %xmm4,%xmm4
xor    %ecx,%ecx
jmp    18f8 <RRand+0x7e8>
xorpd  %xmm1,%xmm1
xorpd  %xmm4,%xmm4
jmp    1932 <RRand+0x822>
and    $0xfffffffc,%r12d
xorpd  %xmm4,%xmm4
xor    %ecx,%ecx
movsd  0x78b(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%r11,%rcx,8),%xmm6
movsd  0x8(%r11,%rcx,8),%xmm7
movapd %xmm6,%xmm2
addsd  %xmm9,%xmm2
mulsd  %xmm6,%xmm2
mulsd  %xmm5,%xmm2
addsd  %xmm4,%xmm2
movapd %xmm7,%xmm4
addsd  %xmm9,%xmm4
mulsd  %xmm7,%xmm4
mulsd  %xmm5,%xmm4
addsd  %xmm2,%xmm4
movsd  0x10(%r11,%rcx,8),%xmm2
movapd %xmm2,%xmm6
addsd  %xmm9,%xmm6
mulsd  %xmm2,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm4,%xmm6
movsd  0x18(%r11,%rcx,8),%xmm2
movapd %xmm2,%xmm4
addsd  %xmm9,%xmm4
mulsd  %xmm2,%xmm4
mulsd  %xmm5,%xmm4
addsd  %xmm6,%xmm4
add    $0x4,%rcx
cmp    %rcx,%r12
jne    1880 <RRand+0x770>
test   %rax,%rax
je     1932 <RRand+0x822>
lea    (%r11,%rcx,8),%rcx
xor    %edx,%edx
movsd  0x6f5(%rip),%xmm6
nopl   0x0(%rax,%rax,1)
movsd  (%rcx,%rdx,8),%xmm2
movapd %xmm2,%xmm7
addsd  %xmm6,%xmm7
mulsd  %xmm2,%xmm7
mulsd  %xmm5,%xmm7
addsd  %xmm7,%xmm4
add    $0x1,%rdx
cmp    %rdx,%rax
jne    1910 <RRand+0x800>
mov    0x10(%rbp),%rax
test   %r15d,%r15d
jle    195a <RRand+0x84a>
lea    -0x1(%r15),%rdx
mov    %r15d,%ecx
and    $0x3,%ecx
cmp    $0x3,%rdx
jae    1967 <RRand+0x857>
xorpd  %xmm5,%xmm5
xor    %edx,%edx
mov    -0x40(%rbp),%rdi
jmp    1a09 <RRand+0x8f9>
xorpd  %xmm5,%xmm5
mov    -0x40(%rbp),%rdi
jmp    1a52 <RRand+0x942>
and    $0xfffffffc,%r15d
xorpd  %xmm5,%xmm5
xor    %edx,%edx
movsd  0x686(%rip),%xmm9
movsd  0x686(%rip),%xmm7
mov    -0x40(%rbp),%rdi
cs nopw 0x0(%rax,%rax,1)
movsd  0x0(%r13,%rdx,8),%xmm6
movsd  0x8(%r13,%rdx,8),%xmm0
movapd %xmm6,%xmm2
addsd  %xmm9,%xmm2
mulsd  %xmm6,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm5,%xmm2
movapd %xmm0,%xmm5
addsd  %xmm9,%xmm5
mulsd  %xmm0,%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm2,%xmm5
movsd  0x10(%r13,%rdx,8),%xmm0
movapd %xmm0,%xmm2
addsd  %xmm9,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm5,%xmm2
movsd  0x18(%r13,%rdx,8),%xmm0
movapd %xmm0,%xmm5
addsd  %xmm9,%xmm5
mulsd  %xmm0,%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm2,%xmm5
add    $0x4,%rdx
cmp    %rdx,%r15
jne    1990 <RRand+0x880>
test   %rcx,%rcx
je     1a52 <RRand+0x942>
lea    0x0(,%rdx,8),%rdx
add    %r13,%rdx
xor    %esi,%esi
movsd  0x5dd(%rip),%xmm6
movsd  0x5dd(%rip),%xmm7
nopl   0x0(%rax,%rax,1)
movsd  (%rdx,%rsi,8),%xmm0
movapd %xmm0,%xmm2
addsd  %xmm6,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm2,%xmm5
add    $0x1,%rsi
cmp    %rsi,%rcx
jne    1a30 <RRand+0x920>
movsd  0x5ae(%rip),%xmm0
mulsd  %xmm0,%xmm10
subsd  %xmm3,%xmm10
mulsd  %xmm0,%xmm8
divsd  %xmm8,%xmm10
movsd  0x59a(%rip),%xmm2
subsd  %xmm10,%xmm2
movsd  %xmm2,(%rdi)
movapd %xmm4,%xmm2
mulsd  %xmm5,%xmm2
divsd  %xmm8,%xmm2
subsd  %xmm2,%xmm1
addsd  %xmm5,%xmm4
mulsd  %xmm0,%xmm4
subsd  %xmm2,%xmm4
divsd  %xmm4,%xmm1
movsd  %xmm1,(%rax)
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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