#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 */
unsigned char abs(unsigned char);
void aom_post_proc_down_and_across_mb_row_c(unsigned char *src_ptr,
                                            unsigned char *dst_ptr,
                                            int src_pixels_per_line,
                                            int dst_pixels_per_line, int cols,
                                            unsigned char *f, int size) {
  unsigned char *p_src, *p_dst;
  int row;
  int col;
  unsigned char v;
  unsigned char d[4];
  for (row = 0; row < size; row++) {
    p_src = src_ptr;
    p_dst = dst_ptr;
    for (col = 0; col < cols; col++) {
      unsigned char p_above2 = p_src[col - 2 * src_pixels_per_line];
      unsigned char p_above1 = p_src[col - src_pixels_per_line];
      unsigned char p_below1 = p_src[col + src_pixels_per_line];
      unsigned char p_below2 = p_src[col + 2 * src_pixels_per_line];
      v = p_src[col];
      if ((abs(v - p_above2) < f[col]) && (abs(v - p_above1) < f[col]) &&
          (abs(v - p_below1) < f[col]) && (abs(v - p_below2) < f[col])) {
        unsigned char k1, k2, k3;
        k1 = (p_above2 + p_above1 + 1) >> 1;
        k2 = (p_below2 + p_below1 + 1) >> 1;
        k3 = (k1 + k2 + 1) >> 1;
        v = (k3 + v + 1) >> 1;
      }
      p_dst[col] = v;
    }
    p_src = dst_ptr;
    p_dst = dst_ptr;
    p_src[-2] = p_src[-1] = p_src[0];
    p_src[cols] = p_src[cols + 1] = p_src[cols - 1];
    for (col = 0; col < cols; col++) {
      v = p_src[col];
      if ((abs(v - p_src[col - 2]) < f[col]) &&
          (abs(v - p_src[col - 1]) < f[col]) &&
          (abs(v - p_src[col + 1]) < f[col]) &&
          (abs(v - p_src[col + 2]) < f[col])) {
        unsigned char k1, k2, k3;
        k1 = (p_src[col - 2] + p_src[col - 1] + 1) >> 1;
        k2 = (p_src[col + 2] + p_src[col + 1] + 1) >> 1;
        k3 = (k1 + k2 + 1) >> 1;
        v = (k3 + v + 1) >> 1;
      }
      d[col & 3] = v;
      if (col >= 2)
        p_dst[col - 2] = d[(col - 2) & 3];
    }
    p_dst[col - 2] = d[(col - 2) & 3];
    p_dst[col - 1] = d[(col - 1) & 3];
    src_ptr += src_pixels_per_line;
    dst_ptr += dst_pixels_per_line;
  }
}


