#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_objp(void *context, const void *const *check,
                 const void *const *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_objp>:
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_objp+0x2d>
cmpq   $0x0,-0x20(%rbp)
jne    114c <compare_objp+0x3c>
mov    $0x0,%al
call   1030 <ordering_err_2@plt>
mov    %eax,-0x4(%rbp)
jmp    19e0 <compare_objp+0x8d0>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     118e <compare_objp+0x7e>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x24(%rbp)
jmp    119b <compare_objp+0x8b>
mov    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    119b <compare_objp+0x8b>
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     11d8 <compare_objp+0xc8>
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    11e5 <compare_objp+0xd5>
mov    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11e5 <compare_objp+0xd5>
mov    -0x2c(%rbp),%eax
cmp    $0x0,%eax
jg     124d <compare_objp+0x13d>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1228 <compare_objp+0x118>
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    1235 <compare_objp+0x125>
mov    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1235 <compare_objp+0x125>
mov    -0x30(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    125a <compare_objp+0x14a>
mov    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    125a <compare_objp+0x14a>
mov    -0x28(%rbp),%eax
mov    -0x34(%rbp),%ecx
cmp    %ecx,%eax
jne    1282 <compare_objp+0x172>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x40(%rbp)
jmp    12cf <compare_objp+0x1bf>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     12b9 <compare_objp+0x1a9>
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    12c6 <compare_objp+0x1b6>
mov    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12c6 <compare_objp+0x1b6>
mov    -0x44(%rbp),%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    $0xffffffffc8130000,%rax
je     160e <compare_objp+0x4fe>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     1321 <compare_objp+0x211>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x48(%rbp)
jmp    132e <compare_objp+0x21e>
mov    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    132e <compare_objp+0x21e>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     136b <compare_objp+0x25b>
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    1378 <compare_objp+0x268>
mov    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1378 <compare_objp+0x268>
mov    -0x50(%rbp),%eax
cmp    $0x0,%eax
jg     13e0 <compare_objp+0x2d0>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     13bb <compare_objp+0x2ab>
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    13c8 <compare_objp+0x2b8>
mov    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13c8 <compare_objp+0x2b8>
mov    -0x54(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x58(%rbp)
jmp    13ed <compare_objp+0x2dd>
mov    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    13ed <compare_objp+0x2dd>
mov    -0x4c(%rbp),%eax
mov    -0x58(%rbp),%ecx
cmp    %ecx,%eax
jne    1415 <compare_objp+0x305>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x60(%rbp)
jmp    1462 <compare_objp+0x352>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     144c <compare_objp+0x33c>
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    1459 <compare_objp+0x349>
mov    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1459 <compare_objp+0x349>
mov    -0x64(%rbp),%eax
cltq
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
cmp    $0xffffffffc8120000,%rax
je     160e <compare_objp+0x4fe>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     14b4 <compare_objp+0x3a4>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x68(%rbp)
jmp    14c1 <compare_objp+0x3b1>
mov    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    14c1 <compare_objp+0x3b1>
mov    -0x68(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     14fe <compare_objp+0x3ee>
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    150b <compare_objp+0x3fb>
mov    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    150b <compare_objp+0x3fb>
mov    -0x70(%rbp),%eax
cmp    $0x0,%eax
jg     1573 <compare_objp+0x463>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     154e <compare_objp+0x43e>
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    155b <compare_objp+0x44b>
mov    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    155b <compare_objp+0x44b>
mov    -0x74(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x78(%rbp)
jmp    1580 <compare_objp+0x470>
mov    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1580 <compare_objp+0x470>
mov    -0x6c(%rbp),%eax
mov    -0x78(%rbp),%ecx
cmp    %ecx,%eax
jne    15a8 <compare_objp+0x498>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x80(%rbp)
jmp    15fe <compare_objp+0x4ee>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     15e2 <compare_objp+0x4d2>
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    15f2 <compare_objp+0x4e2>
mov    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    15f2 <compare_objp+0x4e2>
mov    -0x84(%rbp),%eax
cltq
mov    %rax,-0x80(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x90(%rbp)
jmp    19d6 <compare_objp+0x8c6>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     1653 <compare_objp+0x543>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x94(%rbp)
jmp    1663 <compare_objp+0x553>
mov    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1663 <compare_objp+0x553>
mov    -0x94(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     16a9 <compare_objp+0x599>
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    16b9 <compare_objp+0x5a9>
mov    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    16b9 <compare_objp+0x5a9>
mov    -0x9c(%rbp),%eax
cmp    $0x0,%eax
jg     1730 <compare_objp+0x620>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1702 <compare_objp+0x5f2>
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    1712 <compare_objp+0x602>
mov    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    1712 <compare_objp+0x602>
mov    -0xa0(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xa4(%rbp)
jmp    1740 <compare_objp+0x630>
mov    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1740 <compare_objp+0x630>
mov    -0x98(%rbp),%eax
mov    -0xa4(%rbp),%ecx
cmp    %ecx,%eax
jne    1771 <compare_objp+0x661>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0xb0(%rbp)
jmp    17ca <compare_objp+0x6ba>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     17ab <compare_objp+0x69b>
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    17bb <compare_objp+0x6ab>
mov    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    17bb <compare_objp+0x6ab>
mov    -0xb4(%rbp),%eax
cltq
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
cmp    $0x0,%rax
jg     19b7 <compare_objp+0x8a7>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     1820 <compare_objp+0x710>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0xb8(%rbp)
jmp    1830 <compare_objp+0x720>
mov    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    1830 <compare_objp+0x720>
mov    -0xb8(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1876 <compare_objp+0x766>
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    1886 <compare_objp+0x776>
mov    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    1886 <compare_objp+0x776>
mov    -0xc0(%rbp),%eax
cmp    $0x0,%eax
jg     18fd <compare_objp+0x7ed>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     18cf <compare_objp+0x7bf>
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    18df <compare_objp+0x7cf>
mov    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    18df <compare_objp+0x7cf>
mov    -0xc4(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xc8(%rbp)
jmp    190d <compare_objp+0x7fd>
mov    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    190d <compare_objp+0x7fd>
mov    -0xbc(%rbp),%eax
mov    -0xc8(%rbp),%ecx
cmp    %ecx,%eax
jne    193e <compare_objp+0x82e>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0xd0(%rbp)
jmp    1997 <compare_objp+0x887>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%rax
ja     1978 <compare_objp+0x868>
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    1988 <compare_objp+0x878>
mov    $0x1,%eax
mov    %eax,-0xd4(%rbp)
jmp    1988 <compare_objp+0x878>
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    19c7 <compare_objp+0x8b7>
mov    $0x37ef0000,%eax
mov    %eax,-0xd8(%rbp)
jmp    19c7 <compare_objp+0x8b7>
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_objp>:
test   %rsi,%rsi
je     117a <compare_objp+0x6a>
test   %rdx,%rdx
je     117a <compare_objp+0x6a>
mov    (%rsi),%r9
mov    (%rdx),%rdx
cmp    %rdx,%r9
sbb    %r8d,%r8d
xor    %esi,%esi
cmp    %rdx,%r9
setne  %sil
mov    $0x1,%eax
mov    %r8d,%edi
cmova  %eax,%edi
neg    %esi
mov    %r9,%rcx
sub    %rdx,%rcx
cmovg  %eax,%esi
cmp    %edi,%esi
jne    1152 <compare_objp+0x42>
cmp    $0xffffffffc8130000,%rcx
je     115f <compare_objp+0x4f>
cmp    %edi,%esi
jne    11a8 <compare_objp+0x98>
cmp    $0xffffffffc8120000,%rcx
jne    11a8 <compare_objp+0x98>
cmp    %rdx,%r9
jbe    1181 <compare_objp+0x71>
mov    $0x37ef0000,%eax
cmp    $0x1,%esi
jne    1179 <compare_objp+0x69>
mov    $0x1,%r8d
test   %rcx,%rcx
jle    1190 <compare_objp+0x80>
ret
xor    %eax,%eax
jmp    1030 <ordering_err_2@plt>
cmp    %r8d,%esi
jne    1190 <compare_objp+0x80>
mov    $0x37ef0000,%eax
test   %rcx,%rcx
jg     1179 <compare_objp+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_objp+0x69>
cmp    %rdx,%r9
sbb    %rcx,%rcx
cmp    %rdx,%r9
mov    $0x1,%eax
cmovbe %rcx,%rax
ret

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

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