#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 */
typedef int /*<<< orphan*/ mpq_t;

/* Variables and functions */
int /*<<< orphan*/ mpq_canonicalize(int /*<<< orphan*/);
int /*<<< orphan*/ mpq_clear(int /*<<< orphan*/);
int /*<<< orphan*/ mpq_denref(int /*<<< orphan*/);
int /*<<< orphan*/ mpq_div(int /*<<< orphan*/, int /*<<< orphan*/,
                           int /*<<< orphan*/);
int /*<<< orphan*/ mpq_init(int /*<<< orphan*/);
int /*<<< orphan*/ mpq_numref(int /*<<< orphan*/);
int /*<<< orphan*/ mpq_set_ui(int /*<<< orphan*/, unsigned long, unsigned long);
int /*<<< orphan*/ mpz_add_ui(int /*<<< orphan*/, int /*<<< orphan*/,
                              unsigned long);
int /*<<< orphan*/ mpz_mul_ui(int /*<<< orphan*/, int /*<<< orphan*/,
                              unsigned long);
int /*<<< orphan*/ mpz_neg(int /*<<< orphan*/, int /*<<< orphan*/);
int mpq_EGlpNumReadStrXc(mpq_t var, char const *str) {
  char unsigned a_dot = 1, a_exp = 0, a_exp_sgn = 0, a_sgn = 1, a_div = 1;
  char c = 0;
  int l_exp = 0, sgn = 0, exp_sgn = 0;
  int n_char = 0, n_dig = 0, cn = 0;
  mpq_t den[2];
  mpq_init(den[0]);
  mpq_init(den[1]);
  mpq_set_ui(den[1], (unsigned long int)1, (unsigned long int)1);
  mpq_set_ui(den[0], (unsigned long int)0, (unsigned long int)1);
  c = str[n_char];
  while ((('0' <= c) && (c <= '9')) || (a_dot && (c == '.')) ||
         (a_exp && (c == 'e' || c == 'E')) ||
         (a_sgn && (c == '+' || c == '-')) || (a_div && c == '/') ||
         (a_exp_sgn && (c == '+' || c == '-'))) {
    switch (c) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      if (a_exp || n_dig == 0) {
        if (!a_dot)
          mpz_mul_ui(mpq_denref(den[cn]), mpq_denref(den[cn]),
                     (unsigned long int)10);
        mpz_mul_ui(mpq_numref(den[cn]), mpq_numref(den[cn]),
                   (unsigned long int)10);
        mpz_add_ui(mpq_numref(den[cn]), mpq_numref(den[cn]),
                   (unsigned long int)(c - '0'));
        n_dig++;
        a_exp = 1;
      } else {
        l_exp = 10 * l_exp + c - '0';
        a_exp_sgn = 0;
      }
      a_sgn = 0;
      break;
    case '.':
      a_sgn = 0;
      a_dot = 0;
      a_sgn = 0;
      break;
    case '-':
      if (a_sgn)
        sgn = 1;
      else
        exp_sgn = 1;
    case '+':
      if (a_sgn)
        a_sgn = 0;
      if (a_exp_sgn)
        a_exp_sgn = 0;
      break;
    case 'e':
    case 'E':
      a_sgn = 0;
      a_exp = 0;
      a_exp_sgn = 1;
      break;
    case '/':
      if (exp_sgn)
        l_exp = -l_exp;
      if (l_exp > 0)
        while (l_exp--)
          mpz_mul_ui(mpq_numref(den[0]), mpq_numref(den[0]),
                     (unsigned long int)10);
      else if (l_exp < 0) {
        l_exp = -l_exp;
        while (l_exp--)
          mpz_mul_ui(mpq_denref(den[0]), mpq_denref(den[0]),
                     (unsigned long int)10);
      }
      if (sgn)
        mpz_neg(mpq_numref(den[0]), mpq_numref(den[0]));
      mpq_canonicalize(den[0]);
      mpq_set_ui(den[1], (unsigned long int)0, (unsigned long int)1);
      sgn = 0;
      exp_sgn = 0;
      l_exp = 0;
      a_div = 0;
      n_dig = 0;
      a_dot = 1;
      a_exp = 0;
      a_exp_sgn = 0;
      a_sgn = 1;
      cn = 1;
      break;
    }
    c = str[++n_char];
  }
  if (n_char) {
    if (exp_sgn)
      l_exp = -l_exp;
    if (l_exp > 0)
      while (l_exp--)
        mpz_mul_ui(mpq_numref(den[cn]), mpq_numref(den[cn]),
                   (unsigned long int)10);
    else if (l_exp < 0) {
      l_exp = -l_exp;
      while (l_exp--)
        mpz_mul_ui(mpq_denref(den[cn]), mpq_denref(den[cn]),
                   (unsigned long int)10);
    }
    if (sgn)
      mpz_neg(mpq_numref(den[cn]), mpq_numref(den[cn]));
    mpq_canonicalize(den[0]);
    mpq_canonicalize(den[1]);
    mpq_div(var, den[0], den[1]);
  }
  mpq_clear(den[0]);
  mpq_clear(den[1]);
  return n_char;
}


