void blur_cusp(int *in, int *tmp, int w, int h, int amount) {
  int ramount;
  int sum;
  int i, j;
  ramount = 256 - amount;
  sum = in[0];
  for (i = 0; i < w * h; i++) {
    sum = (sum * amount + in[i] * ramount) >> 8;
    tmp[i] = sum;
  }
  sum = tmp[w * h - 1];
  for (i = w * h - 1; i >= 0; i--) {
    sum = (sum * amount + tmp[i] * ramount) >> 8;
    in[i] = sum;
  }
  for (i = 1; i < (w * h) - 1; i++) {
    tmp[i] = (in[i - 1] + in[i] + in[i + 1]) / 3;
  }
  sum = tmp[0];
  for (j = 0; j < w; j++) {
    for (i = j; i < w * h; i += w) {
      sum = (sum * amount + tmp[i] * ramount) >> 8;
      in[i] = sum;
    }
  }
  sum = in[w * h - 1];
  for (j = w - 1; j >= 0; j--) {
    for (i = w * (h - 1) + j; i >= 0; i -= w) {
      sum = (sum * amount + in[i] * ramount) >> 8;
      tmp[i] = sum;
    }
  }
  for (j = 1; j < (w - 1); j++) {
    for (i = j + w; i < (w * h) - h; i += w) {
      in[i] = (tmp[i - w] + tmp[i] + tmp[i + w]) / 3;
    }
  }
}


