float function11(float a, long int b, double c, float d, float e, int f,
                 float g, long int h, float i, double j) {
  return a + b + c + d + e + f + g + h + i + j;
}


x86 assembly (clang, -O0):
<function11>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
mov    %rdi,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movss  %xmm2,-0x1c(%rbp)
movss  %xmm3,-0x20(%rbp)
mov    %esi,-0x24(%rbp)
movss  %xmm4,-0x28(%rbp)
mov    %rdx,-0x30(%rbp)
movss  %xmm5,-0x34(%rbp)
movsd  %xmm6,-0x40(%rbp)
movss  -0x4(%rbp),%xmm0
cvtsi2ssq -0x10(%rbp),%xmm1
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x18(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
addsd  %xmm1,%xmm0
movss  -0x28(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdq -0x30(%rbp),%xmm1
addsd  %xmm1,%xmm0
movss  -0x34(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<function11>:
cvtsi2ss %rdi,%xmm7
addss  %xmm0,%xmm7
xorps  %xmm0,%xmm0
cvtss2sd %xmm7,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
addsd  %xmm1,%xmm0
addsd  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm4,%xmm0
addsd  %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %rdx,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm6,%xmm0
cvtsd2ss %xmm0,%xmm0
ret

LLVM IR (-O0):
define float @function11(float %0, i64 %1, double %2, float %3, float %4, i32 %5, float %6, i64 %7, float %8, double %9) {
%11 = alloca float
%12 = alloca i64
%13 = alloca double
%14 = alloca float
%15 = alloca float
%16 = alloca i32
%17 = alloca float
%18 = alloca i64
%19 = alloca float
%20 = alloca double
store float %0, float* %11
store i64 %1, i64* %12
store double %2, double* %13
store float %3, float* %14
store float %4, float* %15
store i32 %5, i32* %16
store float %6, float* %17
store i64 %7, i64* %18
store float %8, float* %19
store double %9, double* %20
%21 = load float, float* %11
%22 = load i64, i64* %12
%23 = sitofp i64 %22 to float
%24 = fadd float %21, %23
%25 = fpext float %24 to double
%26 = load double, double* %13
%27 = fadd double %25, %26
%28 = load float, float* %14
%29 = fpext float %28 to double
%30 = fadd double %27, %29
%31 = load float, float* %15
%32 = fpext float %31 to double
%33 = fadd double %30, %32
%34 = load i32, i32* %16
%35 = sitofp i32 %34 to double
%36 = fadd double %33, %35
%37 = load float, float* %17
%38 = fpext float %37 to double
%39 = fadd double %36, %38
%40 = load i64, i64* %18
%41 = sitofp i64 %40 to double
%42 = fadd double %39, %41
%43 = load float, float* %19
%44 = fpext float %43 to double
%45 = fadd double %42, %44
%46 = load double, double* %20
%47 = fadd double %45, %46
%48 = fptrunc double %47 to float
ret float %48
}

LLVM IR (-O2):
define float @function11(float %0, i64 %1, double %2, float %3, float %4, i32 %5, float %6, i64 %7, float %8, double %9) {
%11 = sitofp i64 %1 to float
%12 = fadd float %11, %0
%13 = fpext float %12 to double
%14 = fadd double %13, %2
%15 = fpext float %3 to double
%16 = fadd double %14, %15
%17 = fpext float %4 to double
%18 = fadd double %16, %17
%19 = sitofp i32 %5 to double
%20 = fadd double %18, %19
%21 = fpext float %6 to double
%22 = fadd double %20, %21
%23 = sitofp i64 %7 to double
%24 = fadd double %22, %23
%25 = fpext float %8 to double
%26 = fadd double %24, %25
%27 = fadd double %26, %9
%28 = fptrunc double %27 to float
ret float %28
}