#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 split(char *string, char *fields[], int nfields, const char *sep) {
  char *p = string;
  char c;
  char sepc = *sep;
  char sepc2;
  int fn;
  char **fp = fields;
  const char *sepp;
  int trimtrail;
  if (sepc == '\0') {
    while ((c = *p++) == ' ' || c == '\t')
      continue;
    p--;
    trimtrail = 1;
    sep = " \t";
    sepc = ' ';
  } else
    trimtrail = 0;
  sepc2 = sep[1];
  if (*p == '\0')
    return (0);
  if (sepc2 == '\0') {
    fn = nfields;
    for (;;) {
      *fp++ = p;
      fn--;
      if (fn == 0)
        break;
      while ((c = *p++) != sepc)
        if (c == '\0')
          return (nfields - fn);
      *(p - 1) = '\0';
    }
    fn = nfields;
    for (;;) {
      while ((c = *p++) != sepc)
        if (c == '\0')
          return (fn);
      fn++;
    }
  }
  if (sep[2] == '\0') {
    fn = nfields;
    for (;;) {
      *fp++ = p;
      fn--;
      while ((c = *p++) != sepc && c != sepc2)
        if (c == '\0') {
          if (trimtrail && **(fp - 1) == '\0')
            fn++;
          return (nfields - fn);
        }
      if (fn == 0)
        break;
      *(p - 1) = '\0';
      while ((c = *p++) == sepc || c == sepc2)
        continue;
      p--;
    }
    fn = nfields;
    while (c != '\0') {
      while ((c = *p++) == sepc || c == sepc2)
        continue;
      p--;
      fn++;
      while ((c = *p++) != '\0' && c != sepc && c != sepc2)
        continue;
    }
    if (trimtrail) {
      p--;
      while ((c = *--p) == sepc || c == sepc2)
        continue;
      p++;
      if (*p != '\0') {
        if (fn == nfields + 1)
          *p = '\0';
        fn--;
      }
    }
    return (fn);
  }
  fn = 0;
  for (;;) {
    if (fn < nfields)
      *fp++ = p;
    fn++;
    for (;;) {
      c = *p++;
      if (c == '\0')
        return (fn);
      sepp = sep;
      while ((sepc = *sepp++) != '\0' && sepc != c)
        continue;
      if (sepc != '\0')
        break;
    }
    if (fn < nfields)
      *(p - 1) = '\0';
    for (;;) {
      c = *p++;
      sepp = sep;
      while ((sepc = *sepp++) != '\0' && sepc != c)
        continue;
      if (sepc == '\0')
        break;
    }
    p--;
  }
}


