int MultiNomialAliasSetTable(int ncat, double prob[], double F[], int L[],
                             double space[]) {
  signed char *I = (signed char *)space;
  int i, j, k, nsmall;
  for (i = 0; i < ncat; i++)
    L[i] = -9;
  for (i = 0; i < ncat; i++)
    F[i] = ncat * prob[i];
  for (i = 0, nsmall = 0; i < ncat; i++) {
    if (F[i] >= 1)
      I[i] = 1;
    else {
      I[i] = -1;
      nsmall++;
    }
  }
  for (i = 0; nsmall > 0; i++) {
    for (j = 0; j < ncat; j++)
      if (I[j] == -1)
        break;
    for (k = 0; k < ncat; k++)
      if (I[k] == 1)
        break;
    if (k == ncat)
      break;
    L[j] = k;
    F[k] -= 1 - F[j];
    if (F[k] < 1) {
      I[k] = -1;
      nsmall++;
    }
    I[j] = 0;
    nsmall--;
  }
  return (0);
}


x86 assembly (clang, -O0):
<MultiNomialAliasSetTable>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    114f <MultiNomialAliasSetTable+0x4f>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0xfffffff7,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1126 <MultiNomialAliasSetTable+0x26>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    118f <MultiNomialAliasSetTable+0x8f>
cvtsi2sdl -0x4(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1156 <MultiNomialAliasSetTable+0x56>
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1201 <MultiNomialAliasSetTable+0x101>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe42(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11d9 <MultiNomialAliasSetTable+0xd9>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x1,(%rax,%rcx,1)
jmp    11ee <MultiNomialAliasSetTable+0xee>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11f3 <MultiNomialAliasSetTable+0xf3>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    119d <MultiNomialAliasSetTable+0x9d>
movl   $0x0,-0x34(%rbp)
cmpl   $0x0,-0x40(%rbp)
jle    132f <MultiNomialAliasSetTable+0x22f>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1252 <MultiNomialAliasSetTable+0x152>
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xffffffff,%eax
jne    123f <MultiNomialAliasSetTable+0x13f>
jmp    1252 <MultiNomialAliasSetTable+0x152>
jmp    1244 <MultiNomialAliasSetTable+0x144>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1219 <MultiNomialAliasSetTable+0x119>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1292 <MultiNomialAliasSetTable+0x192>
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x1,%eax
jne    127f <MultiNomialAliasSetTable+0x17f>
jmp    1292 <MultiNomialAliasSetTable+0x192>
jmp    1284 <MultiNomialAliasSetTable+0x184>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1259 <MultiNomialAliasSetTable+0x159>
mov    -0x3c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    12a3 <MultiNomialAliasSetTable+0x1a3>
jmp    132f <MultiNomialAliasSetTable+0x22f>
mov    -0x3c(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  0xd3f(%rip),%xmm1
subsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  0xd14(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    130c <MultiNomialAliasSetTable+0x20c>
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x38(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x40(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1208 <MultiNomialAliasSetTable+0x108>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<MultiNomialAliasSetTable>:
push   %r14
push   %rbx
test   %edi,%edi
jle    1779 <MultiNomialAliasSetTable+0x679>
mov    %edi,%r9d
cmp    $0x8,%edi
jae    111a <MultiNomialAliasSetTable+0x1a>
xor    %eax,%eax
jmp    1220 <MultiNomialAliasSetTable+0x120>
mov    %r9d,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%rbx
mov    %rbx,%r11
shr    $0x3,%r11
add    $0x1,%r11
mov    %r11d,%r10d
and    $0x7,%r10d
cmp    $0x38,%rbx
jae    1143 <MultiNomialAliasSetTable+0x43>
xor    %ebx,%ebx
jmp    11e5 <MultiNomialAliasSetTable+0xe5>
and    $0xfffffffffffffff8,%r11
xor    %ebx,%ebx
movapd 0xeaf(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd %xmm0,(%rcx,%rbx,4)
movupd %xmm0,0x10(%rcx,%rbx,4)
movupd %xmm0,0x20(%rcx,%rbx,4)
movupd %xmm0,0x30(%rcx,%rbx,4)
movupd %xmm0,0x40(%rcx,%rbx,4)
movupd %xmm0,0x50(%rcx,%rbx,4)
movupd %xmm0,0x60(%rcx,%rbx,4)
movupd %xmm0,0x70(%rcx,%rbx,4)
movupd %xmm0,0x80(%rcx,%rbx,4)
movupd %xmm0,0x90(%rcx,%rbx,4)
movupd %xmm0,0xa0(%rcx,%rbx,4)
movupd %xmm0,0xb0(%rcx,%rbx,4)
movupd %xmm0,0xc0(%rcx,%rbx,4)
movupd %xmm0,0xd0(%rcx,%rbx,4)
movupd %xmm0,0xe0(%rcx,%rbx,4)
movupd %xmm0,0xf0(%rcx,%rbx,4)
add    $0x40,%rbx
add    $0xfffffffffffffff8,%r11
jne    1160 <MultiNomialAliasSetTable+0x60>
test   %r10,%r10
je     1216 <MultiNomialAliasSetTable+0x116>
lea    (%rcx,%rbx,4),%r11
add    $0x10,%r11
shl    $0x5,%r10
xor    %ebx,%ebx
movapd 0xe00(%rip),%xmm0
movupd %xmm0,-0x10(%r11,%rbx,1)
movupd %xmm0,(%r11,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r10
jne    1200 <MultiNomialAliasSetTable+0x100>
cmp    %r9,%rax
je     1230 <MultiNomialAliasSetTable+0x130>
nopl   0x0(%rax,%rax,1)
movl   $0xfffffff7,(%rcx,%rax,4)
add    $0x1,%rax
cmp    %rax,%r9
jne    1220 <MultiNomialAliasSetTable+0x120>
test   %edi,%edi
jle    1779 <MultiNomialAliasSetTable+0x679>
xorps  %xmm0,%xmm0
cvtsi2sd %edi,%xmm0
cmp    $0x4,%edi
jb     125e <MultiNomialAliasSetTable+0x15e>
lea    (%rsi,%r9,8),%rax
cmp    %rdx,%rax
jbe    12fc <MultiNomialAliasSetTable+0x1fc>
lea    (%rdx,%r9,8),%rax
cmp    %rsi,%rax
jbe    12fc <MultiNomialAliasSetTable+0x1fc>
xor    %eax,%eax
mov    %rax,%r10
not    %r10
add    %r9,%r10
mov    %r9,%rbx
and    $0x3,%rbx
je     1298 <MultiNomialAliasSetTable+0x198>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rbx
jne    1280 <MultiNomialAliasSetTable+0x180>
cmp    $0x3,%r10
jb     13b1 <MultiNomialAliasSetTable+0x2b1>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rdx,%rax,8)
movsd  0x8(%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rdx,%rax,8)
movsd  0x10(%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rdx,%rax,8)
movsd  0x18(%rsi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rdx,%rax,8)
add    $0x4,%rax
cmp    %rax,%r9
jne    12b0 <MultiNomialAliasSetTable+0x1b0>
jmp    13b1 <MultiNomialAliasSetTable+0x2b1>
mov    %r9d,%eax
and    $0xfffffffc,%eax
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rax),%rbx
mov    %rbx,%r11
shr    $0x2,%r11
add    $0x1,%r11
test   %rbx,%rbx
je     177f <MultiNomialAliasSetTable+0x67f>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %r10d,%r10d
nopl   0x0(%rax)
movupd (%rsi,%r10,8),%xmm2
movupd 0x10(%rsi,%r10,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%rdx,%r10,8)
movupd %xmm3,0x10(%rdx,%r10,8)
movupd 0x20(%rsi,%r10,8),%xmm2
movupd 0x30(%rsi,%r10,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x20(%rdx,%r10,8)
movupd %xmm3,0x30(%rdx,%r10,8)
add    $0x8,%r10
add    $0xfffffffffffffffe,%rbx
jne    1330 <MultiNomialAliasSetTable+0x230>
test   $0x1,%r11b
je     13a8 <MultiNomialAliasSetTable+0x2a8>
movupd (%rsi,%r10,8),%xmm2
movupd 0x10(%rsi,%r10,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%rdx,%r10,8)
movupd %xmm3,0x10(%rdx,%r10,8)
cmp    %r9,%rax
jne    1260 <MultiNomialAliasSetTable+0x160>
test   %edi,%edi
jle    1779 <MultiNomialAliasSetTable+0x679>
cmp    $0x4,%edi
jb     13d8 <MultiNomialAliasSetTable+0x2d8>
lea    (%rdx,%r9,8),%rax
cmp    %r8,%rax
jbe    1460 <MultiNomialAliasSetTable+0x360>
lea    (%r8,%r9,1),%rax
cmp    %rdx,%rax
jbe    1460 <MultiNomialAliasSetTable+0x360>
xor    %esi,%esi
xor    %eax,%eax
mov    %rsi,%r10
not    %r10
test   $0x1,%r9b
je     1408 <MultiNomialAliasSetTable+0x308>
movsd  (%rdx,%rsi,8),%xmm0
ucomisd 0xc3b(%rip),%xmm0
setae  %bl
adc    $0x0,%eax
add    %bl,%bl
add    $0xff,%bl
mov    %bl,(%r8,%rsi,1)
or     $0x1,%rsi
add    %r9,%r10
je     16b6 <MultiNomialAliasSetTable+0x5b6>
movsd  0xc17(%rip),%xmm0
nopl   0x0(%rax)
movsd  (%rdx,%rsi,8),%xmm1
ucomisd %xmm0,%xmm1
setae  %bl
adc    $0x0,%eax
add    %bl,%bl
add    $0xff,%bl
mov    %bl,(%r8,%rsi,1)
movsd  0x8(%rdx,%rsi,8),%xmm1
ucomisd %xmm0,%xmm1
setae  %bl
adc    $0x0,%eax
add    %bl,%bl
add    $0xff,%bl
mov    %bl,0x1(%r8,%rsi,1)
add    $0x2,%rsi
cmp    %rsi,%r9
jne    1420 <MultiNomialAliasSetTable+0x320>
jmp    16b6 <MultiNomialAliasSetTable+0x5b6>
mov    %r9d,%esi
and    $0xfffffffc,%esi
lea    -0x4(%rsi),%rax
mov    %rax,%r10
shr    $0x2,%r10
add    $0x1,%r10
test   %rax,%rax
je     1791 <MultiNomialAliasSetTable+0x691>
mov    %r10,%r11
and    $0xfffffffffffffffe,%r11
xorpd  %xmm0,%xmm0
xor    %r14d,%r14d
movapd 0xb7c(%rip),%xmm2
movdqa 0xb83(%rip),%xmm8
xorpd  %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd (%rdx,%r14,8),%xmm5
movupd 0x10(%rdx,%r14,8),%xmm6
movapd %xmm2,%xmm4
cmpnlepd %xmm5,%xmm4
movq   %xmm4,%rbx
movzbl %bl,%ebx
movdqa %xmm4,%xmm5
punpckhqdq %xmm4,%xmm5
movq   %xmm5,%rax
shl    $0x8,%eax
or     %ebx,%eax
movd   %eax,%xmm5
movdqa %xmm5,%xmm7
pandn  %xmm8,%xmm7
por    %xmm5,%xmm7
movapd %xmm2,%xmm5
cmpnlepd %xmm6,%xmm5
movq   %xmm5,%rax
movzbl %al,%eax
movdqa %xmm5,%xmm6
punpckhqdq %xmm5,%xmm6
movq   %xmm6,%rbx
shl    $0x8,%ebx
or     %eax,%ebx
movd   %ebx,%xmm3
movdqa %xmm3,%xmm6
pandn  %xmm8,%xmm6
por    %xmm3,%xmm6
shufps $0xe8,%xmm4,%xmm4
psubd  %xmm4,%xmm0
shufps $0xe8,%xmm5,%xmm5
psubd  %xmm5,%xmm1
movd   %xmm7,%eax
mov    %ax,(%r8,%r14,1)
movd   %xmm6,%eax
mov    %ax,0x2(%r8,%r14,1)
movupd 0x20(%rdx,%r14,8),%xmm3
movupd 0x30(%rdx,%r14,8),%xmm5
movapd %xmm2,%xmm4
cmpnlepd %xmm3,%xmm4
movq   %xmm4,%rax
movzbl %al,%eax
movdqa %xmm4,%xmm3
punpckhqdq %xmm4,%xmm3
movq   %xmm3,%rbx
shl    $0x8,%ebx
or     %eax,%ebx
movd   %ebx,%xmm3
movdqa %xmm3,%xmm6
pandn  %xmm8,%xmm6
por    %xmm3,%xmm6
movapd %xmm2,%xmm3
cmpnlepd %xmm5,%xmm3
movq   %xmm3,%rax
movzbl %al,%eax
movdqa %xmm3,%xmm5
punpckhqdq %xmm3,%xmm5
movq   %xmm5,%rbx
shl    $0x8,%ebx
or     %eax,%ebx
movd   %ebx,%xmm5
movdqa %xmm5,%xmm7
pandn  %xmm8,%xmm7
por    %xmm5,%xmm7
shufps $0xe8,%xmm4,%xmm4
psubd  %xmm4,%xmm0
shufps $0xe8,%xmm3,%xmm3
psubd  %xmm3,%xmm1
movd   %xmm6,%eax
mov    %ax,0x4(%r8,%r14,1)
movd   %xmm7,%eax
mov    %ax,0x6(%r8,%r14,1)
add    $0x8,%r14
add    $0xfffffffffffffffe,%r11
jne    14b0 <MultiNomialAliasSetTable+0x3b0>
test   $0x1,%r10b
je     169c <MultiNomialAliasSetTable+0x59c>
movupd (%rdx,%r14,8),%xmm5
movupd 0x10(%rdx,%r14,8),%xmm6
movapd 0xa01(%rip),%xmm2
movdqa 0xa09(%rip),%xmm4
movapd %xmm2,%xmm3
cmpnlepd %xmm5,%xmm3
movq   %xmm3,%rax
movzbl %al,%eax
movdqa %xmm3,%xmm5
punpckhqdq %xmm3,%xmm5
movq   %xmm5,%rbx
shl    $0x8,%ebx
or     %eax,%ebx
movd   %ebx,%xmm5
movdqa %xmm5,%xmm7
pandn  %xmm4,%xmm7
por    %xmm5,%xmm7
cmpnlepd %xmm6,%xmm2
movq   %xmm2,%rax
movzbl %al,%eax
movdqa %xmm2,%xmm5
punpckhqdq %xmm2,%xmm5
movq   %xmm5,%rbx
shl    $0x8,%ebx
or     %eax,%ebx
movd   %ebx,%xmm5
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
por    %xmm5,%xmm6
shufps $0xe8,%xmm3,%xmm3
psubd  %xmm3,%xmm0
shufps $0xe8,%xmm2,%xmm2
psubd  %xmm2,%xmm1
movd   %xmm7,%eax
mov    %ax,(%r8,%r14,1)
movd   %xmm6,%eax
mov    %ax,0x2(%r8,%r14,1)
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
cmp    %r9,%rsi
jne    13dc <MultiNomialAliasSetTable+0x2dc>
test   %eax,%eax
je     1779 <MultiNomialAliasSetTable+0x679>
movsd  0x96a(%rip),%xmm0
jmp    16e3 <MultiNomialAliasSetTable+0x5e3>
nopl   0x0(%rax,%rax,1)
movb   $0x0,(%r8,%rsi,1)
lea    -0x1(%rax),%esi
cmp    $0x1,%eax
mov    %esi,%eax
jle    1779 <MultiNomialAliasSetTable+0x679>
mov    $0x0,%esi
mov    $0x0,%ebx
test   %edi,%edi
jle    1740 <MultiNomialAliasSetTable+0x640>
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpb   $0xff,(%r8,%rsi,1)
je     1713 <MultiNomialAliasSetTable+0x613>
add    $0x1,%rsi
cmp    %rsi,%r9
jne    1700 <MultiNomialAliasSetTable+0x600>
mov    %r9d,%esi
xor    %ebx,%ebx
test   %edi,%edi
jle    1740 <MultiNomialAliasSetTable+0x640>
nopl   0x0(%rax)
cmpb   $0x1,(%r8,%rbx,1)
je     1740 <MultiNomialAliasSetTable+0x640>
add    $0x1,%rbx
cmp    %rbx,%r9
jne    1720 <MultiNomialAliasSetTable+0x620>
jmp    1779 <MultiNomialAliasSetTable+0x679>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    %edi,%ebx
je     1779 <MultiNomialAliasSetTable+0x679>
mov    %esi,%esi
mov    %ebx,(%rcx,%rsi,4)
movapd %xmm0,%xmm1
subsd  (%rdx,%rsi,8),%xmm1
mov    %ebx,%ebx
movsd  (%rdx,%rbx,8),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rdx,%rbx,8)
ucomisd %xmm2,%xmm0
jbe    16d0 <MultiNomialAliasSetTable+0x5d0>
movb   $0xff,(%r8,%rbx,1)
add    $0x1,%eax
jmp    16d0 <MultiNomialAliasSetTable+0x5d0>
xor    %eax,%eax
pop    %rbx
pop    %r14
ret
xor    %r10d,%r10d
test   $0x1,%r11b
jne    1386 <MultiNomialAliasSetTable+0x286>
jmp    13a8 <MultiNomialAliasSetTable+0x2a8>
xorpd  %xmm0,%xmm0
xor    %r14d,%r14d
xorpd  %xmm1,%xmm1
test   $0x1,%r10b
jne    15fa <MultiNomialAliasSetTable+0x4fa>
jmp    169c <MultiNomialAliasSetTable+0x59c>

LLVM IR (-O0):
define i32 @MultiNomialAliasSetTable(i32 %0, double* %1, double* %2, i32* %3, double* %4) {
%6 = alloca i32
%7 = alloca double*
%8 = alloca double*
%9 = alloca i32*
%10 = alloca double*
%11 = alloca i8*
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
store i32 %0, i32* %6
store double* %1, double** %7
store double* %2, double** %8
store i32* %3, i32** %9
store double* %4, double** %10
%16 = load double*, double** %10
%17 = bitcast double* %16 to i8*
store i8* %17, i8** %11
store i32 0, i32* %12
br label %18
18: ; preds = %27, %5
%19 = load i32, i32* %12
%20 = load i32, i32* %6
%21 = icmp slt i32 %19, %20
br i1 %21, label %22, label %30
22: ; preds = %18
%23 = load i32*, i32** %9
%24 = load i32, i32* %12
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i32, i32* %23, i64 %25
store i32 -9, i32* %26
br label %27
27: ; preds = %22
%28 = load i32, i32* %12
%29 = add nsw i32 %28, 1
store i32 %29, i32* %12
br label %18
30: ; preds = %18
store i32 0, i32* %12
br label %31
31: ; preds = %48, %30
%32 = load i32, i32* %12
%33 = load i32, i32* %6
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %51
35: ; preds = %31
%36 = load i32, i32* %6
%37 = sitofp i32 %36 to double
%38 = load double*, double** %7
%39 = load i32, i32* %12
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds double, double* %38, i64 %40
%42 = load double, double* %41
%43 = fmul double %37, %42
%44 = load double*, double** %8
%45 = load i32, i32* %12
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds double, double* %44, i64 %46
store double %43, double* %47
br label %48
48: ; preds = %35
%49 = load i32, i32* %12
%50 = add nsw i32 %49, 1
store i32 %50, i32* %12
br label %31
51: ; preds = %31
store i32 0, i32* %12
store i32 0, i32* %15
br label %52
52: ; preds = %76, %51
%53 = load i32, i32* %12
%54 = load i32, i32* %6
%55 = icmp slt i32 %53, %54
br i1 %55, label %56, label %79
56: ; preds = %52
%57 = load double*, double** %8
%58 = load i32, i32* %12
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds double, double* %57, i64 %59
%61 = load double, double* %60
%62 = fcmp oge double %61, 1.000000e+00
br i1 %62, label %63, label %68
63: ; preds = %56
%64 = load i8*, i8** %11
%65 = load i32, i32* %12
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %64, i64 %66
store i8 1, i8* %67
br label %75
68: ; preds = %56
%69 = load i8*, i8** %11
%70 = load i32, i32* %12
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8, i8* %69, i64 %71
store i8 -1, i8* %72
%73 = load i32, i32* %15
%74 = add nsw i32 %73, 1
store i32 %74, i32* %15
br label %75
75: ; preds = %68, %63
br label %76
76: ; preds = %75
%77 = load i32, i32* %12
%78 = add nsw i32 %77, 1
store i32 %78, i32* %12
br label %52
79: ; preds = %52
store i32 0, i32* %12
br label %80
80: ; preds = %162, %79
%81 = load i32, i32* %15
%82 = icmp sgt i32 %81, 0
br i1 %82, label %83, label %165
83: ; preds = %80
store i32 0, i32* %13
br label %84
84: ; preds = %98, %83
%85 = load i32, i32* %13
%86 = load i32, i32* %6
%87 = icmp slt i32 %85, %86
br i1 %87, label %88, label %101
88: ; preds = %84
%89 = load i8*, i8** %11
%90 = load i32, i32* %13
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %89, i64 %91
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, -1
br i1 %95, label %96, label %97
96: ; preds = %88
br label %101
97: ; preds = %88
br label %98
98: ; preds = %97
%99 = load i32, i32* %13
%100 = add nsw i32 %99, 1
store i32 %100, i32* %13
br label %84
101: ; preds = %96, %84
store i32 0, i32* %14
br label %102
102: ; preds = %116, %101
%103 = load i32, i32* %14
%104 = load i32, i32* %6
%105 = icmp slt i32 %103, %104
br i1 %105, label %106, label %119
106: ; preds = %102
%107 = load i8*, i8** %11
%108 = load i32, i32* %14
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds i8, i8* %107, i64 %109
%111 = load i8, i8* %110
%112 = sext i8 %111 to i32
%113 = icmp eq i32 %112, 1
br i1 %113, label %114, label %115
114: ; preds = %106
br label %119
115: ; preds = %106
br label %116
116: ; preds = %115
%117 = load i32, i32* %14
%118 = add nsw i32 %117, 1
store i32 %118, i32* %14
br label %102
119: ; preds = %114, %102
%120 = load i32, i32* %14
%121 = load i32, i32* %6
%122 = icmp eq i32 %120, %121
br i1 %122, label %123, label %124
123: ; preds = %119
br label %165
124: ; preds = %119
%125 = load i32, i32* %14
%126 = load i32*, i32** %9
%127 = load i32, i32* %13
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i32, i32* %126, i64 %128
store i32 %125, i32* %129
%130 = load double*, double** %8
%131 = load i32, i32* %13
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds double, double* %130, i64 %132
%134 = load double, double* %133
%135 = fsub double 1.000000e+00, %134
%136 = load double*, double** %8
%137 = load i32, i32* %14
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds double, double* %136, i64 %138
%140 = load double, double* %139
%141 = fsub double %140, %135
store double %141, double* %139
%142 = load double*, double** %8
%143 = load i32, i32* %14
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds double, double* %142, i64 %144
%146 = load double, double* %145
%147 = fcmp olt double %146, 1.000000e+00
br i1 %147, label %148, label %155
148: ; preds = %124
%149 = load i8*, i8** %11
%150 = load i32, i32* %14
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds i8, i8* %149, i64 %151
store i8 -1, i8* %152
%153 = load i32, i32* %15
%154 = add nsw i32 %153, 1
store i32 %154, i32* %15
br label %155
155: ; preds = %148, %124
%156 = load i8*, i8** %11
%157 = load i32, i32* %13
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8, i8* %156, i64 %158
store i8 0, i8* %159
%160 = load i32, i32* %15
%161 = add nsw i32 %160, -1
store i32 %161, i32* %15
br label %162
162: ; preds = %155
%163 = load i32, i32* %12
%164 = add nsw i32 %163, 1
store i32 %164, i32* %12
br label %80
165: ; preds = %123, %80
ret i32 0
}

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