#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef unsigned long long uint64_t;

/* Variables and functions */
uint64_t bmask(int sq) {
  uint64_t result = 0ULL;
  int rk = sq / 8, fl = sq % 8, r, f;
  for (r = rk + 1, f = fl + 1; r <= 6 && f <= 6; r++, f++)
    result |= (1ULL << (f + r * 8));
  for (r = rk + 1, f = fl - 1; r <= 6 && f >= 1; r++, f--)
    result |= (1ULL << (f + r * 8));
  for (r = rk - 1, f = fl + 1; r >= 1 && f <= 6; r--, f++)
    result |= (1ULL << (f + r * 8));
  for (r = rk - 1, f = fl - 1; r >= 1 && f >= 1; r--, f--)
    result |= (1ULL << (f + r * 8));
  return result;
}


x86 assembly (clang, -O0):
<bmask>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movq   $0x0,-0x10(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x6,-0x1c(%rbp)
mov    %al,-0x21(%rbp)
jg     1156 <bmask+0x56>
cmpl   $0x6,-0x20(%rbp)
setle  %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    1166 <bmask+0x66>
jmp    119c <bmask+0x9c>
mov    -0x20(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%rax
or     -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    113d <bmask+0x3d>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x6,-0x1c(%rbp)
mov    %al,-0x22(%rbp)
jg     11c7 <bmask+0xc7>
cmpl   $0x1,-0x20(%rbp)
setge  %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
test   $0x1,%al
jne    11d7 <bmask+0xd7>
jmp    120d <bmask+0x10d>
mov    -0x20(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%rax
or     -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    11ae <bmask+0xae>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x1,-0x1c(%rbp)
mov    %al,-0x23(%rbp)
jl     1238 <bmask+0x138>
cmpl   $0x6,-0x20(%rbp)
setle  %al
mov    %al,-0x23(%rbp)
mov    -0x23(%rbp),%al
test   $0x1,%al
jne    1248 <bmask+0x148>
jmp    127e <bmask+0x17e>
mov    -0x20(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%rax
or     -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    121f <bmask+0x11f>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x1,-0x1c(%rbp)
mov    %al,-0x24(%rbp)
jl     12a9 <bmask+0x1a9>
cmpl   $0x1,-0x20(%rbp)
setge  %al
mov    %al,-0x24(%rbp)
mov    -0x24(%rbp),%al
test   $0x1,%al
jne    12b9 <bmask+0x1b9>
jmp    12ef <bmask+0x1ef>
mov    -0x20(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,%eax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%rax
or     -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    1290 <bmask+0x190>
mov    -0x10(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<bmask>:
push   %r15
push   %r14
push   %rbx
lea    0x7(%rdi),%eax
test   %edi,%edi
cmovns %edi,%eax
mov    %eax,%r11d
sar    $0x3,%r11d
and    $0xfffffff8,%eax
mov    %edi,%r10d
sub    %eax,%r10d
lea    0x1(%r11),%edx
neg    %eax
lea    (%rdi,%rax,1),%esi
add    $0x1,%esi
xor    %eax,%eax
mov    %r11d,%ecx
not    %ecx
movd   %esi,%xmm8
cmp    $0x2f,%edi
jg     12ec <bmask+0x1ec>
cmp    $0x5,%r10d
jg     12ec <bmask+0x1ec>
cmp    $0x7,%edx
mov    $0x6,%eax
cmovge %edx,%eax
add    %ecx,%eax
mov    $0x5,%esi
sub    %r10d,%esi
cmp    %eax,%esi
cmovae %eax,%esi
add    $0x1,%esi
test   %eax,%eax
mov    $0x1,%eax
cmovne %esi,%eax
add    $0xffffffff,%eax
movd   %eax,%xmm9
pshufd $0x50,%xmm8,%xmm2
movdqa 0xe7b(%rip),%xmm0
paddd  %xmm0,%xmm2
movd   %edx,%xmm1
pshufd $0x50,%xmm1,%xmm4
paddd  %xmm0,%xmm4
mov    %eax,%ebx
shr    %ebx
add    $0x1,%ebx
cmp    $0x2,%eax
jae    11ad <bmask+0xad>
pxor   %xmm1,%xmm1
xor    %eax,%eax
jmp    125a <bmask+0x15a>
mov    %ebx,%esi
and    $0xfffffffe,%esi
pxor   %xmm1,%xmm1
xor    %eax,%eax
movdqa 0xe50(%rip),%xmm7
movdqa 0xe57(%rip),%xmm10
movdqa 0xe5e(%rip),%xmm11
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm4,%xmm3
pslld  $0x3,%xmm3
paddd  %xmm2,%xmm3
xorps  %xmm5,%xmm5
movss  %xmm3,%xmm5
movdqa %xmm7,%xmm6
psllq  %xmm5,%xmm6
movdqa %xmm3,%xmm0
psrlq  $0x20,%xmm0
movdqa %xmm7,%xmm5
psllq  %xmm0,%xmm5
movsd  %xmm6,%xmm5
orpd   %xmm1,%xmm5
paddd  %xmm10,%xmm3
pxor   %xmm0,%xmm0
movss  %xmm3,%xmm0
movdqa %xmm7,%xmm6
psllq  %xmm0,%xmm6
psrlq  $0x20,%xmm3
movdqa %xmm7,%xmm1
psllq  %xmm3,%xmm1
movsd  %xmm6,%xmm1
orpd   %xmm5,%xmm1
paddd  %xmm11,%xmm2
paddd  %xmm11,%xmm4
add    $0xfffffffc,%eax
add    $0xfffffffe,%esi
jne    11e0 <bmask+0xe0>
mov    $0xfffffffe,%esi
sub    %eax,%esi
neg    %eax
pshufd $0x50,%xmm9,%xmm0
test   $0x1,%bl
je     12a1 <bmask+0x1a1>
pslld  $0x3,%xmm4
paddd  %xmm4,%xmm2
pxor   %xmm3,%xmm3
movss  %xmm2,%xmm3
movdqa 0xd92(%rip),%xmm4
movdqa %xmm4,%xmm5
psllq  %xmm3,%xmm5
psrlq  $0x20,%xmm2
psllq  %xmm2,%xmm4
movsd  %xmm5,%xmm4
orpd   %xmm1,%xmm4
mov    %eax,%esi
movapd %xmm1,%xmm5
movapd %xmm4,%xmm1
movd   %esi,%xmm2
pshufd $0x50,%xmm2,%xmm2
por    0xd4e(%rip),%xmm2
movdqa 0xd86(%rip),%xmm3
pxor   %xmm3,%xmm0
pxor   %xmm3,%xmm2
pcmpgtd %xmm0,%xmm2
pxor   %xmm0,%xmm0
pcmpgtd %xmm2,%xmm0
punpckldq %xmm0,%xmm2
andpd  %xmm2,%xmm5
andnpd %xmm1,%xmm2
orpd   %xmm5,%xmm2
pshufd $0xee,%xmm2,%xmm0
por    %xmm2,%xmm0
movq   %xmm0,%rax
lea    -0x1(%r10),%r9d
movabs $0x1fffffffc,%r8
mov    %r9d,%r15d
cmp    $0x2f,%edi
jg     145c <bmask+0x35c>
cmp    $0x2,%r10d
jl     145c <bmask+0x35c>
cmp    $0x7,%edx
mov    $0x6,%ebx
cmovge %edx,%ebx
add    %ecx,%ebx
cmp    $0x1,%r9d
mov    %r15,%rcx
adc    $0xffffffffffffffff,%rcx
cmp    %rbx,%rcx
cmovae %rbx,%rcx
add    $0x1,%rcx
test   %ebx,%ebx
mov    $0x1,%ebx
cmovne %rcx,%rbx
cmp    $0x4,%rbx
jae    134c <bmask+0x24c>
mov    %r15,%rsi
jmp    143d <bmask+0x33d>
mov    %rbx,%r14
and    %r8,%r14
mov    %r15,%rsi
sub    %r14,%rsi
movd   %edx,%xmm0
add    %r14d,%edx
pshufd $0x50,%xmm0,%xmm5
paddd  0xc94(%rip),%xmm5
movq   %rax,%xmm13
movd   %r9d,%xmm0
pshufd $0x50,%xmm0,%xmm4
paddd  0xccd(%rip),%xmm4
pxor   %xmm3,%xmm3
movdqa 0xcd0(%rip),%xmm9
movdqa 0xc77(%rip),%xmm12
movdqa 0xc8e(%rip),%xmm10
movdqa 0xcc5(%rip),%xmm11
mov    %r14,%rax
xchg   %ax,%ax
movdqa %xmm5,%xmm1
pslld  $0x3,%xmm1
paddd  %xmm4,%xmm1
movdqa %xmm1,%xmm6
paddd  %xmm9,%xmm6
pxor   %xmm7,%xmm7
movss  %xmm1,%xmm7
pxor   %xmm0,%xmm0
movdqa %xmm12,%xmm2
psllq  %xmm7,%xmm2
movss  %xmm6,%xmm0
psrlq  $0x20,%xmm1
movdqa %xmm12,%xmm7
psllq  %xmm1,%xmm7
movsd  %xmm2,%xmm7
por    %xmm7,%xmm13
movdqa %xmm12,%xmm1
psllq  %xmm0,%xmm1
psrlq  $0x20,%xmm6
movdqa %xmm12,%xmm0
psllq  %xmm6,%xmm0
movsd  %xmm1,%xmm0
por    %xmm0,%xmm3
paddd  %xmm10,%xmm5
paddd  %xmm11,%xmm4
add    $0xfffffffffffffffc,%rax
jne    13b0 <bmask+0x2b0>
por    %xmm13,%xmm3
pshufd $0xee,%xmm3,%xmm0
por    %xmm3,%xmm0
movq   %xmm0,%rax
cmp    %r14,%rbx
je     145c <bmask+0x35c>
lea    (%rsi,%rdx,8),%ebx
bts    %rbx,%rax
cmp    $0x5,%edx
jg     145c <bmask+0x35c>
add    $0x1,%edx
lea    -0x1(%rsi),%rcx
add    $0x7,%ebx
cmp    $0x1,%rsi
mov    %rcx,%rsi
ja     1440 <bmask+0x340>
lea    -0x1(%r11),%edx
cmp    $0x10,%edi
jl     1642 <bmask+0x542>
cmp    $0x5,%r10d
jg     1642 <bmask+0x542>
test   %edx,%edx
mov    $0x1,%ecx
cmovle %edx,%ecx
not    %ecx
add    %r11d,%ecx
mov    $0x5,%esi
sub    %r10d,%esi
cmp    %ecx,%esi
cmovae %ecx,%esi
test   %ecx,%ecx
cmove  %ecx,%esi
lea    0x2(%rsi),%rcx
lea    0x2(%r8),%rbx
and    %rbx,%rcx
movq   %rsi,%xmm9
pshufd $0x50,%xmm8,%xmm1
paddd  0xb4e(%rip),%xmm1
movq   %rax,%xmm0
movd   %edx,%xmm2
pshufd $0x50,%xmm2,%xmm6
paddd  0xb88(%rip),%xmm6
add    $0xfffffffffffffffe,%rcx
mov    %rcx,%rax
shr    %rax
add    $0x1,%rax
test   %rcx,%rcx
je     159a <bmask+0x49a>
movabs $0x7ffffffffffffffe,%rbx
ff ff 7f
and    %rax,%rbx
mov    $0xfffffffffffffffe,%rcx
movdqa 0xb15(%rip),%xmm7
movdqa 0xb7c(%rip),%xmm8
movdqa 0xb23(%rip),%xmm10
movdqa 0xb5a(%rip),%xmm11
cs nopw 0x0(%rax,%rax,1)
movdqa %xmm6,%xmm2
pslld  $0x3,%xmm2
paddd  %xmm1,%xmm2
pxor   %xmm4,%xmm4
movss  %xmm2,%xmm4
movdqa %xmm7,%xmm5
psllq  %xmm4,%xmm5
movdqa %xmm2,%xmm3
psrlq  $0x20,%xmm3
movdqa %xmm7,%xmm4
psllq  %xmm3,%xmm4
movsd  %xmm5,%xmm4
orpd   %xmm0,%xmm4
paddd  %xmm8,%xmm2
xorpd  %xmm0,%xmm0
movss  %xmm2,%xmm0
movdqa %xmm7,%xmm3
psllq  %xmm0,%xmm3
psrlq  $0x20,%xmm2
movdqa %xmm7,%xmm0
psllq  %xmm2,%xmm0
movsd  %xmm3,%xmm0
orpd   %xmm4,%xmm0
paddd  %xmm10,%xmm1
paddd  %xmm11,%xmm6
add    $0x4,%rcx
add    $0xfffffffffffffffe,%rbx
jne    1520 <bmask+0x420>
lea    0x2(%rcx),%rbx
jmp    159c <bmask+0x49c>
xor    %ebx,%ebx
pshufd $0x44,%xmm9,%xmm3
test   $0x1,%al
je     15e3 <bmask+0x4e3>
pslld  $0x3,%xmm6
paddd  %xmm6,%xmm1
pxor   %xmm2,%xmm2
movss  %xmm1,%xmm2
movdqa 0xa51(%rip),%xmm5
movdqa %xmm5,%xmm4
psllq  %xmm2,%xmm4
psrlq  $0x20,%xmm1
psllq  %xmm1,%xmm5
movsd  %xmm4,%xmm5
orpd   %xmm0,%xmm5
mov    %rbx,%rcx
movdqa %xmm0,%xmm4
movapd %xmm5,%xmm0
movq   %rcx,%xmm1
pshufd $0x44,%xmm1,%xmm1
por    0xa9b(%rip),%xmm1
movdqa 0xa43(%rip),%xmm2
pxor   %xmm2,%xmm3
pxor   %xmm2,%xmm1
movdqa %xmm1,%xmm2
pcmpgtd %xmm3,%xmm2
pshufd $0xa0,%xmm2,%xmm5
pcmpeqd %xmm3,%xmm1
pshufd $0xf5,%xmm1,%xmm1
pand   %xmm5,%xmm1
pshufd $0xf5,%xmm2,%xmm2
por    %xmm1,%xmm2
pand   %xmm2,%xmm4
pandn  %xmm0,%xmm2
por    %xmm4,%xmm2
pshufd $0xee,%xmm2,%xmm0
por    %xmm2,%xmm0
movq   %xmm0,%rax
cmp    $0x10,%edi
jl     17bd <bmask+0x6bd>
cmp    $0x2,%r10d
jl     17bd <bmask+0x6bd>
mov    %edx,%ecx
test   %edx,%edx
mov    $0x1,%esi
cmovle %edx,%esi
not    %esi
add    %esi,%r11d
cmp    $0x1,%r9d
mov    %r15,%rsi
adc    $0xffffffffffffffff,%rsi
cmp    %r11,%rsi
cmovae %r11,%rsi
add    $0x1,%rsi
test   %r11d,%r11d
mov    $0x1,%edx
cmovne %rsi,%rdx
cmp    $0x4,%rdx
jb     178f <bmask+0x68f>
and    %rdx,%r8
movq   %rcx,%xmm0
sub    %r8,%rcx
pshufd $0x44,%xmm0,%xmm3
movdqa 0x9f6(%rip),%xmm2
paddq  %xmm2,%xmm3
movq   %r15,%xmm1
sub    %r8,%r15
pshufd $0x44,%xmm1,%xmm1
paddq  %xmm2,%xmm1
movq   %rax,%xmm13
pxor   %xmm9,%xmm9
movdqa 0x9de(%rip),%xmm8
movdqa 0x9e5(%rip),%xmm10
movdqa 0x92c(%rip),%xmm12
movdqa 0x9e3(%rip),%xmm11
mov    %r8,%rax
pxor   %xmm7,%xmm7
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqa %xmm3,%xmm0
psllq  $0x3,%xmm0
paddq  %xmm1,%xmm0
movdqa %xmm0,%xmm5
paddq  %xmm8,%xmm5
movdqa %xmm0,%xmm4
pand   %xmm10,%xmm4
movdqa %xmm5,%xmm6
movdqa %xmm12,%xmm2
psllq  %xmm4,%xmm2
pand   %xmm10,%xmm6
punpckhdq %xmm9,%xmm0
movdqa %xmm12,%xmm4
psllq  %xmm0,%xmm4
movsd  %xmm2,%xmm4
por    %xmm4,%xmm13
movdqa %xmm12,%xmm0
psllq  %xmm6,%xmm0
punpckhdq %xmm9,%xmm5
movdqa %xmm12,%xmm2
psllq  %xmm5,%xmm2
movsd  %xmm0,%xmm2
por    %xmm2,%xmm7
paddq  %xmm11,%xmm3
paddq  %xmm11,%xmm1
add    $0xfffffffffffffffc,%rax
jne    1700 <bmask+0x600>
por    %xmm13,%xmm7
pshufd $0xee,%xmm7,%xmm0
por    %xmm7,%xmm0
movq   %xmm0,%rax
cmp    %r8,%rdx
je     17bd <bmask+0x6bd>
lea    (%r15,%rcx,8),%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
bts    %rdx,%rax
cmp    $0x2,%ecx
jl     17bd <bmask+0x6bd>
lea    -0x1(%r15),%rsi
add    $0xfffffffffffffff7,%rdx
add    $0xffffffff,%ecx
cmp    $0x1,%r15
mov    %rsi,%r15
ja     17a0 <bmask+0x6a0>
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define i64 @bmask(i32 %0) {
%2 = alloca i32
%3 = alloca i64
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i32 %0, i32* %2
store i64 0, i64* %3
%8 = load i32, i32* %2
%9 = sdiv i32 %8, 8
store i32 %9, i32* %4
%10 = load i32, i32* %2
%11 = srem i32 %10, 8
store i32 %11, i32* %5
%12 = load i32, i32* %4
%13 = add nsw i32 %12, 1
store i32 %13, i32* %6
%14 = load i32, i32* %5
%15 = add nsw i32 %14, 1
store i32 %15, i32* %7
br label %16
16: ; preds = %33, %1
%17 = load i32, i32* %6
%18 = icmp sle i32 %17, 6
br i1 %18, label %19, label %22
19: ; preds = %16
%20 = load i32, i32* %7
%21 = icmp sle i32 %20, 6
br label %22
22: ; preds = %19, %16
%23 = phi i1 [ false, %16 ], [ %21, %19 ]
br i1 %23, label %24, label %38
24: ; preds = %22
%25 = load i32, i32* %7
%26 = load i32, i32* %6
%27 = mul nsw i32 %26, 8
%28 = add nsw i32 %25, %27
%29 = zext i32 %28 to i64
%30 = shl i64 1, %29
%31 = load i64, i64* %3
%32 = or i64 %31, %30
store i64 %32, i64* %3
br label %33
33: ; preds = %24
%34 = load i32, i32* %6
%35 = add nsw i32 %34, 1
store i32 %35, i32* %6
%36 = load i32, i32* %7
%37 = add nsw i32 %36, 1
store i32 %37, i32* %7
br label %16
38: ; preds = %22
%39 = load i32, i32* %4
%40 = add nsw i32 %39, 1
store i32 %40, i32* %6
%41 = load i32, i32* %5
%42 = sub nsw i32 %41, 1
store i32 %42, i32* %7
br label %43
43: ; preds = %60, %38
%44 = load i32, i32* %6
%45 = icmp sle i32 %44, 6
br i1 %45, label %46, label %49
46: ; preds = %43
%47 = load i32, i32* %7
%48 = icmp sge i32 %47, 1
br label %49
49: ; preds = %46, %43
%50 = phi i1 [ false, %43 ], [ %48, %46 ]
br i1 %50, label %51, label %65
51: ; preds = %49
%52 = load i32, i32* %7
%53 = load i32, i32* %6
%54 = mul nsw i32 %53, 8
%55 = add nsw i32 %52, %54
%56 = zext i32 %55 to i64
%57 = shl i64 1, %56
%58 = load i64, i64* %3
%59 = or i64 %58, %57
store i64 %59, i64* %3
br label %60
60: ; preds = %51
%61 = load i32, i32* %6
%62 = add nsw i32 %61, 1
store i32 %62, i32* %6
%63 = load i32, i32* %7
%64 = add nsw i32 %63, -1
store i32 %64, i32* %7
br label %43
65: ; preds = %49
%66 = load i32, i32* %4
%67 = sub nsw i32 %66, 1
store i32 %67, i32* %6
%68 = load i32, i32* %5
%69 = add nsw i32 %68, 1
store i32 %69, i32* %7
br label %70
70: ; preds = %87, %65
%71 = load i32, i32* %6
%72 = icmp sge i32 %71, 1
br i1 %72, label %73, label %76
73: ; preds = %70
%74 = load i32, i32* %7
%75 = icmp sle i32 %74, 6
br label %76
76: ; preds = %73, %70
%77 = phi i1 [ false, %70 ], [ %75, %73 ]
br i1 %77, label %78, label %92
78: ; preds = %76
%79 = load i32, i32* %7
%80 = load i32, i32* %6
%81 = mul nsw i32 %80, 8
%82 = add nsw i32 %79, %81
%83 = zext i32 %82 to i64
%84 = shl i64 1, %83
%85 = load i64, i64* %3
%86 = or i64 %85, %84
store i64 %86, i64* %3
br label %87
87: ; preds = %78
%88 = load i32, i32* %6
%89 = add nsw i32 %88, -1
store i32 %89, i32* %6
%90 = load i32, i32* %7
%91 = add nsw i32 %90, 1
store i32 %91, i32* %7
br label %70
92: ; preds = %76
%93 = load i32, i32* %4
%94 = sub nsw i32 %93, 1
store i32 %94, i32* %6
%95 = load i32, i32* %5
%96 = sub nsw i32 %95, 1
store i32 %96, i32* %7
br label %97
97: ; preds = %114, %92
%98 = load i32, i32* %6
%99 = icmp sge i32 %98, 1
br i1 %99, label %100, label %103
100: ; preds = %97
%101 = load i32, i32* %7
%102 = icmp sge i32 %101, 1
br label %103
103: ; preds = %100, %97
%104 = phi i1 [ false, %97 ], [ %102, %100 ]
br i1 %104, label %105, label %119
105: ; preds = %103
%106 = load i32, i32* %7
%107 = load i32, i32* %6
%108 = mul nsw i32 %107, 8
%109 = add nsw i32 %106, %108
%110 = zext i32 %109 to i64
%111 = shl i64 1, %110
%112 = load i64, i64* %3
%113 = or i64 %112, %111
store i64 %113, i64* %3
br label %114
114: ; preds = %105
%115 = load i32, i32* %6
%116 = add nsw i32 %115, -1
store i32 %116, i32* %6
%117 = load i32, i32* %7
%118 = add nsw i32 %117, -1
store i32 %118, i32* %7
br label %97
119: ; preds = %103
%120 = load i64, i64* %3
ret i64 %120
}

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