#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ gui_color_attr_get_flag(char const);
int /*<<< orphan*/ isdigit(char const);
int gui_color_code_size(const char *string) {
  const char *ptr_string;
  if (!string)
    return 0;
  ptr_string = string;
  switch (ptr_string[0]) {
  case '\x19':
    ptr_string++;
    switch (ptr_string[0]) {
    case 'F':
      ptr_string++;
      if (ptr_string[0] == '@') {
        ptr_string++;
        while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
          ptr_string++;
        }
        if (ptr_string[0] && ptr_string[1] && ptr_string[2] && ptr_string[3] &&
            ptr_string[4]) {
          ptr_string += 5;
        }
      } else {
        while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
          ptr_string++;
        }
        if (ptr_string[0] && ptr_string[1])
          ptr_string += 2;
      }
      break;
    case 'B':
      ptr_string++;
      if (ptr_string[0] == '@') {
        ptr_string++;
        if (ptr_string[0] && ptr_string[1] && ptr_string[2] && ptr_string[3] &&
            ptr_string[4]) {
          ptr_string += 5;
        }
      } else {
        if (ptr_string[0] && ptr_string[1])
          ptr_string += 2;
      }
      break;
    case '*':
      ptr_string++;
      if (ptr_string[0] == '@') {
        ptr_string++;
        while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
          ptr_string++;
        }
        if (ptr_string[0] && ptr_string[1] && ptr_string[2] && ptr_string[3] &&
            ptr_string[4]) {
          ptr_string += 5;
        }
      } else {
        while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
          ptr_string++;
        }
        if (ptr_string[0] && ptr_string[1])
          ptr_string += 2;
      }
      if ((ptr_string[0] == ',') || (ptr_string[0] == '~')) {
        if (ptr_string[1] == '@') {
          ptr_string += 2;
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          ptr_string++;
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
      }
      break;
    case '@':
      ptr_string++;
      if ((isdigit(ptr_string[0])) && (isdigit(ptr_string[1])) &&
          (isdigit(ptr_string[2])) && (isdigit(ptr_string[3])) &&
          (isdigit(ptr_string[4]))) {
        ptr_string += 5;
      }
      break;
    case 'E':
      ptr_string++;
      break;
    case 'b':
      ptr_string++;
      switch (ptr_string[0]) {
      case 'F':
      case 'B':
      case 'D':
      case '_':
      case '-':
      case '#':
      case 'i':
      case 'l':
        ptr_string++;
        break;
      }
      break;
    case '\x1C':
      ptr_string++;
      break;
    default:
      if (isdigit(ptr_string[0]) && isdigit(ptr_string[1]))
        ptr_string += 2;
      break;
    }
    return ptr_string - string;
    break;
  case '\x1A':
  case '\x1B':
    ptr_string++;
    if (ptr_string[0])
      ptr_string++;
    return ptr_string - string;
    break;
  case '\x1C':
    ptr_string++;
    return ptr_string - string;
    break;
  }
  return 0;
}


