float ffiTestFloats13(float f1, float f2, float f3, float f4, float f5,
                      float f6, float f7, float f8, float f9, float f10,
                      float f11, float f12, float f13) {
  ;
  return (float)(f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 + f11 + f12 +
                 f13);
}


x86 assembly (clang, -O0):
<ffiTestFloats13>:
push   %rbp
mov    %rsp,%rbp
movss  0x30(%rbp),%xmm8
movss  0x28(%rbp),%xmm8
movss  0x20(%rbp),%xmm8
movss  0x18(%rbp),%xmm8
movss  0x10(%rbp),%xmm8
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)
movss  -0x4(%rbp),%xmm0
addss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
addss  -0x18(%rbp),%xmm0
addss  -0x1c(%rbp),%xmm0
addss  -0x20(%rbp),%xmm0
addss  0x10(%rbp),%xmm0
addss  0x18(%rbp),%xmm0
addss  0x20(%rbp),%xmm0
addss  0x28(%rbp),%xmm0
addss  0x30(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffiTestFloats13>:
addss  %xmm1,%xmm0
addss  %xmm2,%xmm0
addss  %xmm3,%xmm0
addss  %xmm4,%xmm0
addss  %xmm5,%xmm0
addss  %xmm6,%xmm0
addss  %xmm7,%xmm0
addss  0x8(%rsp),%xmm0
addss  0x10(%rsp),%xmm0
addss  0x18(%rsp),%xmm0
addss  0x20(%rsp),%xmm0
addss  0x28(%rsp),%xmm0
ret

LLVM IR (-O0):
define float @ffiTestFloats13(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12) {
%14 = alloca float
%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
store float %0, float* %14
store float %1, float* %15
store float %2, float* %16
store float %3, float* %17
store float %4, float* %18
store float %5, float* %19
store float %6, float* %20
store float %7, float* %21
store float %8, float* %22
store float %9, float* %23
store float %10, float* %24
store float %11, float* %25
store float %12, float* %26
%27 = load float, float* %14
%28 = load float, float* %15
%29 = fadd float %27, %28
%30 = load float, float* %16
%31 = fadd float %29, %30
%32 = load float, float* %17
%33 = fadd float %31, %32
%34 = load float, float* %18
%35 = fadd float %33, %34
%36 = load float, float* %19
%37 = fadd float %35, %36
%38 = load float, float* %20
%39 = fadd float %37, %38
%40 = load float, float* %21
%41 = fadd float %39, %40
%42 = load float, float* %22
%43 = fadd float %41, %42
%44 = load float, float* %23
%45 = fadd float %43, %44
%46 = load float, float* %24
%47 = fadd float %45, %46
%48 = load float, float* %25
%49 = fadd float %47, %48
%50 = load float, float* %26
%51 = fadd float %49, %50
ret float %51
}

LLVM IR (-O2):
define float @ffiTestFloats13(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12) {
%14 = fadd float %0, %1
%15 = fadd float %14, %2
%16 = fadd float %15, %3
%17 = fadd float %16, %4
%18 = fadd float %17, %5
%19 = fadd float %18, %6
%20 = fadd float %19, %7
%21 = fadd float %20, %8
%22 = fadd float %21, %9
%23 = fadd float %22, %10
%24 = fadd float %23, %11
%25 = fadd float %24, %12
ret float %25
}