int main(void) {
  volatile float _Complex fc = 1.0F + 2.0iF;
  volatile double _Complex dc = 1.0 + 2.0i;
  volatile long double _Complex ldc = 1.0L + 2.0iL;
  if (conjf(fc) != 1.0F - 2.0iF)
    abort();
  if (__builtin_conjf(fc) != 1.0F - 2.0iF)
    abort();
  if (conjf(1.0F + 2.0iF) != 1.0F - 2.0iF)
    link_failure();
  if (__builtin_conjf(1.0F + 2.0iF) != 1.0F - 2.0iF)
    link_failure();
  if (crealf(fc) != 1.0F)
    abort();
  if (__builtin_crealf(fc) != 1.0F)
    abort();
  if (crealf(1.0F + 2.0iF) != 1.0F)
    link_failure();
  if (__builtin_crealf(1.0F + 2.0iF) != 1.0F)
    link_failure();
  if (cimagf(fc) != 2.0F)
    abort();
  if (__builtin_cimagf(fc) != 2.0F)
    abort();
  if (cimagf(1.0F + 2.0iF) != 2.0F)
    link_failure();
  if (__builtin_cimagf(1.0F + 2.0iF) != 2.0F)
    link_failure();
  if (conj(dc) != 1.0 - 2.0i)
    abort();
  if (__builtin_conj(dc) != 1.0 - 2.0i)
    abort();
  if (conj(1.0 + 2.0i) != 1.0 - 2.0i)
    link_failure();
  if (__builtin_conj(1.0 + 2.0i) != 1.0 - 2.0i)
    link_failure();
  if (creal(dc) != 1.0)
    abort();
  if (__builtin_creal(dc) != 1.0)
    abort();
  if (creal(1.0 + 2.0i) != 1.0)
    link_failure();
  if (__builtin_creal(1.0 + 2.0i) != 1.0)
    link_failure();
  if (cimag(dc) != 2.0)
    abort();
  if (__builtin_cimag(dc) != 2.0)
    abort();
  if (cimag(1.0 + 2.0i) != 2.0)
    link_failure();
  if (__builtin_cimag(1.0 + 2.0i) != 2.0)
    link_failure();
  if (conjl(ldc) != 1.0L - 2.0iL)
    abort();
  if (__builtin_conjl(ldc) != 1.0L - 2.0iL)
    abort();
  if (conjl(1.0L + 2.0iL) != 1.0L - 2.0iL)
    link_failure();
  if (__builtin_conjl(1.0L + 2.0iL) != 1.0L - 2.0iL)
    link_failure();
  if (creall(ldc) != 1.0L)
    abort();
  if (__builtin_creall(ldc) != 1.0L)
    abort();
  if (creall(1.0L + 2.0iL) != 1.0L)
    link_failure();
  if (__builtin_creall(1.0L + 2.0iL) != 1.0L)
    link_failure();
  if (cimagl(ldc) != 2.0L)
    abort();
  if (__builtin_cimagl(ldc) != 2.0L)
    abort();
  if (cimagl(1.0L + 2.0iL) != 2.0L)
    link_failure();
  if (__builtin_cimagl(1.0L + 2.0iL) != 2.0L)
    link_failure();
  exit(0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x3f800000,-0x10(%rbp)
movl   $0x40000000,-0xc(%rbp)
movabs $0x3ff0000000000000,%rax
mov    %rax,-0x20(%rbp)
movabs $0x4000000000000000,%rax
mov    %rax,-0x18(%rbp)
fld1
fstpt  -0x40(%rbp)
flds   0xe94(%rip)
fstpt  -0x30(%rbp)
movss  -0x10(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  0xe6e(%rip),%xmm2
ucomiss %xmm2,%xmm1
setne  %al
setp   %cl
or     %cl,%al
movss  0xe57(%rip),%xmm1
ucomiss %xmm1,%xmm0
setne  %cl
setp   %dl
or     %dl,%cl
or     %cl,%al
test   $0x1,%al
jne    11c3 <main+0x93>
jmp    11c8 <main+0x98>
call   1030 <abort@plt>
movss  -0x10(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  0xe1d(%rip),%xmm2
ucomiss %xmm2,%xmm1
setne  %al
setp   %cl
or     %cl,%al
movss  0xe06(%rip),%xmm1
ucomiss %xmm1,%xmm0
setne  %cl
setp   %dl
or     %dl,%cl
or     %cl,%al
test   $0x1,%al
jne    1214 <main+0xe4>
jmp    1219 <main+0xe9>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1228 <main+0xf8>
jmp    122f <main+0xff>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    123e <main+0x10e>
jmp    1245 <main+0x115>
mov    $0x0,%al
call   1040 <link_failure@plt>
movss  -0x10(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movss  0xdad(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    126b <main+0x13b>
jp     126b <main+0x13b>
jmp    1270 <main+0x140>
call   1030 <abort@plt>
movss  -0x10(%rbp),%xmm0
movss  -0xc(%rbp),%xmm1
movss  0xd82(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    1296 <main+0x166>
jp     1296 <main+0x166>
jmp    129b <main+0x16b>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    12aa <main+0x17a>
jmp    12b1 <main+0x181>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    12c0 <main+0x190>
jmp    12c7 <main+0x197>
mov    $0x0,%al
call   1040 <link_failure@plt>
movss  -0x10(%rbp),%xmm0
movss  -0xc(%rbp),%xmm0
movss  0xd2f(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    12ed <main+0x1bd>
jp     12ed <main+0x1bd>
jmp    12f2 <main+0x1c2>
call   1030 <abort@plt>
movss  -0x10(%rbp),%xmm0
movss  -0xc(%rbp),%xmm0
movss  0xd04(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    1318 <main+0x1e8>
jp     1318 <main+0x1e8>
jmp    131d <main+0x1ed>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    132c <main+0x1fc>
jmp    1333 <main+0x203>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1342 <main+0x212>
jmp    1349 <main+0x219>
mov    $0x0,%al
call   1040 <link_failure@plt>
movsd  -0x20(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xca6(%rip),%xmm2
ucomisd %xmm2,%xmm1
setne  %al
setp   %cl
or     %cl,%al
movsd  0xc8a(%rip),%xmm1
ucomisd %xmm1,%xmm0
setne  %cl
setp   %dl
or     %dl,%cl
or     %cl,%al
test   $0x1,%al
jne    13a1 <main+0x271>
jmp    13a6 <main+0x276>
call   1030 <abort@plt>
movsd  -0x20(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xc49(%rip),%xmm2
ucomisd %xmm2,%xmm1
setne  %al
setp   %cl
or     %cl,%al
movsd  0xc2d(%rip),%xmm1
ucomisd %xmm1,%xmm0
setne  %cl
setp   %dl
or     %dl,%cl
or     %cl,%al
test   $0x1,%al
jne    13fe <main+0x2ce>
jmp    1403 <main+0x2d3>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1412 <main+0x2e2>
jmp    1419 <main+0x2e9>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1428 <main+0x2f8>
jmp    142f <main+0x2ff>
mov    $0x0,%al
call   1040 <link_failure@plt>
movsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xbd7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1456 <main+0x326>
jp     1456 <main+0x326>
jmp    145b <main+0x32b>
call   1030 <abort@plt>
movsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xbab(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1482 <main+0x352>
jp     1482 <main+0x352>
jmp    1487 <main+0x357>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1496 <main+0x366>
jmp    149d <main+0x36d>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    14ac <main+0x37c>
jmp    14b3 <main+0x383>
mov    $0x0,%al
call   1040 <link_failure@plt>
movsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm0
movsd  0xb5b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    14da <main+0x3aa>
jp     14da <main+0x3aa>
jmp    14df <main+0x3af>
call   1030 <abort@plt>
movsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm0
movsd  0xb2f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1506 <main+0x3d6>
jp     1506 <main+0x3d6>
jmp    150b <main+0x3db>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    151a <main+0x3ea>
jmp    1521 <main+0x3f1>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1530 <main+0x400>
jmp    1537 <main+0x407>
mov    $0x0,%al
call   1040 <link_failure@plt>
fldt   -0x40(%rbp)
fldt   -0x30(%rbp)
fld1
fucomip %st(2),%st
fstp   %st(1)
setp   %cl
setne  %al
or     %cl,%al
flds   0xab7(%rip)
fucomip %st(1),%st
fstp   %st(0)
setp   %dl
setne  %cl
or     %dl,%cl
or     %cl,%al
test   $0x1,%al
jne    156c <main+0x43c>
jmp    1571 <main+0x441>
call   1030 <abort@plt>
fldt   -0x40(%rbp)
fldt   -0x30(%rbp)
fld1
fucomip %st(2),%st
fstp   %st(1)
setp   %cl
setne  %al
or     %cl,%al
flds   0xa7d(%rip)
fucomip %st(1),%st
fstp   %st(0)
setp   %dl
setne  %cl
or     %dl,%cl
or     %cl,%al
test   $0x1,%al
jne    15a6 <main+0x476>
jmp    15ab <main+0x47b>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    15ba <main+0x48a>
jmp    15c1 <main+0x491>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    15d0 <main+0x4a0>
jmp    15d7 <main+0x4a7>
mov    $0x0,%al
call   1040 <link_failure@plt>
fldt   -0x40(%rbp)
fldt   -0x30(%rbp)
fstp   %st(0)
fld1
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    15f8 <main+0x4c8>
jp     15f8 <main+0x4c8>
jmp    15fd <main+0x4cd>
call   1030 <abort@plt>
fldt   -0x40(%rbp)
fldt   -0x30(%rbp)
fstp   %st(0)
fld1
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    161e <main+0x4ee>
jp     161e <main+0x4ee>
jmp    1623 <main+0x4f3>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1632 <main+0x502>
jmp    1639 <main+0x509>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    1648 <main+0x518>
jmp    164f <main+0x51f>
mov    $0x0,%al
call   1040 <link_failure@plt>
fldt   -0x40(%rbp)
fstp   %st(0)
fldt   -0x30(%rbp)
flds   0x9ab(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1674 <main+0x544>
jp     1674 <main+0x544>
jmp    1679 <main+0x549>
call   1030 <abort@plt>
fldt   -0x40(%rbp)
fstp   %st(0)
fldt   -0x30(%rbp)
flds   0x981(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    169e <main+0x56e>
jp     169e <main+0x56e>
jmp    16a3 <main+0x573>
call   1030 <abort@plt>
xor    %eax,%eax
test   $0x1,%al
jne    16b2 <main+0x582>
jmp    16b9 <main+0x589>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %eax,%eax
test   $0x1,%al
jne    16c8 <main+0x598>
jmp    16cf <main+0x59f>
mov    $0x0,%al
call   1040 <link_failure@plt>
xor    %edi,%edi
call   1050 <exit@plt>

x86 assembly (clang, -O2):
<main>:
sub    $0x48,%rsp
movl   $0x3f800000,0xc(%rsp)
3f
movl   $0x40000000,0x8(%rsp)
40
movabs $0x3ff0000000000000,%rax
mov    %rax,0x18(%rsp)
movabs $0x4000000000000000,%rax
mov    %rax,0x10(%rsp)
fld1
fld    %st(0)
fstpt  0x30(%rsp)
flds   0xea0(%rip)
fld    %st(0)
fstpt  0x20(%rsp)
movss  0xc(%rsp),%xmm1
movss  0x8(%rsp),%xmm0
ucomiss 0xe8b(%rip),%xmm1
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
ucomiss 0xe74(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movss  0xc(%rsp),%xmm1
movss  0x8(%rsp),%xmm0
ucomiss 0xe59(%rip),%xmm1
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
ucomiss 0xe42(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movss  0xc(%rsp),%xmm0
movss  0x8(%rsp),%xmm1
ucomiss 0xe27(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movss  0xc(%rsp),%xmm0
movss  0x8(%rsp),%xmm1
ucomiss 0xe08(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movss  0xc(%rsp),%xmm0
movss  0x8(%rsp),%xmm0
ucomiss 0xde5(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movss  0xc(%rsp),%xmm0
movss  0x8(%rsp),%xmm0
ucomiss 0xdc6(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movsd  0x18(%rsp),%xmm1
movsd  0x10(%rsp),%xmm0
ucomisd 0xdae(%rip),%xmm1
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
ucomisd 0xda2(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movsd  0x18(%rsp),%xmm1
movsd  0x10(%rsp),%xmm0
ucomisd 0xd7a(%rip),%xmm1
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
ucomisd 0xd76(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
ucomisd 0xd56(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
ucomisd 0xd3e(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm0
ucomisd 0xd2e(%rip),%xmm0
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
movsd  0x18(%rsp),%xmm0
movsd  0x10(%rsp),%xmm0
ucomisd 0xd16(%rip),%xmm0
jne    12fe <main+0x1de>
jnp    1307 <main+0x1e7>
fstp   %st(0)
fstp   %st(0)
call   1030 <abort@plt>
fldt   0x30(%rsp)
fldt   0x20(%rsp)
fxch   %st(1)
fucomip %st(3),%st
jne    1386 <main+0x266>
jp     1386 <main+0x266>
fucomip %st(1),%st
fldz
jne    1386 <main+0x266>
jp     1386 <main+0x266>
fstp   %st(0)
fldt   0x30(%rsp)
fldt   0x20(%rsp)
fxch   %st(1)
fucomip %st(3),%st
jne    1386 <main+0x266>
jp     1386 <main+0x266>
fucomip %st(1),%st
fldz
jne    1386 <main+0x266>
jp     1386 <main+0x266>
fstp   %st(0)
fldt   0x30(%rsp)
fldt   0x20(%rsp)
fstp   %st(0)
fucomip %st(2),%st
jne    12fe <main+0x1de>
jp     12fe <main+0x1de>
fldt   0x30(%rsp)
fldt   0x20(%rsp)
fstp   %st(0)
fucomip %st(2),%st
fstp   %st(1)
jne    138a <main+0x26a>
jp     138a <main+0x26a>
fldt   0x30(%rsp)
fstp   %st(0)
fldt   0x20(%rsp)
fucomip %st(1),%st
jne    138a <main+0x26a>
jp     138a <main+0x26a>
fldt   0x30(%rsp)
fstp   %st(0)
fldt   0x20(%rsp)
fucomip %st(1),%st
fstp   %st(0)
jne    138c <main+0x26c>
jp     138c <main+0x26c>
xor    %edi,%edi
call   1040 <exit@plt>
fstp   %st(1)
fstp   %st(1)
fstp   %st(0)
call   1030 <abort@plt>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca { float, float }
%3 = alloca { double, double }
%4 = alloca { x86_fp80, x86_fp80 }
store i32 0, i32* %1
%5 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%6 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
store volatile float 1.000000e+00, float* %5
store volatile float 2.000000e+00, float* %6
%7 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%8 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
store volatile double 1.000000e+00, double* %7
store volatile double 2.000000e+00, double* %8
%9 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%10 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
store volatile x86_fp80 0xK3FFF8000000000000000, x86_fp80* %9
store volatile x86_fp80 0xK40008000000000000000, x86_fp80* %10
%11 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%12 = load volatile float, float* %11
%13 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
%14 = load volatile float, float* %13
%15 = fneg float %14
%16 = fcmp une float %12, 1.000000e+00
%17 = fcmp une float %15, -2.000000e+00
%18 = or i1 %16, %17
br i1 %18, label %19, label %20
19: ; preds = %0
unreachable
20: ; preds = %0
%21 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%22 = load volatile float, float* %21
%23 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
%24 = load volatile float, float* %23
%25 = fneg float %24
%26 = fcmp une float %22, 1.000000e+00
%27 = fcmp une float %25, -2.000000e+00
%28 = or i1 %26, %27
br i1 %28, label %29, label %30
29: ; preds = %20
unreachable
30: ; preds = %20
br i1 false, label %31, label %33
31: ; preds = %30
%32 = call i32 (...) @link_failure()
br label %33
33: ; preds = %31, %30
br i1 false, label %34, label %36
34: ; preds = %33
%35 = call i32 (...) @link_failure()
br label %36
36: ; preds = %34, %33
%37 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%38 = load volatile float, float* %37
%39 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
%40 = load volatile float, float* %39
%41 = fcmp une float %38, 1.000000e+00
br i1 %41, label %42, label %43
42: ; preds = %36
unreachable
43: ; preds = %36
%44 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%45 = load volatile float, float* %44
%46 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
%47 = load volatile float, float* %46
%48 = fcmp une float %45, 1.000000e+00
br i1 %48, label %49, label %50
49: ; preds = %43
unreachable
50: ; preds = %43
br i1 false, label %51, label %53
51: ; preds = %50
%52 = call i32 (...) @link_failure()
br label %53
53: ; preds = %51, %50
br i1 false, label %54, label %56
54: ; preds = %53
%55 = call i32 (...) @link_failure()
br label %56
56: ; preds = %54, %53
%57 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%58 = load volatile float, float* %57
%59 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
%60 = load volatile float, float* %59
%61 = fcmp une float %60, 2.000000e+00
br i1 %61, label %62, label %63
62: ; preds = %56
unreachable
63: ; preds = %56
%64 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 0
%65 = load volatile float, float* %64
%66 = getelementptr inbounds { float, float }, { float, float }* %2, i32 0, i32 1
%67 = load volatile float, float* %66
%68 = fcmp une float %67, 2.000000e+00
br i1 %68, label %69, label %70
69: ; preds = %63
unreachable
70: ; preds = %63
br i1 false, label %71, label %73
71: ; preds = %70
%72 = call i32 (...) @link_failure()
br label %73
73: ; preds = %71, %70
br i1 false, label %74, label %76
74: ; preds = %73
%75 = call i32 (...) @link_failure()
br label %76
76: ; preds = %74, %73
%77 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%78 = load volatile double, double* %77
%79 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%80 = load volatile double, double* %79
%81 = fneg double %80
%82 = fcmp une double %78, 1.000000e+00
%83 = fcmp une double %81, -2.000000e+00
%84 = or i1 %82, %83
br i1 %84, label %85, label %86
85: ; preds = %76
unreachable
86: ; preds = %76
%87 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%88 = load volatile double, double* %87
%89 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%90 = load volatile double, double* %89
%91 = fneg double %90
%92 = fcmp une double %88, 1.000000e+00
%93 = fcmp une double %91, -2.000000e+00
%94 = or i1 %92, %93
br i1 %94, label %95, label %96
95: ; preds = %86
unreachable
96: ; preds = %86
br i1 false, label %97, label %99
97: ; preds = %96
%98 = call i32 (...) @link_failure()
br label %99
99: ; preds = %97, %96
br i1 false, label %100, label %102
100: ; preds = %99
%101 = call i32 (...) @link_failure()
br label %102
102: ; preds = %100, %99
%103 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%104 = load volatile double, double* %103
%105 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%106 = load volatile double, double* %105
%107 = fcmp une double %104, 1.000000e+00
br i1 %107, label %108, label %109
108: ; preds = %102
unreachable
109: ; preds = %102
%110 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%111 = load volatile double, double* %110
%112 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%113 = load volatile double, double* %112
%114 = fcmp une double %111, 1.000000e+00
br i1 %114, label %115, label %116
115: ; preds = %109
unreachable
116: ; preds = %109
br i1 false, label %117, label %119
117: ; preds = %116
%118 = call i32 (...) @link_failure()
br label %119
119: ; preds = %117, %116
br i1 false, label %120, label %122
120: ; preds = %119
%121 = call i32 (...) @link_failure()
br label %122
122: ; preds = %120, %119
%123 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%124 = load volatile double, double* %123
%125 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%126 = load volatile double, double* %125
%127 = fcmp une double %126, 2.000000e+00
br i1 %127, label %128, label %129
128: ; preds = %122
unreachable
129: ; preds = %122
%130 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 0
%131 = load volatile double, double* %130
%132 = getelementptr inbounds { double, double }, { double, double }* %3, i32 0, i32 1
%133 = load volatile double, double* %132
%134 = fcmp une double %133, 2.000000e+00
br i1 %134, label %135, label %136
135: ; preds = %129
unreachable
136: ; preds = %129
br i1 false, label %137, label %139
137: ; preds = %136
%138 = call i32 (...) @link_failure()
br label %139
139: ; preds = %137, %136
br i1 false, label %140, label %142
140: ; preds = %139
%141 = call i32 (...) @link_failure()
br label %142
142: ; preds = %140, %139
%143 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%144 = load volatile x86_fp80, x86_fp80* %143
%145 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%146 = load volatile x86_fp80, x86_fp80* %145
%147 = fneg x86_fp80 %146
%148 = fcmp une x86_fp80 %144, 0xK3FFF8000000000000000
%149 = fcmp une x86_fp80 %147, 0xKC0008000000000000000
%150 = or i1 %148, %149
br i1 %150, label %151, label %152
151: ; preds = %142
unreachable
152: ; preds = %142
%153 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%154 = load volatile x86_fp80, x86_fp80* %153
%155 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%156 = load volatile x86_fp80, x86_fp80* %155
%157 = fneg x86_fp80 %156
%158 = fcmp une x86_fp80 %154, 0xK3FFF8000000000000000
%159 = fcmp une x86_fp80 %157, 0xKC0008000000000000000
%160 = or i1 %158, %159
br i1 %160, label %161, label %162
161: ; preds = %152
unreachable
162: ; preds = %152
br i1 false, label %163, label %165
163: ; preds = %162
%164 = call i32 (...) @link_failure()
br label %165
165: ; preds = %163, %162
br i1 false, label %166, label %168
166: ; preds = %165
%167 = call i32 (...) @link_failure()
br label %168
168: ; preds = %166, %165
%169 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%170 = load volatile x86_fp80, x86_fp80* %169
%171 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%172 = load volatile x86_fp80, x86_fp80* %171
%173 = fcmp une x86_fp80 %170, 0xK3FFF8000000000000000
br i1 %173, label %174, label %175
174: ; preds = %168
unreachable
175: ; preds = %168
%176 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%177 = load volatile x86_fp80, x86_fp80* %176
%178 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%179 = load volatile x86_fp80, x86_fp80* %178
%180 = fcmp une x86_fp80 %177, 0xK3FFF8000000000000000
br i1 %180, label %181, label %182
181: ; preds = %175
unreachable
182: ; preds = %175
br i1 false, label %183, label %185
183: ; preds = %182
%184 = call i32 (...) @link_failure()
br label %185
185: ; preds = %183, %182
br i1 false, label %186, label %188
186: ; preds = %185
%187 = call i32 (...) @link_failure()
br label %188
188: ; preds = %186, %185
%189 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%190 = load volatile x86_fp80, x86_fp80* %189
%191 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%192 = load volatile x86_fp80, x86_fp80* %191
%193 = fcmp une x86_fp80 %192, 0xK40008000000000000000
br i1 %193, label %194, label %195
194: ; preds = %188
unreachable
195: ; preds = %188
%196 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 0
%197 = load volatile x86_fp80, x86_fp80* %196
%198 = getelementptr inbounds { x86_fp80, x86_fp80 }, { x86_fp80, x86_fp80 }* %4, i32 0, i32 1
%199 = load volatile x86_fp80, x86_fp80* %198
%200 = fcmp une x86_fp80 %199, 0xK40008000000000000000
br i1 %200, label %201, label %202
201: ; preds = %195
unreachable
202: ; preds = %195
br i1 false, label %203, label %205
203: ; preds = %202
%204 = call i32 (...) @link_failure()
br label %205
205: ; preds = %203, %202
br i1 false, label %206, label %208
206: ; preds = %205
%207 = call i32 (...) @link_failure()
br label %208
208: ; preds = %206, %205
unreachable
}

LLVM IR (-O2):
define i32 @main() {
%1 = alloca float
%2 = alloca float
%3 = alloca double
%4 = alloca double
%5 = alloca x86_fp80
%6 = alloca x86_fp80
%7 = bitcast float* %1 to i8*
%8 = bitcast float* %2 to i8*
store volatile float 1.000000e+00, float* %1
store volatile float 2.000000e+00, float* %2
%9 = bitcast double* %3 to i8*
%10 = bitcast double* %4 to i8*
store volatile double 1.000000e+00, double* %3
store volatile double 2.000000e+00, double* %4
%11 = bitcast x86_fp80* %5 to i8*
%12 = bitcast x86_fp80* %6 to i8*
store volatile x86_fp80 0xK3FFF8000000000000000, x86_fp80* %5
store volatile x86_fp80 0xK40008000000000000000, x86_fp80* %6
%13 = load volatile float, float* %1
%14 = load volatile float, float* %2
%15 = fcmp une float %13, 1.000000e+00
%16 = fcmp une float %14, 2.000000e+00
%17 = or i1 %15, %16
br i1 %17, label %18, label %19
18: ; preds = %0
tail call void @abort()
unreachable
19: ; preds = %0
%20 = load volatile float, float* %1
%21 = load volatile float, float* %2
%22 = fcmp une float %20, 1.000000e+00
%23 = fcmp une float %21, 2.000000e+00
%24 = or i1 %22, %23
br i1 %24, label %25, label %26
25: ; preds = %19
tail call void @abort()
unreachable
26: ; preds = %19
%27 = load volatile float, float* %1
%28 = load volatile float, float* %2
%29 = fcmp une float %27, 1.000000e+00
br i1 %29, label %30, label %31
30: ; preds = %26
tail call void @abort()
unreachable
31: ; preds = %26
%32 = load volatile float, float* %1
%33 = load volatile float, float* %2
%34 = fcmp une float %32, 1.000000e+00
br i1 %34, label %35, label %36
35: ; preds = %31
tail call void @abort()
unreachable
36: ; preds = %31
%37 = load volatile float, float* %1
%38 = load volatile float, float* %2
%39 = fcmp une float %38, 2.000000e+00
br i1 %39, label %40, label %41
40: ; preds = %36
tail call void @abort()
unreachable
41: ; preds = %36
%42 = load volatile float, float* %1
%43 = load volatile float, float* %2
%44 = fcmp une float %43, 2.000000e+00
br i1 %44, label %45, label %46
45: ; preds = %41
tail call void @abort()
unreachable
46: ; preds = %41
%47 = load volatile double, double* %3
%48 = load volatile double, double* %4
%49 = fcmp une double %47, 1.000000e+00
%50 = fcmp une double %48, 2.000000e+00
%51 = or i1 %49, %50
br i1 %51, label %52, label %53
52: ; preds = %46
tail call void @abort()
unreachable
53: ; preds = %46
%54 = load volatile double, double* %3
%55 = load volatile double, double* %4
%56 = fcmp une double %54, 1.000000e+00
%57 = fcmp une double %55, 2.000000e+00
%58 = or i1 %56, %57
br i1 %58, label %59, label %60
59: ; preds = %53
tail call void @abort()
unreachable
60: ; preds = %53
%61 = load volatile double, double* %3
%62 = load volatile double, double* %4
%63 = fcmp une double %61, 1.000000e+00
br i1 %63, label %64, label %65
64: ; preds = %60
tail call void @abort()
unreachable
65: ; preds = %60
%66 = load volatile double, double* %3
%67 = load volatile double, double* %4
%68 = fcmp une double %66, 1.000000e+00
br i1 %68, label %69, label %70
69: ; preds = %65
tail call void @abort()
unreachable
70: ; preds = %65
%71 = load volatile double, double* %3
%72 = load volatile double, double* %4
%73 = fcmp une double %72, 2.000000e+00
br i1 %73, label %74, label %75
74: ; preds = %70
tail call void @abort()
unreachable
75: ; preds = %70
%76 = load volatile double, double* %3
%77 = load volatile double, double* %4
%78 = fcmp une double %77, 2.000000e+00
br i1 %78, label %79, label %80
79: ; preds = %75
tail call void @abort()
unreachable
80: ; preds = %75
%81 = load volatile x86_fp80, x86_fp80* %5
%82 = load volatile x86_fp80, x86_fp80* %6
%83 = fcmp une x86_fp80 %81, 0xK3FFF8000000000000000
%84 = fcmp une x86_fp80 %82, 0xK40008000000000000000
%85 = or i1 %83, %84
br i1 %85, label %86, label %87
86: ; preds = %80
tail call void @abort()
unreachable
87: ; preds = %80
%88 = load volatile x86_fp80, x86_fp80* %5
%89 = load volatile x86_fp80, x86_fp80* %6
%90 = fcmp une x86_fp80 %88, 0xK3FFF8000000000000000
%91 = fcmp une x86_fp80 %89, 0xK40008000000000000000
%92 = or i1 %90, %91
br i1 %92, label %93, label %94
93: ; preds = %87
tail call void @abort()
unreachable
94: ; preds = %87
%95 = load volatile x86_fp80, x86_fp80* %5
%96 = load volatile x86_fp80, x86_fp80* %6
%97 = fcmp une x86_fp80 %95, 0xK3FFF8000000000000000
br i1 %97, label %98, label %99
98: ; preds = %94
tail call void @abort()
unreachable
99: ; preds = %94
%100 = load volatile x86_fp80, x86_fp80* %5
%101 = load volatile x86_fp80, x86_fp80* %6
%102 = fcmp une x86_fp80 %100, 0xK3FFF8000000000000000
br i1 %102, label %103, label %104
103: ; preds = %99
tail call void @abort()
unreachable
104: ; preds = %99
%105 = load volatile x86_fp80, x86_fp80* %5
%106 = load volatile x86_fp80, x86_fp80* %6
%107 = fcmp une x86_fp80 %106, 0xK40008000000000000000
br i1 %107, label %108, label %109
108: ; preds = %104
tail call void @abort()
unreachable
109: ; preds = %104
%110 = load volatile x86_fp80, x86_fp80* %5
%111 = load volatile x86_fp80, x86_fp80* %6
%112 = fcmp une x86_fp80 %111, 0xK40008000000000000000
br i1 %112, label %113, label %114
113: ; preds = %109
tail call void @abort()
unreachable
114: ; preds = %109
tail call void @exit(i32 0)
unreachable
}