void L3_dct3_9(float *y) {
  float s0, s1, s2, s3, s4, s5, s6, s7, s8, t0, t2, t4;
  s0 = y[0];
  s2 = y[2];
  s4 = y[4];
  s6 = y[6];
  s8 = y[8];
  t0 = s0 + s6 * 0.5f;
  s0 -= s6;
  t4 = (s4 + s2) * 0.93969262f;
  t2 = (s8 + s2) * 0.76604444f;
  s6 = (s4 - s8) * 0.17364818f;
  s4 += s8 - s2;
  s2 = s0 - s4 * 0.5f;
  y[4] = s4 + s0;
  s8 = t0 - t2 + s6;
  s0 = t0 - t4 + t2;
  s4 = t0 + t4 - s6;
  s1 = y[1];
  s3 = y[3];
  s5 = y[5];
  s7 = y[7];
  s3 *= 0.86602540f;
  t0 = (s5 + s1) * 0.98480775f;
  t4 = (s5 - s7) * 0.34202014f;
  t2 = (s1 + s7) * 0.64278761f;
  s1 = (s1 - s5 - s7) * 0.86602540f;
  s5 = t0 - s3 - t2;
  s7 = t4 - s3 - t0;
  s3 = t4 + s3 - t2;
  y[0] = s4 - s7;
  y[1] = s2 + s1;
  y[2] = s0 - s3;
  y[3] = s8 + s5;
  y[5] = s8 - s5;
  y[6] = s0 + s3;
  y[7] = s2 - s1;
  y[8] = s4 + s7;
}


