void iyu22rgb(char *YUV, char *RGB, int NumPixels) {
  int i, j;
  register int y0, y1, u0, u1, v0, v1;
  register int r, g, b;
  for (i = 0, j = 0; i < (NumPixels + (NumPixels << 1)); i += 6, j += 6) {
    u0 = (unsigned char)YUV[i + 0] - 128;
    y0 = (unsigned char)YUV[i + 1];
    v0 = (unsigned char)YUV[i + 2] - 128;
    u1 = (unsigned char)YUV[i + 3] - 128;
    y1 = (unsigned char)YUV[i + 4];
    v1 = (unsigned char)YUV[i + 5] - 128;
    r = y0 + (((v0 << 10) + (v0 << 8) + (v0 << 7) + (v0 << 4) + (v0 << 3) +
               (v0 << 1)) >>
              11);
    g = y0 -
        (((u0 << 8) + (u0 << 7) + (u0 << 4) + (u0 << 2) + (u0 << 1)) >> 11) -
        (((v0 << 9) + (v0 << 6) + (v0 << 4) + (v0 << 1) + v0) >> 11);
    b = y0 + (((u0 << 11) + (u0 << 5) - (u0 << 1)) >> 11);
    r = r < 0 ? 0 : r;
    g = g < 0 ? 0 : g;
    b = b < 0 ? 0 : b;
    r = r > 255 ? 255 : r;
    g = g > 255 ? 255 : g;
    b = b > 255 ? 255 : b;
    RGB[j + 0] = r;
    RGB[j + 1] = g;
    RGB[j + 2] = b;
    r = y1 + (((v1 << 10) + (v1 << 8) + (v1 << 7) + (v1 << 4) + (v1 << 3) +
               (v1 << 1)) >>
              11);
    g = y1 -
        (((u1 << 8) + (u1 << 7) + (u1 << 4) + (u1 << 2) + (u1 << 1)) >> 11) -
        (((v1 << 9) + (v1 << 6) + (v1 << 4) + (v1 << 1) + v1) >> 11);
    b = y1 + (((u1 << 11) + (u1 << 5) - (u1 << 1)) >> 11);
    r = r < 0 ? 0 : r;
    g = g < 0 ? 0 : g;
    b = b < 0 ? 0 : b;
    r = r > 255 ? 255 : r;
    g = g > 255 ? 255 : g;
    b = b > 255 ? 255 : b;
    RGB[j + 3] = r;
    RGB[j + 4] = g;
    RGB[j + 5] = b;
  }
}


