void dct(short pixels[8][8], short data[8][8]) {
  short rows[8][8];
  unsigned i;
  static const short C1 = 16070, C2 = 15137, C3 = 13623, C4 = 11586, C5 = 9103,
                     C6 = 6270, C7 = 3197;
  for (i = 0; i < 8; i++) {
    short s07, s16, s25, s34, s0734, s1625;
    short d07, d16, d25, d34, d0734, d1625;
    s07 = pixels[i][0] + pixels[i][7];
    d07 = pixels[i][0] - pixels[i][7];
    s16 = pixels[i][1] + pixels[i][6];
    d16 = pixels[i][1] - pixels[i][6];
    s25 = pixels[i][2] + pixels[i][5];
    d25 = pixels[i][2] - pixels[i][5];
    s34 = pixels[i][3] + pixels[i][4];
    d34 = pixels[i][3] - pixels[i][4];
    rows[i][1] = (C1 * d07 + C3 * d16 + C5 * d25 + C7 * d34) >> 14;
    rows[i][3] = (C3 * d07 - C7 * d16 - C1 * d25 - C5 * d34) >> 14;
    rows[i][5] = (C5 * d07 - C1 * d16 + C7 * d25 + C3 * d34) >> 14;
    rows[i][7] = (C7 * d07 - C5 * d16 + C3 * d25 - C1 * d34) >> 14;
    s0734 = s07 + s34;
    d0734 = s07 - s34;
    s1625 = s16 + s25;
    d1625 = s16 - s25;
    rows[i][0] = (C4 * (s0734 + s1625)) >> 14;
    rows[i][4] = (C4 * (s0734 - s1625)) >> 14;
    rows[i][2] = (C2 * d0734 + C6 * d1625) >> 14;
    rows[i][6] = (C6 * d0734 - C2 * d1625) >> 14;
  }
  for (i = 0; i < 8; i++) {
    short s07, s16, s25, s34, s0734, s1625;
    short d07, d16, d25, d34, d0734, d1625;
    s07 = rows[0][i] + rows[7][i];
    d07 = rows[0][i] - rows[7][i];
    s16 = rows[1][i] + rows[6][i];
    d16 = rows[1][i] - rows[6][i];
    s25 = rows[2][i] + rows[5][i];
    d25 = rows[2][i] - rows[5][i];
    s34 = rows[3][i] + rows[4][i];
    d34 = rows[3][i] - rows[4][i];
    data[1][i] = (C1 * d07 + C3 * d16 + C5 * d25 + C7 * d34) >> 16;
    data[3][i] = (C3 * d07 - C7 * d16 - C1 * d25 - C5 * d34) >> 16;
    data[5][i] = (C5 * d07 - C1 * d16 + C7 * d25 + C3 * d34) >> 16;
    data[7][i] = (C7 * d07 - C5 * d16 + C3 * d25 - C1 * d34) >> 16;
    s0734 = s07 + s34;
    d0734 = s07 - s34;
    s1625 = s16 + s25;
    d1625 = s16 - s25;
    data[0][i] = (C4 * (s0734 + s1625)) >> 16;
    data[4][i] = (C4 * (s0734 - s1625)) >> 16;
    data[2][i] = (C2 * d0734 + C6 * d1625) >> 16;
    data[6][i] = (C6 * d0734 - C2 * d1625) >> 16;
  }
}