x86 assembly (clang, -O0):
<L3_dct3_9>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movss  0x18(%rax),%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movss  0x20(%rax),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0xc(%rbp),%xmm1
movss  -0x24(%rbp),%xmm0
movss  0xeb1(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x24(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0x1c(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
movss  0xe8b(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
movss  0xe6c(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x1c(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  0xe4d(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x2c(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
addss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0xc(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  0xe0d(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x1c(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x10(%rax)
movss  -0x30(%rbp),%xmm0
subss  -0x34(%rbp),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x38(%rbp),%xmm0
addss  -0x34(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0x30(%rbp),%xmm0
addss  -0x38(%rbp),%xmm0
subss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movss  0x1c(%rax),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xd61(%rip),%xmm0
mulss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x20(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
movss  0xd51(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x20(%rbp),%xmm0
subss  -0x28(%rbp),%xmm0
movss  0xd32(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x10(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
movss  0xd13(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x20(%rbp),%xmm0
subss  -0x28(%rbp),%xmm0
movss  0xcef(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
subss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x38(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
subss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x38(%rbp),%xmm0
addss  -0x18(%rbp),%xmm0
subss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x1c(%rbp),%xmm0
subss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x14(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0xc(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x2c(%rbp),%xmm0
addss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xc(%rax)
movss  -0x2c(%rbp),%xmm0
subss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0xc(%rbp),%xmm0
addss  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0x14(%rbp),%xmm0
subss  -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x1c(%rax)
movss  -0x1c(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x20(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<L3_dct3_9>:
movss  0x8(%rdi),%xmm1
movss  0x10(%rdi),%xmm8
movss  0x18(%rdi),%xmm3
movss  0x20(%rdi),%xmm5
movss  0xee3(%rip),%xmm0
movaps %xmm3,%xmm4
mulss  %xmm0,%xmm4
movss  (%rdi),%xmm7
movss  0x4(%rdi),%xmm10
addss  %xmm7,%xmm4
subss  %xmm3,%xmm7
movaps %xmm1,%xmm2
addss  %xmm5,%xmm2
movaps %xmm8,%xmm3
subss  %xmm5,%xmm3
subss  %xmm1,%xmm5
addss  %xmm8,%xmm1
mulss  0xeae(%rip),%xmm1
mulss  0xeaa(%rip),%xmm2
mulss  0xea6(%rip),%xmm3
addss  %xmm8,%xmm5
mulss  %xmm5,%xmm0
addss  %xmm7,%xmm5
subss  %xmm0,%xmm7
movss  %xmm5,0x10(%rdi)
movaps %xmm4,%xmm9
subss  %xmm1,%xmm9
addss  %xmm4,%xmm1
subss  %xmm2,%xmm4
addss  %xmm3,%xmm4
addss  %xmm2,%xmm9
subss  %xmm3,%xmm1
movss  0x14(%rdi),%xmm5
movss  0x1c(%rdi),%xmm2
movss  0xe63(%rip),%xmm8
movss  0xc(%rdi),%xmm3
movaps %xmm10,%xmm0
addss  %xmm5,%xmm0
mulss  0xe52(%rip),%xmm0
movaps %xmm10,%xmm6
subss  %xmm5,%xmm10
subss  %xmm2,%xmm5
mulss  0xe41(%rip),%xmm5
mulss  %xmm8,%xmm3
addss  %xmm2,%xmm6
mulss  0xe34(%rip),%xmm6
subss  %xmm2,%xmm10
mulss  %xmm8,%xmm10
movaps %xmm5,%xmm2
subss  %xmm3,%xmm2
subss  %xmm0,%xmm2
subss  %xmm3,%xmm0
subss  %xmm6,%xmm0
addss  %xmm3,%xmm5
subss  %xmm6,%xmm5
movaps %xmm1,%xmm3
subss  %xmm2,%xmm3
movss  %xmm3,(%rdi)
movaps %xmm7,%xmm3
addss  %xmm10,%xmm3
movss  %xmm3,0x4(%rdi)
movaps %xmm9,%xmm3
subss  %xmm5,%xmm3
movss  %xmm3,0x8(%rdi)
movaps %xmm4,%xmm3
addss  %xmm0,%xmm3
movss  %xmm3,0xc(%rdi)
subss  %xmm0,%xmm4
movss  %xmm4,0x14(%rdi)
addss  %xmm9,%xmm5
movss  %xmm5,0x18(%rdi)
subss  %xmm10,%xmm7
movss  %xmm7,0x1c(%rdi)
addss  %xmm1,%xmm2
movss  %xmm2,0x20(%rdi)
ret

LLVM IR (-O0):
define void @L3_dct3_9(float* %0) {
%2 = alloca float*
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
store float* %0, float** %2
%15 = load float*, float** %2
%16 = getelementptr inbounds float, float* %15, i64 0
%17 = load float, float* %16
store float %17, float* %3
%18 = load float*, float** %2
%19 = getelementptr inbounds float, float* %18, i64 2
%20 = load float, float* %19
store float %20, float* %5
%21 = load float*, float** %2
%22 = getelementptr inbounds float, float* %21, i64 4
%23 = load float, float* %22
store float %23, float* %7
%24 = load float*, float** %2
%25 = getelementptr inbounds float, float* %24, i64 6
%26 = load float, float* %25
store float %26, float* %9
%27 = load float*, float** %2
%28 = getelementptr inbounds float, float* %27, i64 8
%29 = load float, float* %28
store float %29, float* %11
%30 = load float, float* %3
%31 = load float, float* %9
%32 = call float @llvm.fmuladd.f32(float %31, float 5.000000e-01, float %30)
store float %32, float* %12
%33 = load float, float* %9
%34 = load float, float* %3
%35 = fsub float %34, %33
store float %35, float* %3
%36 = load float, float* %7
%37 = load float, float* %5
%38 = fadd float %36, %37
%39 = fmul float %38, 0x3FEE11F640000000
store float %39, float* %14
%40 = load float, float* %11
%41 = load float, float* %5
%42 = fadd float %40, %41
%43 = fmul float %42, 0x3FE8836FA0000000
store float %43, float* %13
%44 = load float, float* %7
%45 = load float, float* %11
%46 = fsub float %44, %45
%47 = fmul float %46, 0x3FC63A1A80000000
store float %47, float* %9
%48 = load float, float* %11
%49 = load float, float* %5
%50 = fsub float %48, %49
%51 = load float, float* %7
%52 = fadd float %51, %50
store float %52, float* %7
%53 = load float, float* %3
%54 = load float, float* %7
%55 = fneg float %54
%56 = call float @llvm.fmuladd.f32(float %55, float 5.000000e-01, float %53)
store float %56, float* %5
%57 = load float, float* %7
%58 = load float, float* %3
%59 = fadd float %57, %58
%60 = load float*, float** %2
%61 = getelementptr inbounds float, float* %60, i64 4
store float %59, float* %61
%62 = load float, float* %12
%63 = load float, float* %13
%64 = fsub float %62, %63
%65 = load float, float* %9
%66 = fadd float %64, %65
store float %66, float* %11
%67 = load float, float* %12
%68 = load float, float* %14
%69 = fsub float %67, %68
%70 = load float, float* %13
%71 = fadd float %69, %70
store float %71, float* %3
%72 = load float, float* %12
%73 = load float, float* %14
%74 = fadd float %72, %73
%75 = load float, float* %9
%76 = fsub float %74, %75
store float %76, float* %7
%77 = load float*, float** %2
%78 = getelementptr inbounds float, float* %77, i64 1
%79 = load float, float* %78
store float %79, float* %4
%80 = load float*, float** %2
%81 = getelementptr inbounds float, float* %80, i64 3
%82 = load float, float* %81
store float %82, float* %6
%83 = load float*, float** %2
%84 = getelementptr inbounds float, float* %83, i64 5
%85 = load float, float* %84
store float %85, float* %8
%86 = load float*, float** %2
%87 = getelementptr inbounds float, float* %86, i64 7
%88 = load float, float* %87
store float %88, float* %10
%89 = load float, float* %6
%90 = fmul float %89, 0x3FEBB67AE0000000
store float %90, float* %6
%91 = load float, float* %8
%92 = load float, float* %4
%93 = fadd float %91, %92
%94 = fmul float %93, 0x3FEF838B80000000
store float %94, float* %12
%95 = load float, float* %8
%96 = load float, float* %10
%97 = fsub float %95, %96
%98 = fmul float %97, 0x3FD5E3A880000000
store float %98, float* %14
%99 = load float, float* %4
%100 = load float, float* %10
%101 = fadd float %99, %100
%102 = fmul float %101, 0x3FE491B760000000
store float %102, float* %13
%103 = load float, float* %4
%104 = load float, float* %8
%105 = fsub float %103, %104
%106 = load float, float* %10
%107 = fsub float %105, %106
%108 = fmul float %107, 0x3FEBB67AE0000000
store float %108, float* %4
%109 = load float, float* %12
%110 = load float, float* %6
%111 = fsub float %109, %110
%112 = load float, float* %13
%113 = fsub float %111, %112
store float %113, float* %8
%114 = load float, float* %14
%115 = load float, float* %6
%116 = fsub float %114, %115
%117 = load float, float* %12
%118 = fsub float %116, %117
store float %118, float* %10
%119 = load float, float* %14
%120 = load float, float* %6
%121 = fadd float %119, %120
%122 = load float, float* %13
%123 = fsub float %121, %122
store float %123, float* %6
%124 = load float, float* %7
%125 = load float, float* %10
%126 = fsub float %124, %125
%127 = load float*, float** %2
%128 = getelementptr inbounds float, float* %127, i64 0
store float %126, float* %128
%129 = load float, float* %5
%130 = load float, float* %4
%131 = fadd float %129, %130
%132 = load float*, float** %2
%133 = getelementptr inbounds float, float* %132, i64 1
store float %131, float* %133
%134 = load float, float* %3
%135 = load float, float* %6
%136 = fsub float %134, %135
%137 = load float*, float** %2
%138 = getelementptr inbounds float, float* %137, i64 2
store float %136, float* %138
%139 = load float, float* %11
%140 = load float, float* %8
%141 = fadd float %139, %140
%142 = load float*, float** %2
%143 = getelementptr inbounds float, float* %142, i64 3
store float %141, float* %143
%144 = load float, float* %11
%145 = load float, float* %8
%146 = fsub float %144, %145
%147 = load float*, float** %2
%148 = getelementptr inbounds float, float* %147, i64 5
store float %146, float* %148
%149 = load float, float* %3
%150 = load float, float* %6
%151 = fadd float %149, %150
%152 = load float*, float** %2
%153 = getelementptr inbounds float, float* %152, i64 6
store float %151, float* %153
%154 = load float, float* %5
%155 = load float, float* %4
%156 = fsub float %154, %155
%157 = load float*, float** %2
%158 = getelementptr inbounds float, float* %157, i64 7
store float %156, float* %158
%159 = load float, float* %7
%160 = load float, float* %10
%161 = fadd float %159, %160
%162 = load float*, float** %2
%163 = getelementptr inbounds float, float* %162, i64 8
store float %161, float* %163
ret void
}

LLVM IR (-O2):
define void @L3_dct3_9(float* nocapture %0) {
%2 = load float, float* %0
%3 = getelementptr inbounds float, float* %0, i64 2
%4 = load float, float* %3
%5 = getelementptr inbounds float, float* %0, i64 4
%6 = load float, float* %5
%7 = getelementptr inbounds float, float* %0, i64 6
%8 = load float, float* %7
%9 = getelementptr inbounds float, float* %0, i64 8
%10 = load float, float* %9
%11 = tail call float @llvm.fmuladd.f32(float %8, float 5.000000e-01, float %2)
%12 = fsub float %2, %8
%13 = fadd float %4, %6
%14 = fmul float %13, 0x3FEE11F640000000
%15 = fadd float %4, %10
%16 = fmul float %15, 0x3FE8836FA0000000
%17 = fsub float %6, %10
%18 = fmul float %17, 0x3FC63A1A80000000
%19 = fsub float %10, %4
%20 = fadd float %6, %19
%21 = fneg float %20
%22 = tail call float @llvm.fmuladd.f32(float %21, float 5.000000e-01, float %12)
%23 = fadd float %12, %20
store float %23, float* %5
%24 = fsub float %11, %16
%25 = fadd float %18, %24
%26 = fsub float %11, %14
%27 = fadd float %26, %16
%28 = fadd float %11, %14
%29 = fsub float %28, %18
%30 = getelementptr inbounds float, float* %0, i64 1
%31 = load float, float* %30
%32 = getelementptr inbounds float, float* %0, i64 3
%33 = load float, float* %32
%34 = getelementptr inbounds float, float* %0, i64 5
%35 = load float, float* %34
%36 = getelementptr inbounds float, float* %0, i64 7
%37 = load float, float* %36
%38 = fmul float %33, 0x3FEBB67AE0000000
%39 = fadd float %31, %35
%40 = fmul float %39, 0x3FEF838B80000000
%41 = fsub float %35, %37
%42 = fmul float %41, 0x3FD5E3A880000000
%43 = fadd float %31, %37
%44 = fmul float %43, 0x3FE491B760000000
%45 = fsub float %31, %35
%46 = fsub float %45, %37
%47 = fmul float %46, 0x3FEBB67AE0000000
%48 = fsub float %40, %38
%49 = fsub float %48, %44
%50 = fsub float %42, %38
%51 = fsub float %50, %40
%52 = fadd float %38, %42
%53 = fsub float %52, %44
%54 = fsub float %29, %51
store float %54, float* %0
%55 = fadd float %22, %47
store float %55, float* %30
%56 = fsub float %27, %53
store float %56, float* %3
%57 = fadd float %25, %49
store float %57, float* %32
%58 = fsub float %25, %49
store float %58, float* %34
%59 = fadd float %27, %53
store float %59, float* %7
%60 = fsub float %22, %47
store float %60, float* %36
%61 = fadd float %29, %51
store float %61, float* %9
ret void
}