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

/* Forward declarations */

/* Type definitions */
typedef scalar_t__ int16_t;

/* Variables and functions */
scalar_t__ calc_filter_sobel(scalar_t__ const, scalar_t__ const,
                             scalar_t__ const, scalar_t__ const,
                             scalar_t__ const, scalar_t__ const,
                             scalar_t__ const, scalar_t__ const,
                             scalar_t__ const);
void filter_sobel_3s16(int16_t *img_sobel, const int16_t *img_in,
                       const int height, const int width, const int skip_ch1,
                       const int skip_ch2, const int skip_ch3) {
  int y, x, index_upper, index_center, index_lower, index_left, index_right;
  for (y = 1; y < (height - 1); y++) {
    index_upper = (y - 1) * width * 3;
    index_center = y * width * 3;
    index_lower = (y + 1) * width * 3;
    for (x = 1; x < (width - 1); x++) {
      if (!skip_ch1) {
        img_sobel[index_center + 3] =
            calc_filter_sobel(img_in[index_upper], img_in[index_upper + 3],
                              img_in[index_upper + 6], img_in[index_center],
                              img_in[index_center + 3],
                              img_in[index_center + 6], img_in[index_lower],
                              img_in[index_lower + 3], img_in[index_lower + 6]);
      } else {
        img_sobel[index_center + 3] = 0;
      }
      index_upper++;
      index_center++;
      index_lower++;
      if (!skip_ch2) {
        img_sobel[index_center + 3] =
            calc_filter_sobel(img_in[index_upper], img_in[index_upper + 3],
                              img_in[index_upper + 6], img_in[index_center],
                              img_in[index_center + 3],
                              img_in[index_center + 6], img_in[index_lower],
                              img_in[index_lower + 3], img_in[index_lower + 6]);
      } else {
        img_sobel[index_center + 3] = 0;
      }
      index_upper++;
      index_center++;
      index_lower++;
      if (!skip_ch3) {
        img_sobel[index_center + 3] =
            calc_filter_sobel(img_in[index_upper], img_in[index_upper + 3],
                              img_in[index_upper + 6], img_in[index_center],
                              img_in[index_center + 3],
                              img_in[index_center + 6], img_in[index_lower],
                              img_in[index_lower + 3], img_in[index_lower + 6]);
      } else {
        img_sobel[index_center + 3] = 0;
      }
      index_upper++;
      index_center++;
      index_lower++;
    }
  }
  index_upper = 0;
  index_lower = (height - 1) * width * 3;
  for (x = 0; x < width; x++) {
    img_sobel[index_upper] = 0;
    img_sobel[index_upper + 1] = 0;
    img_sobel[index_upper + 2] = 0;
    index_upper += 3;
    img_sobel[index_lower] = 0;
    img_sobel[index_lower + 1] = 0;
    img_sobel[index_lower + 2] = 0;
    index_lower += 3;
  }
  index_left = 0;
  index_right = width * 3 - 3;
  for (y = 0; y < height; y++) {
    img_sobel[index_left] = 0;
    ;
    img_sobel[index_left + 1] = 0;
    img_sobel[index_left + 2] = 0;
    index_left += width * 3;
    img_sobel[index_right] = 0;
    ;
    img_sobel[index_right + 1] = 0;
    img_sobel[index_right + 2] = 0;
    index_right += width * 3;
  }
}


