int homogeneity(the_image, out_image, rows, cols, bits_per_pixel, threshold,
                high)
int high, threshold;
short **the_image, **out_image;
long rows, cols, bits_per_pixel;
{
  int a, b, absdiff, absmax, diff, i, j, length, max, max_diff, new_hi, new_low,
      width;
  new_hi = 250;
  new_low = 16;
  if (bits_per_pixel == 4) {
    new_hi = 10;
    new_low = 3;
  }
  max = 255;
  if (bits_per_pixel == 4)
    max = 16;
  for (i = 0; i < rows; i++) {
    for (j = 0; j < cols; j++) {
      out_image[i][j] = 0;
    }
  }
  for (i = 1; i < rows - 1; i++) {
    if ((i % 10) == 0)
      printf("%4d", i);
    for (j = 1; j < cols - 1; j++) {
      max_diff = 0;
      for (a = -1; a <= 1; a++) {
        for (b = -1; b <= 1; b++) {
          diff = the_image[i][j] - the_image[i + a][j + b];
          absdiff = abs(diff);
          if (absdiff > max_diff)
            max_diff = absdiff;
        }
      }
      out_image[i][j] = max_diff;
    }
  }
  if (threshold == 1) {
    for (i = 0; i < rows; i++) {
      for (j = 0; j < cols; j++) {
        if (out_image[i][j] > high) {
          out_image[i][j] = new_hi;
        } else {
          out_image[i][j] = new_low;
        }
      }
    }
  }
  return (1);
}


