void winograd_f6k3_input_transform(
    const float d0, const float d1, const float d2, const float d3,
    const float d4, const float d5, const float d6, const float d7,
    float transform0[restrict 1], float transform1[restrict 1],
    float transform2[restrict 1], float transform3[restrict 1],
    float transform4[restrict 1], float transform5[restrict 1],
    float transform6[restrict 1], float transform7[restrict 1]) {
  const float const_0_25 = 0.25f;
  float wd0 = d0 - d6;
  const float d4_sub_d2 = d4 - d2;
  float wd7 = d7 - d1;
  const float d3_sub_d5 = d3 - d5;
  float wd1 = d2 + d6;
  float wd2 = d1 + d5;
  float wd4 = d5 + const_0_25 * d1;
  float wd5 = d6 - 5.0f * d4;
  float wd3 = d6 + const_0_25 * d2;
  float wd6 = d1 + const_0_25 * d5;
  const float const_5_25 = 5.25f;
  wd0 += const_5_25 * d4_sub_d2;
  wd7 += const_5_25 * d3_sub_d5;
  const float const_4_25 = 4.25f;
  wd1 -= const_4_25 * d4;
  wd2 -= const_4_25 * d3;
  const float const_1_25 = 1.25f;
  wd3 -= const_1_25 * d4;
  const float d3_times_1_25 = d3 * const_1_25;
  wd5 += 4.0f * d2;
  wd4 -= d3_times_1_25;
  wd6 -= d3_times_1_25;
  const float const_2 = 2.0f;
  wd4 *= const_2;
  wd6 *= const_2;
  *transform0 = wd0;
  *transform1 = wd1 + wd2;
  *transform2 = wd1 - wd2;
  *transform3 = wd3 + wd4;
  *transform4 = wd3 - wd4;
  *transform5 = wd5 + wd6;
  *transform6 = wd5 - wd6;
  *transform7 = wd7;
}