x86 assembly (clang, -O0):
<dct>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x94(%rbp)
cmpl   $0x8,-0x94(%rbp)
jae    1578 <dct+0x478>
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl (%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0xe(%rcx),%ecx
add    %ecx,%eax
mov    %ax,-0x96(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl (%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0xe(%rcx),%ecx
sub    %ecx,%eax
mov    %ax,-0xa2(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0xc(%rcx),%ecx
add    %ecx,%eax
mov    %ax,-0x98(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0xc(%rcx),%ecx
sub    %ecx,%eax
mov    %ax,-0xa4(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl 0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0xa(%rcx),%ecx
add    %ecx,%eax
mov    %ax,-0x9a(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl 0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0xa(%rcx),%ecx
sub    %ecx,%eax
mov    %ax,-0xa6(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl 0x6(%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0x8(%rcx),%ecx
add    %ecx,%eax
mov    %ax,-0x9c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
movswl 0x6(%rax),%eax
mov    -0x8(%rbp),%rcx
mov    -0x94(%rbp),%edx
shl    $0x4,%rdx
add    %rdx,%rcx
movswl 0x8(%rcx),%ecx
sub    %ecx,%eax
mov    %ax,-0xa8(%rbp)
movswl -0xa2(%rbp),%eax
imul   $0x3ec6,%eax,%eax
movswl -0xa4(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xa6(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
add    %ecx,%eax
movswl -0xa8(%rbp),%ecx
imul   $0xc7d,%ecx,%ecx
add    %ecx,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0x2(%rax)
movswl -0xa2(%rbp),%eax
imul   $0x3537,%eax,%eax
movswl -0xa4(%rbp),%ecx
imul   $0xc7d,%ecx,%ecx
sub    %ecx,%eax
movswl -0xa6(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xa8(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0x6(%rax)
movswl -0xa2(%rbp),%eax
imul   $0x238f,%eax,%eax
movswl -0xa4(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xa6(%rbp),%ecx
imul   $0xc7d,%ecx,%ecx
add    %ecx,%eax
movswl -0xa8(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0xa(%rax)
movswl -0xa2(%rbp),%eax
imul   $0xc7d,%eax,%eax
movswl -0xa4(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
movswl -0xa6(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xa8(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0xe(%rax)
movswl -0x96(%rbp),%eax
movswl -0x9c(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0x9e(%rbp)
movswl -0x96(%rbp),%eax
movswl -0x9c(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xaa(%rbp)
movswl -0x98(%rbp),%eax
movswl -0x9a(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xa0(%rbp)
movswl -0x98(%rbp),%eax
movswl -0x9a(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xac(%rbp)
movswl -0x9e(%rbp),%eax
movswl -0xa0(%rbp),%ecx
add    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,(%rax)
movswl -0x9e(%rbp),%eax
movswl -0xa0(%rbp),%ecx
sub    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0x8(%rax)
movswl -0xaa(%rbp),%eax
imul   $0x3b21,%eax,%eax
movswl -0xac(%rbp),%ecx
imul   $0x187e,%ecx,%ecx
add    %ecx,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0x4(%rax)
movswl -0xaa(%rbp),%eax
imul   $0x187e,%eax,%eax
movswl -0xac(%rbp),%ecx
imul   $0x3b21,%ecx,%ecx
sub    %ecx,%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x94(%rbp),%eax
mov    %eax,%edx
lea    -0x90(%rbp),%rax
shl    $0x4,%rdx
add    %rdx,%rax
mov    %cx,0xc(%rax)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    111a <dct+0x1a>
movl   $0x0,-0x94(%rbp)
cmpl   $0x8,-0x94(%rbp)
jae    18f0 <dct+0x7f0>
mov    -0x94(%rbp),%eax
movswl -0x90(%rbp,%rax,2),%eax
ff
mov    -0x94(%rbp),%ecx
movswl -0x20(%rbp,%rcx,2),%ecx
add    %ecx,%eax
mov    %ax,-0xae(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x90(%rbp,%rax,2),%eax
ff
mov    -0x94(%rbp),%ecx
movswl -0x20(%rbp,%rcx,2),%ecx
sub    %ecx,%eax
mov    %ax,-0xba(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x80(%rbp,%rax,2),%eax
mov    -0x94(%rbp),%ecx
movswl -0x30(%rbp,%rcx,2),%ecx
add    %ecx,%eax
mov    %ax,-0xb0(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x80(%rbp,%rax,2),%eax
mov    -0x94(%rbp),%ecx
movswl -0x30(%rbp,%rcx,2),%ecx
sub    %ecx,%eax
mov    %ax,-0xbc(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x70(%rbp,%rax,2),%eax
mov    -0x94(%rbp),%ecx
movswl -0x40(%rbp,%rcx,2),%ecx
add    %ecx,%eax
mov    %ax,-0xb2(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x70(%rbp,%rax,2),%eax
mov    -0x94(%rbp),%ecx
movswl -0x40(%rbp,%rcx,2),%ecx
sub    %ecx,%eax
mov    %ax,-0xbe(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x60(%rbp,%rax,2),%eax
mov    -0x94(%rbp),%ecx
movswl -0x50(%rbp,%rcx,2),%ecx
add    %ecx,%eax
mov    %ax,-0xb4(%rbp)
mov    -0x94(%rbp),%eax
movswl -0x60(%rbp,%rax,2),%eax
mov    -0x94(%rbp),%ecx
movswl -0x50(%rbp,%rcx,2),%ecx
sub    %ecx,%eax
mov    %ax,-0xc0(%rbp)
movswl -0xba(%rbp),%eax
imul   $0x3ec6,%eax,%eax
movswl -0xbc(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xbe(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
add    %ecx,%eax
movswl -0xc0(%rbp),%ecx
imul   $0xc7d,%ecx,%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x10(%rax,%rcx,2)
movswl -0xba(%rbp),%eax
imul   $0x3537,%eax,%eax
movswl -0xbc(%rbp),%ecx
imul   $0xc7d,%ecx,%ecx
sub    %ecx,%eax
movswl -0xbe(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xc0(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x30(%rax,%rcx,2)
movswl -0xba(%rbp),%eax
imul   $0x238f,%eax,%eax
movswl -0xbc(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xbe(%rbp),%ecx
imul   $0xc7d,%ecx,%ecx
add    %ecx,%eax
movswl -0xc0(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x50(%rax,%rcx,2)
movswl -0xba(%rbp),%eax
imul   $0xc7d,%eax,%eax
movswl -0xbc(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
movswl -0xbe(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xc0(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x70(%rax,%rcx,2)
movswl -0xae(%rbp),%eax
movswl -0xb4(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xb6(%rbp)
movswl -0xae(%rbp),%eax
movswl -0xb4(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xc2(%rbp)
movswl -0xb0(%rbp),%eax
movswl -0xb2(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xb8(%rbp)
movswl -0xb0(%rbp),%eax
movswl -0xb2(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xc4(%rbp)
movswl -0xb6(%rbp),%eax
movswl -0xb8(%rbp),%ecx
add    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
movswl -0xb6(%rbp),%eax
movswl -0xb8(%rbp),%ecx
sub    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x40(%rax,%rcx,2)
movswl -0xc2(%rbp),%eax
imul   $0x3b21,%eax,%eax
movswl -0xc4(%rbp),%ecx
imul   $0x187e,%ecx,%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x20(%rax,%rcx,2)
movswl -0xc2(%rbp),%eax
imul   $0x187e,%eax,%eax
movswl -0xc4(%rbp),%ecx
imul   $0x3b21,%ecx,%ecx
sub    %ecx,%eax
sar    $0x10,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x60(%rax,%rcx,2)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1582 <dct+0x482>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dct>:
sub    $0x98,%rsp
add    $0x7e,%rdi
xor    %eax,%eax
nopl   (%rax)
movzwl -0xe(%rdi,%rax,1),%ecx
movd   %ecx,%xmm0
movzwl -0x1e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x2e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm0
movzwl -0x3e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm0,%xmm2
punpckldq %xmm1,%xmm2
movzwl -0x4e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm0
movzwl -0x5e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
punpcklwd %xmm0,%xmm1
movzwl -0x6e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
movzwl -0x7e(%rdi,%rax,1),%ecx
movd   %ecx,%xmm8
punpcklwd %xmm3,%xmm8
punpckldq %xmm1,%xmm8
punpcklqdq %xmm2,%xmm8
movzwl (%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x10(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x20(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x30(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x40(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x50(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x60(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x70(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
punpcklwd %xmm1,%xmm5
punpckldq %xmm2,%xmm5
punpcklqdq %xmm3,%xmm5
movdqa %xmm5,%xmm4
paddw  %xmm8,%xmm4
psubw  %xmm5,%xmm8
movzwl -0xc(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x1c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x2c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x3c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x4c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x5c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x6c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x7c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm7
punpcklwd %xmm1,%xmm7
punpckldq %xmm2,%xmm7
punpcklqdq %xmm3,%xmm7
movzwl -0x2(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x12(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x22(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x32(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x42(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x52(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x62(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x72(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
punpcklwd %xmm1,%xmm5
punpckldq %xmm2,%xmm5
punpcklqdq %xmm3,%xmm5
movdqa %xmm5,%xmm0
paddw  %xmm7,%xmm0
movdqa %xmm0,-0x80(%rsp)
psubw  %xmm5,%xmm7
movzwl -0xa(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x1a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x2a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x3a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm1,%xmm3
punpckldq %xmm2,%xmm3
movzwl -0x4a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
movzwl -0x5a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm1,%xmm2
movzwl -0x6a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
movzwl -0x7a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
punpcklwd %xmm5,%xmm1
punpckldq %xmm2,%xmm1
punpcklqdq %xmm3,%xmm1
movzwl -0x4(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x14(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm2,%xmm3
movzwl -0x24(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x34(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
punpcklwd %xmm2,%xmm5
punpckldq %xmm3,%xmm5
movzwl -0x44(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x54(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm2,%xmm3
movzwl -0x64(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x74(%rdi,%rax,1),%ecx
movd   %ecx,%xmm6
punpcklwd %xmm2,%xmm6
punpckldq %xmm3,%xmm6
punpcklqdq %xmm5,%xmm6
movdqa %xmm6,%xmm0
paddw  %xmm1,%xmm0
movdqa %xmm0,-0x70(%rsp)
psubw  %xmm6,%xmm1
movzwl -0x8(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x18(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm2,%xmm3
movzwl -0x28(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x38(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
punpcklwd %xmm2,%xmm5
punpckldq %xmm3,%xmm5
movzwl -0x48(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
movzwl -0x58(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
punpcklwd %xmm2,%xmm3
movzwl -0x68(%rdi,%rax,1),%ecx
movd   %ecx,%xmm6
movzwl -0x78(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
punpcklwd %xmm6,%xmm2
punpckldq %xmm3,%xmm2
punpcklqdq %xmm5,%xmm2
movzwl -0x6(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
movzwl -0x16(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
punpcklwd %xmm3,%xmm5
movzwl -0x26(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
movzwl -0x36(%rdi,%rax,1),%ecx
movd   %ecx,%xmm6
punpcklwd %xmm3,%xmm6
punpckldq %xmm5,%xmm6
movzwl -0x46(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
movzwl -0x56(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
punpcklwd %xmm3,%xmm5
movzwl -0x66(%rdi,%rax,1),%ecx
movd   %ecx,%xmm3
movzwl -0x76(%rdi,%rax,1),%ecx
movd   %ecx,%xmm0
punpcklwd %xmm3,%xmm0
punpckldq %xmm5,%xmm0
punpcklqdq %xmm6,%xmm0
movdqa %xmm0,%xmm3
paddw  %xmm2,%xmm3
movdqa %xmm3,%xmm6
movdqa %xmm3,-0x20(%rsp)
psubw  %xmm0,%xmm2
movdqa %xmm7,%xmm11
punpcklwd %xmm8,%xmm11
movdqa %xmm11,%xmm0
movdqa 0xb6e(%rip),%xmm5
pmaddwd %xmm5,%xmm0
punpckhwd %xmm8,%xmm7
movdqa %xmm7,%xmm3
pmaddwd %xmm5,%xmm3
punpckhwd %xmm1,%xmm12
psrad  $0x10,%xmm12
punpcklwd %xmm1,%xmm13
psrad  $0x10,%xmm13
movdqa %xmm13,%xmm1
movdqa 0xb4a(%rip),%xmm5
pmaddwd %xmm5,%xmm1
paddd  %xmm0,%xmm1
movdqa %xmm12,%xmm0
pmaddwd %xmm5,%xmm0
paddd  %xmm3,%xmm0
punpcklwd %xmm2,%xmm8
psrad  $0x10,%xmm8
punpckhwd %xmm2,%xmm15
psrad  $0x10,%xmm15
movdqa %xmm15,%xmm2
movdqa 0xb22(%rip),%xmm5
pmaddwd %xmm5,%xmm2
paddd  %xmm0,%xmm2
movdqa %xmm8,%xmm0
pmaddwd %xmm5,%xmm0
paddd  %xmm1,%xmm0
pslld  $0x2,%xmm2
psrad  $0x10,%xmm2
pslld  $0x2,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm2,%xmm0
movdqa %xmm0,-0x10(%rsp)
movdqa %xmm11,%xmm0
movdqa 0xaf2(%rip),%xmm2
pmaddwd %xmm2,%xmm0
movdqa %xmm7,%xmm1
pmaddwd %xmm2,%xmm1
movdqa %xmm13,%xmm2
movdqa 0xae9(%rip),%xmm3
pmaddwd %xmm3,%xmm2
paddd  %xmm0,%xmm2
movdqa %xmm12,%xmm0
pmaddwd %xmm3,%xmm0
paddd  %xmm1,%xmm0
movdqa %xmm15,%xmm1
movdqa 0xad7(%rip),%xmm3
pmaddwd %xmm3,%xmm1
paddd  %xmm0,%xmm1
movdqa %xmm8,%xmm0
pmaddwd %xmm3,%xmm0
paddd  %xmm2,%xmm0
pslld  $0x2,%xmm1
psrad  $0x10,%xmm1
pslld  $0x2,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqa %xmm0,(%rsp)
movdqa %xmm11,%xmm0
movdqa 0xaa8(%rip),%xmm2
pmaddwd %xmm2,%xmm0
movdqa %xmm7,%xmm1
pmaddwd %xmm2,%xmm1
movdqa %xmm13,%xmm3
pmaddwd %xmm5,%xmm3
paddd  %xmm0,%xmm3
movdqa %xmm12,%xmm0
pmaddwd %xmm5,%xmm0
paddd  %xmm1,%xmm0
movdqa %xmm15,%xmm2
movdqa 0xa85(%rip),%xmm1
pmaddwd %xmm1,%xmm2
paddd  %xmm0,%xmm2
movdqa %xmm8,%xmm9
pmaddwd %xmm1,%xmm9
paddd  %xmm3,%xmm9
paddw  %xmm4,%xmm6
movdqa %xmm6,-0x30(%rsp)
movdqa -0x70(%rsp),%xmm10
paddw  -0x80(%rsp),%xmm10
punpckhwd %xmm6,%xmm0
psrad  $0x10,%xmm0
punpckhwd %xmm10,%xmm6
psrad  $0x10,%xmm6
movdqa %xmm0,%xmm3
psubd  %xmm6,%xmm0
pshufd $0xf5,%xmm0,%xmm5
movdqa 0xa4e(%rip),%xmm1
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm0
pslld  $0x2,%xmm2
pslld  $0x2,%xmm0
movdqa %xmm0,%xmm5
punpckhwd %xmm2,%xmm0
movdqa %xmm0,-0x40(%rsp)
psrad  $0x10,%xmm2
pslld  $0x2,%xmm9
psrad  $0x10,%xmm9
packssdw %xmm2,%xmm9
movdqa %xmm9,-0x50(%rsp)
movdqa 0x9eb(%rip),%xmm0
pmaddwd %xmm0,%xmm11
movdqa 0x9ce(%rip),%xmm2
pmaddwd %xmm2,%xmm13
paddd  %xmm11,%xmm13
pmaddwd %xmm0,%xmm7
pmaddwd %xmm2,%xmm12
paddd  %xmm7,%xmm12
movdqa 0x97e(%rip),%xmm0
pmaddwd %xmm0,%xmm15
paddd  %xmm12,%xmm15
pmaddwd %xmm0,%xmm8
paddd  %xmm13,%xmm8
pslld  $0x2,%xmm15
psrad  $0x10,%xmm15
pslld  $0x2,%xmm8
psrad  $0x10,%xmm8
packssdw %xmm15,%xmm8
movdqa %xmm8,%xmm15
movdqa %xmm8,-0x60(%rsp)
psubw  -0x20(%rsp),%xmm4
movdqa -0x80(%rsp),%xmm0
psubw  -0x70(%rsp),%xmm0
punpcklwd -0x30(%rsp),%xmm7
psrad  $0x10,%xmm7
punpcklwd %xmm10,%xmm10
psrad  $0x10,%xmm10
paddd  %xmm6,%xmm3
movdqa %xmm7,%xmm2
paddd  %xmm10,%xmm2
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm2
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm3
pslld  $0x2,%xmm3
psrad  $0x10,%xmm3
pslld  $0x2,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
psubd  %xmm10,%xmm7
pshufd $0xf5,%xmm7,%xmm6
pmuludq %xmm1,%xmm7
pshufd $0xe8,%xmm7,%xmm3
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm3
psrad  $0x10,%xmm5
pslld  $0x2,%xmm3
psrad  $0x10,%xmm3
packssdw %xmm5,%xmm3
movdqa %xmm4,%xmm5
movdqa %xmm0,%xmm1
punpcklwd %xmm0,%xmm5
movdqa %xmm5,%xmm6
movdqa 0x8d3(%rip),%xmm0
pmaddwd %xmm0,%xmm6
punpckhwd %xmm1,%xmm4
movdqa %xmm4,%xmm7
pmaddwd %xmm0,%xmm7
pslld  $0x2,%xmm7
psrad  $0x10,%xmm7
pslld  $0x2,%xmm6
psrad  $0x10,%xmm6
packssdw %xmm7,%xmm6
movdqa 0x8b3(%rip),%xmm0
pmaddwd %xmm0,%xmm5
pmaddwd %xmm0,%xmm4
pslld  $0x2,%xmm4
psrad  $0x10,%xmm4
pslld  $0x2,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm4,%xmm5
movdqa %xmm2,%xmm4
movdqa -0x10(%rsp),%xmm14
punpcklwd %xmm14,%xmm4
movdqa %xmm6,%xmm11
movdqa (%rsp),%xmm9
punpcklwd %xmm9,%xmm11
movdqa %xmm4,%xmm10
punpckldq %xmm11,%xmm10
movdqa %xmm3,%xmm7
movdqa -0x50(%rsp),%xmm8
punpcklwd %xmm8,%xmm7
pshufd $0x0,%xmm7,%xmm12
movdqa %xmm5,%xmm13
punpcklwd %xmm15,%xmm13
pshufd $0x0,%xmm13,%xmm1
punpckhdq %xmm1,%xmm12
movsd  %xmm10,%xmm12
pshufd $0x55,%xmm4,%xmm10
pshufd $0x55,%xmm11,%xmm0
punpckldq %xmm0,%xmm10
movdqa %xmm7,%xmm0
punpckldq %xmm13,%xmm0
shufps $0xe4,%xmm0,%xmm10
pshufd $0xaa,%xmm7,%xmm15
pshufd $0xaa,%xmm13,%xmm1
punpckhdq %xmm1,%xmm15
pshufd $0xff,%xmm4,%xmm1
punpckhdq %xmm11,%xmm4
movsd  %xmm4,%xmm15
punpckhdq %xmm13,%xmm7
pshufd $0xff,%xmm11,%xmm4
punpckldq %xmm4,%xmm1
shufps $0xe4,%xmm7,%xmm1
punpckhwd %xmm14,%xmm2
punpckhwd %xmm9,%xmm6
movdqa %xmm2,%xmm4
punpckldq %xmm6,%xmm4
punpckhwd %xmm8,%xmm3
pshufd $0x0,%xmm3,%xmm7
punpckhwd -0x60(%rsp),%xmm5
pshufd $0x0,%xmm5,%xmm0
punpckhdq %xmm0,%xmm7
movsd  %xmm4,%xmm7
pshufd $0x55,%xmm2,%xmm0
pshufd $0x55,%xmm6,%xmm4
punpckldq %xmm4,%xmm0
pshufd $0xaa,%xmm3,%xmm4
punpckldq %xmm5,%xmm3
shufps $0xe4,%xmm3,%xmm0
pshufd $0xaa,%xmm5,%xmm3
punpckhdq %xmm3,%xmm4
pshufd $0xff,%xmm2,%xmm3
punpckhdq %xmm6,%xmm2
movsd  %xmm2,%xmm4
movdqa -0x40(%rsp),%xmm8
punpckhdq %xmm5,%xmm8
pshufd $0xff,%xmm6,%xmm2
punpckldq %xmm2,%xmm3
shufps $0xe4,%xmm8,%xmm3
movaps %xmm3,0x80(%rsp,%rax,1)
movapd %xmm4,0x70(%rsp,%rax,1)
movaps %xmm0,0x60(%rsp,%rax,1)
movapd %xmm7,0x50(%rsp,%rax,1)
movaps %xmm1,0x40(%rsp,%rax,1)
movapd %xmm15,0x30(%rsp,%rax,1)
movaps %xmm10,0x20(%rsp,%rax,1)
movapd %xmm12,0x10(%rsp,%rax,1)
sub    $0xffffffffffffff80,%rax
cmp    $0x80,%rax
jne    1110 <dct+0x10>
movdqa 0x80(%rsp),%xmm1
movdqa 0x10(%rsp),%xmm2
movdqa 0x20(%rsp),%xmm12
movdqa %xmm1,%xmm11
paddw  %xmm2,%xmm11
psubw  %xmm1,%xmm2
movdqa 0x70(%rsp),%xmm1
movdqa %xmm1,%xmm0
paddw  %xmm12,%xmm0
movdqa %xmm0,-0x80(%rsp)
psubw  %xmm1,%xmm12
movdqa 0x30(%rsp),%xmm6
movdqa 0x60(%rsp),%xmm1
movdqa %xmm1,%xmm9
paddw  %xmm6,%xmm9
psubw  %xmm1,%xmm6
movdqa 0x40(%rsp),%xmm7
movdqa 0x50(%rsp),%xmm1
movdqa %xmm1,%xmm10
paddw  %xmm7,%xmm10
psubw  %xmm1,%xmm7
movdqa %xmm12,%xmm8
punpcklwd %xmm2,%xmm8
punpckhwd %xmm2,%xmm12
movdqa %xmm8,%xmm2
movdqa 0x5ed(%rip),%xmm1
pmaddwd %xmm1,%xmm2
punpcklwd %xmm6,%xmm15
psrad  $0x10,%xmm15
movdqa %xmm15,%xmm5
movdqa 0x5e1(%rip),%xmm4
pmaddwd %xmm4,%xmm5
paddd  %xmm2,%xmm5
pmaddwd %xmm12,%xmm1
punpckhwd %xmm6,%xmm2
psrad  $0x10,%xmm2
pmaddwd %xmm2,%xmm4
paddd  %xmm1,%xmm4
punpckhwd %xmm7,%xmm0
psrad  $0x10,%xmm0
movdqa %xmm0,%xmm6
movdqa 0x5be(%rip),%xmm3
pmaddwd %xmm3,%xmm6
paddd  %xmm4,%xmm6
punpcklwd %xmm7,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,%xmm7
pmaddwd %xmm3,%xmm7
paddd  %xmm5,%xmm7
psrad  $0x10,%xmm6
psrad  $0x10,%xmm7
packssdw %xmm6,%xmm7
movdqu %xmm7,0x10(%rsi)
movdqa %xmm8,%xmm5
movdqa 0x591(%rip),%xmm4
pmaddwd %xmm4,%xmm5
movdqa %xmm15,%xmm6
movdqa 0x58f(%rip),%xmm13
pmaddwd %xmm13,%xmm6
paddd  %xmm5,%xmm6
pmaddwd %xmm12,%xmm4
movdqa %xmm2,%xmm5
pmaddwd %xmm13,%xmm5
paddd  %xmm4,%xmm5
movdqa %xmm0,%xmm7
movdqa 0x578(%rip),%xmm4
pmaddwd %xmm4,%xmm7
paddd  %xmm5,%xmm7
pmaddwd %xmm1,%xmm4
paddd  %xmm6,%xmm4
psrad  $0x10,%xmm7
psrad  $0x10,%xmm4
packssdw %xmm7,%xmm4
movdqu %xmm4,0x30(%rsi)
movdqa %xmm8,%xmm5
movdqa 0x558(%rip),%xmm7
pmaddwd %xmm7,%xmm5
movdqa %xmm15,%xmm6
pmaddwd %xmm3,%xmm6
paddd  %xmm5,%xmm6
pmaddwd %xmm12,%xmm7
pmaddwd %xmm2,%xmm3
paddd  %xmm7,%xmm3
movdqa %xmm0,%xmm5
movdqa 0x53d(%rip),%xmm14
pmaddwd %xmm14,%xmm5
paddd  %xmm3,%xmm5
movdqa %xmm1,%xmm7
pmaddwd %xmm14,%xmm7
paddd  %xmm6,%xmm7
psrad  $0x10,%xmm5
psrad  $0x10,%xmm7
packssdw %xmm5,%xmm7
movdqu %xmm7,0x50(%rsi)
movdqa 0x51c(%rip),%xmm5
pmaddwd %xmm5,%xmm8
pmaddwd %xmm5,%xmm12
pmaddwd %xmm14,%xmm15
paddd  %xmm8,%xmm15
pmaddwd %xmm14,%xmm2
paddd  %xmm12,%xmm2
pmaddwd %xmm13,%xmm0
paddd  %xmm2,%xmm0
pmaddwd %xmm13,%xmm1
paddd  %xmm15,%xmm1
psrad  $0x10,%xmm0
psrad  $0x10,%xmm1
packssdw %xmm0,%xmm1
movdqu %xmm1,0x70(%rsi)
movdqa %xmm10,%xmm0
paddw  %xmm11,%xmm0
psubw  %xmm10,%xmm11
movdqa %xmm9,%xmm4
movdqa -0x80(%rsp),%xmm8
paddw  %xmm8,%xmm4
psubw  %xmm9,%xmm8
punpcklwd %xmm0,%xmm2
psrad  $0x10,%xmm2
punpckhwd %xmm0,%xmm1
psrad  $0x10,%xmm1
punpcklwd %xmm4,%xmm3
psrad  $0x10,%xmm3
punpckhwd %xmm4,%xmm4
psrad  $0x10,%xmm4
movdqa %xmm1,%xmm0
paddd  %xmm4,%xmm0
movdqa %xmm2,%xmm5
paddd  %xmm3,%xmm5
pshufd $0xf5,%xmm5,%xmm6
movdqa 0x482(%rip),%xmm7
pmuludq %xmm7,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm7,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm5
pshufd $0xf5,%xmm0,%xmm6
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm7,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm0
psrad  $0x10,%xmm0
psrad  $0x10,%xmm5
packssdw %xmm0,%xmm5
movdqu %xmm5,(%rsi)
psubd  %xmm4,%xmm1
psubd  %xmm3,%xmm2
pshufd $0xf5,%xmm2,%xmm0
pmuludq %xmm7,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm7,%xmm1
pmuludq %xmm7,%xmm0
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm1
psrad  $0x10,%xmm1
psrad  $0x10,%xmm2
packssdw %xmm1,%xmm2
movdqu %xmm2,0x40(%rsi)
movdqa %xmm11,%xmm0
punpcklwd %xmm8,%xmm0
punpckhwd %xmm8,%xmm11
movdqa %xmm0,%xmm1
movdqa 0x3e3(%rip),%xmm2
pmaddwd %xmm2,%xmm1
pmaddwd %xmm11,%xmm2
psrad  $0x10,%xmm2
psrad  $0x10,%xmm1
packssdw %xmm2,%xmm1
movdqu %xmm1,0x20(%rsi)
movdqa 0x3cf(%rip),%xmm1
pmaddwd %xmm1,%xmm0
pmaddwd %xmm1,%xmm11
psrad  $0x10,%xmm11
psrad  $0x10,%xmm0
packssdw %xmm11,%xmm0
movdqu %xmm0,0x60(%rsi)
add    $0x98,%rsp
ret

LLVM IR (-O0):
@dct.C1 = internal constant i16 16070
@dct.C2 = internal constant i16 15137
@dct.C3 = internal constant i16 13623
@dct.C4 = internal constant i16 11586
@dct.C5 = internal constant i16 9103
@dct.C6 = internal constant i16 6270
@dct.C7 = internal constant i16 3197
define void @dct([8 x i16]* %0, [8 x i16]* %1) {
%3 = alloca [8 x i16]*
%4 = alloca [8 x i16]*
%5 = alloca [8 x [8 x i16]]
%6 = alloca i32
%7 = alloca i16
%8 = alloca i16
%9 = alloca i16
%10 = alloca i16
%11 = alloca i16
%12 = alloca i16
%13 = alloca i16
%14 = alloca i16
%15 = alloca i16
%16 = alloca i16
%17 = alloca i16
%18 = alloca i16
%19 = alloca i16
%20 = alloca i16
%21 = alloca i16
%22 = alloca i16
%23 = alloca i16
%24 = alloca i16
%25 = alloca i16
%26 = alloca i16
%27 = alloca i16
%28 = alloca i16
%29 = alloca i16
%30 = alloca i16
store [8 x i16]* %0, [8 x i16]** %3
store [8 x i16]* %1, [8 x i16]** %4
store i32 0, i32* %6
br label %31
31: ; preds = %321, %2
%32 = load i32, i32* %6
%33 = icmp ult i32 %32, 8
br i1 %33, label %34, label %324
34: ; preds = %31
%35 = load [8 x i16]*, [8 x i16]** %3
%36 = load i32, i32* %6
%37 = zext i32 %36 to i64
%38 = getelementptr inbounds [8 x i16], [8 x i16]* %35, i64 %37
%39 = getelementptr inbounds [8 x i16], [8 x i16]* %38, i64 0, i64 0
%40 = load i16, i16* %39
%41 = sext i16 %40 to i32
%42 = load [8 x i16]*, [8 x i16]** %3
%43 = load i32, i32* %6
%44 = zext i32 %43 to i64
%45 = getelementptr inbounds [8 x i16], [8 x i16]* %42, i64 %44
%46 = getelementptr inbounds [8 x i16], [8 x i16]* %45, i64 0, i64 7
%47 = load i16, i16* %46
%48 = sext i16 %47 to i32
%49 = add nsw i32 %41, %48
%50 = trunc i32 %49 to i16
store i16 %50, i16* %7
%51 = load [8 x i16]*, [8 x i16]** %3
%52 = load i32, i32* %6
%53 = zext i32 %52 to i64
%54 = getelementptr inbounds [8 x i16], [8 x i16]* %51, i64 %53
%55 = getelementptr inbounds [8 x i16], [8 x i16]* %54, i64 0, i64 0
%56 = load i16, i16* %55
%57 = sext i16 %56 to i32
%58 = load [8 x i16]*, [8 x i16]** %3
%59 = load i32, i32* %6
%60 = zext i32 %59 to i64
%61 = getelementptr inbounds [8 x i16], [8 x i16]* %58, i64 %60
%62 = getelementptr inbounds [8 x i16], [8 x i16]* %61, i64 0, i64 7
%63 = load i16, i16* %62
%64 = sext i16 %63 to i32
%65 = sub nsw i32 %57, %64
%66 = trunc i32 %65 to i16
store i16 %66, i16* %13
%67 = load [8 x i16]*, [8 x i16]** %3
%68 = load i32, i32* %6
%69 = zext i32 %68 to i64
%70 = getelementptr inbounds [8 x i16], [8 x i16]* %67, i64 %69
%71 = getelementptr inbounds [8 x i16], [8 x i16]* %70, i64 0, i64 1
%72 = load i16, i16* %71
%73 = sext i16 %72 to i32
%74 = load [8 x i16]*, [8 x i16]** %3
%75 = load i32, i32* %6
%76 = zext i32 %75 to i64
%77 = getelementptr inbounds [8 x i16], [8 x i16]* %74, i64 %76
%78 = getelementptr inbounds [8 x i16], [8 x i16]* %77, i64 0, i64 6
%79 = load i16, i16* %78
%80 = sext i16 %79 to i32
%81 = add nsw i32 %73, %80
%82 = trunc i32 %81 to i16
store i16 %82, i16* %8
%83 = load [8 x i16]*, [8 x i16]** %3
%84 = load i32, i32* %6
%85 = zext i32 %84 to i64
%86 = getelementptr inbounds [8 x i16], [8 x i16]* %83, i64 %85
%87 = getelementptr inbounds [8 x i16], [8 x i16]* %86, i64 0, i64 1
%88 = load i16, i16* %87
%89 = sext i16 %88 to i32
%90 = load [8 x i16]*, [8 x i16]** %3
%91 = load i32, i32* %6
%92 = zext i32 %91 to i64
%93 = getelementptr inbounds [8 x i16], [8 x i16]* %90, i64 %92
%94 = getelementptr inbounds [8 x i16], [8 x i16]* %93, i64 0, i64 6
%95 = load i16, i16* %94
%96 = sext i16 %95 to i32
%97 = sub nsw i32 %89, %96
%98 = trunc i32 %97 to i16
store i16 %98, i16* %14
%99 = load [8 x i16]*, [8 x i16]** %3
%100 = load i32, i32* %6
%101 = zext i32 %100 to i64
%102 = getelementptr inbounds [8 x i16], [8 x i16]* %99, i64 %101
%103 = getelementptr inbounds [8 x i16], [8 x i16]* %102, i64 0, i64 2
%104 = load i16, i16* %103
%105 = sext i16 %104 to i32
%106 = load [8 x i16]*, [8 x i16]** %3
%107 = load i32, i32* %6
%108 = zext i32 %107 to i64
%109 = getelementptr inbounds [8 x i16], [8 x i16]* %106, i64 %108
%110 = getelementptr inbounds [8 x i16], [8 x i16]* %109, i64 0, i64 5
%111 = load i16, i16* %110
%112 = sext i16 %111 to i32
%113 = add nsw i32 %105, %112
%114 = trunc i32 %113 to i16
store i16 %114, i16* %9
%115 = load [8 x i16]*, [8 x i16]** %3
%116 = load i32, i32* %6
%117 = zext i32 %116 to i64
%118 = getelementptr inbounds [8 x i16], [8 x i16]* %115, i64 %117
%119 = getelementptr inbounds [8 x i16], [8 x i16]* %118, i64 0, i64 2
%120 = load i16, i16* %119
%121 = sext i16 %120 to i32
%122 = load [8 x i16]*, [8 x i16]** %3
%123 = load i32, i32* %6
%124 = zext i32 %123 to i64
%125 = getelementptr inbounds [8 x i16], [8 x i16]* %122, i64 %124
%126 = getelementptr inbounds [8 x i16], [8 x i16]* %125, i64 0, i64 5
%127 = load i16, i16* %126
%128 = sext i16 %127 to i32
%129 = sub nsw i32 %121, %128
%130 = trunc i32 %129 to i16
store i16 %130, i16* %15
%131 = load [8 x i16]*, [8 x i16]** %3
%132 = load i32, i32* %6
%133 = zext i32 %132 to i64
%134 = getelementptr inbounds [8 x i16], [8 x i16]* %131, i64 %133
%135 = getelementptr inbounds [8 x i16], [8 x i16]* %134, i64 0, i64 3
%136 = load i16, i16* %135
%137 = sext i16 %136 to i32
%138 = load [8 x i16]*, [8 x i16]** %3
%139 = load i32, i32* %6
%140 = zext i32 %139 to i64
%141 = getelementptr inbounds [8 x i16], [8 x i16]* %138, i64 %140
%142 = getelementptr inbounds [8 x i16], [8 x i16]* %141, i64 0, i64 4
%143 = load i16, i16* %142
%144 = sext i16 %143 to i32
%145 = add nsw i32 %137, %144
%146 = trunc i32 %145 to i16
store i16 %146, i16* %10
%147 = load [8 x i16]*, [8 x i16]** %3
%148 = load i32, i32* %6
%149 = zext i32 %148 to i64
%150 = getelementptr inbounds [8 x i16], [8 x i16]* %147, i64 %149
%151 = getelementptr inbounds [8 x i16], [8 x i16]* %150, i64 0, i64 3
%152 = load i16, i16* %151
%153 = sext i16 %152 to i32
%154 = load [8 x i16]*, [8 x i16]** %3
%155 = load i32, i32* %6
%156 = zext i32 %155 to i64
%157 = getelementptr inbounds [8 x i16], [8 x i16]* %154, i64 %156
%158 = getelementptr inbounds [8 x i16], [8 x i16]* %157, i64 0, i64 4
%159 = load i16, i16* %158
%160 = sext i16 %159 to i32
%161 = sub nsw i32 %153, %160
%162 = trunc i32 %161 to i16
store i16 %162, i16* %16
%163 = load i16, i16* %13
%164 = sext i16 %163 to i32
%165 = mul nsw i32 16070, %164
%166 = load i16, i16* %14
%167 = sext i16 %166 to i32
%168 = mul nsw i32 13623, %167
%169 = add nsw i32 %165, %168
%170 = load i16, i16* %15
%171 = sext i16 %170 to i32
%172 = mul nsw i32 9103, %171
%173 = add nsw i32 %169, %172
%174 = load i16, i16* %16
%175 = sext i16 %174 to i32
%176 = mul nsw i32 3197, %175
%177 = add nsw i32 %173, %176
%178 = ashr i32 %177, 14
%179 = trunc i32 %178 to i16
%180 = load i32, i32* %6
%181 = zext i32 %180 to i64
%182 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %181
%183 = getelementptr inbounds [8 x i16], [8 x i16]* %182, i64 0, i64 1
store i16 %179, i16* %183
%184 = load i16, i16* %13
%185 = sext i16 %184 to i32
%186 = mul nsw i32 13623, %185
%187 = load i16, i16* %14
%188 = sext i16 %187 to i32
%189 = mul nsw i32 3197, %188
%190 = sub nsw i32 %186, %189
%191 = load i16, i16* %15
%192 = sext i16 %191 to i32
%193 = mul nsw i32 16070, %192
%194 = sub nsw i32 %190, %193
%195 = load i16, i16* %16
%196 = sext i16 %195 to i32
%197 = mul nsw i32 9103, %196
%198 = sub nsw i32 %194, %197
%199 = ashr i32 %198, 14
%200 = trunc i32 %199 to i16
%201 = load i32, i32* %6
%202 = zext i32 %201 to i64
%203 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %202
%204 = getelementptr inbounds [8 x i16], [8 x i16]* %203, i64 0, i64 3
store i16 %200, i16* %204
%205 = load i16, i16* %13
%206 = sext i16 %205 to i32
%207 = mul nsw i32 9103, %206
%208 = load i16, i16* %14
%209 = sext i16 %208 to i32
%210 = mul nsw i32 16070, %209
%211 = sub nsw i32 %207, %210
%212 = load i16, i16* %15
%213 = sext i16 %212 to i32
%214 = mul nsw i32 3197, %213
%215 = add nsw i32 %211, %214
%216 = load i16, i16* %16
%217 = sext i16 %216 to i32
%218 = mul nsw i32 13623, %217
%219 = add nsw i32 %215, %218
%220 = ashr i32 %219, 14
%221 = trunc i32 %220 to i16
%222 = load i32, i32* %6
%223 = zext i32 %222 to i64
%224 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %223
%225 = getelementptr inbounds [8 x i16], [8 x i16]* %224, i64 0, i64 5
store i16 %221, i16* %225
%226 = load i16, i16* %13
%227 = sext i16 %226 to i32
%228 = mul nsw i32 3197, %227
%229 = load i16, i16* %14
%230 = sext i16 %229 to i32
%231 = mul nsw i32 9103, %230
%232 = sub nsw i32 %228, %231
%233 = load i16, i16* %15
%234 = sext i16 %233 to i32
%235 = mul nsw i32 13623, %234
%236 = add nsw i32 %232, %235
%237 = load i16, i16* %16
%238 = sext i16 %237 to i32
%239 = mul nsw i32 16070, %238
%240 = sub nsw i32 %236, %239
%241 = ashr i32 %240, 14
%242 = trunc i32 %241 to i16
%243 = load i32, i32* %6
%244 = zext i32 %243 to i64
%245 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %244
%246 = getelementptr inbounds [8 x i16], [8 x i16]* %245, i64 0, i64 7
store i16 %242, i16* %246
%247 = load i16, i16* %7
%248 = sext i16 %247 to i32
%249 = load i16, i16* %10
%250 = sext i16 %249 to i32
%251 = add nsw i32 %248, %250
%252 = trunc i32 %251 to i16
store i16 %252, i16* %11
%253 = load i16, i16* %7
%254 = sext i16 %253 to i32
%255 = load i16, i16* %10
%256 = sext i16 %255 to i32
%257 = sub nsw i32 %254, %256
%258 = trunc i32 %257 to i16
store i16 %258, i16* %17
%259 = load i16, i16* %8
%260 = sext i16 %259 to i32
%261 = load i16, i16* %9
%262 = sext i16 %261 to i32
%263 = add nsw i32 %260, %262
%264 = trunc i32 %263 to i16
store i16 %264, i16* %12
%265 = load i16, i16* %8
%266 = sext i16 %265 to i32
%267 = load i16, i16* %9
%268 = sext i16 %267 to i32
%269 = sub nsw i32 %266, %268
%270 = trunc i32 %269 to i16
store i16 %270, i16* %18
%271 = load i16, i16* %11
%272 = sext i16 %271 to i32
%273 = load i16, i16* %12
%274 = sext i16 %273 to i32
%275 = add nsw i32 %272, %274
%276 = mul nsw i32 11586, %275
%277 = ashr i32 %276, 14
%278 = trunc i32 %277 to i16
%279 = load i32, i32* %6
%280 = zext i32 %279 to i64
%281 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %280
%282 = getelementptr inbounds [8 x i16], [8 x i16]* %281, i64 0, i64 0
store i16 %278, i16* %282
%283 = load i16, i16* %11
%284 = sext i16 %283 to i32
%285 = load i16, i16* %12
%286 = sext i16 %285 to i32
%287 = sub nsw i32 %284, %286
%288 = mul nsw i32 11586, %287
%289 = ashr i32 %288, 14
%290 = trunc i32 %289 to i16
%291 = load i32, i32* %6
%292 = zext i32 %291 to i64
%293 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %292
%294 = getelementptr inbounds [8 x i16], [8 x i16]* %293, i64 0, i64 4
store i16 %290, i16* %294
%295 = load i16, i16* %17
%296 = sext i16 %295 to i32
%297 = mul nsw i32 15137, %296
%298 = load i16, i16* %18
%299 = sext i16 %298 to i32
%300 = mul nsw i32 6270, %299
%301 = add nsw i32 %297, %300
%302 = ashr i32 %301, 14
%303 = trunc i32 %302 to i16
%304 = load i32, i32* %6
%305 = zext i32 %304 to i64
%306 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %305
%307 = getelementptr inbounds [8 x i16], [8 x i16]* %306, i64 0, i64 2
store i16 %303, i16* %307
%308 = load i16, i16* %17
%309 = sext i16 %308 to i32
%310 = mul nsw i32 6270, %309
%311 = load i16, i16* %18
%312 = sext i16 %311 to i32
%313 = mul nsw i32 15137, %312
%314 = sub nsw i32 %310, %313
%315 = ashr i32 %314, 14
%316 = trunc i32 %315 to i16
%317 = load i32, i32* %6
%318 = zext i32 %317 to i64
%319 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 %318
%320 = getelementptr inbounds [8 x i16], [8 x i16]* %319, i64 0, i64 6
store i16 %316, i16* %320
br label %321
321: ; preds = %34
%322 = load i32, i32* %6
%323 = add i32 %322, 1
store i32 %323, i32* %6
br label %31
324: ; preds = %31
store i32 0, i32* %6
br label %325
325: ; preds = %607, %324
%326 = load i32, i32* %6
%327 = icmp ult i32 %326, 8
br i1 %327, label %328, label %610
328: ; preds = %325
%329 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 0
%330 = load i32, i32* %6
%331 = zext i32 %330 to i64
%332 = getelementptr inbounds [8 x i16], [8 x i16]* %329, i64 0, i64 %331
%333 = load i16, i16* %332
%334 = sext i16 %333 to i32
%335 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 7
%336 = load i32, i32* %6
%337 = zext i32 %336 to i64
%338 = getelementptr inbounds [8 x i16], [8 x i16]* %335, i64 0, i64 %337
%339 = load i16, i16* %338
%340 = sext i16 %339 to i32
%341 = add nsw i32 %334, %340
%342 = trunc i32 %341 to i16
store i16 %342, i16* %19
%343 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 0
%344 = load i32, i32* %6
%345 = zext i32 %344 to i64
%346 = getelementptr inbounds [8 x i16], [8 x i16]* %343, i64 0, i64 %345
%347 = load i16, i16* %346
%348 = sext i16 %347 to i32
%349 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 7
%350 = load i32, i32* %6
%351 = zext i32 %350 to i64
%352 = getelementptr inbounds [8 x i16], [8 x i16]* %349, i64 0, i64 %351
%353 = load i16, i16* %352
%354 = sext i16 %353 to i32
%355 = sub nsw i32 %348, %354
%356 = trunc i32 %355 to i16
store i16 %356, i16* %25
%357 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 1
%358 = load i32, i32* %6
%359 = zext i32 %358 to i64
%360 = getelementptr inbounds [8 x i16], [8 x i16]* %357, i64 0, i64 %359
%361 = load i16, i16* %360
%362 = sext i16 %361 to i32
%363 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 6
%364 = load i32, i32* %6
%365 = zext i32 %364 to i64
%366 = getelementptr inbounds [8 x i16], [8 x i16]* %363, i64 0, i64 %365
%367 = load i16, i16* %366
%368 = sext i16 %367 to i32
%369 = add nsw i32 %362, %368
%370 = trunc i32 %369 to i16
store i16 %370, i16* %20
%371 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 1
%372 = load i32, i32* %6
%373 = zext i32 %372 to i64
%374 = getelementptr inbounds [8 x i16], [8 x i16]* %371, i64 0, i64 %373
%375 = load i16, i16* %374
%376 = sext i16 %375 to i32
%377 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 6
%378 = load i32, i32* %6
%379 = zext i32 %378 to i64
%380 = getelementptr inbounds [8 x i16], [8 x i16]* %377, i64 0, i64 %379
%381 = load i16, i16* %380
%382 = sext i16 %381 to i32
%383 = sub nsw i32 %376, %382
%384 = trunc i32 %383 to i16
store i16 %384, i16* %26
%385 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 2
%386 = load i32, i32* %6
%387 = zext i32 %386 to i64
%388 = getelementptr inbounds [8 x i16], [8 x i16]* %385, i64 0, i64 %387
%389 = load i16, i16* %388
%390 = sext i16 %389 to i32
%391 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 5
%392 = load i32, i32* %6
%393 = zext i32 %392 to i64
%394 = getelementptr inbounds [8 x i16], [8 x i16]* %391, i64 0, i64 %393
%395 = load i16, i16* %394
%396 = sext i16 %395 to i32
%397 = add nsw i32 %390, %396
%398 = trunc i32 %397 to i16
store i16 %398, i16* %21
%399 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 2
%400 = load i32, i32* %6
%401 = zext i32 %400 to i64
%402 = getelementptr inbounds [8 x i16], [8 x i16]* %399, i64 0, i64 %401
%403 = load i16, i16* %402
%404 = sext i16 %403 to i32
%405 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 5
%406 = load i32, i32* %6
%407 = zext i32 %406 to i64
%408 = getelementptr inbounds [8 x i16], [8 x i16]* %405, i64 0, i64 %407
%409 = load i16, i16* %408
%410 = sext i16 %409 to i32
%411 = sub nsw i32 %404, %410
%412 = trunc i32 %411 to i16
store i16 %412, i16* %27
%413 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 3
%414 = load i32, i32* %6
%415 = zext i32 %414 to i64
%416 = getelementptr inbounds [8 x i16], [8 x i16]* %413, i64 0, i64 %415
%417 = load i16, i16* %416
%418 = sext i16 %417 to i32
%419 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 4
%420 = load i32, i32* %6
%421 = zext i32 %420 to i64
%422 = getelementptr inbounds [8 x i16], [8 x i16]* %419, i64 0, i64 %421
%423 = load i16, i16* %422
%424 = sext i16 %423 to i32
%425 = add nsw i32 %418, %424
%426 = trunc i32 %425 to i16
store i16 %426, i16* %22
%427 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 3
%428 = load i32, i32* %6
%429 = zext i32 %428 to i64
%430 = getelementptr inbounds [8 x i16], [8 x i16]* %427, i64 0, i64 %429
%431 = load i16, i16* %430
%432 = sext i16 %431 to i32
%433 = getelementptr inbounds [8 x [8 x i16]], [8 x [8 x i16]]* %5, i64 0, i64 4
%434 = load i32, i32* %6
%435 = zext i32 %434 to i64
%436 = getelementptr inbounds [8 x i16], [8 x i16]* %433, i64 0, i64 %435
%437 = load i16, i16* %436
%438 = sext i16 %437 to i32
%439 = sub nsw i32 %432, %438
%440 = trunc i32 %439 to i16
store i16 %440, i16* %28
%441 = load i16, i16* %25
%442 = sext i16 %441 to i32
%443 = mul nsw i32 16070, %442
%444 = load i16, i16* %26
%445 = sext i16 %444 to i32
%446 = mul nsw i32 13623, %445
%447 = add nsw i32 %443, %446
%448 = load i16, i16* %27
%449 = sext i16 %448 to i32
%450 = mul nsw i32 9103, %449
%451 = add nsw i32 %447, %450
%452 = load i16, i16* %28
%453 = sext i16 %452 to i32
%454 = mul nsw i32 3197, %453
%455 = add nsw i32 %451, %454
%456 = ashr i32 %455, 16
%457 = trunc i32 %456 to i16
%458 = load [8 x i16]*, [8 x i16]** %4
%459 = getelementptr inbounds [8 x i16], [8 x i16]* %458, i64 1
%460 = load i32, i32* %6
%461 = zext i32 %460 to i64
%462 = getelementptr inbounds [8 x i16], [8 x i16]* %459, i64 0, i64 %461
store i16 %457, i16* %462
%463 = load i16, i16* %25
%464 = sext i16 %463 to i32
%465 = mul nsw i32 13623, %464
%466 = load i16, i16* %26
%467 = sext i16 %466 to i32
%468 = mul nsw i32 3197, %467
%469 = sub nsw i32 %465, %468
%470 = load i16, i16* %27
%471 = sext i16 %470 to i32
%472 = mul nsw i32 16070, %471
%473 = sub nsw i32 %469, %472
%474 = load i16, i16* %28
%475 = sext i16 %474 to i32
%476 = mul nsw i32 9103, %475
%477 = sub nsw i32 %473, %476
%478 = ashr i32 %477, 16
%479 = trunc i32 %478 to i16
%480 = load [8 x i16]*, [8 x i16]** %4
%481 = getelementptr inbounds [8 x i16], [8 x i16]* %480, i64 3
%482 = load i32, i32* %6
%483 = zext i32 %482 to i64
%484 = getelementptr inbounds [8 x i16], [8 x i16]* %481, i64 0, i64 %483
store i16 %479, i16* %484
%485 = load i16, i16* %25
%486 = sext i16 %485 to i32
%487 = mul nsw i32 9103, %486
%488 = load i16, i16* %26
%489 = sext i16 %488 to i32
%490 = mul nsw i32 16070, %489
%491 = sub nsw i32 %487, %490
%492 = load i16, i16* %27
%493 = sext i16 %492 to i32
%494 = mul nsw i32 3197, %493
%495 = add nsw i32 %491, %494
%496 = load i16, i16* %28
%497 = sext i16 %496 to i32
%498 = mul nsw i32 13623, %497
%499 = add nsw i32 %495, %498
%500 = ashr i32 %499, 16
%501 = trunc i32 %500 to i16
%502 = load [8 x i16]*, [8 x i16]** %4
%503 = getelementptr inbounds [8 x i16], [8 x i16]* %502, i64 5
%504 = load i32, i32* %6
%505 = zext i32 %504 to i64
%506 = getelementptr inbounds [8 x i16], [8 x i16]* %503, i64 0, i64 %505
store i16 %501, i16* %506
%507 = load i16, i16* %25
%508 = sext i16 %507 to i32
%509 = mul nsw i32 3197, %508
%510 = load i16, i16* %26
%511 = sext i16 %510 to i32
%512 = mul nsw i32 9103, %511
%513 = sub nsw i32 %509, %512
%514 = load i16, i16* %27
%515 = sext i16 %514 to i32
%516 = mul nsw i32 13623, %515
%517 = add nsw i32 %513, %516
%518 = load i16, i16* %28
%519 = sext i16 %518 to i32
%520 = mul nsw i32 16070, %519
%521 = sub nsw i32 %517, %520
%522 = ashr i32 %521, 16
%523 = trunc i32 %522 to i16
%524 = load [8 x i16]*, [8 x i16]** %4
%525 = getelementptr inbounds [8 x i16], [8 x i16]* %524, i64 7
%526 = load i32, i32* %6
%527 = zext i32 %526 to i64
%528 = getelementptr inbounds [8 x i16], [8 x i16]* %525, i64 0, i64 %527
store i16 %523, i16* %528
%529 = load i16, i16* %19
%530 = sext i16 %529 to i32
%531 = load i16, i16* %22
%532 = sext i16 %531 to i32
%533 = add nsw i32 %530, %532
%534 = trunc i32 %533 to i16
store i16 %534, i16* %23
%535 = load i16, i16* %19
%536 = sext i16 %535 to i32
%537 = load i16, i16* %22
%538 = sext i16 %537 to i32
%539 = sub nsw i32 %536, %538
%540 = trunc i32 %539 to i16
store i16 %540, i16* %29
%541 = load i16, i16* %20
%542 = sext i16 %541 to i32
%543 = load i16, i16* %21
%544 = sext i16 %543 to i32
%545 = add nsw i32 %542, %544
%546 = trunc i32 %545 to i16
store i16 %546, i16* %24
%547 = load i16, i16* %20
%548 = sext i16 %547 to i32
%549 = load i16, i16* %21
%550 = sext i16 %549 to i32
%551 = sub nsw i32 %548, %550
%552 = trunc i32 %551 to i16
store i16 %552, i16* %30
%553 = load i16, i16* %23
%554 = sext i16 %553 to i32
%555 = load i16, i16* %24
%556 = sext i16 %555 to i32
%557 = add nsw i32 %554, %556
%558 = mul nsw i32 11586, %557
%559 = ashr i32 %558, 16
%560 = trunc i32 %559 to i16
%561 = load [8 x i16]*, [8 x i16]** %4
%562 = getelementptr inbounds [8 x i16], [8 x i16]* %561, i64 0
%563 = load i32, i32* %6
%564 = zext i32 %563 to i64
%565 = getelementptr inbounds [8 x i16], [8 x i16]* %562, i64 0, i64 %564
store i16 %560, i16* %565
%566 = load i16, i16* %23
%567 = sext i16 %566 to i32
%568 = load i16, i16* %24
%569 = sext i16 %568 to i32
%570 = sub nsw i32 %567, %569
%571 = mul nsw i32 11586, %570
%572 = ashr i32 %571, 16
%573 = trunc i32 %572 to i16
%574 = load [8 x i16]*, [8 x i16]** %4
%575 = getelementptr inbounds [8 x i16], [8 x i16]* %574, i64 4
%576 = load i32, i32* %6
%577 = zext i32 %576 to i64
%578 = getelementptr inbounds [8 x i16], [8 x i16]* %575, i64 0, i64 %577
store i16 %573, i16* %578
%579 = load i16, i16* %29
%580 = sext i16 %579 to i32
%581 = mul nsw i32 15137, %580
%582 = load i16, i16* %30
%583 = sext i16 %582 to i32
%584 = mul nsw i32 6270, %583
%585 = add nsw i32 %581, %584
%586 = ashr i32 %585, 16
%587 = trunc i32 %586 to i16
%588 = load [8 x i16]*, [8 x i16]** %4
%589 = getelementptr inbounds [8 x i16], [8 x i16]* %588, i64 2
%590 = load i32, i32* %6
%591 = zext i32 %590 to i64
%592 = getelementptr inbounds [8 x i16], [8 x i16]* %589, i64 0, i64 %591
store i16 %587, i16* %592
%593 = load i16, i16* %29
%594 = sext i16 %593 to i32
%595 = mul nsw i32 6270, %594
%596 = load i16, i16* %30
%597 = sext i16 %596 to i32
%598 = mul nsw i32 15137, %597
%599 = sub nsw i32 %595, %598
%600 = ashr i32 %599, 16
%601 = trunc i32 %600 to i16
%602 = load [8 x i16]*, [8 x i16]** %4
%603 = getelementptr inbounds [8 x i16], [8 x i16]* %602, i64 6
%604 = load i32, i32* %6
%605 = zext i32 %604 to i64
%606 = getelementptr inbounds [8 x i16], [8 x i16]* %603, i64 0, i64 %605
store i16 %601, i16* %606
br label %607
607: ; preds = %328
%608 = load i32, i32* %6
%609 = add i32 %608, 1
store i32 %609, i32* %6
br label %325
610: ; preds = %325
ret void
}

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