#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_char(void *context, const char *check, const char *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_char>:
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_char+0x2d>
cmpq   $0x0,-0x20(%rbp)
jne    114c <compare_char+0x3c>
mov    $0x0,%al
call   1030 <ordering_err_2@plt>
mov    %eax,-0x4(%rbp)
jmp    1a0d <compare_char+0x8fd>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     1192 <compare_char+0x82>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rdx
mov    -0x20(%rbp),%rax
movsbq (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x24(%rbp)
jmp    119f <compare_char+0x8f>
mov    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    119f <compare_char+0x8f>
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     11dd <compare_char+0xcd>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x2c(%rbp)
jmp    11ea <compare_char+0xda>
mov    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11ea <compare_char+0xda>
mov    -0x2c(%rbp),%eax
cmp    $0x0,%eax
jg     1253 <compare_char+0x143>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     122e <compare_char+0x11e>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    123b <compare_char+0x12b>
mov    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    123b <compare_char+0x12b>
mov    -0x30(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1260 <compare_char+0x150>
mov    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1260 <compare_char+0x150>
mov    -0x28(%rbp),%eax
mov    -0x34(%rbp),%ecx
cmp    %ecx,%eax
jne    128a <compare_char+0x17a>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x40(%rbp)
jmp    12d8 <compare_char+0x1c8>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     12c2 <compare_char+0x1b2>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x44(%rbp)
jmp    12cf <compare_char+0x1bf>
mov    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12cf <compare_char+0x1bf>
mov    -0x44(%rbp),%eax
cltq
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    $0xffffffffc8130000,%rax
je     1629 <compare_char+0x519>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     132e <compare_char+0x21e>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rdx
mov    -0x20(%rbp),%rax
movsbq (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x48(%rbp)
jmp    133b <compare_char+0x22b>
mov    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    133b <compare_char+0x22b>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     1379 <compare_char+0x269>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x50(%rbp)
jmp    1386 <compare_char+0x276>
mov    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1386 <compare_char+0x276>
mov    -0x50(%rbp),%eax
cmp    $0x0,%eax
jg     13ef <compare_char+0x2df>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     13ca <compare_char+0x2ba>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x54(%rbp)
jmp    13d7 <compare_char+0x2c7>
mov    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13d7 <compare_char+0x2c7>
mov    -0x54(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x58(%rbp)
jmp    13fc <compare_char+0x2ec>
mov    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    13fc <compare_char+0x2ec>
mov    -0x4c(%rbp),%eax
mov    -0x58(%rbp),%ecx
cmp    %ecx,%eax
jne    1426 <compare_char+0x316>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x60(%rbp)
jmp    1474 <compare_char+0x364>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     145e <compare_char+0x34e>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x64(%rbp)
jmp    146b <compare_char+0x35b>
mov    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    146b <compare_char+0x35b>
mov    -0x64(%rbp),%eax
cltq
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
cmp    $0xffffffffc8120000,%rax
je     1629 <compare_char+0x519>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     14ca <compare_char+0x3ba>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rdx
mov    -0x20(%rbp),%rax
movsbq (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x68(%rbp)
jmp    14d7 <compare_char+0x3c7>
mov    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    14d7 <compare_char+0x3c7>
mov    -0x68(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     1515 <compare_char+0x405>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x70(%rbp)
jmp    1522 <compare_char+0x412>
mov    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    1522 <compare_char+0x412>
mov    -0x70(%rbp),%eax
cmp    $0x0,%eax
jg     158b <compare_char+0x47b>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     1566 <compare_char+0x456>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x74(%rbp)
jmp    1573 <compare_char+0x463>
mov    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    1573 <compare_char+0x463>
mov    -0x74(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0x78(%rbp)
jmp    1598 <compare_char+0x488>
mov    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1598 <compare_char+0x488>
mov    -0x6c(%rbp),%eax
mov    -0x78(%rbp),%ecx
cmp    %ecx,%eax
jne    15c2 <compare_char+0x4b2>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0x80(%rbp)
jmp    1619 <compare_char+0x509>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     15fd <compare_char+0x4ed>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x84(%rbp)
jmp    160d <compare_char+0x4fd>
mov    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    160d <compare_char+0x4fd>
mov    -0x84(%rbp),%eax
cltq
mov    %rax,-0x80(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x90(%rbp)
jmp    1a03 <compare_char+0x8f3>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     1672 <compare_char+0x562>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rdx
mov    -0x20(%rbp),%rax
movsbq (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0x94(%rbp)
jmp    1682 <compare_char+0x572>
mov    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1682 <compare_char+0x572>
mov    -0x94(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     16c9 <compare_char+0x5b9>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x9c(%rbp)
jmp    16d9 <compare_char+0x5c9>
mov    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    16d9 <compare_char+0x5c9>
mov    -0x9c(%rbp),%eax
cmp    $0x0,%eax
jg     1751 <compare_char+0x641>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     1723 <compare_char+0x613>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0xa0(%rbp)
jmp    1733 <compare_char+0x623>
mov    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    1733 <compare_char+0x623>
mov    -0xa0(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xa4(%rbp)
jmp    1761 <compare_char+0x651>
mov    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1761 <compare_char+0x651>
mov    -0x98(%rbp),%eax
mov    -0xa4(%rbp),%ecx
cmp    %ecx,%eax
jne    1794 <compare_char+0x684>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0xb0(%rbp)
jmp    17ee <compare_char+0x6de>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     17cf <compare_char+0x6bf>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0xb4(%rbp)
jmp    17df <compare_char+0x6cf>
mov    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    17df <compare_char+0x6cf>
mov    -0xb4(%rbp),%eax
cltq
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
cmp    $0x0,%rax
jg     19e4 <compare_char+0x8d4>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
cmp    $0x0,%rax
jg     1848 <compare_char+0x738>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rdx
mov    -0x20(%rbp),%rax
movsbq (%rax),%rax
sub    %rax,%rdx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%rdx
cmovl  %ecx,%eax
mov    %eax,-0xb8(%rbp)
jmp    1858 <compare_char+0x748>
mov    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    1858 <compare_char+0x748>
mov    -0xb8(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     189f <compare_char+0x78f>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0xc0(%rbp)
jmp    18af <compare_char+0x79f>
mov    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    18af <compare_char+0x79f>
mov    -0xc0(%rbp),%eax
cmp    $0x0,%eax
jg     1927 <compare_char+0x817>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     18f9 <compare_char+0x7e9>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0xc4(%rbp)
jmp    1909 <compare_char+0x7f9>
mov    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    1909 <compare_char+0x7f9>
mov    -0xc4(%rbp),%edx
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    $0x0,%edx
cmovl  %ecx,%eax
mov    %eax,-0xc8(%rbp)
jmp    1937 <compare_char+0x827>
mov    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    1937 <compare_char+0x827>
mov    -0xbc(%rbp),%eax
mov    -0xc8(%rbp),%ecx
cmp    %ecx,%eax
jne    196a <compare_char+0x85a>
mov    -0x18(%rbp),%rax
movsbq (%rax),%rax
mov    -0x20(%rbp),%rcx
movsbq (%rcx),%rcx
sub    %rcx,%rax
mov    %rax,-0xd0(%rbp)
jmp    19c4 <compare_char+0x8b4>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     19a5 <compare_char+0x895>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
xor    %eax,%eax
mov    $0xffffffff,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0xd4(%rbp)
jmp    19b5 <compare_char+0x8a5>
mov    $0x1,%eax
mov    %eax,-0xd4(%rbp)
jmp    19b5 <compare_char+0x8a5>
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    19f4 <compare_char+0x8e4>
mov    $0x37ef0000,%eax
mov    %eax,-0xd8(%rbp)
jmp    19f4 <compare_char+0x8e4>
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_char>:
test   %rsi,%rsi
je     1159 <compare_char+0x49>
test   %rdx,%rdx
je     1159 <compare_char+0x49>
movsbl (%rsi),%ecx
movsbl (%rdx),%r9d
xor    %eax,%eax
cmp    %r9b,%cl
setl   %al
neg    %eax
cmp    %r9b,%cl
movslq %ecx,%rsi
movslq %r9d,%rdi
mov    $0x1,%r8d
cmovg  %r8d,%eax
xor    %edx,%edx
cmp    %rdi,%rsi
setne  %dl
neg    %edx
cmp    %rdi,%rsi
cmovg  %r8d,%edx
cmp    %eax,%edx
jne    1158 <compare_char+0x48>
sub    %r9d,%ecx
mov    %ecx,%eax
ret
xor    %eax,%eax
jmp    1030 <ordering_err_2@plt>

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

LLVM IR (-O2):
define i32 @compare_char(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 %28
9: ; preds = %3
%10 = load i8, i8* %1
%11 = sext i8 %10 to i64
%12 = load i8, i8* %2
%13 = sext 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 sgt i8 %10, %12
%20 = icmp slt i8 %10, %12
%21 = sext i1 %20 to i32
%22 = select i1 %19, i32 1, i32 %21
%23 = icmp eq i32 %18, %22
br i1 %23, label %24, label %28
24: ; preds = %9
%25 = sext i8 %10 to i32
%26 = sext i8 %12 to i32
%27 = sub nsw i32 %25, %26
br label %28
28: ; preds = %9, %24, %7
%29 = phi i32 [ %8, %7 ], [ %27, %24 ], [ %22, %9 ]
ret i32 %29
}