void winograd_f6k3_output_transform(
    const float m0, const float m1, const float m2, const float m3,
    const float m4, const float m5, const float m6, const float m7,
    float output0[restrict 1], float output1[restrict 1],
    float output2[restrict 1], float output3[restrict 1],
    float output4[restrict 1], float output5[restrict 1]) {
  const float m1_add_m2 = m1 + m2;
  const float m1_sub_m2 = m1 - m2;
  const float m3_add_m4 = m3 + m4;
  const float m3_sub_m4 = m3 - m4;
  const float m5_add_m6 = m5 + m6;
  const float m5_sub_m6 = m5 - m6;
  float s0 = m0 + m1_add_m2;
  float s5 = m7 + m1_sub_m2;
  const float const_16 = 16.0f;
  float s1 = m1_sub_m2 + const_16 * m5_sub_m6;
  float s4 = m1_add_m2 + const_16 * m3_add_m4;
  const float const_8 = 8.0f;
  float s2 = m1_add_m2 + const_8 * m5_add_m6;
  float s3 = m1_sub_m2 + const_8 * m3_sub_m4;
  const float const_32 = 32.0f;
  s0 += const_32 * m5_add_m6;
  s5 += const_32 * m3_sub_m4;
  s0 += m3_add_m4;
  s5 += m5_sub_m6;
  const float const_2 = 2.0f;
  s1 += m3_sub_m4 * const_2;
  s4 += m5_add_m6 * const_2;
  const float const_4 = 4.0f;
  s2 += m3_add_m4 * const_4;
  s3 += m5_sub_m6 * const_4;
  *output0 = s0;
  *output1 = s1;
  *output2 = s2;
  *output3 = s3;
  *output4 = s4;
  *output5 = s5;
}


