void dct2dTestFlt(double __attribute__((fxfrmt(1, 7, 24, 0x00FFFFFF,
                                               0xFF000001))) (*dctBlock)[8]) {
  static const double c1 = 0.98078528040323044912;
  static const double s1 = 0.19509032201612826784;
  static const double c3 = 0.83146961230254523708;
  static const double s3 = 0.55557023301960222473;
  static const double r2c6 = 0.54119610014619698441;
  static const double r2s6 = 1.30656296487637652784;
  static const double r2 = 1.41421356237309504880;
  int row, col;
  for (row = 0; row < 8; row++) {
    double x0 = dctBlock[row][0], x1 = dctBlock[row][1], x2 = dctBlock[row][2],
           x3 = dctBlock[row][3], x4 = dctBlock[row][4], x5 = dctBlock[row][5],
           x6 = dctBlock[row][6], x7 = dctBlock[row][7], x8;
    x8 = x7 + x0;
    x0 -= x7;
    x7 = x1 + x6;
    x1 -= x6;
    x6 = x2 + x5;
    x2 -= x5;
    x5 = x3 + x4;
    x3 -= x4;
    x4 = x8 + x5;
    x8 -= x5;
    x5 = x7 + x6;
    x7 -= x6;
    x6 = c1 * (x1 + x2);
    x2 = (-s1 - c1) * x2 + x6;
    x1 = (s1 - c1) * x1 + x6;
    x6 = c3 * (x0 + x3);
    x3 = (-s3 - c3) * x3 + x6;
    x0 = (s3 - c3) * x0 + x6;
    x6 = x4 + x5;
    x4 -= x5;
    x5 = x0 + x2;
    x0 -= x2;
    x2 = x3 + x1;
    x3 -= x1;
    x1 = r2c6 * (x7 + x8);
    x7 = (-r2s6 - r2c6) * x7 + x1;
    x8 = (r2s6 - r2c6) * x8 + x1;
    dctBlock[row][0] = x6;
    dctBlock[row][4] = x4;
    dctBlock[row][2] = x8;
    dctBlock[row][6] = x7;
    dctBlock[row][7] = x2 - x5;
    dctBlock[row][1] = x2 + x5;
    dctBlock[row][3] = x3 * r2;
    dctBlock[row][5] = x0 * r2;
  }
  for (col = 0; col < 8; col++) {
    double x0 = dctBlock[0][col], x1 = dctBlock[1][col], x2 = dctBlock[2][col],
           x3 = dctBlock[3][col], x4 = dctBlock[4][col], x5 = dctBlock[5][col],
           x6 = dctBlock[6][col], x7 = dctBlock[7][col], x8;
    x8 = x7 + x0;
    x0 -= x7;
    x7 = x1 + x6;
    x1 -= x6;
    x6 = x2 + x5;
    x2 -= x5;
    x5 = x3 + x4;
    x3 -= x4;
    x4 = x8 + x5;
    x8 -= x5;
    x5 = x7 + x6;
    x7 -= x6;
    x6 = c1 * (x1 + x2);
    x2 = (-s1 - c1) * x2 + x6;
    x1 = (s1 - c1) * x1 + x6;
    x6 = c3 * (x0 + x3);
    x3 = (-s3 - c3) * x3 + x6;
    x0 = (s3 - c3) * x0 + x6;
    x6 = x4 + x5;
    x4 -= x5;
    x5 = x0 + x2;
    x0 -= x2;
    x2 = x3 + x1;
    x3 -= x1;
    x1 = r2c6 * (x7 + x8);
    x7 = (-r2s6 - r2c6) * x7 + x1;
    x8 = (r2s6 - r2c6) * x8 + x1;
    dctBlock[0][col] = x6;
    dctBlock[4][col] = x4;
    dctBlock[2][col] = x8;
    dctBlock[6][col] = x7;
    dctBlock[7][col] = (x2 - x5);
    dctBlock[1][col] = (x2 + x5);
    dctBlock[3][col] = (x3 * r2);
    dctBlock[5][col] = (x0 * r2);
  }
}


