#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 ordering_err_2();
int compare_ulong(void *context, const unsigned long *check,
                  const unsigned long *baseline) {
  if (!check || !baseline)
    return ordering_err_2();
  return ((
      (((((((((((((((((signed long)(*check)) - ((signed long)(*baseline))))) <=
                  (((0))))
                     ? (((((((signed long)(*check)) -
                            ((signed long)(*baseline))))) < (((0))))
                            ? ((-1))
                            : ((0)))
                     : ((1))))) ==
              ((((((((((
                      ((((*check))) <= (((*baseline))))
                          ? (((((*check))) < (((*baseline)))) ? ((-1)) : ((0)))
                          : ((1)))))))) <= (((0))))
                     ? ((((((((((((*check))) <= (((*baseline))))
                                   ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                       : ((0)))
                                   : ((1)))))))) < (((0))))
                            ? ((-1))
                            : ((0)))
                     : ((1))))))
                 ? ((((signed long)(*check)) - ((signed long)(*baseline))))
                 : (((((
                       ((((*check))) <= (((*baseline))))
                           ? (((((*check))) < (((*baseline)))) ? ((-1)) : ((0)))
                           : ((1))))))))))) !=
         (((int)-(((int)0x37ED)
                  << (8 * (((!!(((!!(sizeof(int))) * ((sizeof(int)) - 1)))) *
                            ((((!!(sizeof(int))) * ((sizeof(int)) - 1))) -
                             1)))))))) &&
        (((((((((((((((signed long)(*check)) - ((signed long)(*baseline))))) <=
                  (((0))))
                     ? (((((((signed long)(*check)) -
                            ((signed long)(*baseline))))) < (((0))))
                            ? ((-1))
                            : ((0)))
                     : ((1))))) ==
              (((((((((
                      (((((*check))) <= (((*baseline))))
                           ? (((((*check))) < (((*baseline)))) ? ((-1)) : ((0)))
                           : ((1)))))))) <= (((0))))
                     ? ((((((((((((*check))) <= (((*baseline))))
                                   ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                       : ((0)))
                                   : ((1)))))))) < (((0))))
                            ? ((-1))
                            : ((0)))
                     : ((1))))))
                 ? ((((signed long)(*check)) - ((signed long)(*baseline))))
                 : (((((
                       ((((*check))) <= (((*baseline))))
                           ? (((((*check))) < (((*baseline)))) ? ((-1)) : ((0)))
                           : ((1))))))))))) !=
         (((int)-(((int)0x37EE)
                  << (8 * (((!!(((!!(sizeof(int))) * ((sizeof(int)) - 1)))) *
                            ((((!!(sizeof(int))) * ((sizeof(int)) - 1))) -
                             1))))))))))
          ? (((((((((((((signed long)(*check)) -
                       ((signed long)(*baseline))))) <= (((0))))
                       ? (((((((signed long)(*check)) -
                              ((signed long)(*baseline))))) < (((0))))
                              ? ((-1))
                              : ((0)))
                       : ((1))))) ==
                ((((((((((((((*check))) <= (((*baseline))))
                              ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                  : ((0)))
                              : ((1)))))))) <= (((0))))
                       ? (((((((
                               (((((*check))) <= (((*baseline))))
                                    ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                        : ((0)))
                                    : ((1)))))))) < (((0))))
                              ? ((-1))
                              : ((0)))
                       : ((1))))))
                   ? ((((signed long)(*check)) - ((signed long)(*baseline))))
                   : (((((((((*check))) <= (((*baseline))))
                              ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                  : ((0)))
                              : ((1))))))))))
          : ((((((((((((((((((signed long)(*check)) -
                            ((signed long)(*baseline))))) <= (((0))))
                            ? (((((((signed long)(*check)) -
                                   ((signed long)(*baseline))))) < (((0))))
                                   ? ((-1))
                                   : ((0)))
                            : ((1))))) ==
                     ((((((((((((((*check))) <= (((*baseline))))
                                   ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                       : ((0)))
                                   : ((1)))))))) <= (((0))))
                            ? ((((((((((((*check))) <= (((*baseline))))
                                          ? (((((*check))) < (((*baseline))))
                                                 ? ((-1))
                                                 : ((0)))
                                          : ((1)))))))) < (((0))))
                                   ? ((-1))
                                   : ((0)))
                            : ((1))))))
                        ? ((((signed long)(*check)) -
                            ((signed long)(*baseline))))
                        : (((((((((*check))) <= (((*baseline))))
                                   ? (((((*check))) < (((*baseline)))) ? ((-1))
                                                                       : ((0)))
                                   : ((1)))))))))))) <= ((0)))
                  ? (((((((((((((((((signed long)(*check)) -
                                   ((signed long)(*baseline))))) <= (((0))))
                                   ? (((((((signed long)(*check)) -
                                          ((signed long)(*baseline))))) <
                                       (((0))))
                                          ? ((-1))
                                          : ((0)))
                                   : ((1))))) ==
                            ((((((((((((((*check))) <= (((*baseline))))
                                          ? (((((*check))) < (((*baseline))))
                                                 ? ((-1))
                                                 : ((0)))
                                          : ((1)))))))) <= (((0))))
                                   ? ((((((((((((*check))) <= (((*baseline))))
                                                 ? (((((*check))) <
                                                     (((*baseline))))
                                                        ? ((-1))
                                                        : ((0)))
                                                 : ((1)))))))) < (((0))))
                                          ? ((-1))
                                          : ((0)))
                                   : ((1))))))
                               ? ((((signed long)(*check)) -
                                   ((signed long)(*baseline))))
                               : (((((((((*check))) <= (((*baseline))))
                                          ? (((((*check))) < (((*baseline))))
                                                 ? ((-1))
                                                 : ((0)))
                                          : ((1)))))))))))) < ((0)))
                         ? (((((int)-(((int)0x37EF)
                                      << (8 * (((!!(((!!(sizeof(int))) *
                                                     ((sizeof(int)) - 1)))) *
                                                ((((!!(sizeof(int))) *
                                                   ((sizeof(int)) - 1))) -
                                                 1)))))))))
                         : (((0))))
                  : (((((int)-(((int)-(
                        ((int)0x37EF)
                        << (8 *
                            (((!!(((!!(sizeof(int))) * ((sizeof(int)) - 1)))) *
                              ((((!!(sizeof(int))) * ((sizeof(int)) - 1))) -
                               1)))))))))))))));
}


