void idct3(short data[8][8], short pixel[8][8]) {
  short rows[8][8];
  unsigned i;
  static const short C1 = 16070, C2 = 15137, C3 = 13623, C4 = 11586, C5 = 9103,
                     C6 = 6270, C7 = 3196;
  for (i = 0; i < 8; i++) {
    const short x0 = data[i][0];
    const short x4 = data[i][4];
    const short t0 = C4 * (x0 + x4) >> 14;
    const short t4 = C4 * (x0 - x4) >> 14;
    const short x2 = data[i][2];
    const short x6 = data[i][6];
    const short t2 = (C2 * x2 + C6 * x6) >> 14;
    const short t6 = (C6 * x2 - C2 * x6) >> 14;
    const short e0 = t0 + t2;
    const short e3 = t0 - t2;
    const short e1 = t4 + t6;
    const short e2 = t4 - t6;
    const short x1 = data[i][1];
    const short x3 = data[i][3];
    const short x5 = data[i][5];
    const short x7 = data[i][7];
    const short o0 = (C1 * x1 + C5 * x5 + C3 * x3 + C7 * x7) >> 14;
    const short o1 = (C3 * x1 - C1 * x5 - C7 * x3 - C5 * x7) >> 14;
    const short o2 = (C5 * x1 + C7 * x5 - C1 * x3 + C3 * x7) >> 14;
    const short o3 = (C7 * x1 + C3 * x5 - C5 * x3 - C1 * x7) >> 14;
    rows[i][0] = e0 + o0;
    rows[i][7] = e0 - o0;
    rows[i][1] = e1 + o1;
    rows[i][6] = e1 - o1;
    rows[i][2] = e2 + o2;
    rows[i][5] = e2 - o2;
    rows[i][3] = e3 + o3;
    rows[i][4] = e3 - o3;
  }
  for (i = 0; i < 8; i++) {
    const short x0 = rows[0][i];
    const short x4 = rows[4][i];
    const short t0 = C4 * (x0 + x4) >> 16;
    const short t4 = C4 * (x0 - x4) >> 16;
    const short x2 = rows[2][i];
    const short x6 = rows[6][i];
    const short t2 = (C2 * x2 + C6 * x6) >> 16;
    const short t6 = (C6 * x2 - C2 * x6) >> 16;
    const short e0 = t0 + t2;
    const short e3 = t0 - t2;
    const short e1 = t4 + t6;
    const short e2 = t4 - t6;
    const short x1 = rows[1][i];
    const short x3 = rows[3][i];
    const short x5 = rows[5][i];
    const short x7 = rows[7][i];
    const short o0 = (C1 * x1 + C5 * x5 + C3 * x3 + C7 * x7) >> 16;
    const short o1 = (C3 * x1 - C1 * x5 - C7 * x3 - C5 * x7) >> 16;
    const short o2 = (C5 * x1 + C7 * x5 - C1 * x3 + C3 * x7) >> 16;
    const short o3 = (C7 * x1 + C3 * x5 - C5 * x3 - C1 * x7) >> 16;
    pixel[0][i] = e0 + o0;
    pixel[7][i] = e0 - o0;
    pixel[1][i] = e1 + o1;
    pixel[6][i] = e1 - o1;
    pixel[2][i] = e2 + o2;
    pixel[5][i] = e2 - o2;
    pixel[3][i] = e3 + o3;
    pixel[4][i] = e3 - o3;
  }
}


