#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, long double, long double, long double,
                          long double, long double, long double, long double,
                          long double, long double);
long double cls_ldouble_fn(long double a1, long double a2, long double a3,
                           long double a4, long double a5, long double a6,
                           long double a7, long double a8) {
  long double r = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
  printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\n", a1, a2, a3, a4, a5, a6, a7,
         a8, r);
  return r;
}


x86 assembly (clang, -O0):
<cls_ldouble_fn>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
fldt   0x80(%rbp)
fstpt  -0xb4(%rbp)
fldt   0x70(%rbp)
fldt   0x60(%rbp)
fldt   0x50(%rbp)
fldt   0x40(%rbp)
fldt   0x30(%rbp)
fldt   0x20(%rbp)
fldt   0x10(%rbp)
fstpt  -0x10(%rbp)
fldt   -0xb4(%rbp)
fxch   %st(1)
fstpt  -0x20(%rbp)
fxch   %st(1)
fstpt  -0x30(%rbp)
fxch   %st(1)
fstpt  -0x40(%rbp)
fxch   %st(1)
fstpt  -0x50(%rbp)
fxch   %st(1)
fstpt  -0x60(%rbp)
fxch   %st(1)
fstpt  -0x70(%rbp)
fstpt  -0x80(%rbp)
fldt   -0x10(%rbp)
fldt   -0x20(%rbp)
faddp  %st,%st(1)
fldt   -0x30(%rbp)
faddp  %st,%st(1)
fldt   -0x40(%rbp)
faddp  %st,%st(1)
fldt   -0x50(%rbp)
faddp  %st,%st(1)
fldt   -0x60(%rbp)
faddp  %st,%st(1)
fldt   -0x70(%rbp)
faddp  %st,%st(1)
fldt   -0x80(%rbp)
faddp  %st,%st(1)
fstpt  -0x90(%rbp)
fldt   -0x10(%rbp)
fstpt  -0x9c(%rbp)
fldt   -0x20(%rbp)
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
fstpt  -0xa8(%rbp)
fldt   -0x90(%rbp)
mov    %rsp,%rax
fstpt  0x80(%rax)
fldt   -0xa8(%rbp)
fstpt  0x70(%rax)
fldt   -0x9c(%rbp)
fxch   %st(1)
fstpt  0x60(%rax)
fxch   %st(1)
fstpt  0x50(%rax)
fxch   %st(1)
fstpt  0x40(%rax)
fxch   %st(1)
fstpt  0x30(%rax)
fxch   %st(1)
fstpt  0x20(%rax)
fxch   %st(1)
fstpt  0x10(%rax)
fstpt  (%rax)
lea    0xe05(%rip),%rdi
call   1030 <printf@plt>
fldt   -0x90(%rbp)
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cls_ldouble_fn>:
sub    $0xb8,%rsp
fldt   0x110(%rsp)
fld    %st(0)
fstpt  0xa0(%rsp)
fldt   0x100(%rsp)
fld    %st(0)
fstpt  0xac(%rsp)
fldt   0xf0(%rsp)
fldt   0xe0(%rsp)
fldt   0xd0(%rsp)
fldt   0xc0(%rsp)
fld    %st(0)
fadd   %st(2),%st
fadd   %st(3),%st
fadd   %st(4),%st
faddp  %st,%st(5)
fxch   %st(4)
faddp  %st,%st(5)
fldt   0x120(%rsp)
fadd   %st,%st(5)
fldt   0x130(%rsp)
fadd   %st,%st(6)
fld    %st(6)
fstpt  0x94(%rsp)
fstpt  0x70(%rsp)
fstpt  0x60(%rsp)
fldt   0xa0(%rsp)
fstpt  0x50(%rsp)
fldt   0xac(%rsp)
fstpt  0x40(%rsp)
fxch   %st(2)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
fstpt  0x10(%rsp)
fstpt  (%rsp)
fstpt  0x80(%rsp)
lea    0xe47(%rip),%rdi
call   1030 <printf@plt>
fldt   0x94(%rsp)
add    $0xb8,%rsp
ret