x86 assembly (clang, -O0):
<compare_ulong>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     113d <compare_ulong+0x2d>
cmpq   $0x0,-0x20(%rbp)
jne    114c <compare_ulong+0x3c>
mov    $0x0,%al
call   1030 <ordering_err_2@plt>
mov    %eax,-0x4(%rbp)
jmp    19b3 <compare_ulong+0x8a3>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
cmp    $0x0,%rax
jg     1188 <compare_ulong+0x78>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
sub    (%rax),%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x24(%rbp)
jmp    1195 <compare_ulong+0x85>
mov    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1195 <compare_ulong+0x85>
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     11d2 <compare_ulong+0xc2>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x2c(%rbp)
jmp    11df <compare_ulong+0xcf>
mov    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11df <compare_ulong+0xcf>
mov    -0x2c(%rbp),%eax
cmp    $0x0,%eax
jg     1247 <compare_ulong+0x137>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1222 <compare_ulong+0x112>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    122f <compare_ulong+0x11f>
mov    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    122f <compare_ulong+0x11f>
mov    -0x30(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1254 <compare_ulong+0x144>
mov    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1254 <compare_ulong+0x144>
mov    -0x28(%rbp),%eax
mov    -0x34(%rbp),%ecx
cmp    %ecx,%eax
jne    1279 <compare_ulong+0x169>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
mov    %rax,-0x40(%rbp)
jmp    12c6 <compare_ulong+0x1b6>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     12b0 <compare_ulong+0x1a0>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x44(%rbp)
jmp    12bd <compare_ulong+0x1ad>
mov    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12bd <compare_ulong+0x1ad>
mov    -0x44(%rbp),%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    $0xffffffffc8130000,%rax
je     15f3 <compare_ulong+0x4e3>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
cmp    $0x0,%rax
jg     1312 <compare_ulong+0x202>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
sub    (%rax),%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x48(%rbp)
jmp    131f <compare_ulong+0x20f>
mov    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    131f <compare_ulong+0x20f>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     135c <compare_ulong+0x24c>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x50(%rbp)
jmp    1369 <compare_ulong+0x259>
mov    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1369 <compare_ulong+0x259>
mov    -0x50(%rbp),%eax
cmp    $0x0,%eax
jg     13d1 <compare_ulong+0x2c1>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     13ac <compare_ulong+0x29c>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x54(%rbp)
jmp    13b9 <compare_ulong+0x2a9>
mov    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13b9 <compare_ulong+0x2a9>
mov    -0x54(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x58(%rbp)
jmp    13de <compare_ulong+0x2ce>
mov    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    13de <compare_ulong+0x2ce>
mov    -0x4c(%rbp),%eax
mov    -0x58(%rbp),%ecx
cmp    %ecx,%eax
jne    1403 <compare_ulong+0x2f3>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
mov    %rax,-0x60(%rbp)
jmp    1450 <compare_ulong+0x340>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     143a <compare_ulong+0x32a>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x64(%rbp)
jmp    1447 <compare_ulong+0x337>
mov    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1447 <compare_ulong+0x337>
mov    -0x64(%rbp),%eax
cltq
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
cmp    $0xffffffffc8120000,%rax
je     15f3 <compare_ulong+0x4e3>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
cmp    $0x0,%rax
jg     149c <compare_ulong+0x38c>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
sub    (%rax),%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x68(%rbp)
jmp    14a9 <compare_ulong+0x399>
mov    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    14a9 <compare_ulong+0x399>
mov    -0x68(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     14e6 <compare_ulong+0x3d6>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x70(%rbp)
jmp    14f3 <compare_ulong+0x3e3>
mov    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    14f3 <compare_ulong+0x3e3>
mov    -0x70(%rbp),%eax
cmp    $0x0,%eax
jg     155b <compare_ulong+0x44b>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1536 <compare_ulong+0x426>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x74(%rbp)
jmp    1543 <compare_ulong+0x433>
mov    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    1543 <compare_ulong+0x433>
mov    -0x74(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x78(%rbp)
jmp    1568 <compare_ulong+0x458>
mov    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1568 <compare_ulong+0x458>
mov    -0x6c(%rbp),%eax
mov    -0x78(%rbp),%ecx
cmp    %ecx,%eax
jne    158d <compare_ulong+0x47d>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
mov    %rax,-0x80(%rbp)
jmp    15e3 <compare_ulong+0x4d3>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     15c7 <compare_ulong+0x4b7>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x84(%rbp)
jmp    15d7 <compare_ulong+0x4c7>
mov    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    15d7 <compare_ulong+0x4c7>
mov    -0x84(%rbp),%eax
cltq
mov    %rax,-0x80(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x90(%rbp)
jmp    19a9 <compare_ulong+0x899>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
cmp    $0x0,%rax
jg     1632 <compare_ulong+0x522>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
sub    (%rax),%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x94(%rbp)
jmp    1642 <compare_ulong+0x532>
mov    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1642 <compare_ulong+0x532>
mov    -0x94(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1688 <compare_ulong+0x578>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0x9c(%rbp)
jmp    1698 <compare_ulong+0x588>
mov    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    1698 <compare_ulong+0x588>
mov    -0x9c(%rbp),%eax
cmp    $0x0,%eax
jg     170f <compare_ulong+0x5ff>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     16e1 <compare_ulong+0x5d1>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0xa0(%rbp)
jmp    16f1 <compare_ulong+0x5e1>
mov    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    16f1 <compare_ulong+0x5e1>
mov    -0xa0(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xa4(%rbp)
jmp    171f <compare_ulong+0x60f>
mov    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    171f <compare_ulong+0x60f>
mov    -0x98(%rbp),%eax
mov    -0xa4(%rbp),%ecx
cmp    %ecx,%eax
jne    174d <compare_ulong+0x63d>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
mov    %rax,-0xb0(%rbp)
jmp    17a6 <compare_ulong+0x696>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1787 <compare_ulong+0x677>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0xb4(%rbp)
jmp    1797 <compare_ulong+0x687>
mov    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    1797 <compare_ulong+0x687>
mov    -0xb4(%rbp),%eax
cltq
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
cmp    $0x0,%rax
jg     198a <compare_ulong+0x87a>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
cmp    $0x0,%rax
jg     17f6 <compare_ulong+0x6e6>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
sub    (%rax),%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0xb8(%rbp)
jmp    1806 <compare_ulong+0x6f6>
mov    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    1806 <compare_ulong+0x6f6>
mov    -0xb8(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     184c <compare_ulong+0x73c>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0xc0(%rbp)
jmp    185c <compare_ulong+0x74c>
mov    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    185c <compare_ulong+0x74c>
mov    -0xc0(%rbp),%eax
cmp    $0x0,%eax
jg     18d3 <compare_ulong+0x7c3>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     18a5 <compare_ulong+0x795>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0xc4(%rbp)
jmp    18b5 <compare_ulong+0x7a5>
mov    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    18b5 <compare_ulong+0x7a5>
mov    -0xc4(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xc8(%rbp)
jmp    18e3 <compare_ulong+0x7d3>
mov    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    18e3 <compare_ulong+0x7d3>
mov    -0xbc(%rbp),%eax
mov    -0xc8(%rbp),%ecx
cmp    %ecx,%eax
jne    1911 <compare_ulong+0x801>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%rax
mov    %rax,-0xd0(%rbp)
jmp    196a <compare_ulong+0x85a>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     194b <compare_ulong+0x83b>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %rsi,%rdx
cmovb  %ecx,%eax
mov    %eax,-0xd4(%rbp)
jmp    195b <compare_ulong+0x84b>
mov    $0x1,%eax
mov    %eax,-0xd4(%rbp)
jmp    195b <compare_ulong+0x84b>
mov    -0xd4(%rbp),%eax
cltq
mov    %rax,-0xd0(%rbp)
mov    -0xd0(%rbp),%rdx
xor    %eax,%eax
mov    $0xc8110000,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0xd8(%rbp)
jmp    199a <compare_ulong+0x88a>
mov    $0x37ef0000,%eax
mov    %eax,-0xd8(%rbp)
jmp    199a <compare_ulong+0x88a>
mov    -0xd8(%rbp),%eax
cltq
mov    %rax,-0x90(%rbp)
mov    -0x90(%rbp),%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<compare_ulong>:
test   %rsi,%rsi
je     117a <compare_ulong+0x6a>
test   %rdx,%rdx
je     117a <compare_ulong+0x6a>
mov    (%rsi),%r9
mov    (%rdx),%rdx
cmp    %rdx,%r9
sbb    %r8d,%r8d
xor    %esi,%esi
mov    %r9,%rcx
sub    %rdx,%rcx
setne  %sil
mov    $0x1,%eax
mov    %r8d,%edi
cmova  %eax,%edi
neg    %esi
test   %rcx,%rcx
cmovg  %eax,%esi
cmp    %edi,%esi
jne    1152 <compare_ulong+0x42>
cmp    $0xffffffffc8130000,%rcx
je     115f <compare_ulong+0x4f>
cmp    %edi,%esi
jne    11a8 <compare_ulong+0x98>
cmp    $0xffffffffc8120000,%rcx
jne    11a8 <compare_ulong+0x98>
cmp    %rdx,%r9
jbe    1181 <compare_ulong+0x71>
mov    $0x37ef0000,%eax
cmp    $0x1,%esi
jne    1179 <compare_ulong+0x69>
mov    $0x1,%r8d
test   %rcx,%rcx
jle    1190 <compare_ulong+0x80>
ret
xor    %eax,%eax
jmp    1030 <ordering_err_2@plt>
cmp    %r8d,%esi
jne    1190 <compare_ulong+0x80>
mov    $0x37ef0000,%eax
test   %rcx,%rcx
jg     1179 <compare_ulong+0x69>
xor    %eax,%eax
cmp    %rdx,%r9
mov    $0xffffffffc8110000,%rcx
cmovb  %rcx,%rax
cmp    %r8d,%esi
cmove  %rcx,%rax
ret
mov    %rcx,%rax
cmp    %edi,%esi
je     1179 <compare_ulong+0x69>
cmp    %rdx,%r9
sbb    %rcx,%rcx
cmp    %rdx,%r9
mov    $0x1,%eax
cmovbe %rcx,%rax
ret

LLVM IR (-O0):
define i32 @compare_ulong(i8* %0, i64* %1, i64* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i64*
%7 = alloca i64*
store i8* %0, i8** %5
store i64* %1, i64** %6
store i64* %2, i64** %7
%8 = load i64*, i64** %6
%9 = icmp ne i64* %8, null
br i1 %9, label %10, label %13
10: ; preds = %3
%11 = load i64*, i64** %7
%12 = icmp ne i64* %11, null
br i1 %12, label %15, label %13
13: ; preds = %10, %3
%14 = call i32 (...) @ordering_err_2()
store i32 %14, i32* %4
br label %458
15: ; preds = %10
%16 = load i64*, i64** %6
%17 = load i64, i64* %16
%18 = load i64*, i64** %7
%19 = load i64, i64* %18
%20 = sub nsw i64 %17, %19
%21 = icmp sle i64 %20, 0
br i1 %21, label %22, label %31
22: ; preds = %15
%23 = load i64*, i64** %6
%24 = load i64, i64* %23
%25 = load i64*, i64** %7
%26 = load i64, i64* %25
%27 = sub nsw i64 %24, %26
%28 = icmp slt i64 %27, 0
%29 = zext i1 %28 to i64
%30 = select i1 %28, i32 -1, i32 0
br label %32
31: ; preds = %15
br label %32
32: ; preds = %31, %22
%33 = phi i32 [ %30, %22 ], [ 1, %31 ]
%34 = load i64*, i64** %6
%35 = load i64, i64* %34
%36 = load i64*, i64** %7
%37 = load i64, i64* %36
%38 = icmp ule i64 %35, %37
br i1 %38, label %39, label %47
39: ; preds = %32
%40 = load i64*, i64** %6
%41 = load i64, i64* %40
%42 = load i64*, i64** %7
%43 = load i64, i64* %42
%44 = icmp ult i64 %41, %43
%45 = zext i1 %44 to i64
%46 = select i1 %44, i32 -1, i32 0
br label %48
47: ; preds = %32
br label %48
48: ; preds = %47, %39
%49 = phi i32 [ %46, %39 ], [ 1, %47 ]
%50 = icmp sle i32 %49, 0
br i1 %50, label %51, label %71
51: ; preds = %48
%52 = load i64*, i64** %6
%53 = load i64, i64* %52
%54 = load i64*, i64** %7
%55 = load i64, i64* %54
%56 = icmp ule i64 %53, %55
br i1 %56, label %57, label %65
57: ; preds = %51
%58 = load i64*, i64** %6
%59 = load i64, i64* %58
%60 = load i64*, i64** %7
%61 = load i64, i64* %60
%62 = icmp ult i64 %59, %61
%63 = zext i1 %62 to i64
%64 = select i1 %62, i32 -1, i32 0
br label %66
65: ; preds = %51
br label %66
66: ; preds = %65, %57
%67 = phi i32 [ %64, %57 ], [ 1, %65 ]
%68 = icmp slt i32 %67, 0
%69 = zext i1 %68 to i64
%70 = select i1 %68, i32 -1, i32 0
br label %72
71: ; preds = %48
br label %72
72: ; preds = %71, %66
%73 = phi i32 [ %70, %66 ], [ 1, %71 ]
%74 = icmp eq i32 %33, %73
br i1 %74, label %75, label %81
75: ; preds = %72
%76 = load i64*, i64** %6
%77 = load i64, i64* %76
%78 = load i64*, i64** %7
%79 = load i64, i64* %78
%80 = sub nsw i64 %77, %79
br label %99
81: ; preds = %72
%82 = load i64*, i64** %6
%83 = load i64, i64* %82
%84 = load i64*, i64** %7
%85 = load i64, i64* %84
%86 = icmp ule i64 %83, %85
br i1 %86, label %87, label %95
87: ; preds = %81
%88 = load i64*, i64** %6
%89 = load i64, i64* %88
%90 = load i64*, i64** %7
%91 = load i64, i64* %90
%92 = icmp ult i64 %89, %91
%93 = zext i1 %92 to i64
%94 = select i1 %92, i32 -1, i32 0
br label %96
95: ; preds = %81
br label %96
96: ; preds = %95, %87
%97 = phi i32 [ %94, %87 ], [ 1, %95 ]
%98 = sext i32 %97 to i64
br label %99
99: ; preds = %96, %75
%100 = phi i64 [ %80, %75 ], [ %98, %96 ]
%101 = icmp ne i64 %100, -938278912
br i1 %101, label %102, label %275
102: ; preds = %99
%103 = load i64*, i64** %6
%104 = load i64, i64* %103
%105 = load i64*, i64** %7
%106 = load i64, i64* %105
%107 = sub nsw i64 %104, %106
%108 = icmp sle i64 %107, 0
br i1 %108, label %109, label %118
109: ; preds = %102
%110 = load i64*, i64** %6
%111 = load i64, i64* %110
%112 = load i64*, i64** %7
%113 = load i64, i64* %112
%114 = sub nsw i64 %111, %113
%115 = icmp slt i64 %114, 0
%116 = zext i1 %115 to i64
%117 = select i1 %115, i32 -1, i32 0
br label %119
118: ; preds = %102
br label %119
119: ; preds = %118, %109
%120 = phi i32 [ %117, %109 ], [ 1, %118 ]
%121 = load i64*, i64** %6
%122 = load i64, i64* %121
%123 = load i64*, i64** %7
%124 = load i64, i64* %123
%125 = icmp ule i64 %122, %124
br i1 %125, label %126, label %134
126: ; preds = %119
%127 = load i64*, i64** %6
%128 = load i64, i64* %127
%129 = load i64*, i64** %7
%130 = load i64, i64* %129
%131 = icmp ult i64 %128, %130
%132 = zext i1 %131 to i64
%133 = select i1 %131, i32 -1, i32 0
br label %135
134: ; preds = %119
br label %135
135: ; preds = %134, %126
%136 = phi i32 [ %133, %126 ], [ 1, %134 ]
%137 = icmp sle i32 %136, 0
br i1 %137, label %138, label %158
138: ; preds = %135
%139 = load i64*, i64** %6
%140 = load i64, i64* %139
%141 = load i64*, i64** %7
%142 = load i64, i64* %141
%143 = icmp ule i64 %140, %142
br i1 %143, label %144, label %152
144: ; preds = %138
%145 = load i64*, i64** %6
%146 = load i64, i64* %145
%147 = load i64*, i64** %7
%148 = load i64, i64* %147
%149 = icmp ult i64 %146, %148
%150 = zext i1 %149 to i64
%151 = select i1 %149, i32 -1, i32 0
br label %153
152: ; preds = %138
br label %153
153: ; preds = %152, %144
%154 = phi i32 [ %151, %144 ], [ 1, %152 ]
%155 = icmp slt i32 %154, 0
%156 = zext i1 %155 to i64
%157 = select i1 %155, i32 -1, i32 0
br label %159
158: ; preds = %135
br label %159
159: ; preds = %158, %153
%160 = phi i32 [ %157, %153 ], [ 1, %158 ]
%161 = icmp eq i32 %120, %160
br i1 %161, label %162, label %168
162: ; preds = %159
%163 = load i64*, i64** %6
%164 = load i64, i64* %163
%165 = load i64*, i64** %7
%166 = load i64, i64* %165
%167 = sub nsw i64 %164, %166
br label %186
168: ; preds = %159
%169 = load i64*, i64** %6
%170 = load i64, i64* %169
%171 = load i64*, i64** %7
%172 = load i64, i64* %171
%173 = icmp ule i64 %170, %172
br i1 %173, label %174, label %182
174: ; preds = %168
%175 = load i64*, i64** %6
%176 = load i64, i64* %175
%177 = load i64*, i64** %7
%178 = load i64, i64* %177
%179 = icmp ult i64 %176, %178
%180 = zext i1 %179 to i64
%181 = select i1 %179, i32 -1, i32 0
br label %183
182: ; preds = %168
br label %183
183: ; preds = %182, %174
%184 = phi i32 [ %181, %174 ], [ 1, %182 ]
%185 = sext i32 %184 to i64
br label %186
186: ; preds = %183, %162
%187 = phi i64 [ %167, %162 ], [ %185, %183 ]
%188 = icmp ne i64 %187, -938344448
br i1 %188, label %189, label %275
189: ; preds = %186
%190 = load i64*, i64** %6
%191 = load i64, i64* %190
%192 = load i64*, i64** %7
%193 = load i64, i64* %192
%194 = sub nsw i64 %191, %193
%195 = icmp sle i64 %194, 0
br i1 %195, label %196, label %205
196: ; preds = %189
%197 = load i64*, i64** %6
%198 = load i64, i64* %197
%199 = load i64*, i64** %7
%200 = load i64, i64* %199
%201 = sub nsw i64 %198, %200
%202 = icmp slt i64 %201, 0
%203 = zext i1 %202 to i64
%204 = select i1 %202, i32 -1, i32 0
br label %206
205: ; preds = %189
br label %206
206: ; preds = %205, %196
%207 = phi i32 [ %204, %196 ], [ 1, %205 ]
%208 = load i64*, i64** %6
%209 = load i64, i64* %208
%210 = load i64*, i64** %7
%211 = load i64, i64* %210
%212 = icmp ule i64 %209, %211
br i1 %212, label %213, label %221
213: ; preds = %206
%214 = load i64*, i64** %6
%215 = load i64, i64* %214
%216 = load i64*, i64** %7
%217 = load i64, i64* %216
%218 = icmp ult i64 %215, %217
%219 = zext i1 %218 to i64
%220 = select i1 %218, i32 -1, i32 0
br label %222
221: ; preds = %206
br label %222
222: ; preds = %221, %213
%223 = phi i32 [ %220, %213 ], [ 1, %221 ]
%224 = icmp sle i32 %223, 0
br i1 %224, label %225, label %245
225: ; preds = %222
%226 = load i64*, i64** %6
%227 = load i64, i64* %226
%228 = load i64*, i64** %7
%229 = load i64, i64* %228
%230 = icmp ule i64 %227, %229
br i1 %230, label %231, label %239
231: ; preds = %225
%232 = load i64*, i64** %6
%233 = load i64, i64* %232
%234 = load i64*, i64** %7
%235 = load i64, i64* %234
%236 = icmp ult i64 %233, %235
%237 = zext i1 %236 to i64
%238 = select i1 %236, i32 -1, i32 0
br label %240
239: ; preds = %225
br label %240
240: ; preds = %239, %231
%241 = phi i32 [ %238, %231 ], [ 1, %239 ]
%242 = icmp slt i32 %241, 0
%243 = zext i1 %242 to i64
%244 = select i1 %242, i32 -1, i32 0
br label %246
245: ; preds = %222
br label %246
246: ; preds = %245, %240
%247 = phi i32 [ %244, %240 ], [ 1, %245 ]
%248 = icmp eq i32 %207, %247
br i1 %248, label %249, label %255
249: ; preds = %246
%250 = load i64*, i64** %6
%251 = load i64, i64* %250
%252 = load i64*, i64** %7
%253 = load i64, i64* %252
%254 = sub nsw i64 %251, %253
br label %273
255: ; preds = %246
%256 = load i64*, i64** %6
%257 = load i64, i64* %256
%258 = load i64*, i64** %7
%259 = load i64, i64* %258
%260 = icmp ule i64 %257, %259
br i1 %260, label %261, label %269
261: ; preds = %255
%262 = load i64*, i64** %6
%263 = load i64, i64* %262
%264 = load i64*, i64** %7
%265 = load i64, i64* %264
%266 = icmp ult i64 %263, %265
%267 = zext i1 %266 to i64
%268 = select i1 %266, i32 -1, i32 0
br label %270
269: ; preds = %255
br label %270
270: ; preds = %269, %261
%271 = phi i32 [ %268, %261 ], [ 1, %269 ]
%272 = sext i32 %271 to i64
br label %273
273: ; preds = %270, %249
%274 = phi i64 [ %254, %249 ], [ %272, %270 ]
br label %455
275: ; preds = %186, %99
%276 = load i64*, i64** %6
%277 = load i64, i64* %276
%278 = load i64*, i64** %7
%279 = load i64, i64* %278
%280 = sub nsw i64 %277, %279
%281 = icmp sle i64 %280, 0
br i1 %281, label %282, label %291
282: ; preds = %275
%283 = load i64*, i64** %6
%284 = load i64, i64* %283
%285 = load i64*, i64** %7
%286 = load i64, i64* %285
%287 = sub nsw i64 %284, %286
%288 = icmp slt i64 %287, 0
%289 = zext i1 %288 to i64
%290 = select i1 %288, i32 -1, i32 0
br label %292
291: ; preds = %275
br label %292
292: ; preds = %291, %282
%293 = phi i32 [ %290, %282 ], [ 1, %291 ]
%294 = load i64*, i64** %6
%295 = load i64, i64* %294
%296 = load i64*, i64** %7
%297 = load i64, i64* %296
%298 = icmp ule i64 %295, %297
br i1 %298, label %299, label %307
299: ; preds = %292
%300 = load i64*, i64** %6
%301 = load i64, i64* %300
%302 = load i64*, i64** %7
%303 = load i64, i64* %302
%304 = icmp ult i64 %301, %303
%305 = zext i1 %304 to i64
%306 = select i1 %304, i32 -1, i32 0
br label %308
307: ; preds = %292
br label %308
308: ; preds = %307, %299
%309 = phi i32 [ %306, %299 ], [ 1, %307 ]
%310 = icmp sle i32 %309, 0
br i1 %310, label %311, label %331
311: ; preds = %308
%312 = load i64*, i64** %6
%313 = load i64, i64* %312
%314 = load i64*, i64** %7
%315 = load i64, i64* %314
%316 = icmp ule i64 %313, %315
br i1 %316, label %317, label %325
317: ; preds = %311
%318 = load i64*, i64** %6
%319 = load i64, i64* %318
%320 = load i64*, i64** %7
%321 = load i64, i64* %320
%322 = icmp ult i64 %319, %321
%323 = zext i1 %322 to i64
%324 = select i1 %322, i32 -1, i32 0
br label %326
325: ; preds = %311
br label %326
326: ; preds = %325, %317
%327 = phi i32 [ %324, %317 ], [ 1, %325 ]
%328 = icmp slt i32 %327, 0
%329 = zext i1 %328 to i64
%330 = select i1 %328, i32 -1, i32 0
br label %332
331: ; preds = %308
br label %332
332: ; preds = %331, %326
%333 = phi i32 [ %330, %326 ], [ 1, %331 ]
%334 = icmp eq i32 %293, %333
br i1 %334, label %335, label %341
335: ; preds = %332
%336 = load i64*, i64** %6
%337 = load i64, i64* %336
%338 = load i64*, i64** %7
%339 = load i64, i64* %338
%340 = sub nsw i64 %337, %339
br label %359
341: ; preds = %332
%342 = load i64*, i64** %6
%343 = load i64, i64* %342
%344 = load i64*, i64** %7
%345 = load i64, i64* %344
%346 = icmp ule i64 %343, %345
br i1 %346, label %347, label %355
347: ; preds = %341
%348 = load i64*, i64** %6
%349 = load i64, i64* %348
%350 = load i64*, i64** %7
%351 = load i64, i64* %350
%352 = icmp ult i64 %349, %351
%353 = zext i1 %352 to i64
%354 = select i1 %352, i32 -1, i32 0
br label %356
355: ; preds = %341
br label %356
356: ; preds = %355, %347
%357 = phi i32 [ %354, %347 ], [ 1, %355 ]
%358 = sext i32 %357 to i64
br label %359
359: ; preds = %356, %335
%360 = phi i64 [ %340, %335 ], [ %358, %356 ]
%361 = icmp sle i64 %360, 0
br i1 %361, label %362, label %451
362: ; preds = %359
%363 = load i64*, i64** %6
%364 = load i64, i64* %363
%365 = load i64*, i64** %7
%366 = load i64, i64* %365
%367 = sub nsw i64 %364, %366
%368 = icmp sle i64 %367, 0
br i1 %368, label %369, label %378
369: ; preds = %362
%370 = load i64*, i64** %6
%371 = load i64, i64* %370
%372 = load i64*, i64** %7
%373 = load i64, i64* %372
%374 = sub nsw i64 %371, %373
%375 = icmp slt i64 %374, 0
%376 = zext i1 %375 to i64
%377 = select i1 %375, i32 -1, i32 0
br label %379
378: ; preds = %362
br label %379
379: ; preds = %378, %369
%380 = phi i32 [ %377, %369 ], [ 1, %378 ]
%381 = load i64*, i64** %6
%382 = load i64, i64* %381
%383 = load i64*, i64** %7
%384 = load i64, i64* %383
%385 = icmp ule i64 %382, %384
br i1 %385, label %386, label %394
386: ; preds = %379
%387 = load i64*, i64** %6
%388 = load i64, i64* %387
%389 = load i64*, i64** %7
%390 = load i64, i64* %389
%391 = icmp ult i64 %388, %390
%392 = zext i1 %391 to i64
%393 = select i1 %391, i32 -1, i32 0
br label %395
394: ; preds = %379
br label %395
395: ; preds = %394, %386
%396 = phi i32 [ %393, %386 ], [ 1, %394 ]
%397 = icmp sle i32 %396, 0
br i1 %397, label %398, label %418
398: ; preds = %395
%399 = load i64*, i64** %6
%400 = load i64, i64* %399
%401 = load i64*, i64** %7
%402 = load i64, i64* %401
%403 = icmp ule i64 %400, %402
br i1 %403, label %404, label %412
404: ; preds = %398
%405 = load i64*, i64** %6
%406 = load i64, i64* %405
%407 = load i64*, i64** %7
%408 = load i64, i64* %407
%409 = icmp ult i64 %406, %408
%410 = zext i1 %409 to i64
%411 = select i1 %409, i32 -1, i32 0
br label %413
412: ; preds = %398
br label %413
413: ; preds = %412, %404
%414 = phi i32 [ %411, %404 ], [ 1, %412 ]
%415 = icmp slt i32 %414, 0
%416 = zext i1 %415 to i64
%417 = select i1 %415, i32 -1, i32 0
br label %419
418: ; preds = %395
br label %419
419: ; preds = %418, %413
%420 = phi i32 [ %417, %413 ], [ 1, %418 ]
%421 = icmp eq i32 %380, %420
br i1 %421, label %422, label %428
422: ; preds = %419
%423 = load i64*, i64** %6
%424 = load i64, i64* %423
%425 = load i64*, i64** %7
%426 = load i64, i64* %425
%427 = sub nsw i64 %424, %426
br label %446
428: ; preds = %419
%429 = load i64*, i64** %6
%430 = load i64, i64* %429
%431 = load i64*, i64** %7
%432 = load i64, i64* %431
%433 = icmp ule i64 %430, %432
br i1 %433, label %434, label %442
434: ; preds = %428
%435 = load i64*, i64** %6
%436 = load i64, i64* %435
%437 = load i64*, i64** %7
%438 = load i64, i64* %437
%439 = icmp ult i64 %436, %438
%440 = zext i1 %439 to i64
%441 = select i1 %439, i32 -1, i32 0
br label %443
442: ; preds = %428
br label %443
443: ; preds = %442, %434
%444 = phi i32 [ %441, %434 ], [ 1, %442 ]
%445 = sext i32 %444 to i64
br label %446
446: ; preds = %443, %422
%447 = phi i64 [ %427, %422 ], [ %445, %443 ]
%448 = icmp slt i64 %447, 0
%449 = zext i1 %448 to i64
%450 = select i1 %448, i32 -938409984, i32 0
br label %452
451: ; preds = %359
br label %452
452: ; preds = %451, %446
%453 = phi i32 [ %450, %446 ], [ 938409984, %451 ]
%454 = sext i32 %453 to i64
br label %455
455: ; preds = %452, %273
%456 = phi i64 [ %274, %273 ], [ %454, %452 ]
%457 = trunc i64 %456 to i32
store i32 %457, i32* %4
br label %458
458: ; preds = %455, %13
%459 = load i32, i32* %4
ret i32 %459
}

LLVM IR (-O2):
define i32 @compare_ulong(i8* nocapture readnone %0, i64* %1, i64* %2) {
%4 = icmp ne i64* %1, null
%5 = icmp ne i64* %2, null
%6 = and i1 %4, %5
br i1 %6, label %9, label %7
7: ; preds = %3
%8 = tail call i32 (...) @ordering_err_2()
br label %46
9: ; preds = %3
%10 = load i64, i64* %1
%11 = load i64, i64* %2
%12 = sub nsw i64 %10, %11
%13 = icmp slt i64 %12, 1
%14 = icmp ne i64 %12, 0
%15 = sext i1 %14 to i32
%16 = select i1 %13, i32 %15, i32 1
%17 = icmp ugt i64 %10, %11
%18 = icmp ult i64 %10, %11
%19 = sext i1 %18 to i32
%20 = select i1 %17, i32 1, i32 %19
%21 = icmp eq i32 %16, %20
%22 = icmp eq i64 %12, -938278912
%23 = select i1 %21, i1 %22, i1 false
br i1 %23, label %31, label %24
24: ; preds = %9
%25 = icmp eq i64 %12, -938344448
%26 = select i1 %21, i1 %25, i1 false
br i1 %26, label %31, label %27
27: ; preds = %24
br i1 %21, label %43, label %28
28: ; preds = %27
%29 = sext i1 %18 to i64
%30 = select i1 %17, i64 1, i64 %29
br label %43
31: ; preds = %24, %9
br i1 %17, label %32, label %35
32: ; preds = %31
%33 = icmp eq i32 %16, 1
%34 = and i1 %33, %13
br i1 %34, label %38, label %43
35: ; preds = %31
%36 = icmp ne i32 %16, %19
%37 = or i1 %36, %13
br i1 %37, label %38, label %43
38: ; preds = %32, %35
%39 = phi i32 [ %19, %35 ], [ 1, %32 ]
%40 = icmp eq i32 %16, %39
%41 = select i1 %40, i1 true, i1 %18
%42 = select i1 %41, i64 -938409984, i64 0
br label %43
43: ; preds = %35, %32, %27, %38, %28
%44 = phi i64 [ %30, %28 ], [ %42, %38 ], [ %12, %27 ], [ 938409984, %32 ], [ 938409984, %35 ]
%45 = trunc i64 %44 to i32
br label %46
46: ; preds = %43, %7
%47 = phi i32 [ %45, %43 ], [ %8, %7 ]
ret i32 %47
}