void color_convert_common(unsigned char *pY, unsigned char *pUV, int width,
                          int height, unsigned char *buffer) {
  const int bytes_per_pixel = 2;
  int nR, nG, nB, nY, nU, nV, i, j, id2, jd2, offset;
  unsigned char *out = buffer;
  offset = 0;
  for (i = 0; i < height; i++) {
    id2 = i >> 1;
    for (j = 0; j < width; j++) {
      jd2 = j >> 1;
      nY = *(pY + i * width + j);
      nV = *(pUV + id2 * width + bytes_per_pixel * jd2);
      nU = *(pUV + id2 * width + bytes_per_pixel * jd2 + 1);
      nY = ((nY - 16) > (0) ? (nY - 16) : (0));
      nU -= 128;
      nV -= 128;
      nB = 1192 * nY + 2066 * nU;
      nG = 1192 * nY - 833 * nV - 400 * nU;
      nR = 1192 * nY + 1634 * nV;
      nR = ((262143) < (((0) > (nR) ? (0) : (nR)))
                ? (262143)
                : (((0) > (nR) ? (0) : (nR))));
      nG = ((262143) < (((0) > (nG) ? (0) : (nG)))
                ? (262143)
                : (((0) > (nG) ? (0) : (nG))));
      nB = ((262143) < (((0) > (nB) ? (0) : (nB)))
                ? (262143)
                : (((0) > (nB) ? (0) : (nB))));
      nR >>= 10;
      nR &= 0xff;
      nG >>= 10;
      nG &= 0xff;
      nB >>= 10;
      nB &= 0xff;
      out[offset++] = (unsigned char)nR;
      out[offset++] = (unsigned char)nG;
      out[offset++] = (unsigned char)nB;
      out[offset++] = (unsigned char)255;
    }
  }
}


