long sign_test(x1, x2, x3, y1, y2, y3)
long x1, x2, x3, y1, y2, y3;
{
  long s1, s2, s3;
  long a, b, c;
  register long t;
  if (x1 == 0 || y1 == 0)
    s1 = 0;
  else {
    if (x1 > 0)
      s1 = 1;
    else
      x1 = -x1, s1 = -1;
  }
  if (x2 == 0 || y2 == 0)
    s2 = 0;
  else {
    if (x2 > 0)
      s2 = 1;
    else
      x2 = -x2, s2 = -1;
  }
  if (x3 == 0 || y3 == 0)
    s3 = 0;
  else {
    if (x3 > 0)
      s3 = 1;
    else
      x3 = -x3, s3 = -1;
  };
  if ((s1 >= 0 && s2 >= 0 && s3 >= 0) || (s1 <= 0 && s2 <= 0 && s3 <= 0))
    return (s1 + s2 + s3);
  if (s3 == 0 || s3 == s1) {
    t = s3;
    s3 = s2;
    s2 = t;
    t = x3;
    x3 = x2;
    x2 = t;
    t = y3;
    y3 = y2;
    y2 = t;
  } else if (s3 == s2) {
    t = s3;
    s3 = s1;
    s1 = t;
    t = x3;
    x3 = x1;
    x1 = t;
    t = y3;
    y3 = y1;
    y1 = t;
  };
  {
    register long lx, rx, ly, ry;
    lx = x1 / 0x4000;
    rx = x1 % 0x4000;
    ly = y1 / 0x4000;
    ry = y1 % 0x4000;
    a = lx * ly;
    b = lx * ry + ly * rx;
    c = rx * ry;
    lx = x2 / 0x4000;
    rx = x2 % 0x4000;
    ly = y2 / 0x4000;
    ry = y2 % 0x4000;
    a += lx * ly;
    b += lx * ry + ly * rx;
    c += rx * ry;
    lx = x3 / 0x4000;
    rx = x3 % 0x4000;
    ly = y3 / 0x4000;
    ry = y3 % 0x4000;
    a -= lx * ly;
    b -= lx * ry + ly * rx;
    c -= rx * ry;
  };
  if (a == 0)
    goto ez;
  if (a < 0)
    a = -a, b = -b, c = -c, s3 = -s3;
  while (c < 0) {
    a--;
    c += 0x10000000;
    if (a == 0)
      goto ez;
  }
  if (b >= 0)
    return -s3;
  b = -b;
  a -= b / 0x4000;
  if (a > 0)
    return -s3;
  if (a <= -2)
    return s3;
  return -s3 * ((a * 0x4000 - b % 0x4000) * 0x4000 + c);
ez:
  if (b >= 0x8000)
    return -s3;
  if (b <= -0x8000)
    return s3;
  return -s3 * (b * 0x4000 + c);
  ;
}


