#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*/ abort();
int /*<<< orphan*/ dnear(double, double);
int /*<<< orphan*/ fnear(float, float);
int /*<<< orphan*/ ldnear(long double, long double);
double sll2d(long long);
float sll2f(long long);
long double sll2ld(long long);
double ull2d(unsigned long long);
float ull2f(unsigned long long);
long double ull2ld(unsigned long long);
test_longlong_integer_to_float() {
  if (ull2f(0ULL) != (float)0ULL)
    abort();
  if (ull2f(~0ULL) != (float)~0ULL)
    abort();
  if (ull2f((~0ULL) >> 1) != (float)((~0ULL) >> 1))
    abort();
  if (ull2f(~((~0ULL) >> 1)) != (float)~((~0ULL) >> 1))
    abort();
  if (ull2d(0ULL) != (double)0ULL)
    abort();
  if (ull2d(~0ULL) != (double)~0ULL)
    abort();
  if (ull2d((~0ULL) >> 1) != (double)((~0ULL) >> 1))
    abort();
  if (ull2d(~((~0ULL) >> 1)) != (double)~((~0ULL) >> 1))
    abort();
  if (ull2ld(0ULL) != (long double)0ULL)
    abort();
  if (ull2ld(~0ULL) != (long double)~0ULL)
    abort();
  if (ull2ld((~0ULL) >> 1) != (long double)((~0ULL) >> 1))
    abort();
  if (ull2ld(~((~0ULL) >> 1)) != (long double)~((~0ULL) >> 1))
    abort();
  if (sll2f(0LL) != (float)0LL)
    abort();
  if (sll2f(~0LL) != (float)~0LL)
    abort();
  if (!fnear(sll2f((long long int)((~0ULL) >> 1)),
             (float)(long long int)((~0ULL) >> 1)))
    abort();
  if (sll2f((long long int)(~((~0ULL) >> 1))) !=
      (float)(long long int)~((~0ULL) >> 1))
    abort();
  if (sll2d(0LL) != (double)0LL)
    abort();
  if (sll2d(~0LL) != (double)~0LL)
    abort();
  if (!dnear(sll2d((long long int)((~0ULL) >> 1)),
             (double)(long long int)((~0ULL) >> 1)))
    abort();
  if (!dnear(sll2d((long long int)~((~0ULL) >> 1)),
             (double)(long long int)~((~0ULL) >> 1)))
    abort();
  if (sll2ld(0LL) != (long double)0LL)
    abort();
  if (sll2ld(~0LL) != (long double)~0LL)
    abort();
  if (!ldnear(sll2ld((long long int)((~0ULL) >> 1)),
              (long double)(long long int)((~0ULL) >> 1)))
    abort();
  if (!ldnear(sll2ld((long long int)~((~0ULL) >> 1)),
              (long double)(long long int)~((~0ULL) >> 1)))
    abort();
}