x86 assembly (clang, -O0):
<color_convert_common>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
movl   $0x2,-0x24(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1426 <color_convert_common+0x326>
mov    -0x40(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x48(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1413 <color_convert_common+0x313>
mov    -0x44(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
imul   -0x14(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
movslq -0x44(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x14(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x4c(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x14(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    -0x4c(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movzbl 0x1(%rax,%rcx,1),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x10,%eax
cmp    $0x0,%eax
jle    11e0 <color_convert_common+0xe0>
mov    -0x34(%rbp),%eax
sub    $0x10,%eax
mov    %eax,-0x5c(%rbp)
jmp    11ea <color_convert_common+0xea>
xor    %eax,%eax
mov    %eax,-0x5c(%rbp)
jmp    11ea <color_convert_common+0xea>
mov    -0x5c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
sub    $0x80,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
sub    $0x80,%eax
mov    %eax,-0x3c(%rbp)
imul   $0x4a8,-0x34(%rbp),%eax
imul   $0x812,-0x38(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x30(%rbp)
imul   $0x4a8,-0x34(%rbp),%eax
imul   $0x341,-0x3c(%rbp),%ecx
sub    %ecx,%eax
imul   $0x190,-0x38(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
imul   $0x4a8,-0x34(%rbp),%eax
imul   $0x662,-0x3c(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x28(%rbp)
xor    %eax,%eax
cmp    -0x28(%rbp),%eax
jle    125d <color_convert_common+0x15d>
xor    %eax,%eax
mov    %eax,-0x60(%rbp)
jmp    1263 <color_convert_common+0x163>
mov    -0x28(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%ecx
mov    $0x3ffff,%eax
cmp    %ecx,%eax
jge    1280 <color_convert_common+0x180>
mov    $0x3ffff,%eax
mov    %eax,-0x64(%rbp)
jmp    12a1 <color_convert_common+0x1a1>
xor    %eax,%eax
cmp    -0x28(%rbp),%eax
jle    1295 <color_convert_common+0x195>
xor    %eax,%eax
mov    %eax,-0x68(%rbp)
jmp    129b <color_convert_common+0x19b>
mov    -0x28(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x28(%rbp)
xor    %eax,%eax
cmp    -0x2c(%rbp),%eax
jle    12bc <color_convert_common+0x1bc>
xor    %eax,%eax
mov    %eax,-0x6c(%rbp)
jmp    12c2 <color_convert_common+0x1c2>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%ecx
mov    $0x3ffff,%eax
cmp    %ecx,%eax
jge    12df <color_convert_common+0x1df>
mov    $0x3ffff,%eax
mov    %eax,-0x70(%rbp)
jmp    1300 <color_convert_common+0x200>
xor    %eax,%eax
cmp    -0x2c(%rbp),%eax
jle    12f4 <color_convert_common+0x1f4>
xor    %eax,%eax
mov    %eax,-0x74(%rbp)
jmp    12fa <color_convert_common+0x1fa>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x2c(%rbp)
xor    %eax,%eax
cmp    -0x30(%rbp),%eax
jle    131b <color_convert_common+0x21b>
xor    %eax,%eax
mov    %eax,-0x78(%rbp)
jmp    1321 <color_convert_common+0x221>
mov    -0x30(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%ecx
mov    $0x3ffff,%eax
cmp    %ecx,%eax
jge    133e <color_convert_common+0x23e>
mov    $0x3ffff,%eax
mov    %eax,-0x7c(%rbp)
jmp    135f <color_convert_common+0x25f>
xor    %eax,%eax
cmp    -0x30(%rbp),%eax
jle    1353 <color_convert_common+0x253>
xor    %eax,%eax
mov    %eax,-0x80(%rbp)
jmp    1359 <color_convert_common+0x259>
mov    -0x30(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
sar    $0xa,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
sar    $0xa,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
sar    $0xa,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
mov    %al,%dl
mov    -0x58(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x50(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
mov    %al,%dl
mov    -0x58(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x50(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
mov    %al,%dl
mov    -0x58(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x50(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x50(%rbp)
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    114f <color_convert_common+0x4f>
jmp    1418 <color_convert_common+0x318>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1133 <color_convert_common+0x33>
pop    %rbp
ret

x86 assembly (clang, -O2):
<color_convert_common>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r8,-0x20(%rsp)
mov    %rsi,-0x18(%rsp)
test   %ecx,%ecx
jle    125e <color_convert_common+0x15e>
movslq %edx,%rax
mov    %ecx,%ecx
mov    %rcx,-0x10(%rsp)
mov    %rax,-0x8(%rsp)
mov    %eax,%r15d
addq   $0x3,-0x20(%rsp)
xor    %r11d,%r11d
mov    $0x10,%r14d
xor    %ebx,%ebx
jmp    1164 <color_convert_common+0x64>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r11
add    -0x8(%rsp),%rdi
cmp    -0x10(%rsp),%r11
je     125e <color_convert_common+0x15e>
test   %edx,%edx
jle    1150 <color_convert_common+0x50>
mov    %r11d,%eax
shr    %eax
imul   %edx,%eax
movslq %eax,%r12
add    -0x18(%rsp),%r12
movslq %ebx,%r13
add    -0x20(%rsp),%r13
xor    %ecx,%ecx
jmp    11ba <color_convert_common+0xba>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
shr    $0xa,%eax
shr    $0xa,%ebp
shr    $0xa,%esi
mov    %al,-0x3(%r13,%rcx,4)
mov    %bpl,-0x2(%r13,%rcx,4)
mov    %sil,-0x1(%r13,%rcx,4)
movb   $0xff,0x0(%r13,%rcx,4)
add    $0x1,%rcx
add    $0x4,%ebx
cmp    %rcx,%r15
je     1150 <color_convert_common+0x50>
mov    %ecx,%eax
and    $0x7ffffffe,%eax
movzbl (%rdi,%rcx,1),%ebp
cmp    $0x11,%ebp
movzbl (%r12,%rax,1),%r10d
movzbl 0x1(%r12,%rax,1),%esi
cmovb  %r14d,%ebp
add    $0xffffff80,%esi
add    $0xffffff80,%r10d
imul   $0x4a8,%ebp,%r9d
imul   $0xfffffcbf,%r10d,%ebp
imul   $0xfffffe70,%esi,%r8d
imul   $0x662,%r10d,%eax
add    %r9d,%eax
add    $0xffffb580,%eax
test   %eax,%eax
jns    1208 <color_convert_common+0x108>
xor    %eax,%eax
add    %r9d,%ebp
add    $0xffffb580,%ebp
add    %r8d,%ebp
cmp    $0x3ffff,%eax
jb     1220 <color_convert_common+0x120>
mov    $0x3ffff,%eax
test   %ebp,%ebp
jns    1226 <color_convert_common+0x126>
xor    %ebp,%ebp
imul   $0x812,%esi,%esi
cmp    $0x3ffff,%ebp
jb     1239 <color_convert_common+0x139>
mov    $0x3ffff,%ebp
add    %r9d,%esi
add    $0xffffb580,%esi
test   %esi,%esi
jns    1248 <color_convert_common+0x148>
xor    %esi,%esi
cmp    $0x3ffff,%esi
jb     1190 <color_convert_common+0x90>
mov    $0x3ffff,%esi
jmp    1190 <color_convert_common+0x90>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @color_convert_common(i8* nocapture %0, i8* nocapture %1, i32 %2, i32 %3, i8* nocapture writeonly %4) {
%6 = icmp sgt i32 %3, 0
br i1 %6, label %7, label %85
7: ; preds = %5
%8 = icmp sgt i32 %2, 0
%9 = sext i32 %2 to i64
%10 = zext i32 %3 to i64
%11 = zext i32 %2 to i64
br label %12
12: ; preds = %7, %81
%13 = phi i64 [ 0, %7 ], [ %83, %81 ]
%14 = phi i32 [ 0, %7 ], [ %82, %81 ]
br i1 %8, label %15, label %81
15: ; preds = %12
%16 = trunc i64 %13 to i32
%17 = lshr i32 %16, 1
%18 = mul nsw i64 %13, %9
%19 = getelementptr inbounds i8, i8* %0, i64 %18
%20 = mul nsw i32 %17, %2
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %1, i64 %21
%23 = sext i32 %14 to i64
br label %24
24: ; preds = %15, %24
%25 = phi i64 [ 0, %15 ], [ %77, %24 ]
%26 = phi i64 [ %23, %15 ], [ %75, %24 ]
%27 = and i64 %25, 2147483646
%28 = getelementptr inbounds i8, i8* %19, i64 %25
%29 = load i8, i8* %28
%30 = zext i8 %29 to i32
%31 = getelementptr inbounds i8, i8* %22, i64 %27
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
%34 = getelementptr inbounds i8, i8* %31, i64 1
%35 = load i8, i8* %34
%36 = zext i8 %35 to i32
%37 = icmp ugt i32 %30, 16
%38 = select i1 %37, i32 %30, i32 16
%39 = add nsw i32 %36, -128
%40 = add nsw i32 %33, -128
%41 = mul nuw nsw i32 %38, 1192
%42 = add nsw i32 %41, -19072
%43 = mul nsw i32 %39, 2066
%44 = add nsw i32 %42, %43
%45 = mul nsw i32 %40, -833
%46 = add nsw i32 %42, %45
%47 = mul nsw i32 %39, -400
%48 = add nsw i32 %46, %47
%49 = mul nsw i32 %40, 1634
%50 = add nsw i32 %42, %49
%51 = icmp sgt i32 %50, 0
%52 = select i1 %51, i32 %50, i32 0
%53 = icmp ult i32 %52, 262143
%54 = select i1 %53, i32 %52, i32 262143
%55 = icmp sgt i32 %48, 0
%56 = select i1 %55, i32 %48, i32 0
%57 = icmp ult i32 %56, 262143
%58 = select i1 %57, i32 %56, i32 262143
%59 = icmp sgt i32 %44, 0
%60 = select i1 %59, i32 %44, i32 0
%61 = icmp ult i32 %60, 262143
%62 = select i1 %61, i32 %60, i32 262143
%63 = lshr i32 %54, 10
%64 = lshr i32 %58, 10
%65 = lshr i32 %62, 10
%66 = trunc i32 %63 to i8
%67 = add nsw i64 %26, 1
%68 = getelementptr inbounds i8, i8* %4, i64 %26
store i8 %66, i8* %68
%69 = trunc i32 %64 to i8
%70 = add nsw i64 %26, 2
%71 = getelementptr inbounds i8, i8* %4, i64 %67
store i8 %69, i8* %71
%72 = trunc i32 %65 to i8
%73 = add nsw i64 %26, 3
%74 = getelementptr inbounds i8, i8* %4, i64 %70
store i8 %72, i8* %74
%75 = add nsw i64 %26, 4
%76 = getelementptr inbounds i8, i8* %4, i64 %73
store i8 -1, i8* %76
%77 = add nuw nsw i64 %25, 1
%78 = icmp eq i64 %77, %11
br i1 %78, label %79, label %24
79: ; preds = %24
%80 = trunc i64 %75 to i32
br label %81
81: ; preds = %79, %12
%82 = phi i32 [ %14, %12 ], [ %80, %79 ]
%83 = add nuw nsw i64 %13, 1
%84 = icmp eq i64 %83, %10
br i1 %84, label %85, label %12
85: ; preds = %81, %5
ret void
}