#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 unsigned long uint64_t;

/* Variables and functions */
unsigned long get_number(char **, int *);
char get_symbol(char **);
char next_char(char **);
uint64_t do_expression(char **p, int *perr, int bracket) {
  int err = 0;
  char s0, sub = 0;
  uint64_t a = 0, b, tmp;
  *perr = 0;
  switch (next_char(p)) {
  case '\0':
    return 0;
  case '(':
    *p += 1;
    a = do_expression(p, &err, 1);
    break;
  default:
    a = get_number(p, &err);
  }
  if (err) {
  err:
    *perr = 1;
    return -1UL;
  }
reget:
  s0 = get_symbol(p);
  switch (s0) {
  case '(':
    b = do_expression(p, &err, 1);
    if (err)
      goto err;
    a *= b;
    break;
  case ')':
    if (sub) {
      a = tmp - a;
      sub = 0;
    }
    if (bracket)
      return a;
    break;
  case '+':
    if (sub) {
      a = tmp - a;
      sub = 0;
    }
    b = do_expression(p, &err, 1);
    if (err)
      goto err;
    a += b;
    break;
  case '-':
    if (sub) {
      a = tmp - a;
      sub = 0;
    }
    tmp = a;
    if (next_char(p) == '(')
      a = do_expression(p, &err, 1);
    else
      a = get_number(p, &err);
    if (err)
      goto err;
    sub = 1;
    break;
  case '*':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a *= b;
    break;
  case '/':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a /= b;
    break;
  case '%':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a %= b;
    break;
  case '&':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a &= b;
    break;
  case '|':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a |= b;
    break;
  case '^':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a ^= b;
    break;
  case 'v':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a = ~(a | b);
    break;
  case '>':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a >>= b;
    break;
  case '<':
    if (next_char(p) == '(')
      b = do_expression(p, &err, 1);
    else
      b = get_number(p, &err);
    if (err)
      goto err;
    a <<= b;
    break;
  case '\0':
    if (sub) {
      a = tmp - a;
      sub = 0;
    }
    return a;
  case -1:
    err = 1;
  }
  if (err)
    goto err;
  goto reget;
  return 0;
}


