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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int icerp(int, int, int, int, int);
void scale_pixels(unsigned char *dst, int dw, int dh, unsigned char *src,
                  int sw, int sh, int bpp) {
  int x, y, n, ix, iy, wx, wy, v;
  int a, b, c, d;
  int dstride = dw * bpp;
  unsigned char *s;
  for (y = 0; y < dh; ++y) {
    if (dh > 1) {
      iy = (((sh - 1) * y) << 7) / (dh - 1);
      if (y == dh - 1)
        --iy;
      wy = iy & 0x7f;
      iy >>= 7;
    } else
      iy = wy = 0;
    for (x = 0; x < dw; ++x) {
      if (dw > 1) {
        ix = (((sw - 1) * x) << 7) / (dw - 1);
        if (x == dw - 1)
          --ix;
        wx = ix & 0x7f;
        ix >>= 7;
      } else
        ix = wx = 0;
      s = src + ((iy - 1) * sw + (ix - 1)) * bpp;
      for (n = 0; n < bpp; ++n) {
        b = icerp(s[(sw + 0) * bpp], s[(sw + 1) * bpp], s[(sw + 2) * bpp],
                  s[(sw + 3) * bpp], wx);
        if (iy > 0) {
          a = icerp(s[0], s[bpp], s[2 * bpp], s[3 * bpp], wx);
        } else
          a = b;
        c = icerp(s[(2 * sw + 0) * bpp], s[(2 * sw + 1) * bpp],
                  s[(2 * sw + 2) * bpp], s[(2 * sw + 3) * bpp], wx);
        if (iy < dh - 1) {
          d = icerp(s[(3 * sw + 0) * bpp], s[(3 * sw + 1) * bpp],
                    s[(3 * sw + 2) * bpp], s[(3 * sw + 3) * bpp], wx);
        } else
          d = c;
        v = icerp(a, b, c, d, wy);
        if (v < 0)
          v = 0;
        if (v > 255)
          v = 255;
        dst[(y * dstride) + (x * bpp) + n] = v;
        ++s;
      }
    }
  }
}