x86 assembly (clang, -O0):
<iyu22rgb>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
mov    -0x14(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
cmp    %ecx,%eax
jge    155a <iyu22rgb+0x45a>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
sub    $0x80,%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x30(%rbp),%ecx
shl    $0xa,%ecx
mov    -0x30(%rbp),%edx
shl    $0x8,%edx
add    %edx,%ecx
mov    -0x30(%rbp),%edx
shl    $0x7,%edx
add    %edx,%ecx
mov    -0x30(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
mov    -0x30(%rbp),%edx
shl    $0x3,%edx
add    %edx,%ecx
mov    -0x30(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sar    $0xb,%ecx
add    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x28(%rbp),%ecx
shl    $0x8,%ecx
mov    -0x28(%rbp),%edx
shl    $0x7,%edx
add    %edx,%ecx
mov    -0x28(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
mov    -0x28(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
mov    -0x28(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sar    $0xb,%ecx
sub    %ecx,%eax
mov    -0x30(%rbp),%ecx
shl    $0x9,%ecx
mov    -0x30(%rbp),%edx
shl    $0x6,%edx
add    %edx,%ecx
mov    -0x30(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
mov    -0x30(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
add    -0x30(%rbp),%ecx
sar    $0xb,%ecx
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x28(%rbp),%ecx
shl    $0xb,%ecx
mov    -0x28(%rbp),%edx
shl    $0x5,%edx
add    %edx,%ecx
mov    -0x28(%rbp),%edx
shl    $0x1,%edx
sub    %edx,%ecx
sar    $0xb,%ecx
add    %ecx,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x38(%rbp)
jge    1284 <iyu22rgb+0x184>
xor    %eax,%eax
mov    %eax,-0x44(%rbp)
jmp    128a <iyu22rgb+0x18a>
mov    -0x38(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jge    12a4 <iyu22rgb+0x1a4>
xor    %eax,%eax
mov    %eax,-0x48(%rbp)
jmp    12aa <iyu22rgb+0x1aa>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    12c4 <iyu22rgb+0x1c4>
xor    %eax,%eax
mov    %eax,-0x4c(%rbp)
jmp    12ca <iyu22rgb+0x1ca>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0xff,-0x38(%rbp)
jle    12ea <iyu22rgb+0x1ea>
mov    $0xff,%eax
mov    %eax,-0x50(%rbp)
jmp    12f0 <iyu22rgb+0x1f0>
mov    -0x38(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0xff,-0x3c(%rbp)
jle    1310 <iyu22rgb+0x210>
mov    $0xff,%eax
mov    %eax,-0x54(%rbp)
jmp    1316 <iyu22rgb+0x216>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0xff,-0x40(%rbp)
jle    1336 <iyu22rgb+0x236>
mov    $0xff,%eax
mov    %eax,-0x58(%rbp)
jmp    133c <iyu22rgb+0x23c>
mov    -0x40(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
mov    -0x34(%rbp),%ecx
shl    $0xa,%ecx
mov    -0x34(%rbp),%edx
shl    $0x8,%edx
add    %edx,%ecx
mov    -0x34(%rbp),%edx
shl    $0x7,%edx
add    %edx,%ecx
mov    -0x34(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
mov    -0x34(%rbp),%edx
shl    $0x3,%edx
add    %edx,%ecx
mov    -0x34(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sar    $0xb,%ecx
add    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x2c(%rbp),%ecx
shl    $0x8,%ecx
mov    -0x2c(%rbp),%edx
shl    $0x7,%edx
add    %edx,%ecx
mov    -0x2c(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
mov    -0x2c(%rbp),%edx
shl    $0x2,%edx
add    %edx,%ecx
mov    -0x2c(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sar    $0xb,%ecx
sub    %ecx,%eax
mov    -0x34(%rbp),%ecx
shl    $0x9,%ecx
mov    -0x34(%rbp),%edx
shl    $0x6,%edx
add    %edx,%ecx
mov    -0x34(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
mov    -0x34(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
add    -0x34(%rbp),%ecx
sar    $0xb,%ecx
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x2c(%rbp),%ecx
shl    $0xb,%ecx
mov    -0x2c(%rbp),%edx
shl    $0x5,%edx
add    %edx,%ecx
mov    -0x2c(%rbp),%edx
shl    $0x1,%edx
sub    %edx,%ecx
sar    $0xb,%ecx
add    %ecx,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x38(%rbp)
jge    1446 <iyu22rgb+0x346>
xor    %eax,%eax
mov    %eax,-0x5c(%rbp)
jmp    144c <iyu22rgb+0x34c>
mov    -0x38(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jge    1466 <iyu22rgb+0x366>
xor    %eax,%eax
mov    %eax,-0x60(%rbp)
jmp    146c <iyu22rgb+0x36c>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    1486 <iyu22rgb+0x386>
xor    %eax,%eax
mov    %eax,-0x64(%rbp)
jmp    148c <iyu22rgb+0x38c>
mov    -0x40(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0xff,-0x38(%rbp)
jle    14ac <iyu22rgb+0x3ac>
mov    $0xff,%eax
mov    %eax,-0x68(%rbp)
jmp    14b2 <iyu22rgb+0x3b2>
mov    -0x38(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0xff,-0x3c(%rbp)
jle    14d2 <iyu22rgb+0x3d2>
mov    $0xff,%eax
mov    %eax,-0x6c(%rbp)
jmp    14d8 <iyu22rgb+0x3d8>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0xff,-0x40(%rbp)
jle    14f8 <iyu22rgb+0x3f8>
mov    $0xff,%eax
mov    %eax,-0x70(%rbp)
jmp    14fe <iyu22rgb+0x3fe>
mov    -0x40(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x1c(%rbp)
jmp    111d <iyu22rgb+0x1d>
pop    %rbp
ret

x86 assembly (clang, -O2):
<iyu22rgb>:
push   %rbp
push   %rbx
lea    (%rdx,%rdx,2),%eax
test   %eax,%eax
jle    1250 <iyu22rgb+0x150>
mov    %eax,%r8d
xor    %r9d,%r9d
xor    %edx,%edx
jmp    1131 <iyu22rgb+0x31>
nopw   0x0(%rax,%rax,1)
mov    %cl,0x5(%rsi,%rdx,1)
add    $0x6,%rdx
cmp    %r8,%rdx
jae    1250 <iyu22rgb+0x150>
movzbl (%rdi,%rdx,1),%ecx
add    $0xffffff80,%ecx
movzbl 0x1(%rdi,%rdx,1),%r11d
movzbl 0x2(%rdi,%rdx,1),%ebp
add    $0xffffff80,%ebp
imul   $0x59a,%ebp,%eax
sar    $0xb,%eax
add    %r11d,%eax
imul   $0x196,%ecx,%ebx
sar    $0xb,%ebx
imul   $0x253,%ebp,%ebp
sar    $0xb,%ebp
add    %ebx,%ebp
imul   $0x81e,%ecx,%ecx
sar    $0xb,%ecx
add    %r11d,%ecx
sub    %ebp,%r11d
test   %eax,%eax
cmovs  %r9d,%eax
test   %r11d,%r11d
jns    1183 <iyu22rgb+0x83>
xor    %r11d,%r11d
test   %ecx,%ecx
cmovs  %r9d,%ecx
cmp    $0xff,%eax
jb     1195 <iyu22rgb+0x95>
mov    $0xff,%eax
cmp    $0xff,%r11d
jb     11a4 <iyu22rgb+0xa4>
mov    $0xff,%r11d
movzbl 0x3(%rdi,%rdx,1),%ebx
add    $0xffffff80,%ebx
movzbl 0x4(%rdi,%rdx,1),%r10d
movzbl 0x5(%rdi,%rdx,1),%ebp
add    $0xffffff80,%ebp
mov    %al,(%rsi,%rdx,1)
mov    %r11b,0x1(%rsi,%rdx,1)
cmp    $0xff,%ecx
jb     11cf <iyu22rgb+0xcf>
mov    $0xff,%ecx
mov    %cl,0x2(%rsi,%rdx,1)
imul   $0x59a,%ebp,%eax
sar    $0xb,%eax
add    %r10d,%eax
imul   $0x196,%ebx,%ecx
sar    $0xb,%ecx
imul   $0x253,%ebp,%ebp
sar    $0xb,%ebp
add    %ecx,%ebp
imul   $0x81e,%ebx,%ecx
sar    $0xb,%ecx
add    %r10d,%ecx
sub    %ebp,%r10d
test   %eax,%eax
cmovs  %r9d,%eax
test   %r10d,%r10d
jns    1210 <iyu22rgb+0x110>
xor    %r10d,%r10d
test   %ecx,%ecx
cmovs  %r9d,%ecx
cmp    $0xff,%eax
jb     1222 <iyu22rgb+0x122>
mov    $0xff,%eax
cmp    $0xff,%r10d
jb     1231 <iyu22rgb+0x131>
mov    $0xff,%r10d
mov    %al,0x3(%rsi,%rdx,1)
mov    %r10b,0x4(%rsi,%rdx,1)
cmp    $0xff,%ecx
jb     1120 <iyu22rgb+0x20>
mov    $0xff,%ecx
jmp    1120 <iyu22rgb+0x20>
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
define void @iyu22rgb(i8* nocapture %0, i8* nocapture writeonly %1, i32 %2) {
%4 = mul i32 %2, 3
%5 = icmp sgt i32 %4, 0
br i1 %5, label %6, label %99
6: ; preds = %3
%7 = zext i32 %4 to i64
br label %8
8: ; preds = %6, %8
%9 = phi i64 [ 0, %6 ], [ %97, %8 ]
%10 = getelementptr inbounds i8, i8* %0, i64 %9
%11 = load i8, i8* %10
%12 = zext i8 %11 to i32
%13 = add nsw i32 %12, -128
%14 = or i64 %9, 1
%15 = getelementptr inbounds i8, i8* %0, i64 %14
%16 = load i8, i8* %15
%17 = zext i8 %16 to i32
%18 = add nuw nsw i64 %9, 2
%19 = getelementptr inbounds i8, i8* %0, i64 %18
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = add nsw i32 %21, -128
%23 = add nuw nsw i64 %9, 3
%24 = getelementptr inbounds i8, i8* %0, i64 %23
%25 = load i8, i8* %24
%26 = zext i8 %25 to i32
%27 = add nsw i32 %26, -128
%28 = add nuw nsw i64 %9, 4
%29 = getelementptr inbounds i8, i8* %0, i64 %28
%30 = load i8, i8* %29
%31 = zext i8 %30 to i32
%32 = add nuw nsw i64 %9, 5
%33 = getelementptr inbounds i8, i8* %0, i64 %32
%34 = load i8, i8* %33
%35 = zext i8 %34 to i32
%36 = add nsw i32 %35, -128
%37 = mul nsw i32 %22, 1434
%38 = ashr i32 %37, 11
%39 = add nsw i32 %38, %17
%40 = mul nsw i32 %13, 406
%41 = ashr i32 %40, 11
%42 = mul nsw i32 %22, 595
%43 = ashr i32 %42, 11
%44 = add nsw i32 %41, %43
%45 = sub nsw i32 %17, %44
%46 = mul nsw i32 %13, 2078
%47 = ashr i32 %46, 11
%48 = add nsw i32 %47, %17
%49 = icmp sgt i32 %39, 0
%50 = select i1 %49, i32 %39, i32 0
%51 = icmp sgt i32 %45, 0
%52 = select i1 %51, i32 %45, i32 0
%53 = icmp sgt i32 %48, 0
%54 = select i1 %53, i32 %48, i32 0
%55 = icmp ult i32 %50, 255
%56 = select i1 %55, i32 %50, i32 255
%57 = icmp ult i32 %52, 255
%58 = select i1 %57, i32 %52, i32 255
%59 = icmp ult i32 %54, 255
%60 = select i1 %59, i32 %54, i32 255
%61 = trunc i32 %56 to i8
%62 = getelementptr inbounds i8, i8* %1, i64 %9
store i8 %61, i8* %62
%63 = trunc i32 %58 to i8
%64 = getelementptr inbounds i8, i8* %1, i64 %14
store i8 %63, i8* %64
%65 = trunc i32 %60 to i8
%66 = getelementptr inbounds i8, i8* %1, i64 %18
store i8 %65, i8* %66
%67 = mul nsw i32 %36, 1434
%68 = ashr i32 %67, 11
%69 = add nsw i32 %68, %31
%70 = mul nsw i32 %27, 406
%71 = ashr i32 %70, 11
%72 = mul nsw i32 %36, 595
%73 = ashr i32 %72, 11
%74 = add nsw i32 %71, %73
%75 = sub nsw i32 %31, %74
%76 = mul nsw i32 %27, 2078
%77 = ashr i32 %76, 11
%78 = add nsw i32 %77, %31
%79 = icmp sgt i32 %69, 0
%80 = select i1 %79, i32 %69, i32 0
%81 = icmp sgt i32 %75, 0
%82 = select i1 %81, i32 %75, i32 0
%83 = icmp sgt i32 %78, 0
%84 = select i1 %83, i32 %78, i32 0
%85 = icmp ult i32 %80, 255
%86 = select i1 %85, i32 %80, i32 255
%87 = icmp ult i32 %82, 255
%88 = select i1 %87, i32 %82, i32 255
%89 = icmp ult i32 %84, 255
%90 = select i1 %89, i32 %84, i32 255
%91 = trunc i32 %86 to i8
%92 = getelementptr inbounds i8, i8* %1, i64 %23
store i8 %91, i8* %92
%93 = trunc i32 %88 to i8
%94 = getelementptr inbounds i8, i8* %1, i64 %28
store i8 %93, i8* %94
%95 = trunc i32 %90 to i8
%96 = getelementptr inbounds i8, i8* %1, i64 %32
store i8 %95, i8* %96
%97 = add nuw nsw i64 %9, 6
%98 = icmp ult i64 %97, %7
br i1 %98, label %8, label %99
99: ; preds = %8, %3
ret void
}