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


x86 assembly (clang, -O0):
<function7>:
push   %rbp
mov    %rsp,%rbp
mov    %dx,%ax
fldt   0x10(%rbp)
movss  %xmm0,-0x4(%rbp)
mov    %rdi,-0x10(%rbp)
movss  %xmm1,-0x14(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
fstpt  -0x40(%rbp)
movss  %xmm4,-0x44(%rbp)
mov    %esi,-0x48(%rbp)
movsd  %xmm5,-0x50(%rbp)
mov    %ax,-0x52(%rbp)
movss  -0x4(%rbp),%xmm0
cvtsi2ssq -0x10(%rbp),%xmm1
addss  %xmm1,%xmm0
movss  -0x14(%rbp),%xmm1
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x20(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
fldl   -0x68(%rbp)
fldt   -0x40(%rbp)
faddp  %st,%st(1)
flds   -0x44(%rbp)
faddp  %st,%st(1)
mov    -0x48(%rbp),%eax
mov    %eax,-0x58(%rbp)
fildl  -0x58(%rbp)
faddp  %st,%st(1)
fldl   -0x50(%rbp)
faddp  %st,%st(1)
movswl -0x52(%rbp),%eax
mov    %eax,-0x5c(%rbp)
fildl  -0x5c(%rbp)
faddp  %st,%st(1)
fstpl  -0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<function7>:
fldt   0x8(%rsp)
cvtsi2ss %rdi,%xmm6
addss  %xmm0,%xmm6
addss  %xmm1,%xmm6
xorps  %xmm0,%xmm0
cvtss2sd %xmm6,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,-0x10(%rsp)
faddl  -0x10(%rsp)
movss  %xmm4,-0x20(%rsp)
fadds  -0x20(%rsp)
mov    %esi,-0x1c(%rsp)
fiaddl -0x1c(%rsp)
movsd  %xmm5,-0x8(%rsp)
faddl  -0x8(%rsp)
mov    %dx,-0x22(%rsp)
fiadds -0x22(%rsp)
fstpl  -0x18(%rsp)
movsd  -0x18(%rsp),%xmm0
ret

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

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