float ffiTestFloats15(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, float f14, float f15) {
  ;
  return (float)(f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 + f11 + f12 +
                 f13 + f14 + f15);
}


x86 assembly (clang, -O0):
<ffiTestFloats15>:
push   %rbp
mov    %rsp,%rbp
movss  0x40(%rbp),%xmm8
movss  0x38(%rbp),%xmm8
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
addss  0x38(%rbp),%xmm0
addss  0x40(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffiTestFloats15>:
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
addss  0x30(%rsp),%xmm0
addss  0x38(%rsp),%xmm0
ret

LLVM IR (-O0):
define float @ffiTestFloats15(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, float %13, float %14) {
%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
store float %0, float* %16
store float %1, float* %17
store float %2, float* %18
store float %3, float* %19
store float %4, float* %20
store float %5, float* %21
store float %6, float* %22
store float %7, float* %23
store float %8, float* %24
store float %9, float* %25
store float %10, float* %26
store float %11, float* %27
store float %12, float* %28
store float %13, float* %29
store float %14, float* %30
%31 = load float, float* %16
%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
%52 = load float, float* %27
%53 = fadd float %51, %52
%54 = load float, float* %28
%55 = fadd float %53, %54
%56 = load float, float* %29
%57 = fadd float %55, %56
%58 = load float, float* %30
%59 = fadd float %57, %58
ret float %59
}

LLVM IR (-O2):
define float @ffiTestFloats15(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, float %13, float %14) {
%16 = fadd float %0, %1
%17 = fadd float %16, %2
%18 = fadd float %17, %3
%19 = fadd float %18, %4
%20 = fadd float %19, %5
%21 = fadd float %20, %6
%22 = fadd float %21, %7
%23 = fadd float %22, %8
%24 = fadd float %23, %9
%25 = fadd float %24, %10
%26 = fadd float %25, %11
%27 = fadd float %26, %12
%28 = fadd float %27, %13
%29 = fadd float %28, %14
ret float %29
}