x86 assembly (clang, -O0):
<gui_color_code_size>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1143 <gui_color_code_size+0x23>
movl   $0x0,-0x4(%rbp)
jmp    1788 <gui_color_code_size+0x668>
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
sub    $0x19,%eax
je     1188 <gui_color_code_size+0x68>
jmp    1163 <gui_color_code_size+0x43>
mov    -0x1c(%rbp),%eax
add    $0xffffffe6,%eax
sub    $0x2,%eax
jb     172a <gui_color_code_size+0x60a>
jmp    1177 <gui_color_code_size+0x57>
mov    -0x1c(%rbp),%eax
sub    $0x1c,%eax
je     1762 <gui_color_code_size+0x642>
jmp    1781 <gui_color_code_size+0x661>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x20(%rbp)
sub    $0x1c,%eax
je     16ca <gui_color_code_size+0x5aa>
jmp    11ac <gui_color_code_size+0x8c>
mov    -0x20(%rbp),%eax
sub    $0x2a,%eax
je     13eb <gui_color_code_size+0x2cb>
jmp    11bd <gui_color_code_size+0x9d>
mov    -0x20(%rbp),%eax
sub    $0x40,%eax
je     15e5 <gui_color_code_size+0x4c5>
jmp    11ce <gui_color_code_size+0xae>
mov    -0x20(%rbp),%eax
sub    $0x42,%eax
je     1327 <gui_color_code_size+0x207>
jmp    11df <gui_color_code_size+0xbf>
mov    -0x20(%rbp),%eax
sub    $0x45,%eax
je     166f <gui_color_code_size+0x54f>
jmp    11f0 <gui_color_code_size+0xd0>
mov    -0x20(%rbp),%eax
sub    $0x46,%eax
je     1212 <gui_color_code_size+0xf2>
jmp    1201 <gui_color_code_size+0xe1>
mov    -0x20(%rbp),%eax
sub    $0x62,%eax
je     1680 <gui_color_code_size+0x560>
jmp    16db <gui_color_code_size+0x5bb>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
jne    12c5 <gui_color_code_size+0x1a5>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1040 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1260 <gui_color_code_size+0x140>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    123a <gui_color_code_size+0x11a>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     12c0 <gui_color_code_size+0x1a0>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     12c0 <gui_color_code_size+0x1a0>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     12c0 <gui_color_code_size+0x1a0>
mov    -0x18(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     12c0 <gui_color_code_size+0x1a0>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     12c0 <gui_color_code_size+0x1a0>
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x18(%rbp)
jmp    1322 <gui_color_code_size+0x202>
jmp    12ca <gui_color_code_size+0x1aa>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1040 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    12f0 <gui_color_code_size+0x1d0>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    12ca <gui_color_code_size+0x1aa>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     131d <gui_color_code_size+0x1fd>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     131d <gui_color_code_size+0x1fd>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    1322 <gui_color_code_size+0x202>
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
jne    13b4 <gui_color_code_size+0x294>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13af <gui_color_code_size+0x28f>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     13af <gui_color_code_size+0x28f>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     13af <gui_color_code_size+0x28f>
mov    -0x18(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     13af <gui_color_code_size+0x28f>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     13af <gui_color_code_size+0x28f>
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x18(%rbp)
jmp    13e6 <gui_color_code_size+0x2c6>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13e1 <gui_color_code_size+0x2c1>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     13e1 <gui_color_code_size+0x2c1>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    13e6 <gui_color_code_size+0x2c6>
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
jne    149e <gui_color_code_size+0x37e>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1040 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1439 <gui_color_code_size+0x319>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1413 <gui_color_code_size+0x2f3>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1499 <gui_color_code_size+0x379>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1499 <gui_color_code_size+0x379>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1499 <gui_color_code_size+0x379>
mov    -0x18(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1499 <gui_color_code_size+0x379>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1499 <gui_color_code_size+0x379>
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x18(%rbp)
jmp    14fb <gui_color_code_size+0x3db>
jmp    14a3 <gui_color_code_size+0x383>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1040 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    14c9 <gui_color_code_size+0x3a9>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    14a3 <gui_color_code_size+0x383>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     14f6 <gui_color_code_size+0x3d6>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     14f6 <gui_color_code_size+0x3d6>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    14fb <gui_color_code_size+0x3db>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
je     151b <gui_color_code_size+0x3fb>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
jne    15e0 <gui_color_code_size+0x4c0>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x40,%eax
jne    159d <gui_color_code_size+0x47d>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1598 <gui_color_code_size+0x478>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1598 <gui_color_code_size+0x478>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1598 <gui_color_code_size+0x478>
mov    -0x18(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1598 <gui_color_code_size+0x478>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1598 <gui_color_code_size+0x478>
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x18(%rbp)
jmp    15db <gui_color_code_size+0x4bb>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     15d6 <gui_color_code_size+0x4b6>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     15d6 <gui_color_code_size+0x4b6>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    15db <gui_color_code_size+0x4bb>
jmp    15e0 <gui_color_code_size+0x4c0>
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     166a <gui_color_code_size+0x54a>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     166a <gui_color_code_size+0x54a>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     166a <gui_color_code_size+0x54a>
mov    -0x18(%rbp),%rax
movsbl 0x3(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     166a <gui_color_code_size+0x54a>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     166a <gui_color_code_size+0x54a>
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x18(%rbp)
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
add    $0xffffffdd,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0x49,%eax
ja     16c5 <gui_color_code_size+0x5a5>
mov    -0x28(%rbp),%rax
lea    0x950(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1712 <gui_color_code_size+0x5f2>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1712 <gui_color_code_size+0x5f2>
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    1717 <gui_color_code_size+0x5f7>
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1788 <gui_color_code_size+0x668>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     174f <gui_color_code_size+0x62f>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1788 <gui_color_code_size+0x668>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1788 <gui_color_code_size+0x668>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gui_color_code_size>:
push   %r15
push   %r14
push   %rbx
xor    %r15d,%r15d
test   %rdi,%rdi
je     11f0 <gui_color_code_size+0xd0>
mov    %rdi,%r14
movsbl (%rdi),%eax
lea    -0x1a(%rax),%ecx
cmp    $0x2,%ecx
jb     11d4 <gui_color_code_size+0xb4>
cmp    $0x1c,%eax
je     11ea <gui_color_code_size+0xca>
cmp    $0x19,%eax
jne    11f0 <gui_color_code_size+0xd0>
movsbl 0x1(%r14),%edi
lea    -0x2a(%rdi),%eax
cmp    $0x38,%eax
ja     11f9 <gui_color_code_size+0xd9>
lea    0xe93(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    0x2(%r14),%al
cmp    $0x40,%al
jne    1361 <gui_color_code_size+0x241>
lea    0x6(%r14),%rbx
cs nopw 0x0(%rax,%rax,1)
movsbl -0x3(%rbx),%edi
call   1040 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     1190 <gui_color_code_size+0x70>
lea    -0x4(%rbx),%r15
mov    -0x4(%rbx),%al
test   %al,%al
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,-0x3(%rbx)
je     13e8 <gui_color_code_size+0x2c8>
cmpb   $0x0,-0x2(%rbx)
je     13e5 <gui_color_code_size+0x2c5>
mov    $0x5,%eax
cmpb   $0x0,-0x1(%rbx)
jne    13d9 <gui_color_code_size+0x2b9>
jmp    13e5 <gui_color_code_size+0x2c5>
lea    0x1(%r14),%r15
cmpb   $0x0,0x1(%r14)
lea    0x2(%r14),%eax
cmovne %eax,%r15d
sub    %r14d,%r15d
jmp    11f0 <gui_color_code_size+0xd0>
mov    $0x1,%r15d
mov    %r15d,%eax
pop    %rbx
pop    %r14
pop    %r15
ret
cmp    $0x1c,%edi
jne    1204 <gui_color_code_size+0xe4>
lea    0x2(%r14),%r15
jmp    11e5 <gui_color_code_size+0xc5>
lea    0x1(%r14),%r15
call   1030 <isdigit@plt>
test   %eax,%eax
je     11e5 <gui_color_code_size+0xc5>
movsbl 0x2(%r14),%edi
call   1030 <isdigit@plt>
lea    0x3(%r14),%rcx
test   %eax,%eax
cmovne %rcx,%r15
jmp    11e5 <gui_color_code_size+0xc5>
lea    0x2(%r14),%r15
movsbl 0x2(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     11e5 <gui_color_code_size+0xc5>
movsbl 0x3(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     11e5 <gui_color_code_size+0xc5>
movsbl 0x4(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     11e5 <gui_color_code_size+0xc5>
movsbl 0x5(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     11e5 <gui_color_code_size+0xc5>
movsbl 0x6(%r14),%edi
call   1030 <isdigit@plt>
lea    0x7(%r14),%rcx
jmp    121f <gui_color_code_size+0xff>
lea    0x2(%r14),%r15
mov    0x2(%r14),%al
test   %al,%al
je     11e5 <gui_color_code_size+0xc5>
cmp    $0x40,%al
jne    13b4 <gui_color_code_size+0x294>
lea    0x3(%r14),%r15
cmpb   $0x0,0x3(%r14)
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x4(%r14)
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x5(%r14)
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x6(%r14)
je     11e5 <gui_color_code_size+0xc5>
lea    0x8(%r14),%rax
cmpb   $0x0,0x7(%r14)
cmovne %rax,%r15
jmp    11e5 <gui_color_code_size+0xc5>
mov    0x2(%r14),%al
cmp    $0x40,%al
jne    1387 <gui_color_code_size+0x267>
lea    0x2(%r14),%r15
nopl   (%rax)
movsbl 0x1(%r15),%edi
add    $0x1,%r15
call   1040 <gui_color_attr_get_flag@plt>
test   %eax,%eax
jg     12e0 <gui_color_code_size+0x1c0>
cmpb   $0x0,(%r15)
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x1(%r15)
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x2(%r15)
je     11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x3(%r15)
je     11e5 <gui_color_code_size+0xc5>
xor    %eax,%eax
cmpb   $0x0,0x4(%r15)
setne  %al
lea    (%rax,%rax,4),%rax
add    %rax,%r15
jmp    11e5 <gui_color_code_size+0xc5>
lea    0x2(%r14),%r15
movsbl 0x2(%r14),%eax
add    $0xffffffdd,%eax
cmp    $0x49,%eax
ja     11e5 <gui_color_code_size+0xc5>
lea    0xd95(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x3(%r14),%r15
jmp    11e5 <gui_color_code_size+0xc5>
movsbl %al,%edi
call   1040 <gui_color_attr_get_flag@plt>
lea    0x3(%r14),%rbx
test   %eax,%eax
jle    13c6 <gui_color_code_size+0x2a6>
movsbl (%rbx),%edi
call   1040 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     1371 <gui_color_code_size+0x251>
lea    -0x1(%rbx),%r15
jmp    13ca <gui_color_code_size+0x2aa>
movsbl %al,%edi
call   1040 <gui_color_attr_get_flag@plt>
lea    0x3(%r14),%rbx
test   %eax,%eax
jle    143f <gui_color_code_size+0x31f>
movsbl (%rbx),%edi
call   1040 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     139b <gui_color_code_size+0x27b>
lea    -0x1(%rbx),%r15
jmp    1443 <gui_color_code_size+0x323>
lea    0x4(%r14),%rax
cmpb   $0x0,0x3(%r14)
cmovne %rax,%r15
jmp    11e5 <gui_color_code_size+0xc5>
lea    0x2(%r14),%r15
mov    $0x2,%eax
cmpb   $0x0,(%r15)
je     11e5 <gui_color_code_size+0xc5>
xor    %ecx,%ecx
cmpb   $0x0,(%rbx)
cmovne %rax,%rcx
add    %rcx,%r15
mov    (%r15),%al
cmp    $0x7e,%al
je     13f4 <gui_color_code_size+0x2d4>
cmp    $0x2c,%al
jne    11e5 <gui_color_code_size+0xc5>
lea    0x1(%r15),%rax
mov    0x1(%r15),%cl
test   %cl,%cl
je     1437 <gui_color_code_size+0x317>
cmp    $0x40,%cl
jne    145e <gui_color_code_size+0x33e>
lea    0x2(%r15),%rax
cmpb   $0x0,0x2(%r15)
je     1437 <gui_color_code_size+0x317>
cmpb   $0x0,0x3(%r15)
je     1437 <gui_color_code_size+0x317>
cmpb   $0x0,0x4(%r15)
je     1437 <gui_color_code_size+0x317>
cmpb   $0x0,0x5(%r15)
je     1437 <gui_color_code_size+0x317>
cmpb   $0x0,0x6(%r15)
lea    0x7(%r15),%r15
cmove  %rax,%r15
jmp    11e5 <gui_color_code_size+0xc5>
mov    %rax,%r15
jmp    11e5 <gui_color_code_size+0xc5>
lea    0x2(%r14),%r15
cmpb   $0x0,(%r15)
je     11e5 <gui_color_code_size+0xc5>
xor    %eax,%eax
cmpb   $0x0,(%rbx)
setne  %al
lea    (%r15,%rax,2),%r15
jmp    11e5 <gui_color_code_size+0xc5>
cmpb   $0x0,0x2(%r15)
lea    0x3(%r15),%r15
cmove  %rax,%r15
jmp    11e5 <gui_color_code_size+0xc5>

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

LLVM IR (-O2):
define i32 @gui_color_code_size(i8* %0) {
%2 = icmp eq i8* %0, null
br i1 %2, label %245, label %3
3: ; preds = %1
%4 = load i8, i8* %0
%5 = sext i8 %4 to i32
switch i32 %5, label %244 [
i32 25, label %6
i32 26, label %234
i32 27, label %234
i32 28, label %245
]
6: ; preds = %3
%7 = getelementptr inbounds i8, i8* %0, i64 1
%8 = load i8, i8* %7
%9 = sext i8 %8 to i32
switch i32 %9, label %218 [
i32 70, label %10
i32 66, label %62
i32 42, label %93
i32 64, label %181
i32 69, label %208
i32 98, label %210
i32 28, label %216
]
10: ; preds = %6
%11 = getelementptr inbounds i8, i8* %0, i64 2
%12 = load i8, i8* %11
%13 = icmp eq i8 %12, 64
br i1 %13, label %18, label %14
14: ; preds = %10
%15 = tail call i32 @gui_color_attr_get_flag(i8 signext %12)
%16 = icmp sgt i32 %15, 0
%17 = getelementptr inbounds i8, i8* %0, i64 3
br i1 %16, label %46, label %52
18: ; preds = %10
%19 = getelementptr inbounds i8, i8* %0, i64 3
br label %20
20: ; preds = %20, %18
%21 = phi i8* [ %19, %18 ], [ %25, %20 ]
%22 = load i8, i8* %21
%23 = tail call i32 @gui_color_attr_get_flag(i8 signext %22)
%24 = icmp sgt i32 %23, 0
%25 = getelementptr inbounds i8, i8* %21, i64 1
br i1 %24, label %20, label %26
26: ; preds = %20
%27 = load i8, i8* %21
%28 = icmp eq i8 %27, 0
br i1 %28, label %228, label %29
29: ; preds = %26
%30 = load i8, i8* %25
%31 = icmp eq i8 %30, 0
br i1 %31, label %228, label %32
32: ; preds = %29
%33 = getelementptr inbounds i8, i8* %21, i64 2
%34 = load i8, i8* %33
%35 = icmp eq i8 %34, 0
br i1 %35, label %228, label %36
36: ; preds = %32
%37 = getelementptr inbounds i8, i8* %21, i64 3
%38 = load i8, i8* %37
%39 = icmp eq i8 %38, 0
br i1 %39, label %228, label %40
40: ; preds = %36
%41 = getelementptr inbounds i8, i8* %21, i64 4
%42 = load i8, i8* %41
%43 = icmp eq i8 %42, 0
%44 = select i1 %43, i64 0, i64 5
%45 = getelementptr i8, i8* %21, i64 %44
br label %228
46: ; preds = %14, %46
%47 = phi i8* [ %51, %46 ], [ %17, %14 ]
%48 = load i8, i8* %47
%49 = tail call i32 @gui_color_attr_get_flag(i8 signext %48)
%50 = icmp sgt i32 %49, 0
%51 = getelementptr inbounds i8, i8* %47, i64 1
br i1 %50, label %46, label %52
52: ; preds = %46, %14
%53 = phi i8* [ %11, %14 ], [ %47, %46 ]
%54 = phi i8* [ %17, %14 ], [ %51, %46 ]
%55 = load i8, i8* %53
%56 = icmp eq i8 %55, 0
br i1 %56, label %228, label %57
57: ; preds = %52
%58 = load i8, i8* %54
%59 = icmp eq i8 %58, 0
%60 = select i1 %59, i64 0, i64 2
%61 = getelementptr i8, i8* %53, i64 %60
br label %228
62: ; preds = %6
%63 = getelementptr inbounds i8, i8* %0, i64 2
%64 = load i8, i8* %63
switch i8 %64, label %87 [
i8 64, label %65
i8 0, label %228
]
65: ; preds = %62
%66 = getelementptr inbounds i8, i8* %0, i64 3
%67 = load i8, i8* %66
%68 = icmp eq i8 %67, 0
br i1 %68, label %228, label %69
69: ; preds = %65
%70 = getelementptr inbounds i8, i8* %0, i64 4
%71 = load i8, i8* %70
%72 = icmp eq i8 %71, 0
br i1 %72, label %228, label %73
73: ; preds = %69
%74 = getelementptr inbounds i8, i8* %0, i64 5
%75 = load i8, i8* %74
%76 = icmp eq i8 %75, 0
br i1 %76, label %228, label %77
77: ; preds = %73
%78 = getelementptr inbounds i8, i8* %0, i64 6
%79 = load i8, i8* %78
%80 = icmp eq i8 %79, 0
br i1 %80, label %228, label %81
81: ; preds = %77
%82 = getelementptr inbounds i8, i8* %0, i64 7
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 0
%85 = getelementptr inbounds i8, i8* %0, i64 8
%86 = select i1 %84, i8* %66, i8* %85
br label %228
87: ; preds = %62
%88 = getelementptr inbounds i8, i8* %0, i64 3
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 0
%91 = getelementptr inbounds i8, i8* %0, i64 4
%92 = select i1 %90, i8* %63, i8* %91
br label %228
93: ; preds = %6
%94 = getelementptr inbounds i8, i8* %0, i64 2
%95 = load i8, i8* %94
%96 = icmp eq i8 %95, 64
br i1 %96, label %101, label %97
97: ; preds = %93
%98 = tail call i32 @gui_color_attr_get_flag(i8 signext %95)
%99 = icmp sgt i32 %98, 0
%100 = getelementptr inbounds i8, i8* %0, i64 3
br i1 %99, label %125, label %131
101: ; preds = %93
%102 = getelementptr inbounds i8, i8* %0, i64 3
br label %103
103: ; preds = %103, %101
%104 = phi i8* [ %102, %101 ], [ %108, %103 ]
%105 = load i8, i8* %104
%106 = tail call i32 @gui_color_attr_get_flag(i8 signext %105)
%107 = icmp sgt i32 %106, 0
%108 = getelementptr inbounds i8, i8* %104, i64 1
br i1 %107, label %103, label %109
109: ; preds = %103
%110 = load i8, i8* %104
%111 = icmp eq i8 %110, 0
br i1 %111, label %228, label %112
112: ; preds = %109
%113 = load i8, i8* %108
%114 = icmp eq i8 %113, 0
br i1 %114, label %147, label %115
115: ; preds = %112
%116 = getelementptr inbounds i8, i8* %104, i64 2
%117 = load i8, i8* %116
%118 = icmp eq i8 %117, 0
br i1 %118, label %144, label %119
119: ; preds = %115
%120 = getelementptr inbounds i8, i8* %104, i64 3
%121 = load i8, i8* %120
%122 = icmp eq i8 %121, 0
br i1 %122, label %144, label %123
123: ; preds = %119
%124 = getelementptr inbounds i8, i8* %104, i64 4
br label %136
125: ; preds = %97, %125
%126 = phi i8* [ %130, %125 ], [ %100, %97 ]
%127 = load i8, i8* %126
%128 = tail call i32 @gui_color_attr_get_flag(i8 signext %127)
%129 = icmp sgt i32 %128, 0
%130 = getelementptr inbounds i8, i8* %126, i64 1
br i1 %129, label %125, label %131
131: ; preds = %125, %97
%132 = phi i8* [ %94, %97 ], [ %126, %125 ]
%133 = phi i8* [ %100, %97 ], [ %130, %125 ]
%134 = load i8, i8* %132
%135 = icmp eq i8 %134, 0
br i1 %135, label %228, label %136
136: ; preds = %131, %123
%137 = phi i8* [ %124, %123 ], [ %133, %131 ]
%138 = phi i64 [ 5, %123 ], [ 2, %131 ]
%139 = phi i8* [ %104, %123 ], [ %132, %131 ]
%140 = load i8, i8* %137
%141 = icmp eq i8 %140, 0
%142 = select i1 %141, i64 0, i64 %138
%143 = getelementptr i8, i8* %139, i64 %142
br label %144
144: ; preds = %136, %119, %115
%145 = phi i8* [ %104, %119 ], [ %104, %115 ], [ %143, %136 ]
%146 = load i8, i8* %145
br label %147
147: ; preds = %144, %112
%148 = phi i8 [ %146, %144 ], [ %110, %112 ]
%149 = phi i8* [ %145, %144 ], [ %104, %112 ]
switch i8 %148, label %228 [
i8 44, label %150
i8 126, label %150
]
150: ; preds = %147, %147
%151 = getelementptr inbounds i8, i8* %149, i64 1
%152 = load i8, i8* %151
switch i8 %152, label %175 [
i8 64, label %153
i8 0, label %228
]
153: ; preds = %150
%154 = getelementptr inbounds i8, i8* %149, i64 2
%155 = load i8, i8* %154
%156 = icmp eq i8 %155, 0
br i1 %156, label %228, label %157
157: ; preds = %153
%158 = getelementptr inbounds i8, i8* %149, i64 3
%159 = load i8, i8* %158
%160 = icmp eq i8 %159, 0
br i1 %160, label %228, label %161
161: ; preds = %157
%162 = getelementptr inbounds i8, i8* %149, i64 4
%163 = load i8, i8* %162
%164 = icmp eq i8 %163, 0
br i1 %164, label %228, label %165
165: ; preds = %161
%166 = getelementptr inbounds i8, i8* %149, i64 5
%167 = load i8, i8* %166
%168 = icmp eq i8 %167, 0
br i1 %168, label %228, label %169
169: ; preds = %165
%170 = getelementptr inbounds i8, i8* %149, i64 6
%171 = load i8, i8* %170
%172 = icmp eq i8 %171, 0
%173 = getelementptr inbounds i8, i8* %149, i64 7
%174 = select i1 %172, i8* %154, i8* %173
br label %228
175: ; preds = %150
%176 = getelementptr inbounds i8, i8* %149, i64 2
%177 = load i8, i8* %176
%178 = icmp eq i8 %177, 0
%179 = getelementptr inbounds i8, i8* %149, i64 3
%180 = select i1 %178, i8* %151, i8* %179
br label %228
181: ; preds = %6
%182 = getelementptr inbounds i8, i8* %0, i64 2
%183 = load i8, i8* %182
%184 = tail call i32 @isdigit(i8 signext %183)
%185 = icmp eq i32 %184, 0
br i1 %185, label %228, label %186
186: ; preds = %181
%187 = getelementptr inbounds i8, i8* %0, i64 3
%188 = load i8, i8* %187
%189 = tail call i32 @isdigit(i8 signext %188)
%190 = icmp eq i32 %189, 0
br i1 %190, label %228, label %191
191: ; preds = %186
%192 = getelementptr inbounds i8, i8* %0, i64 4
%193 = load i8, i8* %192
%194 = tail call i32 @isdigit(i8 signext %193)
%195 = icmp eq i32 %194, 0
br i1 %195, label %228, label %196
196: ; preds = %191
%197 = getelementptr inbounds i8, i8* %0, i64 5
%198 = load i8, i8* %197
%199 = tail call i32 @isdigit(i8 signext %198)
%200 = icmp eq i32 %199, 0
br i1 %200, label %228, label %201
201: ; preds = %196
%202 = getelementptr inbounds i8, i8* %0, i64 6
%203 = load i8, i8* %202
%204 = tail call i32 @isdigit(i8 signext %203)
%205 = icmp eq i32 %204, 0
%206 = getelementptr inbounds i8, i8* %0, i64 7
%207 = select i1 %205, i8* %182, i8* %206
br label %228
208: ; preds = %6
%209 = getelementptr inbounds i8, i8* %0, i64 2
br label %228
210: ; preds = %6
%211 = getelementptr inbounds i8, i8* %0, i64 2
%212 = load i8, i8* %211
%213 = sext i8 %212 to i32
switch i32 %213, label %228 [
i32 70, label %214
i32 66, label %214
i32 68, label %214
i32 95, label %214
i32 45, label %214
i32 35, label %214
i32 105, label %214
i32 108, label %214
]
214: ; preds = %210, %210, %210, %210, %210, %210, %210, %210
%215 = getelementptr inbounds i8, i8* %0, i64 3
br label %228
216: ; preds = %6
%217 = getelementptr inbounds i8, i8* %0, i64 2
br label %228
218: ; preds = %6
%219 = tail call i32 @isdigit(i8 signext %8)
%220 = icmp eq i32 %219, 0
br i1 %220, label %228, label %221
221: ; preds = %218
%222 = getelementptr inbounds i8, i8* %0, i64 2
%223 = load i8, i8* %222
%224 = tail call i32 @isdigit(i8 signext %223)
%225 = icmp eq i32 %224, 0
%226 = getelementptr inbounds i8, i8* %0, i64 3
%227 = select i1 %225, i8* %7, i8* %226
br label %228
228: ; preds = %150, %109, %131, %221, %201, %175, %169, %87, %81, %57, %40, %147, %62, %218, %214, %210, %181, %186, %191, %196, %153, %157, %161, %165, %77, %73, %69, %65, %36, %32, %29, %26, %52, %216, %208
%229 = phi i8* [ %7, %218 ], [ %217, %216 ], [ %211, %210 ], [ %215, %214 ], [ %209, %208 ], [ %182, %196 ], [ %182, %191 ], [ %182, %186 ], [ %182, %181 ], [ %154, %165 ], [ %154, %161 ], [ %154, %157 ], [ %154, %153 ], [ %66, %77 ], [ %66, %73 ], [ %66, %69 ], [ %66, %65 ], [ %21, %36 ], [ %21, %32 ], [ %21, %29 ], [ %21, %26 ], [ %53, %52 ], [ %45, %40 ], [ %61, %57 ], [ %86, %81 ], [ %63, %62 ], [ %92, %87 ], [ %149, %147 ], [ %174, %169 ], [ %180, %175 ], [ %207, %201 ], [ %227, %221 ], [ %132, %131 ], [ %104, %109 ], [ %151, %150 ]
%230 = ptrtoint i8* %229 to i64
%231 = ptrtoint i8* %0 to i64
%232 = sub i64 %230, %231
%233 = trunc i64 %232 to i32
br label %245
234: ; preds = %3, %3
%235 = getelementptr inbounds i8, i8* %0, i64 1
%236 = load i8, i8* %235
%237 = icmp eq i8 %236, 0
%238 = getelementptr inbounds i8, i8* %0, i64 2
%239 = select i1 %237, i8* %235, i8* %238
%240 = ptrtoint i8* %239 to i64
%241 = ptrtoint i8* %0 to i64
%242 = sub i64 %240, %241
%243 = trunc i64 %242 to i32
br label %245
244: ; preds = %3
br label %245
245: ; preds = %3, %1, %244, %234, %228
%246 = phi i32 [ 0, %244 ], [ %243, %234 ], [ %233, %228 ], [ 0, %1 ], [ 1, %3 ]
ret i32 %246
}