void cftf082(double *a) {
  double wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i, y0r, y0i, y1r, y1i, y2r, y2i,
      y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;
  wn4r = ((double)0.707106781186547524400844362104849039284835);
  wk1r = ((double)0.923879532511286756128183189396788286822416);
  wk1i = ((double)0.382683432365089771728459984030398866761344);
  y0r = a[0] - a[9];
  y0i = a[1] + a[8];
  y1r = a[0] + a[9];
  y1i = a[1] - a[8];
  x0r = a[4] - a[13];
  x0i = a[5] + a[12];
  y2r = wn4r * (x0r - x0i);
  y2i = wn4r * (x0i + x0r);
  x0r = a[4] + a[13];
  x0i = a[5] - a[12];
  y3r = wn4r * (x0r - x0i);
  y3i = wn4r * (x0i + x0r);
  x0r = a[2] - a[11];
  x0i = a[3] + a[10];
  y4r = wk1r * x0r - wk1i * x0i;
  y4i = wk1r * x0i + wk1i * x0r;
  x0r = a[2] + a[11];
  x0i = a[3] - a[10];
  y5r = wk1i * x0r - wk1r * x0i;
  y5i = wk1i * x0i + wk1r * x0r;
  x0r = a[6] - a[15];
  x0i = a[7] + a[14];
  y6r = wk1i * x0r - wk1r * x0i;
  y6i = wk1i * x0i + wk1r * x0r;
  x0r = a[6] + a[15];
  x0i = a[7] - a[14];
  y7r = wk1r * x0r - wk1i * x0i;
  y7i = wk1r * x0i + wk1i * x0r;
  x0r = y0r + y2r;
  x0i = y0i + y2i;
  x1r = y4r + y6r;
  x1i = y4i + y6i;
  a[0] = x0r + x1r;
  a[1] = x0i + x1i;
  a[2] = x0r - x1r;
  a[3] = x0i - x1i;
  x0r = y0r - y2r;
  x0i = y0i - y2i;
  x1r = y4r - y6r;
  x1i = y4i - y6i;
  a[4] = x0r - x1i;
  a[5] = x0i + x1r;
  a[6] = x0r + x1i;
  a[7] = x0i - x1r;
  x0r = y1r - y3i;
  x0i = y1i + y3r;
  x1r = y5r - y7r;
  x1i = y5i - y7i;
  a[8] = x0r + x1r;
  a[9] = x0i + x1i;
  a[10] = x0r - x1r;
  a[11] = x0i - x1i;
  x0r = y1r + y3i;
  x0i = y1i - y3r;
  x1r = y5r + y7r;
  x1i = y5i + y7i;
  a[12] = x0r - x1i;
  a[13] = x0i + x1r;
  a[14] = x0r + x1i;
  a[15] = x0i - x1r;
}