x86 assembly (clang, -O0):
<dct2dTestFlt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    1510 <dct2dTestFlt+0x410>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x20(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x20(%rbp),%xmm1
addsd  -0x28(%rbp),%xmm1
movsd  0xd86(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  0xd63(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  0xd3c(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm1
addsd  -0x30(%rbp),%xmm1
movsd  0xd15(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  0xcf2(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  0xccb(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x50(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
movsd  0xc3e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0xc1b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0xbf4(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x28(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x28(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x8(%rax)
movsd  0xb38(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x18(%rax)
movsd  0xb17(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movsd  %xmm0,0x28(%rax)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1113 <dct2dTestFlt+0x13>
movl   $0x0,-0x10(%rbp)
cmpl   $0x8,-0x10(%rbp)
jge    195f <dct2dTestFlt+0x85f>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0x40(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0x80(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0xc0(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0x100(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0x140(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0x180(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  0x1c0(%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0xa0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
movsd  0x958(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x92f(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x905(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
movsd  0x8de(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x8b5(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x88b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x80(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x98(%rbp),%xmm1
ff
addsd  -0xa0(%rbp),%xmm1
ff
movsd  0x7ec(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm1
movsd  0x7c6(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm1
movsd  0x799(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0x100(%rax,%rcx,8)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0x80(%rax,%rcx,8)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0x180(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0x1c0(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0x40(%rax,%rcx,8)
movsd  0x6e3(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0xc0(%rax,%rcx,8)
movsd  0x6c5(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsd  %xmm0,0x140(%rax,%rcx,8)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1517 <dct2dTestFlt+0x417>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dct2dTestFlt>:
xor    %eax,%eax
movapd 0xf35(%rip),%xmm12
movapd 0xf3c(%rip),%xmm13
movapd 0xf43(%rip),%xmm14
movapd 0xf4a(%rip),%xmm15
movapd 0xf51(%rip),%xmm9
movapd 0xf58(%rip),%xmm10
nopl   0x0(%rax,%rax,1)
movsd  (%rdi,%rax,1),%xmm2
movsd  0x8(%rdi,%rax,1),%xmm5
movsd  0x10(%rdi,%rax,1),%xmm8
movsd  0x18(%rdi,%rax,1),%xmm3
movhpd 0x40(%rdi,%rax,1),%xmm2
movhpd 0x48(%rdi,%rax,1),%xmm5
movhpd 0x50(%rdi,%rax,1),%xmm8
movhpd 0x58(%rdi,%rax,1),%xmm3
movsd  0x20(%rdi,%rax,1),%xmm0
movhpd 0x60(%rdi,%rax,1),%xmm0
movsd  0x28(%rdi,%rax,1),%xmm1
movhpd 0x68(%rdi,%rax,1),%xmm1
movsd  0x30(%rdi,%rax,1),%xmm7
movhpd 0x70(%rdi,%rax,1),%xmm7
movsd  0x38(%rdi,%rax,1),%xmm6
movhpd 0x78(%rdi,%rax,1),%xmm6
movapd %xmm2,%xmm4
addpd  %xmm6,%xmm4
subpd  %xmm6,%xmm2
movapd %xmm5,%xmm6
addpd  %xmm7,%xmm6
subpd  %xmm7,%xmm5
movapd %xmm8,%xmm11
addpd  %xmm1,%xmm11
subpd  %xmm1,%xmm8
movapd %xmm3,%xmm1
addpd  %xmm0,%xmm1
subpd  %xmm0,%xmm3
movapd %xmm1,%xmm7
addpd  %xmm4,%xmm7
subpd  %xmm1,%xmm4
movapd %xmm11,%xmm1
addpd  %xmm6,%xmm1
subpd  %xmm11,%xmm6
movapd %xmm8,%xmm0
addpd  %xmm5,%xmm0
mulpd  0xe01(%rip),%xmm0
mulpd  0xe08(%rip),%xmm8
addpd  %xmm0,%xmm8
mulpd  0xe0b(%rip),%xmm5
addpd  %xmm0,%xmm5
movapd %xmm3,%xmm0
addpd  %xmm2,%xmm0
mulpd  0xe07(%rip),%xmm0
mulpd  %xmm12,%xmm3
addpd  %xmm0,%xmm3
mulpd  %xmm13,%xmm2
addpd  %xmm0,%xmm2
movapd %xmm1,%xmm11
addpd  %xmm7,%xmm11
subpd  %xmm1,%xmm7
movapd %xmm8,%xmm0
addpd  %xmm2,%xmm0
subpd  %xmm8,%xmm2
movapd %xmm5,%xmm1
addpd  %xmm3,%xmm1
subpd  %xmm5,%xmm3
movapd %xmm6,%xmm5
addpd  %xmm4,%xmm5
mulpd  %xmm14,%xmm5
mulpd  %xmm15,%xmm6
addpd  %xmm5,%xmm6
mulpd  %xmm9,%xmm4
addpd  %xmm5,%xmm4
movapd %xmm1,%xmm5
subpd  %xmm0,%xmm5
addpd  %xmm0,%xmm1
mulpd  %xmm10,%xmm3
mulpd  %xmm10,%xmm2
movapd %xmm4,%xmm8
unpcklpd %xmm3,%xmm8
movhlps %xmm4,%xmm3
movapd %xmm11,%xmm4
unpcklpd %xmm1,%xmm4
movhlps %xmm11,%xmm1
movapd %xmm6,%xmm0
unpcklpd %xmm5,%xmm0
movhlps %xmm6,%xmm5
movapd %xmm7,%xmm6
unpcklpd %xmm2,%xmm6
movhlps %xmm7,%xmm2
movups %xmm2,0x60(%rdi,%rax,1)
movups %xmm5,0x70(%rdi,%rax,1)
movups %xmm1,0x40(%rdi,%rax,1)
movups %xmm3,0x50(%rdi,%rax,1)
movupd %xmm6,0x20(%rdi,%rax,1)
movupd %xmm0,0x30(%rdi,%rax,1)
movupd %xmm4,(%rdi,%rax,1)
movupd %xmm8,0x10(%rdi,%rax,1)
sub    $0xffffffffffffff80,%rax
cmp    $0x200,%rax
jne    1140 <dct2dTestFlt+0x40>
mov    $0xfffffffffffffff8,%rax
nopl   0x0(%rax,%rax,1)
movupd 0x40(%rdi,%rax,8),%xmm2
movupd 0x80(%rdi,%rax,8),%xmm6
movupd 0xc0(%rdi,%rax,8),%xmm7
movupd 0x100(%rdi,%rax,8),%xmm3
movupd 0x140(%rdi,%rax,8),%xmm8
movupd 0x180(%rdi,%rax,8),%xmm11
movupd 0x1c0(%rdi,%rax,8),%xmm0
movupd 0x200(%rdi,%rax,8),%xmm5
movapd %xmm2,%xmm4
addpd  %xmm5,%xmm4
subpd  %xmm5,%xmm2
movapd %xmm6,%xmm5
addpd  %xmm0,%xmm5
subpd  %xmm0,%xmm6
movapd %xmm7,%xmm1
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm7
movapd %xmm3,%xmm0
addpd  %xmm8,%xmm0
subpd  %xmm8,%xmm3
movapd %xmm0,%xmm8
addpd  %xmm4,%xmm8
subpd  %xmm0,%xmm4
movapd %xmm1,%xmm0
addpd  %xmm5,%xmm0
subpd  %xmm1,%xmm5
movapd %xmm7,%xmm1
addpd  %xmm6,%xmm1
mulpd  0xc4b(%rip),%xmm1
mulpd  0xc53(%rip),%xmm7
addpd  %xmm1,%xmm7
mulpd  0xc57(%rip),%xmm6
addpd  %xmm1,%xmm6
movapd %xmm3,%xmm1
addpd  %xmm2,%xmm1
mulpd  0xc53(%rip),%xmm1
mulpd  %xmm12,%xmm3
addpd  %xmm1,%xmm3
mulpd  %xmm13,%xmm2
addpd  %xmm1,%xmm2
movapd %xmm0,%xmm1
addpd  %xmm8,%xmm1
subpd  %xmm0,%xmm8
movapd %xmm7,%xmm0
addpd  %xmm2,%xmm0
subpd  %xmm7,%xmm2
movapd %xmm6,%xmm7
addpd  %xmm3,%xmm7
subpd  %xmm6,%xmm3
movapd %xmm5,%xmm6
addpd  %xmm4,%xmm6
mulpd  %xmm14,%xmm6
mulpd  %xmm15,%xmm5
addpd  %xmm6,%xmm5
mulpd  %xmm9,%xmm4
addpd  %xmm6,%xmm4
movupd %xmm1,0x40(%rdi,%rax,8)
movupd %xmm8,0x140(%rdi,%rax,8)
movupd %xmm4,0xc0(%rdi,%rax,8)
movupd %xmm5,0x1c0(%rdi,%rax,8)
movapd %xmm7,%xmm1
subpd  %xmm0,%xmm1
movupd %xmm1,0x200(%rdi,%rax,8)
addpd  %xmm0,%xmm7
movupd %xmm7,0x80(%rdi,%rax,8)
mulpd  %xmm10,%xmm3
movupd %xmm3,0x100(%rdi,%rax,8)
mulpd  %xmm10,%xmm2
movupd %xmm2,0x180(%rdi,%rax,8)
add    $0x2,%rax
jne    1310 <dct2dTestFlt+0x210>
ret

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

LLVM IR (-O2):
define void @dct2dTestFlt([8 x double]* nocapture %0) {
br label %2
2: ; preds = %2, %1
%3 = phi i64 [ 0, %1 ], [ %96, %2 ]
%4 = or i64 %3, 1
%5 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 0
%6 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 0
%7 = load double, double* %5
%8 = load double, double* %6
%9 = insertelement <2 x double> poison, double %7, i64 0
%10 = insertelement <2 x double> %9, double %8, i64 1
%11 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 1
%12 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 1
%13 = load double, double* %11
%14 = load double, double* %12
%15 = insertelement <2 x double> poison, double %13, i64 0
%16 = insertelement <2 x double> %15, double %14, i64 1
%17 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 2
%18 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 2
%19 = load double, double* %17
%20 = load double, double* %18
%21 = insertelement <2 x double> poison, double %19, i64 0
%22 = insertelement <2 x double> %21, double %20, i64 1
%23 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 3
%24 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 3
%25 = load double, double* %23
%26 = load double, double* %24
%27 = insertelement <2 x double> poison, double %25, i64 0
%28 = insertelement <2 x double> %27, double %26, i64 1
%29 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 4
%30 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 4
%31 = load double, double* %29
%32 = load double, double* %30
%33 = insertelement <2 x double> poison, double %31, i64 0
%34 = insertelement <2 x double> %33, double %32, i64 1
%35 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 5
%36 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 5
%37 = load double, double* %35
%38 = load double, double* %36
%39 = insertelement <2 x double> poison, double %37, i64 0
%40 = insertelement <2 x double> %39, double %38, i64 1
%41 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 6
%42 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 6
%43 = load double, double* %41
%44 = load double, double* %42
%45 = insertelement <2 x double> poison, double %43, i64 0
%46 = insertelement <2 x double> %45, double %44, i64 1
%47 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 7
%48 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %4, i64 7
%49 = load double, double* %47
%50 = load double, double* %48
%51 = insertelement <2 x double> poison, double %49, i64 0
%52 = insertelement <2 x double> %51, double %50, i64 1
%53 = fadd <2 x double> %10, %52
%54 = fsub <2 x double> %10, %52
%55 = fadd <2 x double> %16, %46
%56 = fsub <2 x double> %16, %46
%57 = fadd <2 x double> %22, %40
%58 = fsub <2 x double> %22, %40
%59 = fadd <2 x double> %28, %34
%60 = fsub <2 x double> %28, %34
%61 = fadd <2 x double> %59, %53
%62 = fsub <2 x double> %53, %59
%63 = fadd <2 x double> %57, %55
%64 = fsub <2 x double> %55, %57
%65 = fadd <2 x double> %58, %56
%66 = fmul <2 x double> %65, <double 0x3FEF6297CFF75CB0, double 0x3FEF6297CFF75CB0>
%67 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %58, <2 x double> <double 0xBFF2D062EF88E319, double 0xBFF2D062EF88E319>, <2 x double> %66)
%68 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> <double 0xBFE92469C0DCF32D, double 0xBFE92469C0DCF32D>, <2 x double> %66)
%69 = fadd <2 x double> %60, %54
%70 = fmul <2 x double> %69, <double 0x3FEA9B66290EA1A3, double 0x3FEA9B66290EA1A3>
%71 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %60, <2 x double> <double 0xBFF63150B15E8536, double 0xBFF63150B15E8536>, <2 x double> %70)
%72 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %54, <2 x double> <double 0xBFD1A855DEC071B6, double 0xBFD1A855DEC071B6>, <2 x double> %70)
%73 = fadd <2 x double> %63, %61
%74 = fsub <2 x double> %61, %63
%75 = fadd <2 x double> %67, %72
%76 = fsub <2 x double> %72, %67
%77 = fadd <2 x double> %68, %71
%78 = fsub <2 x double> %71, %68
%79 = fadd <2 x double> %64, %62
%80 = fmul <2 x double> %79, <double 0x3FE1517A7BDB3895, double 0x3FE1517A7BDB3895>
%81 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %64, <2 x double> <double 0xBFFD906BCF328D46, double 0xBFFD906BCF328D46>, <2 x double> %80)
%82 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %62, <2 x double> <double 0x3FE87DE2A6AEA963, double 0x3FE87DE2A6AEA963>, <2 x double> %80)
%83 = fsub <2 x double> %77, %75
%84 = fadd <2 x double> %77, %75
%85 = fmul <2 x double> %78, <double 0x3FF6A09E667F3BCD, double 0x3FF6A09E667F3BCD>
%86 = fmul <2 x double> %76, <double 0x3FF6A09E667F3BCD, double 0x3FF6A09E667F3BCD>
%87 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 %3, i64 0
%88 = bitcast double* %87 to <16 x double>*
%89 = shufflevector <2 x double> %73, <2 x double> %84, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%90 = shufflevector <2 x double> %82, <2 x double> %85, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%91 = shufflevector <2 x double> %74, <2 x double> %86, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%92 = shufflevector <2 x double> %81, <2 x double> %83, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%93 = shufflevector <4 x double> %89, <4 x double> %90, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
%94 = shufflevector <4 x double> %91, <4 x double> %92, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
%95 = shufflevector <8 x double> %93, <8 x double> %94, <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> %95, <16 x double>* %88
%96 = add nuw i64 %3, 2
%97 = icmp eq i64 %96, 8
br i1 %97, label %98, label %2
98: ; preds = %2, %98
%99 = phi i64 [ %166, %98 ], [ 0, %2 ]
%100 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 0, i64 %99
%101 = bitcast double* %100 to <2 x double>*
%102 = load <2 x double>, <2 x double>* %101
%103 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 1, i64 %99
%104 = bitcast double* %103 to <2 x double>*
%105 = load <2 x double>, <2 x double>* %104
%106 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 2, i64 %99
%107 = bitcast double* %106 to <2 x double>*
%108 = load <2 x double>, <2 x double>* %107
%109 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 3, i64 %99
%110 = bitcast double* %109 to <2 x double>*
%111 = load <2 x double>, <2 x double>* %110
%112 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 4, i64 %99
%113 = bitcast double* %112 to <2 x double>*
%114 = load <2 x double>, <2 x double>* %113
%115 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 5, i64 %99
%116 = bitcast double* %115 to <2 x double>*
%117 = load <2 x double>, <2 x double>* %116
%118 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 6, i64 %99
%119 = bitcast double* %118 to <2 x double>*
%120 = load <2 x double>, <2 x double>* %119
%121 = getelementptr inbounds [8 x double], [8 x double]* %0, i64 7, i64 %99
%122 = bitcast double* %121 to <2 x double>*
%123 = load <2 x double>, <2 x double>* %122
%124 = fadd <2 x double> %102, %123
%125 = fsub <2 x double> %102, %123
%126 = fadd <2 x double> %105, %120
%127 = fsub <2 x double> %105, %120
%128 = fadd <2 x double> %108, %117
%129 = fsub <2 x double> %108, %117
%130 = fadd <2 x double> %111, %114
%131 = fsub <2 x double> %111, %114
%132 = fadd <2 x double> %130, %124
%133 = fsub <2 x double> %124, %130
%134 = fadd <2 x double> %128, %126
%135 = fsub <2 x double> %126, %128
%136 = fadd <2 x double> %129, %127
%137 = fmul <2 x double> %136, <double 0x3FEF6297CFF75CB0, double 0x3FEF6297CFF75CB0>
%138 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %129, <2 x double> <double 0xBFF2D062EF88E319, double 0xBFF2D062EF88E319>, <2 x double> %137)
%139 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %127, <2 x double> <double 0xBFE92469C0DCF32D, double 0xBFE92469C0DCF32D>, <2 x double> %137)
%140 = fadd <2 x double> %131, %125
%141 = fmul <2 x double> %140, <double 0x3FEA9B66290EA1A3, double 0x3FEA9B66290EA1A3>
%142 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %131, <2 x double> <double 0xBFF63150B15E8536, double 0xBFF63150B15E8536>, <2 x double> %141)
%143 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %125, <2 x double> <double 0xBFD1A855DEC071B6, double 0xBFD1A855DEC071B6>, <2 x double> %141)
%144 = fadd <2 x double> %134, %132
%145 = fsub <2 x double> %132, %134
%146 = fadd <2 x double> %138, %143
%147 = fsub <2 x double> %143, %138
%148 = fadd <2 x double> %139, %142
%149 = fsub <2 x double> %142, %139
%150 = fadd <2 x double> %135, %133
%151 = fmul <2 x double> %150, <double 0x3FE1517A7BDB3895, double 0x3FE1517A7BDB3895>
%152 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %135, <2 x double> <double 0xBFFD906BCF328D46, double 0xBFFD906BCF328D46>, <2 x double> %151)
%153 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %133, <2 x double> <double 0x3FE87DE2A6AEA963, double 0x3FE87DE2A6AEA963>, <2 x double> %151)
%154 = bitcast double* %100 to <2 x double>*
store <2 x double> %144, <2 x double>* %154
%155 = bitcast double* %112 to <2 x double>*
store <2 x double> %145, <2 x double>* %155
%156 = bitcast double* %106 to <2 x double>*
store <2 x double> %153, <2 x double>* %156
%157 = bitcast double* %118 to <2 x double>*
store <2 x double> %152, <2 x double>* %157
%158 = fsub <2 x double> %148, %146
%159 = bitcast double* %121 to <2 x double>*
store <2 x double> %158, <2 x double>* %159
%160 = fadd <2 x double> %148, %146
%161 = bitcast double* %103 to <2 x double>*
store <2 x double> %160, <2 x double>* %161
%162 = fmul <2 x double> %149, <double 0x3FF6A09E667F3BCD, double 0x3FF6A09E667F3BCD>
%163 = bitcast double* %109 to <2 x double>*
store <2 x double> %162, <2 x double>* %163
%164 = fmul <2 x double> %147, <double 0x3FF6A09E667F3BCD, double 0x3FF6A09E667F3BCD>
%165 = bitcast double* %115 to <2 x double>*
store <2 x double> %164, <2 x double>* %165
%166 = add nuw i64 %99, 2
%167 = icmp eq i64 %166, 8
br i1 %167, label %168, label %98
168: ; preds = %98
ret void
}