void mc_chroma(unsigned char *src, int i_src_stride, unsigned char *dst,
               int i_dst_stride, int mvx, int mvy, int i_width, int i_height) {
  unsigned char *srcp;
  int x, y;
  const int d8x = mvx & 0x07;
  const int d8y = mvy & 0x07;
  const int cA = (8 - d8x) * (8 - d8y);
  const int cB = d8x * (8 - d8y);
  const int cC = (8 - d8x) * d8y;
  const int cD = d8x * d8y;
  src += (mvy >> 3) * i_src_stride + (mvx >> 3);
  srcp = &src[i_src_stride];
  for (y = 0; y < i_height; y++) {
    for (x = 0; x < i_width; x++) {
      dst[x] = (cA * src[x] + cB * src[x + 1] + cC * srcp[x] +
                cD * srcp[x + 1] + 32) >>
               6;
    }
    dst += i_dst_stride;
    src = srcp;
    srcp += i_src_stride;
  }
}


x86 assembly (clang, -O0):
<mc_chroma>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
mov    -0x20(%rbp),%eax
and    $0x7,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x24(%rbp),%eax
and    $0x7,%eax
mov    %eax,-0x40(%rbp)
mov    $0x8,%eax
sub    -0x3c(%rbp),%eax
mov    $0x8,%ecx
sub    -0x40(%rbp),%ecx
imul   %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x3c(%rbp),%eax
mov    $0x8,%ecx
sub    -0x40(%rbp),%ecx
imul   %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    $0x8,%eax
sub    -0x3c(%rbp),%eax
imul   -0x40(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x3c(%rbp),%eax
imul   -0x40(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x24(%rbp),%ecx
sar    $0x3,%ecx
imul   -0xc(%rbp),%ecx
mov    -0x20(%rbp),%eax
sar    $0x3,%eax
add    %eax,%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1278 <mc_chroma+0x178>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1240 <mc_chroma+0x140>
mov    -0x44(%rbp),%eax
mov    -0x8(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
mov    -0x48(%rbp),%ecx
mov    -0x8(%rbp),%rdx
mov    -0x34(%rbp),%esi
add    $0x1,%esi
movslq %esi,%rsi
movzbl (%rdx,%rsi,1),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    -0x4c(%rbp),%ecx
mov    -0x30(%rbp),%rdx
movslq -0x34(%rbp),%rsi
movzbl (%rdx,%rsi,1),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    -0x50(%rbp),%ecx
mov    -0x30(%rbp),%rdx
mov    -0x34(%rbp),%esi
add    $0x1,%esi
movslq %esi,%rsi
movzbl (%rdx,%rsi,1),%edx
imul   %edx,%ecx
add    %ecx,%eax
add    $0x20,%eax
sar    $0x6,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11bb <mc_chroma+0xbb>
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0xc(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11a8 <mc_chroma+0xa8>
pop    %rbp
ret

x86 assembly (clang, -O2):
<mc_chroma>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rdx,-0x58(%rsp)
mov    %rdi,-0x60(%rsp)
mov    0xb8(%rsp),%r11d
test   %r11d,%r11d
jle    17da <mc_chroma+0x6da>
mov    %r9d,%ebx
mov    0xb0(%rsp),%r10d
mov    %r8d,%eax
and    $0x7,%eax
and    $0x7,%r9d
mov    $0x8,%r14d
mov    $0x8,%ebp
sub    %eax,%ebp
sub    %r9d,%r14d
movslq %esi,%rdi
sar    $0x3,%ebx
mov    %edi,%edx
imul   %ebx,%edx
sar    $0x3,%r8d
add    %edx,%r8d
movslq %r8d,%rdx
mov    %r10d,%r8d
mov    -0x60(%rsp),%r10
lea    (%r10,%rdx,1),%rbx
movslq %ecx,%rcx
mov    %rcx,-0x50(%rsp)
mov    %r8d,%r12d
lea    (%rdi,%rdx,1),%rcx
lea    0x1(%r12,%rcx,1),%rsi
mov    %rsi,-0x30(%rsp)
lea    (%rdx,%r12,1),%rsi
add    $0x1,%rsi
mov    %rsi,-0x38(%rsp)
mov    %r12d,%esi
and    $0xfffffff0,%esi
mov    %rsi,-0x70(%rsp)
movd   %ebp,%xmm0
pshufd $0x0,%xmm0,%xmm1
movd   %eax,%xmm0
pshufd $0x0,%xmm0,%xmm2
movd   %r9d,%xmm0
pshufd $0x0,%xmm0,%xmm5
movd   %r14d,%xmm0
pshufd $0x0,%xmm0,%xmm13
mov    %r12d,%esi
and    $0xfffffff8,%esi
mov    %rsi,-0x68(%rsp)
lea    (%r10,%rdx,1),%r13
add    $0x1,%r13
pxor   %xmm7,%xmm7
movdqa %xmm1,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm2,%xmm8
packssdw %xmm8,%xmm8
punpcklwd %xmm0,%xmm8
movdqa %xmm1,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm2,%xmm11
packssdw %xmm11,%xmm11
punpcklwd %xmm0,%xmm11
movdqa %xmm5,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm13,%xmm9
packssdw %xmm9,%xmm9
punpcklwd %xmm0,%xmm9
movdqa %xmm5,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm13,%xmm10
packssdw %xmm10,%xmm10
punpcklwd %xmm0,%xmm10
movdqa %xmm1,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm2,%xmm6
packssdw %xmm6,%xmm6
punpcklwd %xmm0,%xmm6
movdqa %xmm1,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm2,%xmm12
packssdw %xmm12,%xmm12
punpcklwd %xmm0,%xmm12
movdqa %xmm1,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm2,%xmm15
packssdw %xmm15,%xmm15
punpcklwd %xmm0,%xmm15
packssdw %xmm1,%xmm1
packssdw %xmm2,%xmm2
punpcklwd %xmm1,%xmm2
movdqa %xmm5,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm13,%xmm14
packssdw %xmm14,%xmm14
punpcklwd %xmm0,%xmm14
movdqa %xmm5,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm13,%xmm1
packssdw %xmm1,%xmm1
punpcklwd %xmm0,%xmm1
movdqa %xmm1,0x50(%rsp)
movdqa %xmm5,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm13,%xmm1
packssdw %xmm1,%xmm1
punpcklwd %xmm0,%xmm1
movdqa %xmm1,0x40(%rsp)
packssdw %xmm5,%xmm5
packssdw %xmm13,%xmm13
punpcklwd %xmm5,%xmm13
mov    %rdi,-0x48(%rsp)
lea    0x1(%rdi),%rdx
mov    %rdx,-0x40(%rsp)
mov    %rcx,-0x28(%rsp)
lea    (%r10,%rcx,1),%rdx
add    $0x1,%rdx
xor    %ecx,%ecx
mov    %rcx,-0x80(%rsp)
mov    -0x58(%rsp),%r10
movdqa %xmm8,0x10(%rsp)
movdqa %xmm11,(%rsp)
movdqa %xmm9,-0x10(%rsp)
movdqa %xmm10,-0x20(%rsp)
movdqa %xmm6,0x60(%rsp)
movdqa %xmm12,0x30(%rsp)
movdqa %xmm15,0x20(%rsp)
pxor   %xmm15,%xmm15
jmp    136f <mc_chroma+0x26f>
mov    -0x48(%rsp),%rcx
mov    -0x78(%rsp),%rbx
add    %rcx,%rbx
add    -0x50(%rsp),%r10
mov    -0x80(%rsp),%rsi
add    $0x1,%rsi
add    %rcx,%r13
add    %rcx,%rdx
mov    %rsi,-0x80(%rsp)
cmp    %r11d,%esi
je     17da <mc_chroma+0x6da>
mov    %rbx,-0x78(%rsp)
test   %r8d,%r8d
jle    1340 <mc_chroma+0x240>
cmp    $0x8,%r8d
jae    1390 <mc_chroma+0x290>
xor    %esi,%esi
jmp    1790 <mc_chroma+0x690>
cs nopw 0x0(%rax,%rax,1)
mov    -0x80(%rsp),%rdi
mov    %rdi,%rsi
imul   -0x50(%rsp),%rsi
add    %r12,%rsi
add    -0x58(%rsp),%rsi
imul   -0x48(%rsp),%rdi
mov    -0x28(%rsp),%rcx
lea    (%rcx,%rdi,1),%r8
mov    -0x60(%rsp),%rcx
add    %rcx,%r8
mov    -0x30(%rsp),%rbx
add    %rdi,%rbx
add    %rcx,%rbx
add    -0x38(%rsp),%rdi
add    %rcx,%rdi
cmp    %rbx,%r10
setb   %r11b
cmp    %rsi,%r8
setb   %bl
cmp    %rdi,%r10
setb   %dil
cmp    %rsi,-0x78(%rsp)
setb   %r8b
test   %bl,%r11b
jne    141e <mc_chroma+0x31e>
mov    $0x0,%esi
and    %r8b,%dil
mov    0xb8(%rsp),%r11d
mov    0xb0(%rsp),%r8d
jne    1790 <mc_chroma+0x690>
cmp    $0x10,%r8d
jae    1435 <mc_chroma+0x335>
xor    %r15d,%r15d
jmp    1668 <mc_chroma+0x568>
xor    %esi,%esi
mov    0xb8(%rsp),%r11d
mov    0xb0(%rsp),%r8d
jmp    1790 <mc_chroma+0x690>
mov    -0x78(%rsp),%rcx
mov    -0x40(%rsp),%rsi
lea    (%rcx,%rsi,1),%r11
xor    %r8d,%r8d
mov    -0x70(%rsp),%rsi
nopl   0x0(%rax,%rax,1)
movdqu (%rcx,%r8,1),%xmm1
movdqu 0x1(%rcx,%r8,1),%xmm7
movdqa %xmm1,%xmm3
punpckhbw %xmm15,%xmm3
punpcklbw %xmm15,%xmm1
movdqa %xmm7,%xmm0
punpckhbw %xmm15,%xmm0
punpcklbw %xmm15,%xmm7
movdqu -0x1(%r11,%r8,1),%xmm6
movdqu (%r11,%r8,1),%xmm8
movdqa %xmm6,%xmm5
punpckhbw %xmm15,%xmm5
punpcklbw %xmm15,%xmm6
movdqa %xmm8,%xmm4
punpckhbw %xmm15,%xmm4
punpcklbw %xmm15,%xmm8
movdqa %xmm8,%xmm11
punpckhwd %xmm6,%xmm11
punpcklwd %xmm6,%xmm8
movdqa %xmm4,%xmm6
punpcklwd %xmm5,%xmm6
punpckhwd %xmm5,%xmm4
movdqa 0xb4a(%rip),%xmm5
movdqa %xmm7,%xmm9
punpckhwd %xmm1,%xmm9
punpcklwd %xmm1,%xmm7
movdqa %xmm0,%xmm1
punpcklwd %xmm3,%xmm1
punpckhwd %xmm3,%xmm0
pmaddwd %xmm2,%xmm4
pmaddwd %xmm2,%xmm0
pshuflw $0xe8,%xmm4,%xmm3
movdqa 0xb0b(%rip),%xmm4
pshufhw $0xe8,%xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshuflw $0xe8,%xmm0,%xmm0
pshufhw $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm10
punpcklwd %xmm3,%xmm10
movdqa 0x20(%rsp),%xmm0
pmaddwd %xmm0,%xmm6
pmaddwd %xmm0,%xmm1
pshuflw $0xe8,%xmm6,%xmm0
pshufhw $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshuflw $0xe8,%xmm1,%xmm1
pshufhw $0xe8,%xmm1,%xmm1
pshufd $0xe8,%xmm1,%xmm12
punpcklwd %xmm0,%xmm12
movdqa 0x30(%rsp),%xmm0
pmaddwd %xmm0,%xmm8
pmaddwd %xmm0,%xmm7
pshuflw $0xe8,%xmm8,%xmm0
pshufhw $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm1
pshuflw $0xe8,%xmm7,%xmm0
movdqa 0x60(%rsp),%xmm6
pshufhw $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpcklwd %xmm1,%xmm0
pmaddwd %xmm6,%xmm11
pmaddwd %xmm6,%xmm9
pshuflw $0xe8,%xmm11,%xmm1
pshufhw $0xe8,%xmm1,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshuflw $0xe8,%xmm9,%xmm3
pshufhw $0xe8,%xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpcklwd %xmm1,%xmm3
pmaddwd 0x40(%rsp),%xmm0
pmaddwd %xmm13,%xmm3
paddd  %xmm4,%xmm3
paddd  %xmm4,%xmm0
psrld  $0x6,%xmm0
psrld  $0x6,%xmm3
pand   %xmm5,%xmm3
pand   %xmm5,%xmm0
packuswb %xmm3,%xmm0
pmaddwd %xmm14,%xmm10
pmaddwd 0x50(%rsp),%xmm12
paddd  %xmm4,%xmm12
paddd  %xmm4,%xmm10
psrld  $0x6,%xmm10
psrld  $0x6,%xmm12
pand   %xmm5,%xmm12
pand   %xmm5,%xmm10
packuswb %xmm10,%xmm12
packuswb %xmm12,%xmm0
movdqu %xmm0,(%r10,%r8,1)
add    $0x10,%r8
cmp    %r8,%rsi
jne    1450 <mc_chroma+0x350>
cmp    %r12,%rsi
mov    0xb8(%rsp),%r11d
mov    0xb0(%rsp),%r8d
movdqa 0x10(%rsp),%xmm8
movdqa (%rsp),%xmm11
movdqa -0x10(%rsp),%xmm9
movdqa -0x20(%rsp),%xmm10
pxor   %xmm7,%xmm7
je     1340 <mc_chroma+0x240>
mov    -0x70(%rsp),%rsi
mov    %rsi,%r15
test   $0x8,%r12b
je     1790 <mc_chroma+0x690>
lea    (%r15,%r13,1),%rdi
lea    (%rdx,%r15,1),%rsi
lea    (%r10,%r15,1),%r8
mov    -0x68(%rsp),%r11
sub    %r15,%r11
xor    %r15d,%r15d
nop
movq   -0x1(%rdi,%r15,1),%xmm0
punpcklbw %xmm7,%xmm0
movq   (%rdi,%r15,1),%xmm1
punpcklbw %xmm7,%xmm1
movq   -0x1(%rsi,%r15,1),%xmm3
punpcklbw %xmm7,%xmm3
movq   (%rsi,%r15,1),%xmm4
punpcklbw %xmm7,%xmm4
movdqa %xmm4,%xmm5
punpckhwd %xmm3,%xmm5
pmaddwd %xmm8,%xmm5
punpcklwd %xmm3,%xmm4
pmaddwd %xmm11,%xmm4
movdqa %xmm1,%xmm3
punpckhwd %xmm0,%xmm3
pmaddwd %xmm8,%xmm3
punpcklwd %xmm0,%xmm1
pmaddwd %xmm11,%xmm1
pshuflw $0xe8,%xmm4,%xmm0
movdqa 0x91d(%rip),%xmm4
pshufhw $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshuflw $0xe8,%xmm1,%xmm1
pshufhw $0xe8,%xmm1,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpcklwd %xmm0,%xmm1
pmaddwd %xmm9,%xmm1
pshuflw $0xe8,%xmm5,%xmm0
movdqa 0x8fe(%rip),%xmm5
pshufhw $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshuflw $0xe8,%xmm3,%xmm3
pshufhw $0xe8,%xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpcklwd %xmm0,%xmm3
pmaddwd %xmm10,%xmm3
paddd  %xmm4,%xmm3
paddd  %xmm4,%xmm1
psrld  $0x6,%xmm1
psrld  $0x6,%xmm3
pand   %xmm5,%xmm3
pand   %xmm5,%xmm1
packuswb %xmm3,%xmm1
packuswb %xmm1,%xmm1
movq   %xmm1,(%r8,%r15,1)
add    $0x8,%r15
cmp    %r15,%r11
jne    1680 <mc_chroma+0x580>
mov    -0x68(%rsp),%rcx
mov    %rcx,%rsi
cmp    %r12,%rcx
mov    0xb8(%rsp),%r11d
mov    0xb0(%rsp),%r8d
je     1340 <mc_chroma+0x240>
nopw   0x0(%rax,%rax,1)
movzbl -0x1(%r13,%rsi,1),%edi
imul   %ebp,%edi
movzbl 0x0(%r13,%rsi,1),%ebx
imul   %eax,%ebx
add    %edi,%ebx
movzbl -0x1(%rdx,%rsi,1),%edi
imul   %ebp,%edi
movzbl (%rdx,%rsi,1),%ecx
imul   %eax,%ecx
add    %edi,%ecx
imul   %r9d,%ecx
imul   %r14d,%ebx
add    %ebx,%ecx
add    $0x20,%ecx
shr    $0x6,%ecx
mov    %cl,(%r10,%rsi,1)
lea    0x1(%rsi),%rcx
mov    %rcx,%rsi
cmp    %rcx,%r12
jne    1790 <mc_chroma+0x690>
jmp    1340 <mc_chroma+0x240>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @mc_chroma(i8* %0, i32 %1, i8* %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7) {
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i8*
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i8*
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
store i8* %0, i8** %9
store i32 %1, i32* %10
store i8* %2, i8** %11
store i32 %3, i32* %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i32 %7, i32* %16
%26 = load i32, i32* %13
%27 = and i32 %26, 7
store i32 %27, i32* %20
%28 = load i32, i32* %14
%29 = and i32 %28, 7
store i32 %29, i32* %21
%30 = load i32, i32* %20
%31 = sub nsw i32 8, %30
%32 = load i32, i32* %21
%33 = sub nsw i32 8, %32
%34 = mul nsw i32 %31, %33
store i32 %34, i32* %22
%35 = load i32, i32* %20
%36 = load i32, i32* %21
%37 = sub nsw i32 8, %36
%38 = mul nsw i32 %35, %37
store i32 %38, i32* %23
%39 = load i32, i32* %20
%40 = sub nsw i32 8, %39
%41 = load i32, i32* %21
%42 = mul nsw i32 %40, %41
store i32 %42, i32* %24
%43 = load i32, i32* %20
%44 = load i32, i32* %21
%45 = mul nsw i32 %43, %44
store i32 %45, i32* %25
%46 = load i32, i32* %14
%47 = ashr i32 %46, 3
%48 = load i32, i32* %10
%49 = mul nsw i32 %47, %48
%50 = load i32, i32* %13
%51 = ashr i32 %50, 3
%52 = add nsw i32 %49, %51
%53 = load i8*, i8** %9
%54 = sext i32 %52 to i64
%55 = getelementptr inbounds i8, i8* %53, i64 %54
store i8* %55, i8** %9
%56 = load i8*, i8** %9
%57 = load i32, i32* %10
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
store i8* %59, i8** %17
store i32 0, i32* %19
br label %60
60: ; preds = %127, %8
%61 = load i32, i32* %19
%62 = load i32, i32* %16
%63 = icmp slt i32 %61, %62
br i1 %63, label %64, label %130
64: ; preds = %60
store i32 0, i32* %18
br label %65
65: ; preds = %114, %64
%66 = load i32, i32* %18
%67 = load i32, i32* %15
%68 = icmp slt i32 %66, %67
br i1 %68, label %69, label %117
69: ; preds = %65
%70 = load i32, i32* %22
%71 = load i8*, i8** %9
%72 = load i32, i32* %18
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %71, i64 %73
%75 = load i8, i8* %74
%76 = zext i8 %75 to i32
%77 = mul nsw i32 %70, %76
%78 = load i32, i32* %23
%79 = load i8*, i8** %9
%80 = load i32, i32* %18
%81 = add nsw i32 %80, 1
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i8, i8* %79, i64 %82
%84 = load i8, i8* %83
%85 = zext i8 %84 to i32
%86 = mul nsw i32 %78, %85
%87 = add nsw i32 %77, %86
%88 = load i32, i32* %24
%89 = load i8*, i8** %17
%90 = load i32, i32* %18
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %89, i64 %91
%93 = load i8, i8* %92
%94 = zext i8 %93 to i32
%95 = mul nsw i32 %88, %94
%96 = add nsw i32 %87, %95
%97 = load i32, i32* %25
%98 = load i8*, i8** %17
%99 = load i32, i32* %18
%100 = add nsw i32 %99, 1
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds i8, i8* %98, i64 %101
%103 = load i8, i8* %102
%104 = zext i8 %103 to i32
%105 = mul nsw i32 %97, %104
%106 = add nsw i32 %96, %105
%107 = add nsw i32 %106, 32
%108 = ashr i32 %107, 6
%109 = trunc i32 %108 to i8
%110 = load i8*, i8** %11
%111 = load i32, i32* %18
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i8, i8* %110, i64 %112
store i8 %109, i8* %113
br label %114
114: ; preds = %69
%115 = load i32, i32* %18
%116 = add nsw i32 %115, 1
store i32 %116, i32* %18
br label %65
117: ; preds = %65
%118 = load i32, i32* %12
%119 = load i8*, i8** %11
%120 = sext i32 %118 to i64
%121 = getelementptr inbounds i8, i8* %119, i64 %120
store i8* %121, i8** %11
%122 = load i8*, i8** %17
store i8* %122, i8** %9
%123 = load i32, i32* %10
%124 = load i8*, i8** %17
%125 = sext i32 %123 to i64
%126 = getelementptr inbounds i8, i8* %124, i64 %125
store i8* %126, i8** %17
br label %127
127: ; preds = %117
%128 = load i32, i32* %19
%129 = add nsw i32 %128, 1
store i32 %129, i32* %19
br label %60
130: ; preds = %60
ret void
}

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