void check_long_double(void) {
  do {
    do {
      long double a = __builtin_nanl("");
      long double b = -0.0l;
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs =
          __builtin_complex(__builtin_nanl(""), -0.0l);
      comparecl(cr, __builtin_nanl(""), -0.0l);
      comparecl(cs, __builtin_nanl(""), -0.0l);
    } while (0);
    do {
      long double a = __builtin_infl();
      long double b = -0.0l;
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs =
          __builtin_complex(__builtin_infl(), -0.0l);
      comparecl(cr, __builtin_infl(), -0.0l);
      comparecl(cs, __builtin_infl(), -0.0l);
    } while (0);
    do {
      long double a = __builtin_infl();
      long double b = __builtin_nanl("");
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs =
          __builtin_complex(__builtin_infl(), __builtin_nanl(""));
      comparecl(cr, __builtin_infl(), __builtin_nanl(""));
      comparecl(cs, __builtin_infl(), __builtin_nanl(""));
    } while (0);
    do {
      long double a = __builtin_infl();
      long double b = __builtin_infl();
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs =
          __builtin_complex(__builtin_infl(), __builtin_infl());
      comparecl(cr, __builtin_infl(), __builtin_infl());
      comparecl(cs, __builtin_infl(), __builtin_infl());
    } while (0);
  } while (0);
}


