int range(the_image, out_image, rows, cols, bits_per_pixel, size, threshold,
          high)
int high, threshold, size;
short **the_image, **out_image;
long rows, cols, bits_per_pixel;
{
  int a, b, count, i, j, k, new_hi, new_low, length, sd2, sd2p1, ss, width;
  short *elements;
  sd2 = size / 2;
  sd2p1 = sd2 + 1;
  ss = size * size;
  elements = (short *)malloc(ss * sizeof(short));
  new_hi = 250;
  new_low = 16;
  if (bits_per_pixel == 4) {
    new_hi = 10;
    new_low = 3;
  }
  printf("\n");
  for (i = sd2; i < rows - sd2; i++) {
    if ((i % 10) == 0)
      printf("%4d ", i);
    for (j = sd2; j < cols - sd2; j++) {
      count = 0;
      for (a = -sd2; a < sd2p1; a++) {
        for (b = -sd2; b < sd2p1; b++) {
          elements[count] = the_image[i + a][j + b];
          count++;
        }
      }
      sort_elements(elements, &ss);
      out_image[i][j] = elements[ss - 1] - elements[0];
    }
  }
  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;
        }
      }
    }
  }
  free(elements);
  return (1);
}


x86 assembly (clang, -O0):
<range>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    0x18(%rbp),%eax
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)
mov    -0x2c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x2c(%rbp),%eax
imul   -0x2c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
movslq -0x5c(%rbp),%rdi
shl    $0x1,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x68(%rbp)
movl   $0xfa,-0x48(%rbp)
movl   $0x10,-0x4c(%rbp)
cmpq   $0x4,-0x28(%rbp)
jne    11bf <range+0x7f>
movl   $0xa,-0x48(%rbp)
movl   $0x3,-0x4c(%rbp)
lea    0xe3a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x54(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movslq -0x3c(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x54(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jge    1312 <range+0x1d2>
mov    -0x3c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1210 <range+0xd0>
mov    -0x3c(%rbp),%esi
lea    0xdf9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x54(%rbp),%eax
mov    %eax,-0x40(%rbp)
movslq -0x40(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x54(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jge    12ff <range+0x1bf>
movl   $0x0,-0x38(%rbp)
xor    %eax,%eax
sub    -0x54(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    12b1 <range+0x171>
xor    %eax,%eax
sub    -0x54(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    129e <range+0x15e>
mov    -0x8(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x40(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,2),%dx
mov    -0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1251 <range+0x111>
jmp    12a3 <range+0x163>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    123d <range+0xfd>
mov    -0x68(%rbp),%rdi
lea    -0x5c(%rbp),%rsi
mov    $0x0,%al
call   1050 <sort_elements@plt>
mov    -0x68(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x68(%rbp),%rcx
movswl (%rcx),%ecx
sub    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1216 <range+0xd6>
jmp    1304 <range+0x1c4>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11d3 <range+0x93>
cmpl   $0x1,0x10(%rbp)
jne    13c7 <range+0x287>
movl   $0x0,-0x3c(%rbp)
movslq -0x3c(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    13c2 <range+0x282>
movl   $0x0,-0x40(%rbp)
movslq -0x40(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    13af <range+0x26f>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
cmp    0x18(%rbp),%eax
jle    1382 <range+0x242>
mov    -0x48(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    139c <range+0x25c>
mov    -0x4c(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x40(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    13a1 <range+0x261>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1338 <range+0x1f8>
jmp    13b4 <range+0x274>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1323 <range+0x1e3>
jmp    13c7 <range+0x287>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
mov    $0x1,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<range>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xd8,%rsp
mov    %r8,%r14
mov    %rcx,0x30(%rsp)
mov    %rdx,%rbx
mov    %rsi,0x40(%rsp)
mov    %rdi,0x80(%rsp)
mov    %r9d,%ebp
shr    $0x1f,%ebp
add    %r9d,%ebp
sar    %ebp
mov    %r9d,0x2c(%rsp)
mov    %r9d,%edi
imul   %edi,%edi
mov    %edi,0xc(%rsp)
add    %edi,%edi
call   1070 <malloc@plt>
mov    %rax,%r13
cmp    $0x4,%r14
mov    $0xa,%eax
mov    $0xfa,%ecx
cmove  %eax,%ecx
mov    %ecx,0x28(%rsp)
mov    $0x3,%eax
mov    $0x10,%ecx
cmove  %eax,%ecx
mov    %ecx,0x24(%rsp)
mov    $0xa,%edi
call   1040 <putchar@plt>
movslq %ebp,%rax
mov    %rbx,0x68(%rsp)
sub    %rax,%rbx
mov    %rax,0x10(%rsp)
mov    %rbx,0x78(%rsp)
cmp    %rax,%rbx
jle    1568 <range+0x418>
mov    0x30(%rsp),%rax
mov    0x10(%rsp),%r14
sub    %r14,%rax
mov    %rax,0x48(%rsp)
mov    %r14d,%eax
neg    %eax
movslq %eax,%r11
mov    %r11d,%eax
cmovs  %r14d,%eax
lea    0x1(%rax),%r12d
mov    %rax,0xc8(%rsp)
add    %r14d,%eax
lea    0x2(%r13,%rax,2),%rcx
mov    %rcx,0xb8(%rsp)
mov    %rax,0xd0(%rsp)
add    $0x1,%rax
mov    %rax,0x58(%rsp)
and    $0xfffffffffffffff0,%rax
lea    -0x10(%rax),%rcx
mov    %rcx,0xa8(%rsp)
shr    $0x4,%rcx
add    $0x1,%rcx
mov    %rax,0xb0(%rsp)
add    %r11,%rax
mov    %rax,0x98(%rsp)
mov    %rcx,%rax
mov    %rcx,0xa0(%rsp)
movabs $0x1ffffffffffffffe,%rax
ff ff 1f
and    %rax,%rcx
mov    %rcx,0x90(%rsp)
lea    0x30(%r13),%rax
mov    %rax,0x88(%rsp)
lea    0x6(%r13),%rax
mov    %rax,0xc0(%rsp)
lea    0x2(%r14),%rax
mov    %rax,0x70(%rsp)
mov    %r11,0x38(%rsp)
jmp    12bf <range+0x16f>
nopl   0x0(%rax)
add    $0x1,%r14
cmp    %r14,0x78(%rsp)
jle    1568 <range+0x418>
imul   $0xcccccccd,%r14d,%eax
add    $0x19999998,%eax
ror    %eax
cmp    $0x19999998,%eax
ja     12ea <range+0x19a>
lea    0xd25(%rip),%rdi
mov    %r14d,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x38(%rsp),%r11
mov    0x48(%rsp),%rax
cmp    0x10(%rsp),%rax
jle    12b0 <range+0x160>
mov    $0x18,%eax
mov    %rax,0x50(%rsp)
mov    0x70(%rsp),%rax
mov    %rax,0x60(%rsp)
xor    %eax,%eax
mov    %rax,0x18(%rsp)
mov    0x10(%rsp),%r15
jmp    1373 <range+0x223>
nopl   0x0(%rax,%rax,1)
mov    %r13,%rdi
lea    0xc(%rsp),%rsi
xor    %eax,%eax
call   1060 <sort_elements@plt>
mov    0x38(%rsp),%r11
movslq 0xc(%rsp),%rax
movzwl -0x2(%r13,%rax,2),%eax
sub    0x0(%r13),%ax
mov    0x40(%rsp),%rcx
mov    (%rcx,%r14,8),%rcx
mov    %ax,(%rcx,%r15,2)
add    $0x1,%r15
addq   $0x1,0x18(%rsp)
addq   $0x1,0x50(%rsp)
addq   $0x1,0x60(%rsp)
cmp    %r15,0x48(%rsp)
jle    12b0 <range+0x160>
cmpl   $0xffffffff,0x2c(%rsp)
mov    0x80(%rsp),%r10
jl     1320 <range+0x1d0>
mov    0x58(%rsp),%rax
mov    0x18(%rsp),%rcx
lea    (%rax,%rcx,1),%r8
mov    %r11,%rcx
xor    %eax,%eax
jmp    13ad <range+0x25d>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    %ecx,%r12d
je     1320 <range+0x1d0>
lea    (%rcx,%r14,1),%rdx
mov    (%r10,%rdx,8),%r9
movslq %eax,%rdx
cmpl   $0xf,0xd0(%rsp)
0f
jb     13f5 <range+0x2a5>
shl    $0x20,%rax
sar    $0x1f,%rax
lea    (%rax,%r13,1),%rsi
lea    (%r9,%r8,2),%rdi
cmp    %rdi,%rsi
jae    14a0 <range+0x350>
add    0xb8(%rsp),%rax
mov    0x18(%rsp),%rsi
lea    (%r9,%rsi,2),%rsi
cmp    %rsi,%rax
jbe    14a0 <range+0x350>
mov    %r11,%rdi
mov    %r12d,%eax
sub    %edi,%eax
mov    0xc8(%rsp),%rsi
mov    %esi,%ebp
sub    %edi,%ebp
and    $0x3,%eax
je     1437 <range+0x2e7>
lea    (%r9,%r15,2),%rsi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzwl (%rsi,%rdi,2),%ebx
mov    %bx,0x0(%r13,%rdx,2)
add    $0x1,%rdx
add    $0x1,%rdi
add    $0xffffffff,%eax
jne    1420 <range+0x2d0>
mov    %rdx,%rax
cmp    $0x3,%ebp
jb     13a0 <range+0x250>
mov    0xc0(%rsp),%rax
lea    (%rax,%rdx,2),%rax
mov    %r12d,%ebp
sub    %edi,%ebp
add    0x60(%rsp),%rdi
lea    (%r9,%rdi,2),%rdi
xor    %esi,%esi
nop
movzwl -0x4(%rdi,%rsi,2),%ebx
mov    %bx,-0x6(%rax,%rsi,2)
movzwl -0x2(%rdi,%rsi,2),%ebx
mov    %bx,-0x4(%rax,%rsi,2)
movzwl (%rdi,%rsi,2),%ebx
mov    %bx,-0x2(%rax,%rsi,2)
movzwl 0x2(%rdi,%rsi,2),%ebx
mov    %bx,(%rax,%rsi,2)
add    $0x4,%rsi
cmp    %esi,%ebp
jne    1460 <range+0x310>
add    %rsi,%rdx
mov    %rdx,%rax
jmp    13a0 <range+0x250>
nopl   0x0(%rax)
cmpq   $0x0,0xa8(%rsp)
je     155a <range+0x40a>
mov    0x88(%rsp),%rax
lea    (%rax,%rdx,2),%rdi
mov    0x50(%rsp),%rax
lea    (%r9,%rax,2),%rbp
mov    0x90(%rsp),%rsi
xor    %eax,%eax
xchg   %ax,%ax
movups -0x30(%rbp,%rax,2),%xmm0
movups -0x20(%rbp,%rax,2),%xmm1
movups %xmm0,-0x30(%rdi,%rax,2)
movups %xmm1,-0x20(%rdi,%rax,2)
movdqu -0x10(%rbp,%rax,2),%xmm0
movdqu 0x0(%rbp,%rax,2),%xmm1
movdqu %xmm0,-0x10(%rdi,%rax,2)
movdqu %xmm1,(%rdi,%rax,2)
add    $0x20,%rax
add    $0xfffffffffffffffe,%rsi
jne    14d0 <range+0x380>
testb  $0x1,0xa0(%rsp)
01
je     1534 <range+0x3e4>
lea    (%rdx,%rax,1),%rsi
add    %r11,%rax
add    %r15,%rax
movdqu (%r9,%rax,2),%xmm0
movdqu 0x10(%r9,%rax,2),%xmm1
movdqu %xmm0,0x0(%r13,%rsi,2)
movdqu %xmm1,0x10(%r13,%rsi,2)
mov    0xb0(%rsp),%rsi
add    %rsi,%rdx
mov    0x98(%rsp),%rdi
mov    %rdx,%rax
cmp    %rsi,0x58(%rsp)
je     13a0 <range+0x250>
jmp    13f8 <range+0x2a8>
xor    %eax,%eax
testb  $0x1,0xa0(%rsp)
01
jne    150f <range+0x3bf>
jmp    1534 <range+0x3e4>
cmpl   $0x1,0x110(%rsp)
01
mov    0x30(%rsp),%rsi
mov    0x68(%rsp),%r14
movabs $0x1ffffffffffffffe,%r11
ff ff 1f
mov    0x28(%rsp),%ebx
mov    0x24(%rsp),%eax
jne    17f0 <range+0x6a0>
test   %r14,%r14
jle    17f0 <range+0x6a0>
mov    0x118(%rsp),%r15d
lea    -0x10(%rsi),%r8
mov    %r8,%r9
shr    $0x4,%r9
add    $0x1,%r9
mov    %rsi,%r10
and    $0xfffffffffffffff0,%r10
movd   %r15d,%xmm0
pshufd $0x0,%xmm0,%xmm0
movd   %ebx,%xmm1
pshuflw $0x0,%xmm1,%xmm1
pshufd $0x0,%xmm1,%xmm8
movd   %eax,%xmm2
pshuflw $0x0,%xmm2,%xmm2
pshufd $0x0,%xmm2,%xmm2
and    %r9,%r11
xor    %edi,%edi
jmp    15fd <range+0x4ad>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    %r14,%rdi
je     17f0 <range+0x6a0>
test   %rsi,%rsi
jle    15f0 <range+0x4a0>
mov    0x40(%rsp),%rcx
mov    (%rcx,%rdi,8),%rbp
cmp    $0x10,%rsi
jae    1620 <range+0x4d0>
xor    %ecx,%ecx
jmp    17d0 <range+0x680>
nopl   0x0(%rax,%rax,1)
cmp    $0x10,%r8
jae    162d <range+0x4dd>
xor    %ecx,%ecx
jmp    173a <range+0x5ea>
mov    %r11,%rdx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqu 0x0(%rbp,%rcx,2),%xmm6
movdqu 0x10(%rbp,%rcx,2),%xmm7
movdqu 0x20(%rbp,%rcx,2),%xmm4
movdqu 0x30(%rbp,%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,0x0(%rbp,%rcx,2)
movdqu %xmm1,0x10(%rbp,%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(%rbp,%rcx,2)
movdqu %xmm4,0x30(%rbp,%rcx,2)
add    $0x20,%rcx
add    $0xfffffffffffffffe,%rdx
jne    1640 <range+0x4f0>
test   $0x1,%r9b
je     17b6 <range+0x666>
movdqu 0x0(%rbp,%rcx,2),%xmm1
movdqu 0x10(%rbp,%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,0x0(%rbp,%rcx,2)
movdqu %xmm5,0x10(%rbp,%rcx,2)
mov    %r10,%rcx
cmp    %rsi,%r10
je     15f0 <range+0x4a0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movswl 0x0(%rbp,%rcx,2),%edx
cmp    %r15d,%edx
mov    %eax,%edx
cmovg  %ebx,%edx
mov    %dx,0x0(%rbp,%rcx,2)
add    $0x1,%rcx
cmp    %rcx,%rsi
jne    17d0 <range+0x680>
jmp    15f0 <range+0x4a0>
mov    %r13,%rdi
call   1030 <free@plt>
mov    $0x1,%eax
add    $0xd8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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