x86 assembly (clang, -O0):
<split>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x32(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
movsbl -0x32(%rbp),%eax
cmp    $0x0,%eax
jne    11ac <split+0xac>
jmp    113e <split+0x3e>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x4d(%rbp)
je     1170 <split+0x70>
movsbl -0x31(%rbp),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    1180 <split+0x80>
jmp    1185 <split+0x85>
jmp    113e <split+0x3e>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
movl   $0x1,-0x4c(%rbp)
lea    0xe61(%rip),%rax
mov    %rax,-0x28(%rbp)
movb   $0x20,-0x32(%rbp)
jmp    11b3 <split+0xb3>
movl   $0x0,-0x4c(%rbp)
mov    -0x28(%rbp),%rax
mov    0x1(%rax),%al
mov    %al,-0x33(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    11d9 <split+0xd9>
movl   $0x0,-0x4(%rbp)
jmp    16ff <split+0x5ff>
movsbl -0x33(%rbp),%eax
cmp    $0x0,%eax
jne    12c8 <split+0x1c8>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x40(%rbp)
mov    %rcx,(%rax)
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
jne    121a <split+0x11a>
jmp    126f <split+0x16f>
jmp    121f <split+0x11f>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%eax
movsbl -0x32(%rbp),%ecx
cmp    %ecx,%eax
je     1262 <split+0x162>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    125d <split+0x15d>
mov    -0x1c(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16ff <split+0x5ff>
jmp    121f <split+0x11f>
mov    -0x30(%rbp),%rax
movb   $0x0,-0x1(%rax)
jmp    11ec <split+0xec>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    127a <split+0x17a>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%eax
movsbl -0x32(%rbp),%ecx
cmp    %ecx,%eax
je     12ba <split+0x1ba>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    12b5 <split+0x1b5>
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16ff <split+0x5ff>
jmp    127a <split+0x17a>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1275 <split+0x175>
mov    -0x28(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
jne    1591 <split+0x491>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x40(%rbp)
mov    %rcx,(%rax)
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%ecx
movsbl -0x32(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x4e(%rbp)
je     1336 <split+0x236>
movsbl -0x31(%rbp),%eax
movsbl -0x33(%rbp),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x4e(%rbp)
mov    -0x4e(%rbp),%al
test   $0x1,%al
jne    1346 <split+0x246>
jmp    138d <split+0x28d>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1388 <split+0x288>
cmpl   $0x0,-0x4c(%rbp)
je     137a <split+0x27a>
mov    -0x40(%rbp),%rax
mov    -0x8(%rax),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    137a <split+0x27a>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16ff <split+0x5ff>
jmp    12fe <split+0x1fe>
cmpl   $0x0,-0x38(%rbp)
jne    139c <split+0x29c>
jmp    1402 <split+0x302>
mov    -0x30(%rbp),%rax
movb   $0x0,-0x1(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%ecx
movsbl -0x32(%rbp),%edx
mov    $0x1,%al
cmp    %edx,%ecx
mov    %al,-0x4f(%rbp)
je     13dc <split+0x2dc>
movsbl -0x31(%rbp),%eax
movsbl -0x33(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x4f(%rbp)
mov    -0x4f(%rbp),%al
test   $0x1,%al
jne    13ec <split+0x2ec>
jmp    13f1 <split+0x2f1>
jmp    13a4 <split+0x2a4>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    12df <split+0x1df>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x38(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
je     14e0 <split+0x3e0>
jmp    141a <split+0x31a>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%ecx
movsbl -0x32(%rbp),%edx
mov    $0x1,%al
cmp    %edx,%ecx
mov    %al,-0x50(%rbp)
je     1452 <split+0x352>
movsbl -0x31(%rbp),%eax
movsbl -0x33(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x50(%rbp)
mov    -0x50(%rbp),%al
test   $0x1,%al
jne    1462 <split+0x362>
jmp    1467 <split+0x367>
jmp    141a <split+0x31a>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x51(%rbp)
je     14c6 <split+0x3c6>
movsbl -0x31(%rbp),%ecx
movsbl -0x32(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x51(%rbp)
je     14c6 <split+0x3c6>
movsbl -0x31(%rbp),%eax
movsbl -0x33(%rbp),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    14d6 <split+0x3d6>
jmp    14db <split+0x3db>
jmp    147c <split+0x37c>
jmp    1408 <split+0x308>
cmpl   $0x0,-0x4c(%rbp)
je     1586 <split+0x486>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x30(%rbp)
mov    -0x1(%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%ecx
movsbl -0x32(%rbp),%edx
mov    $0x1,%al
cmp    %edx,%ecx
mov    %al,-0x52(%rbp)
je     152f <split+0x42f>
movsbl -0x31(%rbp),%eax
movsbl -0x33(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x52(%rbp)
mov    -0x52(%rbp),%al
test   $0x1,%al
jne    153f <split+0x43f>
jmp    1544 <split+0x444>
jmp    14f6 <split+0x3f6>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1581 <split+0x481>
mov    -0x38(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    1578 <split+0x478>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    1586 <split+0x486>
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16ff <split+0x5ff>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    15ba <split+0x4ba>
mov    -0x30(%rbp),%rcx
mov    -0x40(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x40(%rbp)
mov    %rcx,(%rax)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    15ef <split+0x4ef>
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16ff <split+0x5ff>
mov    -0x28(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x48(%rbp)
mov    (%rax),%al
mov    %al,-0x32(%rbp)
movsbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x53(%rbp)
je     162c <split+0x52c>
movsbl -0x32(%rbp),%eax
movsbl -0x31(%rbp),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x53(%rbp)
mov    -0x53(%rbp),%al
test   $0x1,%al
jne    163c <split+0x53c>
jmp    1641 <split+0x541>
jmp    15f7 <split+0x4f7>
movsbl -0x32(%rbp),%eax
cmp    $0x0,%eax
je     1653 <split+0x553>
jmp    1658 <split+0x558>
jmp    15c3 <split+0x4c3>
mov    -0x38(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    166c <split+0x56c>
mov    -0x30(%rbp),%rax
movb   $0x0,-0x1(%rax)
jmp    1671 <split+0x571>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x48(%rbp)
mov    (%rax),%al
mov    %al,-0x32(%rbp)
movsbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x54(%rbp)
je     16c2 <split+0x5c2>
movsbl -0x32(%rbp),%eax
movsbl -0x31(%rbp),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x54(%rbp)
mov    -0x54(%rbp),%al
test   $0x1,%al
jne    16d2 <split+0x5d2>
jmp    16d7 <split+0x5d7>
jmp    168d <split+0x58d>
movsbl -0x32(%rbp),%eax
cmp    $0x0,%eax
jne    16e9 <split+0x5e9>
jmp    16ee <split+0x5ee>
jmp    1671 <split+0x571>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    1598 <split+0x498>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<split>:
push   %rbx
movsbl (%rcx),%r9d
test   %r9d,%r9d
je     11f4 <split+0xf4>
mov    (%rdi),%al
mov    %r9d,%r8d
test   %al,%al
je     1214 <split+0x114>
mov    0x1(%rcx),%r10b
test   %r10b,%r10b
je     1218 <split+0x118>
cmpb   $0x0,0x2(%rcx)
je     1251 <split+0x151>
xor    %eax,%eax
cmp    %edx,%eax
jge    113f <split+0x3f>
mov    %rdi,(%rsi)
add    $0x8,%rsi
add    $0x1,%eax
jmp    1155 <split+0x55>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
test   %r10b,%r10b
jne    1190 <split+0x90>
mov    (%rdi),%r9b
test   %r9b,%r9b
je     1379 <split+0x279>
mov    %rdi,%r8
add    $0x1,%rdi
mov    %rcx,%rbx
nopl   0x0(%rax,%rax,1)
movzbl (%rbx),%r10d
test   %r10b,%r10b
je     1150 <split+0x50>
add    $0x1,%rbx
cmp    %r9b,%r10b
jne    1170 <split+0x70>
jmp    1150 <split+0x50>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    %edx,%eax
jge    11a8 <split+0xa8>
movb   $0x0,(%r8)
jmp    11a8 <split+0xa8>
nopw   0x0(%rax,%rax,1)
lea    0x1(%r8),%rdi
test   %bl,%bl
je     11e0 <split+0xe0>
mov    %rdi,%r8
mov    (%rdi),%r9b
mov    %rcx,%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rdi),%ebx
test   %bl,%bl
je     11a0 <split+0xa0>
add    $0x1,%rdi
cmp    %r9b,%bl
jne    11c0 <split+0xc0>
jmp    11a0 <split+0xa0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r8,%rdi
cmp    %edx,%eax
jl     1138 <split+0x38>
jmp    113f <split+0x3f>
add    $0x1,%rdi
movzbl (%rdi),%eax
cmp    $0x20,%al
je     11f0 <split+0xf0>
cmp    $0x9,%al
je     11f0 <split+0xf0>
mov    $0x20,%r8d
lea    0xdf4(%rip),%rcx
test   %al,%al
jne    111b <split+0x1b>
xor    %eax,%eax
pop    %rbx
ret
mov    %rdi,(%rsi)
mov    %edx,%eax
add    $0xffffffff,%eax
je     12bd <split+0x1bd>
add    $0x8,%rsi
add    $0x1,%rdi
xchg   %ax,%ax
movsbl -0x1(%rdi),%ecx
cmp    %ecx,%r8d
je     1243 <split+0x143>
add    $0x1,%rdi
test   %cl,%cl
jne    1230 <split+0x130>
jmp    12b6 <split+0x1b6>
movb   $0x0,-0x1(%rdi)
mov    %rdi,(%rsi)
add    $0xffffffff,%eax
jne    1226 <split+0x126>
jmp    12bd <split+0x1bd>
mov    %edx,%r11d
mov    %rdi,%rcx
mov    %rdi,(%rsi)
add    $0x8,%rsi
lea    -0x1(%r11),%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl (%rcx),%ebx
cmp    %ebx,%r8d
je     1287 <split+0x187>
cmp    %r10b,%bl
je     1287 <split+0x187>
add    $0x1,%rcx
test   %bl,%bl
jne    1270 <split+0x170>
jmp    12aa <split+0x1aa>
test   %eax,%eax
je     12e5 <split+0x1e5>
movb   $0x0,(%rcx)
xchg   %ax,%ax
movsbl 0x1(%rcx),%edi
add    $0x1,%rcx
cmp    %edi,%r8d
je     1290 <split+0x190>
cmp    %r10b,%dil
je     1290 <split+0x190>
mov    %rcx,%rdi
mov    %eax,%r11d
jmp    1257 <split+0x157>
test   %r9b,%r9b
jne    12b6 <split+0x1b6>
cmpb   $0x0,(%rdi)
cmove  %r11d,%eax
sub    %eax,%edx
jmp    12e1 <split+0x1e1>
add    $0x1,%edx
add    $0x1,%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsbl -0x1(%rdi),%eax
cmp    %eax,%r8d
je     12ba <split+0x1ba>
add    $0x1,%rdi
test   %al,%al
jne    12d0 <split+0x1d0>
mov    %edx,%eax
pop    %rbx
ret
test   %bl,%bl
je     134a <split+0x24a>
add    $0x1,%rcx
mov    %edx,%eax
mov    %rcx,%rsi
jmp    1300 <split+0x200>
lea    -0x1(%rsi),%rcx
add    $0x1,%eax
test   %bl,%bl
jne    134c <split+0x24c>
nop
mov    (%rsi),%bl
add    $0x1,%rsi
movsbl %bl,%edi
cmp    %edi,%r8d
je     1300 <split+0x200>
cmp    %r10b,%bl
je     1300 <split+0x200>
lea    -0x1(%rsi),%rcx
test   %bl,%bl
sete   %bl
je     12f8 <split+0x1f8>
cmp    %edi,%r8d
je     12f8 <split+0x1f8>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsbl (%rsi),%ecx
add    $0x1,%rsi
test   %ecx,%ecx
sete   %bl
je     12f4 <split+0x1f4>
cmp    %ecx,%r8d
je     12f4 <split+0x1f4>
cmp    %r10b,%cl
jne    1330 <split+0x230>
jmp    12f4 <split+0x1f4>
mov    %edx,%eax
test   %r9b,%r9b
jne    1379 <split+0x279>
add    $0x1,%rcx
movsbl -0x2(%rcx),%esi
add    $0xffffffffffffffff,%rcx
cmp    %esi,%r8d
je     1355 <split+0x255>
cmp    %r10b,%sil
je     1355 <split+0x255>
cmpb   $0x0,(%rcx)
je     1379 <split+0x279>
add    $0x1,%edx
cmp    %edx,%eax
jne    1376 <split+0x276>
movb   $0x0,(%rcx)
add    $0xffffffff,%eax
pop    %rbx
ret

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

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