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 = ((x1) * (x3));
    x1 = ((x2) * (x4)) + 1;
    x2 = ((x3) * (x5)) + 2;
    x3 = ((x4) * (x6)) + 3;
    x4 = ((x5) * (x7)) + 4;
    x5 = ((x6) * (x8)) + 5;
    x6 = ((x7) * (x9)) + 6;
    x7 = ((x8) * (x10)) + 7;
    x8 = ((x9) * (x11)) + 8;
    x9 = ((x10) * (x12)) + 9;
    x10 = ((x11) * (x13)) + 10;
    x11 = ((x12) * (x14)) + 11;
    x12 = ((x13) * (x15)) + 12;
    x13 = ((x14) * (x0)) + 13;
    x14 = ((x15) * (x1)) + 14;
    x15 = ((x0) * (x2)) + 15;
  }
  return x15;
}


x86 assembly (clang, -O0):
<test>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%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   0xdde(%rip)
fucomip %st(1),%st
fstp   %st(0)
jbe    13a2 <test+0x2a2>
jmp    1231 <test+0x131>
fldt   -0x20(%rbp)
fldt   -0x40(%rbp)
fmulp  %st,%st(1)
fstpt  -0x10(%rbp)
fldt   -0x30(%rbp)
fldt   -0x50(%rbp)
fmulp  %st,%st(1)
fld1
faddp  %st,%st(1)
fstpt  -0x20(%rbp)
fldt   -0x40(%rbp)
fldt   -0x60(%rbp)
fmulp  %st,%st(1)
flds   0xdaf(%rip)
faddp  %st,%st(1)
fstpt  -0x30(%rbp)
fldt   -0x50(%rbp)
fldt   -0x70(%rbp)
fmulp  %st,%st(1)
flds   0xda0(%rip)
faddp  %st,%st(1)
fstpt  -0x40(%rbp)
fldt   -0x60(%rbp)
fldt   -0x80(%rbp)
fmulp  %st,%st(1)
flds   0xd91(%rip)
faddp  %st,%st(1)
fstpt  -0x50(%rbp)
fldt   -0x70(%rbp)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
flds   0xd7f(%rip)
faddp  %st,%st(1)
fstpt  -0x60(%rbp)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
flds   0xd6d(%rip)
faddp  %st,%st(1)
fstpt  -0x70(%rbp)
fldt   -0x90(%rbp)
fldt   -0xb0(%rbp)
fmulp  %st,%st(1)
flds   0xd58(%rip)
faddp  %st,%st(1)
fstpt  -0x80(%rbp)
fldt   -0xa0(%rbp)
fldt   -0xc0(%rbp)
fmulp  %st,%st(1)
flds   0xd43(%rip)
faddp  %st,%st(1)
fstpt  -0x90(%rbp)
fldt   -0xb0(%rbp)
fldt   -0xd0(%rbp)
fmulp  %st,%st(1)
flds   0xd2b(%rip)
faddp  %st,%st(1)
fstpt  -0xa0(%rbp)
fldt   -0xc0(%rbp)
fldt   -0xe0(%rbp)
fmulp  %st,%st(1)
flds   0xd13(%rip)
faddp  %st,%st(1)
fstpt  -0xb0(%rbp)
fldt   -0xd0(%rbp)
fldt   -0xf0(%rbp)
fmulp  %st,%st(1)
flds   0xcfb(%rip)
faddp  %st,%st(1)
fstpt  -0xc0(%rbp)
fldt   -0xe0(%rbp)
fldt   -0x100(%rbp)
fmulp  %st,%st(1)
flds   0xce3(%rip)
faddp  %st,%st(1)
fstpt  -0xd0(%rbp)
fldt   -0xf0(%rbp)
fldt   -0x10(%rbp)
fmulp  %st,%st(1)
flds   0xcce(%rip)
faddp  %st,%st(1)
fstpt  -0xe0(%rbp)
fldt   -0x100(%rbp)
fldt   -0x20(%rbp)
fmulp  %st,%st(1)
flds   0xcb9(%rip)
faddp  %st,%st(1)
fstpt  -0xf0(%rbp)
fldt   -0x10(%rbp)
fldt   -0x30(%rbp)
fmulp  %st,%st(1)
flds   0xca7(%rip)
faddp  %st,%st(1)
fstpt  -0x100(%rbp)
jmp    1216 <test+0x116>
fldt   -0x100(%rbp)
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test>:
sub    $0x38,%rsp
fldt   0x130(%rsp)
fldt   0x120(%rsp)
fldt   0x110(%rsp)
fldt   0x100(%rsp)
fldt   0xf0(%rsp)
fstpt  -0x70(%rsp)
fldt   0xe0(%rsp)
fstpt  -0x28(%rsp)
fldl   0xec4(%rip)
fld    %st(0)
fstpt  -0x10(%rsp)
fld    %st(4)
fstpt  -0x1c(%rsp)
fucomip %st(4),%st
fstp   %st(3)
fldt   0xd0(%rsp)
fstpt  -0x34(%rsp)
fldt   0xc0(%rsp)
fstpt  -0x58(%rsp)
fldt   0xb0(%rsp)
fstpt  -0x7c(%rsp)
fldt   0xa0(%rsp)
fstpt  -0x64(%rsp)
fldt   0x90(%rsp)
fstpt  -0x40(%rsp)
fldt   0x80(%rsp)
fstpt  -0x4c(%rsp)
fldt   0x70(%rsp)
fldt   0x60(%rsp)
fldt   0x50(%rsp)
jbe    1312 <test+0x212>
fxch   %st(4)
fstpt  0x14(%rsp)
fxch   %st(2)
fstpt  0x8(%rsp)
fxch   %st(3)
fstpt  -0x4(%rsp)
fldt   -0x70(%rsp)
fstp   %st(0)
fldt   -0x28(%rsp)
fstp   %st(0)
fldt   -0x10(%rsp)
fstp   %st(0)
fldt   -0x34(%rsp)
fstp   %st(0)
fldt   -0x58(%rsp)
fstp   %st(0)
fldt   -0x7c(%rsp)
fldt   -0x64(%rsp)
fldt   -0x40(%rsp)
fstp   %st(0)
fldt   -0x4c(%rsp)
fstp   %st(0)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
fldt   -0x4c(%rsp)
fmul   %st,%st(3)
fxch   %st(3)
fstpt  0x2c(%rsp)
fldt   -0x40(%rsp)
fld    %st(5)
fmul   %st(1),%st
fadds  0xdfe(%rip)
fstpt  0x20(%rsp)
fxch   %st(4)
fmulp  %st,%st(5)
fmul   %st,%st(2)
fxch   %st(2)
fadds  0xdf0(%rip)
fstpt  -0x7c(%rsp)
fmul   %st,%st(2)
fxch   %st(2)
fadds  0xde6(%rip)
fstpt  -0x4c(%rsp)
fldt   -0x58(%rsp)
fmul   %st,%st(1)
fxch   %st(1)
fadds  0xdd8(%rip)
fstpt  -0x40(%rsp)
fldt   -0x34(%rsp)
fmul   %st,%st(2)
fxch   %st(2)
fadds  0xdca(%rip)
fstpt  -0x64(%rsp)
fldt   -0x28(%rsp)
fmul   %st,%st(1)
fxch   %st(1)
fadds  0xdbc(%rip)
fldt   -0x70(%rsp)
fmul   %st,%st(3)
fxch   %st(3)
fadds  0xdb2(%rip)
fstpt  -0x58(%rsp)
fldt   -0x4(%rsp)
fmul   %st,%st(2)
fxch   %st(2)
fadds  0xda4(%rip)
fstpt  -0x34(%rsp)
fldt   0x8(%rsp)
fmul   %st,%st(3)
fxch   %st(3)
fadds  0xd96(%rip)
fstpt  -0x28(%rsp)
fldt   -0x1c(%rsp)
fldt   0x14(%rsp)
fmul   %st,%st(3)
fxch   %st(3)
fadds  0xd84(%rip)
fstpt  -0x70(%rsp)
fmul   %st,%st(3)
fxch   %st(3)
fadds  0xd7a(%rip)
fstpt  -0x4(%rsp)
fxch   %st(1)
fmul   %st(3),%st
fadds  0xd70(%rip)
fstpt  0x8(%rsp)
fld1
fldt   0x2c(%rsp)
faddp  %st,%st(1)
fmul   %st,%st(2)
fldt   0x20(%rsp)
fxch   %st(3)
fadds  0xd5a(%rip)
fstpt  0x14(%rsp)
fxch   %st(3)
fmul   %st(2),%st
fadds  0xd50(%rip)
fldt   -0x10(%rsp)
fld    %st(1)
fstpt  -0x1c(%rsp)
fucomip %st(1),%st
fstp   %st(0)
fldt   -0x64(%rsp)
fldt   -0x7c(%rsp)
fxch   %st(4)
fxch   %st(3)
fxch   %st(2)
fxch   %st(1)
ja     11f0 <test+0xf0>
jmp    1332 <test+0x232>
fstp   %st(1)
fstp   %st(0)
fstp   %st(0)
fstp   %st(1)
fstp   %st(0)
fstp   %st(0)
fldz
fldz
fldz
fldz
fldz
fxch   %st(1)
fxch   %st(4)
fxch   %st(2)
fxch   %st(3)
fxch   %st(2)
fstp   %st(0)
fstp   %st(1)
fstp   %st(1)
fstp   %st(1)
fstp   %st(0)
fldt   -0x1c(%rsp)
add    $0x38,%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 %85
36: ; preds = %33
%37 = load x86_fp80, x86_fp80* %18
%38 = load x86_fp80, x86_fp80* %20
%39 = fmul x86_fp80 %37, %38
store x86_fp80 %39, x86_fp80* %17
%40 = load x86_fp80, x86_fp80* %19
%41 = load x86_fp80, x86_fp80* %21
%42 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %40, x86_fp80 %41, x86_fp80 0xK3FFF8000000000000000)
store x86_fp80 %42, x86_fp80* %18
%43 = load x86_fp80, x86_fp80* %20
%44 = load x86_fp80, x86_fp80* %22
%45 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %43, x86_fp80 %44, x86_fp80 0xK40008000000000000000)
store x86_fp80 %45, x86_fp80* %19
%46 = load x86_fp80, x86_fp80* %21
%47 = load x86_fp80, x86_fp80* %23
%48 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %46, x86_fp80 %47, x86_fp80 0xK4000C000000000000000)
store x86_fp80 %48, x86_fp80* %20
%49 = load x86_fp80, x86_fp80* %22
%50 = load x86_fp80, x86_fp80* %24
%51 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %49, x86_fp80 %50, x86_fp80 0xK40018000000000000000)
store x86_fp80 %51, x86_fp80* %21
%52 = load x86_fp80, x86_fp80* %23
%53 = load x86_fp80, x86_fp80* %25
%54 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %52, x86_fp80 %53, x86_fp80 0xK4001A000000000000000)
store x86_fp80 %54, x86_fp80* %22
%55 = load x86_fp80, x86_fp80* %24
%56 = load x86_fp80, x86_fp80* %26
%57 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %55, x86_fp80 %56, x86_fp80 0xK4001C000000000000000)
store x86_fp80 %57, x86_fp80* %23
%58 = load x86_fp80, x86_fp80* %25
%59 = load x86_fp80, x86_fp80* %27
%60 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %58, x86_fp80 %59, x86_fp80 0xK4001E000000000000000)
store x86_fp80 %60, x86_fp80* %24
%61 = load x86_fp80, x86_fp80* %26
%62 = load x86_fp80, x86_fp80* %28
%63 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %61, x86_fp80 %62, x86_fp80 0xK40028000000000000000)
store x86_fp80 %63, x86_fp80* %25
%64 = load x86_fp80, x86_fp80* %27
%65 = load x86_fp80, x86_fp80* %29
%66 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %64, x86_fp80 %65, x86_fp80 0xK40029000000000000000)
store x86_fp80 %66, x86_fp80* %26
%67 = load x86_fp80, x86_fp80* %28
%68 = load x86_fp80, x86_fp80* %30
%69 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %67, x86_fp80 %68, x86_fp80 0xK4002A000000000000000)
store x86_fp80 %69, x86_fp80* %27
%70 = load x86_fp80, x86_fp80* %29
%71 = load x86_fp80, x86_fp80* %31
%72 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %70, x86_fp80 %71, x86_fp80 0xK4002B000000000000000)
store x86_fp80 %72, x86_fp80* %28
%73 = load x86_fp80, x86_fp80* %30
%74 = load x86_fp80, x86_fp80* %32
%75 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %73, x86_fp80 %74, x86_fp80 0xK4002C000000000000000)
store x86_fp80 %75, x86_fp80* %29
%76 = load x86_fp80, x86_fp80* %31
%77 = load x86_fp80, x86_fp80* %17
%78 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %76, x86_fp80 %77, x86_fp80 0xK4002D000000000000000)
store x86_fp80 %78, x86_fp80* %30
%79 = load x86_fp80, x86_fp80* %32
%80 = load x86_fp80, x86_fp80* %18
%81 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %79, x86_fp80 %80, x86_fp80 0xK4002E000000000000000)
store x86_fp80 %81, x86_fp80* %31
%82 = load x86_fp80, x86_fp80* %17
%83 = load x86_fp80, x86_fp80* %19
%84 = call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %82, x86_fp80 %83, x86_fp80 0xK4002F000000000000000)
store x86_fp80 %84, x86_fp80* %32
br label %33
85: ; preds = %33
%86 = load x86_fp80, x86_fp80* %32
ret x86_fp80 %86
}

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 %51
18: ; preds = %16, %18
%19 = phi x86_fp80 [ %49, %18 ], [ %15, %16 ]
%20 = phi x86_fp80 [ %48, %18 ], [ %14, %16 ]
%21 = phi x86_fp80 [ %47, %18 ], [ %13, %16 ]
%22 = phi x86_fp80 [ %46, %18 ], [ %12, %16 ]
%23 = phi x86_fp80 [ %45, %18 ], [ %11, %16 ]
%24 = phi x86_fp80 [ %44, %18 ], [ %10, %16 ]
%25 = phi x86_fp80 [ %43, %18 ], [ %9, %16 ]
%26 = phi x86_fp80 [ %42, %18 ], [ %8, %16 ]
%27 = phi x86_fp80 [ %41, %18 ], [ %7, %16 ]
%28 = phi x86_fp80 [ %40, %18 ], [ %6, %16 ]
%29 = phi x86_fp80 [ %39, %18 ], [ %5, %16 ]
%30 = phi x86_fp80 [ %38, %18 ], [ %4, %16 ]
%31 = phi x86_fp80 [ %37, %18 ], [ %3, %16 ]
%32 = phi x86_fp80 [ %36, %18 ], [ %2, %16 ]
%33 = phi x86_fp80 [ %35, %18 ], [ %1, %16 ]
%34 = fmul x86_fp80 %33, %31
%35 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %32, x86_fp80 %30, x86_fp80 0xK3FFF8000000000000000)
%36 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %31, x86_fp80 %29, x86_fp80 0xK40008000000000000000)
%37 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %30, x86_fp80 %28, x86_fp80 0xK4000C000000000000000)
%38 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %29, x86_fp80 %27, x86_fp80 0xK40018000000000000000)
%39 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %28, x86_fp80 %26, x86_fp80 0xK4001A000000000000000)
%40 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %27, x86_fp80 %25, x86_fp80 0xK4001C000000000000000)
%41 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %26, x86_fp80 %24, x86_fp80 0xK4001E000000000000000)
%42 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %25, x86_fp80 %23, x86_fp80 0xK40028000000000000000)
%43 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %24, x86_fp80 %22, x86_fp80 0xK40029000000000000000)
%44 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %23, x86_fp80 %21, x86_fp80 0xK4002A000000000000000)
%45 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %22, x86_fp80 %20, x86_fp80 0xK4002B000000000000000)
%46 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %21, x86_fp80 %19, x86_fp80 0xK4002C000000000000000)
%47 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %20, x86_fp80 %34, x86_fp80 0xK4002D000000000000000)
%48 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %19, x86_fp80 %35, x86_fp80 0xK4002E000000000000000)
%49 = tail call x86_fp80 @llvm.fmuladd.f80(x86_fp80 %34, x86_fp80 %36, x86_fp80 0xK4002F000000000000000)
%50 = fcmp olt x86_fp80 %49, 0xK4062C9F2C9CD04675000
br i1 %50, label %18, label %51
51: ; preds = %18, %16
%52 = phi x86_fp80 [ %15, %16 ], [ %49, %18 ]
ret x86_fp80 %52
}