void nibble_sort_rosen(unsigned long *pv) {
  unsigned char c[16] = {};
  for (unsigned long *e = pv + 1024; pv != e; ++pv) {
    register unsigned long v = *pv;
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    {
      ++c[v & 15];
      v >>= 4;
    }
    while (c[15]) {
      v = (v << 4) | 15;
      --c[15];
    }
    while (c[14]) {
      v = (v << 4) | 14;
      --c[14];
    }
    while (c[13]) {
      v = (v << 4) | 13;
      --c[13];
    }
    while (c[12]) {
      v = (v << 4) | 12;
      --c[12];
    }
    while (c[11]) {
      v = (v << 4) | 11;
      --c[11];
    }
    while (c[10]) {
      v = (v << 4) | 10;
      --c[10];
    }
    while (c[9]) {
      v = (v << 4) | 9;
      --c[9];
    }
    while (c[8]) {
      v = (v << 4) | 8;
      --c[8];
    }
    while (c[7]) {
      v = (v << 4) | 7;
      --c[7];
    }
    while (c[6]) {
      v = (v << 4) | 6;
      --c[6];
    }
    while (c[5]) {
      v = (v << 4) | 5;
      --c[5];
    }
    while (c[4]) {
      v = (v << 4) | 4;
      --c[4];
    }
    while (c[3]) {
      v = (v << 4) | 3;
      --c[3];
    }
    while (c[2]) {
      v = (v << 4) | 2;
      --c[2];
    }
    while (c[1]) {
      v = (v << 4) | 1;
      --c[1];
    }
    while (c[0]) {
      v = (v << 4) | 0;
      --c[0];
    };
    *pv = v;
  }
}


