void __attribute__((target("arch=haswell")))
nibble_sort_alexander3(unsigned long *buf) {
  typedef unsigned long u64;
  typedef unsigned long u64v __attribute__((vector_size(32)));
  for (int i = 0; i < 1024; i += 4) {
    u64v ss, uu, vv = *(u64v *)(buf + i);
    ss = 1 << ((vv & 0xF) << 2);
    ss += 1 << ((vv >> 2) & 0x3C);
    ss += 1 << ((vv >> 6) & 0x3C);
    ss += 1 << ((vv >> 10) & 0x3C);
    ss += 1 << ((vv >> 14) & 0x3C);
    ss += 1 << ((vv >> 18) & 0x3C);
    ss += 1 << ((vv >> 22) & 0x3C);
    ss += 1 << ((vv >> 26) & 0x3C);
    ss += 1 << ((vv >> 30) & 0x3C);
    ss += 1 << ((vv >> 34) & 0x3C);
    ss += 1 << ((vv >> 38) & 0x3C);
    ss += 1 << ((vv >> 42) & 0x3C);
    ss += 1 << ((vv >> 46) & 0x3C);
    ss += 1 << ((vv >> 50) & 0x3C);
    ss += 1 << ((vv >> 54) & 0x3C);
    uu = 1 << ((vv >> 58) & 0x3C);
    ss += uu;
    uu = ss == (uu << 4);
    unsigned long m = 0x1111111111111111U;
    u64v ww, nn = (ss & 0xF) << 2, mm = {m, m, m, m};
    mm <<= nn;
    nn = (ss >> 2) & 0x3C;
    ww = mm;
    mm <<= nn;
    nn = (ss >> 6) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 10) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 14) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 18) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 22) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 26) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 30) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 34) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 38) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 42) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 46) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 50) & 0x3C;
    ww += mm;
    mm <<= nn;
    nn = (ss >> 54) & 0x3C;
    ww += mm;
    mm <<= nn;
    ww += mm;
    *(u64v *)(buf + i) = vv & uu | ww & ~uu;
  }
}


