#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 */

/* Variables and functions */
int /*<<< orphan*/ memset(unsigned char *, int /*<<< orphan*/, int);
void initbuf(unsigned char *buf, int w, int h, int ps, int flags) {
  int roffset = (flags & 1) ? 2 : 0, goffset = 1, boffset = (flags & 1) ? 0 : 2,
      i, _i, j;
  if (flags & 64) {
    roffset++;
    goffset++;
    boffset++;
  }
  memset(buf, 0, w * h * ps);
  if (ps == 1) {
    for (_i = 0; _i < 16; _i++) {
      if (flags & 2)
        i = h - _i - 1;
      else
        i = _i;
      for (j = 0; j < w; j++) {
        if (((_i / 8) + (j / 8)) % 2 == 0)
          buf[w * i + j] = 255;
        else
          buf[w * i + j] = 76;
      }
    }
    for (_i = 16; _i < h; _i++) {
      if (flags & 2)
        i = h - _i - 1;
      else
        i = _i;
      for (j = 0; j < w; j++) {
        if (((_i / 8) + (j / 8)) % 2 == 0)
          buf[w * i + j] = 0;
        else
          buf[w * i + j] = 226;
      }
    }
    return;
  }
  for (_i = 0; _i < 16; _i++) {
    if (flags & 2)
      i = h - _i - 1;
    else
      i = _i;
    for (j = 0; j < w; j++) {
      buf[(w * i + j) * ps + roffset] = 255;
      if (((_i / 8) + (j / 8)) % 2 == 0) {
        buf[(w * i + j) * ps + goffset] = 255;
        buf[(w * i + j) * ps + boffset] = 255;
      }
    }
  }
  for (_i = 16; _i < h; _i++) {
    if (flags & 2)
      i = h - _i - 1;
    else
      i = _i;
    for (j = 0; j < w; j++) {
      if (((_i / 8) + (j / 8)) % 2 != 0) {
        buf[(w * i + j) * ps + roffset] = 255;
        buf[(w * i + j) * ps + goffset] = 255;
      }
    }
  }
}


