extern double ppcfltest2(int x1, double x2, int x3, double x4, int x5,
                         long long x5_5, double x6, int x7, double x8,
                         long long x8_5, int x8_75, double x9, double x10,
                         double x11, double x12, double x13, float x14,
                         double x15, int x15_5, double x16, int x16_5,
                         long long x17, double x18, int x18_5, double x19) {
  return x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 +
         x14 + x15 + x16 + x17 + x18 + x19 + x5_5 + x8_5 + x8_75 + x15_5 +
         x16_5 + x18_5;
}


x86 assembly (clang, -O0):
<ppcfltest2>:
push   %rbp
mov    %rsp,%rbp
movsd  0x60(%rbp),%xmm8
mov    0x58(%rbp),%eax
movsd  0x50(%rbp),%xmm8
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%eax
movsd  0x38(%rbp),%xmm8
mov    0x30(%rbp),%eax
movsd  0x28(%rbp),%xmm8
movss  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movsd  %xmm1,-0x20(%rbp)
mov    %edx,-0x24(%rbp)
mov    %rcx,-0x30(%rbp)
movsd  %xmm2,-0x38(%rbp)
mov    %r8d,-0x3c(%rbp)
movsd  %xmm3,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  %xmm4,-0x58(%rbp)
movsd  %xmm5,-0x60(%rbp)
movsd  %xmm6,-0x68(%rbp)
movsd  %xmm7,-0x70(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x20(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x3c(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x48(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
addsd  0x18(%rbp),%xmm0
movss  0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
addsd  0x28(%rbp),%xmm0
addsd  0x38(%rbp),%xmm0
cvtsi2sdq 0x48(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  0x50(%rbp),%xmm0
addsd  0x60(%rbp),%xmm0
cvtsi2sdq -0x30(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdq -0x50(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl 0x10(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl 0x30(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl 0x40(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl 0x58(%rbp),%xmm1
addsd  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<ppcfltest2>:
cvtsi2sd %edi,%xmm8
movss  0x18(%rsp),%xmm9
addsd  %xmm8,%xmm0
xorps  %xmm8,%xmm8
cvtsi2sd %esi,%xmm8
addsd  %xmm8,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r8d,%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm3,%xmm0
addsd  %xmm4,%xmm0
addsd  %xmm5,%xmm0
addsd  %xmm6,%xmm0
addsd  %xmm7,%xmm0
addsd  0x10(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm9,%xmm1
addsd  %xmm1,%xmm0
addsd  0x20(%rsp),%xmm0
addsd  0x30(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdq 0x40(%rsp),%xmm1
addsd  %xmm1,%xmm0
addsd  0x48(%rsp),%xmm0
addsd  0x58(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %rcx,%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r9,%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl 0x8(%rsp),%xmm1
xorps  %xmm2,%xmm2
cvtsi2sdl 0x28(%rsp),%xmm2
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl 0x38(%rsp),%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl 0x50(%rsp),%xmm1
addsd  %xmm1,%xmm0
ret

LLVM IR (-O0):
define double @ppcfltest2(i32 %0, double %1, i32 %2, double %3, i32 %4, i64 %5, double %6, i32 %7, double %8, i64 %9, i32 %10, double %11, double %12, double %13, double %14, double %15, float %16, double %17, i32 %18, double %19, i32 %20, i64 %21, double %22, i32 %23, double %24) {
%26 = alloca i32
%27 = alloca double
%28 = alloca i32
%29 = alloca double
%30 = alloca i32
%31 = alloca i64
%32 = alloca double
%33 = alloca i32
%34 = alloca double
%35 = alloca i64
%36 = alloca i32
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca float
%43 = alloca double
%44 = alloca i32
%45 = alloca double
%46 = alloca i32
%47 = alloca i64
%48 = alloca double
%49 = alloca i32
%50 = alloca double
store i32 %0, i32* %26
store double %1, double* %27
store i32 %2, i32* %28
store double %3, double* %29
store i32 %4, i32* %30
store i64 %5, i64* %31
store double %6, double* %32
store i32 %7, i32* %33
store double %8, double* %34
store i64 %9, i64* %35
store i32 %10, i32* %36
store double %11, double* %37
store double %12, double* %38
store double %13, double* %39
store double %14, double* %40
store double %15, double* %41
store float %16, float* %42
store double %17, double* %43
store i32 %18, i32* %44
store double %19, double* %45
store i32 %20, i32* %46
store i64 %21, i64* %47
store double %22, double* %48
store i32 %23, i32* %49
store double %24, double* %50
%51 = load i32, i32* %26
%52 = sitofp i32 %51 to double
%53 = load double, double* %27
%54 = fadd double %52, %53
%55 = load i32, i32* %28
%56 = sitofp i32 %55 to double
%57 = fadd double %54, %56
%58 = load double, double* %29
%59 = fadd double %57, %58
%60 = load i32, i32* %30
%61 = sitofp i32 %60 to double
%62 = fadd double %59, %61
%63 = load double, double* %32
%64 = fadd double %62, %63
%65 = load i32, i32* %33
%66 = sitofp i32 %65 to double
%67 = fadd double %64, %66
%68 = load double, double* %34
%69 = fadd double %67, %68
%70 = load double, double* %37
%71 = fadd double %69, %70
%72 = load double, double* %38
%73 = fadd double %71, %72
%74 = load double, double* %39
%75 = fadd double %73, %74
%76 = load double, double* %40
%77 = fadd double %75, %76
%78 = load double, double* %41
%79 = fadd double %77, %78
%80 = load float, float* %42
%81 = fpext float %80 to double
%82 = fadd double %79, %81
%83 = load double, double* %43
%84 = fadd double %82, %83
%85 = load double, double* %45
%86 = fadd double %84, %85
%87 = load i64, i64* %47
%88 = sitofp i64 %87 to double
%89 = fadd double %86, %88
%90 = load double, double* %48
%91 = fadd double %89, %90
%92 = load double, double* %50
%93 = fadd double %91, %92
%94 = load i64, i64* %31
%95 = sitofp i64 %94 to double
%96 = fadd double %93, %95
%97 = load i64, i64* %35
%98 = sitofp i64 %97 to double
%99 = fadd double %96, %98
%100 = load i32, i32* %36
%101 = sitofp i32 %100 to double
%102 = fadd double %99, %101
%103 = load i32, i32* %44
%104 = sitofp i32 %103 to double
%105 = fadd double %102, %104
%106 = load i32, i32* %46
%107 = sitofp i32 %106 to double
%108 = fadd double %105, %107
%109 = load i32, i32* %49
%110 = sitofp i32 %109 to double
%111 = fadd double %108, %110
ret double %111
}

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