LLVM IR (-O0):
@.str = [38 x i8] c"%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\0A\00"
define x86_fp80 @cls_ldouble_fn(x86_fp80 %0, x86_fp80 %1, x86_fp80 %2, x86_fp80 %3, x86_fp80 %4, x86_fp80 %5, x86_fp80 %6, x86_fp80 %7) {
%9 = alloca x86_fp80
%10 = alloca x86_fp80
%11 = alloca x86_fp80
%12 = alloca x86_fp80
%13 = alloca x86_fp80
%14 = alloca x86_fp80
%15 = alloca x86_fp80
%16 = alloca x86_fp80
%17 = alloca x86_fp80
store x86_fp80 %0, x86_fp80* %9
store x86_fp80 %1, x86_fp80* %10
store x86_fp80 %2, x86_fp80* %11
store x86_fp80 %3, x86_fp80* %12
store x86_fp80 %4, x86_fp80* %13
store x86_fp80 %5, x86_fp80* %14
store x86_fp80 %6, x86_fp80* %15
store x86_fp80 %7, x86_fp80* %16
%18 = load x86_fp80, x86_fp80* %9
%19 = load x86_fp80, x86_fp80* %10
%20 = fadd x86_fp80 %18, %19
%21 = load x86_fp80, x86_fp80* %11
%22 = fadd x86_fp80 %20, %21
%23 = load x86_fp80, x86_fp80* %12
%24 = fadd x86_fp80 %22, %23
%25 = load x86_fp80, x86_fp80* %13
%26 = fadd x86_fp80 %24, %25
%27 = load x86_fp80, x86_fp80* %14
%28 = fadd x86_fp80 %26, %27
%29 = load x86_fp80, x86_fp80* %15
%30 = fadd x86_fp80 %28, %29
%31 = load x86_fp80, x86_fp80* %16
%32 = fadd x86_fp80 %30, %31
store x86_fp80 %32, x86_fp80* %17
%33 = load x86_fp80, x86_fp80* %9
%34 = load x86_fp80, x86_fp80* %10
%35 = load x86_fp80, x86_fp80* %11
%36 = load x86_fp80, x86_fp80* %12
%37 = load x86_fp80, x86_fp80* %13
%38 = load x86_fp80, x86_fp80* %14
%39 = load x86_fp80, x86_fp80* %15
%40 = load x86_fp80, x86_fp80* %16
%41 = load x86_fp80, x86_fp80* %17
%42 = call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0), x86_fp80 %33, x86_fp80 %34, x86_fp80 %35, x86_fp80 %36, x86_fp80 %37, x86_fp80 %38, x86_fp80 %39, x86_fp80 %40, x86_fp80 %41)
%43 = load x86_fp80, x86_fp80* %17
ret x86_fp80 %43
}

LLVM IR (-O2):
@.str = [38 x i8] c"%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\0A\00"
define x86_fp80 @cls_ldouble_fn(x86_fp80 %0, x86_fp80 %1, x86_fp80 %2, x86_fp80 %3, x86_fp80 %4, x86_fp80 %5, x86_fp80 %6, x86_fp80 %7) {
%9 = fadd x86_fp80 %0, %1
%10 = fadd x86_fp80 %9, %2
%11 = fadd x86_fp80 %10, %3
%12 = fadd x86_fp80 %11, %4
%13 = fadd x86_fp80 %12, %5
%14 = fadd x86_fp80 %13, %6
%15 = fadd x86_fp80 %14, %7
%16 = tail call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0), x86_fp80 %0, x86_fp80 %1, x86_fp80 %2, x86_fp80 %3, x86_fp80 %4, x86_fp80 %5, x86_fp80 %6, x86_fp80 %7, x86_fp80 %15)
ret x86_fp80 %15
}