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


x86 assembly (clang, -O0):
<function5>:
push   %rbp
mov    %rsp,%rbp
mov    %di,%ax
movss  0x10(%rbp),%xmm8
movss  %xmm0,-0x4(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movss  %xmm3,-0x1c(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
mov    %ax,-0x32(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x28(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movswl -0x32(%rbp),%eax
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movss  0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<function5>:
movss  0x8(%rsp),%xmm8
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
addsd  %xmm0,%xmm1
addsd  %xmm4,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %edi,%xmm0
addsd  %xmm5,%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm6,%xmm0
addsd  %xmm7,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm8,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
ret

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

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