void fill_pixels(unsigned char *bmp_data, unsigned char *font_data, int type,
                 int seq, int bmp_width) {
  unsigned char *pixel = bmp_data;
  if (!type) {
    int col, i, row;
    for (row = 0; row < 16; row++) {
      for (i = 0; i < 2; i++) {
        for (col = 0; col < 8; col++) {
          int pos = (15 - row) * 8 * bmp_width + (seq + i) * 8 + col;
          if (font_data[row * 2 + i] & (0x80 >> col)) {
            pixel[pos * 2] = 0x7c;
            pixel[pos * 2 + 1] = 0x00;
          } else {
            pixel[pos * 2] = 0xff;
            pixel[pos * 2 + 1] = 0xff;
          }
        }
      }
    }
  } else {
    int col, row;
    for (row = 0; row < 16; row++) {
      for (col = 0; col < 8; col++) {
        int pos = (15 - row) * 8 * bmp_width + seq * 8 + col;
        if (font_data[row] & (0x80 >> col)) {
          pixel[pos * 2] = 0x7c;
          pixel[pos * 2 + 1] = 0x00;
        } else {
          pixel[pos * 2] = 0xff;
          pixel[pos * 2 + 1] = 0xff;
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<fill_pixels>:
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    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x0,-0x14(%rbp)
jne    1233 <fill_pixels+0x133>
movl   $0x0,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jge    122e <fill_pixels+0x12e>
movl   $0x0,-0x30(%rbp)
cmpl   $0x2,-0x30(%rbp)
jge    121b <fill_pixels+0x11b>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x8,-0x2c(%rbp)
jge    1208 <fill_pixels+0x108>
mov    $0xf,%eax
sub    -0x34(%rbp),%eax
shl    $0x3,%eax
imul   -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
add    -0x30(%rbp),%ecx
shl    $0x3,%ecx
add    %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x2c(%rbp),%ecx
mov    $0x80,%edx
sar    %cl,%edx
mov    %edx,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     11d0 <fill_pixels+0xd0>
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x7c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    11f5 <fill_pixels+0xf5>
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    11fa <fill_pixels+0xfa>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1151 <fill_pixels+0x51>
jmp    120d <fill_pixels+0x10d>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1140 <fill_pixels+0x40>
jmp    1220 <fill_pixels+0x120>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    112f <fill_pixels+0x2f>
jmp    130f <fill_pixels+0x20f>
movl   $0x0,-0x40(%rbp)
cmpl   $0x10,-0x40(%rbp)
jge    130a <fill_pixels+0x20a>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x8,-0x3c(%rbp)
jge    12f7 <fill_pixels+0x1f7>
mov    $0xf,%eax
sub    -0x40(%rbp),%eax
shl    $0x3,%eax
imul   -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
shl    $0x3,%ecx
add    %ecx,%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x3c(%rbp),%ecx
mov    $0x80,%edx
sar    %cl,%edx
mov    %edx,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     12bf <fill_pixels+0x1bf>
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x7c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    12e4 <fill_pixels+0x1e4>
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0xff,(%rax,%rcx,1)
jmp    12e9 <fill_pixels+0x1e9>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    124b <fill_pixels+0x14b>
jmp    12fc <fill_pixels+0x1fc>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    123a <fill_pixels+0x13a>
jmp    130f <fill_pixels+0x20f>
pop    %rbp
ret

x86 assembly (clang, -O2):
<fill_pixels>:
push   %rbx
imul   $0xf0,%r8d,%eax
shl    $0x4,%ecx
test   %edx,%edx
je     1265 <fill_pixels+0x165>
add    %ecx,%eax
add    $0xf,%eax
shl    $0x4,%r8d
xor    %ecx,%ecx
mov    $0xff,%r9d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl (%rsi,%rcx,1),%ebx
lea    -0xf(%rax),%edx
test   %bl,%bl
movslq %edx,%r10
mov    $0x7c,%edx
cmovns %r9d,%edx
sar    $0x7,%bl
not    %bl
mov    %dl,(%rdi,%r10,1)
lea    -0xe(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%rdx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x40,%dl
lea    -0xd(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
lea    -0xc(%rax),%ebx
movslq %ebx,%rbx
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x20,%dl
lea    -0xb(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
lea    -0xa(%rax),%ebx
movslq %ebx,%rbx
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x10,%dl
lea    -0x9(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
lea    -0x8(%rax),%ebx
movslq %ebx,%rbx
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x8,%dl
lea    -0x7(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
lea    -0x6(%rax),%ebx
movslq %ebx,%rbx
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x4,%dl
lea    -0x5(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
lea    -0x4(%rax),%ebx
movslq %ebx,%rbx
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x2,%dl
lea    -0x3(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
lea    -0x2(%rax),%ebx
movslq %ebx,%rbx
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%rcx,1),%edx
and    $0x1,%dl
lea    -0x1(%rax),%ebx
cmp    $0x1,%dl
sbb    %edx,%edx
movslq %ebx,%r10
mov    %edx,%ebx
or     $0x7c,%bl
mov    %bl,(%rdi,%r10,1)
cltq
mov    %dl,(%rdi,%rax,1)
add    $0x1,%rcx
sub    %r8d,%eax
cmp    $0x10,%rcx
jne    1130 <fill_pixels+0x30>
jmp    14ea <fill_pixels+0x3ea>
add    %ecx,%eax
add    $0x1f,%eax
shl    $0x4,%r8d
xor    %r10d,%r10d
mov    $0xff,%r9d
nopw   0x0(%rax,%rax,1)
movzbl (%rsi,%r10,2),%edx
lea    -0x1f(%rax),%ecx
movslq %ecx,%r11
test   %dl,%dl
mov    $0x7c,%ecx
cmovns %r9d,%ecx
sar    $0x7,%dl
not    %dl
lea    -0x1e(%rax),%ebx
movslq %ebx,%rbx
mov    %cl,(%rdi,%r11,1)
mov    %dl,(%rdi,%rbx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x40,%cl
lea    -0x1d(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x1c(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x20,%cl
lea    -0x1b(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x1a(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x10,%cl
lea    -0x19(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x18(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x8,%cl
lea    -0x17(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x16(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x4,%cl
lea    -0x15(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x14(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x2,%cl
lea    -0x13(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x12(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl (%rsi,%r10,2),%ecx
and    $0x1,%cl
lea    -0x11(%rax),%edx
cmp    $0x1,%cl
sbb    %ecx,%ecx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x10(%rax),%edx
movslq %edx,%rdx
mov    %bl,(%rdi,%r11,1)
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
lea    -0xf(%rax),%edx
test   %cl,%cl
movslq %edx,%r11
mov    $0x7c,%ebx
cmovns %r9d,%ebx
sar    $0x7,%cl
not    %cl
lea    -0xe(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x40,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0xd(%rax),%edx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0xc(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x20,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0xb(%rax),%edx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0xa(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x10,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0x9(%rax),%edx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x8(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x8,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0x7(%rax),%edx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x6(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x4,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0x5(%rax),%edx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x4(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x2,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0x3(%rax),%edx
movslq %edx,%r11
mov    %ecx,%ebx
or     $0x7c,%bl
lea    -0x2(%rax),%edx
mov    %bl,(%rdi,%r11,1)
movslq %edx,%rdx
mov    %cl,(%rdi,%rdx,1)
movzbl 0x1(%rsi,%r10,2),%ecx
and    $0x1,%cl
cmp    $0x1,%cl
sbb    %ecx,%ecx
lea    -0x1(%rax),%edx
movslq %edx,%rdx
mov    %ecx,%ebx
or     $0x7c,%bl
cltq
mov    %bl,(%rdi,%rdx,1)
mov    %cl,(%rdi,%rax,1)
add    $0x1,%r10
sub    %r8d,%eax
cmp    $0x10,%r10
jne    1280 <fill_pixels+0x180>
pop    %rbx
ret

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

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