x86 assembly (clang, -O0):
<aom_post_proc_down_and_across_mb_row_c>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9,-0x28(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1558 <aom_post_proc_down_and_across_mb_row_c+0x448>
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    12d7 <aom_post_proc_down_and_across_mb_row_c+0x1c7>
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
mov    -0x14(%rbp),%edx
shl    $0x1,%edx
sub    %edx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x46(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    -0x14(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x47(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    -0x14(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x48(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
mov    -0x14(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x49(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x41(%rbp)
movzbl -0x41(%rbp),%eax
movzbl -0x46(%rbp),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    12bb <aom_post_proc_down_and_across_mb_row_c+0x1ab>
movzbl -0x41(%rbp),%eax
movzbl -0x47(%rbp),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    12bb <aom_post_proc_down_and_across_mb_row_c+0x1ab>
movzbl -0x41(%rbp),%eax
movzbl -0x48(%rbp),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    12bb <aom_post_proc_down_and_across_mb_row_c+0x1ab>
movzbl -0x41(%rbp),%eax
movzbl -0x49(%rbp),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    12bb <aom_post_proc_down_and_across_mb_row_c+0x1ab>
movzbl -0x46(%rbp),%eax
movzbl -0x47(%rbp),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x4a(%rbp)
movzbl -0x49(%rbp),%eax
movzbl -0x48(%rbp),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x4b(%rbp)
movzbl -0x4a(%rbp),%eax
movzbl -0x4b(%rbp),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x4c(%rbp)
movzbl -0x4c(%rbp),%eax
movzbl -0x41(%rbp),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%dl
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    115b <aom_post_proc_down_and_across_mb_row_c+0x4b>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%cl
mov    -0x30(%rbp),%rax
mov    %cl,-0x1(%rax)
mov    -0x30(%rbp),%rax
mov    %cl,-0x2(%rax)
mov    -0x30(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x30(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    14ea <aom_post_proc_down_and_across_mb_row_c+0x3da>
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x41(%rbp)
movzbl -0x41(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%edx
sub    $0x2,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    149f <aom_post_proc_down_and_across_mb_row_c+0x38f>
movzbl -0x41(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    149f <aom_post_proc_down_and_across_mb_row_c+0x38f>
movzbl -0x41(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    149f <aom_post_proc_down_and_across_mb_row_c+0x38f>
movzbl -0x41(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
movzbl %al,%edi
call   1030 <abs@plt>
movzbl %al,%eax
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jge    149f <aom_post_proc_down_and_across_mb_row_c+0x38f>
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x4d(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x4e(%rbp)
movzbl -0x4d(%rbp),%eax
movzbl -0x4e(%rbp),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x4f(%rbp)
movzbl -0x4f(%rbp),%eax
movzbl -0x41(%rbp),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%cl
mov    -0x40(%rbp),%eax
and    $0x3,%eax
cltq
mov    %cl,-0x45(%rbp,%rax,1)
cmpl   $0x2,-0x40(%rbp)
jl     14d7 <aom_post_proc_down_and_across_mb_row_c+0x3c7>
mov    -0x40(%rbp),%eax
sub    $0x2,%eax
and    $0x3,%eax
cltq
mov    -0x45(%rbp,%rax,1),%dl
mov    -0x38(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    14dc <aom_post_proc_down_and_across_mb_row_c+0x3cc>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    132d <aom_post_proc_down_and_across_mb_row_c+0x21d>
mov    -0x40(%rbp),%eax
sub    $0x2,%eax
and    $0x3,%eax
cltq
mov    -0x45(%rbp,%rax,1),%dl
mov    -0x38(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
sub    $0x1,%eax
and    $0x3,%eax
cltq
mov    -0x45(%rbp,%rax,1),%dl
mov    -0x38(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1138 <aom_post_proc_down_and_across_mb_row_c+0x28>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<aom_post_proc_down_and_across_mb_row_c>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x20,%rsp
mov    %rsi,-0x40(%rsp)
mov    %rdi,-0x48(%rsp)
cmpl   $0x0,0x58(%rsp)
jle    196c <aom_post_proc_down_and_across_mb_row_c+0x86c>
mov    %r8d,%r10d
movslq %r8d,%rax
movslq %edx,%rsi
add    %edx,%edx
movslq %ecx,%rdi
movslq %edx,%rcx
mov    %rax,-0x28(%rsp)
mov    %eax,%r13d
lea    (%rcx,%r13,1),%rax
mov    %rax,0x18(%rsp)
lea    (%rsi,%r13,1),%rax
mov    %rax,0x10(%rsp)
mov    %r13,%rax
sub    %rsi,%rax
mov    %rax,0x8(%rsp)
mov    %r13,%rax
sub    %rcx,%rax
mov    %rax,(%rsp)
lea    (%r9,%r13,1),%rax
mov    %rax,-0x8(%rsp)
mov    %r13d,%eax
and    $0xfffffff0,%eax
mov    %rax,-0x50(%rsp)
mov    %r13d,%eax
and    $0xfffffff8,%eax
mov    %rax,-0x10(%rsp)
mov    -0x48(%rsp),%r12
mov    %r12,%r8
sub    %rcx,%r8
mov    %r12,%r11
sub    %rsi,%r11
mov    %rsi,-0x18(%rsp)
lea    (%r12,%rsi,1),%rax
pxor   %xmm10,%xmm10
pcmpeqd %xmm11,%xmm11
movdqa 0xe51(%rip),%xmm9
movdqa 0xe58(%rip),%xmm8
mov    %rcx,-0x38(%rsp)
add    %r12,%rcx
mov    %rcx,-0x68(%rsp)
mov    %rax,%rcx
xor    %edx,%edx
mov    -0x40(%rsp),%r14
mov    %rdi,-0x30(%rsp)
mov    %r10d,-0x6c(%rsp)
jmp    124e <aom_post_proc_down_and_across_mb_row_c+0x14e>
nopl   0x0(%rax,%rax,1)
mov    (%r14),%al
mov    %al,-0x1(%r14)
mov    %al,-0x2(%r14)
mov    -0x28(%rsp),%rcx
mov    -0x1(%r14,%rcx,1),%al
mov    %al,0x1(%r14,%rcx,1)
mov    %al,(%r14,%rcx,1)
xor    %eax,%eax
cltq
lea    -0x2(%rax),%rcx
and    $0x3,%ecx
mov    -0x70(%rsp,%rcx,1),%cl
mov    %cl,-0x2(%r14,%rax,1)
lea    -0x1(%rax),%rcx
and    $0x3,%ecx
mov    -0x70(%rsp,%rcx,1),%cl
mov    %cl,-0x1(%r14,%rax,1)
mov    -0x18(%rsp),%rax
add    %rax,%r12
add    %rdi,%r14
add    $0x1,%rdx
add    %rax,%r8
add    %rax,%r11
mov    -0x60(%rsp),%rcx
add    %rax,%rcx
add    %rax,-0x68(%rsp)
cmp    0x58(%rsp),%edx
je     196c <aom_post_proc_down_and_across_mb_row_c+0x86c>
mov    %rcx,-0x60(%rsp)
test   %r10d,%r10d
jle    11e0 <aom_post_proc_down_and_across_mb_row_c+0xe0>
cmp    $0x8,%r10d
mov    %r11,-0x78(%rsp)
mov    %rdx,-0x20(%rsp)
jae    1270 <aom_post_proc_down_and_across_mb_row_c+0x170>
xor    %r15d,%r15d
jmp    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
mov    %rdx,%rax
imul   %rdi,%rax
add    %r13,%rax
add    -0x40(%rsp),%rax
mov    -0x18(%rsp),%rsi
imul   %rsi,%rdx
lea    (%rdx,%r13,1),%rdi
mov    -0x48(%rsp),%r10
add    %r10,%rdi
mov    -0x38(%rsp),%rcx
add    %rdx,%rcx
add    %r10,%rcx
mov    %rcx,-0x58(%rsp)
mov    0x18(%rsp),%rcx
lea    (%rcx,%rdx,1),%rbx
add    %r10,%rbx
lea    (%rdx,%rsi,1),%rbp
add    %r10,%rbp
mov    0x10(%rsp),%rcx
lea    (%rcx,%rdx,1),%r15
add    %r10,%r15
mov    %rdx,%rcx
sub    %rsi,%rcx
add    %r10,%rcx
mov    0x8(%rsp),%rsi
lea    (%rsi,%rdx,1),%r11
add    %r10,%r11
mov    (%rsp),%rsi
add    %rdx,%rsi
sub    -0x38(%rsp),%rdx
add    %r10,%rdx
add    %r10,%rsi
cmp    %rdi,%r14
setb   %r10b
cmp    %rax,%r12
setb   -0x79(%rsp)
cmp    %rbx,%r14
setb   %bl
cmp    %rax,-0x58(%rsp)
setb   -0x58(%rsp)
cmp    %r15,%r14
setb   %r15b
cmp    %rax,%rbp
setb   -0x7a(%rsp)
cmp    %r11,%r14
setb   %dil
cmp    %rax,%rcx
setb   %cl
cmp    %rsi,%r14
setb   %bpl
cmp    %rax,%rdx
setb   %sil
cmp    -0x8(%rsp),%r14
setb   %dl
cmp    %r9,%rax
seta   %al
test   %r10b,-0x79(%rsp)
jne    1890 <aom_post_proc_down_and_across_mb_row_c+0x790>
and    -0x58(%rsp),%bl
mov    -0x6c(%rsp),%r10d
mov    -0x78(%rsp),%r11
jne    189f <aom_post_proc_down_and_across_mb_row_c+0x79f>
and    -0x7a(%rsp),%r15b
jne    188b <aom_post_proc_down_and_across_mb_row_c+0x78b>
and    %cl,%dil
jne    1886 <aom_post_proc_down_and_across_mb_row_c+0x786>
and    %sil,%bpl
jne    1881 <aom_post_proc_down_and_across_mb_row_c+0x781>
mov    $0x0,%r15d
and    %al,%dl
jne    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
xor    %edx,%edx
cmp    $0x10,%r10d
jb     158f <aom_post_proc_down_and_across_mb_row_c+0x48f>
mov    -0x50(%rsp),%rax
mov    -0x60(%rsp),%rcx
mov    -0x68(%rsp),%rsi
cs nopw 0x0(%rax,%rax,1)
movdqu (%r8,%rdx,1),%xmm0
movdqu (%r11,%rdx,1),%xmm2
movdqu (%rcx,%rdx,1),%xmm12
movdqu (%rsi,%rdx,1),%xmm4
movdqu (%r12,%rdx,1),%xmm13
movdqa %xmm0,%xmm3
punpckhbw %xmm10,%xmm3
movdqa %xmm13,%xmm1
psubb  %xmm0,%xmm1
punpcklbw %xmm10,%xmm0
pxor   %xmm5,%xmm5
psubb  %xmm1,%xmm5
pminub %xmm1,%xmm5
movdqu (%r9,%rdx,1),%xmm14
movdqa %xmm5,%xmm6
pmaxub %xmm14,%xmm6
pcmpeqb %xmm5,%xmm6
movdqa %xmm2,%xmm1
punpckhbw %xmm10,%xmm1
paddw  %xmm3,%xmm1
movdqa %xmm13,%xmm3
psubb  %xmm2,%xmm3
punpcklbw %xmm10,%xmm2
paddw  %xmm0,%xmm2
pxor   %xmm0,%xmm0
psubb  %xmm3,%xmm0
pminub %xmm3,%xmm0
movdqa %xmm0,%xmm3
pmaxub %xmm14,%xmm3
pcmpeqb %xmm0,%xmm3
movdqa %xmm13,%xmm0
psubb  %xmm12,%xmm0
pxor   %xmm5,%xmm5
psubb  %xmm0,%xmm5
pminub %xmm0,%xmm5
movdqa %xmm5,%xmm15
pmaxub %xmm14,%xmm15
pcmpeqb %xmm5,%xmm15
movdqa %xmm13,%xmm5
psubb  %xmm4,%xmm5
pxor   %xmm7,%xmm7
psubb  %xmm5,%xmm7
pminub %xmm5,%xmm7
movdqa %xmm12,%xmm0
punpckhbw %xmm10,%xmm0
pmaxub %xmm7,%xmm14
pcmpeqb %xmm7,%xmm14
movdqa %xmm4,%xmm5
punpckhbw %xmm10,%xmm5
paddw  %xmm0,%xmm5
punpcklbw %xmm10,%xmm12
punpcklbw %xmm10,%xmm4
paddw  %xmm12,%xmm4
psubw  %xmm11,%xmm2
psrlw  $0x1,%xmm2
psubw  %xmm11,%xmm4
psrlw  $0x1,%xmm4
paddw  %xmm2,%xmm4
psubw  %xmm11,%xmm1
psrlw  $0x1,%xmm1
psubw  %xmm11,%xmm5
psrlw  $0x1,%xmm5
paddw  %xmm1,%xmm5
movdqa %xmm13,%xmm0
punpckhbw %xmm10,%xmm0
psubw  %xmm11,%xmm5
psrlw  $0x1,%xmm5
paddw  %xmm0,%xmm5
movdqa %xmm13,%xmm0
punpcklbw %xmm10,%xmm0
psubw  %xmm11,%xmm4
psrlw  $0x1,%xmm4
paddw  %xmm0,%xmm4
psubw  %xmm11,%xmm5
psubw  %xmm11,%xmm4
psrlw  $0x1,%xmm4
psrlw  $0x1,%xmm5
pand   %xmm9,%xmm5
pand   %xmm9,%xmm4
packuswb %xmm5,%xmm4
movdqa %xmm3,%xmm0
pxor   %xmm11,%xmm0
por    %xmm6,%xmm3
pandn  %xmm0,%xmm6
movdqa %xmm15,%xmm0
pandn  %xmm6,%xmm0
pand   %xmm14,%xmm0
pand   %xmm15,%xmm6
por    %xmm3,%xmm6
por    %xmm0,%xmm6
pand   %xmm6,%xmm13
pandn  %xmm4,%xmm6
por    %xmm13,%xmm6
movdqu %xmm6,(%r14,%rdx,1)
add    $0x10,%rdx
cmp    %rdx,%rax
jne    13b0 <aom_post_proc_down_and_across_mb_row_c+0x2b0>
cmp    %r13,%rax
je     1750 <aom_post_proc_down_and_across_mb_row_c+0x650>
mov    -0x50(%rsp),%r15
mov    %r15,%rdx
test   $0x8,%r13b
je     18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
mov    -0x10(%rsp),%rax
mov    -0x60(%rsp),%rcx
mov    -0x68(%rsp),%rsi
xchg   %ax,%ax
movq   (%r8,%rdx,1),%xmm0
movq   (%r11,%rdx,1),%xmm3
movq   (%rcx,%rdx,1),%xmm12
movq   (%rsi,%rdx,1),%xmm5
movq   (%r12,%rdx,1),%xmm13
movdqa %xmm13,%xmm1
psubb  %xmm0,%xmm1
punpcklbw %xmm10,%xmm0
pxor   %xmm7,%xmm7
psubb  %xmm1,%xmm7
pminub %xmm1,%xmm7
movq   (%r9,%rdx,1),%xmm6
movdqa %xmm7,%xmm2
pmaxub %xmm6,%xmm2
pcmpeqb %xmm7,%xmm2
movdqa %xmm13,%xmm1
psubb  %xmm3,%xmm1
punpcklbw %xmm10,%xmm3
paddw  %xmm0,%xmm3
pxor   %xmm7,%xmm7
psubb  %xmm1,%xmm7
pminub %xmm1,%xmm7
movdqa %xmm7,%xmm0
pmaxub %xmm6,%xmm0
pcmpeqb %xmm7,%xmm0
movdqa %xmm13,%xmm1
psubb  %xmm12,%xmm1
pxor   %xmm4,%xmm4
psubb  %xmm1,%xmm4
pminub %xmm1,%xmm4
movdqa %xmm4,%xmm7
pmaxub %xmm6,%xmm7
pcmpeqb %xmm4,%xmm7
movdqa %xmm13,%xmm1
psubb  %xmm5,%xmm1
pxor   %xmm4,%xmm4
psubb  %xmm1,%xmm4
pminub %xmm1,%xmm4
pmaxub %xmm4,%xmm6
pcmpeqb %xmm4,%xmm6
movdqa %xmm7,%xmm1
pxor   %xmm11,%xmm7
punpcklbw %xmm7,%xmm7
punpcklbw %xmm6,%xmm6
pand   %xmm7,%xmm6
punpcklbw %xmm10,%xmm12
punpcklbw %xmm10,%xmm5
paddw  %xmm12,%xmm5
movdqa %xmm13,%xmm4
punpcklbw %xmm10,%xmm4
psubw  %xmm11,%xmm3
psrlw  $0x1,%xmm3
psubw  %xmm11,%xmm5
psrlw  $0x1,%xmm5
paddw  %xmm3,%xmm5
movdqa %xmm2,%xmm3
pxor   %xmm11,%xmm2
punpcklbw %xmm2,%xmm2
psraw  $0x8,%xmm2
psubw  %xmm11,%xmm5
psrlw  $0x1,%xmm5
paddw  %xmm4,%xmm5
movdqa %xmm0,%xmm4
pxor   %xmm11,%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
punpcklbw %xmm1,%xmm1
pand   %xmm2,%xmm0
pand   %xmm0,%xmm6
pand   %xmm1,%xmm0
punpcklbw %xmm10,%xmm4
pand   %xmm2,%xmm4
punpcklbw %xmm3,%xmm3
por    %xmm3,%xmm4
por    %xmm0,%xmm4
por    %xmm6,%xmm4
pand   %xmm9,%xmm4
packuswb %xmm4,%xmm4
psllw  $0x7,%xmm4
pand   %xmm8,%xmm4
pxor   %xmm0,%xmm0
pcmpgtb %xmm4,%xmm0
psubw  %xmm11,%xmm5
psrlw  $0x1,%xmm5
pand   %xmm9,%xmm5
packuswb %xmm5,%xmm5
pand   %xmm0,%xmm13
pandn  %xmm5,%xmm0
por    %xmm13,%xmm0
movq   %xmm0,(%r14,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rax
jne    15a0 <aom_post_proc_down_and_across_mb_row_c+0x4a0>
mov    %rax,%r15
cmp    %r13,%rax
jne    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
xchg   %ax,%ax
mov    (%r14),%al
mov    %al,-0x1(%r14)
mov    %al,-0x2(%r14)
mov    -0x28(%rsp),%rcx
mov    -0x1(%r14,%rcx,1),%al
mov    %al,0x1(%r14,%rcx,1)
mov    %al,(%r14,%rcx,1)
test   %r10d,%r10d
jle    1870 <aom_post_proc_down_and_across_mb_row_c+0x770>
xor    %edx,%edx
jmp    178d <aom_post_proc_down_and_across_mb_row_c+0x68d>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    %rdx,%r13
je     1860 <aom_post_proc_down_and_across_mb_row_c+0x760>
movzbl (%r14,%rdx,1),%edi
movzbl -0x2(%r14,%rdx,1),%esi
mov    %edi,%ecx
sub    %sil,%cl
mov    %ecx,%ebx
sar    $0x7,%bl
add    %bl,%cl
xor    %bl,%cl
movzbl (%r9,%rdx,1),%ebx
cmp    %bl,%cl
jae    1835 <aom_post_proc_down_and_across_mb_row_c+0x735>
movzbl -0x1(%r14,%rdx,1),%ebp
mov    %edi,%ecx
sub    %bpl,%cl
mov    %ecx,%eax
sar    $0x7,%al
add    %al,%cl
xor    %al,%cl
cmp    %bl,%cl
jae    1835 <aom_post_proc_down_and_across_mb_row_c+0x735>
movzbl 0x1(%r14,%rdx,1),%r11d
mov    %edi,%ecx
sub    %r11b,%cl
mov    %ecx,%eax
sar    $0x7,%al
add    %al,%cl
xor    %al,%cl
cmp    %bl,%cl
jae    1830 <aom_post_proc_down_and_across_mb_row_c+0x730>
movzbl 0x2(%r14,%rdx,1),%r15d
mov    %edi,%eax
sub    %r15b,%al
mov    %eax,%ecx
sar    $0x7,%cl
add    %cl,%al
xor    %cl,%al
cmp    %bl,%al
jae    1830 <aom_post_proc_down_and_across_mb_row_c+0x730>
movzbl %dil,%eax
movzwl %si,%ecx
movzwl %bp,%esi
add    %esi,%ecx
add    $0x1,%ecx
shr    %ecx
movzwl %r11w,%esi
movzwl %r15w,%edi
add    %edi,%esi
add    $0x1,%esi
shr    %esi
add    %esi,%ecx
add    $0x1,%ecx
movzwl %cx,%ecx
shr    %ecx
movzwl %ax,%eax
lea    (%rax,%rcx,1),%edi
add    $0x1,%edi
shr    %edi
mov    -0x78(%rsp),%r11
mov    %edx,%eax
and    $0x3,%eax
mov    %dil,-0x70(%rsp,%rax,1)
cmp    $0x2,%rdx
jb     1780 <aom_post_proc_down_and_across_mb_row_c+0x680>
lea    -0x2(%rdx),%rax
and    $0x3,%eax
movzbl -0x70(%rsp,%rax,1),%eax
mov    %al,-0x2(%r14,%rdx,1)
jmp    1780 <aom_post_proc_down_and_across_mb_row_c+0x680>
nop
mov    %r10d,%eax
jmp    1872 <aom_post_proc_down_and_across_mb_row_c+0x772>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %eax,%eax
mov    -0x30(%rsp),%rdi
mov    -0x20(%rsp),%rdx
jmp    1200 <aom_post_proc_down_and_across_mb_row_c+0x100>
xor    %r15d,%r15d
jmp    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
xor    %r15d,%r15d
jmp    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
xor    %r15d,%r15d
jmp    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
xor    %r15d,%r15d
mov    -0x6c(%rsp),%r10d
mov    -0x78(%rsp),%r11
jmp    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
xor    %r15d,%r15d
jmp    18c1 <aom_post_proc_down_and_across_mb_row_c+0x7c1>
mov    -0x78(%rsp),%r11
nopl   0x0(%rax)
mov    %al,(%r14,%r15,1)
add    $0x1,%r15
cmp    %r15,%r13
je     1750 <aom_post_proc_down_and_across_mb_row_c+0x650>
movzbl (%r8,%r15,1),%edi
movzbl (%r12,%r15,1),%eax
mov    %eax,%ecx
sub    %dil,%cl
mov    %ecx,%ebx
sar    $0x7,%bl
add    %bl,%cl
xor    %bl,%cl
movzbl (%r9,%r15,1),%ebx
cmp    %bl,%cl
jae    18b0 <aom_post_proc_down_and_across_mb_row_c+0x7b0>
movzbl (%r11,%r15,1),%esi
mov    %eax,%ecx
sub    %sil,%cl
mov    %ecx,%edx
sar    $0x7,%dl
add    %dl,%cl
xor    %dl,%cl
cmp    %bl,%cl
jae    18b0 <aom_post_proc_down_and_across_mb_row_c+0x7b0>
mov    -0x60(%rsp),%rcx
movzbl (%rcx,%r15,1),%ebp
mov    %eax,%ecx
sub    %bpl,%cl
mov    %ecx,%edx
sar    $0x7,%dl
add    %dl,%cl
xor    %dl,%cl
cmp    %bl,%cl
jae    18b0 <aom_post_proc_down_and_across_mb_row_c+0x7b0>
mov    -0x68(%rsp),%rcx
movzbl (%rcx,%r15,1),%r11d
mov    %eax,%edx
sub    %r11b,%dl
mov    %edx,%ecx
sar    $0x7,%cl
add    %cl,%dl
xor    %cl,%dl
cmp    %bl,%dl
jae    18a4 <aom_post_proc_down_and_across_mb_row_c+0x7a4>
movzbl %al,%eax
movzwl %di,%ecx
movzwl %si,%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    %ecx
movzwl %bp,%edx
movzwl %r11w,%esi
add    %esi,%edx
add    $0x1,%edx
shr    %edx
add    %edx,%ecx
add    $0x1,%ecx
movzwl %cx,%ecx
shr    %ecx
movzwl %ax,%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
jmp    18a4 <aom_post_proc_down_and_across_mb_row_c+0x7a4>
add    $0x20,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @aom_post_proc_down_and_across_mb_row_c(i8* %0, i8* %1, i32 %2, i32 %3, i32 %4, i8* %5, i32 %6) {
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i8*
%14 = alloca i32
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i32
%18 = alloca i32
%19 = alloca i8
%20 = alloca [4 x i8]
%21 = alloca i8
%22 = alloca i8
%23 = alloca i8
%24 = alloca i8
%25 = alloca i8
%26 = alloca i8
%27 = alloca i8
%28 = alloca i8
%29 = alloca i8
%30 = alloca i8
store i8* %0, i8** %8
store i8* %1, i8** %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i8* %5, i8** %13
store i32 %6, i32* %14
store i32 0, i32* %17
br label %31
31: ; preds = %409, %7
%32 = load i32, i32* %17
%33 = load i32, i32* %14
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %412
35: ; preds = %31
%36 = load i8*, i8** %8
store i8* %36, i8** %15
%37 = load i8*, i8** %9
store i8* %37, i8** %16
store i32 0, i32* %18
br label %38
38: ; preds = %180, %35
%39 = load i32, i32* %18
%40 = load i32, i32* %12
%41 = icmp slt i32 %39, %40
br i1 %41, label %42, label %183
42: ; preds = %38
%43 = load i8*, i8** %15
%44 = load i32, i32* %18
%45 = load i32, i32* %10
%46 = mul nsw i32 2, %45
%47 = sub nsw i32 %44, %46
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i8, i8* %43, i64 %48
%50 = load i8, i8* %49
store i8 %50, i8* %21
%51 = load i8*, i8** %15
%52 = load i32, i32* %18
%53 = load i32, i32* %10
%54 = sub nsw i32 %52, %53
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %51, i64 %55
%57 = load i8, i8* %56
store i8 %57, i8* %22
%58 = load i8*, i8** %15
%59 = load i32, i32* %18
%60 = load i32, i32* %10
%61 = add nsw i32 %59, %60
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %58, i64 %62
%64 = load i8, i8* %63
store i8 %64, i8* %23
%65 = load i8*, i8** %15
%66 = load i32, i32* %18
%67 = load i32, i32* %10
%68 = mul nsw i32 2, %67
%69 = add nsw i32 %66, %68
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %65, i64 %70
%72 = load i8, i8* %71
store i8 %72, i8* %24
%73 = load i8*, i8** %15
%74 = load i32, i32* %18
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i8, i8* %73, i64 %75
%77 = load i8, i8* %76
store i8 %77, i8* %19
%78 = load i8, i8* %19
%79 = zext i8 %78 to i32
%80 = load i8, i8* %21
%81 = zext i8 %80 to i32
%82 = sub nsw i32 %79, %81
%83 = trunc i32 %82 to i8
%84 = call zeroext i8 @abs(i8 zeroext %83)
%85 = zext i8 %84 to i32
%86 = load i8*, i8** %13
%87 = load i32, i32* %18
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %86, i64 %88
%90 = load i8, i8* %89
%91 = zext i8 %90 to i32
%92 = icmp slt i32 %85, %91
br i1 %92, label %93, label %174
93: ; preds = %42
%94 = load i8, i8* %19
%95 = zext i8 %94 to i32
%96 = load i8, i8* %22
%97 = zext i8 %96 to i32
%98 = sub nsw i32 %95, %97
%99 = trunc i32 %98 to i8
%100 = call zeroext i8 @abs(i8 zeroext %99)
%101 = zext i8 %100 to i32
%102 = load i8*, i8** %13
%103 = load i32, i32* %18
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i8, i8* %102, i64 %104
%106 = load i8, i8* %105
%107 = zext i8 %106 to i32
%108 = icmp slt i32 %101, %107
br i1 %108, label %109, label %174
109: ; preds = %93
%110 = load i8, i8* %19
%111 = zext i8 %110 to i32
%112 = load i8, i8* %23
%113 = zext i8 %112 to i32
%114 = sub nsw i32 %111, %113
%115 = trunc i32 %114 to i8
%116 = call zeroext i8 @abs(i8 zeroext %115)
%117 = zext i8 %116 to i32
%118 = load i8*, i8** %13
%119 = load i32, i32* %18
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %118, i64 %120
%122 = load i8, i8* %121
%123 = zext i8 %122 to i32
%124 = icmp slt i32 %117, %123
br i1 %124, label %125, label %174
125: ; preds = %109
%126 = load i8, i8* %19
%127 = zext i8 %126 to i32
%128 = load i8, i8* %24
%129 = zext i8 %128 to i32
%130 = sub nsw i32 %127, %129
%131 = trunc i32 %130 to i8
%132 = call zeroext i8 @abs(i8 zeroext %131)
%133 = zext i8 %132 to i32
%134 = load i8*, i8** %13
%135 = load i32, i32* %18
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds i8, i8* %134, i64 %136
%138 = load i8, i8* %137
%139 = zext i8 %138 to i32
%140 = icmp slt i32 %133, %139
br i1 %140, label %141, label %174
141: ; preds = %125
%142 = load i8, i8* %21
%143 = zext i8 %142 to i32
%144 = load i8, i8* %22
%145 = zext i8 %144 to i32
%146 = add nsw i32 %143, %145
%147 = add nsw i32 %146, 1
%148 = ashr i32 %147, 1
%149 = trunc i32 %148 to i8
store i8 %149, i8* %25
%150 = load i8, i8* %24
%151 = zext i8 %150 to i32
%152 = load i8, i8* %23
%153 = zext i8 %152 to i32
%154 = add nsw i32 %151, %153
%155 = add nsw i32 %154, 1
%156 = ashr i32 %155, 1
%157 = trunc i32 %156 to i8
store i8 %157, i8* %26
%158 = load i8, i8* %25
%159 = zext i8 %158 to i32
%160 = load i8, i8* %26
%161 = zext i8 %160 to i32
%162 = add nsw i32 %159, %161
%163 = add nsw i32 %162, 1
%164 = ashr i32 %163, 1
%165 = trunc i32 %164 to i8
store i8 %165, i8* %27
%166 = load i8, i8* %27
%167 = zext i8 %166 to i32
%168 = load i8, i8* %19
%169 = zext i8 %168 to i32
%170 = add nsw i32 %167, %169
%171 = add nsw i32 %170, 1
%172 = ashr i32 %171, 1
%173 = trunc i32 %172 to i8
store i8 %173, i8* %19
br label %174
174: ; preds = %141, %125, %109, %93, %42
%175 = load i8, i8* %19
%176 = load i8*, i8** %16
%177 = load i32, i32* %18
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i8, i8* %176, i64 %178
store i8 %175, i8* %179
br label %180
180: ; preds = %174
%181 = load i32, i32* %18
%182 = add nsw i32 %181, 1
store i32 %182, i32* %18
br label %38
183: ; preds = %38
%184 = load i8*, i8** %9
store i8* %184, i8** %15
%185 = load i8*, i8** %9
store i8* %185, i8** %16
%186 = load i8*, i8** %15
%187 = getelementptr inbounds i8, i8* %186, i64 0
%188 = load i8, i8* %187
%189 = load i8*, i8** %15
%190 = getelementptr inbounds i8, i8* %189, i64 -1
store i8 %188, i8* %190
%191 = load i8*, i8** %15
%192 = getelementptr inbounds i8, i8* %191, i64 -2
store i8 %188, i8* %192
%193 = load i8*, i8** %15
%194 = load i32, i32* %12
%195 = sub nsw i32 %194, 1
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds i8, i8* %193, i64 %196
%198 = load i8, i8* %197
%199 = load i8*, i8** %15
%200 = load i32, i32* %12
%201 = add nsw i32 %200, 1
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds i8, i8* %199, i64 %202
store i8 %198, i8* %203
%204 = load i8*, i8** %15
%205 = load i32, i32* %12
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds i8, i8* %204, i64 %206
store i8 %198, i8* %207
store i32 0, i32* %18
br label %208
208: ; preds = %375, %183
%209 = load i32, i32* %18
%210 = load i32, i32* %12
%211 = icmp slt i32 %209, %210
br i1 %211, label %212, label %378
212: ; preds = %208
%213 = load i8*, i8** %15
%214 = load i32, i32* %18
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds i8, i8* %213, i64 %215
%217 = load i8, i8* %216
store i8 %217, i8* %19
%218 = load i8, i8* %19
%219 = zext i8 %218 to i32
%220 = load i8*, i8** %15
%221 = load i32, i32* %18
%222 = sub nsw i32 %221, 2
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds i8, i8* %220, i64 %223
%225 = load i8, i8* %224
%226 = zext i8 %225 to i32
%227 = sub nsw i32 %219, %226
%228 = trunc i32 %227 to i8
%229 = call zeroext i8 @abs(i8 zeroext %228)
%230 = zext i8 %229 to i32
%231 = load i8*, i8** %13
%232 = load i32, i32* %18
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %231, i64 %233
%235 = load i8, i8* %234
%236 = zext i8 %235 to i32
%237 = icmp slt i32 %230, %236
br i1 %237, label %238, label %354
238: ; preds = %212
%239 = load i8, i8* %19
%240 = zext i8 %239 to i32
%241 = load i8*, i8** %15
%242 = load i32, i32* %18
%243 = sub nsw i32 %242, 1
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i8, i8* %241, i64 %244
%246 = load i8, i8* %245
%247 = zext i8 %246 to i32
%248 = sub nsw i32 %240, %247
%249 = trunc i32 %248 to i8
%250 = call zeroext i8 @abs(i8 zeroext %249)
%251 = zext i8 %250 to i32
%252 = load i8*, i8** %13
%253 = load i32, i32* %18
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds i8, i8* %252, i64 %254
%256 = load i8, i8* %255
%257 = zext i8 %256 to i32
%258 = icmp slt i32 %251, %257
br i1 %258, label %259, label %354
259: ; preds = %238
%260 = load i8, i8* %19
%261 = zext i8 %260 to i32
%262 = load i8*, i8** %15
%263 = load i32, i32* %18
%264 = add nsw i32 %263, 1
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds i8, i8* %262, i64 %265
%267 = load i8, i8* %266
%268 = zext i8 %267 to i32
%269 = sub nsw i32 %261, %268
%270 = trunc i32 %269 to i8
%271 = call zeroext i8 @abs(i8 zeroext %270)
%272 = zext i8 %271 to i32
%273 = load i8*, i8** %13
%274 = load i32, i32* %18
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds i8, i8* %273, i64 %275
%277 = load i8, i8* %276
%278 = zext i8 %277 to i32
%279 = icmp slt i32 %272, %278
br i1 %279, label %280, label %354
280: ; preds = %259
%281 = load i8, i8* %19
%282 = zext i8 %281 to i32
%283 = load i8*, i8** %15
%284 = load i32, i32* %18
%285 = add nsw i32 %284, 2
%286 = sext i32 %285 to i64
%287 = getelementptr inbounds i8, i8* %283, i64 %286
%288 = load i8, i8* %287
%289 = zext i8 %288 to i32
%290 = sub nsw i32 %282, %289
%291 = trunc i32 %290 to i8
%292 = call zeroext i8 @abs(i8 zeroext %291)
%293 = zext i8 %292 to i32
%294 = load i8*, i8** %13
%295 = load i32, i32* %18
%296 = sext i32 %295 to i64
%297 = getelementptr inbounds i8, i8* %294, i64 %296
%298 = load i8, i8* %297
%299 = zext i8 %298 to i32
%300 = icmp slt i32 %293, %299
br i1 %300, label %301, label %354
301: ; preds = %280
%302 = load i8*, i8** %15
%303 = load i32, i32* %18
%304 = sub nsw i32 %303, 2
%305 = sext i32 %304 to i64
%306 = getelementptr inbounds i8, i8* %302, i64 %305
%307 = load i8, i8* %306
%308 = zext i8 %307 to i32
%309 = load i8*, i8** %15
%310 = load i32, i32* %18
%311 = sub nsw i32 %310, 1
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds i8, i8* %309, i64 %312
%314 = load i8, i8* %313
%315 = zext i8 %314 to i32
%316 = add nsw i32 %308, %315
%317 = add nsw i32 %316, 1
%318 = ashr i32 %317, 1
%319 = trunc i32 %318 to i8
store i8 %319, i8* %28
%320 = load i8*, i8** %15
%321 = load i32, i32* %18
%322 = add nsw i32 %321, 2
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds i8, i8* %320, i64 %323
%325 = load i8, i8* %324
%326 = zext i8 %325 to i32
%327 = load i8*, i8** %15
%328 = load i32, i32* %18
%329 = add nsw i32 %328, 1
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds i8, i8* %327, i64 %330
%332 = load i8, i8* %331
%333 = zext i8 %332 to i32
%334 = add nsw i32 %326, %333
%335 = add nsw i32 %334, 1
%336 = ashr i32 %335, 1
%337 = trunc i32 %336 to i8
store i8 %337, i8* %29
%338 = load i8, i8* %28
%339 = zext i8 %338 to i32
%340 = load i8, i8* %29
%341 = zext i8 %340 to i32
%342 = add nsw i32 %339, %341
%343 = add nsw i32 %342, 1
%344 = ashr i32 %343, 1
%345 = trunc i32 %344 to i8
store i8 %345, i8* %30
%346 = load i8, i8* %30
%347 = zext i8 %346 to i32
%348 = load i8, i8* %19
%349 = zext i8 %348 to i32
%350 = add nsw i32 %347, %349
%351 = add nsw i32 %350, 1
%352 = ashr i32 %351, 1
%353 = trunc i32 %352 to i8
store i8 %353, i8* %19
br label %354
354: ; preds = %301, %280, %259, %238, %212
%355 = load i8, i8* %19
%356 = load i32, i32* %18
%357 = and i32 %356, 3
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds [4 x i8], [4 x i8]* %20, i64 0, i64 %358
store i8 %355, i8* %359
%360 = load i32, i32* %18
%361 = icmp sge i32 %360, 2
br i1 %361, label %362, label %374
362: ; preds = %354
%363 = load i32, i32* %18
%364 = sub nsw i32 %363, 2
%365 = and i32 %364, 3
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds [4 x i8], [4 x i8]* %20, i64 0, i64 %366
%368 = load i8, i8* %367
%369 = load i8*, i8** %16
%370 = load i32, i32* %18
%371 = sub nsw i32 %370, 2
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds i8, i8* %369, i64 %372
store i8 %368, i8* %373
br label %374
374: ; preds = %362, %354
br label %375
375: ; preds = %374
%376 = load i32, i32* %18
%377 = add nsw i32 %376, 1
store i32 %377, i32* %18
br label %208
378: ; preds = %208
%379 = load i32, i32* %18
%380 = sub nsw i32 %379, 2
%381 = and i32 %380, 3
%382 = sext i32 %381 to i64
%383 = getelementptr inbounds [4 x i8], [4 x i8]* %20, i64 0, i64 %382
%384 = load i8, i8* %383
%385 = load i8*, i8** %16
%386 = load i32, i32* %18
%387 = sub nsw i32 %386, 2
%388 = sext i32 %387 to i64
%389 = getelementptr inbounds i8, i8* %385, i64 %388
store i8 %384, i8* %389
%390 = load i32, i32* %18
%391 = sub nsw i32 %390, 1
%392 = and i32 %391, 3
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds [4 x i8], [4 x i8]* %20, i64 0, i64 %393
%395 = load i8, i8* %394
%396 = load i8*, i8** %16
%397 = load i32, i32* %18
%398 = sub nsw i32 %397, 1
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds i8, i8* %396, i64 %399
store i8 %395, i8* %400
%401 = load i32, i32* %10
%402 = load i8*, i8** %8
%403 = sext i32 %401 to i64
%404 = getelementptr inbounds i8, i8* %402, i64 %403
store i8* %404, i8** %8
%405 = load i32, i32* %11
%406 = load i8*, i8** %9
%407 = sext i32 %405 to i64
%408 = getelementptr inbounds i8, i8* %406, i64 %407
store i8* %408, i8** %9
br label %409
409: ; preds = %378
%410 = load i32, i32* %17
%411 = add nsw i32 %410, 1
store i32 %411, i32* %17
br label %31
412: ; preds = %31
ret void
}

LLVM IR (-O2):
define void @aom_post_proc_down_and_across_mb_row_c(i8* nocapture %0, i8* nocapture %1, i32 %2, i32 %3, i32 %4, i8* nocapture %5, i32 %6) {
%8 = alloca [4 x i8]
%9 = getelementptr inbounds [4 x i8], [4 x i8]* %8, i64 0, i64 0
%10 = icmp sgt i32 %6, 0
br i1 %10, label %11, label %396
11: ; preds = %7
%12 = icmp sgt i32 %4, 0
%13 = shl nsw i32 %2, 1
%14 = add nsw i32 %4, -1
%15 = sext i32 %14 to i64
%16 = add nsw i32 %4, 1
%17 = sext i32 %16 to i64
%18 = sext i32 %4 to i64
%19 = sext i32 %2 to i64
%20 = sext i32 %3 to i64
%21 = sext i32 %13 to i64
%22 = zext i32 %4 to i64
%23 = zext i32 %4 to i64
%24 = add nsw i64 %21, %22
%25 = add nsw i64 %19, %22
%26 = sub nsw i64 %22, %19
%27 = sub nsw i64 %22, %21
%28 = getelementptr i8, i8* %5, i64 %22
%29 = icmp ult i32 %4, 8
%30 = icmp ult i32 %4, 16
%31 = and i64 %22, 4294967280
%32 = icmp eq i64 %31, %22
%33 = and i64 %22, 8
%34 = icmp eq i64 %33, 0
%35 = and i64 %22, 4294967288
%36 = icmp eq i64 %35, %22
br label %37
37: ; preds = %11, %375
%38 = phi i64 [ 0, %11 ], [ %395, %375 ]
%39 = phi i8* [ %0, %11 ], [ %391, %375 ]
%40 = phi i8* [ %1, %11 ], [ %392, %375 ]
%41 = phi i32 [ 0, %11 ], [ %393, %375 ]
%42 = mul i64 %38, %20
%43 = add i64 %42, %22
%44 = getelementptr i8, i8* %1, i64 %43
%45 = mul i64 %38, %19
%46 = add i64 %45, %22
%47 = getelementptr i8, i8* %0, i64 %46
%48 = add i64 %45, %21
%49 = getelementptr i8, i8* %0, i64 %48
%50 = add i64 %24, %45
%51 = getelementptr i8, i8* %0, i64 %50
%52 = add i64 %45, %19
%53 = getelementptr i8, i8* %0, i64 %52
%54 = add i64 %25, %45
%55 = getelementptr i8, i8* %0, i64 %54
%56 = sub i64 %45, %19
%57 = getelementptr i8, i8* %0, i64 %56
%58 = add i64 %26, %45
%59 = getelementptr i8, i8* %0, i64 %58
%60 = sub i64 %45, %21
%61 = getelementptr i8, i8* %0, i64 %60
%62 = add i64 %27, %45
%63 = getelementptr i8, i8* %0, i64 %62
br i1 %12, label %64, label %237
64: ; preds = %37
br i1 %29, label %235, label %65
65: ; preds = %64
%66 = icmp ult i8* %40, %47
%67 = icmp ult i8* %39, %44
%68 = and i1 %66, %67
%69 = icmp ult i8* %40, %51
%70 = icmp ult i8* %49, %44
%71 = and i1 %69, %70
%72 = or i1 %68, %71
%73 = icmp ult i8* %40, %55
%74 = icmp ult i8* %53, %44
%75 = and i1 %73, %74
%76 = or i1 %72, %75
%77 = icmp ult i8* %40, %59
%78 = icmp ult i8* %57, %44
%79 = and i1 %77, %78
%80 = or i1 %76, %79
%81 = icmp ult i8* %40, %63
%82 = icmp ult i8* %61, %44
%83 = and i1 %81, %82
%84 = or i1 %80, %83
%85 = icmp ult i8* %40, %28
%86 = icmp ugt i8* %44, %5
%87 = and i1 %85, %86
%88 = or i1 %84, %87
br i1 %88, label %235, label %89
89: ; preds = %65
br i1 %30, label %162, label %90
90: ; preds = %89, %90
%91 = phi i64 [ %158, %90 ], [ 0, %89 ]
%92 = sub nsw i64 %91, %21
%93 = getelementptr inbounds i8, i8* %39, i64 %92
%94 = bitcast i8* %93 to <16 x i8>*
%95 = load <16 x i8>, <16 x i8>* %94
%96 = sub nsw i64 %91, %19
%97 = getelementptr inbounds i8, i8* %39, i64 %96
%98 = bitcast i8* %97 to <16 x i8>*
%99 = load <16 x i8>, <16 x i8>* %98
%100 = add nsw i64 %91, %19
%101 = getelementptr inbounds i8, i8* %39, i64 %100
%102 = bitcast i8* %101 to <16 x i8>*
%103 = load <16 x i8>, <16 x i8>* %102
%104 = add nsw i64 %91, %21
%105 = getelementptr inbounds i8, i8* %39, i64 %104
%106 = bitcast i8* %105 to <16 x i8>*
%107 = load <16 x i8>, <16 x i8>* %106
%108 = getelementptr inbounds i8, i8* %39, i64 %91
%109 = bitcast i8* %108 to <16 x i8>*
%110 = load <16 x i8>, <16 x i8>* %109
%111 = zext <16 x i8> %110 to <16 x i16>
%112 = zext <16 x i8> %95 to <16 x i16>
%113 = sub <16 x i8> %110, %95
%114 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %113, i1 true)
%115 = getelementptr inbounds i8, i8* %5, i64 %91
%116 = bitcast i8* %115 to <16 x i8>*
%117 = load <16 x i8>, <16 x i8>* %116
%118 = icmp ult <16 x i8> %114, %117
%119 = zext <16 x i8> %99 to <16 x i16>
%120 = sub <16 x i8> %110, %99
%121 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %120, i1 true)
%122 = icmp ult <16 x i8> %121, %117
%123 = zext <16 x i8> %103 to <16 x i16>
%124 = sub <16 x i8> %110, %103
%125 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %124, i1 true)
%126 = icmp ult <16 x i8> %125, %117
%127 = sub <16 x i8> %110, %107
%128 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %127, i1 true)
%129 = icmp uge <16 x i8> %128, %117
%130 = zext <16 x i8> %107 to <16 x i16>
%131 = add nuw nsw <16 x i16> %112, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%132 = add nuw nsw <16 x i16> %131, %119
%133 = lshr <16 x i16> %132, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%134 = add nuw nsw <16 x i16> %123, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%135 = add nuw nsw <16 x i16> %134, %130
%136 = lshr <16 x i16> %135, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%137 = add nuw nsw <16 x i16> %133, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%138 = add nuw nsw <16 x i16> %137, %136
%139 = lshr <16 x i16> %138, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%140 = add nuw nsw <16 x i16> %111, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%141 = add nuw nsw <16 x i16> %140, %139
%142 = lshr <16 x i16> %141, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%143 = trunc <16 x i16> %142 to <16 x i8>
%144 = select <16 x i1> %118, <16 x i1> %122, <16 x i1> zeroinitializer
%145 = select <16 x i1> %144, <16 x i1> %126, <16 x i1> zeroinitializer
%146 = select <16 x i1> %145, <16 x i1> %129, <16 x i1> zeroinitializer
%147 = xor <16 x i1> %126, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%148 = select <16 x i1> %144, <16 x i1> %147, <16 x i1> zeroinitializer
%149 = xor <16 x i1> %122, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%150 = select <16 x i1> %118, <16 x i1> %149, <16 x i1> zeroinitializer
%151 = xor <16 x i1> %118, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%152 = select <16 x i1> %151, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <16 x i1> %150
%153 = select <16 x i1> %152, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <16 x i1> %148
%154 = select <16 x i1> %153, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <16 x i1> %146
%155 = select <16 x i1> %154, <16 x i8> %110, <16 x i8> %143
%156 = getelementptr inbounds i8, i8* %40, i64 %91
%157 = bitcast i8* %156 to <16 x i8>*
store <16 x i8> %155, <16 x i8>* %157
%158 = add nuw i64 %91, 16
%159 = icmp eq i64 %158, %31
br i1 %159, label %160, label %90
160: ; preds = %90
br i1 %32, label %302, label %161
161: ; preds = %160
br i1 %34, label %235, label %162
162: ; preds = %89, %161
%163 = phi i64 [ %31, %161 ], [ 0, %89 ]
br label %164
164: ; preds = %164, %162
%165 = phi i64 [ %163, %162 ], [ %232, %164 ]
%166 = sub nsw i64 %165, %21
%167 = getelementptr inbounds i8, i8* %39, i64 %166
%168 = bitcast i8* %167 to <8 x i8>*
%169 = load <8 x i8>, <8 x i8>* %168
%170 = sub nsw i64 %165, %19
%171 = getelementptr inbounds i8, i8* %39, i64 %170
%172 = bitcast i8* %171 to <8 x i8>*
%173 = load <8 x i8>, <8 x i8>* %172
%174 = add nsw i64 %165, %19
%175 = getelementptr inbounds i8, i8* %39, i64 %174
%176 = bitcast i8* %175 to <8 x i8>*
%177 = load <8 x i8>, <8 x i8>* %176
%178 = add nsw i64 %165, %21
%179 = getelementptr inbounds i8, i8* %39, i64 %178
%180 = bitcast i8* %179 to <8 x i8>*
%181 = load <8 x i8>, <8 x i8>* %180
%182 = getelementptr inbounds i8, i8* %39, i64 %165
%183 = bitcast i8* %182 to <8 x i8>*
%184 = load <8 x i8>, <8 x i8>* %183
%185 = zext <8 x i8> %184 to <8 x i16>
%186 = zext <8 x i8> %169 to <8 x i16>
%187 = sub <8 x i8> %184, %169
%188 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> %187, i1 true)
%189 = getelementptr inbounds i8, i8* %5, i64 %165
%190 = bitcast i8* %189 to <8 x i8>*
%191 = load <8 x i8>, <8 x i8>* %190
%192 = icmp ult <8 x i8> %188, %191
%193 = zext <8 x i8> %173 to <8 x i16>
%194 = sub <8 x i8> %184, %173
%195 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> %194, i1 true)
%196 = icmp ult <8 x i8> %195, %191
%197 = zext <8 x i8> %177 to <8 x i16>
%198 = sub <8 x i8> %184, %177
%199 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> %198, i1 true)
%200 = icmp ult <8 x i8> %199, %191
%201 = sub <8 x i8> %184, %181
%202 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> %201, i1 true)
%203 = icmp uge <8 x i8> %202, %191
%204 = zext <8 x i8> %181 to <8 x i16>
%205 = add nuw nsw <8 x i16> %186, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%206 = add nuw nsw <8 x i16> %205, %193
%207 = lshr <8 x i16> %206, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%208 = add nuw nsw <8 x i16> %197, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%209 = add nuw nsw <8 x i16> %208, %204
%210 = lshr <8 x i16> %209, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%211 = add nuw nsw <8 x i16> %207, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%212 = add nuw nsw <8 x i16> %211, %210
%213 = lshr <8 x i16> %212, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%214 = add nuw nsw <8 x i16> %185, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%215 = add nuw nsw <8 x i16> %214, %213
%216 = lshr <8 x i16> %215, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%217 = trunc <8 x i16> %216 to <8 x i8>
%218 = select <8 x i1> %192, <8 x i1> %196, <8 x i1> zeroinitializer
%219 = select <8 x i1> %218, <8 x i1> %200, <8 x i1> zeroinitializer
%220 = select <8 x i1> %219, <8 x i1> %203, <8 x i1> zeroinitializer
%221 = xor <8 x i1> %200, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%222 = select <8 x i1> %218, <8 x i1> %221, <8 x i1> zeroinitializer
%223 = xor <8 x i1> %196, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%224 = select <8 x i1> %192, <8 x i1> %223, <8 x i1> zeroinitializer
%225 = xor <8 x i1> %192, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
%226 = select <8 x i1> %225, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %224
%227 = select <8 x i1> %226, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %222
%228 = select <8 x i1> %227, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %220
%229 = select <8 x i1> %228, <8 x i8> %184, <8 x i8> %217
%230 = getelementptr inbounds i8, i8* %40, i64 %165
%231 = bitcast i8* %230 to <8 x i8>*
store <8 x i8> %229, <8 x i8>* %231
%232 = add nuw i64 %165, 8
%233 = icmp eq i64 %232, %35
br i1 %233, label %234, label %164
234: ; preds = %164
br i1 %36, label %302, label %235
235: ; preds = %65, %64, %161, %234
%236 = phi i64 [ 0, %64 ], [ 0, %65 ], [ %31, %161 ], [ %35, %234 ]
br label %245
237: ; preds = %37
%238 = load i8, i8* %40
%239 = getelementptr inbounds i8, i8* %40, i64 -1
store i8 %238, i8* %239
%240 = getelementptr inbounds i8, i8* %40, i64 -2
store i8 %238, i8* %240
%241 = getelementptr inbounds i8, i8* %40, i64 %15
%242 = load i8, i8* %241
%243 = getelementptr inbounds i8, i8* %40, i64 %17
store i8 %242, i8* %243
%244 = getelementptr inbounds i8, i8* %40, i64 %18
store i8 %242, i8* %244
br label %375
245: ; preds = %235, %297
%246 = phi i64 [ %300, %297 ], [ %236, %235 ]
%247 = sub nsw i64 %246, %21
%248 = getelementptr inbounds i8, i8* %39, i64 %247
%249 = load i8, i8* %248
%250 = sub nsw i64 %246, %19
%251 = getelementptr inbounds i8, i8* %39, i64 %250
%252 = load i8, i8* %251
%253 = add nsw i64 %246, %19
%254 = getelementptr inbounds i8, i8* %39, i64 %253
%255 = load i8, i8* %254
%256 = add nsw i64 %246, %21
%257 = getelementptr inbounds i8, i8* %39, i64 %256
%258 = load i8, i8* %257
%259 = getelementptr inbounds i8, i8* %39, i64 %246
%260 = load i8, i8* %259
%261 = zext i8 %260 to i16
%262 = zext i8 %249 to i16
%263 = sub i8 %260, %249
%264 = tail call i8 @llvm.abs.i8(i8 %263, i1 true)
%265 = getelementptr inbounds i8, i8* %5, i64 %246
%266 = load i8, i8* %265
%267 = icmp ult i8 %264, %266
br i1 %267, label %268, label %297
268: ; preds = %245
%269 = zext i8 %252 to i16
%270 = sub i8 %260, %252
%271 = tail call i8 @llvm.abs.i8(i8 %270, i1 true)
%272 = icmp ult i8 %271, %266
br i1 %272, label %273, label %297
273: ; preds = %268
%274 = zext i8 %255 to i16
%275 = sub i8 %260, %255
%276 = tail call i8 @llvm.abs.i8(i8 %275, i1 true)
%277 = icmp ult i8 %276, %266
br i1 %277, label %278, label %297
278: ; preds = %273
%279 = sub i8 %260, %258
%280 = tail call i8 @llvm.abs.i8(i8 %279, i1 true)
%281 = icmp ult i8 %280, %266
br i1 %281, label %282, label %297
282: ; preds = %278
%283 = zext i8 %258 to i16
%284 = add nuw nsw i16 %262, 1
%285 = add nuw nsw i16 %284, %269
%286 = lshr i16 %285, 1
%287 = add nuw nsw i16 %274, 1
%288 = add nuw nsw i16 %287, %283
%289 = lshr i16 %288, 1
%290 = add nuw nsw i16 %286, 1
%291 = add nuw nsw i16 %290, %289
%292 = lshr i16 %291, 1
%293 = add nuw nsw i16 %261, 1
%294 = add nuw nsw i16 %293, %292
%295 = lshr i16 %294, 1
%296 = trunc i16 %295 to i8
br label %297
297: ; preds = %282, %278, %273, %268, %245
%298 = phi i8 [ %296, %282 ], [ %260, %278 ], [ %260, %273 ], [ %260, %268 ], [ %260, %245 ]
%299 = getelementptr inbounds i8, i8* %40, i64 %246
store i8 %298, i8* %299
%300 = add nuw nsw i64 %246, 1
%301 = icmp eq i64 %300, %22
br i1 %301, label %302, label %245
302: ; preds = %297, %234, %160
%303 = load i8, i8* %40
%304 = getelementptr inbounds i8, i8* %40, i64 -1
store i8 %303, i8* %304
%305 = getelementptr inbounds i8, i8* %40, i64 -2
store i8 %303, i8* %305
%306 = getelementptr inbounds i8, i8* %40, i64 %15
%307 = load i8, i8* %306
%308 = getelementptr inbounds i8, i8* %40, i64 %17
store i8 %307, i8* %308
%309 = getelementptr inbounds i8, i8* %40, i64 %18
store i8 %307, i8* %309
br i1 %12, label %310, label %375
310: ; preds = %302, %372
%311 = phi i64 [ %373, %372 ], [ 0, %302 ]
%312 = getelementptr inbounds i8, i8* %40, i64 %311
%313 = load i8, i8* %312
%314 = zext i8 %313 to i16
%315 = add nsw i64 %311, -2
%316 = getelementptr inbounds i8, i8* %40, i64 %315
%317 = load i8, i8* %316
%318 = sub i8 %313, %317
%319 = tail call i8 @llvm.abs.i8(i8 %318, i1 true)
%320 = getelementptr inbounds i8, i8* %5, i64 %311
%321 = load i8, i8* %320
%322 = icmp ult i8 %319, %321
br i1 %322, label %323, label %363
323: ; preds = %310
%324 = add nsw i64 %311, -1
%325 = getelementptr inbounds i8, i8* %40, i64 %324
%326 = load i8, i8* %325
%327 = sub i8 %313, %326
%328 = tail call i8 @llvm.abs.i8(i8 %327, i1 true)
%329 = icmp ult i8 %328, %321
br i1 %329, label %330, label %363
330: ; preds = %323
%331 = add nuw nsw i64 %311, 1
%332 = getelementptr inbounds i8, i8* %40, i64 %331
%333 = load i8, i8* %332
%334 = sub i8 %313, %333
%335 = tail call i8 @llvm.abs.i8(i8 %334, i1 true)
%336 = icmp ult i8 %335, %321
br i1 %336, label %337, label %363
337: ; preds = %330
%338 = add nuw i64 %311, 2
%339 = and i64 %338, 4294967295
%340 = getelementptr inbounds i8, i8* %40, i64 %339
%341 = load i8, i8* %340
%342 = sub i8 %313, %341
%343 = tail call i8 @llvm.abs.i8(i8 %342, i1 true)
%344 = icmp ult i8 %343, %321
br i1 %344, label %345, label %363
345: ; preds = %337
%346 = zext i8 %317 to i16
%347 = zext i8 %326 to i16
%348 = add nuw nsw i16 %346, 1
%349 = add nuw nsw i16 %348, %347
%350 = lshr i16 %349, 1
%351 = zext i8 %341 to i16
%352 = zext i8 %333 to i16
%353 = add nuw nsw i16 %352, 1
%354 = add nuw nsw i16 %353, %351
%355 = lshr i16 %354, 1
%356 = add nuw nsw i16 %350, 1
%357 = add nuw nsw i16 %356, %355
%358 = lshr i16 %357, 1
%359 = add nuw nsw i16 %314, 1
%360 = add nuw nsw i16 %359, %358
%361 = lshr i16 %360, 1
%362 = trunc i16 %361 to i8
br label %363
363: ; preds = %345, %337, %330, %323, %310
%364 = phi i8 [ %362, %345 ], [ %313, %337 ], [ %313, %330 ], [ %313, %323 ], [ %313, %310 ]
%365 = and i64 %311, 3
%366 = getelementptr inbounds [4 x i8], [4 x i8]* %8, i64 0, i64 %365
store i8 %364, i8* %366
%367 = icmp ugt i64 %311, 1
br i1 %367, label %368, label %372
368: ; preds = %363
%369 = and i64 %315, 3
%370 = getelementptr inbounds [4 x i8], [4 x i8]* %8, i64 0, i64 %369
%371 = load i8, i8* %370
store i8 %371, i8* %316
br label %372
372: ; preds = %363, %368
%373 = add nuw nsw i64 %311, 1
%374 = icmp eq i64 %373, %23
br i1 %374, label %375, label %310
375: ; preds = %372, %302, %237
%376 = phi i32 [ 0, %237 ], [ 0, %302 ], [ %4, %372 ]
%377 = add nsw i32 %376, -2
%378 = and i32 %377, 3
%379 = zext i32 %378 to i64
%380 = getelementptr inbounds [4 x i8], [4 x i8]* %8, i64 0, i64 %379
%381 = load i8, i8* %380
%382 = sext i32 %377 to i64
%383 = getelementptr inbounds i8, i8* %40, i64 %382
store i8 %381, i8* %383
%384 = add nsw i32 %376, -1
%385 = and i32 %384, 3
%386 = zext i32 %385 to i64
%387 = getelementptr inbounds [4 x i8], [4 x i8]* %8, i64 0, i64 %386
%388 = load i8, i8* %387
%389 = sext i32 %384 to i64
%390 = getelementptr inbounds i8, i8* %40, i64 %389
store i8 %388, i8* %390
%391 = getelementptr inbounds i8, i8* %39, i64 %19
%392 = getelementptr inbounds i8, i8* %40, i64 %20
%393 = add nuw nsw i32 %41, 1
%394 = icmp eq i32 %393, %6
%395 = add i64 %38, 1
br i1 %394, label %396, label %37
396: ; preds = %375, %7
ret void
}