x86 assembly (clang, -O0):
<do_expression>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movb   $0x0,-0x22(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
mov    %eax,-0x44(%rbp)
test   %eax,%eax
je     119d <do_expression+0x5d>
jmp    118c <do_expression+0x4c>
mov    -0x44(%rbp),%eax
sub    $0x28,%eax
je     11aa <do_expression+0x6a>
jmp    11d3 <do_expression+0x93>
movq   $0x0,-0x8(%rbp)
jmp    173d <do_expression+0x5fd>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x30(%rbp)
jmp    11e4 <do_expression+0xa4>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x30(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     120a <do_expression+0xca>
jmp    11f3 <do_expression+0xb3>
mov    -0x18(%rbp),%rax
movl   $0x1,(%rax)
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    173d <do_expression+0x5fd>
jmp    120f <do_expression+0xcf>
mov    -0x10(%rbp),%rdi
call   1050 <get_symbol@plt>
mov    %al,-0x21(%rbp)
movsbl -0x21(%rbp),%eax
add    $0x1,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x7d,%eax
ja     1729 <do_expression+0x5e9>
mov    -0x50(%rbp),%rax
lea    0xdc4(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     126a <do_expression+0x12a>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rax
imul   -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
cmpb   $0x0,-0x22(%rbp)
je     1296 <do_expression+0x156>
mov    -0x40(%rbp),%rax
sub    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
movb   $0x0,-0x22(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     12ad <do_expression+0x16d>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    173d <do_expression+0x5fd>
jmp    1729 <do_expression+0x5e9>
cmpb   $0x0,-0x22(%rbp)
je     12cc <do_expression+0x18c>
mov    -0x40(%rbp),%rax
sub    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
movb   $0x0,-0x22(%rbp)
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     12f1 <do_expression+0x1b1>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
cmpb   $0x0,-0x22(%rbp)
je     131c <do_expression+0x1dc>
mov    -0x40(%rbp),%rax
sub    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
movb   $0x0,-0x22(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    1354 <do_expression+0x214>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x30(%rbp)
jmp    1365 <do_expression+0x225>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x30(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     1374 <do_expression+0x234>
jmp    11f3 <do_expression+0xb3>
movb   $0x1,-0x22(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    13ad <do_expression+0x26d>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    13be <do_expression+0x27e>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     13cd <do_expression+0x28d>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rax
imul   -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    140f <do_expression+0x2cf>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    1420 <do_expression+0x2e0>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     142f <do_expression+0x2ef>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rcx
mov    -0x30(%rbp),%rax
xor    %edx,%edx
div    %rcx
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    1475 <do_expression+0x335>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    1486 <do_expression+0x346>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     1495 <do_expression+0x355>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rcx
mov    -0x30(%rbp),%rax
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    14db <do_expression+0x39b>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    14ec <do_expression+0x3ac>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     14fb <do_expression+0x3bb>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rax
and    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    153c <do_expression+0x3fc>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    154d <do_expression+0x40d>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     155c <do_expression+0x41c>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rax
or     -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    159d <do_expression+0x45d>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    15ae <do_expression+0x46e>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     15bd <do_expression+0x47d>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rax
xor    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    15fe <do_expression+0x4be>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    160f <do_expression+0x4cf>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     161e <do_expression+0x4de>
jmp    11f3 <do_expression+0xb3>
mov    -0x30(%rbp),%rax
or     -0x38(%rbp),%rax
xor    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    1663 <do_expression+0x523>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    1674 <do_expression+0x534>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     1683 <do_expression+0x543>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rcx
mov    -0x30(%rbp),%rax
shr    %cl,%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
mov    -0x10(%rbp),%rdi
call   1030 <next_char@plt>
movsbl %al,%eax
cmp    $0x28,%eax
jne    16c7 <do_expression+0x587>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
mov    %rax,-0x38(%rbp)
jmp    16d8 <do_expression+0x598>
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1040 <get_number@plt>
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     16e7 <do_expression+0x5a7>
jmp    11f3 <do_expression+0xb3>
mov    -0x38(%rbp),%rcx
mov    -0x30(%rbp),%rax
shl    %cl,%rax
mov    %rax,-0x30(%rbp)
jmp    1729 <do_expression+0x5e9>
cmpb   $0x0,-0x22(%rbp)
je     1715 <do_expression+0x5d5>
mov    -0x40(%rbp),%rax
sub    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
movb   $0x0,-0x22(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    173d <do_expression+0x5fd>
movl   $0x1,-0x20(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     1738 <do_expression+0x5f8>
jmp    11f3 <do_expression+0xb3>
jmp    120f <do_expression+0xcf>
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<do_expression>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edx,%ebx
mov    %rsi,%r12
mov    %rdi,%rbp
movl   $0x0,0x4(%rsp)
movl   $0x0,(%rsi)
call   1030 <next_char@plt>
movsbl %al,%eax
test   %eax,%eax
je     1192 <do_expression+0x52>
cmp    $0x28,%eax
mov    %ebx,0x14(%rsp)
jne    1196 <do_expression+0x56>
addq   $0x1,0x0(%rbp)
lea    0x4(%rsp),%rsi
mov    %rbp,%rdi
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    11a3 <do_expression+0x63>
xor    %ebx,%ebx
jmp    11bc <do_expression+0x7c>
lea    0x4(%rsp),%rsi
mov    %rbp,%rdi
call   1040 <get_number@plt>
mov    %rax,%rbx
cmpl   $0x0,0x4(%rsp)
je     11ce <do_expression+0x8e>
movl   $0x1,(%r12)
mov    $0xffffffffffffffff,%rbx
mov    %rbx,%rax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %r13d,%r13d
lea    0xe28(%rip),%r14
lea    0x4(%rsp),%r15
jmp    11e6 <do_expression+0xa6>
nop
xor    %esi,%esi
test   %esi,%esi
jne    11ad <do_expression+0x6d>
mov    %rbp,%rdi
call   1050 <get_symbol@plt>
movsbl %al,%eax
add    $0x1,%eax
cmp    $0x7d,%eax
ja     1272 <do_expression+0x132>
movslq (%r14,%rax,4),%rax
add    %r14,%rax
jmp    *%rax
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    13fc <do_expression+0x2bc>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    1401 <do_expression+0x2c1>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    1431 <do_expression+0x2f1>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    1436 <do_expression+0x2f6>
mov    %rbp,%rdi
mov    %r15,%rsi
jmp    1291 <do_expression+0x151>
mov    0x8(%rsp),%rax
sub    %rbx,%rax
test   %r13b,%r13b
cmovne %rax,%rbx
mov    0x14(%rsp),%eax
test   %eax,%eax
jne    11bc <do_expression+0x7c>
xor    %r13d,%r13d
mov    0x4(%rsp),%esi
jmp    11e2 <do_expression+0xa2>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    1449 <do_expression+0x309>
mov    $0x1,%edx
call   1060 <do_expression@plt>
cmpl   $0x0,0x4(%rsp)
je     1459 <do_expression+0x319>
jmp    11ad <do_expression+0x6d>
mov    %rbp,%rdi
mov    %r15,%rsi
mov    $0x1,%edx
call   1060 <do_expression@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
mov    0x8(%rsp),%rcx
sub    %rbx,%rcx
test   %r13b,%r13b
cmove  %rbx,%rcx
add    %rcx,%rax
xor    %esi,%esi
xor    %r13d,%r13d
mov    %rax,%rbx
jmp    11e2 <do_expression+0xa2>
mov    0x8(%rsp),%rax
sub    %rbx,%rax
test   %r13b,%r13b
cmove  %rbx,%rax
mov    %rax,0x8(%rsp)
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    1462 <do_expression+0x322>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    1467 <do_expression+0x327>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    147d <do_expression+0x33d>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    1482 <do_expression+0x342>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    14b2 <do_expression+0x372>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    14b7 <do_expression+0x377>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    14cc <do_expression+0x38c>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    14d1 <do_expression+0x391>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    14e6 <do_expression+0x3a6>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    14eb <do_expression+0x3ab>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    14fe <do_expression+0x3be>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    1503 <do_expression+0x3c3>
mov    %rbp,%rdi
call   1030 <next_char@plt>
mov    %rbp,%rdi
mov    %r15,%rsi
cmp    $0x28,%al
jne    151e <do_expression+0x3de>
mov    $0x1,%edx
call   1060 <do_expression@plt>
jmp    1523 <do_expression+0x3e3>
call   1040 <get_number@plt>
mov    %rax,%rcx
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
mov    %rbx,%rax
or     %rcx,%rax
xor    %esi,%esi
shr    $0x20,%rax
je     1536 <do_expression+0x3f6>
mov    %rbx,%rax
xor    %edx,%edx
div    %rcx
mov    %rdx,%rbx
jmp    11e2 <do_expression+0xa2>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
and    %rax,%rbx
jmp    11e0 <do_expression+0xa0>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
imul   %rax,%rbx
jmp    11e0 <do_expression+0xa0>
call   1040 <get_number@plt>
mov    %rax,%rbx
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
mov    $0x1,%r13b
jmp    11e0 <do_expression+0xa0>
call   1040 <get_number@plt>
mov    %rax,%rcx
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
mov    %rbx,%rax
or     %rcx,%rax
xor    %esi,%esi
shr    $0x20,%rax
je     1543 <do_expression+0x403>
mov    %rbx,%rax
xor    %edx,%edx
div    %rcx
mov    %rax,%rbx
jmp    11e2 <do_expression+0xa2>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
mov    %eax,%ecx
shl    %cl,%rbx
jmp    11e0 <do_expression+0xa0>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
mov    %eax,%ecx
shr    %cl,%rbx
jmp    11e0 <do_expression+0xa0>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
xor    %rax,%rbx
jmp    11e0 <do_expression+0xa0>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
or     %rbx,%rax
not    %rax
xor    %esi,%esi
mov    %rax,%rbx
jmp    11e2 <do_expression+0xa2>
call   1040 <get_number@plt>
cmpl   $0x0,0x4(%rsp)
jne    11ad <do_expression+0x6d>
or     %rax,%rbx
jmp    11e0 <do_expression+0xa0>
mov    %ebx,%eax
xor    %edx,%edx
div    %ecx
mov    %edx,%ebx
jmp    11e2 <do_expression+0xa2>
mov    %ebx,%eax
xor    %edx,%edx
div    %ecx
mov    %eax,%ebx
jmp    11e2 <do_expression+0xa2>
movl   $0x1,0x4(%rsp)
jmp    11ad <do_expression+0x6d>
mov    0x8(%rsp),%rax
sub    %rbx,%rax
test   %r13b,%r13b
cmovne %rax,%rbx
jmp    11bc <do_expression+0x7c>

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

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