#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 */
char *calloc(int, int);
int strlen(char const *);
char tolower(char const);
int /*<<< orphan*/ toupper(char);
char *metaphone(const char *str) {
  const char *s;
  char c, next, nextnext, temp = '\0';
  char *result = calloc(strlen(str) * 2 + 1, sizeof(char));
  char *r;
  if (!result) {
    return NULL;
  }
  c = tolower(*str);
  if (c) {
    next = tolower(*(str + 1));
    if ((c == 'k' && next == 'n') || (c == 'g' && next == 'n') ||
        (c == 'p' && next == 'n') || (c == 'a' && next == 'c') ||
        (c == 'w' && next == 'r') || (c == 'a' && next == 'e')) {
      str++;
    }
  }
  next = tolower(*str);
  for (s = str, r = result; next; s++) {
    c = next;
    next = tolower(*(s + 1));
    nextnext = tolower(*(s + 2));
    if (c == next && c != 'c') {
      continue;
    }
    switch (c) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
      if (s == str || *(s - 1) == ' ') {
        *r++ = toupper(c);
      }
      break;
    case 'b':
      if (!(s > str && tolower(*(s - 1)) == 'm') || next) {
        *r++ = 'B';
      }
      break;
    case 'c':
      if ((next == 'i' && nextnext == 'a') || next == 'h') {
        *r++ = 'X';
        next = tolower(*(++s + 1));
      } else if (next == 'i' || next == 'e' || next == 'y') {
        *r++ = 'S';
        next = tolower(*(++s + 1));
      } else {
        *r++ = 'K';
      }
      break;
    case 'd':
      if (next == 'g' &&
          (nextnext == 'e' || nextnext == 'y' || nextnext == 'i')) {
        *r++ = 'J';
        s += 2;
        next = tolower(*(s + 1));
      } else {
        *r++ = 'T';
      }
      break;
    case 'f':
      *r++ = 'F';
      break;
    case 'g':
      if (next == 'i' || next == 'e' || next == 'y') {
        *r++ = 'J';
      } else if (next != 'h' && next != 'n') {
        *r++ = 'K';
      } else if (next == 'h' && !(((nextnext) == 'a' || (nextnext) == 'e' ||
                                   (nextnext) == 'i' || (nextnext) == 'o' ||
                                   (nextnext) == 'u'))) {
        s++;
        next = tolower(*(s + 1));
      }
      break;
    case 'h':
      if (s == str ||
          ((next) == 'a' || (next) == 'e' || (next) == 'i' || (next) == 'o' ||
           (next) == 'u') ||
          (temp = tolower(*(s - 1)) &&
                  ((temp) == 'a' || (temp) == 'e' || (temp) == 'i' ||
                   (temp) == 'o' || (temp) == 'u'))) {
        *r++ = 'H';
      }
      break;
    case 'j':
      *r++ = 'J';
      break;
    case 'k':
      if (s == str || tolower(*(s - 1)) != 'c') {
        *r++ = 'K';
      }
      break;
    case 'l':
      *r++ = 'L';
      break;
    case 'm':
      *r++ = 'M';
      break;
    case 'n':
      *r++ = 'N';
      break;
    case 'p':
      if (next == 'h') {
        *r++ = 'F';
        next = tolower(*(++s + 1));
      } else {
        *r++ = 'P';
      }
      break;
    case 'q':
      *r++ = 'K';
      break;
    case 'r':
      *r++ = 'R';
      break;
    case 's':
      if (next == 'h') {
        *r++ = 'X';
        next = tolower(*(++s + 1));
      } else if (next == 'i' && (nextnext == 'o' || nextnext == 'a')) {
        *r++ = 'X';
        s += 2;
        next = tolower(*(s + 1));
      } else {
        *r++ = 'S';
      }
      break;
    case 't':
      if (next == 'i' && (nextnext == 'a' || nextnext == 'o')) {
        *r++ = 'X';
      } else if (next == 'h') {
        *r++ = '0';
        next = tolower(*(++s + 1));
      } else if (next != 'c' || nextnext != 'h') {
        *r++ = 'T';
      }
      break;
    case 'v':
      *r++ = 'F';
      break;
    case 'w':
      if (s == str && next == 'h') {
        next = tolower(*(++s + 1));
      }
      if (((next) == 'a' || (next) == 'e' || (next) == 'i' || (next) == 'o' ||
           (next) == 'u')) {
        *r++ = 'W';
      }
      break;
    case 'x':
      if (s == str) {
        if (next == 'h' ||
            (next == 'i' && (nextnext == 'o' || nextnext == 'a'))) {
          *r++ = 'X';
        } else {
          *r++ = 'S';
        }
      } else {
        *r++ = 'K';
        *r++ = 'S';
      }
      break;
    case 'y':
      if (((next) == 'a' || (next) == 'e' || (next) == 'i' || (next) == 'o' ||
           (next) == 'u')) {
        *r++ = 'Y';
      }
      break;
    case 'z':
      *r++ = 'S';
      break;
    case ' ':
      if (*r != ' ') {
        *r++ = ' ';
      }
      break;
    }
  }
  return result;
}