x86 assembly (clang, -O0):
<mpq_EGlpNumReadStrXc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movb   $0x1,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
movb   $0x0,-0x13(%rbp)
movb   $0x1,-0x14(%rbp)
movb   $0x1,-0x15(%rbp)
movb   $0x0,-0x16(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x38(%rbp),%edi
call   1080 <mpq_init@plt>
mov    -0x34(%rbp),%edi
call   1080 <mpq_init@plt>
mov    -0x34(%rbp),%edi
mov    $0x1,%edx
mov    %rdx,%rsi
call   10a0 <mpq_set_ui@plt>
mov    -0x38(%rbp),%edi
xor    %eax,%eax
mov    %eax,%esi
mov    $0x1,%edx
call   10a0 <mpq_set_ui@plt>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x16(%rbp)
movsbl -0x16(%rbp),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     1253 <mpq_EGlpNumReadStrXc+0xb3>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x39,%ecx
mov    %al,-0x39(%rbp)
jle    1330 <mpq_EGlpNumReadStrXc+0x190>
movzbl -0x11(%rbp),%eax
cmp    $0x0,%eax
je     1272 <mpq_EGlpNumReadStrXc+0xd2>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x2e,%ecx
mov    %al,-0x39(%rbp)
je     1330 <mpq_EGlpNumReadStrXc+0x190>
movzbl -0x12(%rbp),%eax
cmp    $0x0,%eax
je     12a3 <mpq_EGlpNumReadStrXc+0x103>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x65,%ecx
mov    %al,-0x39(%rbp)
je     1330 <mpq_EGlpNumReadStrXc+0x190>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x45,%ecx
mov    %al,-0x39(%rbp)
je     1330 <mpq_EGlpNumReadStrXc+0x190>
movzbl -0x14(%rbp),%eax
cmp    $0x0,%eax
je     12d4 <mpq_EGlpNumReadStrXc+0x134>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x2b,%ecx
mov    %al,-0x39(%rbp)
je     1330 <mpq_EGlpNumReadStrXc+0x190>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x2d,%ecx
mov    %al,-0x39(%rbp)
je     1330 <mpq_EGlpNumReadStrXc+0x190>
movzbl -0x15(%rbp),%eax
cmp    $0x0,%eax
je     12f3 <mpq_EGlpNumReadStrXc+0x153>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x2f,%ecx
mov    %al,-0x39(%rbp)
je     1330 <mpq_EGlpNumReadStrXc+0x190>
movzbl -0x13(%rbp),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x3a(%rbp)
je     132a <mpq_EGlpNumReadStrXc+0x18a>
movsbl -0x16(%rbp),%ecx
mov    $0x1,%al
cmp    $0x2b,%ecx
mov    %al,-0x3b(%rbp)
je     1324 <mpq_EGlpNumReadStrXc+0x184>
movsbl -0x16(%rbp),%eax
cmp    $0x2d,%eax
sete   %al
mov    %al,-0x3b(%rbp)
mov    -0x3b(%rbp),%al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    1340 <mpq_EGlpNumReadStrXc+0x1a0>
jmp    15f2 <mpq_EGlpNumReadStrXc+0x452>
movsbl -0x16(%rbp),%eax
add    $0xffffffd5,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x3a,%eax
ja     15d7 <mpq_EGlpNumReadStrXc+0x437>
mov    -0x48(%rbp),%rax
lea    0xc9f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movzbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jne    1381 <mpq_EGlpNumReadStrXc+0x1e1>
cmpl   $0x0,-0x2c(%rbp)
jne    1426 <mpq_EGlpNumReadStrXc+0x286>
cmpb   $0x0,-0x11(%rbp)
jne    13b7 <mpq_EGlpNumReadStrXc+0x217>
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1090 <mpq_denref@plt>
mov    %eax,-0x4c(%rbp)
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1090 <mpq_denref@plt>
mov    -0x4c(%rbp),%edi
mov    %eax,%esi
mov    $0xa,%edx
call   10b0 <mpz_mul_ui@plt>
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    %eax,-0x54(%rbp)
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    -0x54(%rbp),%edi
mov    %eax,%esi
mov    $0xa,%edx
call   10b0 <mpz_mul_ui@plt>
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    %eax,-0x50(%rbp)
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    -0x50(%rbp),%edi
mov    %eax,%esi
movsbl -0x16(%rbp),%eax
sub    $0x30,%eax
movslq %eax,%rdx
call   1040 <mpz_add_ui@plt>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
movb   $0x1,-0x12(%rbp)
jmp    143a <mpq_EGlpNumReadStrXc+0x29a>
imul   $0xa,-0x1c(%rbp),%eax
movsbl -0x16(%rbp),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
movb   $0x0,-0x13(%rbp)
movb   $0x0,-0x14(%rbp)
jmp    15d7 <mpq_EGlpNumReadStrXc+0x437>
movb   $0x0,-0x14(%rbp)
movb   $0x0,-0x11(%rbp)
movb   $0x0,-0x14(%rbp)
jmp    15d7 <mpq_EGlpNumReadStrXc+0x437>
cmpb   $0x0,-0x14(%rbp)
je     146a <mpq_EGlpNumReadStrXc+0x2ca>
movl   $0x1,-0x20(%rbp)
jmp    1471 <mpq_EGlpNumReadStrXc+0x2d1>
movl   $0x1,-0x24(%rbp)
jmp    1476 <mpq_EGlpNumReadStrXc+0x2d6>
cmpb   $0x0,-0x14(%rbp)
je     1484 <mpq_EGlpNumReadStrXc+0x2e4>
movb   $0x0,-0x14(%rbp)
cmpb   $0x0,-0x13(%rbp)
je     1492 <mpq_EGlpNumReadStrXc+0x2f2>
movb   $0x0,-0x13(%rbp)
jmp    15d7 <mpq_EGlpNumReadStrXc+0x437>
movb   $0x0,-0x14(%rbp)
movb   $0x0,-0x12(%rbp)
movb   $0x1,-0x13(%rbp)
jmp    15d7 <mpq_EGlpNumReadStrXc+0x437>
cmpl   $0x0,-0x24(%rbp)
je     14ba <mpq_EGlpNumReadStrXc+0x31a>
xor    %eax,%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1509 <mpq_EGlpNumReadStrXc+0x369>
jmp    14c9 <mpq_EGlpNumReadStrXc+0x329>
mov    -0x1c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x1c(%rbp)
cmp    $0x0,%eax
je     1504 <mpq_EGlpNumReadStrXc+0x364>
mov    -0x38(%rbp),%edi
call   1070 <mpq_numref@plt>
mov    %eax,-0x58(%rbp)
mov    -0x38(%rbp),%edi
call   1070 <mpq_numref@plt>
mov    -0x58(%rbp),%edi
mov    %eax,%esi
mov    $0xa,%edx
call   10b0 <mpz_mul_ui@plt>
jmp    14c9 <mpq_EGlpNumReadStrXc+0x329>
jmp    1560 <mpq_EGlpNumReadStrXc+0x3c0>
cmpl   $0x0,-0x1c(%rbp)
jge    155b <mpq_EGlpNumReadStrXc+0x3bb>
xor    %eax,%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x1c(%rbp)
cmp    $0x0,%eax
je     1556 <mpq_EGlpNumReadStrXc+0x3b6>
mov    -0x38(%rbp),%edi
call   1090 <mpq_denref@plt>
mov    %eax,-0x5c(%rbp)
mov    -0x38(%rbp),%edi
call   1090 <mpq_denref@plt>
mov    -0x5c(%rbp),%edi
mov    %eax,%esi
mov    $0xa,%edx
call   10b0 <mpz_mul_ui@plt>
jmp    151b <mpq_EGlpNumReadStrXc+0x37b>
jmp    155b <mpq_EGlpNumReadStrXc+0x3bb>
jmp    1560 <mpq_EGlpNumReadStrXc+0x3c0>
cmpl   $0x0,-0x20(%rbp)
je     1587 <mpq_EGlpNumReadStrXc+0x3e7>
mov    -0x38(%rbp),%edi
call   1070 <mpq_numref@plt>
mov    %eax,-0x60(%rbp)
mov    -0x38(%rbp),%edi
call   1070 <mpq_numref@plt>
mov    -0x60(%rbp),%edi
mov    %eax,%esi
call   1060 <mpz_neg@plt>
mov    -0x38(%rbp),%edi
call   1030 <mpq_canonicalize@plt>
mov    -0x34(%rbp),%edi
xor    %eax,%eax
mov    %eax,%esi
mov    $0x1,%edx
call   10a0 <mpq_set_ui@plt>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x1c(%rbp)
movb   $0x0,-0x15(%rbp)
movl   $0x0,-0x2c(%rbp)
movb   $0x1,-0x11(%rbp)
movb   $0x0,-0x12(%rbp)
movb   $0x0,-0x13(%rbp)
movb   $0x1,-0x14(%rbp)
movl   $0x1,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x16(%rbp)
jmp    1230 <mpq_EGlpNumReadStrXc+0x90>
cmpl   $0x0,-0x28(%rbp)
je     1717 <mpq_EGlpNumReadStrXc+0x577>
cmpl   $0x0,-0x24(%rbp)
je     160e <mpq_EGlpNumReadStrXc+0x46e>
xor    %eax,%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1667 <mpq_EGlpNumReadStrXc+0x4c7>
jmp    161d <mpq_EGlpNumReadStrXc+0x47d>
mov    -0x1c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x1c(%rbp)
cmp    $0x0,%eax
je     1662 <mpq_EGlpNumReadStrXc+0x4c2>
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    %eax,-0x64(%rbp)
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    -0x64(%rbp),%edi
mov    %eax,%esi
mov    $0xa,%edx
call   10b0 <mpz_mul_ui@plt>
jmp    161d <mpq_EGlpNumReadStrXc+0x47d>
jmp    16c8 <mpq_EGlpNumReadStrXc+0x528>
cmpl   $0x0,-0x1c(%rbp)
jge    16c3 <mpq_EGlpNumReadStrXc+0x523>
xor    %eax,%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x1c(%rbp)
cmp    $0x0,%eax
je     16be <mpq_EGlpNumReadStrXc+0x51e>
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1090 <mpq_denref@plt>
mov    %eax,-0x68(%rbp)
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1090 <mpq_denref@plt>
mov    -0x68(%rbp),%edi
mov    %eax,%esi
mov    $0xa,%edx
call   10b0 <mpz_mul_ui@plt>
jmp    1679 <mpq_EGlpNumReadStrXc+0x4d9>
jmp    16c3 <mpq_EGlpNumReadStrXc+0x523>
jmp    16c8 <mpq_EGlpNumReadStrXc+0x528>
cmpl   $0x0,-0x20(%rbp)
je     16f9 <mpq_EGlpNumReadStrXc+0x559>
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    %eax,-0x6c(%rbp)
movslq -0x30(%rbp),%rax
mov    -0x38(%rbp,%rax,4),%edi
call   1070 <mpq_numref@plt>
mov    -0x6c(%rbp),%edi
mov    %eax,%esi
call   1060 <mpz_neg@plt>
mov    -0x38(%rbp),%edi
call   1030 <mpq_canonicalize@plt>
mov    -0x34(%rbp),%edi
call   1030 <mpq_canonicalize@plt>
mov    -0x4(%rbp),%edi
mov    -0x38(%rbp),%esi
mov    -0x34(%rbp),%edx
call   10c0 <mpq_div@plt>
mov    -0x38(%rbp),%edi
call   1050 <mpq_clear@plt>
mov    -0x34(%rbp),%edi
call   1050 <mpq_clear@plt>
mov    -0x28(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mpq_EGlpNumReadStrXc>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rsi,%r13
mov    %edi,0x10(%rsp)
call   1080 <mpq_init@plt>
call   1080 <mpq_init@plt>
mov    $0x1,%esi
mov    $0x1,%edx
call   10a0 <mpq_set_ui@plt>
xor    %r12d,%r12d
mov    $0x1,%edx
xor    %esi,%esi
call   10a0 <mpq_set_ui@plt>
mov    $0x1,%dl
lea    0xe1a(%rip),%r15
xor    %ebx,%ebx
xor    %r8d,%r8d
mov    $0x1,%al
mov    $0x1,%cl
mov    %rcx,0x20(%rsp)
xor    %esi,%esi
movl   $0x0,0x4(%rsp)
movl   $0x0,0x8(%rsp)
xor    %edi,%edi
movl   $0x0,0xc(%rsp)
mov    %r13,0x28(%rsp)
jmp    1228 <mpq_EGlpNumReadStrXc+0x88>
nopw   0x0(%rax,%rax,1)
xor    %edx,%edx
xor    %eax,%eax
add    $0x1,%r12
movsbl 0x0(%r13,%r12,1),%ebp
lea    -0x30(%rbp),%ecx
cmp    $0xa,%cl
jae    1270 <mpq_EGlpNumReadStrXc+0xd0>
lea    -0x2b(%rbp),%ecx
cmp    $0x3a,%ecx
ja     1485 <mpq_EGlpNumReadStrXc+0x2e5>
movslq (%r15,%rcx,4),%rcx
add    %r15,%rcx
jmp    *%rcx
test   %bl,%bl
jne    1300 <mpq_EGlpNumReadStrXc+0x160>
test   %edi,%edi
je     1300 <mpq_EGlpNumReadStrXc+0x160>
lea    (%rsi,%rsi,4),%eax
lea    -0x30(%rbp,%rax,2),%esi
xor    %ebx,%ebx
xor    %r8d,%r8d
xor    %eax,%eax
add    $0x1,%r12
jmp    1228 <mpq_EGlpNumReadStrXc+0x88>
nop
test   %dl,%dl
je     127a <mpq_EGlpNumReadStrXc+0xda>
cmp    $0x2e,%bpl
je     1220 <mpq_EGlpNumReadStrXc+0x80>
test   %bl,%bl
je     1288 <mpq_EGlpNumReadStrXc+0xe8>
mov    %ebp,%ecx
and    $0xdf,%cl
cmp    $0x45,%cl
je     1236 <mpq_EGlpNumReadStrXc+0x96>
test   %al,%al
je     1298 <mpq_EGlpNumReadStrXc+0xf8>
cmp    $0x2b,%bpl
je     1236 <mpq_EGlpNumReadStrXc+0x96>
cmp    $0x2d,%bpl
je     1236 <mpq_EGlpNumReadStrXc+0x96>
cmpb   $0x0,0x20(%rsp)
je     13db <mpq_EGlpNumReadStrXc+0x23b>
cmp    $0x2f,%bpl
jne    13db <mpq_EGlpNumReadStrXc+0x23b>
mov    %esi,%ebp
neg    %ebp
cmpl   $0x0,0x8(%rsp)
cmove  %esi,%ebp
test   %ebp,%ebp
jle    13fd <mpq_EGlpNumReadStrXc+0x25d>
mov    0x4(%rsp),%r14d
cs nopw 0x0(%rax,%rax,1)
call   1070 <mpq_numref@plt>
mov    %eax,%ebx
call   1070 <mpq_numref@plt>
mov    $0xa,%edx
mov    %ebx,%edi
mov    %eax,%esi
call   10b0 <mpz_mul_ui@plt>
add    $0xffffffff,%ebp
jne    12d0 <mpq_EGlpNumReadStrXc+0x130>
jmp    142e <mpq_EGlpNumReadStrXc+0x28e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r8d,0x14(%rsp)
mov    %edi,%r15d
mov    %rsi,0x30(%rsp)
mov    0xc(%rsp),%eax
mov    0x18(%rsp,%rax,4),%ebx
mov    %edx,%r14d
test   %dl,%dl
jne    133c <mpq_EGlpNumReadStrXc+0x19c>
mov    %ebx,%edi
call   1090 <mpq_denref@plt>
mov    %eax,%r13d
mov    %ebx,%edi
call   1090 <mpq_denref@plt>
mov    $0xa,%edx
mov    %r13d,%edi
mov    %eax,%esi
call   10b0 <mpz_mul_ui@plt>
mov    %ebx,%edi
call   1070 <mpq_numref@plt>
mov    %eax,%r13d
mov    %ebx,%edi
call   1070 <mpq_numref@plt>
mov    $0xa,%edx
mov    %r13d,%edi
mov    %eax,%esi
call   10b0 <mpz_mul_ui@plt>
mov    %ebx,%edi
call   1070 <mpq_numref@plt>
mov    %eax,%r13d
mov    %ebx,%edi
call   1070 <mpq_numref@plt>
add    $0xffffffd0,%ebp
mov    %r13d,%edi
mov    %eax,%esi
mov    %rbp,%rdx
call   1040 <mpz_add_ui@plt>
mov    %r15d,%edi
add    $0x1,%edi
mov    $0x1,%bl
xor    %eax,%eax
mov    0x28(%rsp),%r13
lea    0xc6d(%rip),%r15
mov    %r14d,%edx
mov    0x30(%rsp),%rsi
mov    0x14(%rsp),%r8d
add    $0x1,%r12
jmp    1228 <mpq_EGlpNumReadStrXc+0x88>
mov    $0x1,%r8b
xor    %ebx,%ebx
xor    %eax,%eax
add    $0x1,%r12
jmp    1228 <mpq_EGlpNumReadStrXc+0x88>
test   %al,%al
mov    0x4(%rsp),%eax
mov    $0x1,%ecx
cmovne %ecx,%eax
mov    %eax,0x4(%rsp)
mov    0x8(%rsp),%eax
cmove  %ecx,%eax
mov    %eax,0x8(%rsp)
jmp    1264 <mpq_EGlpNumReadStrXc+0xc4>
test   %r8b,%r8b
je     148e <mpq_EGlpNumReadStrXc+0x2ee>
cmp    $0x2d,%bpl
je     1236 <mpq_EGlpNumReadStrXc+0x96>
cmp    $0x2b,%bpl
je     1236 <mpq_EGlpNumReadStrXc+0x96>
jmp    148e <mpq_EGlpNumReadStrXc+0x2ee>
mov    0x4(%rsp),%r14d
je     142e <mpq_EGlpNumReadStrXc+0x28e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
call   1090 <mpq_denref@plt>
mov    %eax,%ebx
call   1090 <mpq_denref@plt>
mov    $0xa,%edx
mov    %ebx,%edi
mov    %eax,%esi
call   10b0 <mpz_mul_ui@plt>
inc    %ebp
jne    1410 <mpq_EGlpNumReadStrXc+0x270>
test   %r14d,%r14d
je     1448 <mpq_EGlpNumReadStrXc+0x2a8>
call   1070 <mpq_numref@plt>
mov    %eax,%ebx
call   1070 <mpq_numref@plt>
mov    %ebx,%edi
mov    %eax,%esi
call   1060 <mpz_neg@plt>
call   1030 <mpq_canonicalize@plt>
xor    %ebx,%ebx
mov    $0x1,%edx
xor    %esi,%esi
call   10a0 <mpq_set_ui@plt>
movl   $0x1,0xc(%rsp)
mov    $0x1,%dl
xor    %r8d,%r8d
mov    $0x1,%al
xor    %ecx,%ecx
mov    %rcx,0x20(%rsp)
xor    %esi,%esi
movl   $0x0,0x4(%rsp)
movl   $0x0,0x8(%rsp)
xor    %edi,%edi
add    $0x1,%r12
jmp    1228 <mpq_EGlpNumReadStrXc+0x88>
test   %r12d,%r12d
je     154f <mpq_EGlpNumReadStrXc+0x3af>
mov    %esi,%ebx
neg    %ebx
cmpl   $0x0,0x8(%rsp)
cmove  %esi,%ebx
test   %ebx,%ebx
jle    14d7 <mpq_EGlpNumReadStrXc+0x337>
mov    0xc(%rsp),%eax
mov    0x18(%rsp,%rax,4),%r14d
mov    %r14d,%edi
call   1070 <mpq_numref@plt>
mov    %eax,%ebp
mov    %r14d,%edi
call   1070 <mpq_numref@plt>
mov    $0xa,%edx
mov    %ebp,%edi
mov    %eax,%esi
call   10b0 <mpz_mul_ui@plt>
add    $0xffffffff,%ebx
jne    14b0 <mpq_EGlpNumReadStrXc+0x310>
jmp    1514 <mpq_EGlpNumReadStrXc+0x374>
jns    1514 <mpq_EGlpNumReadStrXc+0x374>
mov    0xc(%rsp),%eax
mov    0x18(%rsp,%rax,4),%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r14d,%edi
call   1090 <mpq_denref@plt>
mov    %eax,%ebp
mov    %r14d,%edi
call   1090 <mpq_denref@plt>
mov    $0xa,%edx
mov    %ebp,%edi
mov    %eax,%esi
call   10b0 <mpz_mul_ui@plt>
inc    %ebx
jne    14f0 <mpq_EGlpNumReadStrXc+0x350>
cmpl   $0x0,0x4(%rsp)
je     153c <mpq_EGlpNumReadStrXc+0x39c>
mov    0xc(%rsp),%eax
mov    0x18(%rsp,%rax,4),%ebx
mov    %ebx,%edi
call   1070 <mpq_numref@plt>
mov    %eax,%ebp
mov    %ebx,%edi
call   1070 <mpq_numref@plt>
mov    %ebp,%edi
mov    %eax,%esi
call   1060 <mpz_neg@plt>
call   1030 <mpq_canonicalize@plt>
call   1030 <mpq_canonicalize@plt>
mov    0x10(%rsp),%edi
call   10c0 <mpq_div@plt>
call   1050 <mpq_clear@plt>
call   1050 <mpq_clear@plt>
mov    %r12d,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @mpq_EGlpNumReadStrXc(i32 %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca [2 x i32]
store i32 %0, i32* %3
store i8* %1, i8** %4
store i8 1, i8* %5
store i8 0, i8* %6
store i8 0, i8* %7
store i8 1, i8* %8
store i8 1, i8* %9
store i8 0, i8* %10
store i32 0, i32* %11
store i32 0, i32* %12
store i32 0, i32* %13
store i32 0, i32* %14
store i32 0, i32* %15
store i32 0, i32* %16
%18 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%19 = load i32, i32* %18
%20 = call i32 @mpq_init(i32 %19)
%21 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 1
%22 = load i32, i32* %21
%23 = call i32 @mpq_init(i32 %22)
%24 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 1
%25 = load i32, i32* %24
%26 = call i32 @mpq_set_ui(i32 %25, i64 1, i64 1)
%27 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%28 = load i32, i32* %27
%29 = call i32 @mpq_set_ui(i32 %28, i64 0, i64 1)
%30 = load i8*, i8** %4
%31 = load i32, i32* %14
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i8, i8* %30, i64 %32
%34 = load i8, i8* %33
store i8 %34, i8* %10
br label %35
35: ; preds = %241, %2
%36 = load i8, i8* %10
%37 = sext i8 %36 to i32
%38 = icmp sle i32 48, %37
br i1 %38, label %39, label %43
39: ; preds = %35
%40 = load i8, i8* %10
%41 = sext i8 %40 to i32
%42 = icmp sle i32 %41, 57
br i1 %42, label %99, label %43
43: ; preds = %39, %35
%44 = load i8, i8* %5
%45 = zext i8 %44 to i32
%46 = icmp ne i32 %45, 0
br i1 %46, label %47, label %51
47: ; preds = %43
%48 = load i8, i8* %10
%49 = sext i8 %48 to i32
%50 = icmp eq i32 %49, 46
br i1 %50, label %99, label %51
51: ; preds = %47, %43
%52 = load i8, i8* %6
%53 = zext i8 %52 to i32
%54 = icmp ne i32 %53, 0
br i1 %54, label %55, label %63
55: ; preds = %51
%56 = load i8, i8* %10
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 101
br i1 %58, label %99, label %59
59: ; preds = %55
%60 = load i8, i8* %10
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 69
br i1 %62, label %99, label %63
63: ; preds = %59, %51
%64 = load i8, i8* %8
%65 = zext i8 %64 to i32
%66 = icmp ne i32 %65, 0
br i1 %66, label %67, label %75
67: ; preds = %63
%68 = load i8, i8* %10
%69 = sext i8 %68 to i32
%70 = icmp eq i32 %69, 43
br i1 %70, label %99, label %71
71: ; preds = %67
%72 = load i8, i8* %10
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 45
br i1 %74, label %99, label %75
75: ; preds = %71, %63
%76 = load i8, i8* %9
%77 = zext i8 %76 to i32
%78 = icmp ne i32 %77, 0
br i1 %78, label %79, label %83
79: ; preds = %75
%80 = load i8, i8* %10
%81 = sext i8 %80 to i32
%82 = icmp eq i32 %81, 47
br i1 %82, label %99, label %83
83: ; preds = %79, %75
%84 = load i8, i8* %7
%85 = zext i8 %84 to i32
%86 = icmp ne i32 %85, 0
br i1 %86, label %87, label %97
87: ; preds = %83
%88 = load i8, i8* %10
%89 = sext i8 %88 to i32
%90 = icmp eq i32 %89, 43
br i1 %90, label %95, label %91
91: ; preds = %87
%92 = load i8, i8* %10
%93 = sext i8 %92 to i32
%94 = icmp eq i32 %93, 45
br label %95
95: ; preds = %91, %87
%96 = phi i1 [ true, %87 ], [ %94, %91 ]
br label %97
97: ; preds = %95, %83
%98 = phi i1 [ false, %83 ], [ %96, %95 ]
br label %99
99: ; preds = %97, %79, %71, %67, %59, %55, %47, %39
%100 = phi i1 [ true, %79 ], [ true, %71 ], [ true, %67 ], [ true, %59 ], [ true, %55 ], [ true, %47 ], [ true, %39 ], [ %98, %97 ]
br i1 %100, label %101, label %248
101: ; preds = %99
%102 = load i8, i8* %10
%103 = sext i8 %102 to i32
switch i32 %103, label %241 [
i32 48, label %104
i32 49, label %104
i32 50, label %104
i32 51, label %104
i32 52, label %104
i32 53, label %104
i32 54, label %104
i32 55, label %104
i32 56, label %104
i32 57, label %104
i32 46, label %163
i32 45, label %164
i32 43, label %170
i32 101, label %179
i32 69, label %179
i32 47, label %180
]
104: ; preds = %101, %101, %101, %101, %101, %101, %101, %101, %101, %101
%105 = load i8, i8* %6
%106 = zext i8 %105 to i32
%107 = icmp ne i32 %106, 0
br i1 %107, label %111, label %108
108: ; preds = %104
%109 = load i32, i32* %15
%110 = icmp eq i32 %109, 0
br i1 %110, label %111, label %155
111: ; preds = %108, %104
%112 = load i8, i8* %5
%113 = icmp ne i8 %112, 0
br i1 %113, label %126, label %114
114: ; preds = %111
%115 = load i32, i32* %16
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %116
%118 = load i32, i32* %117
%119 = call i32 @mpq_denref(i32 %118)
%120 = load i32, i32* %16
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %121
%123 = load i32, i32* %122
%124 = call i32 @mpq_denref(i32 %123)
%125 = call i32 @mpz_mul_ui(i32 %119, i32 %124, i64 10)
br label %126
126: ; preds = %114, %111
%127 = load i32, i32* %16
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %128
%130 = load i32, i32* %129
%131 = call i32 @mpq_numref(i32 %130)
%132 = load i32, i32* %16
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %133
%135 = load i32, i32* %134
%136 = call i32 @mpq_numref(i32 %135)
%137 = call i32 @mpz_mul_ui(i32 %131, i32 %136, i64 10)
%138 = load i32, i32* %16
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %139
%141 = load i32, i32* %140
%142 = call i32 @mpq_numref(i32 %141)
%143 = load i32, i32* %16
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %144
%146 = load i32, i32* %145
%147 = call i32 @mpq_numref(i32 %146)
%148 = load i8, i8* %10
%149 = sext i8 %148 to i32
%150 = sub nsw i32 %149, 48
%151 = sext i32 %150 to i64
%152 = call i32 @mpz_add_ui(i32 %142, i32 %147, i64 %151)
%153 = load i32, i32* %15
%154 = add nsw i32 %153, 1
store i32 %154, i32* %15
store i8 1, i8* %6
br label %162
155: ; preds = %108
%156 = load i32, i32* %11
%157 = mul nsw i32 10, %156
%158 = load i8, i8* %10
%159 = sext i8 %158 to i32
%160 = add nsw i32 %157, %159
%161 = sub nsw i32 %160, 48
store i32 %161, i32* %11
store i8 0, i8* %7
br label %162
162: ; preds = %155, %126
store i8 0, i8* %8
br label %241
163: ; preds = %101
store i8 0, i8* %8
store i8 0, i8* %5
store i8 0, i8* %8
br label %241
164: ; preds = %101
%165 = load i8, i8* %8
%166 = icmp ne i8 %165, 0
br i1 %166, label %167, label %168
167: ; preds = %164
store i32 1, i32* %12
br label %169
168: ; preds = %164
store i32 1, i32* %13
br label %169
169: ; preds = %168, %167
br label %170
170: ; preds = %101, %169
%171 = load i8, i8* %8
%172 = icmp ne i8 %171, 0
br i1 %172, label %173, label %174
173: ; preds = %170
store i8 0, i8* %8
br label %174
174: ; preds = %173, %170
%175 = load i8, i8* %7
%176 = icmp ne i8 %175, 0
br i1 %176, label %177, label %178
177: ; preds = %174
store i8 0, i8* %7
br label %178
178: ; preds = %177, %174
br label %241
179: ; preds = %101, %101
store i8 0, i8* %8
store i8 0, i8* %6
store i8 1, i8* %7
br label %241
180: ; preds = %101
%181 = load i32, i32* %13
%182 = icmp ne i32 %181, 0
br i1 %182, label %183, label %186
183: ; preds = %180
%184 = load i32, i32* %11
%185 = sub nsw i32 0, %184
store i32 %185, i32* %11
br label %186
186: ; preds = %183, %180
%187 = load i32, i32* %11
%188 = icmp sgt i32 %187, 0
br i1 %188, label %189, label %203
189: ; preds = %186
br label %190
190: ; preds = %194, %189
%191 = load i32, i32* %11
%192 = add nsw i32 %191, -1
store i32 %192, i32* %11
%193 = icmp ne i32 %191, 0
br i1 %193, label %194, label %202
194: ; preds = %190
%195 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%196 = load i32, i32* %195
%197 = call i32 @mpq_numref(i32 %196)
%198 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%199 = load i32, i32* %198
%200 = call i32 @mpq_numref(i32 %199)
%201 = call i32 @mpz_mul_ui(i32 %197, i32 %200, i64 10)
br label %190
202: ; preds = %190
br label %223
203: ; preds = %186
%204 = load i32, i32* %11
%205 = icmp slt i32 %204, 0
br i1 %205, label %206, label %222
206: ; preds = %203
%207 = load i32, i32* %11
%208 = sub nsw i32 0, %207
store i32 %208, i32* %11
br label %209
209: ; preds = %213, %206
%210 = load i32, i32* %11
%211 = add nsw i32 %210, -1
store i32 %211, i32* %11
%212 = icmp ne i32 %210, 0
br i1 %212, label %213, label %221
213: ; preds = %209
%214 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%215 = load i32, i32* %214
%216 = call i32 @mpq_denref(i32 %215)
%217 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%218 = load i32, i32* %217
%219 = call i32 @mpq_denref(i32 %218)
%220 = call i32 @mpz_mul_ui(i32 %216, i32 %219, i64 10)
br label %209
221: ; preds = %209
br label %222
222: ; preds = %221, %203
br label %223
223: ; preds = %222, %202
%224 = load i32, i32* %12
%225 = icmp ne i32 %224, 0
br i1 %225, label %226, label %234
226: ; preds = %223
%227 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%228 = load i32, i32* %227
%229 = call i32 @mpq_numref(i32 %228)
%230 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%231 = load i32, i32* %230
%232 = call i32 @mpq_numref(i32 %231)
%233 = call i32 @mpz_neg(i32 %229, i32 %232)
br label %234
234: ; preds = %226, %223
%235 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%236 = load i32, i32* %235
%237 = call i32 @mpq_canonicalize(i32 %236)
%238 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 1
%239 = load i32, i32* %238
%240 = call i32 @mpq_set_ui(i32 %239, i64 0, i64 1)
store i32 0, i32* %12
store i32 0, i32* %13
store i32 0, i32* %11
store i8 0, i8* %9
store i32 0, i32* %15
store i8 1, i8* %5
store i8 0, i8* %6
store i8 0, i8* %7
store i8 1, i8* %8
store i32 1, i32* %16
br label %241
241: ; preds = %101, %234, %179, %178, %163, %162
%242 = load i8*, i8** %4
%243 = load i32, i32* %14
%244 = add nsw i32 %243, 1
store i32 %244, i32* %14
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds i8, i8* %242, i64 %245
%247 = load i8, i8* %246
store i8 %247, i8* %10
br label %35
248: ; preds = %99
%249 = load i32, i32* %14
%250 = icmp ne i32 %249, 0
br i1 %250, label %251, label %330
251: ; preds = %248
%252 = load i32, i32* %13
%253 = icmp ne i32 %252, 0
br i1 %253, label %254, label %257
254: ; preds = %251
%255 = load i32, i32* %11
%256 = sub nsw i32 0, %255
store i32 %256, i32* %11
br label %257
257: ; preds = %254, %251
%258 = load i32, i32* %11
%259 = icmp sgt i32 %258, 0
br i1 %259, label %260, label %278
260: ; preds = %257
br label %261
261: ; preds = %265, %260
%262 = load i32, i32* %11
%263 = add nsw i32 %262, -1
store i32 %263, i32* %11
%264 = icmp ne i32 %262, 0
br i1 %264, label %265, label %277
265: ; preds = %261
%266 = load i32, i32* %16
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %267
%269 = load i32, i32* %268
%270 = call i32 @mpq_numref(i32 %269)
%271 = load i32, i32* %16
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %272
%274 = load i32, i32* %273
%275 = call i32 @mpq_numref(i32 %274)
%276 = call i32 @mpz_mul_ui(i32 %270, i32 %275, i64 10)
br label %261
277: ; preds = %261
br label %302
278: ; preds = %257
%279 = load i32, i32* %11
%280 = icmp slt i32 %279, 0
br i1 %280, label %281, label %301
281: ; preds = %278
%282 = load i32, i32* %11
%283 = sub nsw i32 0, %282
store i32 %283, i32* %11
br label %284
284: ; preds = %288, %281
%285 = load i32, i32* %11
%286 = add nsw i32 %285, -1
store i32 %286, i32* %11
%287 = icmp ne i32 %285, 0
br i1 %287, label %288, label %300
288: ; preds = %284
%289 = load i32, i32* %16
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %290
%292 = load i32, i32* %291
%293 = call i32 @mpq_denref(i32 %292)
%294 = load i32, i32* %16
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %295
%297 = load i32, i32* %296
%298 = call i32 @mpq_denref(i32 %297)
%299 = call i32 @mpz_mul_ui(i32 %293, i32 %298, i64 10)
br label %284
300: ; preds = %284
br label %301
301: ; preds = %300, %278
br label %302
302: ; preds = %301, %277
%303 = load i32, i32* %12
%304 = icmp ne i32 %303, 0
br i1 %304, label %305, label %317
305: ; preds = %302
%306 = load i32, i32* %16
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %307
%309 = load i32, i32* %308
%310 = call i32 @mpq_numref(i32 %309)
%311 = load i32, i32* %16
%312 = sext i32 %311 to i64
%313 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %312
%314 = load i32, i32* %313
%315 = call i32 @mpq_numref(i32 %314)
%316 = call i32 @mpz_neg(i32 %310, i32 %315)
br label %317
317: ; preds = %305, %302
%318 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%319 = load i32, i32* %318
%320 = call i32 @mpq_canonicalize(i32 %319)
%321 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 1
%322 = load i32, i32* %321
%323 = call i32 @mpq_canonicalize(i32 %322)
%324 = load i32, i32* %3
%325 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%326 = load i32, i32* %325
%327 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 1
%328 = load i32, i32* %327
%329 = call i32 @mpq_div(i32 %324, i32 %326, i32 %328)
br label %330
330: ; preds = %317, %248
%331 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%332 = load i32, i32* %331
%333 = call i32 @mpq_clear(i32 %332)
%334 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 1
%335 = load i32, i32* %334
%336 = call i32 @mpq_clear(i32 %335)
%337 = load i32, i32* %14
ret i32 %337
}

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