x86 assembly (clang, -O0):
<blur_cusp>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    $0x100,%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    117d <blur_cusp+0x7d>
mov    -0x24(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    -0x8(%rbp),%rcx
movslq -0x28(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
imul   -0x20(%rbp),%ecx
add    %ecx,%eax
sar    $0x8,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1131 <blur_cusp+0x31>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
imul   -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jl     11e5 <blur_cusp+0xe5>
mov    -0x24(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x28(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
imul   -0x20(%rbp),%ecx
add    %ecx,%eax
sar    $0x8,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    11a1 <blur_cusp+0xa1>
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    124f <blur_cusp+0x14f>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0x28(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%edx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11ec <blur_cusp+0xec>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12d0 <blur_cusp+0x1d0>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    12bd <blur_cusp+0x1bd>
mov    -0x24(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x28(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
imul   -0x20(%rbp),%ecx
add    %ecx,%eax
sar    $0x8,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    1271 <blur_cusp+0x171>
jmp    12c2 <blur_cusp+0x1c2>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    125f <blur_cusp+0x15f>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     1365 <blur_cusp+0x265>
mov    -0x14(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jl     1352 <blur_cusp+0x252>
mov    -0x24(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    -0x8(%rbp),%rcx
movslq -0x28(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
imul   -0x20(%rbp),%ecx
add    %ecx,%eax
sar    $0x8,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
jmp    130c <blur_cusp+0x20c>
jmp    1357 <blur_cusp+0x257>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    12f0 <blur_cusp+0x1f0>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13fc <blur_cusp+0x2fc>
mov    -0x2c(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
sub    -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    13e9 <blur_cusp+0x2e9>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    -0x14(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x28(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    -0x14(%rbp),%edx
movslq %edx,%rdx
add    (%rcx,%rdx,4),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%edx
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    1386 <blur_cusp+0x286>
jmp    13ee <blur_cusp+0x2ee>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    136c <blur_cusp+0x26c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<blur_cusp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    $0x100,%r13d
sub    %r8d,%r13d
mov    %ecx,%r9d
imul   %edx,%r9d
test   %r9d,%r9d
jle    11f8 <blur_cusp+0xf8>
mov    (%rdi),%eax
mov    %eax,(%rsi)
cmp    $0x1,%r9d
je     11b9 <blur_cusp+0xb9>
mov    %r9d,%r11d
add    $0xffffffffffffffff,%r11
mov    $0x1,%r10d
cmp    $0x2,%r9d
je     119e <blur_cusp+0x9e>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
neg    %rbx
mov    $0x1,%r10d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
imul   %r8d,%eax
mov    (%rdi,%r10,4),%ebp
imul   %r13d,%ebp
add    %eax,%ebp
sar    $0x8,%ebp
mov    %ebp,(%rsi,%r10,4)
imul   %r8d,%ebp
mov    0x4(%rdi,%r10,4),%eax
imul   %r13d,%eax
add    %ebp,%eax
sar    $0x8,%eax
mov    %eax,0x4(%rsi,%r10,4)
lea    (%rbx,%r10,1),%rbp
add    $0x2,%rbp
add    $0x2,%r10
cmp    $0x1,%rbp
jne    1160 <blur_cusp+0x60>
test   $0x1,%r11b
je     11b9 <blur_cusp+0xb9>
imul   %r8d,%eax
mov    (%rdi,%r10,4),%ebp
imul   %r13d,%ebp
add    %eax,%ebp
sar    $0x8,%ebp
mov    %ebp,(%rsi,%r10,4)
lea    -0x1(%r9),%r14d
movslq %r14d,%r10
test   %r9d,%r9d
jle    140e <blur_cusp+0x30e>
mov    (%rsi,%r10,4),%eax
mov    %r10d,%r11d
test   $0x1,%r10b
jne    1204 <blur_cusp+0x104>
imul   %r8d,%eax
mov    (%rsi,%r11,4),%ebp
imul   %r13d,%ebp
add    %eax,%ebp
sar    $0x8,%ebp
mov    %ebp,(%rdi,%r11,4)
lea    -0x1(%r11),%rbx
mov    %ebp,%eax
test   %r14d,%r14d
jne    1210 <blur_cusp+0x110>
jmp    1242 <blur_cusp+0x142>
lea    -0x1(%r9),%eax
movslq %eax,%r10
jmp    140e <blur_cusp+0x30e>
mov    %r11,%rbx
test   %r14d,%r14d
je     1242 <blur_cusp+0x142>
nopl   0x0(%rax)
imul   %r8d,%eax
mov    (%rsi,%rbx,4),%ebp
imul   %r13d,%ebp
add    %eax,%ebp
sar    $0x8,%ebp
mov    %ebp,(%rdi,%rbx,4)
imul   %r8d,%ebp
mov    -0x4(%rsi,%rbx,4),%eax
imul   %r13d,%eax
add    %ebp,%eax
sar    $0x8,%eax
mov    %eax,-0x4(%rdi,%rbx,4)
add    $0xfffffffffffffffe,%rbx
cmp    $0xffffffffffffffff,%rbx
jne    1210 <blur_cusp+0x110>
cmp    $0x3,%r9d
jl     140e <blur_cusp+0x30e>
lea    -0x1(%r11),%r14
mov    $0x1,%r12d
cmp    $0x8,%r14
jb     1365 <blur_cusp+0x265>
lea    0x4(%rsi),%rax
lea    (%rdi,%r11,4),%rbx
add    $0x4,%rbx
cmp    %rbx,%rax
jae    127e <blur_cusp+0x17e>
lea    (%rsi,%r11,4),%rax
cmp    %rdi,%rax
ja     1365 <blur_cusp+0x265>
mov    %r14,%r15
and    $0xfffffffffffffff8,%r15
lea    0x1(%r15),%r12
xor    %eax,%eax
movdqa 0xd6d(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqu (%rdi,%rax,4),%xmm1
movdqu 0x4(%rdi,%rax,4),%xmm2
paddd  %xmm1,%xmm2
movdqu 0x8(%rdi,%rax,4),%xmm1
paddd  %xmm2,%xmm1
movdqu 0x10(%rdi,%rax,4),%xmm2
movdqu 0x14(%rdi,%rax,4),%xmm3
paddd  %xmm2,%xmm3
movdqu 0x18(%rdi,%rax,4),%xmm2
paddd  %xmm3,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pxor   %xmm4,%xmm4
pcmpgtd %xmm1,%xmm4
pmuludq %xmm0,%xmm1
pshufd $0xed,%xmm1,%xmm1
pmuludq %xmm0,%xmm3
pshufd $0xed,%xmm3,%xmm3
punpckldq %xmm3,%xmm1
pand   %xmm0,%xmm4
psubd  %xmm4,%xmm1
movdqa %xmm1,%xmm3
psrld  $0x1f,%xmm3
paddd  %xmm1,%xmm3
pshufd $0xf5,%xmm2,%xmm1
pxor   %xmm4,%xmm4
pcmpgtd %xmm2,%xmm4
pmuludq %xmm0,%xmm2
pshufd $0xed,%xmm2,%xmm2
pmuludq %xmm0,%xmm1
pshufd $0xed,%xmm1,%xmm1
punpckldq %xmm1,%xmm2
pand   %xmm0,%xmm4
psubd  %xmm4,%xmm2
movdqa %xmm2,%xmm1
psrld  $0x1f,%xmm1
paddd  %xmm2,%xmm1
movdqu %xmm3,0x4(%rsi,%rax,4)
movdqu %xmm1,0x14(%rsi,%rax,4)
add    $0x8,%rax
cmp    %rax,%r15
jne    12a0 <blur_cusp+0x1a0>
cmp    %r15,%r14
je     140e <blur_cusp+0x30e>
mov    %r12,%rax
not    %rax
test   $0x1,%r11b
jne    139e <blur_cusp+0x29e>
mov    (%rdi,%r12,4),%ebx
add    -0x4(%rdi,%r12,4),%ebx
add    0x4(%rdi,%r12,4),%ebx
movslq %ebx,%rbx
imul   $0x55555556,%rbx,%rbx
mov    %rbx,%rbp
shr    $0x3f,%rbp
shr    $0x20,%rbx
add    %ebp,%ebx
mov    %ebx,(%rsi,%r12,4)
add    $0x1,%r12
add    %r11,%rax
je     140e <blur_cusp+0x30e>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rdi,%r12,4),%eax
add    -0x4(%rdi,%r12,4),%eax
add    0x4(%rdi,%r12,4),%eax
cltq
imul   $0x55555556,%rax,%rax
mov    %rax,%rbx
shr    $0x3f,%rbx
shr    $0x20,%rax
add    %ebx,%eax
mov    %eax,(%rsi,%r12,4)
mov    0x4(%rdi,%r12,4),%eax
add    (%rdi,%r12,4),%eax
add    0x8(%rdi,%r12,4),%eax
cltq
imul   $0x55555556,%rax,%rax
mov    %rax,%rbx
shr    $0x3f,%rbx
shr    $0x20,%rax
add    %ebx,%eax
mov    %eax,0x4(%rsi,%r12,4)
lea    0x2(%r12),%rax
mov    %rax,%r12
cmp    %rax,%r11
jne    13b0 <blur_cusp+0x2b0>
test   %edx,%edx
jle    1552 <blur_cusp+0x452>
mov    (%rsi),%ebx
mov    %edx,%r14d
movslq %r9d,%r15
xor    %r11d,%r11d
jmp    143d <blur_cusp+0x33d>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %ebx,%eax
add    $0x1,%r11
mov    %eax,%ebx
cmp    %r14,%r11
je     146f <blur_cusp+0x36f>
cmp    %r11d,%r9d
jle    1430 <blur_cusp+0x330>
mov    %r11,%rbp
cs nopw 0x0(%rax,%rax,1)
nop
imul   %r8d,%ebx
mov    (%rsi,%rbp,4),%eax
imul   %r13d,%eax
add    %ebx,%eax
sar    $0x8,%eax
mov    %eax,(%rdi,%rbp,4)
add    %r14,%rbp
mov    %eax,%ebx
cmp    %r15,%rbp
jl     1450 <blur_cusp+0x350>
jmp    1432 <blur_cusp+0x332>
test   %edx,%edx
jle    1552 <blur_cusp+0x452>
lea    -0x1(%rdx),%r11d
mov    (%rdi,%r10,4),%ebx
lea    -0x1(%rcx),%r10d
imul   %edx,%r10d
mov    %r11d,%r15d
jmp    14a0 <blur_cusp+0x3a0>
nopl   0x0(%rax)
mov    %ebx,%ebp
lea    -0x1(%r15),%eax
mov    %ebp,%ebx
test   %r15d,%r15d
mov    %eax,%r15d
jle    14d0 <blur_cusp+0x3d0>
mov    %r15d,%eax
add    %r10d,%eax
js     1490 <blur_cusp+0x390>
nopl   0x0(%rax,%rax,1)
imul   %r8d,%ebx
mov    %eax,%r12d
mov    (%rdi,%r12,4),%ebp
imul   %r13d,%ebp
add    %ebx,%ebp
sar    $0x8,%ebp
mov    %ebp,(%rsi,%r12,4)
sub    %edx,%eax
mov    %ebp,%ebx
jns    14b0 <blur_cusp+0x3b0>
jmp    1492 <blur_cusp+0x392>
cmp    $0x3,%edx
jl     1552 <blur_cusp+0x452>
sub    %ecx,%r9d
movslq %r9d,%r8
lea    0x0(,%r14,4),%rax
mov    %rsi,%r12
sub    %rax,%r12
lea    (%rsi,%r14,4),%rcx
mov    $0x1,%r10d
mov    %edx,%r15d
jmp    1509 <blur_cusp+0x409>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r10d
cmp    %r11d,%r10d
je     1552 <blur_cusp+0x452>
add    $0x1,%r15d
lea    (%r10,%rdx,1),%eax
cmp    %r9d,%eax
jge    1500 <blur_cusp+0x400>
movslq %r15d,%rax
nopl   0x0(%rax)
mov    (%rsi,%rax,4),%ebp
add    (%r12,%rax,4),%ebp
add    (%rcx,%rax,4),%ebp
movslq %ebp,%rbp
imul   $0x55555556,%rbp,%rbp
mov    %rbp,%rbx
shr    $0x3f,%rbx
shr    $0x20,%rbp
add    %ebx,%ebp
mov    %ebp,(%rdi,%rax,4)
lea    (%rax,%r14,1),%rbx
mov    %rbx,%rax
cmp    %r8,%rbx
jl     1520 <blur_cusp+0x420>
jmp    1500 <blur_cusp+0x400>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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