x86 assembly (clang, -O0):
<metaphone>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
movb   $0x0,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%edi
shl    $0x1,%edi
add    $0x1,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    1187 <metaphone+0x47>
movq   $0x0,-0x8(%rbp)
jmp    1b41 <metaphone+0xa01>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x19(%rbp)
cmpb   $0x0,-0x19(%rbp)
je     125d <metaphone+0x11d>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x6b,%eax
jne    11ca <metaphone+0x8a>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
je     124c <metaphone+0x10c>
movsbl -0x19(%rbp),%eax
cmp    $0x67,%eax
jne    11e4 <metaphone+0xa4>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
je     124c <metaphone+0x10c>
movsbl -0x19(%rbp),%eax
cmp    $0x70,%eax
jne    11fe <metaphone+0xbe>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
je     124c <metaphone+0x10c>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jne    1218 <metaphone+0xd8>
movsbl -0x1a(%rbp),%eax
cmp    $0x63,%eax
je     124c <metaphone+0x10c>
movsbl -0x19(%rbp),%eax
cmp    $0x77,%eax
jne    1232 <metaphone+0xf2>
movsbl -0x1a(%rbp),%eax
cmp    $0x72,%eax
je     124c <metaphone+0x10c>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jne    1258 <metaphone+0x118>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
jne    1258 <metaphone+0x118>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    125d <metaphone+0x11d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpb   $0x0,-0x1a(%rbp)
je     1b39 <metaphone+0x9f9>
mov    -0x1a(%rbp),%al
mov    %al,-0x19(%rbp)
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1b(%rbp)
movsbl -0x19(%rbp),%eax
movsbl -0x1a(%rbp),%ecx
cmp    %ecx,%eax
jne    12ce <metaphone+0x18e>
movsbl -0x19(%rbp),%eax
cmp    $0x63,%eax
je     12ce <metaphone+0x18e>
jmp    1b28 <metaphone+0x9e8>
movsbl -0x19(%rbp),%eax
add    $0xffffffe0,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x5a,%eax
ja     1b23 <metaphone+0x9e3>
mov    -0x38(%rbp),%rax
lea    0xd11(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1317 <metaphone+0x1d7>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x20,%eax
jne    1333 <metaphone+0x1f3>
movsbl -0x19(%rbp),%edi
call   1030 <toupper@plt>
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jbe    136c <metaphone+0x22c>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1060 <tolower@plt>
movsbl %al,%eax
cmp    $0x6d,%eax
jne    136c <metaphone+0x22c>
movsbl -0x1a(%rbp),%eax
cmp    $0x0,%eax
je     137e <metaphone+0x23e>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x42,(%rax)
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    139d <metaphone+0x25d>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
je     13aa <metaphone+0x26a>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    13dc <metaphone+0x29c>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    144c <metaphone+0x30c>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     1403 <metaphone+0x2c3>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     1403 <metaphone+0x2c3>
movsbl -0x1a(%rbp),%eax
cmp    $0x79,%eax
jne    1435 <metaphone+0x2f5>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    1447 <metaphone+0x307>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    144c <metaphone+0x30c>
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x67,%eax
jne    14b8 <metaphone+0x378>
movsbl -0x1b(%rbp),%eax
cmp    $0x65,%eax
je     1485 <metaphone+0x345>
movsbl -0x1b(%rbp),%eax
cmp    $0x79,%eax
je     1485 <metaphone+0x345>
movsbl -0x1b(%rbp),%eax
cmp    $0x69,%eax
jne    14b8 <metaphone+0x378>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4a,(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    14ca <metaphone+0x38a>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x54,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x46,(%rax)
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     150d <metaphone+0x3cd>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     150d <metaphone+0x3cd>
movsbl -0x1a(%rbp),%eax
cmp    $0x79,%eax
jne    1524 <metaphone+0x3e4>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4a,(%rax)
jmp    15c9 <metaphone+0x489>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
je     1555 <metaphone+0x415>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
je     1555 <metaphone+0x415>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    15c4 <metaphone+0x484>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    15bf <metaphone+0x47f>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
je     15bf <metaphone+0x47f>
movsbl -0x1b(%rbp),%eax
cmp    $0x65,%eax
je     15bf <metaphone+0x47f>
movsbl -0x1b(%rbp),%eax
cmp    $0x69,%eax
je     15bf <metaphone+0x47f>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
je     15bf <metaphone+0x47f>
movsbl -0x1b(%rbp),%eax
cmp    $0x75,%eax
je     15bf <metaphone+0x47f>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    15c4 <metaphone+0x484>
jmp    15c9 <metaphone+0x489>
jmp    1b23 <metaphone+0x9e3>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     16ad <metaphone+0x56d>
movsbl -0x1a(%rbp),%eax
cmp    $0x61,%eax
je     16ad <metaphone+0x56d>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     16ad <metaphone+0x56d>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     16ad <metaphone+0x56d>
movsbl -0x1a(%rbp),%eax
cmp    $0x6f,%eax
je     16ad <metaphone+0x56d>
movsbl -0x1a(%rbp),%eax
cmp    $0x75,%eax
je     16ad <metaphone+0x56d>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1060 <tolower@plt>
movsbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x39(%rbp)
je     1696 <metaphone+0x556>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x61,%ecx
mov    %al,-0x3a(%rbp)
je     1690 <metaphone+0x550>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x65,%ecx
mov    %al,-0x3a(%rbp)
je     1690 <metaphone+0x550>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x69,%ecx
mov    %al,-0x3a(%rbp)
je     1690 <metaphone+0x550>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x6f,%ecx
mov    %al,-0x3a(%rbp)
je     1690 <metaphone+0x550>
movsbl -0x1c(%rbp),%eax
cmp    $0x75,%eax
sete   %al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %al,-0x1c(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     16bf <metaphone+0x57f>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x48,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4a,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1702 <metaphone+0x5c2>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1060 <tolower@plt>
movsbl %al,%eax
cmp    $0x63,%eax
je     1714 <metaphone+0x5d4>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4c,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4d,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4e,(%rax)
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    179d <metaphone+0x65d>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x46,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    17af <metaphone+0x66f>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x50,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x52,(%rax)
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    1821 <metaphone+0x6e1>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    1892 <metaphone+0x752>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    187b <metaphone+0x73b>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
je     1848 <metaphone+0x708>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
jne    187b <metaphone+0x73b>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    188d <metaphone+0x74d>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1892 <metaphone+0x752>
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    18d5 <metaphone+0x795>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
je     18be <metaphone+0x77e>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
jne    18d5 <metaphone+0x795>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
jmp    194a <metaphone+0x80a>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    1914 <metaphone+0x7d4>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x30,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
jmp    1945 <metaphone+0x805>
movsbl -0x1a(%rbp),%eax
cmp    $0x63,%eax
jne    192e <metaphone+0x7ee>
movsbl -0x1b(%rbp),%eax
cmp    $0x68,%eax
je     1940 <metaphone+0x800>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x54,(%rax)
jmp    1945 <metaphone+0x805>
jmp    194a <metaphone+0x80a>
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x46,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    199c <metaphone+0x85c>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    199c <metaphone+0x85c>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl 0x2(%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x61,%eax
je     19dd <metaphone+0x89d>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     19dd <metaphone+0x89d>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     19dd <metaphone+0x89d>
movsbl -0x1a(%rbp),%eax
cmp    $0x6f,%eax
je     19dd <metaphone+0x89d>
movsbl -0x1a(%rbp),%eax
cmp    $0x75,%eax
jne    19ef <metaphone+0x8af>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x57,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    1a64 <metaphone+0x924>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
je     1a36 <metaphone+0x8f6>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    1a4d <metaphone+0x90d>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
je     1a36 <metaphone+0x8f6>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
jne    1a4d <metaphone+0x90d>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
jmp    1a5f <metaphone+0x91f>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1a88 <metaphone+0x948>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1b23 <metaphone+0x9e3>
movsbl -0x1a(%rbp),%eax
cmp    $0x61,%eax
je     1ace <metaphone+0x98e>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     1ace <metaphone+0x98e>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     1ace <metaphone+0x98e>
movsbl -0x1a(%rbp),%eax
cmp    $0x6f,%eax
je     1ace <metaphone+0x98e>
movsbl -0x1a(%rbp),%eax
cmp    $0x75,%eax
jne    1ae0 <metaphone+0x9a0>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x59,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1b23 <metaphone+0x9e3>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     1b1e <metaphone+0x9de>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x20,(%rax)
jmp    1b23 <metaphone+0x9e3>
jmp    1b28 <metaphone+0x9e8>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    127c <metaphone+0x13c>
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<metaphone>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdi,%r13
call   1040 <strlen@plt>
lea    (%rax,%rax,1),%edi
add    $0x1,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,0x10(%rsp)
test   %rax,%rax
je     1582 <metaphone+0x442>
movsbl 0x0(%r13),%edi
call   1060 <tolower@plt>
test   %al,%al
je     11c8 <metaphone+0x88>
mov    %eax,%ebx
movsbl 0x1(%r13),%edi
call   1060 <tolower@plt>
cmp    $0x6b,%bl
jne    1197 <metaphone+0x57>
cmp    $0x6e,%al
je     11c4 <metaphone+0x84>
cmp    $0x67,%bl
jne    11a0 <metaphone+0x60>
cmp    $0x6e,%al
je     11c4 <metaphone+0x84>
cmp    $0x70,%bl
jne    11a9 <metaphone+0x69>
cmp    $0x6e,%al
je     11c4 <metaphone+0x84>
cmp    $0x61,%bl
jne    11b2 <metaphone+0x72>
cmp    $0x63,%al
je     11c4 <metaphone+0x84>
cmp    $0x77,%bl
jne    11bb <metaphone+0x7b>
cmp    $0x72,%al
je     11c4 <metaphone+0x84>
cmp    $0x61,%bl
jne    11c8 <metaphone+0x88>
cmp    $0x65,%al
jne    11c8 <metaphone+0x88>
add    $0x1,%r13
movsbl 0x0(%r13),%edi
call   1060 <tolower@plt>
test   %al,%al
je     1582 <metaphone+0x442>
mov    %eax,%ebx
mov    0x10(%rsp),%r14
mov    %r13,%r15
jmp    1204 <metaphone+0xc4>
call   1030 <toupper@plt>
mov    %al,(%r14)
xchg   %ax,%ax
add    $0x1,%r14
add    $0x1,%r15
mov    %r12d,%ebx
test   %r12b,%r12b
je     1582 <metaphone+0x442>
movsbl 0x1(%r15),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
movsbl 0x2(%r15),%edi
call   1060 <tolower@plt>
cmp    $0x63,%bl
je     1230 <metaphone+0xf0>
cmp    %r12b,%bl
jne    1230 <metaphone+0xf0>
mov    %ebx,%r12d
jmp    11f4 <metaphone+0xb4>
nopw   0x0(%rax,%rax,1)
movsbl %bl,%edi
lea    -0x20(%rdi),%ecx
cmp    $0x5a,%ecx
ja     11f4 <metaphone+0xb4>
lea    0x1(%r15),%rbx
lea    0x2(%r15),%rbp
lea    0xdb6(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
cmp    %r13,%r15
je     11e6 <metaphone+0xa6>
cmpb   $0x20,-0x1(%r15)
je     11e6 <metaphone+0xa6>
jmp    11f4 <metaphone+0xb4>
movb   $0x46,(%r14)
jmp    11f0 <metaphone+0xb0>
cmpb   $0x20,(%r14)
je     11f4 <metaphone+0xb4>
movb   $0x20,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %r13,%r15
jbe    1296 <metaphone+0x156>
movsbl -0x1(%r15),%edi
call   1060 <tolower@plt>
cmp    $0x6d,%al
jne    1296 <metaphone+0x156>
test   %r12b,%r12b
je     1582 <metaphone+0x442>
movb   $0x42,(%r14)
jmp    11f0 <metaphone+0xb0>
mov    %r12d,%ecx
xor    $0x69,%cl
xor    $0x61,%al
or     %cl,%al
sete   %al
cmp    $0x68,%r12b
je     13ee <metaphone+0x2ae>
test   %al,%al
jne    13ee <metaphone+0x2ae>
mov    %r12d,%eax
add    $0x9b,%al
cmp    $0x14,%al
ja     1382 <metaphone+0x242>
movzbl %al,%eax
mov    $0x100011,%ecx
bt     %rax,%rcx
jae    1382 <metaphone+0x242>
movb   $0x53,(%r14)
jmp    1511 <metaphone+0x3d1>
cmp    $0x67,%r12b
jne    153b <metaphone+0x3fb>
add    $0x9b,%al
cmp    $0x14,%al
ja     153b <metaphone+0x3fb>
movzbl %al,%eax
mov    $0x100011,%ecx
bt     %rax,%rcx
jae    153b <metaphone+0x3fb>
movb   $0x4a,(%r14)
jmp    14eb <metaphone+0x3ab>
mov    %r12d,%ecx
add    $0x9b,%cl
cmp    $0x14,%cl
ja     1382 <metaphone+0x242>
movzbl %cl,%ecx
lea    0xe42(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movb   $0x4a,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %r13,%r15
je     1362 <metaphone+0x222>
mov    %r12d,%eax
add    $0x9f,%al
ror    %al
cmp    $0xa,%al
ja     1573 <metaphone+0x433>
movzbl %al,%eax
mov    $0x495,%ecx
bt     %rax,%rcx
jae    1573 <metaphone+0x433>
movb   $0x48,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %r13,%r15
je     1382 <metaphone+0x242>
movsbl -0x1(%r15),%edi
call   1060 <tolower@plt>
cmp    $0x63,%al
je     11f4 <metaphone+0xb4>
movb   $0x4b,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x4c,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x4d,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x4e,(%r14)
jmp    11f0 <metaphone+0xb0>
mov    %r13,0x8(%rsp)
lea    0x1(%r14),%r13
cmp    $0x68,%r12b
jne    14a9 <metaphone+0x369>
movb   $0x46,(%r14)
movsbl 0x0(%rbp),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %rbx,%r15
jmp    14ad <metaphone+0x36d>
movb   $0x52,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    $0x69,%r12b
je     14df <metaphone+0x39f>
cmp    $0x68,%r12b
jne    1504 <metaphone+0x3c4>
movb   $0x58,(%r14)
jmp    1511 <metaphone+0x3d1>
cmp    $0x68,%r12b
je     150d <metaphone+0x3cd>
cmp    $0x69,%r12b
jne    1529 <metaphone+0x3e9>
cmp    $0x6f,%al
je     1417 <metaphone+0x2d7>
cmp    $0x61,%al
jne    153b <metaphone+0x3fb>
movb   $0x58,(%r14)
add    $0x1,%r14
mov    $0x69,%r12b
jmp    11f4 <metaphone+0xb4>
cmp    %r13,%r15
jne    1441 <metaphone+0x301>
cmp    $0x68,%r12b
jne    1441 <metaphone+0x301>
movsbl 0x0(%rbp),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %rbx,%r15
lea    -0x61(%r12),%eax
ror    %al
cmp    $0xa,%al
ja     11f4 <metaphone+0xb4>
movzbl %al,%eax
mov    $0x495,%ecx
bt     %rax,%rcx
jae    11f4 <metaphone+0xb4>
movb   $0x57,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %r13,%r15
je     14ba <metaphone+0x37a>
movw   $0x534b,(%r14)
add    $0x2,%r14
jmp    11f4 <metaphone+0xb4>
mov    %r12d,%eax
add    $0x9f,%al
ror    %al
cmp    $0xa,%al
ja     11f4 <metaphone+0xb4>
movzbl %al,%eax
mov    $0x495,%ecx
bt     %rax,%rcx
jae    11f4 <metaphone+0xb4>
movb   $0x59,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x50,(%r14)
mov    %r13,%r14
mov    0x8(%rsp),%r13
jmp    11f4 <metaphone+0xb4>
cmp    $0x68,%r12b
je     14d6 <metaphone+0x396>
cmp    $0x69,%r12b
jne    1563 <metaphone+0x423>
cmp    $0x6f,%al
je     14d6 <metaphone+0x396>
cmp    $0x61,%al
jne    1563 <metaphone+0x423>
movb   $0x58,(%r14)
jmp    1567 <metaphone+0x427>
cmp    $0x6f,%al
je     14e7 <metaphone+0x3a7>
cmp    $0x61,%al
jne    1504 <metaphone+0x3c4>
movb   $0x58,(%r14)
add    $0x1,%r14
movsbl 0x3(%r15),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %rbp,%r15
jmp    11f4 <metaphone+0xb4>
movb   $0x53,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x30,(%r14)
add    $0x1,%r14
movsbl 0x0(%rbp),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %rbx,%r15
jmp    11f4 <metaphone+0xb4>
cmp    $0x63,%r12b
jne    153b <metaphone+0x3fb>
cmp    $0x68,%al
jne    153b <metaphone+0x3fb>
mov    $0x63,%r12b
jmp    11f4 <metaphone+0xb4>
movb   $0x54,(%r14)
jmp    11f0 <metaphone+0xb0>
add    $0x9f,%al
ror    %al
cmp    $0xa,%al
ja     1515 <metaphone+0x3d5>
mov    $0x68,%r12b
movzbl %al,%eax
mov    $0x495,%ecx
bt     %rax,%rcx
jb     11f4 <metaphone+0xb4>
jmp    1515 <metaphone+0x3d5>
movb   $0x53,(%r14)
add    $0x1,%r14
mov    %r13,%r15
jmp    11f4 <metaphone+0xb4>
movsbl -0x1(%r15),%edi
call   1060 <tolower@plt>
jmp    11f4 <metaphone+0xb4>
mov    0x10(%rsp),%rax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i8* @metaphone(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8*
%10 = alloca i8*
store i8* %0, i8** %3
store i8 0, i8* %8
%11 = load i8*, i8** %3
%12 = call i32 @strlen(i8* %11)
%13 = mul nsw i32 %12, 2
%14 = add nsw i32 %13, 1
%15 = call i8* @calloc(i32 %14, i32 1)
store i8* %15, i8** %9
%16 = load i8*, i8** %9
%17 = icmp ne i8* %16, null
br i1 %17, label %19, label %18
18: ; preds = %1
store i8* null, i8** %2
br label %593
19: ; preds = %1
%20 = load i8*, i8** %3
%21 = load i8, i8* %20
%22 = call signext i8 @tolower(i8 signext %21)
store i8 %22, i8* %5
%23 = load i8, i8* %5
%24 = icmp ne i8 %23, 0
br i1 %24, label %25, label %81
25: ; preds = %19
%26 = load i8*, i8** %3
%27 = getelementptr inbounds i8, i8* %26, i64 1
%28 = load i8, i8* %27
%29 = call signext i8 @tolower(i8 signext %28)
store i8 %29, i8* %6
%30 = load i8, i8* %5
%31 = sext i8 %30 to i32
%32 = icmp eq i32 %31, 107
br i1 %32, label %33, label %37
33: ; preds = %25
%34 = load i8, i8* %6
%35 = sext i8 %34 to i32
%36 = icmp eq i32 %35, 110
br i1 %36, label %77, label %37
37: ; preds = %33, %25
%38 = load i8, i8* %5
%39 = sext i8 %38 to i32
%40 = icmp eq i32 %39, 103
br i1 %40, label %41, label %45
41: ; preds = %37
%42 = load i8, i8* %6
%43 = sext i8 %42 to i32
%44 = icmp eq i32 %43, 110
br i1 %44, label %77, label %45
45: ; preds = %41, %37
%46 = load i8, i8* %5
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 112
br i1 %48, label %49, label %53
49: ; preds = %45
%50 = load i8, i8* %6
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 110
br i1 %52, label %77, label %53
53: ; preds = %49, %45
%54 = load i8, i8* %5
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %55, 97
br i1 %56, label %57, label %61
57: ; preds = %53
%58 = load i8, i8* %6
%59 = sext i8 %58 to i32
%60 = icmp eq i32 %59, 99
br i1 %60, label %77, label %61
61: ; preds = %57, %53
%62 = load i8, i8* %5
%63 = sext i8 %62 to i32
%64 = icmp eq i32 %63, 119
br i1 %64, label %65, label %69
65: ; preds = %61
%66 = load i8, i8* %6
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %67, 114
br i1 %68, label %77, label %69
69: ; preds = %65, %61
%70 = load i8, i8* %5
%71 = sext i8 %70 to i32
%72 = icmp eq i32 %71, 97
br i1 %72, label %73, label %80
73: ; preds = %69
%74 = load i8, i8* %6
%75 = sext i8 %74 to i32
%76 = icmp eq i32 %75, 101
br i1 %76, label %77, label %80
77: ; preds = %73, %65, %57, %49, %41, %33
%78 = load i8*, i8** %3
%79 = getelementptr inbounds i8, i8* %78, i32 1
store i8* %79, i8** %3
br label %80
80: ; preds = %77, %73, %69
br label %81
81: ; preds = %80, %19
%82 = load i8*, i8** %3
%83 = load i8, i8* %82
%84 = call signext i8 @tolower(i8 signext %83)
store i8 %84, i8* %6
%85 = load i8*, i8** %3
store i8* %85, i8** %4
%86 = load i8*, i8** %9
store i8* %86, i8** %10
br label %87
87: ; preds = %588, %81
%88 = load i8, i8* %6
%89 = icmp ne i8 %88, 0
br i1 %89, label %90, label %591
90: ; preds = %87
%91 = load i8, i8* %6
store i8 %91, i8* %5
%92 = load i8*, i8** %4
%93 = getelementptr inbounds i8, i8* %92, i64 1
%94 = load i8, i8* %93
%95 = call signext i8 @tolower(i8 signext %94)
store i8 %95, i8* %6
%96 = load i8*, i8** %4
%97 = getelementptr inbounds i8, i8* %96, i64 2
%98 = load i8, i8* %97
%99 = call signext i8 @tolower(i8 signext %98)
store i8 %99, i8* %7
%100 = load i8, i8* %5
%101 = sext i8 %100 to i32
%102 = load i8, i8* %6
%103 = sext i8 %102 to i32
%104 = icmp eq i32 %101, %103
br i1 %104, label %105, label %110
105: ; preds = %90
%106 = load i8, i8* %5
%107 = sext i8 %106 to i32
%108 = icmp ne i32 %107, 99
br i1 %108, label %109, label %110
109: ; preds = %105
br label %588
110: ; preds = %105, %90
%111 = load i8, i8* %5
%112 = sext i8 %111 to i32
switch i32 %112, label %587 [
i32 97, label %113
i32 101, label %113
i32 105, label %113
i32 111, label %113
i32 117, label %113
i32 98, label %130
i32 99, label %149
i32 100, label %194
i32 102, label %223
i32 103, label %226
i32 104, label %286
i32 106, label %349
i32 107, label %352
i32 108, label %367
i32 109, label %370
i32 110, label %373
i32 112, label %376
i32 113, label %392
i32 114, label %395
i32 115, label %398
i32 116, label %436
i32 118, label %477
i32 119, label %480
i32 120, label %518
i32 121, label %551
i32 122, label %575
i32 32, label %578
]
113: ; preds = %110, %110, %110, %110, %110
%114 = load i8*, i8** %4
%115 = load i8*, i8** %3
%116 = icmp eq i8* %114, %115
br i1 %116, label %123, label %117
117: ; preds = %113
%118 = load i8*, i8** %4
%119 = getelementptr inbounds i8, i8* %118, i64 -1
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = icmp eq i32 %121, 32
br i1 %122, label %123, label %129
123: ; preds = %117, %113
%124 = load i8, i8* %5
%125 = call i32 @toupper(i8 signext %124)
%126 = trunc i32 %125 to i8
%127 = load i8*, i8** %10
%128 = getelementptr inbounds i8, i8* %127, i32 1
store i8* %128, i8** %10
store i8 %126, i8* %127
br label %129
129: ; preds = %123, %117
br label %587
130: ; preds = %110
%131 = load i8*, i8** %4
%132 = load i8*, i8** %3
%133 = icmp ugt i8* %131, %132
br i1 %133, label %134, label %145
134: ; preds = %130
%135 = load i8*, i8** %4
%136 = getelementptr inbounds i8, i8* %135, i64 -1
%137 = load i8, i8* %136
%138 = call signext i8 @tolower(i8 signext %137)
%139 = sext i8 %138 to i32
%140 = icmp eq i32 %139, 109
br i1 %140, label %141, label %145
141: ; preds = %134
%142 = load i8, i8* %6
%143 = sext i8 %142 to i32
%144 = icmp ne i32 %143, 0
br i1 %144, label %145, label %148
145: ; preds = %141, %134, %130
%146 = load i8*, i8** %10
%147 = getelementptr inbounds i8, i8* %146, i32 1
store i8* %147, i8** %10
store i8 66, i8* %146
br label %148
148: ; preds = %145, %141
br label %587
149: ; preds = %110
%150 = load i8, i8* %6
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %151, 105
br i1 %152, label %153, label %157
153: ; preds = %149
%154 = load i8, i8* %7
%155 = sext i8 %154 to i32
%156 = icmp eq i32 %155, 97
br i1 %156, label %161, label %157
157: ; preds = %153, %149
%158 = load i8, i8* %6
%159 = sext i8 %158 to i32
%160 = icmp eq i32 %159, 104
br i1 %160, label %161, label %169
161: ; preds = %157, %153
%162 = load i8*, i8** %10
%163 = getelementptr inbounds i8, i8* %162, i32 1
store i8* %163, i8** %10
store i8 88, i8* %162
%164 = load i8*, i8** %4
%165 = getelementptr inbounds i8, i8* %164, i32 1
store i8* %165, i8** %4
%166 = getelementptr inbounds i8, i8* %165, i64 1
%167 = load i8, i8* %166
%168 = call signext i8 @tolower(i8 signext %167)
store i8 %168, i8* %6
br label %193
169: ; preds = %157
%170 = load i8, i8* %6
%171 = sext i8 %170 to i32
%172 = icmp eq i32 %171, 105
br i1 %172, label %181, label %173
173: ; preds = %169
%174 = load i8, i8* %6
%175 = sext i8 %174 to i32
%176 = icmp eq i32 %175, 101
br i1 %176, label %181, label %177
177: ; preds = %173
%178 = load i8, i8* %6
%179 = sext i8 %178 to i32
%180 = icmp eq i32 %179, 121
br i1 %180, label %181, label %189
181: ; preds = %177, %173, %169
%182 = load i8*, i8** %10
%183 = getelementptr inbounds i8, i8* %182, i32 1
store i8* %183, i8** %10
store i8 83, i8* %182
%184 = load i8*, i8** %4
%185 = getelementptr inbounds i8, i8* %184, i32 1
store i8* %185, i8** %4
%186 = getelementptr inbounds i8, i8* %185, i64 1
%187 = load i8, i8* %186
%188 = call signext i8 @tolower(i8 signext %187)
store i8 %188, i8* %6
br label %192
189: ; preds = %177
%190 = load i8*, i8** %10
%191 = getelementptr inbounds i8, i8* %190, i32 1
store i8* %191, i8** %10
store i8 75, i8* %190
br label %192
192: ; preds = %189, %181
br label %193
193: ; preds = %192, %161
br label %587
194: ; preds = %110
%195 = load i8, i8* %6
%196 = sext i8 %195 to i32
%197 = icmp eq i32 %196, 103
br i1 %197, label %198, label %219
198: ; preds = %194
%199 = load i8, i8* %7
%200 = sext i8 %199 to i32
%201 = icmp eq i32 %200, 101
br i1 %201, label %210, label %202
202: ; preds = %198
%203 = load i8, i8* %7
%204 = sext i8 %203 to i32
%205 = icmp eq i32 %204, 121
br i1 %205, label %210, label %206
206: ; preds = %202
%207 = load i8, i8* %7
%208 = sext i8 %207 to i32
%209 = icmp eq i32 %208, 105
br i1 %209, label %210, label %219
210: ; preds = %206, %202, %198
%211 = load i8*, i8** %10
%212 = getelementptr inbounds i8, i8* %211, i32 1
store i8* %212, i8** %10
store i8 74, i8* %211
%213 = load i8*, i8** %4
%214 = getelementptr inbounds i8, i8* %213, i64 2
store i8* %214, i8** %4
%215 = load i8*, i8** %4
%216 = getelementptr inbounds i8, i8* %215, i64 1
%217 = load i8, i8* %216
%218 = call signext i8 @tolower(i8 signext %217)
store i8 %218, i8* %6
br label %222
219: ; preds = %206, %194
%220 = load i8*, i8** %10
%221 = getelementptr inbounds i8, i8* %220, i32 1
store i8* %221, i8** %10
store i8 84, i8* %220
br label %222
222: ; preds = %219, %210
br label %587
223: ; preds = %110
%224 = load i8*, i8** %10
%225 = getelementptr inbounds i8, i8* %224, i32 1
store i8* %225, i8** %10
store i8 70, i8* %224
br label %587
226: ; preds = %110
%227 = load i8, i8* %6
%228 = sext i8 %227 to i32
%229 = icmp eq i32 %228, 105
br i1 %229, label %238, label %230
230: ; preds = %226
%231 = load i8, i8* %6
%232 = sext i8 %231 to i32
%233 = icmp eq i32 %232, 101
br i1 %233, label %238, label %234
234: ; preds = %230
%235 = load i8, i8* %6
%236 = sext i8 %235 to i32
%237 = icmp eq i32 %236, 121
br i1 %237, label %238, label %241
238: ; preds = %234, %230, %226
%239 = load i8*, i8** %10
%240 = getelementptr inbounds i8, i8* %239, i32 1
store i8* %240, i8** %10
store i8 74, i8* %239
br label %285
241: ; preds = %234
%242 = load i8, i8* %6
%243 = sext i8 %242 to i32
%244 = icmp ne i32 %243, 104
br i1 %244, label %245, label %252
245: ; preds = %241
%246 = load i8, i8* %6
%247 = sext i8 %246 to i32
%248 = icmp ne i32 %247, 110
br i1 %248, label %249, label %252
249: ; preds = %245
%250 = load i8*, i8** %10
%251 = getelementptr inbounds i8, i8* %250, i32 1
store i8* %251, i8** %10
store i8 75, i8* %250
br label %284
252: ; preds = %245, %241
%253 = load i8, i8* %6
%254 = sext i8 %253 to i32
%255 = icmp eq i32 %254, 104
br i1 %255, label %256, label %283
256: ; preds = %252
%257 = load i8, i8* %7
%258 = sext i8 %257 to i32
%259 = icmp eq i32 %258, 97
br i1 %259, label %283, label %260
260: ; preds = %256
%261 = load i8, i8* %7
%262 = sext i8 %261 to i32
%263 = icmp eq i32 %262, 101
br i1 %263, label %283, label %264
264: ; preds = %260
%265 = load i8, i8* %7
%266 = sext i8 %265 to i32
%267 = icmp eq i32 %266, 105
br i1 %267, label %283, label %268
268: ; preds = %264
%269 = load i8, i8* %7
%270 = sext i8 %269 to i32
%271 = icmp eq i32 %270, 111
br i1 %271, label %283, label %272
272: ; preds = %268
%273 = load i8, i8* %7
%274 = sext i8 %273 to i32
%275 = icmp eq i32 %274, 117
br i1 %275, label %283, label %276
276: ; preds = %272
%277 = load i8*, i8** %4
%278 = getelementptr inbounds i8, i8* %277, i32 1
store i8* %278, i8** %4
%279 = load i8*, i8** %4
%280 = getelementptr inbounds i8, i8* %279, i64 1
%281 = load i8, i8* %280
%282 = call signext i8 @tolower(i8 signext %281)
store i8 %282, i8* %6
br label %283
283: ; preds = %276, %272, %268, %264, %260, %256, %252
br label %284
284: ; preds = %283, %249
br label %285
285: ; preds = %284, %238
br label %587
286: ; preds = %110
%287 = load i8*, i8** %4
%288 = load i8*, i8** %3
%289 = icmp eq i8* %287, %288
br i1 %289, label %345, label %290
290: ; preds = %286
%291 = load i8, i8* %6
%292 = sext i8 %291 to i32
%293 = icmp eq i32 %292, 97
br i1 %293, label %345, label %294
294: ; preds = %290
%295 = load i8, i8* %6
%296 = sext i8 %295 to i32
%297 = icmp eq i32 %296, 101
br i1 %297, label %345, label %298
298: ; preds = %294
%299 = load i8, i8* %6
%300 = sext i8 %299 to i32
%301 = icmp eq i32 %300, 105
br i1 %301, label %345, label %302
302: ; preds = %298
%303 = load i8, i8* %6
%304 = sext i8 %303 to i32
%305 = icmp eq i32 %304, 111
br i1 %305, label %345, label %306
306: ; preds = %302
%307 = load i8, i8* %6
%308 = sext i8 %307 to i32
%309 = icmp eq i32 %308, 117
br i1 %309, label %345, label %310
310: ; preds = %306
%311 = load i8*, i8** %4
%312 = getelementptr inbounds i8, i8* %311, i64 -1
%313 = load i8, i8* %312
%314 = call signext i8 @tolower(i8 signext %313)
%315 = sext i8 %314 to i32
%316 = icmp ne i32 %315, 0
br i1 %316, label %317, label %339
317: ; preds = %310
%318 = load i8, i8* %8
%319 = sext i8 %318 to i32
%320 = icmp eq i32 %319, 97
br i1 %320, label %337, label %321
321: ; preds = %317
%322 = load i8, i8* %8
%323 = sext i8 %322 to i32
%324 = icmp eq i32 %323, 101
br i1 %324, label %337, label %325
325: ; preds = %321
%326 = load i8, i8* %8
%327 = sext i8 %326 to i32
%328 = icmp eq i32 %327, 105
br i1 %328, label %337, label %329
329: ; preds = %325
%330 = load i8, i8* %8
%331 = sext i8 %330 to i32
%332 = icmp eq i32 %331, 111
br i1 %332, label %337, label %333
333: ; preds = %329
%334 = load i8, i8* %8
%335 = sext i8 %334 to i32
%336 = icmp eq i32 %335, 117
br label %337
337: ; preds = %333, %329, %325, %321, %317
%338 = phi i1 [ true, %329 ], [ true, %325 ], [ true, %321 ], [ true, %317 ], [ %336, %333 ]
br label %339
339: ; preds = %337, %310
%340 = phi i1 [ false, %310 ], [ %338, %337 ]
%341 = zext i1 %340 to i32
%342 = trunc i32 %341 to i8
store i8 %342, i8* %8
%343 = sext i8 %342 to i32
%344 = icmp ne i32 %343, 0
br i1 %344, label %345, label %348
345: ; preds = %339, %306, %302, %298, %294, %290, %286
%346 = load i8*, i8** %10
%347 = getelementptr inbounds i8, i8* %346, i32 1
store i8* %347, i8** %10
store i8 72, i8* %346
br label %348
348: ; preds = %345, %339
br label %587
349: ; preds = %110
%350 = load i8*, i8** %10
%351 = getelementptr inbounds i8, i8* %350, i32 1
store i8* %351, i8** %10
store i8 74, i8* %350
br label %587
352: ; preds = %110
%353 = load i8*, i8** %4
%354 = load i8*, i8** %3
%355 = icmp eq i8* %353, %354
br i1 %355, label %363, label %356
356: ; preds = %352
%357 = load i8*, i8** %4
%358 = getelementptr inbounds i8, i8* %357, i64 -1
%359 = load i8, i8* %358
%360 = call signext i8 @tolower(i8 signext %359)
%361 = sext i8 %360 to i32
%362 = icmp ne i32 %361, 99
br i1 %362, label %363, label %366
363: ; preds = %356, %352
%364 = load i8*, i8** %10
%365 = getelementptr inbounds i8, i8* %364, i32 1
store i8* %365, i8** %10
store i8 75, i8* %364
br label %366
366: ; preds = %363, %356
br label %587
367: ; preds = %110
%368 = load i8*, i8** %10
%369 = getelementptr inbounds i8, i8* %368, i32 1
store i8* %369, i8** %10
store i8 76, i8* %368
br label %587
370: ; preds = %110
%371 = load i8*, i8** %10
%372 = getelementptr inbounds i8, i8* %371, i32 1
store i8* %372, i8** %10
store i8 77, i8* %371
br label %587
373: ; preds = %110
%374 = load i8*, i8** %10
%375 = getelementptr inbounds i8, i8* %374, i32 1
store i8* %375, i8** %10
store i8 78, i8* %374
br label %587
376: ; preds = %110
%377 = load i8, i8* %6
%378 = sext i8 %377 to i32
%379 = icmp eq i32 %378, 104
br i1 %379, label %380, label %388
380: ; preds = %376
%381 = load i8*, i8** %10
%382 = getelementptr inbounds i8, i8* %381, i32 1
store i8* %382, i8** %10
store i8 70, i8* %381
%383 = load i8*, i8** %4
%384 = getelementptr inbounds i8, i8* %383, i32 1
store i8* %384, i8** %4
%385 = getelementptr inbounds i8, i8* %384, i64 1
%386 = load i8, i8* %385
%387 = call signext i8 @tolower(i8 signext %386)
store i8 %387, i8* %6
br label %391
388: ; preds = %376
%389 = load i8*, i8** %10
%390 = getelementptr inbounds i8, i8* %389, i32 1
store i8* %390, i8** %10
store i8 80, i8* %389
br label %391
391: ; preds = %388, %380
br label %587
392: ; preds = %110
%393 = load i8*, i8** %10
%394 = getelementptr inbounds i8, i8* %393, i32 1
store i8* %394, i8** %10
store i8 75, i8* %393
br label %587
395: ; preds = %110
%396 = load i8*, i8** %10
%397 = getelementptr inbounds i8, i8* %396, i32 1
store i8* %397, i8** %10
store i8 82, i8* %396
br label %587
398: ; preds = %110
%399 = load i8, i8* %6
%400 = sext i8 %399 to i32
%401 = icmp eq i32 %400, 104
br i1 %401, label %402, label %410
402: ; preds = %398
%403 = load i8*, i8** %10
%404 = getelementptr inbounds i8, i8* %403, i32 1
store i8* %404, i8** %10
store i8 88, i8* %403
%405 = load i8*, i8** %4
%406 = getelementptr inbounds i8, i8* %405, i32 1
store i8* %406, i8** %4
%407 = getelementptr inbounds i8, i8* %406, i64 1
%408 = load i8, i8* %407
%409 = call signext i8 @tolower(i8 signext %408)
store i8 %409, i8* %6
br label %435
410: ; preds = %398
%411 = load i8, i8* %6
%412 = sext i8 %411 to i32
%413 = icmp eq i32 %412, 105
br i1 %413, label %414, label %431
414: ; preds = %410
%415 = load i8, i8* %7
%416 = sext i8 %415 to i32
%417 = icmp eq i32 %416, 111
br i1 %417, label %422, label %418
418: ; preds = %414
%419 = load i8, i8* %7
%420 = sext i8 %419 to i32
%421 = icmp eq i32 %420, 97
br i1 %421, label %422, label %431
422: ; preds = %418, %414
%423 = load i8*, i8** %10
%424 = getelementptr inbounds i8, i8* %423, i32 1
store i8* %424, i8** %10
store i8 88, i8* %423
%425 = load i8*, i8** %4
%426 = getelementptr inbounds i8, i8* %425, i64 2
store i8* %426, i8** %4
%427 = load i8*, i8** %4
%428 = getelementptr inbounds i8, i8* %427, i64 1
%429 = load i8, i8* %428
%430 = call signext i8 @tolower(i8 signext %429)
store i8 %430, i8* %6
br label %434
431: ; preds = %418, %410
%432 = load i8*, i8** %10
%433 = getelementptr inbounds i8, i8* %432, i32 1
store i8* %433, i8** %10
store i8 83, i8* %432
br label %434
434: ; preds = %431, %422
br label %435
435: ; preds = %434, %402
br label %587
436: ; preds = %110
%437 = load i8, i8* %6
%438 = sext i8 %437 to i32
%439 = icmp eq i32 %438, 105
br i1 %439, label %440, label %451
440: ; preds = %436
%441 = load i8, i8* %7
%442 = sext i8 %441 to i32
%443 = icmp eq i32 %442, 97
br i1 %443, label %448, label %444
444: ; preds = %440
%445 = load i8, i8* %7
%446 = sext i8 %445 to i32
%447 = icmp eq i32 %446, 111
br i1 %447, label %448, label %451
448: ; preds = %444, %440
%449 = load i8*, i8** %10
%450 = getelementptr inbounds i8, i8* %449, i32 1
store i8* %450, i8** %10
store i8 88, i8* %449
br label %476
451: ; preds = %444, %436
%452 = load i8, i8* %6
%453 = sext i8 %452 to i32
%454 = icmp eq i32 %453, 104
br i1 %454, label %455, label %463
455: ; preds = %451
%456 = load i8*, i8** %10
%457 = getelementptr inbounds i8, i8* %456, i32 1
store i8* %457, i8** %10
store i8 48, i8* %456
%458 = load i8*, i8** %4
%459 = getelementptr inbounds i8, i8* %458, i32 1
store i8* %459, i8** %4
%460 = getelementptr inbounds i8, i8* %459, i64 1
%461 = load i8, i8* %460
%462 = call signext i8 @tolower(i8 signext %461)
store i8 %462, i8* %6
br label %475
463: ; preds = %451
%464 = load i8, i8* %6
%465 = sext i8 %464 to i32
%466 = icmp ne i32 %465, 99
br i1 %466, label %471, label %467
467: ; preds = %463
%468 = load i8, i8* %7
%469 = sext i8 %468 to i32
%470 = icmp ne i32 %469, 104
br i1 %470, label %471, label %474
471: ; preds = %467, %463
%472 = load i8*, i8** %10
%473 = getelementptr inbounds i8, i8* %472, i32 1
store i8* %473, i8** %10
store i8 84, i8* %472
br label %474
474: ; preds = %471, %467
br label %475
475: ; preds = %474, %455
br label %476
476: ; preds = %475, %448
br label %587
477: ; preds = %110
%478 = load i8*, i8** %10
%479 = getelementptr inbounds i8, i8* %478, i32 1
store i8* %479, i8** %10
store i8 70, i8* %478
br label %587
480: ; preds = %110
%481 = load i8*, i8** %4
%482 = load i8*, i8** %3
%483 = icmp eq i8* %481, %482
br i1 %483, label %484, label %494
484: ; preds = %480
%485 = load i8, i8* %6
%486 = sext i8 %485 to i32
%487 = icmp eq i32 %486, 104
br i1 %487, label %488, label %494
488: ; preds = %484
%489 = load i8*, i8** %4
%490 = getelementptr inbounds i8, i8* %489, i32 1
store i8* %490, i8** %4
%491 = getelementptr inbounds i8, i8* %490, i64 1
%492 = load i8, i8* %491
%493 = call signext i8 @tolower(i8 signext %492)
store i8 %493, i8* %6
br label %494
494: ; preds = %488, %484, %480
%495 = load i8, i8* %6
%496 = sext i8 %495 to i32
%497 = icmp eq i32 %496, 97
br i1 %497, label %514, label %498
498: ; preds = %494
%499 = load i8, i8* %6
%500 = sext i8 %499 to i32
%501 = icmp eq i32 %500, 101
br i1 %501, label %514, label %502
502: ; preds = %498
%503 = load i8, i8* %6
%504 = sext i8 %503 to i32
%505 = icmp eq i32 %504, 105
br i1 %505, label %514, label %506
506: ; preds = %502
%507 = load i8, i8* %6
%508 = sext i8 %507 to i32
%509 = icmp eq i32 %508, 111
br i1 %509, label %514, label %510
510: ; preds = %506
%511 = load i8, i8* %6
%512 = sext i8 %511 to i32
%513 = icmp eq i32 %512, 117
br i1 %513, label %514, label %517
514: ; preds = %510, %506, %502, %498, %494
%515 = load i8*, i8** %10
%516 = getelementptr inbounds i8, i8* %515, i32 1
store i8* %516, i8** %10
store i8 87, i8* %515
br label %517
517: ; preds = %514, %510
br label %587
518: ; preds = %110
%519 = load i8*, i8** %4
%520 = load i8*, i8** %3
%521 = icmp eq i8* %519, %520
br i1 %521, label %522, label %545
522: ; preds = %518
%523 = load i8, i8* %6
%524 = sext i8 %523 to i32
%525 = icmp eq i32 %524, 104
br i1 %525, label %538, label %526
526: ; preds = %522
%527 = load i8, i8* %6
%528 = sext i8 %527 to i32
%529 = icmp eq i32 %528, 105
br i1 %529, label %530, label %541
530: ; preds = %526
%531 = load i8, i8* %7
%532 = sext i8 %531 to i32
%533 = icmp eq i32 %532, 111
br i1 %533, label %538, label %534
534: ; preds = %530
%535 = load i8, i8* %7
%536 = sext i8 %535 to i32
%537 = icmp eq i32 %536, 97
br i1 %537, label %538, label %541
538: ; preds = %534, %530, %522
%539 = load i8*, i8** %10
%540 = getelementptr inbounds i8, i8* %539, i32 1
store i8* %540, i8** %10
store i8 88, i8* %539
br label %544
541: ; preds = %534, %526
%542 = load i8*, i8** %10
%543 = getelementptr inbounds i8, i8* %542, i32 1
store i8* %543, i8** %10
store i8 83, i8* %542
br label %544
544: ; preds = %541, %538
br label %550
545: ; preds = %518
%546 = load i8*, i8** %10
%547 = getelementptr inbounds i8, i8* %546, i32 1
store i8* %547, i8** %10
store i8 75, i8* %546
%548 = load i8*, i8** %10
%549 = getelementptr inbounds i8, i8* %548, i32 1
store i8* %549, i8** %10
store i8 83, i8* %548
br label %550
550: ; preds = %545, %544
br label %587
551: ; preds = %110
%552 = load i8, i8* %6
%553 = sext i8 %552 to i32
%554 = icmp eq i32 %553, 97
br i1 %554, label %571, label %555
555: ; preds = %551
%556 = load i8, i8* %6
%557 = sext i8 %556 to i32
%558 = icmp eq i32 %557, 101
br i1 %558, label %571, label %559
559: ; preds = %555
%560 = load i8, i8* %6
%561 = sext i8 %560 to i32
%562 = icmp eq i32 %561, 105
br i1 %562, label %571, label %563
563: ; preds = %559
%564 = load i8, i8* %6
%565 = sext i8 %564 to i32
%566 = icmp eq i32 %565, 111
br i1 %566, label %571, label %567
567: ; preds = %563
%568 = load i8, i8* %6
%569 = sext i8 %568 to i32
%570 = icmp eq i32 %569, 117
br i1 %570, label %571, label %574
571: ; preds = %567, %563, %559, %555, %551
%572 = load i8*, i8** %10
%573 = getelementptr inbounds i8, i8* %572, i32 1
store i8* %573, i8** %10
store i8 89, i8* %572
br label %574
574: ; preds = %571, %567
br label %587
575: ; preds = %110
%576 = load i8*, i8** %10
%577 = getelementptr inbounds i8, i8* %576, i32 1
store i8* %577, i8** %10
store i8 83, i8* %576
br label %587
578: ; preds = %110
%579 = load i8*, i8** %10
%580 = load i8, i8* %579
%581 = sext i8 %580 to i32
%582 = icmp ne i32 %581, 32
br i1 %582, label %583, label %586
583: ; preds = %578
%584 = load i8*, i8** %10
%585 = getelementptr inbounds i8, i8* %584, i32 1
store i8* %585, i8** %10
store i8 32, i8* %584
br label %586
586: ; preds = %583, %578
br label %587
587: ; preds = %110, %586, %575, %574, %550, %517, %477, %476, %435, %395, %392, %391, %373, %370, %367, %366, %349, %348, %285, %223, %222, %193, %148, %129
br label %588
588: ; preds = %587, %109
%589 = load i8*, i8** %4
%590 = getelementptr inbounds i8, i8* %589, i32 1
store i8* %590, i8** %4
br label %87
591: ; preds = %87
%592 = load i8*, i8** %9
store i8* %592, i8** %2
br label %593
593: ; preds = %591, %18
%594 = load i8*, i8** %2
ret i8* %594
}

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