x86 assembly (clang, -O0):
<homogeneity>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
movl   $0xfa,-0x58(%rbp)
movl   $0x10,-0x5c(%rbp)
cmpq   $0x4,-0x28(%rbp)
jne    116a <homogeneity+0x4a>
movl   $0xa,-0x58(%rbp)
movl   $0x3,-0x5c(%rbp)
movl   $0xff,-0x50(%rbp)
cmpq   $0x4,-0x28(%rbp)
jne    1183 <homogeneity+0x63>
movl   $0x10,-0x50(%rbp)
movl   $0x0,-0x44(%rbp)
movslq -0x44(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    11e4 <homogeneity+0xc4>
movl   $0x0,-0x48(%rbp)
movslq -0x48(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    11d1 <homogeneity+0xb1>
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movw   $0x0,(%rax,%rcx,2)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    119f <homogeneity+0x7f>
jmp    11d6 <homogeneity+0xb6>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    118a <homogeneity+0x6a>
movl   $0x1,-0x44(%rbp)
movslq -0x44(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jge    131f <homogeneity+0x1ff>
mov    -0x44(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1225 <homogeneity+0x105>
mov    -0x44(%rbp),%esi
lea    0xde2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x48(%rbp)
movslq -0x48(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jge    130c <homogeneity+0x1ec>
movl   $0x0,-0x54(%rbp)
movl   $0xffffffff,-0x30(%rbp)
cmpl   $0x1,-0x30(%rbp)
jg     12e4 <homogeneity+0x1c4>
movl   $0xffffffff,-0x34(%rbp)
cmpl   $0x1,-0x34(%rbp)
jg     12d1 <homogeneity+0x1b1>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x44(%rbp),%edx
add    -0x30(%rbp),%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x48(%rbp),%edx
add    -0x34(%rbp),%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x54(%rbp),%eax
jle    12be <homogeneity+0x19e>
mov    -0x38(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    12c3 <homogeneity+0x1a3>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1260 <homogeneity+0x140>
jmp    12d6 <homogeneity+0x1b6>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    124f <homogeneity+0x12f>
mov    -0x54(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    122c <homogeneity+0x10c>
jmp    1311 <homogeneity+0x1f1>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    11eb <homogeneity+0xcb>
cmpl   $0x1,-0x2c(%rbp)
jne    13d4 <homogeneity+0x2b4>
movl   $0x0,-0x44(%rbp)
movslq -0x44(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    13cf <homogeneity+0x2af>
movl   $0x0,-0x48(%rbp)
movslq -0x48(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    13bc <homogeneity+0x29c>
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
cmp    0x10(%rbp),%eax
jle    138f <homogeneity+0x26f>
mov    -0x58(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    13a9 <homogeneity+0x289>
mov    -0x5c(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    13ae <homogeneity+0x28e>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1345 <homogeneity+0x225>
jmp    13c1 <homogeneity+0x2a1>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1330 <homogeneity+0x210>
jmp    13d4 <homogeneity+0x2b4>
mov    $0x1,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<homogeneity>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rsi,0x10(%rsp)
mov    %rdi,0x48(%rsp)
cmp    $0x4,%r8
mov    $0xa,%eax
mov    $0xfa,%r13d
cmove  %eax,%r13d
mov    $0x3,%eax
mov    $0x10,%r14d
cmove  %eax,%r14d
test   %rdx,%rdx
jle    1b3f <homogeneity+0xa1f>
mov    %rcx,%r15
mov    %r9d,0x2c(%rsp)
lea    (%rcx,%rcx,1),%rbp
lea    -0x1(%rdx),%rax
mov    %edx,%ecx
and    $0x3,%ecx
mov    %rcx,(%rsp)
mov    %rax,0x50(%rsp)
cmp    $0x3,%rax
mov    %rdx,0x18(%rsp)
jae    1b53 <homogeneity+0xa33>
xor    %ebx,%ebx
cmpq   $0x0,(%rsp)
je     11cf <homogeneity+0xaf>
mov    0x10(%rsp),%rax
lea    (%rax,%rbx,8),%r12
xor    %ebx,%ebx
jmp    11ba <homogeneity+0x9a>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rbx
cmp    %rbx,(%rsp)
je     11cf <homogeneity+0xaf>
test   %r15,%r15
jle    11b0 <homogeneity+0x90>
mov    (%r12,%rbx,8),%rdi
xor    %esi,%esi
mov    %rbp,%rdx
call   1040 <memset@plt>
jmp    11b0 <homogeneity+0x90>
mov    0x18(%rsp),%r12
cmp    $0x3,%r12
jl     18eb <homogeneity+0x7cb>
lea    -0x1(%r15),%rax
mov    %rax,0x8(%rsp)
lea    -0x2(%r15),%rax
mov    %rax,0x30(%rsp)
and    $0xfffffffffffffff8,%rax
mov    %rax,0x40(%rsp)
add    $0x1,%rax
mov    %rax,0x38(%rsp)
mov    $0x1,%ebp
pxor   %xmm12,%xmm12
movdqa 0xdeb(%rip),%xmm13
jmp    1232 <homogeneity+0x112>
nopw   0x0(%rax,%rax,1)
mov    (%rsp),%rax
mov    %rax,%rbp
cmp    0x50(%rsp),%rax
je     18eb <homogeneity+0x7cb>
imul   $0xcccccccd,%ebp,%eax
ror    %eax
cmp    $0x19999999,%eax
jbe    17c0 <homogeneity+0x6a0>
cmp    $0x2,%r15
jle    17e8 <homogeneity+0x6c8>
lea    0x1(%rbp),%rax
mov    %rax,(%rsp)
mov    0x48(%rsp),%rsi
mov    -0x8(%rsi,%rbp,8),%rcx
mov    (%rsi,%rbp,8),%rdx
mov    0x10(%rsp),%rax
mov    (%rax,%rbp,8),%rbx
mov    0x8(%rsi,%rbp,8),%rsi
mov    $0x1,%eax
cmpq   $0x8,0x30(%rsp)
jb     1800 <homogeneity+0x6e0>
lea    0x2(%rbx),%rbp
mov    0x8(%rsp),%rdi
mov    %rbx,0x20(%rsp)
lea    (%rbx,%rdi,2),%rdi
lea    (%rdx,%r15,2),%rbx
lea    (%rcx,%r15,2),%r9
lea    (%rsi,%r15,2),%r11
cmp    %rbx,%rbp
setb   %r12b
cmp    %rdi,%rdx
setb   %r8b
cmp    %r9,%rbp
setb   %bl
cmp    %rdi,%rcx
setb   %r10b
cmp    %r11,%rbp
setb   %r9b
cmp    %rdi,%rsi
setb   %r11b
test   %r8b,%r12b
jne    17f4 <homogeneity+0x6d4>
and    %r10b,%bl
mov    0x18(%rsp),%r12
jne    17f9 <homogeneity+0x6d9>
and    %r11b,%r9b
mov    0x20(%rsp),%rbx
jne    1800 <homogeneity+0x6e0>
xor    %ebp,%ebp
mov    0x40(%rsp),%rdi
nopw   0x0(%rax,%rax,1)
movdqu (%rdx,%rbp,2),%xmm11
movdqu 0x2(%rdx,%rbp,2),%xmm0
movdqu 0x4(%rdx,%rbp,2),%xmm8
punpcklwd %xmm0,%xmm9
psrad  $0x10,%xmm9
punpckhwd %xmm0,%xmm10
psrad  $0x10,%xmm10
movdqu (%rcx,%rbp,2),%xmm2
movdqu 0x2(%rcx,%rbp,2),%xmm6
movdqu 0x4(%rcx,%rbp,2),%xmm4
punpcklwd %xmm2,%xmm7
psrad  $0x10,%xmm7
punpckhwd %xmm2,%xmm2
psrad  $0x10,%xmm2
movdqa %xmm10,%xmm0
psubd  %xmm2,%xmm0
movdqa %xmm9,%xmm1
psubd  %xmm7,%xmm1
movdqa %xmm1,%xmm7
psrad  $0x1f,%xmm7
movdqa %xmm1,%xmm2
paddd  %xmm7,%xmm2
pxor   %xmm7,%xmm2
movdqa %xmm0,%xmm7
psrad  $0x1f,%xmm7
movdqa %xmm0,%xmm5
paddd  %xmm7,%xmm5
pxor   %xmm7,%xmm5
pcmpeqd %xmm12,%xmm0
pandn  %xmm5,%xmm0
pcmpeqd %xmm12,%xmm1
pandn  %xmm2,%xmm1
punpckhwd %xmm6,%xmm2
psrad  $0x10,%xmm2
punpcklwd %xmm6,%xmm5
psrad  $0x10,%xmm5
movdqa %xmm9,%xmm6
psubd  %xmm5,%xmm6
movdqa %xmm10,%xmm7
psubd  %xmm2,%xmm7
movdqa %xmm7,%xmm2
psrad  $0x1f,%xmm2
paddd  %xmm2,%xmm7
pxor   %xmm2,%xmm7
movdqa %xmm6,%xmm2
psrad  $0x1f,%xmm2
paddd  %xmm2,%xmm6
pxor   %xmm2,%xmm6
movdqa %xmm6,%xmm3
pxor   %xmm13,%xmm3
movdqa %xmm1,%xmm2
pxor   %xmm13,%xmm2
pcmpgtd %xmm2,%xmm3
pand   %xmm3,%xmm6
pandn  %xmm1,%xmm3
por    %xmm6,%xmm3
movdqa %xmm7,%xmm2
pxor   %xmm13,%xmm2
movdqa %xmm0,%xmm1
pxor   %xmm13,%xmm1
pcmpgtd %xmm1,%xmm2
pand   %xmm2,%xmm7
pandn  %xmm0,%xmm2
por    %xmm7,%xmm2
punpcklwd %xmm4,%xmm0
psrad  $0x10,%xmm0
punpckhwd %xmm4,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm10,%xmm6
psubd  %xmm1,%xmm6
movdqa %xmm9,%xmm5
psubd  %xmm0,%xmm5
movdqa %xmm5,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm5
pxor   %xmm0,%xmm5
movdqa %xmm6,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm6
pxor   %xmm0,%xmm6
movdqa %xmm2,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm6,%xmm4
pxor   %xmm13,%xmm4
pcmpgtd %xmm0,%xmm4
pand   %xmm4,%xmm6
pandn  %xmm2,%xmm4
por    %xmm6,%xmm4
movdqa %xmm3,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm5,%xmm7
pxor   %xmm13,%xmm7
pcmpgtd %xmm0,%xmm7
pand   %xmm7,%xmm5
pandn  %xmm3,%xmm7
por    %xmm5,%xmm7
punpckhwd %xmm11,%xmm0
psrad  $0x10,%xmm0
punpcklwd %xmm11,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm9,%xmm3
psubd  %xmm1,%xmm3
movdqa %xmm10,%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm2
pxor   %xmm0,%xmm2
movdqa %xmm3,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm3
pxor   %xmm0,%xmm3
movdqa %xmm7,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm3,%xmm5
pxor   %xmm13,%xmm5
pcmpgtd %xmm0,%xmm5
pand   %xmm5,%xmm3
pandn  %xmm7,%xmm5
por    %xmm3,%xmm5
movdqa %xmm4,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm2,%xmm6
pxor   %xmm13,%xmm6
pcmpgtd %xmm0,%xmm6
pand   %xmm6,%xmm2
pandn  %xmm4,%xmm6
por    %xmm2,%xmm6
punpcklwd %xmm8,%xmm0
psrad  $0x10,%xmm0
punpckhwd %xmm8,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm10,%xmm4
psubd  %xmm1,%xmm4
movdqa %xmm9,%xmm2
psubd  %xmm0,%xmm2
movdqa %xmm2,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm2
pxor   %xmm0,%xmm2
movdqa %xmm4,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm4
pxor   %xmm0,%xmm4
movdqa %xmm6,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm4,%xmm3
pxor   %xmm13,%xmm3
pcmpgtd %xmm0,%xmm3
pand   %xmm3,%xmm4
pandn  %xmm6,%xmm3
por    %xmm4,%xmm3
movdqa %xmm5,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm2,%xmm6
pxor   %xmm13,%xmm6
pcmpgtd %xmm0,%xmm6
pand   %xmm6,%xmm2
pandn  %xmm5,%xmm6
por    %xmm2,%xmm6
movdqu (%rsi,%rbp,2),%xmm0
movdqu 0x2(%rsi,%rbp,2),%xmm5
movdqu 0x4(%rsi,%rbp,2),%xmm2
punpckhwd %xmm0,%xmm1
psrad  $0x10,%xmm1
punpcklwd %xmm0,%xmm0
psrad  $0x10,%xmm0
movdqa %xmm9,%xmm4
psubd  %xmm0,%xmm4
movdqa %xmm10,%xmm7
psubd  %xmm1,%xmm7
movdqa %xmm7,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm7
pxor   %xmm0,%xmm7
movdqa %xmm4,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm4
pxor   %xmm0,%xmm4
movdqa %xmm6,%xmm1
pxor   %xmm13,%xmm1
movdqa %xmm4,%xmm0
pxor   %xmm13,%xmm0
pcmpgtd %xmm1,%xmm0
pand   %xmm0,%xmm4
pandn  %xmm6,%xmm0
por    %xmm4,%xmm0
movdqa %xmm3,%xmm1
pxor   %xmm13,%xmm1
movdqa %xmm7,%xmm6
pxor   %xmm13,%xmm6
pcmpgtd %xmm1,%xmm6
pand   %xmm6,%xmm7
pandn  %xmm3,%xmm6
por    %xmm7,%xmm6
punpcklwd %xmm5,%xmm1
psrad  $0x10,%xmm1
punpckhwd %xmm5,%xmm3
psrad  $0x10,%xmm3
movdqa %xmm10,%xmm4
psubd  %xmm3,%xmm4
movdqa %xmm9,%xmm7
psubd  %xmm1,%xmm7
movdqa %xmm7,%xmm1
psrad  $0x1f,%xmm1
paddd  %xmm1,%xmm7
pxor   %xmm1,%xmm7
movdqa %xmm4,%xmm1
psrad  $0x1f,%xmm1
paddd  %xmm1,%xmm4
pxor   %xmm1,%xmm4
movdqa %xmm6,%xmm1
pxor   %xmm13,%xmm1
movdqa %xmm4,%xmm3
pxor   %xmm13,%xmm3
pcmpgtd %xmm1,%xmm3
pand   %xmm3,%xmm4
pandn  %xmm6,%xmm3
por    %xmm4,%xmm3
movdqa %xmm0,%xmm1
pxor   %xmm13,%xmm1
movdqa %xmm7,%xmm5
pxor   %xmm13,%xmm5
pcmpgtd %xmm1,%xmm5
pand   %xmm5,%xmm7
pandn  %xmm0,%xmm5
por    %xmm7,%xmm5
punpckhwd %xmm2,%xmm0
psrad  $0x10,%xmm0
punpcklwd %xmm2,%xmm1
psrad  $0x10,%xmm1
psubd  %xmm1,%xmm9
psubd  %xmm0,%xmm10
movdqa %xmm10,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm10
pxor   %xmm0,%xmm10
movdqa %xmm9,%xmm0
psrad  $0x1f,%xmm0
paddd  %xmm0,%xmm9
pxor   %xmm0,%xmm9
movdqa %xmm5,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm9,%xmm1
pxor   %xmm13,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm9
pandn  %xmm5,%xmm1
por    %xmm9,%xmm1
movdqa %xmm3,%xmm0
pxor   %xmm13,%xmm0
movdqa %xmm10,%xmm2
pxor   %xmm13,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm10
pandn  %xmm3,%xmm2
por    %xmm10,%xmm2
pslld  $0x10,%xmm2
psrad  $0x10,%xmm2
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm2,%xmm1
movdqu %xmm1,0x2(%rbx,%rbp,2)
add    $0x8,%rbp
cmp    %rbp,%rdi
jne    1300 <homogeneity+0x1e0>
mov    0x38(%rsp),%rax
cmp    %rdi,0x30(%rsp)
je     1220 <homogeneity+0x100>
jmp    1800 <homogeneity+0x6e0>
cs nopw 0x0(%rax,%rax,1)
lea    0x849(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1030 <printf@plt>
movdqa 0x827(%rip),%xmm13
pxor   %xmm12,%xmm12
cmp    $0x2,%r15
jg     124f <homogeneity+0x12f>
add    $0x1,%rbp
mov    %rbp,%rax
jmp    1224 <homogeneity+0x104>
mov    0x18(%rsp),%r12
mov    0x20(%rsp),%rbx
xchg   %ax,%ax
lea    (%rbx,%rax,2),%r9
lea    (%rdx,%rax,2),%r11
lea    (%rsi,%rax,2),%r8
lea    (%rcx,%rax,2),%rcx
mov    0x8(%rsp),%r10
sub    %rax,%r10
xor    %eax,%eax
jmp    1832 <homogeneity+0x712>
nopl   0x0(%rax)
mov    %dx,(%r9,%rax,2)
add    $0x1,%rax
cmp    %rax,%r10
je     1220 <homogeneity+0x100>
movswl (%r11,%rax,2),%esi
movswl -0x2(%rcx,%rax,2),%edx
mov    %esi,%edi
sub    %edx,%edi
mov    %edi,%edx
neg    %edx
cmovs  %edi,%edx
cmovae %edi,%edx
movswl (%rcx,%rax,2),%edi
mov    %esi,%ebx
sub    %edi,%ebx
mov    %ebx,%edi
neg    %edi
cmovs  %ebx,%edi
cmp    %edx,%edi
cmovbe %edx,%edi
movswl 0x2(%rcx,%rax,2),%edx
mov    %esi,%ebx
sub    %edx,%ebx
mov    %ebx,%edx
neg    %edx
cmovs  %ebx,%edx
cmp    %edi,%edx
cmovbe %edi,%edx
movswl -0x2(%r11,%rax,2),%edi
mov    %esi,%ebx
sub    %edi,%ebx
mov    %ebx,%edi
neg    %edi
cmovs  %ebx,%edi
cmp    %edx,%edi
cmovbe %edx,%edi
movswl 0x2(%r11,%rax,2),%edx
mov    %esi,%ebx
sub    %edx,%ebx
mov    %ebx,%edx
neg    %edx
cmovs  %ebx,%edx
cmp    %edi,%edx
ja     18a0 <homogeneity+0x780>
mov    %edi,%edx
movswl -0x2(%r8,%rax,2),%edi
mov    %esi,%ebx
sub    %edi,%ebx
mov    %ebx,%ebp
neg    %ebp
cmovs  %ebx,%ebp
cmp    %edx,%ebp
ja     18b7 <homogeneity+0x797>
mov    %edx,%ebp
movswl (%r8,%rax,2),%edx
mov    %esi,%ebx
sub    %edx,%ebx
mov    %ebx,%edi
neg    %edi
cmovs  %ebx,%edi
cmp    %ebp,%edi
ja     18cd <homogeneity+0x7ad>
mov    %ebp,%edi
movswl 0x2(%r8,%rax,2),%edx
sub    %edx,%esi
mov    %esi,%edx
neg    %edx
cmovs  %esi,%edx
cmp    %edi,%edx
ja     1820 <homogeneity+0x700>
mov    %edi,%edx
jmp    1820 <homogeneity+0x700>
cmpl   $0x1,0x2c(%rsp)
jne    1b3f <homogeneity+0xa1f>
test   %r12,%r12
jle    1b3f <homogeneity+0xa1f>
mov    0x90(%rsp),%eax
lea    -0x10(%r15),%r9
mov    %r9,%r10
shr    $0x4,%r10
add    $0x1,%r10
mov    %r15,%rsi
and    $0xfffffffffffffff0,%rsi
movd   %eax,%xmm0
pshufd $0x0,%xmm0,%xmm0
movd   %r13d,%xmm1
pshuflw $0x0,%xmm1,%xmm1
pshufd $0x0,%xmm1,%xmm8
movd   %r14d,%xmm2
pshuflw $0x0,%xmm2,%xmm2
pshufd $0x0,%xmm2,%xmm2
mov    %r10,%r8
and    $0xfffffffffffffffe,%r8
xor    %ebp,%ebp
jmp    195d <homogeneity+0x83d>
nop
add    $0x1,%rbp
cmp    %r12,%rbp
je     1b3f <homogeneity+0xa1f>
test   %r15,%r15
jle    1950 <homogeneity+0x830>
mov    0x10(%rsp),%rcx
mov    (%rcx,%rbp,8),%rdi
cmp    $0x10,%r15
jae    1980 <homogeneity+0x860>
xor    %ecx,%ecx
jmp    1b20 <homogeneity+0xa00>
nopl   0x0(%rax,%rax,1)
cmp    $0x10,%r9
jae    198d <homogeneity+0x86d>
xor    %ecx,%ecx
jmp    1a98 <homogeneity+0x978>
mov    %r8,%rdx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqu (%rdi,%rcx,2),%xmm6
movdqu 0x10(%rdi,%rcx,2),%xmm7
movdqu 0x20(%rdi,%rcx,2),%xmm4
movdqu 0x30(%rdi,%rcx,2),%xmm3
punpcklwd %xmm6,%xmm5
psrad  $0x10,%xmm5
punpckhwd %xmm6,%xmm6
psrad  $0x10,%xmm6
punpcklwd %xmm7,%xmm1
psrad  $0x10,%xmm1
punpckhwd %xmm7,%xmm7
psrad  $0x10,%xmm7
pcmpgtd %xmm0,%xmm6
pcmpgtd %xmm0,%xmm5
packssdw %xmm6,%xmm5
pcmpgtd %xmm0,%xmm7
pcmpgtd %xmm0,%xmm1
packssdw %xmm7,%xmm1
movdqa %xmm8,%xmm6
pand   %xmm5,%xmm6
pandn  %xmm2,%xmm5
por    %xmm6,%xmm5
movdqa %xmm8,%xmm6
pand   %xmm1,%xmm6
pandn  %xmm2,%xmm1
por    %xmm6,%xmm1
movdqu %xmm5,(%rdi,%rcx,2)
movdqu %xmm1,0x10(%rdi,%rcx,2)
punpcklwd %xmm4,%xmm5
psrad  $0x10,%xmm5
punpckhwd %xmm4,%xmm1
psrad  $0x10,%xmm1
punpcklwd %xmm3,%xmm4
psrad  $0x10,%xmm4
punpckhwd %xmm3,%xmm3
psrad  $0x10,%xmm3
pcmpgtd %xmm0,%xmm1
pcmpgtd %xmm0,%xmm5
packssdw %xmm1,%xmm5
pcmpgtd %xmm0,%xmm3
pcmpgtd %xmm0,%xmm4
packssdw %xmm3,%xmm4
movdqa %xmm8,%xmm1
pand   %xmm5,%xmm1
pandn  %xmm2,%xmm5
por    %xmm1,%xmm5
movdqa %xmm8,%xmm1
pand   %xmm4,%xmm1
pandn  %xmm2,%xmm4
por    %xmm1,%xmm4
movdqu %xmm5,0x20(%rdi,%rcx,2)
movdqu %xmm4,0x30(%rdi,%rcx,2)
add    $0x20,%rcx
add    $0xfffffffffffffffe,%rdx
jne    19a0 <homogeneity+0x880>
test   $0x1,%r10b
je     1b12 <homogeneity+0x9f2>
movdqu (%rdi,%rcx,2),%xmm1
movdqu 0x10(%rdi,%rcx,2),%xmm4
punpcklwd %xmm1,%xmm3
psrad  $0x10,%xmm3
punpckhwd %xmm1,%xmm1
psrad  $0x10,%xmm1
punpcklwd %xmm4,%xmm5
psrad  $0x10,%xmm5
punpckhwd %xmm4,%xmm4
psrad  $0x10,%xmm4
pcmpgtd %xmm0,%xmm1
pcmpgtd %xmm0,%xmm3
packssdw %xmm1,%xmm3
pcmpgtd %xmm0,%xmm4
pcmpgtd %xmm0,%xmm5
packssdw %xmm4,%xmm5
movdqa %xmm8,%xmm1
pand   %xmm3,%xmm1
pandn  %xmm2,%xmm3
por    %xmm1,%xmm3
movdqa %xmm8,%xmm1
pand   %xmm5,%xmm1
pandn  %xmm2,%xmm5
por    %xmm1,%xmm5
movdqu %xmm3,(%rdi,%rcx,2)
movdqu %xmm5,0x10(%rdi,%rcx,2)
mov    %rsi,%rcx
cmp    %r15,%rsi
je     1950 <homogeneity+0x830>
xchg   %ax,%ax
movswl (%rdi,%rcx,2),%edx
cmp    %eax,%edx
mov    %r14d,%edx
cmovg  %r13d,%edx
mov    %dx,(%rdi,%rcx,2)
add    $0x1,%rcx
cmp    %rcx,%r15
jne    1b20 <homogeneity+0xa00>
jmp    1950 <homogeneity+0x830>
mov    $0x1,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %rdx,%r12
and    $0xfffffffffffffffc,%r12
mov    %r12,0x8(%rsp)
xor    %ebx,%ebx
mov    0x10(%rsp),%r12
jmp    1b7f <homogeneity+0xa5f>
nopl   0x0(%rax,%rax,1)
add    $0x4,%rbx
cmp    %rbx,0x8(%rsp)
je     1192 <homogeneity+0x72>
test   %r15,%r15
jle    1b70 <homogeneity+0xa50>
mov    (%r12,%rbx,8),%rdi
xor    %esi,%esi
mov    %rbp,%rdx
call   1040 <memset@plt>
mov    0x8(%r12,%rbx,8),%rdi
xor    %esi,%esi
mov    %rbp,%rdx
call   1040 <memset@plt>
mov    0x10(%r12,%rbx,8),%rdi
xor    %esi,%esi
mov    %rbp,%rdx
call   1040 <memset@plt>
mov    0x18(%r12,%rbx,8),%rdi
xor    %esi,%esi
mov    %rbp,%rdx
call   1040 <memset@plt>
jmp    1b70 <homogeneity+0xa50>

LLVM IR (-O0):
@.str = [4 x i8] c"%4d\00"
define i32 @homogeneity(i16** %0, i16** %1, i64 %2, i64 %3, i64 %4, i32 %5, i32 %6) {
%8 = alloca i16**
%9 = alloca i16**
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%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
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
store i16** %0, i16*** %8
store i16** %1, i16*** %9
store i64 %2, i64* %10
store i64 %3, i64* %11
store i64 %4, i64* %12
store i32 %5, i32* %13
store i32 %6, i32* %14
store i32 250, i32* %25
store i32 16, i32* %26
%28 = load i64, i64* %12
%29 = icmp eq i64 %28, 4
br i1 %29, label %30, label %31
30: ; preds = %7
store i32 10, i32* %25
store i32 3, i32* %26
br label %31
31: ; preds = %30, %7
store i32 255, i32* %23
%32 = load i64, i64* %12
%33 = icmp eq i64 %32, 4
br i1 %33, label %34, label %35
34: ; preds = %31
store i32 16, i32* %23
br label %35
35: ; preds = %34, %31
store i32 0, i32* %20
br label %36
36: ; preds = %60, %35
%37 = load i32, i32* %20
%38 = sext i32 %37 to i64
%39 = load i64, i64* %10
%40 = icmp slt i64 %38, %39
br i1 %40, label %41, label %63
41: ; preds = %36
store i32 0, i32* %21
br label %42
42: ; preds = %56, %41
%43 = load i32, i32* %21
%44 = sext i32 %43 to i64
%45 = load i64, i64* %11
%46 = icmp slt i64 %44, %45
br i1 %46, label %47, label %59
47: ; preds = %42
%48 = load i16**, i16*** %9
%49 = load i32, i32* %20
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i16*, i16** %48, i64 %50
%52 = load i16*, i16** %51
%53 = load i32, i32* %21
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i16, i16* %52, i64 %54
store i16 0, i16* %55
br label %56
56: ; preds = %47
%57 = load i32, i32* %21
%58 = add nsw i32 %57, 1
store i32 %58, i32* %21
br label %42
59: ; preds = %42
br label %60
60: ; preds = %59
%61 = load i32, i32* %20
%62 = add nsw i32 %61, 1
store i32 %62, i32* %20
br label %36
63: ; preds = %36
store i32 1, i32* %20
br label %64
64: ; preds = %148, %63
%65 = load i32, i32* %20
%66 = sext i32 %65 to i64
%67 = load i64, i64* %10
%68 = sub nsw i64 %67, 1
%69 = icmp slt i64 %66, %68
br i1 %69, label %70, label %151
70: ; preds = %64
%71 = load i32, i32* %20
%72 = srem i32 %71, 10
%73 = icmp eq i32 %72, 0
br i1 %73, label %74, label %77
74: ; preds = %70
%75 = load i32, i32* %20
%76 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %75)
br label %77
77: ; preds = %74, %70
store i32 1, i32* %21
br label %78
78: ; preds = %144, %77
%79 = load i32, i32* %21
%80 = sext i32 %79 to i64
%81 = load i64, i64* %11
%82 = sub nsw i64 %81, 1
%83 = icmp slt i64 %80, %82
br i1 %83, label %84, label %147
84: ; preds = %78
store i32 0, i32* %24
store i32 -1, i32* %15
br label %85
85: ; preds = %130, %84
%86 = load i32, i32* %15
%87 = icmp sle i32 %86, 1
br i1 %87, label %88, label %133
88: ; preds = %85
store i32 -1, i32* %16
br label %89
89: ; preds = %126, %88
%90 = load i32, i32* %16
%91 = icmp sle i32 %90, 1
br i1 %91, label %92, label %129
92: ; preds = %89
%93 = load i16**, i16*** %8
%94 = load i32, i32* %20
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i16*, i16** %93, i64 %95
%97 = load i16*, i16** %96
%98 = load i32, i32* %21
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i16, i16* %97, i64 %99
%101 = load i16, i16* %100
%102 = sext i16 %101 to i32
%103 = load i16**, i16*** %8
%104 = load i32, i32* %20
%105 = load i32, i32* %15
%106 = add nsw i32 %104, %105
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i16*, i16** %103, i64 %107
%109 = load i16*, i16** %108
%110 = load i32, i32* %21
%111 = load i32, i32* %16
%112 = add nsw i32 %110, %111
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i16, i16* %109, i64 %113
%115 = load i16, i16* %114
%116 = sext i16 %115 to i32
%117 = sub nsw i32 %102, %116
store i32 %117, i32* %19
%118 = load i32, i32* %19
%119 = call i32 @abs(i32 %118)
store i32 %119, i32* %17
%120 = load i32, i32* %17
%121 = load i32, i32* %24
%122 = icmp sgt i32 %120, %121
br i1 %122, label %123, label %125
123: ; preds = %92
%124 = load i32, i32* %17
store i32 %124, i32* %24
br label %125
125: ; preds = %123, %92
br label %126
126: ; preds = %125
%127 = load i32, i32* %16
%128 = add nsw i32 %127, 1
store i32 %128, i32* %16
br label %89
129: ; preds = %89
br label %130
130: ; preds = %129
%131 = load i32, i32* %15
%132 = add nsw i32 %131, 1
store i32 %132, i32* %15
br label %85
133: ; preds = %85
%134 = load i32, i32* %24
%135 = trunc i32 %134 to i16
%136 = load i16**, i16*** %9
%137 = load i32, i32* %20
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i16*, i16** %136, i64 %138
%140 = load i16*, i16** %139
%141 = load i32, i32* %21
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds i16, i16* %140, i64 %142
store i16 %135, i16* %143
br label %144
144: ; preds = %133
%145 = load i32, i32* %21
%146 = add nsw i32 %145, 1
store i32 %146, i32* %21
br label %78
147: ; preds = %78
br label %148
148: ; preds = %147
%149 = load i32, i32* %20
%150 = add nsw i32 %149, 1
store i32 %150, i32* %20
br label %64
151: ; preds = %64
%152 = load i32, i32* %13
%153 = icmp eq i32 %152, 1
br i1 %153, label %154, label %210
154: ; preds = %151
store i32 0, i32* %20
br label %155
155: ; preds = %206, %154
%156 = load i32, i32* %20
%157 = sext i32 %156 to i64
%158 = load i64, i64* %10
%159 = icmp slt i64 %157, %158
br i1 %159, label %160, label %209
160: ; preds = %155
store i32 0, i32* %21
br label %161
161: ; preds = %202, %160
%162 = load i32, i32* %21
%163 = sext i32 %162 to i64
%164 = load i64, i64* %11
%165 = icmp slt i64 %163, %164
br i1 %165, label %166, label %205
166: ; preds = %161
%167 = load i16**, i16*** %9
%168 = load i32, i32* %20
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i16*, i16** %167, i64 %169
%171 = load i16*, i16** %170
%172 = load i32, i32* %21
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds i16, i16* %171, i64 %173
%175 = load i16, i16* %174
%176 = sext i16 %175 to i32
%177 = load i32, i32* %14
%178 = icmp sgt i32 %176, %177
br i1 %178, label %179, label %190
179: ; preds = %166
%180 = load i32, i32* %25
%181 = trunc i32 %180 to i16
%182 = load i16**, i16*** %9
%183 = load i32, i32* %20
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i16*, i16** %182, i64 %184
%186 = load i16*, i16** %185
%187 = load i32, i32* %21
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds i16, i16* %186, i64 %188
store i16 %181, i16* %189
br label %201
190: ; preds = %166
%191 = load i32, i32* %26
%192 = trunc i32 %191 to i16
%193 = load i16**, i16*** %9
%194 = load i32, i32* %20
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds i16*, i16** %193, i64 %195
%197 = load i16*, i16** %196
%198 = load i32, i32* %21
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i16, i16* %197, i64 %199
store i16 %192, i16* %200
br label %201
201: ; preds = %190, %179
br label %202
202: ; preds = %201
%203 = load i32, i32* %21
%204 = add nsw i32 %203, 1
store i32 %204, i32* %21
br label %161
205: ; preds = %161
br label %206
206: ; preds = %205
%207 = load i32, i32* %20
%208 = add nsw i32 %207, 1
store i32 %208, i32* %20
br label %155
209: ; preds = %155
br label %210
210: ; preds = %209, %151
ret i32 1
}

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