x86 assembly (clang, -O0):
<filter_sobel_3s16>:
push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x58,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1492 <filter_sobel_3s16+0x382>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
imul   -0x20(%rbp),%eax
imul   $0x3,%eax,%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
imul   -0x20(%rbp),%eax
imul   $0x3,%eax,%eax
mov    %eax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
imul   -0x20(%rbp),%eax
imul   $0x3,%eax,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    147f <filter_sobel_3s16+0x36f>
cmpl   $0x0,-0x24(%rbp)
jne    1255 <filter_sobel_3s16+0x145>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rsi
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rcx
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%r8d
add    $0x3,%r8d
movslq %r8d,%r8
mov    (%rax,%r8,8),%r8
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%r9d
add    $0x6,%r9d
movslq %r9d,%r9
mov    (%rax,%r9,8),%r9
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%r10
mov    (%rax,%r10,8),%r11
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%r10d
add    $0x3,%r10d
movslq %r10d,%r10
mov    (%rax,%r10,8),%r10
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ebx
add    $0x6,%ebx
movslq %ebx,%rbx
mov    (%rax,%rbx,8),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <calc_filter_sobel@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    126a <filter_sobel_3s16+0x15a>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x0,-0x28(%rbp)
jne    134b <filter_sobel_3s16+0x23b>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rsi
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rcx
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%r8d
add    $0x3,%r8d
movslq %r8d,%r8
mov    (%rax,%r8,8),%r8
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%r9d
add    $0x6,%r9d
movslq %r9d,%r9
mov    (%rax,%r9,8),%r9
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%r10
mov    (%rax,%r10,8),%r11
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%r10d
add    $0x3,%r10d
movslq %r10d,%r10
mov    (%rax,%r10,8),%r10
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ebx
add    $0x6,%ebx
movslq %ebx,%rbx
mov    (%rax,%rbx,8),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <calc_filter_sobel@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    1360 <filter_sobel_3s16+0x250>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x0,0x10(%rbp)
jne    1441 <filter_sobel_3s16+0x331>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rsi
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rcx
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%r8d
add    $0x3,%r8d
movslq %r8d,%r8
mov    (%rax,%r8,8),%r8
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%r9d
add    $0x6,%r9d
movslq %r9d,%r9
mov    (%rax,%r9,8),%r9
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%r10
mov    (%rax,%r10,8),%r11
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%r10d
add    $0x3,%r10d
movslq %r10d,%r10
mov    (%rax,%r10,8),%r10
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ebx
add    $0x6,%ebx
movslq %ebx,%rbx
mov    (%rax,%rbx,8),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <calc_filter_sobel@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    1456 <filter_sobel_3s16+0x346>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    117e <filter_sobel_3s16+0x6e>
jmp    1484 <filter_sobel_3s16+0x374>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1139 <filter_sobel_3s16+0x29>
movl   $0x0,-0x34(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x1,%eax
imul   -0x20(%rbp),%eax
imul   $0x3,%eax,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1550 <filter_sobel_3s16+0x440>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    14b0 <filter_sobel_3s16+0x3a0>
movl   $0x0,-0x40(%rbp)
imul   $0x3,-0x20(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x44(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    160a <filter_sobel_3s16+0x4fa>
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
imul   $0x3,-0x20(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movq   $0x0,(%rax,%rcx,8)
imul   $0x3,-0x20(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1568 <filter_sobel_3s16+0x458>
add    $0x58,%rsp
pop    %rbx
pop    %rbp
ret

x86 assembly (clang, -O2):
<filter_sobel_3s16>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r9d,0x34(%rsp)
mov    %r8d,0x30(%rsp)
lea    -0x1(%rdx),%eax
mov    %eax,0x4(%rsp)
cmp    $0x2,%edx
jle    134b <filter_sobel_3s16+0x23b>
mov    %rdx,0x40(%rsp)
lea    (%rcx,%rcx,1),%eax
lea    (%rax,%rax,2),%eax
mov    %eax,0xc(%rsp)
lea    (%rcx,%rcx,2),%ebx
add    $0x40,%rsi
mov    %rsi,0x48(%rsp)
lea    -0x2(%rcx),%eax
mov    %eax,0x28(%rsp)
mov    $0x1,%eax
xor    %edx,%edx
mov    %rdx,0x10(%rsp)
mov    %ebx,%edx
mov    %ebx,0x8(%rsp)
mov    %rdi,0x18(%rsp)
mov    %rbx,0x58(%rsp)
mov    %rcx,0x50(%rsp)
jmp    11ac <filter_sobel_3s16+0x9c>
nopl   (%rax)
mov    0x58(%rsp),%rbx
add    %ebx,0xc(%rsp)
add    %ebx,0x8(%rsp)
mov    0x10(%rsp),%rax
add    %ebx,%eax
mov    %rax,0x10(%rsp)
mov    0x2c(%rsp),%eax
cmp    0x4(%rsp),%eax
mov    0x50(%rsp),%rcx
je     1357 <filter_sobel_3s16+0x247>
add    $0x1,%eax
mov    %eax,0x2c(%rsp)
cmp    $0x3,%ecx
jl     1180 <filter_sobel_3s16+0x70>
movslq 0x8(%rsp),%rbx
lea    0x5(%rbx),%rax
mov    %rax,0x60(%rsp)
movslq 0x10(%rsp),%rax
mov    0x48(%rsp),%rcx
lea    (%rcx,%rax,8),%rax
mov    %rax,0x20(%rsp)
lea    (%rcx,%rbx,8),%r13
movslq 0xc(%rsp),%rax
lea    (%rcx,%rax,8),%r12
mov    0x28(%rsp),%ebp
xor    %r14d,%r14d
mov    %rbx,0x38(%rsp)
jmp    1220 <filter_sobel_3s16+0x110>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x60(%rsp),%rax
lea    (%rax,%r14,1),%r15
xor    %eax,%eax
mov    %rax,(%rdi,%r15,8)
add    $0x3,%rbx
add    $0x3,%r14
add    $0xffffffff,%ebp
je     1180 <filter_sobel_3s16+0x70>
cmpl   $0x0,0x30(%rsp)
je     1240 <filter_sobel_3s16+0x130>
mov    0x38(%rsp),%rax
lea    (%rax,%r14,1),%r15
add    $0x3,%r15
xor    %eax,%eax
jmp    1288 <filter_sobel_3s16+0x178>
nopl   0x0(%rax,%rax,1)
mov    0x20(%rsp),%rax
mov    -0x40(%rax,%r14,8),%rdi
mov    -0x28(%rax,%r14,8),%rsi
mov    -0x10(%rax,%r14,8),%rdx
lea    0x3(%rbx),%r15
mov    -0x40(%r13,%r14,8),%rcx
mov    -0x28(%r13,%r14,8),%r8
mov    -0x10(%r13,%r14,8),%r9
sub    $0x8,%rsp
push   -0x10(%r12,%r14,8)
push   -0x28(%r12,%r14,8)
push   -0x40(%r12,%r14,8)
call   1030 <calc_filter_sobel@plt>
mov    0x38(%rsp),%rdi
add    $0x20,%rsp
mov    %rax,(%rdi,%r15,8)
cmpl   $0x0,0x34(%rsp)
je     12a0 <filter_sobel_3s16+0x190>
lea    0x4(%rbx),%r15
xor    %eax,%eax
jmp    12ee <filter_sobel_3s16+0x1de>
nopl   0x0(%rax,%rax,1)
mov    0x20(%rsp),%rax
mov    -0x38(%rax,%r14,8),%rdi
mov    -0x20(%rax,%r14,8),%rsi
mov    -0x8(%rax,%r14,8),%rdx
mov    0x38(%rsp),%rax
lea    0x4(%rax,%r14,1),%r15
mov    -0x38(%r13,%r14,8),%rcx
mov    -0x20(%r13,%r14,8),%r8
mov    -0x8(%r13,%r14,8),%r9
sub    $0x8,%rsp
push   -0x8(%r12,%r14,8)
push   -0x20(%r12,%r14,8)
push   -0x38(%r12,%r14,8)
call   1030 <calc_filter_sobel@plt>
mov    0x38(%rsp),%rdi
add    $0x20,%rsp
mov    %rax,(%rdi,%r15,8)
cmpl   $0x0,0xa0(%rsp)
jne    1200 <filter_sobel_3s16+0xf0>
mov    0x20(%rsp),%rax
mov    -0x30(%rax,%r14,8),%rdi
mov    -0x18(%rax,%r14,8),%rsi
mov    (%rax,%r14,8),%rdx
lea    0x5(%rbx),%r15
mov    -0x30(%r13,%r14,8),%rcx
mov    -0x18(%r13,%r14,8),%r8
mov    0x0(%r13,%r14,8),%r9
sub    $0x8,%rsp
push   (%r12,%r14,8)
push   -0x18(%r12,%r14,8)
push   -0x30(%r12,%r14,8)
call   1030 <calc_filter_sobel@plt>
mov    0x38(%rsp),%rdi
add    $0x20,%rsp
jmp    120b <filter_sobel_3s16+0xfb>
lea    (%rcx,%rcx,2),%ebx
test   %ecx,%ecx
jg     1364 <filter_sobel_3s16+0x254>
jmp    13fa <filter_sobel_3s16+0x2ea>
mov    0x40(%rsp),%rdx
test   %ecx,%ecx
jle    13fa <filter_sobel_3s16+0x2ea>
mov    %ebx,%eax
imul   0x4(%rsp),%eax
movslq %eax,%r8
cmp    $0x1,%ecx
jne    137c <filter_sobel_3s16+0x26c>
xor    %eax,%eax
test   $0x1,%cl
jne    13dc <filter_sobel_3s16+0x2cc>
jmp    13fa <filter_sobel_3s16+0x2ea>
mov    %ecx,%ebp
and    $0xfffffffe,%ebp
lea    0x28(%rdi),%rsi
xor    %eax,%eax
xorps  %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movups %xmm0,-0x28(%rsi)
movq   $0x0,-0x18(%rsi)
movups %xmm0,-0x28(%rsi,%r8,8)
movq   $0x0,-0x18(%rsi,%r8,8)
movups %xmm0,-0x10(%rsi)
movq   $0x0,(%rsi)
movups %xmm0,-0x10(%rsi,%r8,8)
movq   $0x0,(%rsi,%r8,8)
add    $0xfffffffffffffffa,%rax
add    $0x30,%rsi
add    $0xfffffffe,%ebp
jne    1390 <filter_sobel_3s16+0x280>
sub    %rax,%r8
neg    %rax
test   $0x1,%cl
je     13fa <filter_sobel_3s16+0x2ea>
xorps  %xmm0,%xmm0
movups %xmm0,(%rdi,%rax,8)
movq   $0x0,0x10(%rdi,%rax,8)
movups %xmm0,(%rdi,%r8,8)
movq   $0x0,0x10(%rdi,%r8,8)
test   %edx,%edx
jle    14a6 <filter_sobel_3s16+0x396>
lea    -0x3(%rbx),%eax
movslq %eax,%r8
cmpl   $0x0,0x4(%rsp)
je     14b5 <filter_sobel_3s16+0x3a5>
movslq %ebx,%r9
mov    %edx,%esi
and    $0xfffffffe,%esi
lea    (%rdi,%r9,8),%rax
add    $0x10,%rax
lea    (%rdi,%r8,8),%rbp
add    $0x10,%rbp
lea    (%r9,%r8,1),%rcx
lea    (%rdi,%rcx,8),%rbx
add    $0x10,%rbx
xor    %ecx,%ecx
xorps  %xmm0,%xmm0
nopl   0x0(%rax)
movups %xmm0,(%rdi,%rcx,8)
movq   $0x0,0x10(%rdi,%rcx,8)
movups %xmm0,-0x10(%rbp,%rcx,8)
movq   $0x0,0x0(%rbp,%rcx,8)
movups %xmm0,-0x10(%rax,%rcx,8)
movq   $0x0,(%rax,%rcx,8)
movups %xmm0,-0x10(%rbx,%rcx,8)
movq   $0x0,(%rbx,%rcx,8)
add    %r9,%rcx
add    %r9,%rcx
add    $0xfffffffe,%esi
jne    1440 <filter_sobel_3s16+0x330>
add    %rcx,%r8
test   $0x1,%dl
je     14a6 <filter_sobel_3s16+0x396>
xorps  %xmm0,%xmm0
movups %xmm0,(%rdi,%rcx,8)
movq   $0x0,0x10(%rdi,%rcx,8)
movups %xmm0,(%rdi,%r8,8)
movq   $0x0,0x10(%rdi,%r8,8)
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ecx,%ecx
test   $0x1,%dl
jne    1488 <filter_sobel_3s16+0x378>
jmp    14a6 <filter_sobel_3s16+0x396>

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

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