#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 */
scalar_t__ is_digit_char(char);
scalar_t__ is_digit_string(char *, char *);
scalar_t__ is_space_char(char);
scalar_t__ is_token_char(char);
scalar_t__ malloc(int);
char *mysql_query_digest_and_first_comment(char *s, int len,
                                           char *first_comment) {
  int i = 0;
  char *r = (char *)malloc(len + sizeof(char));
  char *p_r = r;
  char *p_r_t = r;
  char prev_char = 0;
  char qutr_char = 0;
  char flag = 0;
  char fc = 0;
  int fc_len = 0;
  char fns = 0;
  while (i < len) {
    if (flag == 0) {
      p_r_t = p_r;
      if (prev_char == '/' && *s == '*') {
        flag = 1;
      } else if (*s == '#') {
        flag = 2;
      } else if (*s == '\'' || *s == '"') {
        flag = 3;
        qutr_char = *s;
      } else if (is_token_char(prev_char) && is_digit_char(*s)) {
        flag = 4;
        if (len == i + 1)
          continue;
      } else {
        flag = 0;
        if (fns == 0 && is_space_char(*s)) {
          s++;
          i++;
          continue;
        }
        if (fns == 0)
          fns = 1;
        if (is_space_char(prev_char) && is_space_char(*s)) {
          prev_char = ' ';
          *p_r = ' ';
          s++;
          i++;
          continue;
        }
      }
    } else {
      if (flag == 1) {
        if (fc == 0) {
          fc = 1;
        }
        if (fc == 1) {
          if (fc_len < 1024 - 1) {
            first_comment[fc_len] = !is_space_char(*s) ? *s : ' ';
            fc_len++;
          }
          if (prev_char == '*' && *s == '/') {
            if (fc_len >= 2)
              fc_len -= 2;
            first_comment[fc_len] = 0;
            fc = 2;
          }
        }
      }
      if ((flag == 1 && prev_char == '*' && *s == '/') ||
          (flag == 2 && (*s == '\n' || *s == '\r'))) {
        p_r = flag == 1 ? p_r_t - sizeof(char) : p_r_t;
        prev_char = ' ';
        flag = 0;
        s++;
        i++;
        continue;
      } else if (flag == 3) {
        if (len == i + 1) {
          p_r = p_r_t;
          *p_r++ = '?';
          flag = 0;
          break;
        }
        if (p_r > p_r_t + sizeof(char)) {
          if ((prev_char == '\\' && *s == '\\') ||
              (prev_char == '\\' && *s == qutr_char) ||
              (prev_char == qutr_char && *s == qutr_char)) {
            prev_char = 'X';
            s++;
            i++;
            continue;
          }
        }
        if (*s == qutr_char &&
            (len == i + 1 || *(s + sizeof(char)) != qutr_char)) {
          p_r = p_r_t;
          *p_r++ = '?';
          flag = 0;
          if (i < len)
            s++;
          i++;
          continue;
        }
      } else if (flag == 4) {
        if (p_r_t == p_r) {
          *p_r++ = '?';
          i++;
          continue;
        }
        if (is_token_char(*s) || len == i + 1) {
          if (is_digit_string(p_r_t, p_r)) {
            p_r = p_r_t;
            *p_r++ = '?';
            if (len == i + 1) {
              if (is_token_char(*s))
                *p_r++ = *s;
              i++;
              continue;
            }
          }
          flag = 0;
        }
      }
    }
    *p_r++ = !is_space_char(*s) ? *s : ' ';
    prev_char = *s++;
    i++;
  }
  if (p_r > r) {
    char *e = p_r;
    e--;
    if (*e == ' ') {
      *e = 0;
    }
  }
  *p_r = 0;
  return r;
}