x86 assembly (clang, -O0):
<test_longlong_integer_to_float>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
xor    %eax,%eax
mov    %eax,%edi
call   10b0 <ull2f@plt>
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    11c8 <test_longlong_integer_to_float+0x28>
jp     11c8 <test_longlong_integer_to_float+0x28>
jmp    11cf <test_longlong_integer_to_float+0x2f>
mov    $0x0,%al
call   1050 <abort@plt>
mov    $0xffffffffffffffff,%rdi
call   10b0 <ull2f@plt>
movss  0xe1d(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    11f7 <test_longlong_integer_to_float+0x57>
jp     11f7 <test_longlong_integer_to_float+0x57>
jmp    11fe <test_longlong_integer_to_float+0x5e>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x7fffffffffffffff,%rdi
ff ff 7f
call   10b0 <ull2f@plt>
movss  0xdef(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    1229 <test_longlong_integer_to_float+0x89>
jp     1229 <test_longlong_integer_to_float+0x89>
jmp    1230 <test_longlong_integer_to_float+0x90>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x8000000000000000,%rdi
call   10b0 <ull2f@plt>
movss  0xdbd(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    125b <test_longlong_integer_to_float+0xbb>
jp     125b <test_longlong_integer_to_float+0xbb>
jmp    1262 <test_longlong_integer_to_float+0xc2>
mov    $0x0,%al
call   1050 <abort@plt>
xor    %eax,%eax
mov    %eax,%edi
call   10c0 <ull2d@plt>
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1283 <test_longlong_integer_to_float+0xe3>
jp     1283 <test_longlong_integer_to_float+0xe3>
jmp    128a <test_longlong_integer_to_float+0xea>
mov    $0x0,%al
call   1050 <abort@plt>
mov    $0xffffffffffffffff,%rdi
call   10c0 <ull2d@plt>
movsd  0xd72(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12b3 <test_longlong_integer_to_float+0x113>
jp     12b3 <test_longlong_integer_to_float+0x113>
jmp    12ba <test_longlong_integer_to_float+0x11a>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x7fffffffffffffff,%rdi
ff ff 7f
call   10c0 <ull2d@plt>
movsd  0xd47(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12e6 <test_longlong_integer_to_float+0x146>
jp     12e6 <test_longlong_integer_to_float+0x146>
jmp    12ed <test_longlong_integer_to_float+0x14d>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x8000000000000000,%rdi
call   10c0 <ull2d@plt>
movsd  0xd14(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1319 <test_longlong_integer_to_float+0x179>
jp     1319 <test_longlong_integer_to_float+0x179>
jmp    1320 <test_longlong_integer_to_float+0x180>
mov    $0x0,%al
call   1050 <abort@plt>
xor    %eax,%eax
mov    %eax,%edi
call   10a0 <ull2ld@plt>
fld    %st(0)
fstp   %st(0)
fldz
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1346 <test_longlong_integer_to_float+0x1a6>
jp     1346 <test_longlong_integer_to_float+0x1a6>
jmp    134d <test_longlong_integer_to_float+0x1ad>
mov    $0x0,%al
call   1050 <abort@plt>
mov    $0xffffffffffffffff,%rdi
call   10a0 <ull2ld@plt>
fld    %st(0)
fstp   %st(0)
fldt   0xccd(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    137a <test_longlong_integer_to_float+0x1da>
jp     137a <test_longlong_integer_to_float+0x1da>
jmp    1381 <test_longlong_integer_to_float+0x1e1>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x7fffffffffffffff,%rdi
ff ff 7f
call   10a0 <ull2ld@plt>
fld    %st(0)
fstp   %st(0)
fldt   0xca6(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    13b1 <test_longlong_integer_to_float+0x211>
jp     13b1 <test_longlong_integer_to_float+0x211>
jmp    13b8 <test_longlong_integer_to_float+0x218>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x8000000000000000,%rdi
call   10a0 <ull2ld@plt>
fld    %st(0)
fstp   %st(0)
flds   0xc33(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    13e8 <test_longlong_integer_to_float+0x248>
jp     13e8 <test_longlong_integer_to_float+0x248>
jmp    13ef <test_longlong_integer_to_float+0x24f>
mov    $0x0,%al
call   1050 <abort@plt>
xor    %eax,%eax
mov    %eax,%edi
call   1060 <sll2f@plt>
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    140f <test_longlong_integer_to_float+0x26f>
jp     140f <test_longlong_integer_to_float+0x26f>
jmp    1416 <test_longlong_integer_to_float+0x276>
mov    $0x0,%al
call   1050 <abort@plt>
mov    $0xffffffffffffffff,%rdi
call   1060 <sll2f@plt>
movss  0xbde(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    143e <test_longlong_integer_to_float+0x29e>
jp     143e <test_longlong_integer_to_float+0x29e>
jmp    1445 <test_longlong_integer_to_float+0x2a5>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x7fffffffffffffff,%rdi
ff ff 7f
call   1060 <sll2f@plt>
movss  0xba8(%rip),%xmm1
call   1040 <fnear@plt>
cmp    $0x0,%eax
jne    1471 <test_longlong_integer_to_float+0x2d1>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x8000000000000000,%rdi
call   1060 <sll2f@plt>
movss  0xb84(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    149c <test_longlong_integer_to_float+0x2fc>
jp     149c <test_longlong_integer_to_float+0x2fc>
jmp    14a3 <test_longlong_integer_to_float+0x303>
mov    $0x0,%al
call   1050 <abort@plt>
xor    %eax,%eax
mov    %eax,%edi
call   1070 <sll2d@plt>
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14c4 <test_longlong_integer_to_float+0x324>
jp     14c4 <test_longlong_integer_to_float+0x324>
jmp    14cb <test_longlong_integer_to_float+0x32b>
mov    $0x0,%al
call   1050 <abort@plt>
mov    $0xffffffffffffffff,%rdi
call   1070 <sll2d@plt>
movsd  0xb41(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    14f4 <test_longlong_integer_to_float+0x354>
jp     14f4 <test_longlong_integer_to_float+0x354>
jmp    14fb <test_longlong_integer_to_float+0x35b>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x7fffffffffffffff,%rdi
ff ff 7f
call   1070 <sll2d@plt>
movsd  0xb06(%rip),%xmm1
call   1090 <dnear@plt>
cmp    $0x0,%eax
jne    1527 <test_longlong_integer_to_float+0x387>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x8000000000000000,%rdi
call   1070 <sll2d@plt>
movsd  0xaea(%rip),%xmm1
call   1090 <dnear@plt>
cmp    $0x0,%eax
jne    1553 <test_longlong_integer_to_float+0x3b3>
mov    $0x0,%al
call   1050 <abort@plt>
xor    %eax,%eax
mov    %eax,%edi
call   1030 <sll2ld@plt>
fld    %st(0)
fstp   %st(0)
fldz
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1579 <test_longlong_integer_to_float+0x3d9>
jp     1579 <test_longlong_integer_to_float+0x3d9>
jmp    1580 <test_longlong_integer_to_float+0x3e0>
mov    $0x0,%al
call   1050 <abort@plt>
mov    $0xffffffffffffffff,%rdi
call   1030 <sll2ld@plt>
fld    %st(0)
fstp   %st(0)
fld1
fchs
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    15ab <test_longlong_integer_to_float+0x40b>
jp     15ab <test_longlong_integer_to_float+0x40b>
jmp    15b2 <test_longlong_integer_to_float+0x412>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x7fffffffffffffff,%rdi
ff ff 7f
call   1030 <sll2ld@plt>
mov    %rsp,%rax
fldt   0xa76(%rip)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1080 <ldnear@plt>
cmp    $0x0,%eax
jne    15e4 <test_longlong_integer_to_float+0x444>
mov    $0x0,%al
call   1050 <abort@plt>
movabs $0x8000000000000000,%rdi
call   1030 <sll2ld@plt>
mov    %rsp,%rax
flds   0xa10(%rip)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1080 <ldnear@plt>
cmp    $0x0,%eax
jne    1616 <test_longlong_integer_to_float+0x476>
mov    $0x0,%al
call   1050 <abort@plt>
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_longlong_integer_to_float>:
push   %r14
push   %rbx
sub    $0x38,%rsp
xor    %edi,%edi
call   10b0 <ull2f@plt>
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    $0xffffffffffffffff,%rdi
call   10b0 <ull2f@plt>
ucomiss 0xe2d(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
movabs $0x7fffffffffffffff,%r14
ff ff 7f
mov    %r14,%rdi
call   10b0 <ull2f@plt>
ucomiss 0xe0c(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
lea    0x1(%r14),%rbx
mov    %rbx,%rdi
call   10b0 <ull2f@plt>
ucomiss 0xded(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
xor    %edi,%edi
call   10c0 <ull2d@plt>
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    $0xffffffffffffffff,%rdi
call   10c0 <ull2d@plt>
ucomisd 0xdbf(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %r14,%rdi
call   10c0 <ull2d@plt>
ucomisd 0xdab(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %rbx,%rdi
call   10c0 <ull2d@plt>
ucomisd 0xd8f(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
xor    %edi,%edi
call   10a0 <ull2ld@plt>
fldz
fld    %st(0)
fstpt  0x2c(%rsp)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    $0xffffffffffffffff,%rdi
call   10a0 <ull2ld@plt>
fldt   0xd68(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %r14,%rdi
call   10a0 <ull2ld@plt>
fldt   0xd58(%rip)
fld    %st(0)
fstpt  0x20(%rsp)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %rbx,%rdi
call   10a0 <ull2ld@plt>
flds   0xcf6(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
xor    %edi,%edi
call   1060 <sll2f@plt>
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    $0xffffffffffffffff,%rdi
call   1060 <sll2f@plt>
ucomiss 0xcbc(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %r14,%rdi
call   1060 <sll2f@plt>
movss  0xc9c(%rip),%xmm1
call   1040 <fnear@plt>
test   %eax,%eax
je     1472 <test_longlong_integer_to_float+0x2d2>
mov    %rbx,%rdi
call   1060 <sll2f@plt>
ucomiss 0xc88(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
xor    %edi,%edi
call   1070 <sll2d@plt>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    $0xffffffffffffffff,%rdi
call   1070 <sll2d@plt>
ucomisd 0xc61(%rip),%xmm0
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %r14,%rdi
call   1070 <sll2d@plt>
movsd  0xc3d(%rip),%xmm1
call   1090 <dnear@plt>
test   %eax,%eax
je     1472 <test_longlong_integer_to_float+0x2d2>
mov    %rbx,%rdi
call   1070 <sll2d@plt>
movsd  0xc30(%rip),%xmm1
call   1090 <dnear@plt>
test   %eax,%eax
je     1472 <test_longlong_integer_to_float+0x2d2>
xor    %edi,%edi
call   1030 <sll2ld@plt>
fldt   0x2c(%rsp)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    $0xffffffffffffffff,%rdi
call   1030 <sll2ld@plt>
fld1
fchs
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1472 <test_longlong_integer_to_float+0x2d2>
jp     1472 <test_longlong_integer_to_float+0x2d2>
mov    %r14,%rdi
call   1030 <sll2ld@plt>
fldt   0x20(%rsp)
fstpt  0x10(%rsp)
fstpt  (%rsp)
call   1080 <ldnear@plt>
test   %eax,%eax
je     1472 <test_longlong_integer_to_float+0x2d2>
mov    %rbx,%rdi
call   1030 <sll2ld@plt>
flds   0xbb2(%rip)
fstpt  0x10(%rsp)
fstpt  (%rsp)
call   1080 <ldnear@plt>
test   %eax,%eax
je     1472 <test_longlong_integer_to_float+0x2d2>
add    $0x38,%rsp
pop    %rbx
pop    %r14
ret
xor    %eax,%eax
call   1050 <abort@plt>

LLVM IR (-O0):
define i32 @test_longlong_integer_to_float() {
%1 = alloca i32
%2 = call float @ull2f(i64 0)
%3 = fcmp une float %2, 0.000000e+00
br i1 %3, label %4, label %6
4: ; preds = %0
%5 = call i32 (...) @abort()
unreachable
6: ; preds = %0
%7 = call float @ull2f(i64 -1)
%8 = fcmp une float %7, 0x43F0000000000000
br i1 %8, label %9, label %11
9: ; preds = %6
%10 = call i32 (...) @abort()
unreachable
11: ; preds = %6
%12 = call float @ull2f(i64 9223372036854775807)
%13 = fcmp une float %12, 0x43E0000000000000
br i1 %13, label %14, label %16
14: ; preds = %11
%15 = call i32 (...) @abort()
unreachable
16: ; preds = %11
%17 = call float @ull2f(i64 -9223372036854775808)
%18 = fcmp une float %17, 0x43E0000000000000
br i1 %18, label %19, label %21
19: ; preds = %16
%20 = call i32 (...) @abort()
unreachable
21: ; preds = %16
%22 = call double @ull2d(i64 0)
%23 = fcmp une double %22, 0.000000e+00
br i1 %23, label %24, label %26
24: ; preds = %21
%25 = call i32 (...) @abort()
unreachable
26: ; preds = %21
%27 = call double @ull2d(i64 -1)
%28 = fcmp une double %27, 0x43F0000000000000
br i1 %28, label %29, label %31
29: ; preds = %26
%30 = call i32 (...) @abort()
unreachable
31: ; preds = %26
%32 = call double @ull2d(i64 9223372036854775807)
%33 = fcmp une double %32, 0x43E0000000000000
br i1 %33, label %34, label %36
34: ; preds = %31
%35 = call i32 (...) @abort()
unreachable
36: ; preds = %31
%37 = call double @ull2d(i64 -9223372036854775808)
%38 = fcmp une double %37, 0x43E0000000000000
br i1 %38, label %39, label %41
39: ; preds = %36
%40 = call i32 (...) @abort()
unreachable
41: ; preds = %36
%42 = call x86_fp80 @ull2ld(i64 0)
%43 = fcmp une x86_fp80 %42, 0xK00000000000000000000
br i1 %43, label %44, label %46
44: ; preds = %41
%45 = call i32 (...) @abort()
unreachable
46: ; preds = %41
%47 = call x86_fp80 @ull2ld(i64 -1)
%48 = fcmp une x86_fp80 %47, 0xK403EFFFFFFFFFFFFFFFF
br i1 %48, label %49, label %51
49: ; preds = %46
%50 = call i32 (...) @abort()
unreachable
51: ; preds = %46
%52 = call x86_fp80 @ull2ld(i64 9223372036854775807)
%53 = fcmp une x86_fp80 %52, 0xK403DFFFFFFFFFFFFFFFE
br i1 %53, label %54, label %56
54: ; preds = %51
%55 = call i32 (...) @abort()
unreachable
56: ; preds = %51
%57 = call x86_fp80 @ull2ld(i64 -9223372036854775808)
%58 = fcmp une x86_fp80 %57, 0xK403E8000000000000000
br i1 %58, label %59, label %61
59: ; preds = %56
%60 = call i32 (...) @abort()
unreachable
61: ; preds = %56
%62 = call float @sll2f(i64 0)
%63 = fcmp une float %62, 0.000000e+00
br i1 %63, label %64, label %66
64: ; preds = %61
%65 = call i32 (...) @abort()
unreachable
66: ; preds = %61
%67 = call float @sll2f(i64 -1)
%68 = fcmp une float %67, -1.000000e+00
br i1 %68, label %69, label %71
69: ; preds = %66
%70 = call i32 (...) @abort()
unreachable
71: ; preds = %66
%72 = call float @sll2f(i64 9223372036854775807)
%73 = call i32 @fnear(float %72, float 0x43E0000000000000)
%74 = icmp ne i32 %73, 0
br i1 %74, label %77, label %75
75: ; preds = %71
%76 = call i32 (...) @abort()
unreachable
77: ; preds = %71
%78 = call float @sll2f(i64 -9223372036854775808)
%79 = fcmp une float %78, 0xC3E0000000000000
br i1 %79, label %80, label %82
80: ; preds = %77
%81 = call i32 (...) @abort()
unreachable
82: ; preds = %77
%83 = call double @sll2d(i64 0)
%84 = fcmp une double %83, 0.000000e+00
br i1 %84, label %85, label %87
85: ; preds = %82
%86 = call i32 (...) @abort()
unreachable
87: ; preds = %82
%88 = call double @sll2d(i64 -1)
%89 = fcmp une double %88, -1.000000e+00
br i1 %89, label %90, label %92
90: ; preds = %87
%91 = call i32 (...) @abort()
unreachable
92: ; preds = %87
%93 = call double @sll2d(i64 9223372036854775807)
%94 = call i32 @dnear(double %93, double 0x43E0000000000000)
%95 = icmp ne i32 %94, 0
br i1 %95, label %98, label %96
96: ; preds = %92
%97 = call i32 (...) @abort()
unreachable
98: ; preds = %92
%99 = call double @sll2d(i64 -9223372036854775808)
%100 = call i32 @dnear(double %99, double 0xC3E0000000000000)
%101 = icmp ne i32 %100, 0
br i1 %101, label %104, label %102
102: ; preds = %98
%103 = call i32 (...) @abort()
unreachable
104: ; preds = %98
%105 = call x86_fp80 @sll2ld(i64 0)
%106 = fcmp une x86_fp80 %105, 0xK00000000000000000000
br i1 %106, label %107, label %109
107: ; preds = %104
%108 = call i32 (...) @abort()
unreachable
109: ; preds = %104
%110 = call x86_fp80 @sll2ld(i64 -1)
%111 = fcmp une x86_fp80 %110, 0xKBFFF8000000000000000
br i1 %111, label %112, label %114
112: ; preds = %109
%113 = call i32 (...) @abort()
unreachable
114: ; preds = %109
%115 = call x86_fp80 @sll2ld(i64 9223372036854775807)
%116 = call i32 @ldnear(x86_fp80 %115, x86_fp80 0xK403DFFFFFFFFFFFFFFFE)
%117 = icmp ne i32 %116, 0
br i1 %117, label %120, label %118
118: ; preds = %114
%119 = call i32 (...) @abort()
unreachable
120: ; preds = %114
%121 = call x86_fp80 @sll2ld(i64 -9223372036854775808)
%122 = call i32 @ldnear(x86_fp80 %121, x86_fp80 0xKC03E8000000000000000)
%123 = icmp ne i32 %122, 0
br i1 %123, label %126, label %124
124: ; preds = %120
%125 = call i32 (...) @abort()
unreachable
126: ; preds = %120
%127 = load i32, i32* %1
ret i32 %127
}

LLVM IR (-O2):
define i32 @test_longlong_integer_to_float() {
%1 = tail call float @ull2f(i64 0)
%2 = fcmp une float %1, 0.000000e+00
br i1 %2, label %3, label %5
3: ; preds = %0
%4 = tail call i32 (...) @abort()
unreachable
5: ; preds = %0
%6 = tail call float @ull2f(i64 -1)
%7 = fcmp une float %6, 0x43F0000000000000
br i1 %7, label %8, label %10
8: ; preds = %5
%9 = tail call i32 (...) @abort()
unreachable
10: ; preds = %5
%11 = tail call float @ull2f(i64 9223372036854775807)
%12 = fcmp une float %11, 0x43E0000000000000
br i1 %12, label %13, label %15
13: ; preds = %10
%14 = tail call i32 (...) @abort()
unreachable
15: ; preds = %10
%16 = tail call float @ull2f(i64 -9223372036854775808)
%17 = fcmp une float %16, 0x43E0000000000000
br i1 %17, label %18, label %20
18: ; preds = %15
%19 = tail call i32 (...) @abort()
unreachable
20: ; preds = %15
%21 = tail call double @ull2d(i64 0)
%22 = fcmp une double %21, 0.000000e+00
br i1 %22, label %23, label %25
23: ; preds = %20
%24 = tail call i32 (...) @abort()
unreachable
25: ; preds = %20
%26 = tail call double @ull2d(i64 -1)
%27 = fcmp une double %26, 0x43F0000000000000
br i1 %27, label %28, label %30
28: ; preds = %25
%29 = tail call i32 (...) @abort()
unreachable
30: ; preds = %25
%31 = tail call double @ull2d(i64 9223372036854775807)
%32 = fcmp une double %31, 0x43E0000000000000
br i1 %32, label %33, label %35
33: ; preds = %30
%34 = tail call i32 (...) @abort()
unreachable
35: ; preds = %30
%36 = tail call double @ull2d(i64 -9223372036854775808)
%37 = fcmp une double %36, 0x43E0000000000000
br i1 %37, label %38, label %40
38: ; preds = %35
%39 = tail call i32 (...) @abort()
unreachable
40: ; preds = %35
%41 = tail call x86_fp80 @ull2ld(i64 0)
%42 = fcmp une x86_fp80 %41, 0xK00000000000000000000
br i1 %42, label %43, label %45
43: ; preds = %40
%44 = tail call i32 (...) @abort()
unreachable
45: ; preds = %40
%46 = tail call x86_fp80 @ull2ld(i64 -1)
%47 = fcmp une x86_fp80 %46, 0xK403EFFFFFFFFFFFFFFFF
br i1 %47, label %48, label %50
48: ; preds = %45
%49 = tail call i32 (...) @abort()
unreachable
50: ; preds = %45
%51 = tail call x86_fp80 @ull2ld(i64 9223372036854775807)
%52 = fcmp une x86_fp80 %51, 0xK403DFFFFFFFFFFFFFFFE
br i1 %52, label %53, label %55
53: ; preds = %50
%54 = tail call i32 (...) @abort()
unreachable
55: ; preds = %50
%56 = tail call x86_fp80 @ull2ld(i64 -9223372036854775808)
%57 = fcmp une x86_fp80 %56, 0xK403E8000000000000000
br i1 %57, label %58, label %60
58: ; preds = %55
%59 = tail call i32 (...) @abort()
unreachable
60: ; preds = %55
%61 = tail call float @sll2f(i64 0)
%62 = fcmp une float %61, 0.000000e+00
br i1 %62, label %63, label %65
63: ; preds = %60
%64 = tail call i32 (...) @abort()
unreachable
65: ; preds = %60
%66 = tail call float @sll2f(i64 -1)
%67 = fcmp une float %66, -1.000000e+00
br i1 %67, label %68, label %70
68: ; preds = %65
%69 = tail call i32 (...) @abort()
unreachable
70: ; preds = %65
%71 = tail call float @sll2f(i64 9223372036854775807)
%72 = tail call i32 @fnear(float %71, float 0x43E0000000000000)
%73 = icmp eq i32 %72, 0
br i1 %73, label %74, label %76
74: ; preds = %70
%75 = tail call i32 (...) @abort()
unreachable
76: ; preds = %70
%77 = tail call float @sll2f(i64 -9223372036854775808)
%78 = fcmp une float %77, 0xC3E0000000000000
br i1 %78, label %79, label %81
79: ; preds = %76
%80 = tail call i32 (...) @abort()
unreachable
81: ; preds = %76
%82 = tail call double @sll2d(i64 0)
%83 = fcmp une double %82, 0.000000e+00
br i1 %83, label %84, label %86
84: ; preds = %81
%85 = tail call i32 (...) @abort()
unreachable
86: ; preds = %81
%87 = tail call double @sll2d(i64 -1)
%88 = fcmp une double %87, -1.000000e+00
br i1 %88, label %89, label %91
89: ; preds = %86
%90 = tail call i32 (...) @abort()
unreachable
91: ; preds = %86
%92 = tail call double @sll2d(i64 9223372036854775807)
%93 = tail call i32 @dnear(double %92, double 0x43E0000000000000)
%94 = icmp eq i32 %93, 0
br i1 %94, label %95, label %97
95: ; preds = %91
%96 = tail call i32 (...) @abort()
unreachable
97: ; preds = %91
%98 = tail call double @sll2d(i64 -9223372036854775808)
%99 = tail call i32 @dnear(double %98, double 0xC3E0000000000000)
%100 = icmp eq i32 %99, 0
br i1 %100, label %101, label %103
101: ; preds = %97
%102 = tail call i32 (...) @abort()
unreachable
103: ; preds = %97
%104 = tail call x86_fp80 @sll2ld(i64 0)
%105 = fcmp une x86_fp80 %104, 0xK00000000000000000000
br i1 %105, label %106, label %108
106: ; preds = %103
%107 = tail call i32 (...) @abort()
unreachable
108: ; preds = %103
%109 = tail call x86_fp80 @sll2ld(i64 -1)
%110 = fcmp une x86_fp80 %109, 0xKBFFF8000000000000000
br i1 %110, label %111, label %113
111: ; preds = %108
%112 = tail call i32 (...) @abort()
unreachable
113: ; preds = %108
%114 = tail call x86_fp80 @sll2ld(i64 9223372036854775807)
%115 = tail call i32 @ldnear(x86_fp80 %114, x86_fp80 0xK403DFFFFFFFFFFFFFFFE)
%116 = icmp eq i32 %115, 0
br i1 %116, label %117, label %119
117: ; preds = %113
%118 = tail call i32 (...) @abort()
unreachable
119: ; preds = %113
%120 = tail call x86_fp80 @sll2ld(i64 -9223372036854775808)
%121 = tail call i32 @ldnear(x86_fp80 %120, x86_fp80 0xKC03E8000000000000000)
%122 = icmp eq i32 %121, 0
br i1 %122, label %123, label %125
123: ; preds = %119
%124 = tail call i32 (...) @abort()
unreachable
125: ; preds = %119
ret i32 undef
}