x86 assembly (clang, -O0):
<scale_pixels>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
mov    -0xc(%rbp),%eax
imul   0x10(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    149b <scale_pixels+0x38b>
cmpl   $0x1,-0x10(%rbp)
jle    11a2 <scale_pixels+0x92>
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
imul   -0x28(%rbp),%eax
shl    $0x7,%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    118b <scale_pixels+0x7b>
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
and    $0x7f,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x34(%rbp),%eax
sar    $0x7,%eax
mov    %eax,-0x34(%rbp)
jmp    11b0 <scale_pixels+0xa0>
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1488 <scale_pixels+0x378>
cmpl   $0x1,-0xc(%rbp)
jle    1217 <scale_pixels+0x107>
mov    -0x1c(%rbp),%eax
sub    $0x1,%eax
imul   -0x24(%rbp),%eax
shl    $0x7,%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cltd
idiv   %ecx
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1200 <scale_pixels+0xf0>
mov    -0x30(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
and    $0x7f,%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
sar    $0x7,%eax
mov    %eax,-0x30(%rbp)
jmp    1225 <scale_pixels+0x115>
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x1c(%rbp),%ecx
mov    -0x30(%rbp),%edx
sub    $0x1,%edx
add    %edx,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1475 <scale_pixels+0x365>
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x0,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%esi
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%ecx
mov    -0x38(%rbp),%r8d
call   1030 <icerp@plt>
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x34(%rbp)
jle    130a <scale_pixels+0x1fa>
mov    -0x60(%rbp),%rax
movzbl (%rax),%edi
mov    -0x60(%rbp),%rax
movslq 0x10(%rbp),%rcx
movzbl (%rax,%rcx,1),%esi
mov    -0x60(%rbp),%rax
mov    0x10(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
mov    -0x60(%rbp),%rax
imul   $0x3,0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%ecx
mov    -0x38(%rbp),%r8d
call   1030 <icerp@plt>
mov    %eax,-0x44(%rbp)
jmp    1310 <scale_pixels+0x200>
mov    -0x48(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%esi
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
mov    -0x60(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%ecx
mov    -0x38(%rbp),%r8d
call   1030 <icerp@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13f6 <scale_pixels+0x2e6>
mov    -0x60(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x0,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
mov    -0x60(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x1,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%esi
mov    -0x60(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x2,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edx
mov    -0x60(%rbp),%rax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x3,%ecx
imul   0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%ecx
mov    -0x38(%rbp),%r8d
call   1030 <icerp@plt>
mov    %eax,-0x50(%rbp)
jmp    13fc <scale_pixels+0x2ec>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x44(%rbp),%edi
mov    -0x48(%rbp),%esi
mov    -0x4c(%rbp),%edx
mov    -0x50(%rbp),%ecx
mov    -0x3c(%rbp),%r8d
call   1030 <icerp@plt>
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    1425 <scale_pixels+0x315>
movl   $0x0,-0x40(%rbp)
cmpl   $0xff,-0x40(%rbp)
jle    1439 <scale_pixels+0x329>
movl   $0xff,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   -0x54(%rbp),%ecx
mov    -0x24(%rbp),%esi
imul   0x10(%rbp),%esi
add    %esi,%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x60(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1250 <scale_pixels+0x140>
jmp    147a <scale_pixels+0x36a>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11b7 <scale_pixels+0xa7>
jmp    148d <scale_pixels+0x37d>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1142 <scale_pixels+0x32>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<scale_pixels>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x168,%rsp
mov    %r8,0x40(%rsp)
mov    %rcx,0x50(%rsp)
mov    %rdi,0x128(%rsp)
test   %edx,%edx
jle    1659 <scale_pixels+0x549>
mov    0x1a0(%rsp),%r8d
shl    $0x7,%r9d
add    $0xffffff80,%r9d
mov    %r9d,0x28(%rsp)
mov    0x40(%rsp),%rcx
mov    %ecx,%eax
shl    $0x7,%eax
add    $0xffffff80,%eax
mov    %eax,0x34(%rsp)
mov    %r8d,%eax
imul   %ecx,%eax
cltq
mov    %rax,0x48(%rsp)
lea    0x1(%rcx),%eax
imul   %r8d,%eax
movslq %eax,%r9
lea    0x2(%rcx),%eax
imul   %r8d,%eax
movslq %eax,%r10
lea    0x3(%rcx),%eax
imul   %r8d,%eax
movslq %eax,%r11
lea    (%rcx,%rcx,1),%eax
imul   %r8d,%eax
movslq %eax,%r14
lea    (%rcx,%rcx,1),%eax
add    $0x1,%eax
imul   %r8d,%eax
movslq %eax,%r15
lea    (%rcx,%rcx,1),%eax
add    $0x2,%eax
imul   %r8d,%eax
movslq %eax,%r12
lea    (%rcx,%rcx,1),%eax
add    $0x3,%eax
imul   %r8d,%eax
movslq %eax,%r13
lea    (%rcx,%rcx,2),%eax
imul   %r8d,%eax
movslq %eax,%rbp
lea    (%rcx,%rcx,2),%eax
add    $0x1,%eax
imul   %r8d,%eax
movslq %eax,%rbx
lea    (%rcx,%rcx,2),%eax
add    $0x2,%eax
imul   %r8d,%eax
movslq %eax,%rdi
lea    (%rcx,%rcx,2),%eax
add    $0x3,%eax
imul   %r8d,%eax
cltq
mov    %r8d,%ecx
imul   %esi,%ecx
mov    %rcx,0x60(%rsp)
mov    0x50(%rsp),%rcx
add    %rcx,%rax
mov    %rax,0x88(%rsp)
add    %rcx,%rdi
mov    %rdi,0x90(%rsp)
add    %rcx,%rbx
mov    %rbx,0x98(%rsp)
add    %rcx,%rbp
mov    %rbp,0xa0(%rsp)
add    %rcx,0x48(%rsp)
add    %rcx,%r9
mov    %r9,0xd8(%rsp)
add    %rcx,%r10
mov    %r10,0xd0(%rsp)
add    %rcx,%r11
mov    %r11,0xc8(%rsp)
movslq %r8d,%rax
lea    (%rax,%rax,2),%rdi
mov    %eax,%ebp
mov    %rbp,0x58(%rsp)
lea    (%rcx,%rax,1),%rbp
mov    %rbp,0x78(%rsp)
lea    (%rcx,%rax,2),%rax
mov    %rax,0x70(%rsp)
add    %rcx,%rdi
mov    %rdi,0x80(%rsp)
add    %rcx,%r14
mov    %r14,0xc0(%rsp)
add    %rcx,%r15
mov    %r15,0xb8(%rsp)
add    %rcx,%r12
mov    %r12,0xb0(%rsp)
add    %rcx,%r13
mov    %r13,0xa8(%rsp)
lea    -0x1(%rdx),%eax
mov    %eax,0x8(%rsp)
lea    -0x1(%rsi),%eax
mov    %eax,0x30(%rsp)
xor    %eax,%eax
mov    %rax,0x18(%rsp)
xor    %edi,%edi
mov    %rdx,0x68(%rsp)
mov    %rsi,0xe0(%rsp)
jmp    12f3 <scale_pixels+0x1e3>
nopl   0x0(%rax)
mov    0x2c(%rsp),%edi
add    $0x1,%edi
mov    0x18(%rsp),%rax
add    0x60(%rsp),%rax
mov    %rax,0x18(%rsp)
mov    0x68(%rsp),%rdx
cmp    %edx,%edi
je     1659 <scale_pixels+0x549>
mov    $0x0,%eax
mov    %rax,0x10(%rsp)
movl   $0x0,0xc(%rsp)
cmp    $0x1,%edx
je     1332 <scale_pixels+0x222>
mov    0x28(%rsp),%eax
imul   %edi,%eax
cltd
mov    0x8(%rsp),%ecx
idiv   %ecx
xor    %edx,%edx
cmp    %ecx,%edi
sete   %dl
sub    %edx,%eax
mov    %eax,%ecx
and    $0x7f,%ecx
mov    %ecx,0xc(%rsp)
sar    $0x7,%eax
mov    %rax,0x10(%rsp)
mov    %edi,0x2c(%rsp)
test   %esi,%esi
jle    12d0 <scale_pixels+0x1c0>
mov    0x10(%rsp),%rax
add    $0xffffffff,%eax
imul   0x40(%rsp),%eax
add    $0xffffffff,%eax
mov    %eax,0x38(%rsp)
xor    %edi,%edi
mov    0x18(%rsp),%rax
mov    %rax,0x20(%rsp)
jmp    1386 <scale_pixels+0x276>
nopl   0x0(%rax)
mov    0x3c(%rsp),%edi
add    $0x1,%edi
mov    0x20(%rsp),%rax
add    0x58(%rsp),%rax
mov    %rax,0x20(%rsp)
mov    0xe0(%rsp),%rsi
cmp    %esi,%edi
je     12d0 <scale_pixels+0x1c0>
mov    $0x0,%r12d
mov    $0x0,%eax
cmp    $0x2,%esi
jl     13b7 <scale_pixels+0x2a7>
mov    0x34(%rsp),%eax
imul   %edi,%eax
cltd
mov    0x30(%rsp),%esi
idiv   %esi
xor    %ecx,%ecx
cmp    %esi,%edi
sete   %cl
sub    %ecx,%eax
mov    %eax,%r12d
and    $0x7f,%r12d
sar    $0x7,%eax
mov    %edi,0x3c(%rsp)
cmpl   $0x0,0x1a0(%rsp)
jle    1360 <scale_pixels+0x250>
add    0x38(%rsp),%eax
imul   0x1a0(%rsp),%eax
movslq %eax,%r15
mov    0x50(%rsp),%rax
add    %r15,%rax
mov    %rax,0x120(%rsp)
mov    0x88(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x100(%rsp)
mov    0x90(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0xf8(%rsp)
mov    0x98(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0xf0(%rsp)
mov    0xa0(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0xe8(%rsp)
mov    0x48(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x160(%rsp)
mov    0xd8(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x158(%rsp)
mov    0xd0(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x150(%rsp)
mov    0xc8(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x148(%rsp)
mov    0x78(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x118(%rsp)
mov    0x70(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x110(%rsp)
mov    0x80(%rsp),%rax
lea    (%rax,%r15,1),%rax
mov    %rax,0x108(%rsp)
mov    0xc0(%rsp),%rax
add    %r15,%rax
mov    %rax,0x140(%rsp)
mov    0xb8(%rsp),%rax
add    %r15,%rax
mov    %rax,0x138(%rsp)
mov    0xb0(%rsp),%rax
add    %r15,%rax
mov    %rax,0x130(%rsp)
add    0xa8(%rsp),%r15
xor    %r14d,%r14d
jmp    1525 <scale_pixels+0x415>
nopl   (%rax)
mov    0x20(%rsp),%rcx
add    %r14d,%ecx
movslq %ecx,%rcx
mov    0x128(%rsp),%rdx
mov    %al,(%rdx,%rcx,1)
add    $0x1,%r14
cmp    %r14,0x58(%rsp)
je     1360 <scale_pixels+0x250>
mov    0x160(%rsp),%rax
movzbl (%rax,%r14,1),%edi
mov    0x158(%rsp),%rax
movzbl (%rax,%r14,1),%esi
mov    0x150(%rsp),%rax
movzbl (%rax,%r14,1),%edx
mov    0x148(%rsp),%rax
movzbl (%rax,%r14,1),%ecx
mov    %r12d,%r8d
call   1030 <icerp@plt>
mov    %eax,%ebx
mov    %eax,%r13d
cmpl   $0x0,0x10(%rsp)
jle    15ac <scale_pixels+0x49c>
mov    0x120(%rsp),%rax
movzbl (%rax,%r14,1),%edi
mov    0x118(%rsp),%rax
movzbl (%rax,%r14,1),%esi
mov    0x110(%rsp),%rax
movzbl (%rax,%r14,1),%edx
mov    0x108(%rsp),%rax
movzbl (%rax,%r14,1),%ecx
mov    %r12d,%r8d
call   1030 <icerp@plt>
mov    %eax,%r13d
mov    0x140(%rsp),%rax
movzbl (%rax,%r14,1),%edi
mov    0x138(%rsp),%rax
movzbl (%rax,%r14,1),%esi
mov    0x130(%rsp),%rax
movzbl (%rax,%r14,1),%edx
movzbl (%r15,%r14,1),%ecx
mov    %r12d,%r8d
call   1030 <icerp@plt>
mov    %eax,%ebp
mov    %eax,%ecx
mov    0x10(%rsp),%rax
cmp    0x8(%rsp),%eax
jge    162d <scale_pixels+0x51d>
mov    0xe8(%rsp),%rax
movzbl (%rax,%r14,1),%edi
mov    0xf0(%rsp),%rax
movzbl (%rax,%r14,1),%esi
mov    0xf8(%rsp),%rax
movzbl (%rax,%r14,1),%edx
mov    0x100(%rsp),%rax
movzbl (%rax,%r14,1),%ecx
mov    %r12d,%r8d
call   1030 <icerp@plt>
mov    %eax,%ecx
mov    %r13d,%edi
mov    %ebx,%esi
mov    %ebp,%edx
mov    0xc(%rsp),%r8d
call   1030 <icerp@plt>
test   %eax,%eax
jns    1644 <scale_pixels+0x534>
xor    %eax,%eax
cmp    $0xff,%eax
jb     1500 <scale_pixels+0x3f0>
mov    $0xff,%eax
jmp    1500 <scale_pixels+0x3f0>
add    $0x168,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @scale_pixels(i8* nocapture writeonly %0, i32 %1, i32 %2, i8* nocapture %3, i32 %4, i32 %5, i32 %6) {
%8 = icmp sgt i32 %2, 0
br i1 %8, label %9, label %180
9: ; preds = %7
%10 = icmp eq i32 %2, 1
%11 = shl i32 %5, 7
%12 = add i32 %11, -128
%13 = add nsw i32 %2, -1
%14 = icmp sgt i32 %1, 0
%15 = icmp sgt i32 %1, 1
%16 = shl i32 %4, 7
%17 = add i32 %16, -128
%18 = add nsw i32 %1, -1
%19 = icmp sgt i32 %6, 0
%20 = mul nsw i32 %6, %4
%21 = sext i32 %20 to i64
%22 = add nsw i32 %4, 1
%23 = mul nsw i32 %22, %6
%24 = sext i32 %23 to i64
%25 = add nsw i32 %4, 2
%26 = mul nsw i32 %25, %6
%27 = sext i32 %26 to i64
%28 = add nsw i32 %4, 3
%29 = mul nsw i32 %28, %6
%30 = sext i32 %29 to i64
%31 = sext i32 %6 to i64
%32 = shl nsw i32 %6, 1
%33 = sext i32 %32 to i64
%34 = mul nsw i32 %6, 3
%35 = sext i32 %34 to i64
%36 = shl nsw i32 %4, 1
%37 = mul nsw i32 %36, %6
%38 = sext i32 %37 to i64
%39 = or i32 %36, 1
%40 = mul nsw i32 %39, %6
%41 = sext i32 %40 to i64
%42 = add nsw i32 %36, 2
%43 = mul nsw i32 %42, %6
%44 = sext i32 %43 to i64
%45 = add nsw i32 %36, 3
%46 = mul nsw i32 %45, %6
%47 = sext i32 %46 to i64
%48 = mul nsw i32 %4, 3
%49 = mul nsw i32 %48, %6
%50 = sext i32 %49 to i64
%51 = add nsw i32 %48, 1
%52 = mul nsw i32 %51, %6
%53 = sext i32 %52 to i64
%54 = add nsw i32 %48, 2
%55 = mul nsw i32 %54, %6
%56 = sext i32 %55 to i64
%57 = add nsw i32 %48, 3
%58 = mul nsw i32 %57, %6
%59 = sext i32 %58 to i64
%60 = zext i32 %6 to i64
br label %61
61: ; preds = %9, %177
%62 = phi i32 [ 0, %9 ], [ %178, %177 ]
br i1 %10, label %71, label %63
63: ; preds = %61
%64 = mul i32 %12, %62
%65 = sdiv i32 %64, %13
%66 = icmp eq i32 %62, %13
%67 = sext i1 %66 to i32
%68 = add nsw i32 %65, %67
%69 = and i32 %68, 127
%70 = ashr i32 %68, 7
br label %71
71: ; preds = %61, %63
%72 = phi i32 [ %70, %63 ], [ 0, %61 ]
%73 = phi i32 [ %69, %63 ], [ 0, %61 ]
br i1 %14, label %74, label %177
74: ; preds = %71
%75 = add nsw i32 %72, -1
%76 = mul nsw i32 %75, %4
%77 = add i32 %76, -1
%78 = icmp sgt i32 %72, 0
%79 = icmp slt i32 %72, %13
%80 = mul i32 %62, %1
br label %81
81: ; preds = %74, %174
%82 = phi i32 [ 0, %74 ], [ %175, %174 ]
br i1 %15, label %83, label %91
83: ; preds = %81
%84 = mul i32 %17, %82
%85 = sdiv i32 %84, %18
%86 = icmp eq i32 %82, %18
%87 = sext i1 %86 to i32
%88 = add nsw i32 %85, %87
%89 = and i32 %88, 127
%90 = ashr i32 %88, 7
br label %91
91: ; preds = %81, %83
%92 = phi i32 [ %89, %83 ], [ 0, %81 ]
%93 = phi i32 [ %90, %83 ], [ 0, %81 ]
br i1 %19, label %94, label %174
94: ; preds = %91
%95 = add i32 %77, %93
%96 = mul nsw i32 %95, %6
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i8, i8* %3, i64 %97
%99 = add i32 %82, %80
%100 = mul i32 %99, %6
br label %101
101: ; preds = %94, %159
%102 = phi i64 [ 0, %94 ], [ %172, %159 ]
%103 = phi i8* [ %98, %94 ], [ %171, %159 ]
%104 = getelementptr inbounds i8, i8* %103, i64 %21
%105 = load i8, i8* %104
%106 = zext i8 %105 to i32
%107 = getelementptr inbounds i8, i8* %103, i64 %24
%108 = load i8, i8* %107
%109 = zext i8 %108 to i32
%110 = getelementptr inbounds i8, i8* %103, i64 %27
%111 = load i8, i8* %110
%112 = zext i8 %111 to i32
%113 = getelementptr inbounds i8, i8* %103, i64 %30
%114 = load i8, i8* %113
%115 = zext i8 %114 to i32
%116 = tail call i32 @icerp(i32 %106, i32 %109, i32 %112, i32 %115, i32 %92)
br i1 %78, label %117, label %130
117: ; preds = %101
%118 = load i8, i8* %103
%119 = zext i8 %118 to i32
%120 = getelementptr inbounds i8, i8* %103, i64 %31
%121 = load i8, i8* %120
%122 = zext i8 %121 to i32
%123 = getelementptr inbounds i8, i8* %103, i64 %33
%124 = load i8, i8* %123
%125 = zext i8 %124 to i32
%126 = getelementptr inbounds i8, i8* %103, i64 %35
%127 = load i8, i8* %126
%128 = zext i8 %127 to i32
%129 = tail call i32 @icerp(i32 %119, i32 %122, i32 %125, i32 %128, i32 %92)
br label %130
130: ; preds = %101, %117
%131 = phi i32 [ %129, %117 ], [ %116, %101 ]
%132 = getelementptr inbounds i8, i8* %103, i64 %38
%133 = load i8, i8* %132
%134 = zext i8 %133 to i32
%135 = getelementptr inbounds i8, i8* %103, i64 %41
%136 = load i8, i8* %135
%137 = zext i8 %136 to i32
%138 = getelementptr inbounds i8, i8* %103, i64 %44
%139 = load i8, i8* %138
%140 = zext i8 %139 to i32
%141 = getelementptr inbounds i8, i8* %103, i64 %47
%142 = load i8, i8* %141
%143 = zext i8 %142 to i32
%144 = tail call i32 @icerp(i32 %134, i32 %137, i32 %140, i32 %143, i32 %92)
br i1 %79, label %145, label %159
145: ; preds = %130
%146 = getelementptr inbounds i8, i8* %103, i64 %50
%147 = load i8, i8* %146
%148 = zext i8 %147 to i32
%149 = getelementptr inbounds i8, i8* %103, i64 %53
%150 = load i8, i8* %149
%151 = zext i8 %150 to i32
%152 = getelementptr inbounds i8, i8* %103, i64 %56
%153 = load i8, i8* %152
%154 = zext i8 %153 to i32
%155 = getelementptr inbounds i8, i8* %103, i64 %59
%156 = load i8, i8* %155
%157 = zext i8 %156 to i32
%158 = tail call i32 @icerp(i32 %148, i32 %151, i32 %154, i32 %157, i32 %92)
br label %159
159: ; preds = %130, %145
%160 = phi i32 [ %158, %145 ], [ %144, %130 ]
%161 = tail call i32 @icerp(i32 %131, i32 %116, i32 %144, i32 %160, i32 %73)
%162 = icmp sgt i32 %161, 0
%163 = select i1 %162, i32 %161, i32 0
%164 = icmp ult i32 %163, 255
%165 = select i1 %164, i32 %163, i32 255
%166 = trunc i32 %165 to i8
%167 = trunc i64 %102 to i32
%168 = add i32 %100, %167
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %0, i64 %169
store i8 %166, i8* %170
%171 = getelementptr inbounds i8, i8* %103, i64 1
%172 = add nuw nsw i64 %102, 1
%173 = icmp eq i64 %172, %60
br i1 %173, label %174, label %101
174: ; preds = %159, %91
%175 = add nuw nsw i32 %82, 1
%176 = icmp eq i32 %175, %1
br i1 %176, label %177, label %81
177: ; preds = %174, %71
%178 = add nuw nsw i32 %62, 1
%179 = icmp eq i32 %178, %2
br i1 %179, label %180, label %61
180: ; preds = %177, %7
ret void
}