x86 assembly (clang, -O0):
<check_long_double>:
push   %rbp
mov    %rsp,%rbp
sub    $0x240,%rsp
jmp    1120 <check_long_double+0x10>
flds   0xeda(%rip)
fld    %st(0)
fstpt  -0x10(%rbp)
fldz
fchs
fld    %st(0)
fstpt  -0x20(%rbp)
fldt   -0x10(%rbp)
fldt   -0x20(%rbp)
fxch   %st(1)
fstpt  -0x40(%rbp)
fstpt  -0x30(%rbp)
fldt   -0x40(%rbp)
fldt   -0x30(%rbp)
fxch   %st(1)
fstpt  -0x60(%rbp)
fstpt  -0x50(%rbp)
movaps -0x60(%rbp),%xmm0
movaps -0x50(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x2ebb(%rip)
fldt   0x2ec5(%rip)
fxch   %st(1)
fstpt  -0x80(%rbp)
fstpt  -0x70(%rbp)
movaps -0x80(%rbp),%xmm0
movaps -0x70(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
fldz
fchs
fstpt  0x30(%rax)
flds   0xe5e(%rip)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
jmp    11b1 <check_long_double+0xa1>
flds   0xe4d(%rip)
fld    %st(0)
fstpt  -0x90(%rbp)
fldz
fchs
fld    %st(0)
fstpt  -0xa0(%rbp)
fldt   -0x90(%rbp)
fldt   -0xa0(%rbp)
fxch   %st(1)
fstpt  -0xc0(%rbp)
fstpt  -0xb0(%rbp)
fldt   -0xc0(%rbp)
fldt   -0xb0(%rbp)
fxch   %st(1)
fstpt  -0xe0(%rbp)
fstpt  -0xd0(%rbp)
movaps -0xe0(%rbp),%xmm0
movaps -0xd0(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x2e26(%rip)
fldt   0x2e30(%rip)
fxch   %st(1)
fstpt  -0x100(%rbp)
fstpt  -0xf0(%rbp)
movaps -0x100(%rbp),%xmm0
movaps -0xf0(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
fldz
fchs
fstpt  0x30(%rax)
flds   0xda1(%rip)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
jmp    1272 <check_long_double+0x162>
flds   0xd8c(%rip)
fld    %st(0)
fstpt  -0x110(%rbp)
flds   0xd7a(%rip)
fld    %st(0)
fstpt  -0x120(%rbp)
fldt   -0x110(%rbp)
fldt   -0x120(%rbp)
fxch   %st(1)
fstpt  -0x140(%rbp)
fstpt  -0x130(%rbp)
fldt   -0x140(%rbp)
fldt   -0x130(%rbp)
fxch   %st(1)
fstpt  -0x160(%rbp)
fstpt  -0x150(%rbp)
movaps -0x160(%rbp),%xmm0
movaps -0x150(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x2d83(%rip)
fldt   0x2d8d(%rip)
fxch   %st(1)
fstpt  -0x180(%rbp)
fstpt  -0x170(%rbp)
movaps -0x180(%rbp),%xmm0
movaps -0x170(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
flds   0xce1(%rip)
fstpt  0x30(%rax)
flds   0xcdc(%rip)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
jmp    1337 <check_long_double+0x227>
flds   0xcc7(%rip)
fld    %st(0)
fstpt  -0x190(%rbp)
fld    %st(0)
fstpt  -0x1a0(%rbp)
fldt   -0x190(%rbp)
fldt   -0x1a0(%rbp)
fxch   %st(1)
fstpt  -0x1c0(%rbp)
fstpt  -0x1b0(%rbp)
fldt   -0x1c0(%rbp)
fldt   -0x1b0(%rbp)
fxch   %st(1)
fstpt  -0x1e0(%rbp)
fstpt  -0x1d0(%rbp)
movaps -0x1e0(%rbp),%xmm0
movaps -0x1d0(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
fld    %st(0)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x2ce2(%rip)
fldt   0x2cec(%rip)
fxch   %st(1)
fstpt  -0x200(%rbp)
fstpt  -0x1f0(%rbp)
movaps -0x200(%rbp),%xmm0
movaps -0x1f0(%rbp),%xmm1
mov    %rsp,%rax
movaps %xmm1,0x10(%rax)
movaps %xmm0,(%rax)
flds   0xc24(%rip)
fld    %st(0)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
xor    %eax,%eax
call   1030 <comparecl@plt>
jmp    13f4 <check_long_double+0x2e4>
add    $0x240,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_long_double>:
sub    $0x178,%rsp
flds   0xee3(%rip)
fld    %st(0)
fstpt  0x150(%rsp)
fld    %st(0)
fxch   %st(1)
fstpt  0x64(%rsp)
fldz
fchs
fld    %st(0)
fstpt  0x58(%rsp)
fld    %st(0)
fstpt  0x160(%rsp)
movaps 0x150(%rsp),%xmm0
movaps 0x160(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x64(%rsp)
fld    %st(0)
fstpt  0x130(%rsp)
fldt   0x58(%rsp)
fld    %st(0)
fstpt  0x140(%rsp)
movaps 0x130(%rsp),%xmm0
movaps 0x140(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
flds   0xe53(%rip)
fld    %st(0)
fstpt  0x4c(%rsp)
fld    %st(0)
fstpt  0x110(%rsp)
fldt   0x58(%rsp)
fld    %st(0)
fstpt  0x120(%rsp)
movaps 0x110(%rsp),%xmm0
movaps 0x120(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x4c(%rsp)
fld    %st(0)
fstpt  0xf0(%rsp)
fldt   0x58(%rsp)
fld    %st(0)
fstpt  0x100(%rsp)
movaps 0xf0(%rsp),%xmm0
movaps 0x100(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x4c(%rsp)
fld    %st(0)
fstpt  0xd0(%rsp)
fldt   0x64(%rsp)
fld    %st(0)
fstpt  0xe0(%rsp)
movaps 0xd0(%rsp),%xmm0
movaps 0xe0(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x4c(%rsp)
fld    %st(0)
fstpt  0xb0(%rsp)
fldt   0x64(%rsp)
fld    %st(0)
fstpt  0xc0(%rsp)
movaps 0xb0(%rsp),%xmm0
movaps 0xc0(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x4c(%rsp)
fld    %st(0)
fstpt  0x90(%rsp)
fld    %st(0)
fstpt  0xa0(%rsp)
movaps 0x90(%rsp),%xmm0
movaps 0xa0(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fld    %st(0)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
fldt   0x4c(%rsp)
fld    %st(0)
fstpt  0x70(%rsp)
fld    %st(0)
fstpt  0x80(%rsp)
movaps 0x70(%rsp),%xmm0
movaps 0x80(%rsp),%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
fld    %st(0)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
xor    %eax,%eax
call   1030 <comparecl@plt>
add    $0x178,%rsp
ret

LLVM IR (-O0):
@check_long_double.cs = internal global { x86_fp80, x86_fp80 } { x86_fp80 0xK7FFFC000000000000000, x86_fp80 0xK80000000000000000000 }
@check_long_double.cs.1 = internal global { x86_fp80, x86_fp80 } { x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK80000000000000000000 }
@check_long_double.cs.2 = internal global { x86_fp80, x86_fp80 } { x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFFC000000000000000 }
@check_long_double.cs.3 = internal global { x86_fp80, x86_fp80 } { x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFF8000000000000000 }
define void @check_long_double() {
%1 = alloca x86_fp80
%2 = alloca x86_fp80
%3 = alloca { x86_fp80, x86_fp80 }
%4 = alloca { x86_fp80, x86_fp80 }
%5 = alloca { x86_fp80, x86_fp80 }
%6 = alloca x86_fp80
%7 = alloca x86_fp80
%8 = alloca { x86_fp80, x86_fp80 }
%9 = alloca { x86_fp80, x86_fp80 }
%10 = alloca { x86_fp80, x86_fp80 }
%11 = alloca x86_fp80
%12 = alloca x86_fp80
%13 = alloca { x86_fp80, x86_fp80 }
%14 = alloca { x86_fp80, x86_fp80 }
%15 = alloca { x86_fp80, x86_fp80 }
%16 = alloca x86_fp80
%17 = alloca x86_fp80
%18 = alloca { x86_fp80, x86_fp80 }
%19 = alloca { x86_fp80, x86_fp80 }
%20 = alloca { x86_fp80, x86_fp80 }
br label %21
21: ; preds = %0
br label %22
22: ; preds = %21
store x86_fp80 0xK7FFFC000000000000000, x86_fp80* %1
store x86_fp80 0xK80000000000000000000, x86_fp80* %2
%23 = load x86_fp80, x86_fp80* %1
%24 = load x86_fp80, x86_fp80* %2
%25 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 0
%26 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 1
store x86_fp80 %23, x86_fp80* %25
store x86_fp80 %24, x86_fp80* %26
%27 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 0
%28 = load x86_fp80, x86_fp80* %27
%29 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i32 0, i32 1
%30 = load x86_fp80, x86_fp80* %29
%31 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%32 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
store x86_fp80 %28, x86_fp80* %31
store x86_fp80 %30, x86_fp80* %32
%33 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %4, x86_fp80 0xK7FFFC000000000000000, x86_fp80 0xK80000000000000000000)
%34 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs, i32 0, i32 0)
%35 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs, i32 0, i32 1)
%36 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %5, i32 0, i32 0
%37 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %5, i32 0, i32 1
store x86_fp80 %34, x86_fp80* %36
store x86_fp80 %35, x86_fp80* %37
%38 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %5, x86_fp80 0xK7FFFC000000000000000, x86_fp80 0xK80000000000000000000)
br label %39
39: ; preds = %22
br label %40
40: ; preds = %39
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %6
store x86_fp80 0xK80000000000000000000, x86_fp80* %7
%41 = load x86_fp80, x86_fp80* %6
%42 = load x86_fp80, x86_fp80* %7
%43 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %8, i32 0, i32 0
%44 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %8, i32 0, i32 1
store x86_fp80 %41, x86_fp80* %43
store x86_fp80 %42, x86_fp80* %44
%45 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %8, i32 0, i32 0
%46 = load x86_fp80, x86_fp80* %45
%47 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %8, i32 0, i32 1
%48 = load x86_fp80, x86_fp80* %47
%49 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %9, i32 0, i32 0
%50 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %9, i32 0, i32 1
store x86_fp80 %46, x86_fp80* %49
store x86_fp80 %48, x86_fp80* %50
%51 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %9, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK80000000000000000000)
%52 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs.1, i32 0, i32 0)
%53 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs.1, i32 0, i32 1)
%54 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %10, i32 0, i32 0
%55 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %10, i32 0, i32 1
store x86_fp80 %52, x86_fp80* %54
store x86_fp80 %53, x86_fp80* %55
%56 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %10, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK80000000000000000000)
br label %57
57: ; preds = %40
br label %58
58: ; preds = %57
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %11
store x86_fp80 0xK7FFFC000000000000000, x86_fp80* %12
%59 = load x86_fp80, x86_fp80* %11
%60 = load x86_fp80, x86_fp80* %12
%61 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %13, i32 0, i32 0
%62 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %13, i32 0, i32 1
store x86_fp80 %59, x86_fp80* %61
store x86_fp80 %60, x86_fp80* %62
%63 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %13, i32 0, i32 0
%64 = load x86_fp80, x86_fp80* %63
%65 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %13, i32 0, i32 1
%66 = load x86_fp80, x86_fp80* %65
%67 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %14, i32 0, i32 0
%68 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %14, i32 0, i32 1
store x86_fp80 %64, x86_fp80* %67
store x86_fp80 %66, x86_fp80* %68
%69 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %14, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFFC000000000000000)
%70 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs.2, i32 0, i32 0)
%71 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs.2, i32 0, i32 1)
%72 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %15, i32 0, i32 0
%73 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %15, i32 0, i32 1
store x86_fp80 %70, x86_fp80* %72
store x86_fp80 %71, x86_fp80* %73
%74 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %15, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFFC000000000000000)
br label %75
75: ; preds = %58
br label %76
76: ; preds = %75
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %16
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %17
%77 = load x86_fp80, x86_fp80* %16
%78 = load x86_fp80, x86_fp80* %17
%79 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %18, i32 0, i32 0
%80 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %18, i32 0, i32 1
store x86_fp80 %77, x86_fp80* %79
store x86_fp80 %78, x86_fp80* %80
%81 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %18, i32 0, i32 0
%82 = load x86_fp80, x86_fp80* %81
%83 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %18, i32 0, i32 1
%84 = load x86_fp80, x86_fp80* %83
%85 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %19, i32 0, i32 0
%86 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %19, i32 0, i32 1
store x86_fp80 %82, x86_fp80* %85
store x86_fp80 %84, x86_fp80* %86
%87 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %19, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFF8000000000000000)
%88 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs.3, i32 0, i32 0)
%89 = load x86_fp80, x86_fp80* getelementptr inbounds ({ x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* @check_long_double.cs.3, i32 0, i32 1)
%90 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %20, i32 0, i32 0
%91 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %20, i32 0, i32 1
store x86_fp80 %88, x86_fp80* %90
store x86_fp80 %89, x86_fp80* %91
%92 = call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %20, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFF8000000000000000)
br label %93
93: ; preds = %76
br label %94
94: ; preds = %93
ret void
}

