void jpeg_fdct_float(double *data) {
  double tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
  double tmp10, tmp11, tmp12, tmp13;
  double z1, z2, z3, z4, z5, z11, z13;
  double *dataptr;
  int ctr;
  dataptr = data;
  for (ctr = 8 - 1; ctr >= 0; ctr--) {
    tmp0 = dataptr[0] + dataptr[7];
    tmp7 = dataptr[0] - dataptr[7];
    tmp1 = dataptr[1] + dataptr[6];
    tmp6 = dataptr[1] - dataptr[6];
    tmp2 = dataptr[2] + dataptr[5];
    tmp5 = dataptr[2] - dataptr[5];
    tmp3 = dataptr[3] + dataptr[4];
    tmp4 = dataptr[3] - dataptr[4];
    tmp10 = tmp0 + tmp3;
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    dataptr[0] = tmp10 + tmp11;
    dataptr[4] = tmp10 - tmp11;
    z1 = (tmp12 + tmp13) * ((double)0.707106781);
    dataptr[2] = tmp13 + z1;
    dataptr[6] = tmp13 - z1;
    tmp10 = tmp4 + tmp5;
    tmp11 = tmp5 + tmp6;
    tmp12 = tmp6 + tmp7;
    z5 = (tmp10 - tmp12) * ((double)0.382683433);
    z2 = ((double)0.541196100) * tmp10 + z5;
    z4 = ((double)1.306562965) * tmp12 + z5;
    z3 = tmp11 * ((double)0.707106781);
    z11 = tmp7 + z3;
    z13 = tmp7 - z3;
    dataptr[5] = z13 + z2;
    dataptr[3] = z13 - z2;
    dataptr[1] = z11 + z4;
    dataptr[7] = z11 - z4;
    dataptr += 8;
  }
  dataptr = data;
  for (ctr = 8 - 1; ctr >= 0; ctr--) {
    tmp0 = dataptr[8 * 0] + dataptr[8 * 7];
    tmp7 = dataptr[8 * 0] - dataptr[8 * 7];
    tmp1 = dataptr[8 * 1] + dataptr[8 * 6];
    tmp6 = dataptr[8 * 1] - dataptr[8 * 6];
    tmp2 = dataptr[8 * 2] + dataptr[8 * 5];
    tmp5 = dataptr[8 * 2] - dataptr[8 * 5];
    tmp3 = dataptr[8 * 3] + dataptr[8 * 4];
    tmp4 = dataptr[8 * 3] - dataptr[8 * 4];
    tmp10 = tmp0 + tmp3;
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    dataptr[8 * 0] = tmp10 + tmp11;
    dataptr[8 * 4] = tmp10 - tmp11;
    z1 = (tmp12 + tmp13) * ((double)0.707106781);
    dataptr[8 * 2] = tmp13 + z1;
    dataptr[8 * 6] = tmp13 - z1;
    tmp10 = tmp4 + tmp5;
    tmp11 = tmp5 + tmp6;
    tmp12 = tmp6 + tmp7;
    z5 = (tmp10 - tmp12) * ((double)0.382683433);
    z2 = ((double)0.541196100) * tmp10 + z5;
    z4 = ((double)1.306562965) * tmp12 + z5;
    z3 = tmp11 * ((double)0.707106781);
    z11 = tmp7 + z3;
    z13 = tmp7 - z3;
    dataptr[8 * 5] = z13 + z2;
    dataptr[8 * 3] = z13 - z2;
    dataptr[8 * 1] = z11 + z4;
    dataptr[8 * 7] = z11 - z4;
    dataptr++;
  }
}


