long double test(long double x0, long double x1, long double x2, long double x3,
                 long double x4, long double x5, long double x6, long double x7,
                 long double x8, long double x9, long double x10,
                 long double x11, long double x12, long double x13,
                 long double x14, long double x15) {
  while (x15 < 1E+30) {
    x0 = (roundl(x2));
    x1 = (roundl(x3)) + 1;
    x2 = (roundl(x4)) + 2;
    x3 = (roundl(x5)) + 3;
    x4 = (roundl(x6)) + 4;
    x5 = (roundl(x7)) + 5;
    x6 = (roundl(x8)) + 6;
    x7 = (roundl(x9)) + 7;
    x8 = (roundl(x10)) + 8;
    x9 = (roundl(x11)) + 9;
    x10 = (roundl(x12)) + 10;
    x11 = (roundl(x13)) + 11;
    x12 = (roundl(x14)) + 12;
    x13 = (roundl(x15)) + 13;
    x14 = (roundl(x0)) + 14;
    x15 = (roundl(x1)) + 15;
  }
  return x15;
}


x86 assembly (clang, -O0):
<test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x180,%rsp
fldt   0x100(%rbp)
fstpt  -0x10c(%rbp)
fldt   0xf0(%rbp)
fldt   0xe0(%rbp)
fldt   0xd0(%rbp)
fldt   0xc0(%rbp)
fldt   0xb0(%rbp)
fldt   0xa0(%rbp)
fldt   0x90(%rbp)
fstpt  -0x118(%rbp)
fldt   0x80(%rbp)
fstpt  -0x124(%rbp)
fldt   0x70(%rbp)
fstpt  -0x130(%rbp)
fldt   0x60(%rbp)
fstpt  -0x13c(%rbp)
fldt   0x50(%rbp)
fstpt  -0x148(%rbp)
fldt   0x40(%rbp)
fstpt  -0x154(%rbp)
fldt   0x30(%rbp)
fstpt  -0x160(%rbp)
fldt   0x20(%rbp)
fstpt  -0x16c(%rbp)
fldt   0x10(%rbp)
fstpt  -0x10(%rbp)
fldt   -0x16c(%rbp)
fstpt  -0x20(%rbp)
fldt   -0x160(%rbp)
fstpt  -0x30(%rbp)
fldt   -0x154(%rbp)
fstpt  -0x40(%rbp)
fldt   -0x148(%rbp)
fstpt  -0x50(%rbp)
fldt   -0x13c(%rbp)
fstpt  -0x60(%rbp)
fldt   -0x130(%rbp)
fstpt  -0x70(%rbp)
fldt   -0x124(%rbp)
fstpt  -0x80(%rbp)
fldt   -0x118(%rbp)
fstpt  -0x90(%rbp)
fldt   -0x10c(%rbp)
fxch   %st(1)
fstpt  -0xa0(%rbp)
fxch   %st(1)
fstpt  -0xb0(%rbp)
fxch   %st(1)
fstpt  -0xc0(%rbp)
fxch   %st(1)
fstpt  -0xd0(%rbp)
fxch   %st(1)
fstpt  -0xe0(%rbp)
fxch   %st(1)
fstpt  -0xf0(%rbp)
fstpt  -0x100(%rbp)
fldt   -0x100(%rbp)
fldl   0xdce(%rip)
fucomip %st(1),%st
fstp   %st(0)
jbe    13ea <test+0x2da>
jmp    1241 <test+0x131>
fldt   -0x30(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
fstpt  -0x10(%rbp)
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
fld1
faddp  %st,%st(1)
fstpt  -0x20(%rbp)
fldt   -0x50(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd90(%rip)
faddp  %st,%st(1)
fstpt  -0x30(%rbp)
fldt   -0x60(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd7c(%rip)
faddp  %st,%st(1)
fstpt  -0x40(%rbp)
fldt   -0x70(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd68(%rip)
faddp  %st,%st(1)
fstpt  -0x50(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd54(%rip)
faddp  %st,%st(1)
fstpt  -0x60(%rbp)
fldt   -0x90(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd3d(%rip)
faddp  %st,%st(1)
fstpt  -0x70(%rbp)
fldt   -0xa0(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd26(%rip)
faddp  %st,%st(1)
fstpt  -0x80(%rbp)
fldt   -0xb0(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xd0f(%rip)
faddp  %st,%st(1)
fstpt  -0x90(%rbp)
fldt   -0xc0(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xcf5(%rip)
faddp  %st,%st(1)
fstpt  -0xa0(%rbp)
fldt   -0xd0(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xcdb(%rip)
faddp  %st,%st(1)
fstpt  -0xb0(%rbp)
fldt   -0xe0(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xcc1(%rip)
faddp  %st,%st(1)
fstpt  -0xc0(%rbp)
fldt   -0xf0(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xca7(%rip)
faddp  %st,%st(1)
fstpt  -0xd0(%rbp)
fldt   -0x100(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xc8d(%rip)
faddp  %st,%st(1)
fstpt  -0xe0(%rbp)
fldt   -0x10(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xc76(%rip)
faddp  %st,%st(1)
fstpt  -0xf0(%rbp)
fldt   -0x20(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1030 <roundl@plt>
flds   0xc5f(%rip)
faddp  %st,%st(1)
fstpt  -0x100(%rbp)
jmp    1226 <test+0x116>
fldt   -0x100(%rbp)
add    $0x180,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test>:
sub    $0x88,%rsp
fldt   0x180(%rsp)
fldt   0x160(%rsp)
fstpt  0x28(%rsp)
fldt   0x140(%rsp)
fldt   0x120(%rsp)
fldt   0x100(%rsp)
fldt   0xe0(%rsp)
fldl   0xeb5(%rip)
fucomi %st(5),%st
fldt   0xc0(%rsp)
jbe    1242 <test+0x132>
fxch   %st(5)
fstpt  0x1c(%rsp)
fldt   0x28(%rsp)
fstp   %st(0)
fldt   0x1c(%rsp)
fstp   %st(0)
fxch   %st(3)
fstpt  0x4c(%rsp)
fxch   %st(1)
fstpt  0x40(%rsp)
fstpt  0x34(%rsp)
fstpt  0x58(%rsp)
fxch   %st(1)
fstpt  0x70(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fld1
faddp  %st,%st(1)
fstpt  0x7c(%rsp)
fldt   0x34(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fadds  0xe60(%rip)
fstpt  0x64(%rsp)
fldt   0x40(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fadds  0xe4e(%rip)
fstpt  0x34(%rsp)
fldt   0x4c(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fadds  0xe3c(%rip)
fstpt  0x40(%rsp)
fldt   0x1c(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fadds  0xe2a(%rip)
fstpt  0x4c(%rsp)
fldt   0x28(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fadds  0xe18(%rip)
fstpt  0x1c(%rsp)
fldt   0x70(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fadds  0xe06(%rip)
fstpt  0x28(%rsp)
fldt   0x7c(%rsp)
fstpt  (%rsp)
call   1030 <roundl@plt>
fldt   0x64(%rsp)
fldt   0x58(%rsp)
fxch   %st(2)
fadds  0xdea(%rip)
fxch   %st(2)
fucomip %st(2),%st
ja     1180 <test+0x70>
jmp    1250 <test+0x140>
fstp   %st(1)
fstp   %st(0)
fstp   %st(3)
fstp   %st(1)
fstp   %st(0)
fstp   %st(0)
fldz
fstp   %st(0)
add    $0x88,%rsp
ret

LLVM IR (-O0):
define x86_fp80 @test(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 %8, x86_fp80 %9, x86_fp80 %10, x86_fp80 %11, x86_fp80 %12, x86_fp80 %13, x86_fp80 %14, x86_fp80 %15) {
%17 = alloca x86_fp80
%18 = alloca x86_fp80
%19 = alloca x86_fp80
%20 = alloca x86_fp80
%21 = alloca x86_fp80
%22 = alloca x86_fp80
%23 = alloca x86_fp80
%24 = alloca x86_fp80
%25 = alloca x86_fp80
%26 = alloca x86_fp80
%27 = alloca x86_fp80
%28 = alloca x86_fp80
%29 = alloca x86_fp80
%30 = alloca x86_fp80
%31 = alloca x86_fp80
%32 = alloca x86_fp80
store x86_fp80 %0, x86_fp80* %17
store x86_fp80 %1, x86_fp80* %18
store x86_fp80 %2, x86_fp80* %19
store x86_fp80 %3, x86_fp80* %20
store x86_fp80 %4, x86_fp80* %21
store x86_fp80 %5, x86_fp80* %22
store x86_fp80 %6, x86_fp80* %23
store x86_fp80 %7, x86_fp80* %24
store x86_fp80 %8, x86_fp80* %25
store x86_fp80 %9, x86_fp80* %26
store x86_fp80 %10, x86_fp80* %27
store x86_fp80 %11, x86_fp80* %28
store x86_fp80 %12, x86_fp80* %29
store x86_fp80 %13, x86_fp80* %30
store x86_fp80 %14, x86_fp80* %31
store x86_fp80 %15, x86_fp80* %32
br label %33
33: ; preds = %36, %16
%34 = load x86_fp80, x86_fp80* %32
%35 = fcmp olt x86_fp80 %34, 0xK4062C9F2C9CD04675000
br i1 %35, label %36, label %84
36: ; preds = %33
%37 = load x86_fp80, x86_fp80* %19
%38 = call x86_fp80 @llvm.round.f80(x86_fp80 %37)
store x86_fp80 %38, x86_fp80* %17
%39 = load x86_fp80, x86_fp80* %20
%40 = call x86_fp80 @llvm.round.f80(x86_fp80 %39)
%41 = fadd x86_fp80 %40, 0xK3FFF8000000000000000
store x86_fp80 %41, x86_fp80* %18
%42 = load x86_fp80, x86_fp80* %21
%43 = call x86_fp80 @llvm.round.f80(x86_fp80 %42)
%44 = fadd x86_fp80 %43, 0xK40008000000000000000
store x86_fp80 %44, x86_fp80* %19
%45 = load x86_fp80, x86_fp80* %22
%46 = call x86_fp80 @llvm.round.f80(x86_fp80 %45)
%47 = fadd x86_fp80 %46, 0xK4000C000000000000000
store x86_fp80 %47, x86_fp80* %20
%48 = load x86_fp80, x86_fp80* %23
%49 = call x86_fp80 @llvm.round.f80(x86_fp80 %48)
%50 = fadd x86_fp80 %49, 0xK40018000000000000000
store x86_fp80 %50, x86_fp80* %21
%51 = load x86_fp80, x86_fp80* %24
%52 = call x86_fp80 @llvm.round.f80(x86_fp80 %51)
%53 = fadd x86_fp80 %52, 0xK4001A000000000000000
store x86_fp80 %53, x86_fp80* %22
%54 = load x86_fp80, x86_fp80* %25
%55 = call x86_fp80 @llvm.round.f80(x86_fp80 %54)
%56 = fadd x86_fp80 %55, 0xK4001C000000000000000
store x86_fp80 %56, x86_fp80* %23
%57 = load x86_fp80, x86_fp80* %26
%58 = call x86_fp80 @llvm.round.f80(x86_fp80 %57)
%59 = fadd x86_fp80 %58, 0xK4001E000000000000000
store x86_fp80 %59, x86_fp80* %24
%60 = load x86_fp80, x86_fp80* %27
%61 = call x86_fp80 @llvm.round.f80(x86_fp80 %60)
%62 = fadd x86_fp80 %61, 0xK40028000000000000000
store x86_fp80 %62, x86_fp80* %25
%63 = load x86_fp80, x86_fp80* %28
%64 = call x86_fp80 @llvm.round.f80(x86_fp80 %63)
%65 = fadd x86_fp80 %64, 0xK40029000000000000000
store x86_fp80 %65, x86_fp80* %26
%66 = load x86_fp80, x86_fp80* %29
%67 = call x86_fp80 @llvm.round.f80(x86_fp80 %66)
%68 = fadd x86_fp80 %67, 0xK4002A000000000000000
store x86_fp80 %68, x86_fp80* %27
%69 = load x86_fp80, x86_fp80* %30
%70 = call x86_fp80 @llvm.round.f80(x86_fp80 %69)
%71 = fadd x86_fp80 %70, 0xK4002B000000000000000
store x86_fp80 %71, x86_fp80* %28
%72 = load x86_fp80, x86_fp80* %31
%73 = call x86_fp80 @llvm.round.f80(x86_fp80 %72)
%74 = fadd x86_fp80 %73, 0xK4002C000000000000000
store x86_fp80 %74, x86_fp80* %29
%75 = load x86_fp80, x86_fp80* %32
%76 = call x86_fp80 @llvm.round.f80(x86_fp80 %75)
%77 = fadd x86_fp80 %76, 0xK4002D000000000000000
store x86_fp80 %77, x86_fp80* %30
%78 = load x86_fp80, x86_fp80* %17
%79 = call x86_fp80 @llvm.round.f80(x86_fp80 %78)
%80 = fadd x86_fp80 %79, 0xK4002E000000000000000
store x86_fp80 %80, x86_fp80* %31
%81 = load x86_fp80, x86_fp80* %18
%82 = call x86_fp80 @llvm.round.f80(x86_fp80 %81)
%83 = fadd x86_fp80 %82, 0xK4002F000000000000000
store x86_fp80 %83, x86_fp80* %32
br label %33
84: ; preds = %33
%85 = load x86_fp80, x86_fp80* %32
ret x86_fp80 %85
}

LLVM IR (-O2):
define x86_fp80 @test(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 %8, x86_fp80 %9, x86_fp80 %10, x86_fp80 %11, x86_fp80 %12, x86_fp80 %13, x86_fp80 %14, x86_fp80 %15) {
%17 = fcmp olt x86_fp80 %15, 0xK4062C9F2C9CD04675000
br i1 %17, label %18, label %43
18: ; preds = %16, %18
%19 = phi x86_fp80 [ %41, %18 ], [ %15, %16 ]
%20 = phi x86_fp80 [ %39, %18 ], [ %13, %16 ]
%21 = phi x86_fp80 [ %37, %18 ], [ %11, %16 ]
%22 = phi x86_fp80 [ %35, %18 ], [ %9, %16 ]
%23 = phi x86_fp80 [ %33, %18 ], [ %7, %16 ]
%24 = phi x86_fp80 [ %31, %18 ], [ %5, %16 ]
%25 = phi x86_fp80 [ %29, %18 ], [ %3, %16 ]
%26 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %25)
%27 = fadd x86_fp80 %26, 0xK3FFF8000000000000000
%28 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %24)
%29 = fadd x86_fp80 %28, 0xK4000C000000000000000
%30 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %23)
%31 = fadd x86_fp80 %30, 0xK4001A000000000000000
%32 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %22)
%33 = fadd x86_fp80 %32, 0xK4001E000000000000000
%34 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %21)
%35 = fadd x86_fp80 %34, 0xK40029000000000000000
%36 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %20)
%37 = fadd x86_fp80 %36, 0xK4002B000000000000000
%38 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %19)
%39 = fadd x86_fp80 %38, 0xK4002D000000000000000
%40 = tail call x86_fp80 @llvm.round.f80(x86_fp80 %27)
%41 = fadd x86_fp80 %40, 0xK4002F000000000000000
%42 = fcmp olt x86_fp80 %41, 0xK4062C9F2C9CD04675000
br i1 %42, label %18, label %43
43: ; preds = %18, %16
%44 = phi x86_fp80 [ %15, %16 ], [ %41, %18 ]
ret x86_fp80 %44
}