x86 assembly (clang, -O0):
<nibble_sort_alexander3>:
push   %rbp
mov    %rsp,%rbp
and    $0xffffffffffffffe0,%rsp
sub    $0x140,%rsp
mov    %rdi,0x128(%rsp)
movl   $0x0,0x124(%rsp)
cmpl   $0x400,0x124(%rsp)
jge    1945 <nibble_sort_alexander3+0x845>
mov    0x128(%rsp),%rax
movslq 0x124(%rsp),%rcx
vmovaps (%rax,%rcx,8),%ymm0
vmovaps %ymm0,0xc0(%rsp)
vmovaps 0xc0(%rsp),%ymm0
vpbroadcastq 0xe9d(%rip),%ymm2
vpand  %ymm2,%ymm0,%ymm0
vpsllq $0x2,%ymm0,%ymm1
vpbroadcastq 0xe93(%rip),%ymm0
vmovaps %ymm0,(%rsp)
vpsllvq %ymm1,%ymm0,%ymm1
vmovaps %ymm1,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm1
vpsrlq $0x2,%ymm1,%ymm3
vpbroadcastq 0xe71(%rip),%ymm1
vmovaps %ymm1,0x20(%rsp)
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x6,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0xa,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0xe,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x12,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x16,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x1a,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x1e,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x22,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x26,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x2a,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x2e,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x32,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x36,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm4
vmovaps 0x100(%rsp),%ymm3
vpaddq %ymm4,%ymm3,%ymm3
vmovaps %ymm3,0x100(%rsp)
vmovaps 0xc0(%rsp),%ymm3
vpsrlq $0x3a,%ymm3,%ymm3
vpand  %ymm1,%ymm3,%ymm3
vpsllvq %ymm3,%ymm0,%ymm0
vmovaps %ymm0,0xe0(%rsp)
vmovaps 0xe0(%rsp),%ymm3
vmovaps 0x100(%rsp),%ymm0
vpaddq %ymm3,%ymm0,%ymm0
vmovaps %ymm0,0x100(%rsp)
vmovaps 0x100(%rsp),%ymm0
vmovaps 0xe0(%rsp),%ymm3
vpsllq $0x4,%ymm3,%ymm3
vpcmpeqq %ymm3,%ymm0,%ymm0
vmovaps %ymm0,0xe0(%rsp)
movabs $0x1111111111111111,%rax
11 11 11
mov    %rax,0xb8(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpand  %ymm2,%ymm0,%ymm0
vpsllq $0x2,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vpbroadcastq 0xb8(%rsp),%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x2,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x6,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0xa,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0xe,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x12,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x16,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x1a,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x1e,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x22,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x26,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x2a,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x2e,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x32,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm2
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm2
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm2,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x100(%rsp),%ymm0
vpsrlq $0x36,%ymm0,%ymm0
vpand  %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x60(%rsp)
vmovaps 0x40(%rsp),%ymm1
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0x60(%rsp),%ymm1
vmovaps 0x40(%rsp),%ymm0
vpsllvq %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x40(%rsp)
vmovaps 0x40(%rsp),%ymm1
vmovaps 0x80(%rsp),%ymm0
vpaddq %ymm1,%ymm0,%ymm0
vmovaps %ymm0,0x80(%rsp)
vmovaps 0xc0(%rsp),%ymm0
vmovaps 0xe0(%rsp),%ymm2
vpand  %ymm2,%ymm0,%ymm0
vmovaps 0x80(%rsp),%ymm1
vpcmpeqd %ymm3,%ymm3,%ymm3
vpxor  %ymm3,%ymm2,%ymm2
vpand  %ymm2,%ymm1,%ymm1
vpor   %ymm1,%ymm0,%ymm0
mov    0x128(%rsp),%rax
movslq 0x124(%rsp),%rcx
vmovdqa %ymm0,(%rax,%rcx,8)
mov    0x124(%rsp),%eax
add    $0x4,%eax
mov    %eax,0x124(%rsp)
jmp    1122 <nibble_sort_alexander3+0x22>
mov    %rbp,%rsp
pop    %rbp
vzeroupper
ret

x86 assembly (clang, -O2):
<nibble_sort_alexander3>:
mov    $0xfffffffffffffffc,%rax
vpbroadcastq 0xef0(%rip),%ymm0
vpbroadcastq 0xeef(%rip),%ymm1
vpbroadcastq 0xeee(%rip),%ymm2
data16 data16 data16 data16 cs nopw 0x0(%rax,%rax,1)
vmovdqa 0x20(%rdi,%rax,8),%ymm3
vpsllq $0x2,%ymm3,%ymm4
vpand  %ymm0,%ymm4,%ymm4
vpsllvq %ymm4,%ymm1,%ymm4
vpsrlq $0x2,%ymm3,%ymm5
vpand  %ymm0,%ymm5,%ymm5
vpsllvq %ymm5,%ymm1,%ymm5
vpaddq %ymm5,%ymm4,%ymm4
vpsrlq $0x6,%ymm3,%ymm5
vpand  %ymm0,%ymm5,%ymm5
vpsllvq %ymm5,%ymm1,%ymm5
vpsrlq $0xa,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpaddq %ymm5,%ymm4,%ymm4
vpsrlq $0xe,%ymm3,%ymm5
vpand  %ymm0,%ymm5,%ymm5
vpsllvq %ymm5,%ymm1,%ymm5
vpsrlq $0x12,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpsrlq $0x16,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpaddq %ymm5,%ymm4,%ymm4
vpsrlq $0x1a,%ymm3,%ymm5
vpand  %ymm0,%ymm5,%ymm5
vpsllvq %ymm5,%ymm1,%ymm5
vpsrlq $0x1e,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpsrlq $0x22,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpsrlq $0x26,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpaddq %ymm5,%ymm4,%ymm4
vpsrlq $0x2a,%ymm3,%ymm5
vpand  %ymm0,%ymm5,%ymm5
vpsllvq %ymm5,%ymm1,%ymm5
vpsrlq $0x2e,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpsrlq $0x32,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpsrlq $0x36,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpsrlq $0x3a,%ymm3,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm1,%ymm6
vpaddq %ymm6,%ymm5,%ymm5
vpaddq %ymm5,%ymm4,%ymm5
vpsllq $0x4,%ymm6,%ymm4
vpcmpeqq %ymm4,%ymm5,%ymm4
vpsllq $0x2,%ymm5,%ymm6
vpand  %ymm0,%ymm6,%ymm6
vpsllvq %ymm6,%ymm2,%ymm6
vpsrlq $0x2,%ymm5,%ymm7
vpand  %ymm0,%ymm7,%ymm7
vpsllvq %ymm7,%ymm6,%ymm7
vpsrlq $0x6,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm6,%ymm7,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0xa,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0xe,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x12,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x16,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x1a,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x1e,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x22,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x26,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x2a,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x2e,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x32,%ymm5,%ymm8
vpand  %ymm0,%ymm8,%ymm8
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm8,%ymm7,%ymm7
vpsrlq $0x36,%ymm5,%ymm5
vpand  %ymm0,%ymm5,%ymm5
vpaddq %ymm7,%ymm6,%ymm6
vpsllvq %ymm5,%ymm7,%ymm5
vpaddq %ymm5,%ymm6,%ymm5
vblendvpd %ymm4,%ymm3,%ymm5,%ymm3
vmovapd %ymm3,0x20(%rdi,%rax,8)
add    $0x4,%rax
cmp    $0x3fc,%rax
jb     1130 <nibble_sort_alexander3+0x30>
vzeroupper
ret

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

LLVM IR (-O2):
define void @nibble_sort_alexander3(i64* nocapture %0) {
br label %3
2: ; preds = %3
ret void
3: ; preds = %1, %3
%4 = phi i64 [ 0, %1 ], [ %133, %3 ]
%5 = getelementptr inbounds i64, i64* %0, i64 %4
%6 = bitcast i64* %5 to <4 x i64>*
%7 = load <4 x i64>, <4 x i64>* %6
%8 = shl <4 x i64> %7, <i64 2, i64 2, i64 2, i64 2>
%9 = and <4 x i64> %8, <i64 60, i64 60, i64 60, i64 60>
%10 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %9
%11 = lshr <4 x i64> %7, <i64 2, i64 2, i64 2, i64 2>
%12 = and <4 x i64> %11, <i64 60, i64 60, i64 60, i64 60>
%13 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %12
%14 = add nuw nsw <4 x i64> %10, %13
%15 = lshr <4 x i64> %7, <i64 6, i64 6, i64 6, i64 6>
%16 = and <4 x i64> %15, <i64 60, i64 60, i64 60, i64 60>
%17 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %16
%18 = add nuw nsw <4 x i64> %14, %17
%19 = lshr <4 x i64> %7, <i64 10, i64 10, i64 10, i64 10>
%20 = and <4 x i64> %19, <i64 60, i64 60, i64 60, i64 60>
%21 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %20
%22 = add nuw <4 x i64> %18, %21
%23 = lshr <4 x i64> %7, <i64 14, i64 14, i64 14, i64 14>
%24 = and <4 x i64> %23, <i64 60, i64 60, i64 60, i64 60>
%25 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %24
%26 = add <4 x i64> %22, %25
%27 = lshr <4 x i64> %7, <i64 18, i64 18, i64 18, i64 18>
%28 = and <4 x i64> %27, <i64 60, i64 60, i64 60, i64 60>
%29 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %28
%30 = add <4 x i64> %26, %29
%31 = lshr <4 x i64> %7, <i64 22, i64 22, i64 22, i64 22>
%32 = and <4 x i64> %31, <i64 60, i64 60, i64 60, i64 60>
%33 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %32
%34 = add <4 x i64> %30, %33
%35 = lshr <4 x i64> %7, <i64 26, i64 26, i64 26, i64 26>
%36 = and <4 x i64> %35, <i64 60, i64 60, i64 60, i64 60>
%37 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %36
%38 = add <4 x i64> %34, %37
%39 = lshr <4 x i64> %7, <i64 30, i64 30, i64 30, i64 30>
%40 = and <4 x i64> %39, <i64 60, i64 60, i64 60, i64 60>
%41 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %40
%42 = add <4 x i64> %38, %41
%43 = lshr <4 x i64> %7, <i64 34, i64 34, i64 34, i64 34>
%44 = and <4 x i64> %43, <i64 60, i64 60, i64 60, i64 60>
%45 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %44
%46 = add <4 x i64> %42, %45
%47 = lshr <4 x i64> %7, <i64 38, i64 38, i64 38, i64 38>
%48 = and <4 x i64> %47, <i64 60, i64 60, i64 60, i64 60>
%49 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %48
%50 = add <4 x i64> %46, %49
%51 = lshr <4 x i64> %7, <i64 42, i64 42, i64 42, i64 42>
%52 = and <4 x i64> %51, <i64 60, i64 60, i64 60, i64 60>
%53 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %52
%54 = add <4 x i64> %50, %53
%55 = lshr <4 x i64> %7, <i64 46, i64 46, i64 46, i64 46>
%56 = and <4 x i64> %55, <i64 60, i64 60, i64 60, i64 60>
%57 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %56
%58 = add <4 x i64> %54, %57
%59 = lshr <4 x i64> %7, <i64 50, i64 50, i64 50, i64 50>
%60 = and <4 x i64> %59, <i64 60, i64 60, i64 60, i64 60>
%61 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %60
%62 = add <4 x i64> %58, %61
%63 = lshr <4 x i64> %7, <i64 54, i64 54, i64 54, i64 54>
%64 = and <4 x i64> %63, <i64 60, i64 60, i64 60, i64 60>
%65 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %64
%66 = add <4 x i64> %62, %65
%67 = lshr <4 x i64> %7, <i64 58, i64 58, i64 58, i64 58>
%68 = and <4 x i64> %67, <i64 60, i64 60, i64 60, i64 60>
%69 = shl <4 x i64> <i64 1, i64 1, i64 1, i64 1>, %68
%70 = add <4 x i64> %66, %69
%71 = shl <4 x i64> %69, <i64 4, i64 4, i64 4, i64 4>
%72 = icmp eq <4 x i64> %70, %71
%73 = shl <4 x i64> %70, <i64 2, i64 2, i64 2, i64 2>
%74 = and <4 x i64> %73, <i64 60, i64 60, i64 60, i64 60>
%75 = shl <4 x i64> <i64 1229782938247303441, i64 1229782938247303441, i64 1229782938247303441, i64 1229782938247303441>, %74
%76 = lshr <4 x i64> %70, <i64 2, i64 2, i64 2, i64 2>
%77 = and <4 x i64> %76, <i64 60, i64 60, i64 60, i64 60>
%78 = shl <4 x i64> %75, %77
%79 = lshr <4 x i64> %70, <i64 6, i64 6, i64 6, i64 6>
%80 = and <4 x i64> %79, <i64 60, i64 60, i64 60, i64 60>
%81 = add nuw nsw <4 x i64> %78, %75
%82 = shl <4 x i64> %78, %80
%83 = lshr <4 x i64> %70, <i64 10, i64 10, i64 10, i64 10>
%84 = and <4 x i64> %83, <i64 60, i64 60, i64 60, i64 60>
%85 = add nuw nsw <4 x i64> %81, %82
%86 = shl <4 x i64> %82, %84
%87 = lshr <4 x i64> %70, <i64 14, i64 14, i64 14, i64 14>
%88 = and <4 x i64> %87, <i64 60, i64 60, i64 60, i64 60>
%89 = add nuw <4 x i64> %85, %86
%90 = shl <4 x i64> %86, %88
%91 = lshr <4 x i64> %70, <i64 18, i64 18, i64 18, i64 18>
%92 = and <4 x i64> %91, <i64 60, i64 60, i64 60, i64 60>
%93 = add <4 x i64> %89, %90
%94 = shl <4 x i64> %90, %92
%95 = lshr <4 x i64> %70, <i64 22, i64 22, i64 22, i64 22>
%96 = and <4 x i64> %95, <i64 60, i64 60, i64 60, i64 60>
%97 = add <4 x i64> %93, %94
%98 = shl <4 x i64> %94, %96
%99 = lshr <4 x i64> %70, <i64 26, i64 26, i64 26, i64 26>
%100 = and <4 x i64> %99, <i64 60, i64 60, i64 60, i64 60>
%101 = add <4 x i64> %97, %98
%102 = shl <4 x i64> %98, %100
%103 = lshr <4 x i64> %70, <i64 30, i64 30, i64 30, i64 30>
%104 = and <4 x i64> %103, <i64 60, i64 60, i64 60, i64 60>
%105 = add <4 x i64> %101, %102
%106 = shl <4 x i64> %102, %104
%107 = lshr <4 x i64> %70, <i64 34, i64 34, i64 34, i64 34>
%108 = and <4 x i64> %107, <i64 60, i64 60, i64 60, i64 60>
%109 = add <4 x i64> %105, %106
%110 = shl <4 x i64> %106, %108
%111 = lshr <4 x i64> %70, <i64 38, i64 38, i64 38, i64 38>
%112 = and <4 x i64> %111, <i64 60, i64 60, i64 60, i64 60>
%113 = add <4 x i64> %109, %110
%114 = shl <4 x i64> %110, %112
%115 = lshr <4 x i64> %70, <i64 42, i64 42, i64 42, i64 42>
%116 = and <4 x i64> %115, <i64 60, i64 60, i64 60, i64 60>
%117 = add <4 x i64> %113, %114
%118 = shl <4 x i64> %114, %116
%119 = lshr <4 x i64> %70, <i64 46, i64 46, i64 46, i64 46>
%120 = and <4 x i64> %119, <i64 60, i64 60, i64 60, i64 60>
%121 = add <4 x i64> %117, %118
%122 = shl <4 x i64> %118, %120
%123 = lshr <4 x i64> %70, <i64 50, i64 50, i64 50, i64 50>
%124 = and <4 x i64> %123, <i64 60, i64 60, i64 60, i64 60>
%125 = add <4 x i64> %121, %122
%126 = shl <4 x i64> %122, %124
%127 = lshr <4 x i64> %70, <i64 54, i64 54, i64 54, i64 54>
%128 = and <4 x i64> %127, <i64 60, i64 60, i64 60, i64 60>
%129 = add <4 x i64> %125, %126
%130 = shl <4 x i64> %126, %128
%131 = add <4 x i64> %129, %130
%132 = select <4 x i1> %72, <4 x i64> %7, <4 x i64> %131
store <4 x i64> %132, <4 x i64>* %6
%133 = add nuw nsw i64 %4, 4
%134 = icmp ult i64 %4, 1020
br i1 %134, label %3, label %2
}