x86 assembly (clang, -O0):
<winograd_f6k3_output_transform>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
movss  %xmm4,-0x14(%rbp)
movss  %xmm5,-0x18(%rbp)
movss  %xmm6,-0x1c(%rbp)
movss  %xmm7,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x8(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x10(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x18(%rbp),%xmm0
addss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x18(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x4(%rbp),%xmm0
addss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x20(%rbp),%xmm0
addss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  0xe48(%rip),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x58(%rbp),%xmm1
movss  -0x68(%rbp),%xmm0
movss  0xe31(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x54(%rbp),%xmm1
movss  -0x5c(%rbp),%xmm0
movss  0xe12(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  0xdf9(%rip),%xmm0
movss  %xmm0,-0x80(%rbp)
movss  -0x54(%rbp),%xmm1
movss  -0x64(%rbp),%xmm0
movss  0xde2(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x58(%rbp),%xmm1
movss  -0x60(%rbp),%xmm0
movss  0xdc0(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  0xda4(%rip),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x64(%rbp),%xmm0
movss  -0x6c(%rbp),%xmm1
movss  0xd8a(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x60(%rbp),%xmm0
movss  -0x70(%rbp),%xmm1
movss  0xd6b(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x5c(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x68(%rbp),%xmm0
addss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  0xd34(%rip),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x60(%rbp),%xmm0
movss  -0x78(%rbp),%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x64(%rbp),%xmm0
movss  -0x7c(%rbp),%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  0xcf2(%rip),%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x5c(%rbp),%xmm0
movss  -0x84(%rbp),%xmm1
ff
movss  0xcd5(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x68(%rbp),%xmm0
movss  -0x88(%rbp),%xmm1
ff
movss  0xcb0(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x6c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x84(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x88(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x7c(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movss  %xmm0,(%rax)
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<winograd_f6k3_output_transform>:
movaps %xmm1,%xmm11
addss  %xmm2,%xmm11
subss  %xmm2,%xmm1
movaps %xmm3,%xmm12
addss  %xmm4,%xmm12
subss  %xmm4,%xmm3
movaps %xmm5,%xmm2
addss  %xmm6,%xmm2
subss  %xmm6,%xmm5
addss  %xmm11,%xmm0
addss  %xmm1,%xmm7
movss  0xeca(%rip),%xmm6
movaps %xmm5,%xmm9
mulss  %xmm6,%xmm9
addss  %xmm1,%xmm9
mulss  %xmm12,%xmm6
addss  %xmm11,%xmm6
movss  0xead(%rip),%xmm8
movaps %xmm2,%xmm10
mulss  %xmm8,%xmm10
addss  %xmm11,%xmm10
mulss  %xmm3,%xmm8
addss  %xmm1,%xmm8
movss  0xe91(%rip),%xmm1
movaps %xmm2,%xmm4
mulss  %xmm1,%xmm4
addss  %xmm0,%xmm4
mulss  %xmm3,%xmm1
addss  %xmm7,%xmm1
addss  %xmm12,%xmm4
addss  %xmm5,%xmm1
addss  %xmm3,%xmm3
addss  %xmm9,%xmm3
addss  %xmm2,%xmm2
addss  %xmm6,%xmm2
movss  0xe60(%rip),%xmm0
mulss  %xmm0,%xmm12
addss  %xmm10,%xmm12
mulss  %xmm0,%xmm5
addss  %xmm8,%xmm5
movss  %xmm4,(%rdi)
movss  %xmm3,(%rsi)
movss  %xmm12,(%rdx)
movss  %xmm5,(%rcx)
movss  %xmm2,(%r8)
movss  %xmm1,(%r9)
ret

LLVM IR (-O0):
define void @winograd_f6k3_output_transform(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float* noalias %8, float* noalias %9, float* noalias %10, float* noalias %11, float* noalias %12, float* noalias %13) {
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float*
%24 = alloca float*
%25 = alloca float*
%26 = alloca float*
%27 = alloca float*
%28 = alloca float*
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
%35 = alloca float
%36 = alloca float
%37 = alloca float
%38 = alloca float
%39 = alloca float
%40 = alloca float
%41 = alloca float
%42 = alloca float
%43 = alloca float
%44 = alloca float
%45 = alloca float
store float %0, float* %15
store float %1, float* %16
store float %2, float* %17
store float %3, float* %18
store float %4, float* %19
store float %5, float* %20
store float %6, float* %21
store float %7, float* %22
store float* %8, float** %23
store float* %9, float** %24
store float* %10, float** %25
store float* %11, float** %26
store float* %12, float** %27
store float* %13, float** %28
%46 = load float, float* %16
%47 = load float, float* %17
%48 = fadd float %46, %47
store float %48, float* %29
%49 = load float, float* %16
%50 = load float, float* %17
%51 = fsub float %49, %50
store float %51, float* %30
%52 = load float, float* %18
%53 = load float, float* %19
%54 = fadd float %52, %53
store float %54, float* %31
%55 = load float, float* %18
%56 = load float, float* %19
%57 = fsub float %55, %56
store float %57, float* %32
%58 = load float, float* %20
%59 = load float, float* %21
%60 = fadd float %58, %59
store float %60, float* %33
%61 = load float, float* %20
%62 = load float, float* %21
%63 = fsub float %61, %62
store float %63, float* %34
%64 = load float, float* %15
%65 = load float, float* %29
%66 = fadd float %64, %65
store float %66, float* %35
%67 = load float, float* %22
%68 = load float, float* %30
%69 = fadd float %67, %68
store float %69, float* %36
store float 1.600000e+01, float* %37
%70 = load float, float* %30
%71 = load float, float* %34
%72 = call float @llvm.fmuladd.f32(float 1.600000e+01, float %71, float %70)
store float %72, float* %38
%73 = load float, float* %29
%74 = load float, float* %31
%75 = call float @llvm.fmuladd.f32(float 1.600000e+01, float %74, float %73)
store float %75, float* %39
store float 8.000000e+00, float* %40
%76 = load float, float* %29
%77 = load float, float* %33
%78 = call float @llvm.fmuladd.f32(float 8.000000e+00, float %77, float %76)
store float %78, float* %41
%79 = load float, float* %30
%80 = load float, float* %32
%81 = call float @llvm.fmuladd.f32(float 8.000000e+00, float %80, float %79)
store float %81, float* %42
store float 3.200000e+01, float* %43
%82 = load float, float* %33
%83 = load float, float* %35
%84 = call float @llvm.fmuladd.f32(float 3.200000e+01, float %82, float %83)
store float %84, float* %35
%85 = load float, float* %32
%86 = load float, float* %36
%87 = call float @llvm.fmuladd.f32(float 3.200000e+01, float %85, float %86)
store float %87, float* %36
%88 = load float, float* %31
%89 = load float, float* %35
%90 = fadd float %89, %88
store float %90, float* %35
%91 = load float, float* %34
%92 = load float, float* %36
%93 = fadd float %92, %91
store float %93, float* %36
store float 2.000000e+00, float* %44
%94 = load float, float* %32
%95 = load float, float* %38
%96 = call float @llvm.fmuladd.f32(float %94, float 2.000000e+00, float %95)
store float %96, float* %38
%97 = load float, float* %33
%98 = load float, float* %39
%99 = call float @llvm.fmuladd.f32(float %97, float 2.000000e+00, float %98)
store float %99, float* %39
store float 4.000000e+00, float* %45
%100 = load float, float* %31
%101 = load float, float* %41
%102 = call float @llvm.fmuladd.f32(float %100, float 4.000000e+00, float %101)
store float %102, float* %41
%103 = load float, float* %34
%104 = load float, float* %42
%105 = call float @llvm.fmuladd.f32(float %103, float 4.000000e+00, float %104)
store float %105, float* %42
%106 = load float, float* %35
%107 = load float*, float** %23
store float %106, float* %107
%108 = load float, float* %38
%109 = load float*, float** %24
store float %108, float* %109
%110 = load float, float* %41
%111 = load float*, float** %25
store float %110, float* %111
%112 = load float, float* %42
%113 = load float*, float** %26
store float %112, float* %113
%114 = load float, float* %39
%115 = load float*, float** %27
store float %114, float* %115
%116 = load float, float* %36
%117 = load float*, float** %28
store float %116, float* %117
ret void
}

LLVM IR (-O2):
define void @winograd_f6k3_output_transform(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float* noalias nocapture writeonly %8, float* noalias nocapture writeonly %9, float* noalias nocapture writeonly %10, float* noalias nocapture writeonly %11, float* noalias nocapture writeonly %12, float* noalias nocapture writeonly %13) {
%15 = fadd float %1, %2
%16 = fsub float %1, %2
%17 = fadd float %3, %4
%18 = fsub float %3, %4
%19 = fadd float %5, %6
%20 = fsub float %5, %6
%21 = fadd float %15, %0
%22 = fadd float %16, %7
%23 = tail call float @llvm.fmuladd.f32(float %20, float 1.600000e+01, float %16)
%24 = tail call float @llvm.fmuladd.f32(float %17, float 1.600000e+01, float %15)
%25 = tail call float @llvm.fmuladd.f32(float %19, float 8.000000e+00, float %15)
%26 = tail call float @llvm.fmuladd.f32(float %18, float 8.000000e+00, float %16)
%27 = tail call float @llvm.fmuladd.f32(float %19, float 3.200000e+01, float %21)
%28 = tail call float @llvm.fmuladd.f32(float %18, float 3.200000e+01, float %22)
%29 = fadd float %17, %27
%30 = fadd float %20, %28
%31 = tail call float @llvm.fmuladd.f32(float %18, float 2.000000e+00, float %23)
%32 = tail call float @llvm.fmuladd.f32(float %19, float 2.000000e+00, float %24)
%33 = tail call float @llvm.fmuladd.f32(float %17, float 4.000000e+00, float %25)
%34 = tail call float @llvm.fmuladd.f32(float %20, float 4.000000e+00, float %26)
store float %29, float* %8
store float %31, float* %9
store float %33, float* %10
store float %34, float* %11
store float %32, float* %12
store float %30, float* %13
ret void
}