x86 assembly (clang, -O0):
<jpeg_fdct_float>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
movl   $0x7,-0xac(%rbp)
cmpl   $0x0,-0xac(%rbp)
jl     141a <jpeg_fdct_float+0x31a>
mov    -0xa8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0xa8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x60(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  0xd73(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x68(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  0xd17(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0xcee(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0xcc4(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xca4(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x78(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0x88(%rbp),%xmm0
ff
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0xa8(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0xa8(%rbp)
mov    -0xac(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xac(%rbp)
jmp    1121 <jpeg_fdct_float+0x21>
mov    -0x8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
movl   $0x7,-0xac(%rbp)
cmpl   $0x0,-0xac(%rbp)
jl     175e <jpeg_fdct_float+0x65e>
mov    -0xa8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x1c0(%rax),%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0xa8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x1c0(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x180(%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x180(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x140(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x140(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0xc0(%rax),%xmm0
mov    -0xa8(%rbp),%rax
addsd  0x100(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0xa8(%rbp),%rax
movsd  0xc0(%rax),%xmm0
mov    -0xa8(%rbp),%rax
subsd  0x100(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x50(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x100(%rax)
movsd  -0x60(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  0xa3e(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x80(%rax)
movsd  -0x68(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x180(%rax)
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  0x9dc(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x9b3(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x989(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x969(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x78(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x140(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0xc0(%rax)
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0x88(%rbp),%xmm0
ff
mov    -0xa8(%rbp),%rax
movsd  %xmm0,0x1c0(%rax)
mov    -0xa8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0xa8(%rbp)
mov    -0xac(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xac(%rbp)
jmp    142f <jpeg_fdct_float+0x32f>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<jpeg_fdct_float>:
xor    %eax,%eax
movapd 0xef5(%rip),%xmm11
movapd 0xefc(%rip),%xmm8
movapd 0xf03(%rip),%xmm9
movapd 0xf0a(%rip),%xmm10
cs nopw 0x0(%rax,%rax,1)
movupd 0x70(%rdi,%rax,1),%xmm12
movupd 0x60(%rdi,%rax,1),%xmm0
movupd 0x50(%rdi,%rax,1),%xmm2
movupd 0x40(%rdi,%rax,1),%xmm3
movupd (%rdi,%rax,1),%xmm4
movupd 0x10(%rdi,%rax,1),%xmm1
movupd 0x20(%rdi,%rax,1),%xmm14
movupd 0x30(%rdi,%rax,1),%xmm5
movapd %xmm4,%xmm7
unpcklpd %xmm3,%xmm7
unpckhpd %xmm3,%xmm4
movapd %xmm1,%xmm3
unpcklpd %xmm2,%xmm3
unpckhpd %xmm2,%xmm1
movapd %xmm14,%xmm13
unpcklpd %xmm0,%xmm13
unpckhpd %xmm0,%xmm14
movapd %xmm5,%xmm2
unpcklpd %xmm12,%xmm2
unpckhpd %xmm12,%xmm5
movapd %xmm7,%xmm0
addpd  %xmm5,%xmm0
subpd  %xmm5,%xmm7
movapd %xmm4,%xmm5
addpd  %xmm2,%xmm5
subpd  %xmm2,%xmm4
movapd %xmm3,%xmm2
addpd  %xmm14,%xmm2
subpd  %xmm14,%xmm3
movapd %xmm1,%xmm6
addpd  %xmm13,%xmm6
subpd  %xmm13,%xmm1
movapd %xmm0,%xmm13
addpd  %xmm6,%xmm13
subpd  %xmm6,%xmm0
movapd %xmm5,%xmm6
addpd  %xmm2,%xmm6
subpd  %xmm2,%xmm5
movapd %xmm6,%xmm12
addpd  %xmm13,%xmm12
subpd  %xmm6,%xmm13
addpd  %xmm0,%xmm5
mulpd  %xmm11,%xmm5
movapd %xmm0,%xmm14
addpd  %xmm5,%xmm14
subpd  %xmm5,%xmm0
addpd  %xmm3,%xmm1
addpd  %xmm4,%xmm3
addpd  %xmm7,%xmm4
movapd %xmm1,%xmm2
subpd  %xmm4,%xmm2
mulpd  %xmm8,%xmm2
mulpd  %xmm9,%xmm1
addpd  %xmm2,%xmm1
mulpd  %xmm10,%xmm4
addpd  %xmm2,%xmm4
mulpd  %xmm11,%xmm3
movapd %xmm7,%xmm2
addpd  %xmm3,%xmm2
subpd  %xmm3,%xmm7
movapd %xmm7,%xmm3
addpd  %xmm1,%xmm3
subpd  %xmm1,%xmm7
movapd %xmm2,%xmm1
addpd  %xmm4,%xmm1
subpd  %xmm4,%xmm2
movapd %xmm14,%xmm15
unpcklpd %xmm7,%xmm15
movapd %xmm12,%xmm5
unpcklpd %xmm1,%xmm5
movapd %xmm0,%xmm6
unpcklpd %xmm2,%xmm6
movapd %xmm13,%xmm4
unpcklpd %xmm3,%xmm4
movhlps %xmm14,%xmm7
movhlps %xmm12,%xmm1
movhlps %xmm0,%xmm2
movhlps %xmm13,%xmm3
movups %xmm3,0x60(%rdi,%rax,1)
movups %xmm2,0x70(%rdi,%rax,1)
movups %xmm1,0x40(%rdi,%rax,1)
movups %xmm7,0x50(%rdi,%rax,1)
movupd %xmm4,0x20(%rdi,%rax,1)
movupd %xmm6,0x30(%rdi,%rax,1)
movupd %xmm5,(%rdi,%rax,1)
movupd %xmm15,0x10(%rdi,%rax,1)
sub    $0xffffffffffffff80,%rax
cmp    $0x200,%rax
jne    1130 <jpeg_fdct_float+0x30>
mov    $0xfffffffffffffff8,%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd 0x200(%rdi,%rax,8),%xmm2
movupd 0x40(%rdi,%rax,8),%xmm1
movupd 0x80(%rdi,%rax,8),%xmm4
movupd 0xc0(%rdi,%rax,8),%xmm13
movupd 0x100(%rdi,%rax,8),%xmm3
movapd %xmm1,%xmm5
addpd  %xmm2,%xmm5
subpd  %xmm2,%xmm1
movupd 0x1c0(%rdi,%rax,8),%xmm6
movapd %xmm4,%xmm2
addpd  %xmm6,%xmm2
subpd  %xmm6,%xmm4
movupd 0x180(%rdi,%rax,8),%xmm6
movapd %xmm13,%xmm7
addpd  %xmm6,%xmm7
subpd  %xmm6,%xmm13
movupd 0x140(%rdi,%rax,8),%xmm12
movapd %xmm3,%xmm6
addpd  %xmm12,%xmm6
subpd  %xmm12,%xmm3
movapd %xmm5,%xmm0
addpd  %xmm6,%xmm0
subpd  %xmm6,%xmm5
movapd %xmm2,%xmm6
addpd  %xmm7,%xmm6
subpd  %xmm7,%xmm2
movapd %xmm6,%xmm7
addpd  %xmm0,%xmm7
movupd %xmm7,0x40(%rdi,%rax,8)
subpd  %xmm6,%xmm0
movupd %xmm0,0x140(%rdi,%rax,8)
addpd  %xmm5,%xmm2
mulpd  %xmm11,%xmm2
movapd %xmm5,%xmm0
addpd  %xmm2,%xmm0
movupd %xmm0,0xc0(%rdi,%rax,8)
subpd  %xmm2,%xmm5
movupd %xmm5,0x1c0(%rdi,%rax,8)
addpd  %xmm13,%xmm3
addpd  %xmm4,%xmm13
addpd  %xmm1,%xmm4
movapd %xmm3,%xmm0
subpd  %xmm4,%xmm0
mulpd  %xmm8,%xmm0
mulpd  %xmm9,%xmm3
addpd  %xmm0,%xmm3
mulpd  %xmm10,%xmm4
addpd  %xmm0,%xmm4
mulpd  %xmm11,%xmm13
movapd %xmm1,%xmm0
addpd  %xmm13,%xmm0
subpd  %xmm13,%xmm1
movapd %xmm1,%xmm2
addpd  %xmm3,%xmm2
movupd %xmm2,0x180(%rdi,%rax,8)
subpd  %xmm3,%xmm1
movupd %xmm1,0x100(%rdi,%rax,8)
movapd %xmm0,%xmm1
addpd  %xmm4,%xmm1
movupd %xmm1,0x80(%rdi,%rax,8)
subpd  %xmm4,%xmm0
movupd %xmm0,0x200(%rdi,%rax,8)
add    $0x2,%rax
jne    12e0 <jpeg_fdct_float+0x1e0>
ret

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

LLVM IR (-O2):
define void @jpeg_fdct_float(double* nocapture %0) {
br label %2
2: ; preds = %2, %1
%3 = phi i64 [ 0, %1 ], [ %58, %2 ]
%4 = shl i64 %3, 3
%5 = getelementptr double, double* %0, i64 %4
%6 = bitcast double* %5 to <16 x double>*
%7 = load <16 x double>, <16 x double>* %6
%8 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 0, i32 8>
%9 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 1, i32 9>
%10 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 2, i32 10>
%11 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 3, i32 11>
%12 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 4, i32 12>
%13 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 5, i32 13>
%14 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 6, i32 14>
%15 = shufflevector <16 x double> %7, <16 x double> poison, <2 x i32> <i32 7, i32 15>
%16 = getelementptr inbounds double, double* %5, i64 7
%17 = fadd <2 x double> %8, %15
%18 = fsub <2 x double> %8, %15
%19 = fadd <2 x double> %9, %14
%20 = fsub <2 x double> %9, %14
%21 = fadd <2 x double> %10, %13
%22 = fsub <2 x double> %10, %13
%23 = fadd <2 x double> %11, %12
%24 = fsub <2 x double> %11, %12
%25 = fadd <2 x double> %17, %23
%26 = fsub <2 x double> %17, %23
%27 = fadd <2 x double> %19, %21
%28 = fsub <2 x double> %19, %21
%29 = fadd <2 x double> %27, %25
%30 = fsub <2 x double> %25, %27
%31 = fadd <2 x double> %28, %26
%32 = fmul <2 x double> %31, <double 0x3FE6A09E6665983E, double 0x3FE6A09E6665983E>
%33 = fadd <2 x double> %26, %32
%34 = fsub <2 x double> %26, %32
%35 = fadd <2 x double> %22, %24
%36 = fadd <2 x double> %20, %22
%37 = fadd <2 x double> %18, %20
%38 = fsub <2 x double> %35, %37
%39 = fmul <2 x double> %38, <double 0x3FD87DE2A75D2F39, double 0x3FD87DE2A75D2F39>
%40 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %35, <2 x double> <double 0x3FE1517A7BC720BB, double 0x3FE1517A7BC720BB>, <2 x double> %39)
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %37, <2 x double> <double 0x3FF4E7AE914D6FCA, double 0x3FF4E7AE914D6FCA>, <2 x double> %39)
%42 = fmul <2 x double> %36, <double 0x3FE6A09E6665983E, double 0x3FE6A09E6665983E>
%43 = fadd <2 x double> %18, %42
%44 = fsub <2 x double> %18, %42
%45 = fadd <2 x double> %44, %40
%46 = fsub <2 x double> %44, %40
%47 = fadd <2 x double> %43, %41
%48 = fsub <2 x double> %43, %41
%49 = getelementptr inbounds double, double* %16, i64 -7
%50 = bitcast double* %49 to <16 x double>*
%51 = shufflevector <2 x double> %29, <2 x double> %47, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%52 = shufflevector <2 x double> %33, <2 x double> %46, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%53 = shufflevector <2 x double> %30, <2 x double> %45, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%54 = shufflevector <2 x double> %34, <2 x double> %48, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%55 = shufflevector <4 x double> %51, <4 x double> %52, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
%56 = shufflevector <4 x double> %53, <4 x double> %54, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
%57 = shufflevector <8 x double> %55, <8 x double> %56, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
store <16 x double> %57, <16 x double>* %50
%58 = add nuw i64 %3, 2
%59 = icmp eq i64 %58, 8
br i1 %59, label %60, label %2
60: ; preds = %2, %60
%61 = phi i64 [ %126, %60 ], [ 0, %2 ]
%62 = getelementptr double, double* %0, i64 %61
%63 = bitcast double* %62 to <2 x double>*
%64 = load <2 x double>, <2 x double>* %63
%65 = getelementptr inbounds double, double* %62, i64 56
%66 = bitcast double* %65 to <2 x double>*
%67 = load <2 x double>, <2 x double>* %66
%68 = fadd <2 x double> %64, %67
%69 = fsub <2 x double> %64, %67
%70 = getelementptr inbounds double, double* %62, i64 8
%71 = bitcast double* %70 to <2 x double>*
%72 = load <2 x double>, <2 x double>* %71
%73 = getelementptr inbounds double, double* %62, i64 48
%74 = bitcast double* %73 to <2 x double>*
%75 = load <2 x double>, <2 x double>* %74
%76 = fadd <2 x double> %72, %75
%77 = fsub <2 x double> %72, %75
%78 = getelementptr inbounds double, double* %62, i64 16
%79 = bitcast double* %78 to <2 x double>*
%80 = load <2 x double>, <2 x double>* %79
%81 = getelementptr inbounds double, double* %62, i64 40
%82 = bitcast double* %81 to <2 x double>*
%83 = load <2 x double>, <2 x double>* %82
%84 = fadd <2 x double> %80, %83
%85 = fsub <2 x double> %80, %83
%86 = getelementptr inbounds double, double* %62, i64 24
%87 = bitcast double* %86 to <2 x double>*
%88 = load <2 x double>, <2 x double>* %87
%89 = getelementptr inbounds double, double* %62, i64 32
%90 = bitcast double* %89 to <2 x double>*
%91 = load <2 x double>, <2 x double>* %90
%92 = fadd <2 x double> %88, %91
%93 = fsub <2 x double> %88, %91
%94 = fadd <2 x double> %68, %92
%95 = fsub <2 x double> %68, %92
%96 = fadd <2 x double> %76, %84
%97 = fsub <2 x double> %76, %84
%98 = fadd <2 x double> %96, %94
%99 = bitcast double* %62 to <2 x double>*
store <2 x double> %98, <2 x double>* %99
%100 = fsub <2 x double> %94, %96
%101 = bitcast double* %89 to <2 x double>*
store <2 x double> %100, <2 x double>* %101
%102 = fadd <2 x double> %97, %95
%103 = fmul <2 x double> %102, <double 0x3FE6A09E6665983E, double 0x3FE6A09E6665983E>
%104 = fadd <2 x double> %95, %103
%105 = bitcast double* %78 to <2 x double>*
store <2 x double> %104, <2 x double>* %105
%106 = fsub <2 x double> %95, %103
%107 = bitcast double* %73 to <2 x double>*
store <2 x double> %106, <2 x double>* %107
%108 = fadd <2 x double> %85, %93
%109 = fadd <2 x double> %77, %85
%110 = fadd <2 x double> %69, %77
%111 = fsub <2 x double> %108, %110
%112 = fmul <2 x double> %111, <double 0x3FD87DE2A75D2F39, double 0x3FD87DE2A75D2F39>
%113 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %108, <2 x double> <double 0x3FE1517A7BC720BB, double 0x3FE1517A7BC720BB>, <2 x double> %112)
%114 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> <double 0x3FF4E7AE914D6FCA, double 0x3FF4E7AE914D6FCA>, <2 x double> %112)
%115 = fmul <2 x double> %109, <double 0x3FE6A09E6665983E, double 0x3FE6A09E6665983E>
%116 = fadd <2 x double> %69, %115
%117 = fsub <2 x double> %69, %115
%118 = fadd <2 x double> %117, %113
%119 = bitcast double* %81 to <2 x double>*
store <2 x double> %118, <2 x double>* %119
%120 = fsub <2 x double> %117, %113
%121 = bitcast double* %86 to <2 x double>*
store <2 x double> %120, <2 x double>* %121
%122 = fadd <2 x double> %116, %114
%123 = bitcast double* %70 to <2 x double>*
store <2 x double> %122, <2 x double>* %123
%124 = fsub <2 x double> %116, %114
%125 = bitcast double* %65 to <2 x double>*
store <2 x double> %124, <2 x double>* %125
%126 = add nuw i64 %61, 2
%127 = icmp eq i64 %126, 8
br i1 %127, label %128, label %60
128: ; preds = %60
ret void
}