x86 assembly (clang, -O0):
<cftf082>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
movsd  0xefc(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xee7(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xed2(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
addsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
addsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x8(%rbp),%rax
addsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x30(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x48(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x28(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x30(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x58(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
subsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x30(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x30(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x58(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x60(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x28(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x30(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cftf082>:
movupd 0x40(%rdi),%xmm13
shufpd $0x1,%xmm13,%xmm13
movupd (%rdi),%xmm1
movupd 0x10(%rdi),%xmm8
movapd %xmm1,%xmm3
subpd  %xmm13,%xmm3
addpd  %xmm1,%xmm13
movapd %xmm13,%xmm10
movsd  %xmm3,%xmm10
shufpd $0x2,%xmm3,%xmm13
movsd  0x20(%rdi),%xmm5
movsd  0x68(%rdi),%xmm1
movapd %xmm5,%xmm6
subsd  %xmm1,%xmm6
movsd  0x28(%rdi),%xmm2
movsd  0x60(%rdi),%xmm4
movapd %xmm2,%xmm7
addsd  %xmm4,%xmm7
movapd %xmm6,%xmm14
subsd  %xmm7,%xmm14
addsd  %xmm6,%xmm7
unpcklpd %xmm7,%xmm14
movapd 0xe8d(%rip),%xmm6
mulpd  %xmm6,%xmm14
addsd  %xmm1,%xmm5
subsd  %xmm4,%xmm2
movapd %xmm5,%xmm1
addsd  %xmm2,%xmm1
subsd  %xmm2,%xmm5
unpcklpd %xmm5,%xmm1
mulpd  %xmm6,%xmm1
movupd 0x50(%rdi),%xmm2
shufpd $0x1,%xmm2,%xmm2
movapd %xmm8,%xmm6
subpd  %xmm2,%xmm6
addpd  %xmm8,%xmm2
movapd %xmm2,%xmm5
movsd  %xmm6,%xmm5
movapd %xmm2,%xmm4
shufpd $0x1,%xmm6,%xmm4
movapd 0xe4a(%rip),%xmm8
mulpd  %xmm8,%xmm4
movapd 0xe4c(%rip),%xmm9
mulpd  %xmm9,%xmm5
addpd  %xmm4,%xmm5
movapd %xmm6,%xmm4
movsd  %xmm2,%xmm4
shufpd $0x1,%xmm2,%xmm6
movapd 0xe3d(%rip),%xmm11
mulpd  %xmm11,%xmm6
movapd 0xe3f(%rip),%xmm12
mulpd  %xmm12,%xmm4
addpd  %xmm6,%xmm4
movupd 0x30(%rdi),%xmm0
movupd 0x70(%rdi),%xmm7
shufpd $0x1,%xmm7,%xmm7
movapd %xmm0,%xmm6
subpd  %xmm7,%xmm6
addpd  %xmm0,%xmm7
movapd %xmm7,%xmm2
movsd  %xmm6,%xmm2
movapd %xmm7,%xmm0
shufpd $0x1,%xmm6,%xmm0
mulpd  %xmm11,%xmm0
mulpd  %xmm12,%xmm2
addpd  %xmm0,%xmm2
movapd %xmm6,%xmm0
movsd  %xmm7,%xmm0
shufpd $0x1,%xmm7,%xmm6
mulpd  %xmm8,%xmm6
mulpd  %xmm9,%xmm0
addpd  %xmm6,%xmm0
movapd %xmm10,%xmm3
addpd  %xmm14,%xmm3
movapd %xmm5,%xmm7
addpd  %xmm2,%xmm7
movapd %xmm3,%xmm6
addpd  %xmm7,%xmm6
movupd %xmm6,(%rdi)
subpd  %xmm7,%xmm3
movupd %xmm3,0x10(%rdi)
subpd  %xmm14,%xmm10
subpd  %xmm2,%xmm5
shufpd $0x1,%xmm5,%xmm5
movapd %xmm10,%xmm2
subpd  %xmm5,%xmm2
addpd  %xmm10,%xmm5
movapd %xmm5,%xmm3
movsd  %xmm2,%xmm3
movupd %xmm3,0x20(%rdi)
shufpd $0x2,%xmm2,%xmm5
movupd %xmm5,0x30(%rdi)
movapd %xmm13,%xmm2
subpd  %xmm1,%xmm2
addpd  %xmm13,%xmm1
movapd %xmm1,%xmm3
movsd  %xmm2,%xmm3
movapd %xmm4,%xmm5
subpd  %xmm0,%xmm5
movapd %xmm3,%xmm6
addpd  %xmm5,%xmm6
movupd %xmm6,0x40(%rdi)
subpd  %xmm5,%xmm3
movupd %xmm3,0x50(%rdi)
shufpd $0x2,%xmm2,%xmm1
addpd  %xmm4,%xmm0
shufpd $0x1,%xmm0,%xmm0
movapd %xmm1,%xmm2
subpd  %xmm0,%xmm2
addpd  %xmm1,%xmm0
movapd %xmm0,%xmm1
movsd  %xmm2,%xmm1
movupd %xmm1,0x60(%rdi)
shufpd $0x2,%xmm2,%xmm0
movupd %xmm0,0x70(%rdi)
ret

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

LLVM IR (-O2):
define void @cftf082(double* nocapture %0) {
%2 = bitcast double* %0 to <2 x double>*
%3 = load <2 x double>, <2 x double>* %2
%4 = getelementptr inbounds double, double* %0, i64 8
%5 = bitcast double* %4 to <2 x double>*
%6 = load <2 x double>, <2 x double>* %5
%7 = shufflevector <2 x double> %6, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%8 = fsub <2 x double> %3, %7
%9 = fadd <2 x double> %3, %7
%10 = shufflevector <2 x double> %8, <2 x double> %9, <2 x i32> <i32 0, i32 3>
%11 = shufflevector <2 x double> %9, <2 x double> %8, <2 x i32> <i32 0, i32 3>
%12 = getelementptr inbounds double, double* %0, i64 4
%13 = load double, double* %12
%14 = getelementptr inbounds double, double* %0, i64 13
%15 = load double, double* %14
%16 = fsub double %13, %15
%17 = getelementptr inbounds double, double* %0, i64 5
%18 = load double, double* %17
%19 = getelementptr inbounds double, double* %0, i64 12
%20 = load double, double* %19
%21 = fadd double %18, %20
%22 = insertelement <2 x double> poison, double %16, i64 0
%23 = shufflevector <2 x double> %22, <2 x double> poison, <2 x i32> zeroinitializer
%24 = insertelement <2 x double> poison, double %21, i64 0
%25 = shufflevector <2 x double> %24, <2 x double> poison, <2 x i32> zeroinitializer
%26 = fsub <2 x double> %23, %25
%27 = fadd <2 x double> %23, %25
%28 = shufflevector <2 x double> %26, <2 x double> %27, <2 x i32> <i32 0, i32 3>
%29 = fmul <2 x double> %28, <double 0x3FE6A09E667F3BCD, double 0x3FE6A09E667F3BCD>
%30 = fadd double %13, %15
%31 = fsub double %18, %20
%32 = insertelement <2 x double> poison, double %30, i64 0
%33 = shufflevector <2 x double> %32, <2 x double> poison, <2 x i32> zeroinitializer
%34 = insertelement <2 x double> poison, double %31, i64 0
%35 = shufflevector <2 x double> %34, <2 x double> poison, <2 x i32> zeroinitializer
%36 = fadd <2 x double> %33, %35
%37 = fsub <2 x double> %33, %35
%38 = shufflevector <2 x double> %36, <2 x double> %37, <2 x i32> <i32 0, i32 3>
%39 = fmul <2 x double> %38, <double 0x3FE6A09E667F3BCD, double 0x3FE6A09E667F3BCD>
%40 = getelementptr inbounds double, double* %0, i64 2
%41 = bitcast double* %40 to <2 x double>*
%42 = load <2 x double>, <2 x double>* %41
%43 = getelementptr inbounds double, double* %0, i64 10
%44 = bitcast double* %43 to <2 x double>*
%45 = load <2 x double>, <2 x double>* %44
%46 = shufflevector <2 x double> %45, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%47 = fsub <2 x double> %42, %46
%48 = fadd <2 x double> %42, %46
%49 = shufflevector <2 x double> %47, <2 x double> %48, <2 x i32> <i32 0, i32 3>
%50 = shufflevector <2 x double> %48, <2 x double> %47, <2 x i32> <i32 1, i32 2>
%51 = fmul <2 x double> %50, <double 0xBFD87DE2A6AEA963, double 0x3FD87DE2A6AEA963>
%52 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %49, <2 x double> <double 0x3FED906BCF328D46, double 0x3FED906BCF328D46>, <2 x double> %51)
%53 = shufflevector <2 x double> %48, <2 x double> %47, <2 x i32> <i32 0, i32 3>
%54 = shufflevector <2 x double> %47, <2 x double> %48, <2 x i32> <i32 1, i32 2>
%55 = fmul <2 x double> %54, <double 0xBFED906BCF328D46, double 0x3FED906BCF328D46>
%56 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %53, <2 x double> <double 0x3FD87DE2A6AEA963, double 0x3FD87DE2A6AEA963>, <2 x double> %55)
%57 = getelementptr inbounds double, double* %0, i64 6
%58 = bitcast double* %57 to <2 x double>*
%59 = load <2 x double>, <2 x double>* %58
%60 = getelementptr inbounds double, double* %0, i64 14
%61 = bitcast double* %60 to <2 x double>*
%62 = load <2 x double>, <2 x double>* %61
%63 = shufflevector <2 x double> %62, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%64 = fsub <2 x double> %59, %63
%65 = fadd <2 x double> %59, %63
%66 = shufflevector <2 x double> %64, <2 x double> %65, <2 x i32> <i32 0, i32 3>
%67 = shufflevector <2 x double> %65, <2 x double> %64, <2 x i32> <i32 1, i32 2>
%68 = fmul <2 x double> %67, <double 0xBFED906BCF328D46, double 0x3FED906BCF328D46>
%69 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %66, <2 x double> <double 0x3FD87DE2A6AEA963, double 0x3FD87DE2A6AEA963>, <2 x double> %68)
%70 = shufflevector <2 x double> %65, <2 x double> %64, <2 x i32> <i32 0, i32 3>
%71 = shufflevector <2 x double> %64, <2 x double> %65, <2 x i32> <i32 1, i32 2>
%72 = fmul <2 x double> %71, <double 0xBFD87DE2A6AEA963, double 0x3FD87DE2A6AEA963>
%73 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %70, <2 x double> <double 0x3FED906BCF328D46, double 0x3FED906BCF328D46>, <2 x double> %72)
%74 = fadd <2 x double> %10, %29
%75 = fadd <2 x double> %52, %69
%76 = fadd <2 x double> %74, %75
%77 = bitcast double* %0 to <2 x double>*
store <2 x double> %76, <2 x double>* %77
%78 = fsub <2 x double> %74, %75
%79 = bitcast double* %40 to <2 x double>*
store <2 x double> %78, <2 x double>* %79
%80 = fsub <2 x double> %10, %29
%81 = fsub <2 x double> %52, %69
%82 = shufflevector <2 x double> %81, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%83 = fsub <2 x double> %80, %82
%84 = fadd <2 x double> %80, %82
%85 = shufflevector <2 x double> %83, <2 x double> %84, <2 x i32> <i32 0, i32 3>
%86 = bitcast double* %12 to <2 x double>*
store <2 x double> %85, <2 x double>* %86
%87 = shufflevector <2 x double> %84, <2 x double> %83, <2 x i32> <i32 0, i32 3>
%88 = bitcast double* %57 to <2 x double>*
store <2 x double> %87, <2 x double>* %88
%89 = fsub <2 x double> %11, %39
%90 = fadd <2 x double> %11, %39
%91 = shufflevector <2 x double> %89, <2 x double> %90, <2 x i32> <i32 0, i32 3>
%92 = fsub <2 x double> %56, %73
%93 = fadd <2 x double> %91, %92
%94 = bitcast double* %4 to <2 x double>*
store <2 x double> %93, <2 x double>* %94
%95 = fsub <2 x double> %91, %92
%96 = bitcast double* %43 to <2 x double>*
store <2 x double> %95, <2 x double>* %96
%97 = shufflevector <2 x double> %90, <2 x double> %89, <2 x i32> <i32 0, i32 3>
%98 = fadd <2 x double> %56, %73
%99 = shufflevector <2 x double> %98, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%100 = fsub <2 x double> %97, %99
%101 = fadd <2 x double> %97, %99
%102 = shufflevector <2 x double> %100, <2 x double> %101, <2 x i32> <i32 0, i32 3>
%103 = bitcast double* %19 to <2 x double>*
store <2 x double> %102, <2 x double>* %103
%104 = shufflevector <2 x double> %101, <2 x double> %100, <2 x i32> <i32 0, i32 3>
%105 = bitcast double* %60 to <2 x double>*
store <2 x double> %104, <2 x double>* %105
ret void
}