x86 assembly (clang, -O0):
<idct3>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x94(%rbp)
cmpl   $0x8,-0x94(%rbp)
jae    1579 <idct3+0x479>
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    (%rax),%ax
mov    %ax,-0x96(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0x8(%rax),%ax
mov    %ax,-0x98(%rbp)
movswl -0x96(%rbp),%eax
movswl -0x98(%rbp),%ecx
add    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0xe,%eax
mov    %ax,-0x9a(%rbp)
movswl -0x96(%rbp),%eax
movswl -0x98(%rbp),%ecx
sub    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0xe,%eax
mov    %ax,-0x9c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0x4(%rax),%ax
mov    %ax,-0x9e(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0xc(%rax),%ax
mov    %ax,-0xa0(%rbp)
movswl -0x9e(%rbp),%eax
imul   $0x3b21,%eax,%eax
movswl -0xa0(%rbp),%ecx
imul   $0x187e,%ecx,%ecx
add    %ecx,%eax
sar    $0xe,%eax
mov    %ax,-0xa2(%rbp)
movswl -0x9e(%rbp),%eax
imul   $0x187e,%eax,%eax
movswl -0xa0(%rbp),%ecx
imul   $0x3b21,%ecx,%ecx
sub    %ecx,%eax
sar    $0xe,%eax
mov    %ax,-0xa4(%rbp)
movswl -0x9a(%rbp),%eax
movswl -0xa2(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xa6(%rbp)
movswl -0x9a(%rbp),%eax
movswl -0xa2(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xa8(%rbp)
movswl -0x9c(%rbp),%eax
movswl -0xa4(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xaa(%rbp)
movswl -0x9c(%rbp),%eax
movswl -0xa4(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xac(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0x2(%rax),%ax
mov    %ax,-0xae(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0x6(%rax),%ax
mov    %ax,-0xb0(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0xa(%rax),%ax
mov    %ax,-0xb2(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x94(%rbp),%ecx
shl    $0x4,%rcx
add    %rcx,%rax
mov    0xe(%rax),%ax
mov    %ax,-0xb4(%rbp)
movswl -0xae(%rbp),%eax
imul   $0x3ec6,%eax,%eax
movswl -0xb2(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
add    %ecx,%eax
movswl -0xb0(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xb4(%rbp),%ecx
imul   $0xc7c,%ecx,%ecx
add    %ecx,%eax
sar    $0xe,%eax
mov    %ax,-0xb6(%rbp)
movswl -0xae(%rbp),%eax
imul   $0x3537,%eax,%eax
movswl -0xb2(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xb0(%rbp),%ecx
imul   $0xc7c,%ecx,%ecx
sub    %ecx,%eax
movswl -0xb4(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
sar    $0xe,%eax
mov    %ax,-0xb8(%rbp)
movswl -0xae(%rbp),%eax
imul   $0x238f,%eax,%eax
movswl -0xb2(%rbp),%ecx
imul   $0xc7c,%ecx,%ecx
add    %ecx,%eax
movswl -0xb0(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xb4(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
sar    $0xe,%eax
mov    %ax,-0xba(%rbp)
movswl -0xae(%rbp),%eax
imul   $0xc7c,%eax,%eax
movswl -0xb2(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xb0(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
movswl -0xb4(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
sar    $0xe,%eax
mov    %ax,-0xbc(%rbp)
movswl -0xa6(%rbp),%eax
movswl -0xb6(%rbp),%ecx
add    %ecx,%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 -0xa6(%rbp),%eax
movswl -0xb6(%rbp),%ecx
sub    %ecx,%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 -0xaa(%rbp),%eax
movswl -0xb8(%rbp),%ecx
add    %ecx,%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 -0xaa(%rbp),%eax
movswl -0xb8(%rbp),%ecx
sub    %ecx,%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)
movswl -0xac(%rbp),%eax
movswl -0xba(%rbp),%ecx
add    %ecx,%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 -0xac(%rbp),%eax
movswl -0xba(%rbp),%ecx
sub    %ecx,%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 -0xa8(%rbp),%eax
movswl -0xbc(%rbp),%ecx
add    %ecx,%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 -0xa8(%rbp),%eax
movswl -0xbc(%rbp),%ecx
sub    %ecx,%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)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    111a <idct3+0x1a>
movl   $0x0,-0x94(%rbp)
cmpl   $0x8,-0x94(%rbp)
jae    193e <idct3+0x83e>
mov    -0x94(%rbp),%eax
mov    -0x90(%rbp,%rax,2),%ax
ff
mov    %ax,-0xbe(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x50(%rbp,%rax,2),%ax
mov    %ax,-0xc0(%rbp)
movswl -0xbe(%rbp),%eax
movswl -0xc0(%rbp),%ecx
add    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0x10,%eax
mov    %ax,-0xc2(%rbp)
movswl -0xbe(%rbp),%eax
movswl -0xc0(%rbp),%ecx
sub    %ecx,%eax
imul   $0x2d42,%eax,%eax
sar    $0x10,%eax
mov    %ax,-0xc4(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x70(%rbp,%rax,2),%ax
mov    %ax,-0xc6(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x30(%rbp,%rax,2),%ax
mov    %ax,-0xc8(%rbp)
movswl -0xc6(%rbp),%eax
imul   $0x3b21,%eax,%eax
movswl -0xc8(%rbp),%ecx
imul   $0x187e,%ecx,%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %ax,-0xca(%rbp)
movswl -0xc6(%rbp),%eax
imul   $0x187e,%eax,%eax
movswl -0xc8(%rbp),%ecx
imul   $0x3b21,%ecx,%ecx
sub    %ecx,%eax
sar    $0x10,%eax
mov    %ax,-0xcc(%rbp)
movswl -0xc2(%rbp),%eax
movswl -0xca(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xce(%rbp)
movswl -0xc2(%rbp),%eax
movswl -0xca(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xd0(%rbp)
movswl -0xc4(%rbp),%eax
movswl -0xcc(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0xd2(%rbp)
movswl -0xc4(%rbp),%eax
movswl -0xcc(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0xd4(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x80(%rbp,%rax,2),%ax
mov    %ax,-0xd6(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x60(%rbp,%rax,2),%ax
mov    %ax,-0xd8(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x40(%rbp,%rax,2),%ax
mov    %ax,-0xda(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x20(%rbp,%rax,2),%ax
mov    %ax,-0xdc(%rbp)
movswl -0xd6(%rbp),%eax
imul   $0x3ec6,%eax,%eax
movswl -0xda(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
add    %ecx,%eax
movswl -0xd8(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xdc(%rbp),%ecx
imul   $0xc7c,%ecx,%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %ax,-0xde(%rbp)
movswl -0xd6(%rbp),%eax
imul   $0x3537,%eax,%eax
movswl -0xda(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xd8(%rbp),%ecx
imul   $0xc7c,%ecx,%ecx
sub    %ecx,%eax
movswl -0xdc(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
sar    $0x10,%eax
mov    %ax,-0xe0(%rbp)
movswl -0xd6(%rbp),%eax
imul   $0x238f,%eax,%eax
movswl -0xda(%rbp),%ecx
imul   $0xc7c,%ecx,%ecx
add    %ecx,%eax
movswl -0xd8(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
movswl -0xdc(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
sar    $0x10,%eax
mov    %ax,-0xe2(%rbp)
movswl -0xd6(%rbp),%eax
imul   $0xc7c,%eax,%eax
movswl -0xda(%rbp),%ecx
imul   $0x3537,%ecx,%ecx
add    %ecx,%eax
movswl -0xd8(%rbp),%ecx
imul   $0x238f,%ecx,%ecx
sub    %ecx,%eax
movswl -0xdc(%rbp),%ecx
imul   $0x3ec6,%ecx,%ecx
sub    %ecx,%eax
sar    $0x10,%eax
mov    %ax,-0xe4(%rbp)
movswl -0xce(%rbp),%eax
movswl -0xde(%rbp),%ecx
add    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
movswl -0xce(%rbp),%eax
movswl -0xde(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x70(%rax,%rcx,2)
movswl -0xd2(%rbp),%eax
movswl -0xe0(%rbp),%ecx
add    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x10(%rax,%rcx,2)
movswl -0xd2(%rbp),%eax
movswl -0xe0(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x60(%rax,%rcx,2)
movswl -0xd4(%rbp),%eax
movswl -0xe2(%rbp),%ecx
add    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x20(%rax,%rcx,2)
movswl -0xd4(%rbp),%eax
movswl -0xe2(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x50(%rax,%rcx,2)
movswl -0xd0(%rbp),%eax
movswl -0xe4(%rbp),%ecx
add    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x30(%rax,%rcx,2)
movswl -0xd0(%rbp),%eax
movswl -0xe4(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %dx,0x40(%rax,%rcx,2)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1583 <idct3+0x483>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<idct3>:
sub    $0x78,%rsp
add    $0x7e,%rdi
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
pxor   %xmm3,%xmm3
pinsrw $0x1,-0x3e(%rdi,%rax,1),%xmm3
pinsrw $0x3,-0x2e(%rdi,%rax,1),%xmm3
pinsrw $0x5,-0x1e(%rdi,%rax,1),%xmm3
pinsrw $0x7,-0xe(%rdi,%rax,1),%xmm3
psrad  $0x10,%xmm3
pxor   %xmm4,%xmm4
pinsrw $0x1,-0x7e(%rdi,%rax,1),%xmm4
pinsrw $0x3,-0x6e(%rdi,%rax,1),%xmm4
pinsrw $0x5,-0x5e(%rdi,%rax,1),%xmm4
pinsrw $0x7,-0x4e(%rdi,%rax,1),%xmm4
psrad  $0x10,%xmm4
pxor   %xmm0,%xmm0
pinsrw $0x1,-0x36(%rdi,%rax,1),%xmm0
pinsrw $0x3,-0x26(%rdi,%rax,1),%xmm0
pinsrw $0x5,-0x16(%rdi,%rax,1),%xmm0
pinsrw $0x7,-0x6(%rdi,%rax,1),%xmm0
psrad  $0x10,%xmm0
pxor   %xmm2,%xmm2
pinsrw $0x1,-0x76(%rdi,%rax,1),%xmm2
pinsrw $0x3,-0x66(%rdi,%rax,1),%xmm2
pinsrw $0x5,-0x56(%rdi,%rax,1),%xmm2
pinsrw $0x7,-0x46(%rdi,%rax,1),%xmm2
psrad  $0x10,%xmm2
movdqa %xmm2,%xmm8
paddd  %xmm4,%xmm8
movdqa %xmm0,%xmm5
paddd  %xmm3,%xmm5
psubd  %xmm2,%xmm4
movzwl -0x7a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm6
pinsrw $0x1,-0x6a(%rdi,%rax,1),%xmm6
pinsrw $0x2,-0x5a(%rdi,%rax,1),%xmm6
pinsrw $0x3,-0x4a(%rdi,%rax,1),%xmm6
movzwl -0x72(%rdi,%rax,1),%ecx
movd   %ecx,%xmm2
pinsrw $0x1,-0x62(%rdi,%rax,1),%xmm2
pinsrw $0x2,-0x52(%rdi,%rax,1),%xmm2
pinsrw $0x3,-0x42(%rdi,%rax,1),%xmm2
psubd  %xmm0,%xmm3
punpcklwd %xmm6,%xmm2
movzwl -0x3a(%rdi,%rax,1),%ecx
movd   %ecx,%xmm6
pinsrw $0x1,-0x2a(%rdi,%rax,1),%xmm6
pinsrw $0x2,-0x1a(%rdi,%rax,1),%xmm6
pinsrw $0x3,-0xa(%rdi,%rax,1),%xmm6
movzwl -0x32(%rdi,%rax,1),%ecx
movd   %ecx,%xmm0
pinsrw $0x1,-0x22(%rdi,%rax,1),%xmm0
pinsrw $0x2,-0x12(%rdi,%rax,1),%xmm0
pinsrw $0x3,-0x2(%rdi,%rax,1),%xmm0
punpcklwd %xmm6,%xmm0
movdqa %xmm2,%xmm6
movdqa 0xdb6(%rip),%xmm1
pmaddwd %xmm1,%xmm6
movdqa %xmm0,%xmm7
pmaddwd %xmm1,%xmm7
movdqa 0xdb2(%rip),%xmm1
pmaddwd %xmm1,%xmm2
pmaddwd %xmm1,%xmm0
pshufd $0xf5,%xmm5,%xmm1
movdqa 0xdac(%rip),%xmm9
pmuludq %xmm9,%xmm5
pshufd $0xe8,%xmm5,%xmm10
pmuludq %xmm9,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm10
pshufd $0xf5,%xmm8,%xmm1
pmuludq %xmm9,%xmm8
pshufd $0xe8,%xmm8,%xmm5
pmuludq %xmm9,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm5
psrad  $0x10,%xmm5
psrad  $0x10,%xmm10
pslld  $0x2,%xmm7
pslld  $0x2,%xmm6
psrad  $0x10,%xmm6
psrad  $0x10,%xmm7
movdqa %xmm7,%xmm1
paddd  %xmm10,%xmm1
movdqa %xmm1,-0x40(%rsp)
movdqa %xmm6,%xmm1
paddd  %xmm5,%xmm1
movdqa %xmm1,-0x80(%rsp)
psubd  %xmm7,%xmm10
movdqa %xmm10,-0x70(%rsp)
psubd  %xmm6,%xmm5
movdqa %xmm5,-0x20(%rsp)
pshufd $0xf5,%xmm3,%xmm1
pmuludq %xmm9,%xmm3
pshufd $0xe8,%xmm3,%xmm10
pmuludq %xmm9,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm10
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm9,%xmm4
pshufd $0xe8,%xmm4,%xmm3
pmuludq %xmm9,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm3
psrad  $0x10,%xmm3
psrad  $0x10,%xmm10
pslld  $0x2,%xmm0
pslld  $0x2,%xmm2
psrad  $0x10,%xmm2
psrad  $0x10,%xmm0
movdqa %xmm0,%xmm1
paddd  %xmm10,%xmm1
movdqa %xmm1,-0x50(%rsp)
movdqa %xmm2,%xmm1
paddd  %xmm3,%xmm1
movdqa %xmm1,-0x60(%rsp)
psubd  %xmm0,%xmm10
movzwl -0x7c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm1
pinsrw $0x1,-0x6c(%rdi,%rax,1),%xmm1
pinsrw $0x2,-0x5c(%rdi,%rax,1),%xmm1
pinsrw $0x3,-0x4c(%rdi,%rax,1),%xmm1
movzwl -0x78(%rdi,%rax,1),%ecx
movd   %ecx,%xmm13
pinsrw $0x1,-0x68(%rdi,%rax,1),%xmm13
01
pinsrw $0x2,-0x58(%rdi,%rax,1),%xmm13
02
pinsrw $0x3,-0x48(%rdi,%rax,1),%xmm13
03
movzwl -0x3c(%rdi,%rax,1),%ecx
movd   %ecx,%xmm0
pinsrw $0x1,-0x2c(%rdi,%rax,1),%xmm0
pinsrw $0x2,-0x1c(%rdi,%rax,1),%xmm0
psubd  %xmm2,%xmm3
movdqa %xmm3,-0x30(%rsp)
pinsrw $0x3,-0xc(%rdi,%rax,1),%xmm0
pxor   %xmm11,%xmm11
pinsrw $0x1,-0x74(%rdi,%rax,1),%xmm11
01
pinsrw $0x3,-0x64(%rdi,%rax,1),%xmm11
03
pinsrw $0x5,-0x54(%rdi,%rax,1),%xmm11
pinsrw $0x7,-0x44(%rdi,%rax,1),%xmm11
07
punpcklwd %xmm1,%xmm13
pxor   %xmm4,%xmm4
pinsrw $0x1,-0x34(%rdi,%rax,1),%xmm4
pinsrw $0x3,-0x24(%rdi,%rax,1),%xmm4
pinsrw $0x5,-0x14(%rdi,%rax,1),%xmm4
psrad  $0x10,%xmm11
pinsrw $0x7,-0x4(%rdi,%rax,1),%xmm4
psrad  $0x10,%xmm4
movdqa %xmm4,%xmm1
movdqa 0xbeb(%rip),%xmm2
pmaddwd %xmm2,%xmm1
movdqa %xmm11,%xmm3
pmaddwd %xmm2,%xmm3
movzwl -0x38(%rdi,%rax,1),%ecx
movd   %ecx,%xmm5
pinsrw $0x1,-0x28(%rdi,%rax,1),%xmm5
pinsrw $0x2,-0x18(%rdi,%rax,1),%xmm5
pinsrw $0x3,-0x8(%rdi,%rax,1),%xmm5
punpcklwd %xmm0,%xmm5
pxor   %xmm2,%xmm2
pinsrw $0x1,-0x70(%rdi,%rax,1),%xmm2
pinsrw $0x3,-0x60(%rdi,%rax,1),%xmm2
pinsrw $0x5,-0x50(%rdi,%rax,1),%xmm2
pinsrw $0x7,-0x40(%rdi,%rax,1),%xmm2
psrad  $0x10,%xmm2
movdqa %xmm2,%xmm6
movdqa 0xb9a(%rip),%xmm14
pmaddwd %xmm14,%xmm6
paddd  %xmm3,%xmm6
pxor   %xmm0,%xmm0
pinsrw $0x1,-0x30(%rdi,%rax,1),%xmm0
pinsrw $0x3,-0x20(%rdi,%rax,1),%xmm0
pinsrw $0x5,-0x10(%rdi,%rax,1),%xmm0
pinsrw $0x7,(%rdi,%rax,1),%xmm0
psrad  $0x10,%xmm0
movdqa %xmm0,%xmm3
pmaddwd %xmm14,%xmm3
paddd  %xmm1,%xmm3
movdqa %xmm5,%xmm12
movdqa 0xb63(%rip),%xmm1
pmaddwd %xmm1,%xmm12
paddd  %xmm3,%xmm12
movdqa %xmm13,%xmm7
pmaddwd %xmm1,%xmm7
paddd  %xmm6,%xmm7
movdqa %xmm11,%xmm3
movdqa 0xb4f(%rip),%xmm6
pmaddwd %xmm6,%xmm3
movdqa %xmm2,%xmm9
movdqa 0xb4e(%rip),%xmm1
pmaddwd %xmm1,%xmm9
paddd  %xmm3,%xmm9
movdqa %xmm4,%xmm3
pmaddwd %xmm6,%xmm3
movdqa %xmm0,%xmm6
pmaddwd %xmm1,%xmm6
paddd  %xmm3,%xmm6
movdqa %xmm5,%xmm8
movdqa 0xb33(%rip),%xmm1
pmaddwd %xmm1,%xmm8
paddd  %xmm6,%xmm8
movdqa %xmm13,%xmm6
pmaddwd %xmm1,%xmm6
paddd  %xmm9,%xmm6
movdqa %xmm11,%xmm9
pmaddwd %xmm14,%xmm9
movdqa %xmm2,%xmm1
movdqa 0xb15(%rip),%xmm3
pmaddwd %xmm3,%xmm1
paddd  %xmm9,%xmm1
movdqa %xmm4,%xmm15
pmaddwd %xmm14,%xmm15
movdqa %xmm0,%xmm9
pmaddwd %xmm3,%xmm9
paddd  %xmm15,%xmm9
movdqa %xmm5,%xmm15
movdqa 0xaf5(%rip),%xmm14
pmaddwd %xmm14,%xmm15
paddd  %xmm9,%xmm15
movdqa %xmm13,%xmm9
pmaddwd %xmm14,%xmm9
paddd  %xmm1,%xmm9
pmaddwd %xmm3,%xmm11
movdqa 0xa8f(%rip),%xmm1
pmaddwd %xmm1,%xmm2
paddd  %xmm11,%xmm2
pmaddwd %xmm3,%xmm4
pmaddwd %xmm1,%xmm0
paddd  %xmm4,%xmm0
movdqa 0xac2(%rip),%xmm1
pmaddwd %xmm1,%xmm5
paddd  %xmm0,%xmm5
pmaddwd %xmm1,%xmm13
paddd  %xmm2,%xmm13
pslld  $0x2,%xmm7
pslld  $0x2,%xmm12
psrad  $0x10,%xmm12
psrad  $0x10,%xmm7
movdqa %xmm7,%xmm3
movdqa -0x80(%rsp),%xmm2
paddd  %xmm2,%xmm3
movdqa %xmm12,%xmm0
movdqa -0x40(%rsp),%xmm1
paddd  %xmm1,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm3
psrad  $0x10,%xmm3
packssdw %xmm0,%xmm3
movdqa %xmm3,%xmm11
movdqa %xmm2,%xmm0
psubd  %xmm7,%xmm0
psubd  %xmm12,%xmm1
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqa %xmm0,-0x80(%rsp)
pslld  $0x2,%xmm6
pslld  $0x2,%xmm8
psrad  $0x10,%xmm8
psrad  $0x10,%xmm6
movdqa %xmm6,%xmm4
movdqa -0x60(%rsp),%xmm2
paddd  %xmm2,%xmm4
movdqa %xmm8,%xmm0
movdqa -0x50(%rsp),%xmm1
paddd  %xmm1,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm4
psrad  $0x10,%xmm4
packssdw %xmm0,%xmm4
movdqa %xmm2,%xmm0
psubd  %xmm6,%xmm0
psubd  %xmm8,%xmm1
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqa %xmm0,%xmm7
pslld  $0x2,%xmm9
pslld  $0x2,%xmm15
psrad  $0x10,%xmm15
psrad  $0x10,%xmm9
movdqa %xmm9,%xmm14
movdqa -0x30(%rsp),%xmm2
paddd  %xmm2,%xmm14
movdqa %xmm15,%xmm0
paddd  %xmm10,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm14
psrad  $0x10,%xmm14
packssdw %xmm0,%xmm14
psubd  %xmm9,%xmm2
psubd  %xmm15,%xmm10
pslld  $0x10,%xmm10
pslld  $0x2,%xmm5
psrad  $0x10,%xmm5
movdqa %xmm5,%xmm6
movdqa -0x70(%rsp),%xmm15
paddd  %xmm15,%xmm6
psubd  %xmm5,%xmm15
pslld  $0x10,%xmm15
movdqa %xmm15,%xmm0
punpckhwd %xmm10,%xmm15
movdqa %xmm15,-0x70(%rsp)
psrad  $0x10,%xmm10
movdqa %xmm2,%xmm15
pslld  $0x10,%xmm15
psrad  $0x10,%xmm15
packssdw %xmm10,%xmm15
pslld  $0x2,%xmm13
psrad  $0x10,%xmm13
movdqa %xmm13,%xmm1
movdqa -0x20(%rsp),%xmm2
paddd  %xmm2,%xmm1
pslld  $0x10,%xmm6
psrad  $0x10,%xmm6
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm6,%xmm1
psubd  %xmm13,%xmm2
psrad  $0x10,%xmm0
pslld  $0x10,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm0,%xmm2
movdqa %xmm14,%xmm0
punpcklwd %xmm1,%xmm0
movdqa %xmm3,%xmm12
movdqa %xmm4,%xmm11
punpcklwd %xmm4,%xmm3
movdqa %xmm3,%xmm5
punpckldq %xmm0,%xmm5
movdqa %xmm7,%xmm10
movdqa %xmm7,%xmm6
movdqa -0x80(%rsp),%xmm8
punpcklwd %xmm8,%xmm6
pshufd $0x0,%xmm6,%xmm13
movdqa %xmm2,%xmm4
movdqa %xmm2,%xmm7
punpcklwd %xmm15,%xmm4
pshufd $0x0,%xmm4,%xmm9
punpckhdq %xmm13,%xmm9
movsd  %xmm5,%xmm9
pshufd $0x55,%xmm0,%xmm2
pshufd $0x55,%xmm3,%xmm13
punpckldq %xmm2,%xmm13
movdqa %xmm4,%xmm2
punpckldq %xmm6,%xmm2
shufps $0xe4,%xmm2,%xmm13
pshufd $0xaa,%xmm6,%xmm5
pshufd $0xaa,%xmm4,%xmm2
punpckhdq %xmm5,%xmm2
pshufd $0xff,%xmm3,%xmm5
punpckhdq %xmm0,%xmm3
movsd  %xmm3,%xmm2
punpckhdq %xmm6,%xmm4
pshufd $0xff,%xmm0,%xmm0
punpckldq %xmm0,%xmm5
shufps $0xe4,%xmm4,%xmm5
punpckhwd %xmm1,%xmm14
punpckhwd %xmm11,%xmm12
movdqa %xmm12,%xmm0
punpckldq %xmm14,%xmm0
punpckhwd %xmm8,%xmm10
pshufd $0x0,%xmm10,%xmm1
punpckhwd %xmm15,%xmm7
pshufd $0x0,%xmm7,%xmm8
punpckhdq %xmm1,%xmm8
movsd  %xmm0,%xmm8
pshufd $0x55,%xmm14,%xmm0
pshufd $0x55,%xmm12,%xmm1
punpckldq %xmm0,%xmm1
pshufd $0xaa,%xmm7,%xmm0
punpckldq %xmm10,%xmm7
shufps $0xe4,%xmm7,%xmm1
pshufd $0xaa,%xmm10,%xmm4
punpckhdq %xmm4,%xmm0
pshufd $0xff,%xmm12,%xmm4
punpckhdq %xmm14,%xmm12
movsd  %xmm12,%xmm0
pshufd $0xff,%xmm14,%xmm6
punpckldq %xmm6,%xmm4
movdqa -0x70(%rsp),%xmm6
punpckhdq %xmm10,%xmm6
movsd  %xmm4,%xmm6
movapd %xmm6,0x60(%rsp,%rax,1)
movapd %xmm0,0x50(%rsp,%rax,1)
movaps %xmm1,0x40(%rsp,%rax,1)
movapd %xmm8,0x30(%rsp,%rax,1)
movaps %xmm5,0x20(%rsp,%rax,1)
movapd %xmm2,0x10(%rsp,%rax,1)
movaps %xmm13,(%rsp,%rax,1)
movapd %xmm9,-0x10(%rsp,%rax,1)
sub    $0xffffffffffffff80,%rax
cmp    $0x80,%rax
jne    1110 <idct3+0x10>
movdqa 0x30(%rsp),%xmm0
movdqa -0x10(%rsp),%xmm1
punpckhwd %xmm1,%xmm2
psrad  $0x10,%xmm2
punpckhwd %xmm0,%xmm3
psrad  $0x10,%xmm3
movdqa %xmm3,%xmm4
paddd  %xmm2,%xmm4
movdqa 0x745(%rip),%xmm5
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm5,%xmm4
pshufd $0xe8,%xmm4,%xmm8
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm4
punpckldq %xmm4,%xmm8
punpcklwd %xmm1,%xmm1
psrad  $0x10,%xmm1
punpcklwd %xmm0,%xmm0
psrad  $0x10,%xmm0
movdqa %xmm0,%xmm4
paddd  %xmm1,%xmm4
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm5,%xmm4
pshufd $0xe8,%xmm4,%xmm7
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm4
punpckldq %xmm4,%xmm7
psubd  %xmm0,%xmm1
psubd  %xmm3,%xmm2
pshufd $0xf5,%xmm2,%xmm0
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm6
pmuludq %xmm5,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm6
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm5,%xmm1
pmuludq %xmm5,%xmm0
pshufd $0xe8,%xmm1,%xmm5
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm5
movdqa 0x10(%rsp),%xmm2
movdqa 0x50(%rsp),%xmm0
movdqa %xmm0,%xmm1
punpckhwd %xmm2,%xmm1
punpcklwd %xmm2,%xmm0
movdqa %xmm1,%xmm2
movdqa 0x5d1(%rip),%xmm3
pmaddwd %xmm3,%xmm2
pmaddwd %xmm0,%xmm3
movdqa 0x5d1(%rip),%xmm4
pmaddwd %xmm4,%xmm1
pmaddwd %xmm4,%xmm0
psrad  $0x10,%xmm8
psrad  $0x10,%xmm2
movdqa %xmm2,%xmm4
paddd  %xmm8,%xmm4
movdqa %xmm4,-0x60(%rsp)
psubd  %xmm2,%xmm8
movdqa %xmm8,-0x70(%rsp)
psrad  $0x10,%xmm7
psrad  $0x10,%xmm3
movdqa %xmm3,%xmm11
paddd  %xmm7,%xmm11
psubd  %xmm3,%xmm7
movdqa %xmm7,-0x80(%rsp)
psrad  $0x10,%xmm6
psrad  $0x10,%xmm1
movdqa %xmm1,%xmm2
paddd  %xmm6,%xmm2
movdqa %xmm2,-0x40(%rsp)
psubd  %xmm1,%xmm6
movdqa %xmm6,-0x20(%rsp)
psrad  $0x10,%xmm5
psrad  $0x10,%xmm0
movdqa %xmm0,%xmm1
paddd  %xmm5,%xmm1
movdqa %xmm1,-0x50(%rsp)
psubd  %xmm0,%xmm5
movdqa %xmm5,-0x30(%rsp)
movdqa 0x40(%rsp),%xmm0
punpcklwd %xmm0,%xmm9
psrad  $0x10,%xmm9
movdqa %xmm9,%xmm1
movdqa 0x543(%rip),%xmm5
pmaddwd %xmm5,%xmm1
movdqa (%rsp),%xmm2
movdqa 0x20(%rsp),%xmm14
movdqa %xmm14,%xmm12
punpcklwd %xmm2,%xmm12
movdqa %xmm12,%xmm15
movdqa 0x53c(%rip),%xmm7
pmaddwd %xmm7,%xmm15
paddd  %xmm1,%xmm15
movdqa 0x60(%rsp),%xmm3
punpcklwd %xmm3,%xmm1
psrad  $0x10,%xmm1
movdqa %xmm1,%xmm6
movdqa 0x506(%rip),%xmm8
pmaddwd %xmm8,%xmm6
paddd  %xmm6,%xmm15
punpckhwd %xmm2,%xmm14
punpckhwd %xmm0,%xmm4
psrad  $0x10,%xmm4
pmaddwd %xmm4,%xmm5
pmaddwd %xmm14,%xmm7
paddd  %xmm5,%xmm7
punpckhwd %xmm3,%xmm0
psrad  $0x10,%xmm0
movdqa %xmm0,%xmm3
pmaddwd %xmm8,%xmm3
paddd  %xmm3,%xmm7
movdqa %xmm9,%xmm3
movdqa 0x4de(%rip),%xmm2
pmaddwd %xmm2,%xmm3
movdqa %xmm2,%xmm10
movdqa %xmm12,%xmm6
movdqa 0x4e8(%rip),%xmm5
pmaddwd %xmm5,%xmm6
paddd  %xmm3,%xmm6
movdqa %xmm0,%xmm3
movdqa 0x4c4(%rip),%xmm2
pmaddwd %xmm2,%xmm3
pmaddwd %xmm1,%xmm2
paddd  %xmm2,%xmm6
movdqa %xmm4,%xmm2
pmaddwd %xmm10,%xmm2
pmaddwd %xmm14,%xmm5
paddd  %xmm2,%xmm5
paddd  %xmm3,%xmm5
movdqa %xmm9,%xmm2
pmaddwd %xmm8,%xmm2
movdqa %xmm12,%xmm10
movdqa 0x4bb(%rip),%xmm3
pmaddwd %xmm3,%xmm10
paddd  %xmm2,%xmm10
movdqa %xmm1,%xmm2
movdqa 0x494(%rip),%xmm13
pmaddwd %xmm13,%xmm2
paddd  %xmm2,%xmm10
pmaddwd %xmm4,%xmm8
pmaddwd %xmm14,%xmm3
paddd  %xmm8,%xmm3
movdqa %xmm0,%xmm2
pmaddwd %xmm13,%xmm2
paddd  %xmm2,%xmm3
pmaddwd %xmm13,%xmm9
pmaddwd %xmm13,%xmm4
movdqa 0x42c(%rip),%xmm2
pmaddwd %xmm2,%xmm0
pmaddwd %xmm2,%xmm1
movdqa 0x46c(%rip),%xmm2
pmaddwd %xmm2,%xmm12
paddd  %xmm9,%xmm12
paddd  %xmm1,%xmm12
pmaddwd %xmm2,%xmm14
paddd  %xmm4,%xmm14
paddd  %xmm0,%xmm14
psrad  $0x10,%xmm7
psrad  $0x10,%xmm15
movdqa %xmm15,%xmm0
paddd  %xmm11,%xmm0
movdqa %xmm7,%xmm1
movdqa -0x60(%rsp),%xmm2
paddd  %xmm2,%xmm1
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqu %xmm0,(%rsi)
psubd  %xmm15,%xmm11
movdqa %xmm2,%xmm0
psubd  %xmm7,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm11
psrad  $0x10,%xmm11
packssdw %xmm0,%xmm11
movdqu %xmm11,0x70(%rsi)
psrad  $0x10,%xmm5
psrad  $0x10,%xmm6
movdqa %xmm6,%xmm0
movdqa -0x50(%rsp),%xmm4
paddd  %xmm4,%xmm0
movdqa %xmm5,%xmm1
movdqa -0x40(%rsp),%xmm2
paddd  %xmm2,%xmm1
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqu %xmm0,0x10(%rsi)
movdqa %xmm4,%xmm1
psubd  %xmm6,%xmm1
movdqa %xmm2,%xmm0
psubd  %xmm5,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm0,%xmm1
movdqu %xmm1,0x60(%rsi)
psrad  $0x10,%xmm3
psrad  $0x10,%xmm10
movdqa %xmm10,%xmm0
movdqa -0x30(%rsp),%xmm4
paddd  %xmm4,%xmm0
movdqa %xmm3,%xmm1
movdqa -0x20(%rsp),%xmm2
paddd  %xmm2,%xmm1
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqu %xmm0,0x20(%rsi)
movdqa %xmm4,%xmm1
psubd  %xmm10,%xmm1
movdqa %xmm2,%xmm0
psubd  %xmm3,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm0,%xmm1
movdqu %xmm1,0x50(%rsi)
psrad  $0x10,%xmm14
psrad  $0x10,%xmm12
movdqa %xmm12,%xmm0
movdqa -0x80(%rsp),%xmm3
paddd  %xmm3,%xmm0
movdqa %xmm14,%xmm1
movdqa -0x70(%rsp),%xmm2
paddd  %xmm2,%xmm1
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
packssdw %xmm1,%xmm0
movdqu %xmm0,0x30(%rsi)
movdqa %xmm3,%xmm1
psubd  %xmm12,%xmm1
movdqa %xmm2,%xmm0
psubd  %xmm14,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm0,%xmm1
movdqu %xmm1,0x40(%rsi)
add    $0x78,%rsp
ret

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

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