double add10(float param1, float param2, int param3, int param4, float param5,
             float param6, int param7, int param8, float param9,
             float param10) {
  double st;
  double st_1;
  st = param1;
  st = param2;
  st_1 = (float)param3;
  st = (float)param4;
  st = param5;
  st = param6;
  st = (float)param7;
  st = (float)param8;
  st = param9;
  st = param10;
  st = st + st + st_1 + st + st + st + st + st + st + st;
  return st;
}


x86 assembly (clang, -O0):
<add10>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
movss  %xmm2,-0x14(%rbp)
movss  %xmm3,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
movss  %xmm4,-0x24(%rbp)
movss  %xmm5,-0x28(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
cvtsi2ssl -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x18(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
cvtsi2ssl -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
cvtsi2ssl -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<add10>:
cvtsi2ss %edi,%xmm0
cvtss2sd %xmm0,%xmm1
cvtss2sd %xmm5,%xmm2
movaps %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm2,%xmm0
ret

LLVM IR (-O0):
define double @add10(float %0, float %1, i32 %2, i32 %3, float %4, float %5, i32 %6, i32 %7, float %8, float %9) {
%11 = alloca float
%12 = alloca float
%13 = alloca i32
%14 = alloca i32
%15 = alloca float
%16 = alloca float
%17 = alloca i32
%18 = alloca i32
%19 = alloca float
%20 = alloca float
%21 = alloca double
%22 = alloca double
store float %0, float* %11
store float %1, float* %12
store i32 %2, i32* %13
store i32 %3, i32* %14
store float %4, float* %15
store float %5, float* %16
store i32 %6, i32* %17
store i32 %7, i32* %18
store float %8, float* %19
store float %9, float* %20
%23 = load float, float* %11
%24 = fpext float %23 to double
store double %24, double* %21
%25 = load float, float* %12
%26 = fpext float %25 to double
store double %26, double* %21
%27 = load i32, i32* %13
%28 = sitofp i32 %27 to float
%29 = fpext float %28 to double
store double %29, double* %22
%30 = load i32, i32* %14
%31 = sitofp i32 %30 to float
%32 = fpext float %31 to double
store double %32, double* %21
%33 = load float, float* %15
%34 = fpext float %33 to double
store double %34, double* %21
%35 = load float, float* %16
%36 = fpext float %35 to double
store double %36, double* %21
%37 = load i32, i32* %17
%38 = sitofp i32 %37 to float
%39 = fpext float %38 to double
store double %39, double* %21
%40 = load i32, i32* %18
%41 = sitofp i32 %40 to float
%42 = fpext float %41 to double
store double %42, double* %21
%43 = load float, float* %19
%44 = fpext float %43 to double
store double %44, double* %21
%45 = load float, float* %20
%46 = fpext float %45 to double
store double %46, double* %21
%47 = load double, double* %21
%48 = load double, double* %21
%49 = fadd double %47, %48
%50 = load double, double* %22
%51 = fadd double %49, %50
%52 = load double, double* %21
%53 = fadd double %51, %52
%54 = load double, double* %21
%55 = fadd double %53, %54
%56 = load double, double* %21
%57 = fadd double %55, %56
%58 = load double, double* %21
%59 = fadd double %57, %58
%60 = load double, double* %21
%61 = fadd double %59, %60
%62 = load double, double* %21
%63 = fadd double %61, %62
%64 = load double, double* %21
%65 = fadd double %63, %64
store double %65, double* %21
%66 = load double, double* %21
ret double %66
}

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