void set_vertex_type(unsigned char type, int vertex_num,
                     unsigned char **matrix) {
  if ((type & 1) == 1) {
    {
      if (1) {
        (matrix)[(0 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(0 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 2) == 2) {
    {
      if (1) {
        (matrix)[(1 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(1 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 3) == 3) {
    {
      if (1) {
        (matrix)[(2 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(2 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 4) == 4) {
    {
      if (1) {
        (matrix)[(3 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(3 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 8) == 8) {
    {
      if (1) {
        (matrix)[(4 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(4 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 12) == 12) {
    {
      if (1) {
        (matrix)[(5 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(5 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 16) == 16) {
    {
      if (1) {
        (matrix)[(6 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(6 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 32) == 32) {
    {
      if (1) {
        (matrix)[(7 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(7 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 48) == 48) {
    {
      if (1) {
        (matrix)[(8 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(8 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 64) == 64) {
    {
      if (1) {
        (matrix)[(10 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(10 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
    {
      if (1) {
        (matrix)[(11 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(11 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 128) == 128) {
    {
      if (1) {
        (matrix)[(12 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(12 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
  if ((type & 192) == 0) {
    {
      if (1) {
        (matrix)[(9 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(9 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
    {
      if (1) {
        (matrix)[(11 - 13 + 13)][(vertex_num + 13) / 8] |=
            (1 << ((vertex_num + 13) % 8));
      } else {
        (matrix)[(11 - 13 + 13)][(vertex_num + 13) / 8] &=
            (0xFF & (0 << ((vertex_num + 13) % 8)));
      }
    };
  }
}


x86 assembly (clang, -O0):
<set_vertex_type>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
movzbl -0x1(%rbp),%eax
and    $0x1,%eax
cmp    $0x1,%eax
jne    1163 <set_vertex_type+0x63>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x2,%eax
cmp    $0x2,%eax
jne    11b6 <set_vertex_type+0xb6>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x3,%eax
cmp    $0x3,%eax
jne    1209 <set_vertex_type+0x109>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
jne    125c <set_vertex_type+0x15c>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    12af <set_vertex_type+0x1af>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0xc,%eax
cmp    $0xc,%eax
jne    1302 <set_vertex_type+0x202>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x40(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x10,%eax
cmp    $0x10,%eax
jne    1355 <set_vertex_type+0x255>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%rax
mov    %rax,-0x48(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x48(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x20,%eax
cmp    $0x20,%eax
jne    13a8 <set_vertex_type+0x2a8>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%rax
mov    %rax,-0x50(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x50(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x30,%eax
cmp    $0x30,%eax
jne    13fb <set_vertex_type+0x2fb>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x58(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x40,%eax
cmp    $0x40,%eax
jne    1491 <set_vertex_type+0x391>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x50(%rax),%rax
mov    %rax,-0x68(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x68(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x58(%rax),%rax
mov    %rax,-0x60(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x60(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0x80,%eax
cmp    $0x80,%eax
jne    14e8 <set_vertex_type+0x3e8>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x60(%rax),%rax
mov    %rax,-0x70(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x70(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
movzbl -0x1(%rbp),%eax
and    $0xc0,%eax
cmp    $0x0,%eax
jne    1580 <set_vertex_type+0x480>
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%rax
mov    %rax,-0x80(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x80(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
mov    $0x1,%esi
shl    %cl,%esi
mov    -0x10(%rbp),%rax
mov    0x58(%rax),%rax
mov    %rax,-0x78(%rbp)
mov    -0x8(%rbp),%eax
add    $0xd,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x78(%rbp),%rax
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
pop    %rbp
ret

x86 assembly (clang, -O2):
<set_vertex_type>:
mov    %edi,%r8d
test   $0x1,%dil
je     112f <set_vertex_type+0x2f>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    (%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0x2,%r8b
je     115c <set_vertex_type+0x5c>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x8(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
not    %edi
test   $0x3,%dil
je     11bb <set_vertex_type+0xbb>
test   $0x4,%r8b
jne    11e8 <set_vertex_type+0xe8>
test   $0x8,%r8b
jne    1219 <set_vertex_type+0x119>
test   $0xc,%dil
je     124a <set_vertex_type+0x14a>
test   $0x10,%r8b
jne    127b <set_vertex_type+0x17b>
test   $0x20,%r8b
jne    12ac <set_vertex_type+0x1ac>
test   $0x30,%dil
je     12dd <set_vertex_type+0x1dd>
test   $0x40,%r8b
jne    130c <set_vertex_type+0x20c>
test   $0x80,%r8b
jne    1343 <set_vertex_type+0x243>
test   $0xc0,%r8b
je     1372 <set_vertex_type+0x272>
ret
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x10(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0x4,%r8b
je     116a <set_vertex_type+0x6a>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x18(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0x8,%r8b
je     1174 <set_vertex_type+0x74>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x20(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0xc,%dil
jne    117e <set_vertex_type+0x7e>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x28(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0x10,%r8b
je     1188 <set_vertex_type+0x88>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x30(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0x20,%r8b
je     1192 <set_vertex_type+0x92>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%r9d
shl    %cl,%r9d
mov    0x38(%rdx),%r10
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %r9b,(%r10,%rax,1)
test   $0x30,%dil
jne    119c <set_vertex_type+0x9c>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%edi
shl    %cl,%edi
mov    0x40(%rdx),%r9
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %dil,(%r9,%rax,1)
test   $0x40,%r8b
je     11a6 <set_vertex_type+0xa6>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%edi
shl    %cl,%edi
mov    0x50(%rdx),%r9
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %dil,(%r9,%rax,1)
mov    0x58(%rdx),%rcx
or     %dil,(%rcx,%rax,1)
test   $0x80,%r8b
je     11b0 <set_vertex_type+0xb0>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%edi
shl    %cl,%edi
mov    0x60(%rdx),%r9
lea    0x14(%rsi),%ecx
test   %eax,%eax
cmovns %eax,%ecx
sar    $0x3,%ecx
movslq %ecx,%rax
or     %dil,(%r9,%rax,1)
test   $0xc0,%r8b
jne    11ba <set_vertex_type+0xba>
lea    0xd(%rsi),%eax
mov    %eax,%ecx
and    $0x7,%cl
mov    $0x1,%edi
shl    %cl,%edi
mov    0x48(%rdx),%rcx
add    $0x14,%esi
test   %eax,%eax
cmovns %eax,%esi
sar    $0x3,%esi
movslq %esi,%rax
or     %dil,(%rcx,%rax,1)
mov    0x58(%rdx),%rcx
or     %dil,(%rcx,%rax,1)
ret

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

LLVM IR (-O2):
define void @set_vertex_type(i8 zeroext %0, i32 %1, i8** nocapture %2) {
%4 = zext i8 %0 to i32
%5 = and i32 %4, 1
%6 = icmp eq i32 %5, 0
br i1 %6, label %18, label %7
7: ; preds = %3
%8 = add nsw i32 %1, 13
%9 = and i32 %8, 7
%10 = shl nuw nsw i32 1, %9
%11 = load i8*, i8** %2
%12 = sdiv i32 %8, 8
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds i8, i8* %11, i64 %13
%15 = load i8, i8* %14
%16 = trunc i32 %10 to i8
%17 = or i8 %15, %16
store i8 %17, i8* %14
br label %18
18: ; preds = %7, %3
%19 = and i32 %4, 2
%20 = icmp eq i32 %19, 0
br i1 %20, label %33, label %21
21: ; preds = %18
%22 = add nsw i32 %1, 13
%23 = and i32 %22, 7
%24 = shl nuw nsw i32 1, %23
%25 = getelementptr inbounds i8*, i8** %2, i64 1
%26 = load i8*, i8** %25
%27 = sdiv i32 %22, 8
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i8, i8* %26, i64 %28
%30 = load i8, i8* %29
%31 = trunc i32 %24 to i8
%32 = or i8 %30, %31
store i8 %32, i8* %29
br label %33
33: ; preds = %21, %18
%34 = and i32 %4, 3
%35 = icmp eq i32 %34, 3
br i1 %35, label %36, label %48
36: ; preds = %33
%37 = add nsw i32 %1, 13
%38 = and i32 %37, 7
%39 = shl nuw nsw i32 1, %38
%40 = getelementptr inbounds i8*, i8** %2, i64 2
%41 = load i8*, i8** %40
%42 = sdiv i32 %37, 8
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %41, i64 %43
%45 = load i8, i8* %44
%46 = trunc i32 %39 to i8
%47 = or i8 %45, %46
store i8 %47, i8* %44
br label %48
48: ; preds = %36, %33
%49 = and i32 %4, 4
%50 = icmp eq i32 %49, 0
br i1 %50, label %63, label %51
51: ; preds = %48
%52 = add nsw i32 %1, 13
%53 = and i32 %52, 7
%54 = shl nuw nsw i32 1, %53
%55 = getelementptr inbounds i8*, i8** %2, i64 3
%56 = load i8*, i8** %55
%57 = sdiv i32 %52, 8
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
%60 = load i8, i8* %59
%61 = trunc i32 %54 to i8
%62 = or i8 %60, %61
store i8 %62, i8* %59
br label %63
63: ; preds = %51, %48
%64 = and i32 %4, 8
%65 = icmp eq i32 %64, 0
br i1 %65, label %78, label %66
66: ; preds = %63
%67 = add nsw i32 %1, 13
%68 = and i32 %67, 7
%69 = shl nuw nsw i32 1, %68
%70 = getelementptr inbounds i8*, i8** %2, i64 4
%71 = load i8*, i8** %70
%72 = sdiv i32 %67, 8
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %71, i64 %73
%75 = load i8, i8* %74
%76 = trunc i32 %69 to i8
%77 = or i8 %75, %76
store i8 %77, i8* %74
br label %78
78: ; preds = %66, %63
%79 = and i32 %4, 12
%80 = icmp eq i32 %79, 12
br i1 %80, label %81, label %93
81: ; preds = %78
%82 = add nsw i32 %1, 13
%83 = and i32 %82, 7
%84 = shl nuw nsw i32 1, %83
%85 = getelementptr inbounds i8*, i8** %2, i64 5
%86 = load i8*, i8** %85
%87 = sdiv i32 %82, 8
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %86, i64 %88
%90 = load i8, i8* %89
%91 = trunc i32 %84 to i8
%92 = or i8 %90, %91
store i8 %92, i8* %89
br label %93
93: ; preds = %81, %78
%94 = and i32 %4, 16
%95 = icmp eq i32 %94, 0
br i1 %95, label %108, label %96
96: ; preds = %93
%97 = add nsw i32 %1, 13
%98 = and i32 %97, 7
%99 = shl nuw nsw i32 1, %98
%100 = getelementptr inbounds i8*, i8** %2, i64 6
%101 = load i8*, i8** %100
%102 = sdiv i32 %97, 8
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %101, i64 %103
%105 = load i8, i8* %104
%106 = trunc i32 %99 to i8
%107 = or i8 %105, %106
store i8 %107, i8* %104
br label %108
108: ; preds = %96, %93
%109 = and i32 %4, 32
%110 = icmp eq i32 %109, 0
br i1 %110, label %123, label %111
111: ; preds = %108
%112 = add nsw i32 %1, 13
%113 = and i32 %112, 7
%114 = shl nuw nsw i32 1, %113
%115 = getelementptr inbounds i8*, i8** %2, i64 7
%116 = load i8*, i8** %115
%117 = sdiv i32 %112, 8
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8, i8* %116, i64 %118
%120 = load i8, i8* %119
%121 = trunc i32 %114 to i8
%122 = or i8 %120, %121
store i8 %122, i8* %119
br label %123
123: ; preds = %111, %108
%124 = and i32 %4, 48
%125 = icmp eq i32 %124, 48
br i1 %125, label %126, label %138
126: ; preds = %123
%127 = add nsw i32 %1, 13
%128 = and i32 %127, 7
%129 = shl nuw nsw i32 1, %128
%130 = getelementptr inbounds i8*, i8** %2, i64 8
%131 = load i8*, i8** %130
%132 = sdiv i32 %127, 8
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i8, i8* %131, i64 %133
%135 = load i8, i8* %134
%136 = trunc i32 %129 to i8
%137 = or i8 %135, %136
store i8 %137, i8* %134
br label %138
138: ; preds = %126, %123
%139 = and i32 %4, 64
%140 = icmp eq i32 %139, 0
br i1 %140, label %158, label %141
141: ; preds = %138
%142 = add nsw i32 %1, 13
%143 = and i32 %142, 7
%144 = shl nuw nsw i32 1, %143
%145 = getelementptr inbounds i8*, i8** %2, i64 10
%146 = load i8*, i8** %145
%147 = sdiv i32 %142, 8
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds i8, i8* %146, i64 %148
%150 = load i8, i8* %149
%151 = trunc i32 %144 to i8
%152 = or i8 %150, %151
store i8 %152, i8* %149
%153 = getelementptr inbounds i8*, i8** %2, i64 11
%154 = load i8*, i8** %153
%155 = getelementptr inbounds i8, i8* %154, i64 %148
%156 = load i8, i8* %155
%157 = or i8 %156, %151
store i8 %157, i8* %155
br label %158
158: ; preds = %141, %138
%159 = and i32 %4, 128
%160 = icmp eq i32 %159, 0
br i1 %160, label %173, label %161
161: ; preds = %158
%162 = add nsw i32 %1, 13
%163 = and i32 %162, 7
%164 = shl nuw nsw i32 1, %163
%165 = getelementptr inbounds i8*, i8** %2, i64 12
%166 = load i8*, i8** %165
%167 = sdiv i32 %162, 8
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds i8, i8* %166, i64 %168
%170 = load i8, i8* %169
%171 = trunc i32 %164 to i8
%172 = or i8 %170, %171
store i8 %172, i8* %169
br label %173
173: ; preds = %161, %158
%174 = and i32 %4, 192
%175 = icmp eq i32 %174, 0
br i1 %175, label %176, label %193
176: ; preds = %173
%177 = add nsw i32 %1, 13
%178 = and i32 %177, 7
%179 = shl nuw nsw i32 1, %178
%180 = getelementptr inbounds i8*, i8** %2, i64 9
%181 = load i8*, i8** %180
%182 = sdiv i32 %177, 8
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds i8, i8* %181, i64 %183
%185 = load i8, i8* %184
%186 = trunc i32 %179 to i8
%187 = or i8 %185, %186
store i8 %187, i8* %184
%188 = getelementptr inbounds i8*, i8** %2, i64 11
%189 = load i8*, i8** %188
%190 = getelementptr inbounds i8, i8* %189, i64 %183
%191 = load i8, i8* %190
%192 = or i8 %191, %186
store i8 %192, i8* %190
br label %193
193: ; preds = %176, %173
ret void
}