x86 assembly (clang, -O0):
<nibble_sort_rosen>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
lea    -0x20(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1030 <memset@plt>
mov    -0x8(%rbp),%rax
add    $0x2000,%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
cmp    -0x28(%rbp),%rax
je     161a <nibble_sort_rosen+0x50a>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    -0x20(%rbp,%rax,1),%cl
add    $0x1,%cl
mov    %cl,-0x20(%rbp,%rax,1)
mov    -0x30(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x30(%rbp)
cmpb   $0x0,-0x11(%rbp)
je     136a <nibble_sort_rosen+0x25a>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0xf,%rax
mov    %rax,-0x30(%rbp)
mov    -0x11(%rbp),%al
add    $0xff,%al
mov    %al,-0x11(%rbp)
jmp    1343 <nibble_sort_rosen+0x233>
jmp    136f <nibble_sort_rosen+0x25f>
cmpb   $0x0,-0x12(%rbp)
je     1396 <nibble_sort_rosen+0x286>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0xe,%rax
mov    %rax,-0x30(%rbp)
mov    -0x12(%rbp),%al
add    $0xff,%al
mov    %al,-0x12(%rbp)
jmp    136f <nibble_sort_rosen+0x25f>
jmp    139b <nibble_sort_rosen+0x28b>
cmpb   $0x0,-0x13(%rbp)
je     13c2 <nibble_sort_rosen+0x2b2>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0xd,%rax
mov    %rax,-0x30(%rbp)
mov    -0x13(%rbp),%al
add    $0xff,%al
mov    %al,-0x13(%rbp)
jmp    139b <nibble_sort_rosen+0x28b>
jmp    13c7 <nibble_sort_rosen+0x2b7>
cmpb   $0x0,-0x14(%rbp)
je     13ee <nibble_sort_rosen+0x2de>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0xc,%rax
mov    %rax,-0x30(%rbp)
mov    -0x14(%rbp),%al
add    $0xff,%al
mov    %al,-0x14(%rbp)
jmp    13c7 <nibble_sort_rosen+0x2b7>
jmp    13f3 <nibble_sort_rosen+0x2e3>
cmpb   $0x0,-0x15(%rbp)
je     141a <nibble_sort_rosen+0x30a>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0xb,%rax
mov    %rax,-0x30(%rbp)
mov    -0x15(%rbp),%al
add    $0xff,%al
mov    %al,-0x15(%rbp)
jmp    13f3 <nibble_sort_rosen+0x2e3>
jmp    141f <nibble_sort_rosen+0x30f>
cmpb   $0x0,-0x16(%rbp)
je     1446 <nibble_sort_rosen+0x336>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0xa,%rax
mov    %rax,-0x30(%rbp)
mov    -0x16(%rbp),%al
add    $0xff,%al
mov    %al,-0x16(%rbp)
jmp    141f <nibble_sort_rosen+0x30f>
jmp    144b <nibble_sort_rosen+0x33b>
cmpb   $0x0,-0x17(%rbp)
je     1472 <nibble_sort_rosen+0x362>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x9,%rax
mov    %rax,-0x30(%rbp)
mov    -0x17(%rbp),%al
add    $0xff,%al
mov    %al,-0x17(%rbp)
jmp    144b <nibble_sort_rosen+0x33b>
jmp    1477 <nibble_sort_rosen+0x367>
cmpb   $0x0,-0x18(%rbp)
je     149e <nibble_sort_rosen+0x38e>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%al
add    $0xff,%al
mov    %al,-0x18(%rbp)
jmp    1477 <nibble_sort_rosen+0x367>
jmp    14a3 <nibble_sort_rosen+0x393>
cmpb   $0x0,-0x19(%rbp)
je     14ca <nibble_sort_rosen+0x3ba>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x7,%rax
mov    %rax,-0x30(%rbp)
mov    -0x19(%rbp),%al
add    $0xff,%al
mov    %al,-0x19(%rbp)
jmp    14a3 <nibble_sort_rosen+0x393>
jmp    14cf <nibble_sort_rosen+0x3bf>
cmpb   $0x0,-0x1a(%rbp)
je     14f6 <nibble_sort_rosen+0x3e6>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x6,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1a(%rbp),%al
add    $0xff,%al
mov    %al,-0x1a(%rbp)
jmp    14cf <nibble_sort_rosen+0x3bf>
jmp    14fb <nibble_sort_rosen+0x3eb>
cmpb   $0x0,-0x1b(%rbp)
je     1522 <nibble_sort_rosen+0x412>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x5,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1b(%rbp),%al
add    $0xff,%al
mov    %al,-0x1b(%rbp)
jmp    14fb <nibble_sort_rosen+0x3eb>
jmp    1527 <nibble_sort_rosen+0x417>
cmpb   $0x0,-0x1c(%rbp)
je     154e <nibble_sort_rosen+0x43e>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x4,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1c(%rbp),%al
add    $0xff,%al
mov    %al,-0x1c(%rbp)
jmp    1527 <nibble_sort_rosen+0x417>
jmp    1553 <nibble_sort_rosen+0x443>
cmpb   $0x0,-0x1d(%rbp)
je     157a <nibble_sort_rosen+0x46a>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x3,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1d(%rbp),%al
add    $0xff,%al
mov    %al,-0x1d(%rbp)
jmp    1553 <nibble_sort_rosen+0x443>
jmp    157f <nibble_sort_rosen+0x46f>
cmpb   $0x0,-0x1e(%rbp)
je     15a6 <nibble_sort_rosen+0x496>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1e(%rbp),%al
add    $0xff,%al
mov    %al,-0x1e(%rbp)
jmp    157f <nibble_sort_rosen+0x46f>
jmp    15ab <nibble_sort_rosen+0x49b>
cmpb   $0x0,-0x1f(%rbp)
je     15d2 <nibble_sort_rosen+0x4c2>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1f(%rbp),%al
add    $0xff,%al
mov    %al,-0x1f(%rbp)
jmp    15ab <nibble_sort_rosen+0x49b>
jmp    15d7 <nibble_sort_rosen+0x4c7>
cmpb   $0x0,-0x20(%rbp)
je     15fe <nibble_sort_rosen+0x4ee>
mov    -0x30(%rbp),%rax
shl    $0x4,%rax
or     $0x0,%rax
mov    %rax,-0x30(%rbp)
mov    -0x20(%rbp),%al
add    $0xff,%al
mov    %al,-0x20(%rbp)
jmp    15d7 <nibble_sort_rosen+0x4c7>
mov    -0x30(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x8(%rbp)
jmp    113a <nibble_sort_rosen+0x2a>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nibble_sort_rosen>:
mov    $0x88888888,%r10d
xorps  %xmm0,%xmm0
movaps %xmm0,-0x18(%rsp)
xor    %r8d,%r8d
jmp    113a <nibble_sort_rosen+0x3a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movb   $0x0,-0x18(%rsp)
mov    %rdx,(%rdi,%r8,8)
add    $0x1,%r8
cmp    $0x400,%r8
je     178f <nibble_sort_rosen+0x68f>
mov    (%rdi,%r8,8),%rdx
mov    %edx,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0x4,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0x8,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0xc,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0x10,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0x14,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0x18,%eax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %edx,%eax
shr    $0x1c,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x20,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x24,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x28,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x2c,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x30,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x34,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
mov    %rdx,%rax
shr    $0x38,%rax
and    $0xf,%eax
addb   $0x1,-0x18(%rsp,%rax,1)
shr    $0x3c,%rdx
addb   $0x1,-0x18(%rsp,%rdx,1)
mov    -0x9(%rsp),%sil
test   %sil,%sil
je     1230 <nibble_sort_rosen+0x130>
lea    -0x1(%rsi),%eax
mov    %esi,%ecx
and    $0x7,%cl
cmp    $0x7,%al
jae    1240 <nibble_sort_rosen+0x140>
xor    %edx,%edx
jmp    1267 <nibble_sort_rosen+0x167>
nopl   0x0(%rax)
xor    %edx,%edx
jmp    1282 <nibble_sort_rosen+0x182>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
and    $0xf8,%sil
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x77777777(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    1250 <nibble_sort_rosen+0x150>
test   %cl,%cl
je     127d <nibble_sort_rosen+0x17d>
nopl   0x0(%rax,%rax,1)
shl    $0x4,%rdx
or     $0xf,%rdx
add    $0xff,%cl
jne    1270 <nibble_sort_rosen+0x170>
movb   $0x0,-0x9(%rsp)
mov    -0xa(%rsp),%sil
test   %sil,%sil
je     12dc <nibble_sort_rosen+0x1dc>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     12b1 <nibble_sort_rosen+0x1b1>
xor    %eax,%eax
nopl   0x0(%rax)
shl    $0x4,%rdx
or     $0xe,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    12a0 <nibble_sort_rosen+0x1a0>
sub    %al,%sil
mov    %rdx,%rax
cmp    $0x7,%r9b
jb     12d7 <nibble_sort_rosen+0x1d7>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x66666666(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    12c0 <nibble_sort_rosen+0x1c0>
movb   $0x0,-0xa(%rsp)
mov    -0xb(%rsp),%sil
test   %sil,%sil
je     133c <nibble_sort_rosen+0x23c>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1311 <nibble_sort_rosen+0x211>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
shl    $0x4,%rdx
or     $0xd,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1300 <nibble_sort_rosen+0x200>
sub    %al,%sil
mov    %rdx,%rax
cmp    $0x7,%r9b
jb     1337 <nibble_sort_rosen+0x237>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x55555555(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    1320 <nibble_sort_rosen+0x220>
movb   $0x0,-0xb(%rsp)
mov    -0xc(%rsp),%sil
test   %sil,%sil
je     139c <nibble_sort_rosen+0x29c>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1371 <nibble_sort_rosen+0x271>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
shl    $0x4,%rdx
or     $0xc,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1360 <nibble_sort_rosen+0x260>
sub    %al,%sil
mov    %rdx,%rax
cmp    $0x7,%r9b
jb     1397 <nibble_sort_rosen+0x297>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x44444444(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    1380 <nibble_sort_rosen+0x280>
movb   $0x0,-0xc(%rsp)
mov    -0xd(%rsp),%sil
test   %sil,%sil
je     13fc <nibble_sort_rosen+0x2fc>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     13d1 <nibble_sort_rosen+0x2d1>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
shl    $0x4,%rdx
or     $0xb,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    13c0 <nibble_sort_rosen+0x2c0>
sub    %al,%sil
mov    %rdx,%rax
cmp    $0x7,%r9b
jb     13f7 <nibble_sort_rosen+0x2f7>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x33333333(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    13e0 <nibble_sort_rosen+0x2e0>
movb   $0x0,-0xd(%rsp)
mov    -0xe(%rsp),%sil
test   %sil,%sil
je     145c <nibble_sort_rosen+0x35c>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1431 <nibble_sort_rosen+0x331>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
shl    $0x4,%rdx
or     $0xa,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1420 <nibble_sort_rosen+0x320>
sub    %al,%sil
mov    %rdx,%rax
cmp    $0x7,%r9b
jb     1457 <nibble_sort_rosen+0x357>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x22222222(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    1440 <nibble_sort_rosen+0x340>
movb   $0x0,-0xe(%rsp)
mov    -0xf(%rsp),%sil
test   %sil,%sil
je     14bc <nibble_sort_rosen+0x3bc>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1491 <nibble_sort_rosen+0x391>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
shl    $0x4,%rdx
or     $0x9,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1480 <nibble_sort_rosen+0x380>
sub    %al,%sil
mov    %rdx,%rax
cmp    $0x7,%r9b
jb     14b7 <nibble_sort_rosen+0x3b7>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rax
lea    0x11111111(%r10),%rdx
or     %rax,%rdx
mov    %rdx,%rax
add    $0xf8,%sil
jne    14a0 <nibble_sort_rosen+0x3a0>
movb   $0x0,-0xf(%rsp)
mov    -0x10(%rsp),%sil
test   %sil,%sil
je     1512 <nibble_sort_rosen+0x412>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     14f1 <nibble_sort_rosen+0x3f1>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
shl    $0x4,%rdx
or     $0x8,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    14e0 <nibble_sort_rosen+0x3e0>
sub    %al,%sil
cmp    $0x7,%r9b
jb     150d <nibble_sort_rosen+0x40d>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     %r10,%rdx
add    $0xf8,%sil
jne    1500 <nibble_sort_rosen+0x400>
movb   $0x0,-0x10(%rsp)
mov    -0x11(%rsp),%sil
test   %sil,%sil
je     1566 <nibble_sort_rosen+0x466>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1541 <nibble_sort_rosen+0x441>
xor    %eax,%eax
nopl   0x0(%rax)
shl    $0x4,%rdx
or     $0x7,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1530 <nibble_sort_rosen+0x430>
sub    %al,%sil
cmp    $0x7,%r9b
jb     1561 <nibble_sort_rosen+0x461>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x77777777,%rdx
add    $0xf8,%sil
jne    1550 <nibble_sort_rosen+0x450>
movb   $0x0,-0x11(%rsp)
mov    -0x12(%rsp),%sil
test   %sil,%sil
je     15b6 <nibble_sort_rosen+0x4b6>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1591 <nibble_sort_rosen+0x491>
xor    %eax,%eax
nopl   (%rax)
shl    $0x4,%rdx
or     $0x6,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1580 <nibble_sort_rosen+0x480>
sub    %al,%sil
cmp    $0x7,%r9b
jb     15b1 <nibble_sort_rosen+0x4b1>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x66666666,%rdx
add    $0xf8,%sil
jne    15a0 <nibble_sort_rosen+0x4a0>
movb   $0x0,-0x12(%rsp)
mov    -0x13(%rsp),%sil
test   %sil,%sil
je     1606 <nibble_sort_rosen+0x506>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     15e1 <nibble_sort_rosen+0x4e1>
xor    %eax,%eax
nopl   (%rax)
shl    $0x4,%rdx
or     $0x5,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    15d0 <nibble_sort_rosen+0x4d0>
sub    %al,%sil
cmp    $0x7,%r9b
jb     1601 <nibble_sort_rosen+0x501>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x55555555,%rdx
add    $0xf8,%sil
jne    15f0 <nibble_sort_rosen+0x4f0>
movb   $0x0,-0x13(%rsp)
mov    -0x14(%rsp),%sil
test   %sil,%sil
je     1656 <nibble_sort_rosen+0x556>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1631 <nibble_sort_rosen+0x531>
xor    %eax,%eax
nopl   (%rax)
shl    $0x4,%rdx
or     $0x4,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1620 <nibble_sort_rosen+0x520>
sub    %al,%sil
cmp    $0x7,%r9b
jb     1651 <nibble_sort_rosen+0x551>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x44444444,%rdx
add    $0xf8,%sil
jne    1640 <nibble_sort_rosen+0x540>
movb   $0x0,-0x14(%rsp)
mov    -0x15(%rsp),%sil
test   %sil,%sil
je     16a6 <nibble_sort_rosen+0x5a6>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1681 <nibble_sort_rosen+0x581>
xor    %eax,%eax
nopl   (%rax)
shl    $0x4,%rdx
or     $0x3,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1670 <nibble_sort_rosen+0x570>
sub    %al,%sil
cmp    $0x7,%r9b
jb     16a1 <nibble_sort_rosen+0x5a1>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x33333333,%rdx
add    $0xf8,%sil
jne    1690 <nibble_sort_rosen+0x590>
movb   $0x0,-0x15(%rsp)
mov    -0x16(%rsp),%sil
test   %sil,%sil
je     16f6 <nibble_sort_rosen+0x5f6>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     16d1 <nibble_sort_rosen+0x5d1>
xor    %eax,%eax
nopl   (%rax)
shl    $0x4,%rdx
or     $0x2,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    16c0 <nibble_sort_rosen+0x5c0>
sub    %al,%sil
cmp    $0x7,%r9b
jb     16f1 <nibble_sort_rosen+0x5f1>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x22222222,%rdx
add    $0xf8,%sil
jne    16e0 <nibble_sort_rosen+0x5e0>
movb   $0x0,-0x16(%rsp)
mov    -0x17(%rsp),%sil
test   %sil,%sil
je     1746 <nibble_sort_rosen+0x646>
lea    -0x1(%rsi),%r9d
mov    %esi,%ecx
and    $0x7,%cl
je     1721 <nibble_sort_rosen+0x621>
xor    %eax,%eax
nopl   (%rax)
shl    $0x4,%rdx
or     $0x1,%rdx
add    $0x1,%al
cmp    %al,%cl
jne    1710 <nibble_sort_rosen+0x610>
sub    %al,%sil
cmp    $0x7,%r9b
jb     1741 <nibble_sort_rosen+0x641>
nopw   0x0(%rax,%rax,1)
shl    $0x20,%rdx
or     $0x11111111,%rdx
add    $0xf8,%sil
jne    1730 <nibble_sort_rosen+0x630>
movb   $0x0,-0x17(%rsp)
mov    -0x18(%rsp),%sil
test   %sil,%sil
je     1125 <nibble_sort_rosen+0x25>
lea    -0x1(%rsi),%r9d
mov    %esi,%eax
and    $0x7,%al
je     176e <nibble_sort_rosen+0x66e>
xor    %ecx,%ecx
shl    $0x4,%rdx
add    $0x1,%cl
cmp    %cl,%al
jne    1760 <nibble_sort_rosen+0x660>
sub    %cl,%sil
cmp    $0x7,%r9b
jb     1120 <nibble_sort_rosen+0x20>
nopl   0x0(%rax,%rax,1)
shl    $0x20,%rdx
add    $0xf8,%sil
jne    1780 <nibble_sort_rosen+0x680>
jmp    1120 <nibble_sort_rosen+0x20>
ret

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

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