x86 assembly (clang, -O0):
<mysql_query_digest_and_first_comment>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movslq -0xc(%rbp),%rax
add    $0x1,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
movb   $0x0,-0x39(%rbp)
movb   $0x0,-0x3a(%rbp)
movb   $0x0,-0x3b(%rbp)
movb   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movb   $0x0,-0x41(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    176f <mysql_query_digest_and_first_comment+0x61f>
movsbl -0x3b(%rbp),%eax
cmp    $0x0,%eax
jne    133b <mysql_query_digest_and_first_comment+0x1eb>
mov    -0x30(%rbp),%rax
mov    %rax,-0x38(%rbp)
movsbl -0x39(%rbp),%eax
cmp    $0x2f,%eax
jne    11ef <mysql_query_digest_and_first_comment+0x9f>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    11ef <mysql_query_digest_and_first_comment+0x9f>
movb   $0x1,-0x3b(%rbp)
jmp    1336 <mysql_query_digest_and_first_comment+0x1e6>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    1208 <mysql_query_digest_and_first_comment+0xb8>
movb   $0x2,-0x3b(%rbp)
jmp    1331 <mysql_query_digest_and_first_comment+0x1e1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     1228 <mysql_query_digest_and_first_comment+0xd8>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    123a <mysql_query_digest_and_first_comment+0xea>
movb   $0x3,-0x3b(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
jmp    132c <mysql_query_digest_and_first_comment+0x1dc>
movsbl -0x39(%rbp),%edi
call   1040 <is_token_char@plt>
cmp    $0x0,%rax
je     1282 <mysql_query_digest_and_first_comment+0x132>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1070 <is_digit_char@plt>
cmp    $0x0,%rax
je     1282 <mysql_query_digest_and_first_comment+0x132>
movb   $0x4,-0x3b(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    127d <mysql_query_digest_and_first_comment+0x12d>
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
jmp    1327 <mysql_query_digest_and_first_comment+0x1d7>
movb   $0x0,-0x3b(%rbp)
movsbl -0x41(%rbp),%eax
cmp    $0x0,%eax
jne    12c3 <mysql_query_digest_and_first_comment+0x173>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1050 <is_space_char@plt>
cmp    $0x0,%rax
je     12c3 <mysql_query_digest_and_first_comment+0x173>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
movsbl -0x41(%rbp),%eax
cmp    $0x0,%eax
jne    12d4 <mysql_query_digest_and_first_comment+0x184>
movb   $0x1,-0x41(%rbp)
movsbl -0x39(%rbp),%edi
call   1050 <is_space_char@plt>
cmp    $0x0,%rax
je     1322 <mysql_query_digest_and_first_comment+0x1d2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1050 <is_space_char@plt>
cmp    $0x0,%rax
je     1322 <mysql_query_digest_and_first_comment+0x1d2>
movb   $0x20,-0x39(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
jmp    1327 <mysql_query_digest_and_first_comment+0x1d7>
jmp    132c <mysql_query_digest_and_first_comment+0x1dc>
jmp    1331 <mysql_query_digest_and_first_comment+0x1e1>
jmp    1336 <mysql_query_digest_and_first_comment+0x1e6>
jmp    1705 <mysql_query_digest_and_first_comment+0x5b5>
movsbl -0x3b(%rbp),%eax
cmp    $0x1,%eax
jne    1408 <mysql_query_digest_and_first_comment+0x2b8>
movsbl -0x3c(%rbp),%eax
cmp    $0x0,%eax
jne    1359 <mysql_query_digest_and_first_comment+0x209>
movb   $0x1,-0x3c(%rbp)
movsbl -0x3c(%rbp),%eax
cmp    $0x1,%eax
jne    1403 <mysql_query_digest_and_first_comment+0x2b3>
cmpl   $0x3ff,-0x40(%rbp)
jge    13be <mysql_query_digest_and_first_comment+0x26e>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1050 <is_space_char@plt>
cmp    $0x0,%rax
jne    1398 <mysql_query_digest_and_first_comment+0x248>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
jmp    13a5 <mysql_query_digest_and_first_comment+0x255>
mov    $0x20,%eax
mov    %eax,-0x54(%rbp)
jmp    13a5 <mysql_query_digest_and_first_comment+0x255>
mov    -0x54(%rbp),%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
movsbl -0x39(%rbp),%eax
cmp    $0x2a,%eax
jne    13fe <mysql_query_digest_and_first_comment+0x2ae>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    13fe <mysql_query_digest_and_first_comment+0x2ae>
cmpl   $0x2,-0x40(%rbp)
jl     13ee <mysql_query_digest_and_first_comment+0x29e>
mov    -0x40(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movb   $0x2,-0x3c(%rbp)
jmp    1403 <mysql_query_digest_and_first_comment+0x2b3>
jmp    1408 <mysql_query_digest_and_first_comment+0x2b8>
movsbl -0x3b(%rbp),%eax
cmp    $0x1,%eax
jne    1432 <mysql_query_digest_and_first_comment+0x2e2>
movsbl -0x39(%rbp),%eax
cmp    $0x2a,%eax
jne    1432 <mysql_query_digest_and_first_comment+0x2e2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     145f <mysql_query_digest_and_first_comment+0x30f>
movsbl -0x3b(%rbp),%eax
cmp    $0x2,%eax
jne    14af <mysql_query_digest_and_first_comment+0x35f>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
je     145f <mysql_query_digest_and_first_comment+0x30f>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xd,%eax
jne    14af <mysql_query_digest_and_first_comment+0x35f>
movsbl -0x3b(%rbp),%eax
cmp    $0x1,%eax
jne    147d <mysql_query_digest_and_first_comment+0x32d>
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x60(%rbp)
jmp    1485 <mysql_query_digest_and_first_comment+0x335>
mov    -0x38(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
mov    %rax,-0x30(%rbp)
movb   $0x20,-0x39(%rbp)
movb   $0x0,-0x3b(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
movsbl -0x3b(%rbp),%eax
cmp    $0x3,%eax
jne    1609 <mysql_query_digest_and_first_comment+0x4b9>
mov    -0xc(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    14f0 <mysql_query_digest_and_first_comment+0x3a0>
mov    -0x38(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x3f,(%rax)
movb   $0x0,-0x3b(%rbp)
jmp    176f <mysql_query_digest_and_first_comment+0x61f>
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
add    $0x1,%rcx
cmp    %rcx,%rax
jbe    1588 <mysql_query_digest_and_first_comment+0x438>
movsbl -0x39(%rbp),%eax
cmp    $0x5c,%eax
jne    1522 <mysql_query_digest_and_first_comment+0x3d2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
je     1565 <mysql_query_digest_and_first_comment+0x415>
movsbl -0x39(%rbp),%eax
cmp    $0x5c,%eax
jne    1542 <mysql_query_digest_and_first_comment+0x3f2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
je     1565 <mysql_query_digest_and_first_comment+0x415>
movsbl -0x39(%rbp),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jne    1583 <mysql_query_digest_and_first_comment+0x433>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jne    1583 <mysql_query_digest_and_first_comment+0x433>
movb   $0x58,-0x39(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
jmp    1588 <mysql_query_digest_and_first_comment+0x438>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jne    1604 <mysql_query_digest_and_first_comment+0x4b4>
mov    -0xc(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
je     15c0 <mysql_query_digest_and_first_comment+0x470>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
je     1604 <mysql_query_digest_and_first_comment+0x4b4>
mov    -0x38(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x3f,(%rax)
movb   $0x0,-0x3b(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    15f6 <mysql_query_digest_and_first_comment+0x4a6>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
jmp    16fb <mysql_query_digest_and_first_comment+0x5ab>
movsbl -0x3b(%rbp),%eax
cmp    $0x4,%eax
jne    16f6 <mysql_query_digest_and_first_comment+0x5a6>
mov    -0x38(%rbp),%rax
cmp    -0x30(%rbp),%rax
jne    1644 <mysql_query_digest_and_first_comment+0x4f4>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x3f,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1040 <is_token_char@plt>
cmp    $0x0,%rax
jne    166b <mysql_query_digest_and_first_comment+0x51b>
mov    -0xc(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    16f1 <mysql_query_digest_and_first_comment+0x5a1>
mov    -0x38(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1030 <is_digit_string@plt>
cmp    $0x0,%rax
je     16ed <mysql_query_digest_and_first_comment+0x59d>
mov    -0x38(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x3f,(%rax)
mov    -0xc(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    16e8 <mysql_query_digest_and_first_comment+0x598>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1040 <is_token_char@plt>
cmp    $0x0,%rax
je     16da <mysql_query_digest_and_first_comment+0x58a>
mov    -0x8(%rbp),%rax
mov    (%rax),%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
jmp    16ed <mysql_query_digest_and_first_comment+0x59d>
movb   $0x0,-0x3b(%rbp)
jmp    16f6 <mysql_query_digest_and_first_comment+0x5a6>
jmp    16fb <mysql_query_digest_and_first_comment+0x5ab>
jmp    1700 <mysql_query_digest_and_first_comment+0x5b0>
jmp    1705 <mysql_query_digest_and_first_comment+0x5b5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1050 <is_space_char@plt>
cmp    $0x0,%rax
jne    172a <mysql_query_digest_and_first_comment+0x5da>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x64(%rbp)
jmp    1737 <mysql_query_digest_and_first_comment+0x5e7>
mov    $0x20,%eax
mov    %eax,-0x64(%rbp)
jmp    1737 <mysql_query_digest_and_first_comment+0x5e7>
mov    -0x64(%rbp),%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x8(%rbp)
mov    (%rax),%al
mov    %al,-0x39(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a8 <mysql_query_digest_and_first_comment+0x58>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
jbe    17ad <mysql_query_digest_and_first_comment+0x65d>
mov    -0x30(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    17a8 <mysql_query_digest_and_first_comment+0x658>
mov    -0x50(%rbp),%rax
movb   $0x0,(%rax)
jmp    17ad <mysql_query_digest_and_first_comment+0x65d>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mysql_query_digest_and_first_comment>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rdx,0x28(%rsp)
mov    %esi,%ebp
mov    %rdi,%rbx
lea    0x1(%rbp),%edi
call   1060 <malloc@plt>
mov    %rbp,0x20(%rsp)
test   %ebp,%ebp
jle    1508 <mysql_query_digest_and_first_comment+0x3b8>
movl   $0x0,0x10(%rsp)
xor    %ecx,%ecx
mov    %rcx,0x18(%rsp)
movl   $0x0,0xc(%rsp)
xor    %r12d,%r12d
xor    %esi,%esi
xor    %ebp,%ebp
mov    %rax,(%rsp)
mov    %rax,0x30(%rsp)
mov    %rax,%r13
xor    %r15d,%r15d
jmp    11d6 <mysql_query_digest_and_first_comment+0x86>
nopl   0x0(%rax)
mov    %cl,0x0(%r13)
add    $0x1,%r13
movzbl (%rbx),%ebp
add    $0x1,%rbx
add    $0x1,%r15d
mov    %r15d,%eax
mov    %r14d,%esi
mov    %eax,%r15d
cmp    0x20(%rsp),%eax
jge    1513 <mysql_query_digest_and_first_comment+0x3c3>
test   %r12b,%r12b
je     1290 <mysql_query_digest_and_first_comment+0x140>
cmp    $0x1,%r12b
jne    12d0 <mysql_query_digest_and_first_comment+0x180>
mov    0xc(%rsp),%ecx
test   %cl,%cl
movzbl %cl,%ecx
mov    $0x1,%eax
cmove  %eax,%ecx
mov    %ecx,0xc(%rsp)
cmp    $0x1,%cl
jne    1300 <mysql_query_digest_and_first_comment+0x1b0>
cmpl   $0x3fe,0x18(%rsp)
jg     1241 <mysql_query_digest_and_first_comment+0xf1>
mov    %esi,%r14d
movsbl (%rbx),%edi
call   1050 <is_space_char@plt>
mov    $0x20,%cl
test   %rax,%rax
jne    1226 <mysql_query_digest_and_first_comment+0xd6>
movzbl (%rbx),%ecx
mov    0x18(%rsp),%rsi
movslq %esi,%rax
mov    0x28(%rsp),%rdx
mov    %cl,(%rdx,%rax,1)
add    $0x1,%esi
mov    %rsi,0x18(%rsp)
mov    %r14d,%esi
mov    $0x1,%al
mov    %eax,0xc(%rsp)
cmp    $0x2a,%bpl
jne    1340 <mysql_query_digest_and_first_comment+0x1f0>
cmpb   $0x2f,(%rbx)
jne    1340 <mysql_query_digest_and_first_comment+0x1f0>
mov    0x18(%rsp),%rcx
lea    -0x2(%rcx),%eax
cmp    $0x2,%ecx
cmovl  %ecx,%eax
movslq %eax,%rcx
mov    0x28(%rsp),%rdx
movb   $0x0,(%rdx,%rcx,1)
mov    $0x2,%cl
mov    %ecx,0xc(%rsp)
mov    %rax,0x18(%rsp)
jmp    1306 <mysql_query_digest_and_first_comment+0x1b6>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl (%rbx),%r14d
cmp    $0x2f,%bpl
jne    12a7 <mysql_query_digest_and_first_comment+0x157>
mov    $0x1,%r12b
cmp    $0x2a,%r14b
je     1420 <mysql_query_digest_and_first_comment+0x2d0>
cmp    $0x27,%r14b
je     12c1 <mysql_query_digest_and_first_comment+0x171>
cmp    $0x23,%r14b
je     1415 <mysql_query_digest_and_first_comment+0x2c5>
cmp    $0x22,%r14b
jne    1442 <mysql_query_digest_and_first_comment+0x2f2>
mov    $0x3,%r12b
mov    %r13,(%rsp)
jmp    1427 <mysql_query_digest_and_first_comment+0x2d7>
nopl   (%rax)
cmp    $0x4,%r12b
je     134b <mysql_query_digest_and_first_comment+0x1fb>
cmp    $0x3,%r12b
je     13aa <mysql_query_digest_and_first_comment+0x25a>
cmp    $0x2,%r12b
jne    1424 <mysql_query_digest_and_first_comment+0x2d4>
movzbl (%rbx),%eax
cmp    $0xd,%al
je     130b <mysql_query_digest_and_first_comment+0x1bb>
cmp    $0xa,%al
je     130b <mysql_query_digest_and_first_comment+0x1bb>
mov    %esi,%r14d
mov    $0x2,%r12b
jmp    1427 <mysql_query_digest_and_first_comment+0x2d7>
cmp    $0x2a,%bpl
jne    1340 <mysql_query_digest_and_first_comment+0x1f0>
cmpb   $0x2f,(%rbx)
jne    1340 <mysql_query_digest_and_first_comment+0x1f0>
xor    %eax,%eax
cmp    $0x1,%r12b
sete   %al
mov    (%rsp),%r13
sub    %rax,%r13
add    $0x1,%rbx
add    $0x1,%r15d
mov    $0x20,%bpl
xor    %r12d,%r12d
mov    %r15d,%eax
jmp    11c9 <mysql_query_digest_and_first_comment+0x79>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %esi,%r14d
mov    $0x1,%r12b
jmp    1427 <mysql_query_digest_and_first_comment+0x2d7>
mov    (%rsp),%rax
cmp    %r13,%rax
je     1472 <mysql_query_digest_and_first_comment+0x322>
mov    %esi,0x14(%rsp)
movsbl (%rbx),%edi
call   1040 <is_token_char@plt>
lea    0x1(%r15),%r14d
test   %rax,%rax
jne    1377 <mysql_query_digest_and_first_comment+0x227>
mov    $0x4,%r12b
cmp    0x20(%rsp),%r14d
jne    13a1 <mysql_query_digest_and_first_comment+0x251>
mov    (%rsp),%rbp
mov    %rbp,%rdi
mov    %r13,%rsi
call   1030 <is_digit_string@plt>
test   %rax,%rax
je     139e <mysql_query_digest_and_first_comment+0x24e>
lea    0x1(%rbp),%r13
movb   $0x3f,0x0(%rbp)
cmp    0x20(%rsp),%r14d
je     153d <mysql_query_digest_and_first_comment+0x3ed>
xor    %r12d,%r12d
mov    0x14(%rsp),%eax
mov    %eax,%r14d
jmp    1427 <mysql_query_digest_and_first_comment+0x2d7>
lea    0x1(%r15),%eax
mov    (%rsp),%rdx
lea    0x1(%rdx),%rcx
cmp    0x20(%rsp),%eax
je     150d <mysql_query_digest_and_first_comment+0x3bd>
cmp    %rcx,%r13
jbe    13f1 <mysql_query_digest_and_first_comment+0x2a1>
cmp    $0x5c,%bpl
jne    13d8 <mysql_query_digest_and_first_comment+0x288>
movzbl (%rbx),%edx
cmp    $0x5c,%dl
je     13e2 <mysql_query_digest_and_first_comment+0x292>
cmp    %sil,%dl
je     13e2 <mysql_query_digest_and_first_comment+0x292>
cmp    %sil,%bpl
jne    13f1 <mysql_query_digest_and_first_comment+0x2a1>
cmp    %sil,(%rbx)
jne    13f1 <mysql_query_digest_and_first_comment+0x2a1>
add    $0x1,%rbx
mov    $0x3,%r12b
mov    $0x58,%bpl
jmp    11c9 <mysql_query_digest_and_first_comment+0x79>
mov    $0x3,%r12b
cmp    %sil,(%rbx)
jne    1424 <mysql_query_digest_and_first_comment+0x2d4>
cmp    %sil,0x1(%rbx)
je     1424 <mysql_query_digest_and_first_comment+0x2d4>
add    $0x1,%rbx
mov    (%rsp),%rdx
movb   $0x3f,(%rdx)
xor    %r12d,%r12d
mov    %rcx,%r13
jmp    11c9 <mysql_query_digest_and_first_comment+0x79>
mov    $0x2,%r12b
nopl   0x0(%rax,%rax,1)
mov    %r13,(%rsp)
mov    %esi,%r14d
movsbl (%rbx),%edi
call   1050 <is_space_char@plt>
mov    $0x20,%cl
test   %rax,%rax
jne    11b0 <mysql_query_digest_and_first_comment+0x60>
movzbl (%rbx),%ecx
jmp    11b0 <mysql_query_digest_and_first_comment+0x60>
mov    %esi,%r14d
movsbl %bpl,%r12d
mov    %r12d,%edi
call   1040 <is_token_char@plt>
test   %rax,%rax
je     1488 <mysql_query_digest_and_first_comment+0x338>
movsbl (%rbx),%edi
call   1070 <is_digit_char@plt>
test   %rax,%rax
je     1488 <mysql_query_digest_and_first_comment+0x338>
lea    0x1(%r15),%eax
mov    $0x4,%r12b
cmp    0x20(%rsp),%eax
je     14bc <mysql_query_digest_and_first_comment+0x36c>
jmp    14c8 <mysql_query_digest_and_first_comment+0x378>
lea    0x1(%rax),%r13
movb   $0x3f,(%rax)
add    $0x1,%r15d
mov    $0x4,%r12b
mov    %r15d,%eax
jmp    11c9 <mysql_query_digest_and_first_comment+0x79>
cmpb   $0x0,0x10(%rsp)
je     14d1 <mysql_query_digest_and_first_comment+0x381>
mov    %r12d,%edi
call   1050 <is_space_char@plt>
test   %rax,%rax
je     14c5 <mysql_query_digest_and_first_comment+0x375>
movsbl (%rbx),%edi
call   1050 <is_space_char@plt>
test   %rax,%rax
je     14c5 <mysql_query_digest_and_first_comment+0x375>
movb   $0x20,0x0(%r13)
add    $0x1,%rbx
add    $0x1,%r15d
mov    $0x20,%bpl
xor    %r12d,%r12d
mov    %r15d,%eax
mov    %r13,(%rsp)
jmp    14f8 <mysql_query_digest_and_first_comment+0x3a8>
xor    %r12d,%r12d
mov    %r13,(%rsp)
jmp    1427 <mysql_query_digest_and_first_comment+0x2d7>
movsbl (%rbx),%edi
call   1050 <is_space_char@plt>
test   %rax,%rax
je     1500 <mysql_query_digest_and_first_comment+0x3b0>
add    $0x1,%rbx
add    $0x1,%r15d
xor    %r12d,%r12d
mov    %r15d,%eax
mov    %r13,(%rsp)
movl   $0x0,0x10(%rsp)
mov    %r14d,%esi
jmp    11c9 <mysql_query_digest_and_first_comment+0x79>
mov    $0x1,%al
mov    %eax,0x10(%rsp)
jmp    148f <mysql_query_digest_and_first_comment+0x33f>
mov    %rax,%r13
jmp    1529 <mysql_query_digest_and_first_comment+0x3d9>
movb   $0x3f,(%rdx)
mov    %rcx,%r13
mov    0x30(%rsp),%rax
cmp    %rax,%r13
jbe    1529 <mysql_query_digest_and_first_comment+0x3d9>
cmpb   $0x20,-0x1(%r13)
jne    1529 <mysql_query_digest_and_first_comment+0x3d9>
movb   $0x0,-0x1(%r13)
movb   $0x0,0x0(%r13)
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movsbl (%rbx),%edi
call   1040 <is_token_char@plt>
test   %rax,%rax
je     1513 <mysql_query_digest_and_first_comment+0x3c3>
mov    (%rbx),%al
mov    (%rsp),%r13
mov    %al,0x1(%r13)
add    $0x2,%r13
jmp    1513 <mysql_query_digest_and_first_comment+0x3c3>

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

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