x86 assembly (clang, -O0):
<sign_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     1136 <sign_test+0x36>
cmpq   $0x0,-0x28(%rbp)
jne    1143 <sign_test+0x43>
movq   $0x0,-0x40(%rbp)
jmp    1172 <sign_test+0x72>
cmpq   $0x0,-0x10(%rbp)
jle    115b <sign_test+0x5b>
movq   $0x1,-0x40(%rbp)
jmp    116d <sign_test+0x6d>
xor    %eax,%eax
sub    -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
movq   $0xffffffffffffffff,-0x40(%rbp)
ff
jmp    1172 <sign_test+0x72>
cmpq   $0x0,-0x18(%rbp)
je     1188 <sign_test+0x88>
cmpq   $0x0,-0x30(%rbp)
jne    1195 <sign_test+0x95>
movq   $0x0,-0x48(%rbp)
jmp    11c4 <sign_test+0xc4>
cmpq   $0x0,-0x18(%rbp)
jle    11ad <sign_test+0xad>
movq   $0x1,-0x48(%rbp)
jmp    11bf <sign_test+0xbf>
xor    %eax,%eax
sub    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
movq   $0xffffffffffffffff,-0x48(%rbp)
ff
jmp    11c4 <sign_test+0xc4>
cmpq   $0x0,-0x20(%rbp)
je     11da <sign_test+0xda>
cmpq   $0x0,-0x38(%rbp)
jne    11e7 <sign_test+0xe7>
movq   $0x0,-0x50(%rbp)
jmp    1216 <sign_test+0x116>
cmpq   $0x0,-0x20(%rbp)
jle    11ff <sign_test+0xff>
movq   $0x1,-0x50(%rbp)
jmp    1211 <sign_test+0x111>
xor    %eax,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
movq   $0xffffffffffffffff,-0x50(%rbp)
ff
jmp    1216 <sign_test+0x116>
cmpq   $0x0,-0x40(%rbp)
jl     1237 <sign_test+0x137>
cmpq   $0x0,-0x48(%rbp)
jl     1237 <sign_test+0x137>
cmpq   $0x0,-0x50(%rbp)
jge    1258 <sign_test+0x158>
cmpq   $0x0,-0x40(%rbp)
jg     126d <sign_test+0x16d>
cmpq   $0x0,-0x48(%rbp)
jg     126d <sign_test+0x16d>
cmpq   $0x0,-0x50(%rbp)
jg     126d <sign_test+0x16d>
mov    -0x40(%rbp),%rax
add    -0x48(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
cmpq   $0x0,-0x50(%rbp)
je     1286 <sign_test+0x186>
mov    -0x50(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    12d3 <sign_test+0x1d3>
mov    -0x50(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    132e <sign_test+0x22e>
mov    -0x50(%rbp),%rax
cmp    -0x48(%rbp),%rax
jne    1329 <sign_test+0x229>
mov    -0x50(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    132e <sign_test+0x22e>
mov    -0x10(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,-0x78(%rbp)
mov    -0x10(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x80(%rbp)
mov    -0x28(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,-0x88(%rbp)
mov    -0x28(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x90(%rbp)
mov    -0x78(%rbp),%rax
imul   -0x88(%rbp),%rax
ff
mov    %rax,-0x58(%rbp)
mov    -0x78(%rbp),%rax
imul   -0x90(%rbp),%rax
ff
mov    -0x88(%rbp),%rcx
imul   -0x80(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x80(%rbp),%rax
imul   -0x90(%rbp),%rax
ff
mov    %rax,-0x68(%rbp)
mov    -0x18(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,-0x78(%rbp)
mov    -0x18(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x80(%rbp)
mov    -0x30(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,-0x88(%rbp)
mov    -0x30(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x90(%rbp)
mov    -0x78(%rbp),%rax
imul   -0x88(%rbp),%rax
ff
add    -0x58(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x78(%rbp),%rax
imul   -0x90(%rbp),%rax
ff
mov    -0x88(%rbp),%rcx
imul   -0x80(%rbp),%rcx
add    %rcx,%rax
add    -0x60(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x80(%rbp),%rax
imul   -0x90(%rbp),%rax
ff
add    -0x68(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x20(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,-0x78(%rbp)
mov    -0x20(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x80(%rbp)
mov    -0x38(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,-0x88(%rbp)
mov    -0x38(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x90(%rbp)
mov    -0x78(%rbp),%rcx
imul   -0x88(%rbp),%rcx
ff
mov    -0x58(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x58(%rbp)
mov    -0x78(%rbp),%rcx
imul   -0x90(%rbp),%rcx
ff
mov    -0x88(%rbp),%rax
imul   -0x80(%rbp),%rax
add    %rax,%rcx
mov    -0x60(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x80(%rbp),%rcx
imul   -0x90(%rbp),%rcx
ff
mov    -0x68(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x68(%rbp)
cmpq   $0x0,-0x58(%rbp)
jne    1506 <sign_test+0x406>
jmp    162c <sign_test+0x52c>
cmpq   $0x0,-0x58(%rbp)
jge    1539 <sign_test+0x439>
xor    %eax,%eax
sub    -0x58(%rbp),%rax
mov    %rax,-0x58(%rbp)
xor    %eax,%eax
sub    -0x60(%rbp),%rax
mov    %rax,-0x60(%rbp)
xor    %eax,%eax
sub    -0x68(%rbp),%rax
mov    %rax,-0x68(%rbp)
xor    %eax,%eax
sub    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    153e <sign_test+0x43e>
cmpq   $0x0,-0x68(%rbp)
jge    1578 <sign_test+0x478>
mov    -0x58(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x58(%rbp)
mov    -0x68(%rbp),%rax
add    $0x10000000,%rax
mov    %rax,-0x68(%rbp)
cmpq   $0x0,-0x58(%rbp)
jne    1573 <sign_test+0x473>
jmp    162c <sign_test+0x52c>
jmp    153e <sign_test+0x43e>
cmpq   $0x0,-0x60(%rbp)
jl     1592 <sign_test+0x492>
xor    %eax,%eax
sub    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
xor    %eax,%eax
sub    -0x60(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
mov    $0x4000,%ecx
cqto
idiv   %rcx
mov    %rax,%rcx
mov    -0x58(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x58(%rbp)
cmpq   $0x0,-0x58(%rbp)
jle    15d2 <sign_test+0x4d2>
xor    %eax,%eax
sub    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
cmpq   $0xfffffffffffffffe,-0x58(%rbp)
jg     15ea <sign_test+0x4ea>
mov    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
xor    %eax,%eax
sub    -0x50(%rbp),%rax
mov    %rax,-0x98(%rbp)
mov    -0x58(%rbp),%rcx
shl    $0xe,%rcx
mov    -0x60(%rbp),%rax
mov    $0x4000,%esi
cqto
idiv   %rsi
mov    -0x98(%rbp),%rax
sub    %rdx,%rcx
shl    $0xe,%rcx
add    -0x68(%rbp),%rcx
imul   %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
cmpq   $0x8000,-0x60(%rbp)
jl     1649 <sign_test+0x549>
xor    %eax,%eax
sub    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
cmpq   $0xffffffffffff8000,-0x60(%rbp)
ff
jg     1664 <sign_test+0x564>
mov    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    167e <sign_test+0x57e>
xor    %eax,%eax
sub    -0x50(%rbp),%rax
mov    -0x60(%rbp),%rcx
shl    $0xe,%rcx
add    -0x68(%rbp),%rcx
imul   %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sign_test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    $0x1,%bl
test   %rdi,%rdi
je     112d <sign_test+0x2d>
test   %rcx,%rcx
je     112d <sign_test+0x2d>
test   %rdi,%rdi
jle    1139 <sign_test+0x39>
mov    $0x1,%eax
mov    %rax,-0x8(%rsp)
xor    %r11d,%r11d
mov    $0x1,%r15b
jmp    114b <sign_test+0x4b>
xor    %eax,%eax
mov    %rax,-0x8(%rsp)
mov    $0x1,%r15b
jmp    1148 <sign_test+0x48>
neg    %rdi
movq   $0xffffffffffffffff,-0x8(%rsp)
ff ff
xor    %r15d,%r15d
mov    $0x1,%r11b
xor    %eax,%eax
test   %rsi,%rsi
je     1163 <sign_test+0x63>
test   %r8,%r8
je     1163 <sign_test+0x63>
test   %rsi,%rsi
jle    1191 <sign_test+0x91>
mov    $0x1,%eax
xor    %ebx,%ebx
mov    $0x1,%r14b
xor    %r13d,%r13d
mov    $0x1,%r12b
test   %rdx,%rdx
je     1189 <sign_test+0x89>
test   %r9,%r9
je     1189 <sign_test+0x89>
test   %rdx,%rdx
jle    11a0 <sign_test+0xa0>
mov    $0x1,%r13d
xor    %r12d,%r12d
mov    $0x1,%r10b
jmp    11ad <sign_test+0xad>
mov    $0x1,%r10b
mov    $0x1,%bpl
jmp    11af <sign_test+0xaf>
neg    %rsi
mov    $0xffffffffffffffff,%rax
xor    %r14d,%r14d
jmp    1166 <sign_test+0x66>
neg    %rdx
mov    $0xffffffffffffffff,%r13
xor    %r10d,%r10d
xor    %ebp,%ebp
and    %r14b,%r15b
test   %r10b,%r15b
jne    11e6 <sign_test+0xe6>
and    %bl,%r11b
and    %r12b,%r11b
jne    11e6 <sign_test+0xe6>
mov    -0x8(%rsp),%rbx
mov    %rbx,%r12
cmp    %rbx,%r13
sete   %bl
or     %bl,%bpl
je     11f3 <sign_test+0xf3>
mov    %rcx,%r11
mov    %r9,%r10
mov    %r8,%rcx
mov    %rax,%r12
mov    %rsi,%r9
mov    %rdx,%rsi
jmp    1212 <sign_test+0x112>
add    -0x8(%rsp),%rax
add    %r13,%rax
jmp    13f7 <sign_test+0x2f7>
cmp    %rax,%r13
jne    1203 <sign_test+0x103>
mov    %r9,%r11
mov    %r8,%r10
mov    %rdi,%r9
jmp    1215 <sign_test+0x115>
mov    %rcx,%r11
mov    %r8,%r10
mov    %r9,%rcx
mov    %r13,%r12
mov    %rdx,%r9
mov    %rdi,%rdx
lea    0x3fff(%rdx),%r15
test   %rdx,%rdx
cmovns %rdx,%r15
mov    %r15,%rax
and    $0xffffffffffffc000,%rax
sub    %rax,%rdx
sar    $0xe,%r15
lea    0x3fff(%r11),%rbp
test   %r11,%r11
cmovns %r11,%rbp
mov    %rbp,%rax
and    $0xffffffffffffc000,%rax
sub    %rax,%r11
sar    $0xe,%rbp
mov    %r15,%r8
imul   %rbp,%r8
imul   %r11,%r15
imul   %rdx,%rbp
imul   %rdx,%r11
lea    0x3fff(%rsi),%rdi
test   %rsi,%rsi
cmovns %rsi,%rdi
mov    %rdi,%rax
and    $0xffffffffffffc000,%rax
sub    %rax,%rsi
sar    $0xe,%rdi
lea    0x3fff(%r10),%rdx
test   %r10,%r10
cmovns %r10,%rdx
mov    %rdx,%rax
and    $0xffffffffffffc000,%rax
sub    %rax,%r10
sar    $0xe,%rdx
mov    %rdi,%r14
imul   %rdx,%r14
imul   %r10,%rdi
imul   %rsi,%rdx
imul   %rsi,%r10
lea    0x3fff(%r9),%rax
test   %r9,%r9
cmovns %r9,%rax
mov    %rax,%rsi
and    $0xffffffffffffc000,%rsi
sub    %rsi,%r9
sar    $0xe,%rax
lea    0x3fff(%rcx),%rbx
test   %rcx,%rcx
cmovns %rcx,%rbx
mov    %rbx,%rsi
and    $0xffffffffffffc000,%rsi
sub    %rsi,%rcx
sar    $0xe,%rbx
mov    %rax,%rsi
imul   %rbx,%rsi
sub    %rsi,%r14
imul   %rcx,%rax
imul   %r9,%rbx
add    %rax,%rbx
add    %rdi,%rdx
add    %rbp,%rdx
add    %r15,%rdx
sub    %rbx,%rdx
imul   %r9,%rcx
sub    %rcx,%r10
add    %r11,%r10
add    %r8,%r14
je     1373 <sign_test+0x273>
js     1378 <sign_test+0x278>
mov    %r12,%rax
test   %r10,%r10
js     138c <sign_test+0x28c>
mov    %r14,%rsi
mov    %r10,%rcx
test   %rdx,%rdx
jns    13f4 <sign_test+0x2f4>
neg    %rdx
mov    %rdx,%rdi
shr    $0xe,%rdi
sub    %rdi,%rsi
test   %rsi,%rsi
jg     13f4 <sign_test+0x2f4>
cmp    $0xffffffffffffffff,%rsi
jl     13f7 <sign_test+0x2f7>
shl    $0xe,%rsi
and    $0x3fff,%edx
sub    %rsi,%rdx
shl    $0xe,%rdx
sub    %rcx,%rdx
jmp    1415 <sign_test+0x315>
mov    %r12,%rax
jmp    13eb <sign_test+0x2eb>
neg    %r14
neg    %rdx
neg    %r10
mov    %r12,%rax
neg    %rax
test   %r10,%r10
jns    132b <sign_test+0x22b>
lea    0x10000000(%r10),%rcx
mov    %r14,%rsi
add    $0xffffffffffffffff,%rsi
je     13e8 <sign_test+0x2e8>
cmp    $0xffffffffefffffff,%r10
jg     1331 <sign_test+0x231>
lea    0x20000000(%r10),%rcx
mov    %r14,%rsi
add    $0xfffffffffffffffe,%rsi
je     13e8 <sign_test+0x2e8>
cmp    $0xffffffffdfffffff,%r10
jg     1331 <sign_test+0x231>
lea    0x30000000(%r10),%rcx
add    $0xfffffffffffffffd,%r14
je     13e8 <sign_test+0x2e8>
mov    %r14,%rsi
cmp    $0xffffffffcfffffff,%r10
jg     1331 <sign_test+0x231>
add    $0x40000000,%r10
jmp    13eb <sign_test+0x2eb>
mov    %rcx,%r10
cmp    $0x8000,%rdx
jl     1402 <sign_test+0x302>
neg    %rax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0xffffffffffff8001,%rdx
jl     13f7 <sign_test+0x2f7>
shl    $0xe,%rdx
add    %r10,%rdx
neg    %rdx
imul   %rdx,%rax
jmp    13f7 <sign_test+0x2f7>

LLVM IR (-O0):
define i64 @sign_test(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5) {
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
%21 = alloca i64
%22 = alloca i64
%23 = alloca i64
%24 = alloca i64
store i64 %0, i64* %8
store i64 %1, i64* %9
store i64 %2, i64* %10
store i64 %3, i64* %11
store i64 %4, i64* %12
store i64 %5, i64* %13
%25 = load i64, i64* %8
%26 = icmp eq i64 %25, 0
br i1 %26, label %30, label %27
27: ; preds = %6
%28 = load i64, i64* %11
%29 = icmp eq i64 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %27, %6
store i64 0, i64* %14
br label %39
31: ; preds = %27
%32 = load i64, i64* %8
%33 = icmp sgt i64 %32, 0
br i1 %33, label %34, label %35
34: ; preds = %31
store i64 1, i64* %14
br label %38
35: ; preds = %31
%36 = load i64, i64* %8
%37 = sub nsw i64 0, %36
store i64 %37, i64* %8
store i64 -1, i64* %14
br label %38
38: ; preds = %35, %34
br label %39
39: ; preds = %38, %30
%40 = load i64, i64* %9
%41 = icmp eq i64 %40, 0
br i1 %41, label %45, label %42
42: ; preds = %39
%43 = load i64, i64* %12
%44 = icmp eq i64 %43, 0
br i1 %44, label %45, label %46
45: ; preds = %42, %39
store i64 0, i64* %15
br label %54
46: ; preds = %42
%47 = load i64, i64* %9
%48 = icmp sgt i64 %47, 0
br i1 %48, label %49, label %50
49: ; preds = %46
store i64 1, i64* %15
br label %53
50: ; preds = %46
%51 = load i64, i64* %9
%52 = sub nsw i64 0, %51
store i64 %52, i64* %9
store i64 -1, i64* %15
br label %53
53: ; preds = %50, %49
br label %54
54: ; preds = %53, %45
%55 = load i64, i64* %10
%56 = icmp eq i64 %55, 0
br i1 %56, label %60, label %57
57: ; preds = %54
%58 = load i64, i64* %13
%59 = icmp eq i64 %58, 0
br i1 %59, label %60, label %61
60: ; preds = %57, %54
store i64 0, i64* %16
br label %69
61: ; preds = %57
%62 = load i64, i64* %10
%63 = icmp sgt i64 %62, 0
br i1 %63, label %64, label %65
64: ; preds = %61
store i64 1, i64* %16
br label %68
65: ; preds = %61
%66 = load i64, i64* %10
%67 = sub nsw i64 0, %66
store i64 %67, i64* %10
store i64 -1, i64* %16
br label %68
68: ; preds = %65, %64
br label %69
69: ; preds = %68, %60
%70 = load i64, i64* %14
%71 = icmp sge i64 %70, 0
br i1 %71, label %72, label %78
72: ; preds = %69
%73 = load i64, i64* %15
%74 = icmp sge i64 %73, 0
br i1 %74, label %75, label %78
75: ; preds = %72
%76 = load i64, i64* %16
%77 = icmp sge i64 %76, 0
br i1 %77, label %87, label %78
78: ; preds = %75, %72, %69
%79 = load i64, i64* %14
%80 = icmp sle i64 %79, 0
br i1 %80, label %81, label %93
81: ; preds = %78
%82 = load i64, i64* %15
%83 = icmp sle i64 %82, 0
br i1 %83, label %84, label %93
84: ; preds = %81
%85 = load i64, i64* %16
%86 = icmp sle i64 %85, 0
br i1 %86, label %87, label %93
87: ; preds = %84, %75
%88 = load i64, i64* %14
%89 = load i64, i64* %15
%90 = add nsw i64 %88, %89
%91 = load i64, i64* %16
%92 = add nsw i64 %90, %91
store i64 %92, i64* %7
br label %283
93: ; preds = %84, %81, %78
%94 = load i64, i64* %16
%95 = icmp eq i64 %94, 0
br i1 %95, label %100, label %96
96: ; preds = %93
%97 = load i64, i64* %16
%98 = load i64, i64* %14
%99 = icmp eq i64 %97, %98
br i1 %99, label %100, label %110
100: ; preds = %96, %93
%101 = load i64, i64* %16
store i64 %101, i64* %20
%102 = load i64, i64* %15
store i64 %102, i64* %16
%103 = load i64, i64* %20
store i64 %103, i64* %15
%104 = load i64, i64* %10
store i64 %104, i64* %20
%105 = load i64, i64* %9
store i64 %105, i64* %10
%106 = load i64, i64* %20
store i64 %106, i64* %9
%107 = load i64, i64* %13
store i64 %107, i64* %20
%108 = load i64, i64* %12
store i64 %108, i64* %13
%109 = load i64, i64* %20
store i64 %109, i64* %12
br label %125
110: ; preds = %96
%111 = load i64, i64* %16
%112 = load i64, i64* %15
%113 = icmp eq i64 %111, %112
br i1 %113, label %114, label %124
114: ; preds = %110
%115 = load i64, i64* %16
store i64 %115, i64* %20
%116 = load i64, i64* %14
store i64 %116, i64* %16
%117 = load i64, i64* %20
store i64 %117, i64* %14
%118 = load i64, i64* %10
store i64 %118, i64* %20
%119 = load i64, i64* %8
store i64 %119, i64* %10
%120 = load i64, i64* %20
store i64 %120, i64* %8
%121 = load i64, i64* %13
store i64 %121, i64* %20
%122 = load i64, i64* %11
store i64 %122, i64* %13
%123 = load i64, i64* %20
store i64 %123, i64* %11
br label %124
124: ; preds = %114, %110
br label %125
125: ; preds = %124, %100
%126 = load i64, i64* %8
%127 = sdiv i64 %126, 16384
store i64 %127, i64* %21
%128 = load i64, i64* %8
%129 = srem i64 %128, 16384
store i64 %129, i64* %22
%130 = load i64, i64* %11
%131 = sdiv i64 %130, 16384
store i64 %131, i64* %23
%132 = load i64, i64* %11
%133 = srem i64 %132, 16384
store i64 %133, i64* %24
%134 = load i64, i64* %21
%135 = load i64, i64* %23
%136 = mul nsw i64 %134, %135
store i64 %136, i64* %17
%137 = load i64, i64* %21
%138 = load i64, i64* %24
%139 = mul nsw i64 %137, %138
%140 = load i64, i64* %23
%141 = load i64, i64* %22
%142 = mul nsw i64 %140, %141
%143 = add nsw i64 %139, %142
store i64 %143, i64* %18
%144 = load i64, i64* %22
%145 = load i64, i64* %24
%146 = mul nsw i64 %144, %145
store i64 %146, i64* %19
%147 = load i64, i64* %9
%148 = sdiv i64 %147, 16384
store i64 %148, i64* %21
%149 = load i64, i64* %9
%150 = srem i64 %149, 16384
store i64 %150, i64* %22
%151 = load i64, i64* %12
%152 = sdiv i64 %151, 16384
store i64 %152, i64* %23
%153 = load i64, i64* %12
%154 = srem i64 %153, 16384
store i64 %154, i64* %24
%155 = load i64, i64* %21
%156 = load i64, i64* %23
%157 = mul nsw i64 %155, %156
%158 = load i64, i64* %17
%159 = add nsw i64 %158, %157
store i64 %159, i64* %17
%160 = load i64, i64* %21
%161 = load i64, i64* %24
%162 = mul nsw i64 %160, %161
%163 = load i64, i64* %23
%164 = load i64, i64* %22
%165 = mul nsw i64 %163, %164
%166 = add nsw i64 %162, %165
%167 = load i64, i64* %18
%168 = add nsw i64 %167, %166
store i64 %168, i64* %18
%169 = load i64, i64* %22
%170 = load i64, i64* %24
%171 = mul nsw i64 %169, %170
%172 = load i64, i64* %19
%173 = add nsw i64 %172, %171
store i64 %173, i64* %19
%174 = load i64, i64* %10
%175 = sdiv i64 %174, 16384
store i64 %175, i64* %21
%176 = load i64, i64* %10
%177 = srem i64 %176, 16384
store i64 %177, i64* %22
%178 = load i64, i64* %13
%179 = sdiv i64 %178, 16384
store i64 %179, i64* %23
%180 = load i64, i64* %13
%181 = srem i64 %180, 16384
store i64 %181, i64* %24
%182 = load i64, i64* %21
%183 = load i64, i64* %23
%184 = mul nsw i64 %182, %183
%185 = load i64, i64* %17
%186 = sub nsw i64 %185, %184
store i64 %186, i64* %17
%187 = load i64, i64* %21
%188 = load i64, i64* %24
%189 = mul nsw i64 %187, %188
%190 = load i64, i64* %23
%191 = load i64, i64* %22
%192 = mul nsw i64 %190, %191
%193 = add nsw i64 %189, %192
%194 = load i64, i64* %18
%195 = sub nsw i64 %194, %193
store i64 %195, i64* %18
%196 = load i64, i64* %22
%197 = load i64, i64* %24
%198 = mul nsw i64 %196, %197
%199 = load i64, i64* %19
%200 = sub nsw i64 %199, %198
store i64 %200, i64* %19
%201 = load i64, i64* %17
%202 = icmp eq i64 %201, 0
br i1 %202, label %203, label %204
203: ; preds = %125
br label %264
204: ; preds = %125
%205 = load i64, i64* %17
%206 = icmp slt i64 %205, 0
br i1 %206, label %207, label %216
207: ; preds = %204
%208 = load i64, i64* %17
%209 = sub nsw i64 0, %208
store i64 %209, i64* %17
%210 = load i64, i64* %18
%211 = sub nsw i64 0, %210
store i64 %211, i64* %18
%212 = load i64, i64* %19
%213 = sub nsw i64 0, %212
store i64 %213, i64* %19
%214 = load i64, i64* %16
%215 = sub nsw i64 0, %214
store i64 %215, i64* %16
br label %216
216: ; preds = %207, %204
br label %217
217: ; preds = %228, %216
%218 = load i64, i64* %19
%219 = icmp slt i64 %218, 0
br i1 %219, label %220, label %229
220: ; preds = %217
%221 = load i64, i64* %17
%222 = add nsw i64 %221, -1
store i64 %222, i64* %17
%223 = load i64, i64* %19
%224 = add nsw i64 %223, 268435456
store i64 %224, i64* %19
%225 = load i64, i64* %17
%226 = icmp eq i64 %225, 0
br i1 %226, label %227, label %228
227: ; preds = %220
br label %264
228: ; preds = %220
br label %217
229: ; preds = %217
%230 = load i64, i64* %18
%231 = icmp sge i64 %230, 0
br i1 %231, label %232, label %235
232: ; preds = %229
%233 = load i64, i64* %16
%234 = sub nsw i64 0, %233
store i64 %234, i64* %7
br label %283
235: ; preds = %229
%236 = load i64, i64* %18
%237 = sub nsw i64 0, %236
store i64 %237, i64* %18
%238 = load i64, i64* %18
%239 = sdiv i64 %238, 16384
%240 = load i64, i64* %17
%241 = sub nsw i64 %240, %239
store i64 %241, i64* %17
%242 = load i64, i64* %17
%243 = icmp sgt i64 %242, 0
br i1 %243, label %244, label %247
244: ; preds = %235
%245 = load i64, i64* %16
%246 = sub nsw i64 0, %245
store i64 %246, i64* %7
br label %283
247: ; preds = %235
%248 = load i64, i64* %17
%249 = icmp sle i64 %248, -2
br i1 %249, label %250, label %252
250: ; preds = %247
%251 = load i64, i64* %16
store i64 %251, i64* %7
br label %283
252: ; preds = %247
%253 = load i64, i64* %16
%254 = sub nsw i64 0, %253
%255 = load i64, i64* %17
%256 = mul nsw i64 %255, 16384
%257 = load i64, i64* %18
%258 = srem i64 %257, 16384
%259 = sub nsw i64 %256, %258
%260 = mul nsw i64 %259, 16384
%261 = load i64, i64* %19
%262 = add nsw i64 %260, %261
%263 = mul nsw i64 %254, %262
store i64 %263, i64* %7
br label %283
264: ; preds = %227, %203
%265 = load i64, i64* %18
%266 = icmp sge i64 %265, 32768
br i1 %266, label %267, label %270
267: ; preds = %264
%268 = load i64, i64* %16
%269 = sub nsw i64 0, %268
store i64 %269, i64* %7
br label %283
270: ; preds = %264
%271 = load i64, i64* %18
%272 = icmp sle i64 %271, -32768
br i1 %272, label %273, label %275
273: ; preds = %270
%274 = load i64, i64* %16
store i64 %274, i64* %7
br label %283
275: ; preds = %270
%276 = load i64, i64* %16
%277 = sub nsw i64 0, %276
%278 = load i64, i64* %18
%279 = mul nsw i64 %278, 16384
%280 = load i64, i64* %19
%281 = add nsw i64 %279, %280
%282 = mul nsw i64 %277, %281
store i64 %282, i64* %7
br label %283
283: ; preds = %275, %273, %267, %252, %250, %244, %232, %87
%284 = load i64, i64* %7
ret i64 %284
}

LLVM IR (-O2):
define i64 @sign_test(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5) {
%7 = icmp eq i64 %0, 0
%8 = icmp eq i64 %3, 0
%9 = or i1 %7, %8
br i1 %9, label %14, label %10
10: ; preds = %6
%11 = icmp sgt i64 %0, 0
br i1 %11, label %14, label %12
12: ; preds = %10
%13 = sub nsw i64 0, %0
br label %14
14: ; preds = %10, %6, %12
%15 = phi i1 [ false, %12 ], [ true, %6 ], [ true, %10 ]
%16 = phi i1 [ true, %12 ], [ true, %6 ], [ false, %10 ]
%17 = phi i64 [ -1, %12 ], [ 0, %6 ], [ 1, %10 ]
%18 = phi i64 [ %13, %12 ], [ %0, %6 ], [ %0, %10 ]
%19 = icmp eq i64 %1, 0
%20 = icmp eq i64 %4, 0
%21 = or i1 %19, %20
br i1 %21, label %26, label %22
22: ; preds = %14
%23 = icmp sgt i64 %1, 0
br i1 %23, label %26, label %24
24: ; preds = %22
%25 = sub nsw i64 0, %1
br label %26
26: ; preds = %22, %14, %24
%27 = phi i1 [ false, %24 ], [ true, %14 ], [ true, %22 ]
%28 = phi i1 [ true, %24 ], [ true, %14 ], [ false, %22 ]
%29 = phi i64 [ -1, %24 ], [ 0, %14 ], [ 1, %22 ]
%30 = phi i64 [ %25, %24 ], [ %1, %14 ], [ %1, %22 ]
%31 = icmp eq i64 %2, 0
%32 = icmp eq i64 %5, 0
%33 = or i1 %31, %32
br i1 %33, label %38, label %34
34: ; preds = %26
%35 = icmp sgt i64 %2, 0
br i1 %35, label %38, label %36
36: ; preds = %34
%37 = sub nsw i64 0, %2
br label %38
38: ; preds = %34, %26, %36
%39 = phi i1 [ false, %36 ], [ true, %26 ], [ true, %34 ]
%40 = phi i1 [ true, %36 ], [ true, %26 ], [ false, %34 ]
%41 = phi i1 [ false, %36 ], [ true, %26 ], [ false, %34 ]
%42 = phi i64 [ -1, %36 ], [ 0, %26 ], [ 1, %34 ]
%43 = phi i64 [ %37, %36 ], [ %2, %26 ], [ %2, %34 ]
%44 = and i1 %15, %27
%45 = and i1 %44, %39
%46 = and i1 %16, %28
%47 = and i1 %46, %40
%48 = or i1 %45, %47
br i1 %48, label %49, label %52
49: ; preds = %38
%50 = add nsw i64 %29, %17
%51 = add nsw i64 %50, %42
br label %168
52: ; preds = %38
%53 = icmp eq i64 %42, %17
%54 = or i1 %41, %53
br i1 %54, label %58, label %55
55: ; preds = %52
%56 = icmp eq i64 %42, %29
br i1 %56, label %57, label %58
57: ; preds = %55
br label %58
58: ; preds = %52, %55, %57
%59 = phi i64 [ %5, %57 ], [ %3, %55 ], [ %3, %52 ]
%60 = phi i64 [ %4, %57 ], [ %4, %55 ], [ %5, %52 ]
%61 = phi i64 [ %3, %57 ], [ %5, %55 ], [ %4, %52 ]
%62 = phi i64 [ %17, %57 ], [ %42, %55 ], [ %29, %52 ]
%63 = phi i64 [ %18, %57 ], [ %43, %55 ], [ %30, %52 ]
%64 = phi i64 [ %30, %57 ], [ %30, %55 ], [ %43, %52 ]
%65 = phi i64 [ %43, %57 ], [ %18, %55 ], [ %18, %52 ]
%66 = sdiv i64 %65, 16384
%67 = srem i64 %65, 16384
%68 = sdiv i64 %59, 16384
%69 = srem i64 %59, 16384
%70 = mul nsw i64 %66, %68
%71 = mul nsw i64 %66, %69
%72 = mul nsw i64 %67, %68
%73 = mul nsw i64 %67, %69
%74 = sdiv i64 %64, 16384
%75 = srem i64 %64, 16384
%76 = sdiv i64 %60, 16384
%77 = srem i64 %60, 16384
%78 = mul nsw i64 %74, %76
%79 = mul nsw i64 %74, %77
%80 = mul nsw i64 %75, %76
%81 = mul nsw i64 %75, %77
%82 = sdiv i64 %63, 16384
%83 = srem i64 %63, 16384
%84 = sdiv i64 %61, 16384
%85 = srem i64 %61, 16384
%86 = mul nsw i64 %82, %84
%87 = sub i64 %78, %86
%88 = add i64 %87, %70
%89 = mul nsw i64 %82, %85
%90 = mul nsw i64 %83, %84
%91 = add i64 %89, %90
%92 = add i64 %79, %80
%93 = add i64 %92, %72
%94 = add i64 %93, %71
%95 = sub i64 %94, %91
%96 = mul nsw i64 %83, %85
%97 = sub nsw i64 %81, %96
%98 = add nsw i64 %97, %73
%99 = icmp eq i64 %88, 0
br i1 %99, label %155, label %100
100: ; preds = %58
%101 = icmp slt i64 %88, 0
br i1 %101, label %102, label %107
102: ; preds = %100
%103 = sub nsw i64 0, %88
%104 = sub nsw i64 0, %95
%105 = sub nsw i64 0, %98
%106 = sub nsw i64 0, %62
br label %107
107: ; preds = %100, %102
%108 = phi i64 [ %106, %102 ], [ %62, %100 ]
%109 = phi i64 [ %103, %102 ], [ %88, %100 ]
%110 = phi i64 [ %104, %102 ], [ %95, %100 ]
%111 = phi i64 [ %105, %102 ], [ %98, %100 ]
%112 = icmp slt i64 %111, 0
br i1 %112, label %113, label %133
113: ; preds = %107
%114 = add nsw i64 %109, -1
%115 = add nsw i64 %111, 268435456
%116 = icmp eq i64 %114, 0
br i1 %116, label %155, label %117
117: ; preds = %113
%118 = icmp slt i64 %111, -268435456
br i1 %118, label %119, label %133
119: ; preds = %117
%120 = add nsw i64 %109, -2
%121 = add nsw i64 %111, 536870912
%122 = icmp eq i64 %120, 0
br i1 %122, label %155, label %123
123: ; preds = %119
%124 = icmp slt i64 %111, -536870912
br i1 %124, label %125, label %133
125: ; preds = %123
%126 = add nsw i64 %109, -3
%127 = add nsw i64 %111, 805306368
%128 = icmp eq i64 %126, 0
br i1 %128, label %155, label %129
129: ; preds = %125
%130 = icmp slt i64 %111, -805306368
br i1 %130, label %131, label %133
131: ; preds = %129
%132 = add nsw i64 %111, 1073741824
br label %155
133: ; preds = %129, %123, %117, %107
%134 = phi i64 [ %109, %107 ], [ %114, %117 ], [ %120, %123 ], [ %126, %129 ]
%135 = phi i64 [ %111, %107 ], [ %115, %117 ], [ %121, %123 ], [ %127, %129 ]
%136 = icmp sgt i64 %110, -1
br i1 %136, label %137, label %139
137: ; preds = %133
%138 = sub nsw i64 0, %108
br label %168
139: ; preds = %133
%140 = sub i64 0, %110
%141 = lshr i64 %140, 14
%142 = sub i64 %134, %141
%143 = icmp sgt i64 %142, 0
br i1 %143, label %144, label %146
144: ; preds = %139
%145 = sub nsw i64 0, %108
br label %168
146: ; preds = %139
%147 = icmp slt i64 %142, -1
br i1 %147, label %168, label %148
148: ; preds = %146
%149 = mul nsw i64 %142, -16384
%150 = and i64 %140, 16383
%151 = or i64 %149, %150
%152 = shl nuw nsw i64 %151, 14
%153 = sub nsw i64 %152, %135
%154 = mul i64 %153, %108
br label %168
155: ; preds = %113, %119, %125, %131, %58
%156 = phi i64 [ %62, %58 ], [ %108, %131 ], [ %108, %125 ], [ %108, %119 ], [ %108, %113 ]
%157 = phi i64 [ %95, %58 ], [ %110, %131 ], [ %110, %125 ], [ %110, %119 ], [ %110, %113 ]
%158 = phi i64 [ %98, %58 ], [ %115, %113 ], [ %121, %119 ], [ %127, %125 ], [ %132, %131 ]
%159 = icmp sgt i64 %157, 32767
br i1 %159, label %160, label %162
160: ; preds = %155
%161 = sub nsw i64 0, %156
br label %168
162: ; preds = %155
%163 = icmp slt i64 %157, -32767
br i1 %163, label %168, label %164
164: ; preds = %162
%165 = mul nsw i64 %157, -16384
%166 = sub i64 %165, %158
%167 = mul i64 %166, %156
br label %168
168: ; preds = %162, %146, %164, %160, %148, %144, %137, %49
%169 = phi i64 [ %51, %49 ], [ %161, %160 ], [ %167, %164 ], [ %138, %137 ], [ %145, %144 ], [ %154, %148 ], [ %108, %146 ], [ %156, %162 ]
ret i64 %169
}