x86 assembly (clang, -O0):
<initbuf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    -0x18(%rbp),%edx
and    $0x1,%edx
xor    %eax,%eax
mov    $0x2,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x1c(%rbp)
movl   $0x1,-0x20(%rbp)
mov    -0x18(%rbp),%edx
and    $0x1,%edx
mov    $0x2,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
je     1186 <initbuf+0x76>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%edx
imul   -0x10(%rbp),%edx
imul   -0x14(%rbp),%edx
xor    %esi,%esi
call   1030 <memset@plt>
cmpl   $0x1,-0x14(%rbp)
jne    134d <initbuf+0x23d>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x10,-0x2c(%rbp)
jge    1276 <initbuf+0x166>
mov    -0x18(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     11d7 <initbuf+0xc7>
mov    -0x10(%rbp),%eax
sub    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11dd <initbuf+0xcd>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1263 <initbuf+0x153>
mov    -0x2c(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x34(%rbp),%eax
add    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    123b <initbuf+0x12b>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    1250 <initbuf+0x140>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x4c,(%rax,%rcx,1)
jmp    1255 <initbuf+0x145>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11e4 <initbuf+0xd4>
jmp    1268 <initbuf+0x158>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11ad <initbuf+0x9d>
movl   $0x10,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1348 <initbuf+0x238>
mov    -0x18(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     12a9 <initbuf+0x199>
mov    -0x10(%rbp),%eax
sub    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12af <initbuf+0x19f>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1335 <initbuf+0x225>
mov    -0x2c(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
add    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    130d <initbuf+0x1fd>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1322 <initbuf+0x212>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xe2,(%rax,%rcx,1)
jmp    1327 <initbuf+0x217>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    12b6 <initbuf+0x1a6>
jmp    133a <initbuf+0x22a>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    127d <initbuf+0x16d>
jmp    151d <initbuf+0x40d>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x10,-0x2c(%rbp)
jge    1442 <initbuf+0x332>
mov    -0x18(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     137e <initbuf+0x26e>
mov    -0x10(%rbp),%eax
sub    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1384 <initbuf+0x274>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    142f <initbuf+0x31f>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x3c(%rbp)
mov    -0x30(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x3c(%rbp),%eax
add    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    141c <initbuf+0x30c>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    1421 <initbuf+0x311>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    138b <initbuf+0x27b>
jmp    1434 <initbuf+0x324>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1354 <initbuf+0x244>
movl   $0x10,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    151d <initbuf+0x40d>
mov    -0x18(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1475 <initbuf+0x365>
mov    -0x10(%rbp),%eax
sub    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    147b <initbuf+0x36b>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    150a <initbuf+0x3fa>
mov    -0x2c(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x40(%rbp),%eax
add    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     14f7 <initbuf+0x3e7>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    14fc <initbuf+0x3ec>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1482 <initbuf+0x372>
jmp    150f <initbuf+0x3ff>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1449 <initbuf+0x339>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<initbuf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r8d,%ebp
mov    %ecx,%r12d
mov    %edx,%r13d
mov    %esi,%r14d
mov    %rdi,%rbx
imul   %esi,%edx
imul   %ecx,%edx
xor    %r15d,%r15d
xor    %esi,%esi
call   1030 <memset@plt>
cmp    $0x1,%r12d
mov    %rbx,%r11
jne    13b8 <initbuf+0x2a8>
movabs $0x1ffffffffffffffe,%rax
ff ff 1f
mov    %rax,0x8(%rsp)
mov    %r14d,%ecx
mov    %ebp,%r15d
mov    %ecx,%ebp
and    $0xfffffff0,%ebp
lea    -0x10(%rbp),%r10
mov    %r10,%r12
shr    $0x4,%r12
add    $0x1,%r12
mov    %r12,%r9
and    $0xfffffffffffffffe,%r9
lea    0x10(%rbx),%rax
mov    %rax,0x10(%rsp)
xor    %edx,%edx
movdqa 0xe82(%rip),%xmm9
movdqa 0xe89(%rip),%xmm8
movdqa 0xe90(%rip),%xmm11
movdqa 0xe97(%rip),%xmm14
pxor   %xmm15,%xmm15
movdqa 0xe99(%rip),%xmm12
movdqa 0xea0(%rip),%xmm13
jmp    11dc <initbuf+0xcc>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%edx
cmp    $0x10,%edx
je     145c <initbuf+0x34c>
test   %r14d,%r14d
jle    11d0 <initbuf+0xc0>
mov    %edx,%eax
not    %eax
add    %r13d,%eax
test   $0x2,%r15b
cmove  %edx,%eax
mov    %edx,%edi
shr    $0x3,%edi
imul   %r14d,%eax
movslq %eax,%rsi
cmp    $0x10,%r14d
jae    1210 <initbuf+0x100>
xor    %eax,%eax
jmp    1368 <initbuf+0x258>
nopl   0x0(%rax,%rax,1)
movd   %edi,%xmm0
pshufd $0x0,%xmm0,%xmm7
test   %r10,%r10
je     1393 <initbuf+0x283>
mov    0x10(%rsp),%rax
lea    (%rax,%rsi,1),%r8
mov    %r9,%rbx
xor    %eax,%eax
movdqa %xmm11,%xmm1
movdqa %xmm8,%xmm10
movdqa %xmm9,%xmm0
movdqa 0xdb9(%rip),%xmm6
nopw   0x0(%rax,%rax,1)
movdqa %xmm6,%xmm4
psrld  $0x3,%xmm4
movdqa %xmm0,%xmm3
psrld  $0x3,%xmm3
movdqa %xmm10,%xmm2
psrld  $0x3,%xmm2
movdqa %xmm1,%xmm5
psrld  $0x3,%xmm5
paddd  %xmm7,%xmm5
paddd  %xmm7,%xmm2
paddd  %xmm7,%xmm3
paddd  %xmm7,%xmm4
pand   %xmm14,%xmm4
pand   %xmm14,%xmm3
pand   %xmm14,%xmm2
pand   %xmm14,%xmm5
pcmpeqd %xmm15,%xmm5
pcmpeqd %xmm15,%xmm2
packssdw %xmm2,%xmm5
pcmpeqd %xmm15,%xmm3
pcmpeqd %xmm15,%xmm4
packssdw %xmm4,%xmm3
packsswb %xmm3,%xmm5
por    %xmm12,%xmm5
movdqu %xmm5,-0x10(%r8,%rax,1)
movdqu %xmm5,(%r8,%rax,1)
add    $0x20,%rax
paddd  %xmm13,%xmm1
paddd  %xmm13,%xmm10
paddd  %xmm13,%xmm0
paddd  %xmm13,%xmm6
add    $0xfffffffffffffffe,%rbx
jne    1250 <initbuf+0x140>
test   $0x1,%r12b
je     135c <initbuf+0x24c>
psrld  $0x3,%xmm6
psrld  $0x3,%xmm0
psrld  $0x3,%xmm10
psrld  $0x3,%xmm1
paddd  %xmm7,%xmm1
paddd  %xmm7,%xmm10
paddd  %xmm7,%xmm0
paddd  %xmm7,%xmm6
pand   %xmm14,%xmm6
pand   %xmm14,%xmm0
pand   %xmm14,%xmm10
pand   %xmm14,%xmm1
pcmpeqd %xmm15,%xmm1
pcmpeqd %xmm15,%xmm10
packssdw %xmm10,%xmm1
pcmpeqd %xmm15,%xmm0
pcmpeqd %xmm15,%xmm6
packssdw %xmm6,%xmm0
packsswb %xmm0,%xmm1
add    %rsi,%rax
por    %xmm12,%xmm1
movdqu %xmm1,(%r11,%rax,1)
mov    %rbp,%rax
cmp    %rcx,%rbp
je     11d0 <initbuf+0xc0>
add    %r11,%rsi
nopl   0x0(%rax,%rax,1)
mov    %eax,%ebx
shr    $0x3,%ebx
add    %edi,%ebx
and    $0x1,%ebx
cmp    $0x1,%ebx
sbb    %ebx,%ebx
or     $0x4c,%bl
mov    %bl,(%rsi,%rax,1)
add    $0x1,%rax
cmp    %rax,%rcx
jne    1370 <initbuf+0x260>
jmp    11d0 <initbuf+0xc0>
xor    %eax,%eax
movdqa %xmm11,%xmm1
movdqa %xmm8,%xmm10
movdqa %xmm9,%xmm0
movdqa 0xc54(%rip),%xmm6
test   $0x1,%r12b
jne    12f3 <initbuf+0x1e3>
jmp    135c <initbuf+0x24c>
mov    %ebp,%eax
and    $0x1,%eax
mov    %ebp,%r10d
and    $0x40,%ebp
mov    %ebp,%edx
shr    $0x6,%edx
lea    (%rdx,%rax,2),%eax
mov    %eax,%r9d
xor    $0x2,%r9
cmp    $0x1,%ebp
mov    $0x2,%r8d
sbb    $0x0,%r8
movslq %r12d,%rdx
mov    %r14d,%esi
mov    %rbx,%r12
jmp    13fe <initbuf+0x2ee>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r15d
cmp    $0x10,%r15d
je     1694 <initbuf+0x584>
test   %r14d,%r14d
jle    13f0 <initbuf+0x2e0>
mov    %r15d,%ecx
not    %ecx
add    %r13d,%ecx
test   $0x2,%r10b
cmove  %r15d,%ecx
imul   %r14d,%ecx
mov    %r15d,%ebx
shr    $0x3,%ebx
movslq %ecx,%rbp
imul   %rdx,%rbp
add    %r12,%rbp
xor    %ecx,%ecx
jmp    143c <initbuf+0x32c>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
add    %rdx,%rbp
cmp    %rcx,%rsi
je     13f0 <initbuf+0x2e0>
movb   $0xff,0x0(%rbp,%rax,1)
mov    %ecx,%edi
shr    $0x3,%edi
add    %ebx,%edi
test   $0x1,%dil
jne    1430 <initbuf+0x320>
movb   $0xff,0x0(%rbp,%r8,1)
movb   $0xff,0x0(%rbp,%r9,1)
jmp    1430 <initbuf+0x320>
cmp    $0x11,%r13d
jl     1714 <initbuf+0x604>
mov    %ecx,%r9d
and    $0xfffffff0,%r9d
and    %r12,0x8(%rsp)
mov    $0x10,%esi
mov    $0xe2,%r8d
movdqa 0xb8a(%rip),%xmm9
movdqa 0xb91(%rip),%xmm8
movdqa 0xb98(%rip),%xmm11
pxor   %xmm15,%xmm15
movdqa 0xbca(%rip),%xmm12
jmp    14bc <initbuf+0x3ac>
nopl   0x0(%rax,%rax,1)
add    $0x1,%esi
cmp    %r13d,%esi
je     1714 <initbuf+0x604>
test   %r14d,%r14d
jle    14b0 <initbuf+0x3a0>
mov    %esi,%eax
not    %eax
add    %r13d,%eax
test   $0x2,%r15b
cmove  %esi,%eax
mov    %esi,%edx
shr    $0x3,%edx
imul   %r14d,%eax
cltq
cmp    $0x10,%r14d
jae    14f0 <initbuf+0x3e0>
xor    %edi,%edi
jmp    1646 <initbuf+0x536>
nopw   0x0(%rax,%rax,1)
movd   %edx,%xmm0
pshufd $0x0,%xmm0,%xmm7
test   %r10,%r10
je     166f <initbuf+0x55f>
mov    0x10(%rsp),%rdi
lea    (%rdi,%rax,1),%rbx
mov    0x8(%rsp),%rdi
xor    %ebp,%ebp
movdqa %xmm11,%xmm5
movdqa %xmm8,%xmm10
movdqa %xmm9,%xmm3
movdqa 0xad7(%rip),%xmm6
nopl   0x0(%rax)
movdqa %xmm6,%xmm4
psrld  $0x3,%xmm4
movdqa %xmm3,%xmm1
psrld  $0x3,%xmm1
movdqa %xmm10,%xmm2
psrld  $0x3,%xmm2
movdqa %xmm5,%xmm0
psrld  $0x3,%xmm0
paddd  %xmm7,%xmm0
paddd  %xmm7,%xmm2
paddd  %xmm7,%xmm1
paddd  %xmm7,%xmm4
pand   %xmm14,%xmm4
pand   %xmm14,%xmm1
pand   %xmm14,%xmm2
pand   %xmm14,%xmm0
pcmpeqd %xmm15,%xmm0
pcmpeqd %xmm15,%xmm2
packssdw %xmm2,%xmm0
pcmpeqd %xmm15,%xmm1
pcmpeqd %xmm15,%xmm4
packssdw %xmm4,%xmm1
packsswb %xmm1,%xmm0
pandn  %xmm12,%xmm0
movdqu %xmm0,-0x10(%rbx,%rbp,1)
movdqu %xmm0,(%rbx,%rbp,1)
add    $0x20,%rbp
paddd  %xmm13,%xmm5
paddd  %xmm13,%xmm10
paddd  %xmm13,%xmm3
paddd  %xmm13,%xmm6
add    $0xfffffffffffffffe,%rdi
jne    1530 <initbuf+0x420>
test   $0x1,%r12b
je     163a <initbuf+0x52a>
psrld  $0x3,%xmm6
psrld  $0x3,%xmm3
psrld  $0x3,%xmm10
psrld  $0x3,%xmm5
paddd  %xmm7,%xmm5
paddd  %xmm7,%xmm10
paddd  %xmm7,%xmm3
paddd  %xmm7,%xmm6
pand   %xmm14,%xmm6
pand   %xmm14,%xmm3
pand   %xmm14,%xmm10
pand   %xmm14,%xmm5
pcmpeqd %xmm15,%xmm5
pcmpeqd %xmm15,%xmm10
packssdw %xmm10,%xmm5
pcmpeqd %xmm15,%xmm3
pcmpeqd %xmm15,%xmm6
packssdw %xmm6,%xmm3
packsswb %xmm3,%xmm5
add    %rax,%rbp
pandn  %xmm12,%xmm5
movdqu %xmm5,(%r11,%rbp,1)
mov    %r9,%rdi
cmp    %rcx,%r9
je     14b0 <initbuf+0x3a0>
add    %r11,%rax
nopl   0x0(%rax)
mov    %edi,%ebx
shr    $0x3,%ebx
add    %edx,%ebx
and    $0x1,%ebx
cmovne %r8d,%ebx
mov    %bl,(%rax,%rdi,1)
add    $0x1,%rdi
cmp    %rdi,%rcx
jne    1650 <initbuf+0x540>
jmp    14b0 <initbuf+0x3a0>
xor    %ebp,%ebp
movdqa %xmm11,%xmm5
movdqa %xmm8,%xmm10
movdqa %xmm9,%xmm3
movdqa 0x978(%rip),%xmm6
test   $0x1,%r12b
jne    15d1 <initbuf+0x4c1>
jmp    163a <initbuf+0x52a>
cmp    $0x11,%r13d
jl     1714 <initbuf+0x604>
mov    $0x10,%r9d
jmp    16b9 <initbuf+0x5a9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r9d
cmp    %r13d,%r9d
je     1714 <initbuf+0x604>
test   %r14d,%r14d
jle    16b0 <initbuf+0x5a0>
mov    %r11,%rbp
mov    %r9d,%ecx
not    %ecx
add    %r13d,%ecx
test   $0x2,%r10b
cmove  %r9d,%ecx
mov    %r9d,%edi
shr    $0x3,%edi
imul   %r14d,%ecx
movslq %ecx,%rbx
imul   %rdx,%rbx
add    %r11,%rbx
xor    %ecx,%ecx
jmp    16fc <initbuf+0x5ec>
nopl   0x0(%rax)
add    $0x1,%rcx
add    %rdx,%rbx
cmp    %rcx,%rsi
je     16b0 <initbuf+0x5a0>
mov    %ecx,%ebp
shr    $0x3,%ebp
add    %edi,%ebp
test   $0x1,%bpl
je     16f0 <initbuf+0x5e0>
movb   $0xff,(%rbx,%rax,1)
movb   $0xff,(%rbx,%r8,1)
jmp    16f0 <initbuf+0x5e0>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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