LLVM IR (-O2):
define void @check_long_double() {
%1 = alloca { x86_fp80, x86_fp80 }
%2 = alloca { x86_fp80, x86_fp80 }
%3 = alloca { x86_fp80, x86_fp80 }
%4 = alloca { x86_fp80, x86_fp80 }
%5 = alloca { x86_fp80, x86_fp80 }
%6 = alloca { x86_fp80, x86_fp80 }
%7 = alloca { x86_fp80, x86_fp80 }
%8 = alloca { x86_fp80, x86_fp80 }
%9 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i64 0, i32 0
%10 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %1, i64 0, i32 1
store x86_fp80 0xK7FFFC000000000000000, x86_fp80* %9
store x86_fp80 0xK80000000000000000000, x86_fp80* %10
%11 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %1, x86_fp80 0xK7FFFC000000000000000, x86_fp80 0xK80000000000000000000)
%12 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i64 0, i32 0
%13 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %2, i64 0, i32 1
store x86_fp80 0xK7FFFC000000000000000, x86_fp80* %12
store x86_fp80 0xK80000000000000000000, x86_fp80* %13
%14 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %2, x86_fp80 0xK7FFFC000000000000000, x86_fp80 0xK80000000000000000000)
%15 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i64 0, i32 0
%16 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %3, i64 0, i32 1
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %15
store x86_fp80 0xK80000000000000000000, x86_fp80* %16
%17 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %3, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK80000000000000000000)
%18 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i64 0, i32 0
%19 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i64 0, i32 1
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %18
store x86_fp80 0xK80000000000000000000, x86_fp80* %19
%20 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %4, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK80000000000000000000)
%21 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %5, i64 0, i32 0
%22 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %5, i64 0, i32 1
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %21
store x86_fp80 0xK7FFFC000000000000000, x86_fp80* %22
%23 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %5, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFFC000000000000000)
%24 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %6, i64 0, i32 0
%25 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %6, i64 0, i32 1
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %24
store x86_fp80 0xK7FFFC000000000000000, x86_fp80* %25
%26 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %6, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFFC000000000000000)
%27 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %7, i64 0, i32 0
%28 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %7, i64 0, i32 1
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %27
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %28
%29 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %7, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFF8000000000000000)
%30 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %8, i64 0, i32 0
%31 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %8, i64 0, i32 1
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %30
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %31
%32 = tail call i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...) bitcast (i32 (...)* @comparecl to i32 ({ x86_fp80, x86_fp80 }*, x86_fp80, x86_fp80, ...)*)({ x86_fp80, x86_fp80 }* byval({ x86_fp80, x86_fp80 }) align 16 %8, x86_fp80 0xK7FFF8000000000000000, x86_fp80 0xK7FFF8000000000000000)
ret void
}