void tga_write_pixel_to_mem(unsigned char *dat, unsigned char img_spec,
                            unsigned int number, unsigned int w, unsigned int h,
                            unsigned int pixel, unsigned int format) {
  unsigned int j;
  unsigned int x, y;
  unsigned int addy;
  switch ((img_spec & 0x30) >> 4) {
  case (1):
    x = w - 1 - (number % w);
    y = number / h;
    break;
  case (2):
    x = number % w;
    y = h - 1 - (number / w);
    break;
  case (3):
    x = w - 1 - (number % w);
    y = h - 1 - (number / w);
    break;
  case (0):
  default:
    x = number % w;
    y = number / w;
    break;
  }
  addy = (y * w + x) * format;
  for (j = 0; j < format; j++) {
    dat[addy + j] = (unsigned char)((pixel >> (j * 8)) & 0xFF);
  }
}


x86 assembly (clang, -O0):
<tga_write_pixel_to_mem>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    0x10(%rbp),%esi
mov    %rdi,-0x8(%rbp)
mov    %al,-0x9(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
movzbl -0x9(%rbp),%eax
and    $0x30,%eax
shr    $0x4,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x3,%eax
ja     11de <tga_write_pixel_to_mem+0xde>
mov    -0x38(%rbp),%rax
lea    0xebd(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    -0x3c(%rbp),%eax
sub    %edx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x18(%rbp)
mov    %eax,-0x28(%rbp)
jmp    11f4 <tga_write_pixel_to_mem+0xf4>
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    %edx,-0x24(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    %eax,%ecx
mov    -0x40(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
jmp    11f4 <tga_write_pixel_to_mem+0xf4>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    -0x48(%rbp),%eax
sub    %edx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    %eax,%ecx
mov    -0x44(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
jmp    11f4 <tga_write_pixel_to_mem+0xf4>
jmp    11de <tga_write_pixel_to_mem+0xde>
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    %edx,-0x24(%rbp)
mov    -0x10(%rbp),%eax
xor    %edx,%edx
divl   -0x14(%rbp)
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
imul   -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
imul   0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    0x10(%rbp),%eax
jae    1247 <tga_write_pixel_to_mem+0x147>
mov    -0x1c(%rbp),%eax
mov    -0x20(%rbp),%ecx
shl    $0x3,%ecx
shr    %cl,%eax
and    $0xff,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    -0x20(%rbp),%ecx
mov    %ecx,%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    120c <tga_write_pixel_to_mem+0x10c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<tga_write_pixel_to_mem>:
push   %r14
push   %rbx
mov    %edx,%r10d
mov    0x18(%rsp),%r11d
shr    $0x4,%sil
and    $0x3,%sil
movzbl %sil,%eax
lea    0xf42(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
mov    %r10d,%eax
xor    %edx,%edx
div    %ecx
mov    %edx,%esi
jmp    1166 <tga_write_pixel_to_mem+0x66>
mov    %r10d,%eax
xor    %edx,%edx
div    %ecx
mov    %edx,%esi
not    %esi
add    %ecx,%esi
mov    %r10d,%eax
xor    %edx,%edx
div    %r8d
jmp    1166 <tga_write_pixel_to_mem+0x66>
mov    %r10d,%eax
xor    %edx,%edx
div    %ecx
mov    %edx,%esi
jmp    1161 <tga_write_pixel_to_mem+0x61>
mov    %r10d,%eax
xor    %edx,%edx
div    %ecx
mov    %edx,%esi
not    %esi
add    %ecx,%esi
not    %eax
add    %r8d,%eax
test   %r11d,%r11d
je     157a <tga_write_pixel_to_mem+0x47a>
imul   %ecx,%eax
add    %esi,%eax
imul   %r11d,%eax
mov    %r11d,%r8d
cmp    $0x8,%r11d
jae    1189 <tga_write_pixel_to_mem+0x89>
xor    %r14d,%r14d
jmp    14d6 <tga_write_pixel_to_mem+0x3d6>
lea    -0x1(%r8),%rcx
xor    %r14d,%r14d
mov    %eax,%edx
add    %ecx,%edx
jb     14d6 <tga_write_pixel_to_mem+0x3d6>
shr    $0x20,%rcx
jne    14d6 <tga_write_pixel_to_mem+0x3d6>
movd   %r9d,%xmm8
mov    %eax,%r10d
cmp    $0x10,%r11d
jae    12e4 <tga_write_pixel_to_mem+0x1e4>
xor    %r14d,%r14d
mov    %r14,%rdx
mov    %r8d,%r14d
and    $0xfffffff8,%r14d
pshufd $0x0,%xmm8,%xmm0
movdqa 0xe3e(%rip),%xmm8
movdqa 0xe76(%rip),%xmm2
movaps 0xe5f(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movd   %edx,%xmm6
pshufd $0x0,%xmm6,%xmm4
por    %xmm8,%xmm4
lea    0x5(%rdx),%ecx
pshufd $0x50,%xmm6,%xmm7
por    %xmm2,%xmm7
punpcklqdq %xmm4,%xmm6
shufps $0x98,%xmm4,%xmm6
movd   %ecx,%xmm5
shufps $0xf4,%xmm4,%xmm5
shufps $0x42,%xmm7,%xmm5
pslld  $0x3,%xmm5
pslld  $0x3,%xmm6
pshuflw $0xfe,%xmm6,%xmm4
movdqa %xmm0,%xmm7
psrld  %xmm4,%xmm7
pshuflw $0x54,%xmm6,%xmm1
movdqa %xmm0,%xmm4
psrld  %xmm1,%xmm4
punpcklqdq %xmm7,%xmm4
pshufd $0xee,%xmm6,%xmm1
pshuflw $0xfe,%xmm1,%xmm6
movdqa %xmm0,%xmm7
psrld  %xmm6,%xmm7
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm0,%xmm6
psrld  %xmm1,%xmm6
punpckhqdq %xmm7,%xmm6
shufps $0xcc,%xmm6,%xmm4
pshuflw $0xfe,%xmm5,%xmm1
movdqa %xmm0,%xmm6
psrld  %xmm1,%xmm6
pshuflw $0x54,%xmm5,%xmm1
movdqa %xmm0,%xmm7
psrld  %xmm1,%xmm7
punpcklqdq %xmm6,%xmm7
pshufd $0xee,%xmm5,%xmm1
pshuflw $0xfe,%xmm1,%xmm5
movdqa %xmm0,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm0,%xmm5
psrld  %xmm1,%xmm5
punpckhqdq %xmm6,%xmm5
shufps $0xcc,%xmm5,%xmm7
andps  %xmm3,%xmm7
andps  %xmm3,%xmm4
packuswb %xmm7,%xmm4
packuswb %xmm4,%xmm4
lea    (%r10,%rdx,1),%ecx
movq   %xmm4,(%rdi,%rcx,1)
add    $0x8,%rdx
cmp    %rdx,%r14
jne    11f0 <tga_write_pixel_to_mem+0xf0>
cmp    %r8,%r14
jne    14d6 <tga_write_pixel_to_mem+0x3d6>
jmp    157a <tga_write_pixel_to_mem+0x47a>
mov    %r8d,%r14d
and    $0xfffffff0,%r14d
pshufd $0x0,%xmm8,%xmm2
xor    %edx,%edx
movdqa 0xd04(%rip),%xmm9
movdqa 0xd0b(%rip),%xmm10
movdqa 0xd12(%rip),%xmm11
movdqa 0xd19(%rip),%xmm12
movaps 0xd21(%rip),%xmm13
nop
movd   %edx,%xmm0
pshufd $0x0,%xmm0,%xmm3
movdqa %xmm3,%xmm1
por    %xmm9,%xmm1
movdqa %xmm3,%xmm7
por    %xmm10,%xmm7
lea    0x9(%rdx),%ecx
pshufd $0x50,%xmm0,%xmm5
por    %xmm11,%xmm5
pslld  $0x3,%xmm3
por    %xmm12,%xmm3
punpcklqdq %xmm7,%xmm0
shufps $0x98,%xmm7,%xmm0
shufps $0x3,%xmm1,%xmm7
shufps $0x98,%xmm1,%xmm7
movd   %ecx,%xmm4
shufps $0xf4,%xmm1,%xmm4
shufps $0x42,%xmm5,%xmm4
pslld  $0x3,%xmm4
pslld  $0x3,%xmm7
pslld  $0x3,%xmm0
pshuflw $0xfe,%xmm0,%xmm1
movdqa %xmm2,%xmm5
psrld  %xmm1,%xmm5
pshuflw $0x54,%xmm0,%xmm6
movdqa %xmm2,%xmm1
psrld  %xmm6,%xmm1
punpcklqdq %xmm5,%xmm1
pshufd $0xee,%xmm0,%xmm0
pshuflw $0xfe,%xmm0,%xmm5
movdqa %xmm2,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm2,%xmm5
psrld  %xmm0,%xmm5
punpckhqdq %xmm6,%xmm5
shufps $0xcc,%xmm5,%xmm1
pshuflw $0xfe,%xmm7,%xmm0
movdqa %xmm2,%xmm5
psrld  %xmm0,%xmm5
pshuflw $0x54,%xmm7,%xmm6
movdqa %xmm2,%xmm0
psrld  %xmm6,%xmm0
punpcklqdq %xmm5,%xmm0
pshufd $0xee,%xmm7,%xmm5
pshuflw $0xfe,%xmm5,%xmm6
movdqa %xmm2,%xmm7
psrld  %xmm6,%xmm7
pshuflw $0x54,%xmm5,%xmm5
movdqa %xmm2,%xmm6
psrld  %xmm5,%xmm6
punpckhqdq %xmm7,%xmm6
shufps $0xcc,%xmm6,%xmm0
pshuflw $0xfe,%xmm4,%xmm5
movdqa %xmm2,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm4,%xmm5
movdqa %xmm2,%xmm7
psrld  %xmm5,%xmm7
punpcklqdq %xmm6,%xmm7
pshufd $0xee,%xmm4,%xmm4
pshuflw $0xfe,%xmm4,%xmm5
movdqa %xmm2,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm4,%xmm4
movdqa %xmm2,%xmm5
psrld  %xmm4,%xmm5
punpckhqdq %xmm6,%xmm5
shufps $0xcc,%xmm5,%xmm7
pshuflw $0xfe,%xmm3,%xmm4
movdqa %xmm2,%xmm5
psrld  %xmm4,%xmm5
pshuflw $0x54,%xmm3,%xmm4
movdqa %xmm2,%xmm6
psrld  %xmm4,%xmm6
punpcklqdq %xmm5,%xmm6
pshufd $0xee,%xmm3,%xmm3
pshuflw $0xfe,%xmm3,%xmm4
movdqa %xmm2,%xmm5
psrld  %xmm4,%xmm5
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm2,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm5,%xmm4
shufps $0xcc,%xmm4,%xmm6
andps  %xmm13,%xmm6
andps  %xmm13,%xmm7
packuswb %xmm6,%xmm7
andps  %xmm13,%xmm0
andps  %xmm13,%xmm1
packuswb %xmm0,%xmm1
packuswb %xmm7,%xmm1
lea    (%r10,%rdx,1),%ecx
movdqu %xmm1,(%rdi,%rcx,1)
add    $0x10,%rdx
cmp    %rdx,%r14
jne    1320 <tga_write_pixel_to_mem+0x220>
cmp    %r8,%r14
je     157a <tga_write_pixel_to_mem+0x47a>
test   $0x8,%r8b
jne    11b9 <tga_write_pixel_to_mem+0xb9>
mov    %r14,%r10
not    %r10
add    %r8,%r10
mov    %r8,%rdx
and    $0x3,%rdx
je     1519 <tga_write_pixel_to_mem+0x419>
mov    %eax,%r11d
lea    0x0(,%r14,8),%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r9d,%ebx
shr    %cl,%ebx
lea    (%r11,%r14,1),%esi
mov    %bl,(%rdi,%rsi,1)
add    $0x1,%r14
add    $0x8,%ecx
add    $0xffffffffffffffff,%rdx
jne    1500 <tga_write_pixel_to_mem+0x400>
cmp    $0x3,%r10
jb     157a <tga_write_pixel_to_mem+0x47a>
lea    0x0(,%r14,8),%edx
mov    %eax,%r10d
nopw   0x0(%rax,%rax,1)
mov    %r9d,%esi
mov    %edx,%ecx
shr    %cl,%esi
lea    (%r10,%r14,1),%rax
mov    %eax,%ecx
mov    %sil,(%rdi,%rcx,1)
lea    0x8(%rdx),%ecx
mov    %r9d,%esi
shr    %cl,%esi
lea    0x1(%rax),%r11d
lea    0x10(%rdx),%ecx
mov    %r9d,%ebx
shr    %cl,%ebx
mov    %sil,(%rdi,%r11,1)
lea    0x2(%rax),%ecx
mov    %bl,(%rdi,%rcx,1)
lea    0x18(%rdx),%ecx
mov    %r9d,%esi
shr    %cl,%esi
add    $0x3,%eax
mov    %sil,(%rdi,%rax,1)
add    $0x4,%r14
add    $0x20,%edx
cmp    %r14,%r8
jne    1530 <tga_write_pixel_to_mem+0x430>
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @tga_write_pixel_to_mem(i8* %0, i8 zeroext %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca i8*
%9 = alloca i8
%10 = alloca i32
%11 = alloca i32
%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** %8
store i8 %1, i8* %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
store i32 %6, i32* %14
%19 = load i8, i8* %9
%20 = zext i8 %19 to i32
%21 = and i32 %20, 48
%22 = ashr i32 %21, 4
switch i32 %22, label %57 [
i32 1, label %23
i32 2, label %33
i32 3, label %43
i32 0, label %56
]
23: ; preds = %7
%24 = load i32, i32* %11
%25 = sub i32 %24, 1
%26 = load i32, i32* %10
%27 = load i32, i32* %11
%28 = urem i32 %26, %27
%29 = sub i32 %25, %28
store i32 %29, i32* %16
%30 = load i32, i32* %10
%31 = load i32, i32* %12
%32 = udiv i32 %30, %31
store i32 %32, i32* %17
br label %64
33: ; preds = %7
%34 = load i32, i32* %10
%35 = load i32, i32* %11
%36 = urem i32 %34, %35
store i32 %36, i32* %16
%37 = load i32, i32* %12
%38 = sub i32 %37, 1
%39 = load i32, i32* %10
%40 = load i32, i32* %11
%41 = udiv i32 %39, %40
%42 = sub i32 %38, %41
store i32 %42, i32* %17
br label %64
43: ; preds = %7
%44 = load i32, i32* %11
%45 = sub i32 %44, 1
%46 = load i32, i32* %10
%47 = load i32, i32* %11
%48 = urem i32 %46, %47
%49 = sub i32 %45, %48
store i32 %49, i32* %16
%50 = load i32, i32* %12
%51 = sub i32 %50, 1
%52 = load i32, i32* %10
%53 = load i32, i32* %11
%54 = udiv i32 %52, %53
%55 = sub i32 %51, %54
store i32 %55, i32* %17
br label %64
56: ; preds = %7
br label %57
57: ; preds = %7, %56
%58 = load i32, i32* %10
%59 = load i32, i32* %11
%60 = urem i32 %58, %59
store i32 %60, i32* %16
%61 = load i32, i32* %10
%62 = load i32, i32* %11
%63 = udiv i32 %61, %62
store i32 %63, i32* %17
br label %64
64: ; preds = %57, %43, %33, %23
%65 = load i32, i32* %17
%66 = load i32, i32* %11
%67 = mul i32 %65, %66
%68 = load i32, i32* %16
%69 = add i32 %67, %68
%70 = load i32, i32* %14
%71 = mul i32 %69, %70
store i32 %71, i32* %18
store i32 0, i32* %15
br label %72
72: ; preds = %89, %64
%73 = load i32, i32* %15
%74 = load i32, i32* %14
%75 = icmp ult i32 %73, %74
br i1 %75, label %76, label %92
76: ; preds = %72
%77 = load i32, i32* %13
%78 = load i32, i32* %15
%79 = mul i32 %78, 8
%80 = lshr i32 %77, %79
%81 = and i32 %80, 255
%82 = trunc i32 %81 to i8
%83 = load i8*, i8** %8
%84 = load i32, i32* %18
%85 = load i32, i32* %15
%86 = add i32 %84, %85
%87 = zext i32 %86 to i64
%88 = getelementptr inbounds i8, i8* %83, i64 %87
store i8 %82, i8* %88
br label %89
89: ; preds = %76
%90 = load i32, i32* %15
%91 = add i32 %90, 1
store i32 %91, i32* %15
br label %72
92: ; preds = %72
ret void
}

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