float sum_combo(int a, float b, int c, float d, int e, float f, int g, float h,
                int i, float j, int k, float l, int m, float n, int o, float p,
                int q, float r, int s) {
  return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r +
         s;
}


x86 assembly (clang, -O0):
<sum_combo>:
push   %rbp
mov    %rsp,%rbp
mov    0x30(%rbp),%eax
movss  0x28(%rbp),%xmm8
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
movss  %xmm0,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movss  %xmm2,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movss  %xmm3,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
movss  %xmm4,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
movss  %xmm5,-0x30(%rbp)
movss  %xmm6,-0x34(%rbp)
movss  %xmm7,-0x38(%rbp)
cvtsi2ssl -0x4(%rbp),%xmm0
addss  -0x8(%rbp),%xmm0
cvtsi2ssl -0xc(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x10(%rbp),%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x18(%rbp),%xmm0
cvtsi2ssl -0x1c(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x20(%rbp),%xmm0
cvtsi2ssl -0x24(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x28(%rbp),%xmm0
cvtsi2ssl -0x2c(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x30(%rbp),%xmm0
cvtsi2ssl 0x10(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x34(%rbp),%xmm0
cvtsi2ssl 0x18(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  -0x38(%rbp),%xmm0
cvtsi2ssl 0x20(%rbp),%xmm1
addss  %xmm1,%xmm0
addss  0x28(%rbp),%xmm0
cvtsi2ssl 0x30(%rbp),%xmm1
addss  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<sum_combo>:
cvtsi2ss %edi,%xmm8
cvtsi2ss %esi,%xmm9
addss  %xmm8,%xmm0
addss  %xmm9,%xmm0
addss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
addss  %xmm1,%xmm0
addss  %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
addss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %r8d,%xmm1
addss  %xmm3,%xmm0
xorps  %xmm2,%xmm2
cvtsi2ss %r9d,%xmm2
addss  %xmm1,%xmm0
addss  %xmm4,%xmm0
addss  %xmm2,%xmm0
addss  %xmm5,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x8(%rsp),%xmm1
addss  %xmm1,%xmm0
addss  %xmm6,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x10(%rsp),%xmm1
addss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x18(%rsp),%xmm1
addss  %xmm7,%xmm0
addss  %xmm1,%xmm0
addss  0x20(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x28(%rsp),%xmm1
addss  %xmm1,%xmm0
ret

LLVM IR (-O0):
define float @sum_combo(i32 %0, float %1, i32 %2, float %3, i32 %4, float %5, i32 %6, float %7, i32 %8, float %9, i32 %10, float %11, i32 %12, float %13, i32 %14, float %15, i32 %16, float %17, i32 %18) {
%20 = alloca i32
%21 = alloca float
%22 = alloca i32
%23 = alloca float
%24 = alloca i32
%25 = alloca float
%26 = alloca i32
%27 = alloca float
%28 = alloca i32
%29 = alloca float
%30 = alloca i32
%31 = alloca float
%32 = alloca i32
%33 = alloca float
%34 = alloca i32
%35 = alloca float
%36 = alloca i32
%37 = alloca float
%38 = alloca i32
store i32 %0, i32* %20
store float %1, float* %21
store i32 %2, i32* %22
store float %3, float* %23
store i32 %4, i32* %24
store float %5, float* %25
store i32 %6, i32* %26
store float %7, float* %27
store i32 %8, i32* %28
store float %9, float* %29
store i32 %10, i32* %30
store float %11, float* %31
store i32 %12, i32* %32
store float %13, float* %33
store i32 %14, i32* %34
store float %15, float* %35
store i32 %16, i32* %36
store float %17, float* %37
store i32 %18, i32* %38
%39 = load i32, i32* %20
%40 = sitofp i32 %39 to float
%41 = load float, float* %21
%42 = fadd float %40, %41
%43 = load i32, i32* %22
%44 = sitofp i32 %43 to float
%45 = fadd float %42, %44
%46 = load float, float* %23
%47 = fadd float %45, %46
%48 = load i32, i32* %24
%49 = sitofp i32 %48 to float
%50 = fadd float %47, %49
%51 = load float, float* %25
%52 = fadd float %50, %51
%53 = load i32, i32* %26
%54 = sitofp i32 %53 to float
%55 = fadd float %52, %54
%56 = load float, float* %27
%57 = fadd float %55, %56
%58 = load i32, i32* %28
%59 = sitofp i32 %58 to float
%60 = fadd float %57, %59
%61 = load float, float* %29
%62 = fadd float %60, %61
%63 = load i32, i32* %30
%64 = sitofp i32 %63 to float
%65 = fadd float %62, %64
%66 = load float, float* %31
%67 = fadd float %65, %66
%68 = load i32, i32* %32
%69 = sitofp i32 %68 to float
%70 = fadd float %67, %69
%71 = load float, float* %33
%72 = fadd float %70, %71
%73 = load i32, i32* %34
%74 = sitofp i32 %73 to float
%75 = fadd float %72, %74
%76 = load float, float* %35
%77 = fadd float %75, %76
%78 = load i32, i32* %36
%79 = sitofp i32 %78 to float
%80 = fadd float %77, %79
%81 = load float, float* %37
%82 = fadd float %80, %81
%83 = load i32, i32* %38
%84 = sitofp i32 %83 to float
%85 = fadd float %82, %84
ret float %85
}

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