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


x86 assembly (clang, -O0):
<function19>:
push   %rbp
mov    %rsp,%rbp
mov    %r8w,%ax
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
movss  %xmm1,-0x1c(%rbp)
movss  %xmm2,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
movss  %xmm3,-0x2c(%rbp)
mov    %rcx,-0x38(%rbp)
movsd  %xmm4,-0x40(%rbp)
mov    %ax,-0x42(%rbp)
cvtsi2sdq -0x8(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
cvtsi2sdq -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdq -0x28(%rbp),%xmm1
addsd  %xmm1,%xmm0
movss  -0x2c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdq -0x38(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
movswl -0x42(%rbp),%eax
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<function19>:
cvtsi2sd %rdi,%xmm5
addsd  %xmm5,%xmm0
xorps  %xmm5,%xmm5
cvtsi2sd %rsi,%xmm5
addsd  %xmm5,%xmm0
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %rdx,%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %rcx,%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm4,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r8d,%xmm1
addsd  %xmm1,%xmm0
ret

LLVM IR (-O0):
define double @function19(i64 %0, double %1, i64 %2, float %3, float %4, i64 %5, float %6, i64 %7, double %8, i16 signext %9) {
%11 = alloca i64
%12 = alloca double
%13 = alloca i64
%14 = alloca float
%15 = alloca float
%16 = alloca i64
%17 = alloca float
%18 = alloca i64
%19 = alloca double
%20 = alloca i16
store i64 %0, i64* %11
store double %1, double* %12
store i64 %2, i64* %13
store float %3, float* %14
store float %4, float* %15
store i64 %5, i64* %16
store float %6, float* %17
store i64 %7, i64* %18
store double %8, double* %19
store i16 %9, i16* %20
%21 = load i64, i64* %11
%22 = sitofp i64 %21 to double
%23 = load double, double* %12
%24 = fadd double %22, %23
%25 = load i64, i64* %13
%26 = sitofp i64 %25 to double
%27 = fadd double %24, %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 i64, i64* %16
%35 = sitofp i64 %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 double, double* %19
%44 = fadd double %42, %43
%45 = load i16, i16* %20
%46 = sext i16 %45 to i32
%47 = sitofp i32 %46 to double
%48 = fadd double %44, %47
ret double %48
}

LLVM IR (-O2):
define double @function19(i64 %0, double %1, i64 %2, float %3, float %4, i64 %5, float %6, i64 %7, double %8, i16 signext %9) {
%11 = sitofp i64 %0 to double
%12 = fadd double %11, %1
%13 = sitofp i64 %2 to double
%14 = fadd double %12, %13
%15 = fpext float %3 to double
%16 = fadd double %14, %15
%17 = fpext float %4 to double
%18 = fadd double %16, %17
%19 = sitofp i64 %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 = fadd double %24, %8
%26 = sitofp i16 %9 to double
%27 = fadd double %25, %26
ret double %27
}