x86 assembly (clang, -O0):
<winograd_f6k3_input_transform>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
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  0xec4(%rip),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x14(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x20(%rbp),%xmm0
subss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0xc(%rbp),%xmm0
addss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x8(%rbp),%xmm0
addss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x18(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
movss  0xe53(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x1c(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
movss  0xe38(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x1c(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
movss  0xe15(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x8(%rbp),%xmm1
movss  -0x18(%rbp),%xmm0
movss  0xdf6(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  0xddd(%rip),%xmm0
movss  %xmm0,-0x80(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  -0x58(%rbp),%xmm1
movss  0xdc6(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x64(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
movss  0xda7(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  0xd8e(%rip),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x14(%rbp),%xmm0
movss  -0x68(%rbp),%xmm1
movss  0xd70(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x10(%rbp),%xmm0
movss  -0x6c(%rbp),%xmm1
movss  0xd51(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  0xd34(%rip),%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x14(%rbp),%xmm0
movss  -0x78(%rbp),%xmm1
movss  0xd1e(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  0xd05(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0xc(%rbp),%xmm0
movss  -0x74(%rbp),%xmm1
movss  0xce2(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x8c(%rbp),%xmm1
ff
movss  -0x70(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x8c(%rbp),%xmm1
ff
movss  -0x7c(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  0xc9d(%rip),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  0xc8d(%rip),%xmm0
mulss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  0xc7b(%rip),%xmm0
mulss  -0x7c(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x68(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x68(%rbp),%xmm0
subss  -0x6c(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x78(%rbp),%xmm0
addss  -0x70(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x78(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x74(%rbp),%xmm0
addss  -0x7c(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x74(%rbp),%xmm0
subss  -0x7c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x60(%rbp),%xmm0
mov    0x18(%rbp),%rax
movss  %xmm0,(%rax)
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<winograd_f6k3_input_transform>:
mov    0x10(%rsp),%r10
mov    0x8(%rsp),%rax
subss  %xmm6,%xmm0
movaps %xmm4,%xmm10
subss  %xmm2,%xmm10
subss  %xmm1,%xmm7
movaps %xmm3,%xmm8
subss  %xmm5,%xmm8
movaps %xmm2,%xmm13
addss  %xmm6,%xmm13
movaps %xmm1,%xmm12
addss  %xmm5,%xmm12
movss  0xec1(%rip),%xmm15
movaps %xmm1,%xmm9
mulss  %xmm15,%xmm9
addss  %xmm5,%xmm9
movss  0xeae(%rip),%xmm11
mulss  %xmm4,%xmm11
addss  %xmm6,%xmm11
movaps %xmm2,%xmm14
mulss  %xmm15,%xmm14
addss  %xmm6,%xmm14
mulss  %xmm15,%xmm5
addss  %xmm1,%xmm5
movss  0xe89(%rip),%xmm1
mulss  %xmm1,%xmm10
addss  %xmm0,%xmm10
mulss  %xmm1,%xmm8
addss  %xmm7,%xmm8
movss  0xe71(%rip),%xmm0
movaps %xmm4,%xmm1
mulss  %xmm0,%xmm1
addss  %xmm13,%xmm1
mulss  %xmm3,%xmm0
addss  %xmm12,%xmm0
mulss  0xe58(%rip),%xmm4
mulss  0xe54(%rip),%xmm3
mulss  0xe50(%rip),%xmm2
addss  %xmm14,%xmm4
addss  %xmm11,%xmm2
subss  %xmm3,%xmm9
subss  %xmm3,%xmm5
addss  %xmm9,%xmm9
addss  %xmm5,%xmm5
movss  %xmm10,(%rdi)
movaps %xmm0,%xmm3
addss  %xmm1,%xmm3
movss  %xmm3,(%rsi)
subss  %xmm0,%xmm1
movss  %xmm1,(%rdx)
movaps %xmm4,%xmm0
addss  %xmm9,%xmm0
movss  %xmm0,(%rcx)
subss  %xmm9,%xmm4
movss  %xmm4,(%r8)
movaps %xmm2,%xmm0
addss  %xmm5,%xmm0
movss  %xmm0,(%r9)
subss  %xmm5,%xmm2
movss  %xmm2,(%rax)
movss  %xmm8,(%r10)
ret

LLVM IR (-O0):
define void @winograd_f6k3_input_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, float* noalias %14, float* noalias %15) {
%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
%46 = alloca float
%47 = alloca float
%48 = alloca float
store float %0, float* %17
store float %1, float* %18
store float %2, float* %19
store float %3, float* %20
store float %4, float* %21
store float %5, float* %22
store float %6, float* %23
store float %7, float* %24
store float* %8, float** %25
store float* %9, float** %26
store float* %10, float** %27
store float* %11, float** %28
store float* %12, float** %29
store float* %13, float** %30
store float* %14, float** %31
store float* %15, float** %32
store float 2.500000e-01, float* %33
%49 = load float, float* %17
%50 = load float, float* %23
%51 = fsub float %49, %50
store float %51, float* %34
%52 = load float, float* %21
%53 = load float, float* %19
%54 = fsub float %52, %53
store float %54, float* %35
%55 = load float, float* %24
%56 = load float, float* %18
%57 = fsub float %55, %56
store float %57, float* %36
%58 = load float, float* %20
%59 = load float, float* %22
%60 = fsub float %58, %59
store float %60, float* %37
%61 = load float, float* %19
%62 = load float, float* %23
%63 = fadd float %61, %62
store float %63, float* %38
%64 = load float, float* %18
%65 = load float, float* %22
%66 = fadd float %64, %65
store float %66, float* %39
%67 = load float, float* %22
%68 = load float, float* %18
%69 = call float @llvm.fmuladd.f32(float 2.500000e-01, float %68, float %67)
store float %69, float* %40
%70 = load float, float* %23
%71 = load float, float* %21
%72 = call float @llvm.fmuladd.f32(float -5.000000e+00, float %71, float %70)
store float %72, float* %41
%73 = load float, float* %23
%74 = load float, float* %19
%75 = call float @llvm.fmuladd.f32(float 2.500000e-01, float %74, float %73)
store float %75, float* %42
%76 = load float, float* %18
%77 = load float, float* %22
%78 = call float @llvm.fmuladd.f32(float 2.500000e-01, float %77, float %76)
store float %78, float* %43
store float 5.250000e+00, float* %44
%79 = load float, float* %35
%80 = load float, float* %34
%81 = call float @llvm.fmuladd.f32(float 5.250000e+00, float %79, float %80)
store float %81, float* %34
%82 = load float, float* %37
%83 = load float, float* %36
%84 = call float @llvm.fmuladd.f32(float 5.250000e+00, float %82, float %83)
store float %84, float* %36
store float 4.250000e+00, float* %45
%85 = load float, float* %21
%86 = load float, float* %38
%87 = call float @llvm.fmuladd.f32(float -4.250000e+00, float %85, float %86)
store float %87, float* %38
%88 = load float, float* %20
%89 = load float, float* %39
%90 = call float @llvm.fmuladd.f32(float -4.250000e+00, float %88, float %89)
store float %90, float* %39
store float 1.250000e+00, float* %46
%91 = load float, float* %21
%92 = load float, float* %42
%93 = call float @llvm.fmuladd.f32(float -1.250000e+00, float %91, float %92)
store float %93, float* %42
%94 = load float, float* %20
%95 = fmul float %94, 1.250000e+00
store float %95, float* %47
%96 = load float, float* %19
%97 = load float, float* %41
%98 = call float @llvm.fmuladd.f32(float 4.000000e+00, float %96, float %97)
store float %98, float* %41
%99 = load float, float* %47
%100 = load float, float* %40
%101 = fsub float %100, %99
store float %101, float* %40
%102 = load float, float* %47
%103 = load float, float* %43
%104 = fsub float %103, %102
store float %104, float* %43
store float 2.000000e+00, float* %48
%105 = load float, float* %40
%106 = fmul float %105, 2.000000e+00
store float %106, float* %40
%107 = load float, float* %43
%108 = fmul float %107, 2.000000e+00
store float %108, float* %43
%109 = load float, float* %34
%110 = load float*, float** %25
store float %109, float* %110
%111 = load float, float* %38
%112 = load float, float* %39
%113 = fadd float %111, %112
%114 = load float*, float** %26
store float %113, float* %114
%115 = load float, float* %38
%116 = load float, float* %39
%117 = fsub float %115, %116
%118 = load float*, float** %27
store float %117, float* %118
%119 = load float, float* %42
%120 = load float, float* %40
%121 = fadd float %119, %120
%122 = load float*, float** %28
store float %121, float* %122
%123 = load float, float* %42
%124 = load float, float* %40
%125 = fsub float %123, %124
%126 = load float*, float** %29
store float %125, float* %126
%127 = load float, float* %41
%128 = load float, float* %43
%129 = fadd float %127, %128
%130 = load float*, float** %30
store float %129, float* %130
%131 = load float, float* %41
%132 = load float, float* %43
%133 = fsub float %131, %132
%134 = load float*, float** %31
store float %133, float* %134
%135 = load float, float* %36
%136 = load float*, float** %32
store float %135, float* %136
ret void
}

LLVM IR (-O2):
define void @winograd_f6k3_input_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, float* noalias nocapture writeonly %14, float* noalias nocapture writeonly %15) {
%17 = fsub float %0, %6
%18 = fsub float %4, %2
%19 = fsub float %7, %1
%20 = fsub float %3, %5
%21 = fadd float %2, %6
%22 = fadd float %1, %5
%23 = tail call float @llvm.fmuladd.f32(float %1, float 2.500000e-01, float %5)
%24 = tail call float @llvm.fmuladd.f32(float %4, float -5.000000e+00, float %6)
%25 = tail call float @llvm.fmuladd.f32(float %2, float 2.500000e-01, float %6)
%26 = tail call float @llvm.fmuladd.f32(float %5, float 2.500000e-01, float %1)
%27 = tail call float @llvm.fmuladd.f32(float %18, float 5.250000e+00, float %17)
%28 = tail call float @llvm.fmuladd.f32(float %20, float 5.250000e+00, float %19)
%29 = tail call float @llvm.fmuladd.f32(float %4, float -4.250000e+00, float %21)
%30 = tail call float @llvm.fmuladd.f32(float %3, float -4.250000e+00, float %22)
%31 = tail call float @llvm.fmuladd.f32(float %4, float -1.250000e+00, float %25)
%32 = fmul float %3, 1.250000e+00
%33 = tail call float @llvm.fmuladd.f32(float %2, float 4.000000e+00, float %24)
%34 = fsub float %23, %32
%35 = fsub float %26, %32
%36 = fmul float %34, 2.000000e+00
%37 = fmul float %35, 2.000000e+00
store float %27, float* %8
%38 = fadd float %30, %29
store float %38, float* %9
%39 = fsub float %29, %30
store float %39, float* %10
%40 = fadd float %31, %36
store float %40, float* %11
%41 = fsub float %31, %36
store float %41, float* %12
%42 = fadd float %33, %37
store float %42, float* %13
%43 = fsub float %33, %37
store float %43, float* %14
store float %28, float* %15
ret void
}