#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 == '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' && !(((nextnext) == 'a' || (nextnext) == 'e' ||
                                   (nextnext) == 'i' || (nextnext) == 'o' ||
                                   (nextnext) == 'u'))) {
        s++;
        next = tolower(*(s + 1));
      } else if (next == 'n' && !nextnext) {
        s++;
        next = tolower(*(s + 1));
      } else {
        *r++ = 'K';
      }
      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));
        *r++ = 'W';
      } else 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 != result && *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    1b6f <metaphone+0xa2f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <tolower@plt>
mov    %al,-0x19(%rbp)
cmpb   $0x0,-0x19(%rbp)
je     1243 <metaphone+0x103>
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     1232 <metaphone+0xf2>
movsbl -0x19(%rbp),%eax
cmp    $0x67,%eax
jne    11e4 <metaphone+0xa4>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
je     1232 <metaphone+0xf2>
movsbl -0x19(%rbp),%eax
cmp    $0x70,%eax
jne    11fe <metaphone+0xbe>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
je     1232 <metaphone+0xf2>
movsbl -0x19(%rbp),%eax
cmp    $0x77,%eax
jne    1218 <metaphone+0xd8>
movsbl -0x1a(%rbp),%eax
cmp    $0x72,%eax
je     1232 <metaphone+0xf2>
movsbl -0x19(%rbp),%eax
cmp    $0x61,%eax
jne    123e <metaphone+0xfe>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
jne    123e <metaphone+0xfe>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1243 <metaphone+0x103>
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     1b67 <metaphone+0xa27>
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    12b4 <metaphone+0x174>
movsbl -0x19(%rbp),%eax
cmp    $0x63,%eax
je     12b4 <metaphone+0x174>
jmp    1b56 <metaphone+0xa16>
movsbl -0x19(%rbp),%eax
add    $0xffffffe0,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x5a,%eax
ja     1b51 <metaphone+0xa11>
mov    -0x38(%rbp),%rax
lea    0xd2b(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     12fd <metaphone+0x1bd>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x20,%eax
jne    1319 <metaphone+0x1d9>
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    1b51 <metaphone+0xa11>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jbe    1352 <metaphone+0x212>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1060 <tolower@plt>
movsbl %al,%eax
cmp    $0x6d,%eax
jne    1352 <metaphone+0x212>
movsbl -0x1a(%rbp),%eax
cmp    $0x0,%eax
je     1364 <metaphone+0x224>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x42,(%rax)
jmp    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    1383 <metaphone+0x243>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
je     1390 <metaphone+0x250>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    13c2 <metaphone+0x282>
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    1432 <metaphone+0x2f2>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     13e9 <metaphone+0x2a9>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     13e9 <metaphone+0x2a9>
movsbl -0x1a(%rbp),%eax
cmp    $0x79,%eax
jne    141b <metaphone+0x2db>
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    142d <metaphone+0x2ed>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    1432 <metaphone+0x2f2>
jmp    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x67,%eax
jne    149e <metaphone+0x35e>
movsbl -0x1b(%rbp),%eax
cmp    $0x65,%eax
je     146b <metaphone+0x32b>
movsbl -0x1b(%rbp),%eax
cmp    $0x79,%eax
je     146b <metaphone+0x32b>
movsbl -0x1b(%rbp),%eax
cmp    $0x69,%eax
jne    149e <metaphone+0x35e>
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    14b0 <metaphone+0x370>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x54,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x46,(%rax)
jmp    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     14f3 <metaphone+0x3b3>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     14f3 <metaphone+0x3b3>
movsbl -0x1a(%rbp),%eax
cmp    $0x79,%eax
jne    150a <metaphone+0x3ca>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4a,(%rax)
jmp    15cd <metaphone+0x48d>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    1579 <metaphone+0x439>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
je     1579 <metaphone+0x439>
movsbl -0x1b(%rbp),%eax
cmp    $0x65,%eax
je     1579 <metaphone+0x439>
movsbl -0x1b(%rbp),%eax
cmp    $0x69,%eax
je     1579 <metaphone+0x439>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
je     1579 <metaphone+0x439>
movsbl -0x1b(%rbp),%eax
cmp    $0x75,%eax
je     1579 <metaphone+0x439>
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    15c8 <metaphone+0x488>
movsbl -0x1a(%rbp),%eax
cmp    $0x6e,%eax
jne    15b1 <metaphone+0x471>
cmpb   $0x0,-0x1b(%rbp)
jne    15b1 <metaphone+0x471>
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    15c3 <metaphone+0x483>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    15c8 <metaphone+0x488>
jmp    15cd <metaphone+0x48d>
jmp    1b51 <metaphone+0xa11>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     16b1 <metaphone+0x571>
movsbl -0x1a(%rbp),%eax
cmp    $0x61,%eax
je     16b1 <metaphone+0x571>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     16b1 <metaphone+0x571>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     16b1 <metaphone+0x571>
movsbl -0x1a(%rbp),%eax
cmp    $0x6f,%eax
je     16b1 <metaphone+0x571>
movsbl -0x1a(%rbp),%eax
cmp    $0x75,%eax
je     16b1 <metaphone+0x571>
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     169a <metaphone+0x55a>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x61,%ecx
mov    %al,-0x3a(%rbp)
je     1694 <metaphone+0x554>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x65,%ecx
mov    %al,-0x3a(%rbp)
je     1694 <metaphone+0x554>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x69,%ecx
mov    %al,-0x3a(%rbp)
je     1694 <metaphone+0x554>
movsbl -0x1c(%rbp),%ecx
mov    $0x1,%al
cmp    $0x6f,%ecx
mov    %al,-0x3a(%rbp)
je     1694 <metaphone+0x554>
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     16c3 <metaphone+0x583>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x48,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4a,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1706 <metaphone+0x5c6>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1060 <tolower@plt>
movsbl %al,%eax
cmp    $0x63,%eax
je     1718 <metaphone+0x5d8>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4c,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4d,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4e,(%rax)
jmp    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    17a1 <metaphone+0x661>
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    17b3 <metaphone+0x673>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x50,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x4b,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x52,(%rax)
jmp    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    1825 <metaphone+0x6e5>
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    1896 <metaphone+0x756>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    187f <metaphone+0x73f>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
je     184c <metaphone+0x70c>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
jne    187f <metaphone+0x73f>
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    1891 <metaphone+0x751>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1896 <metaphone+0x756>
jmp    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    18d9 <metaphone+0x799>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
je     18c2 <metaphone+0x782>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
jne    18d9 <metaphone+0x799>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
jmp    194e <metaphone+0x80e>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    1918 <metaphone+0x7d8>
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    1949 <metaphone+0x809>
movsbl -0x1a(%rbp),%eax
cmp    $0x63,%eax
jne    1932 <metaphone+0x7f2>
movsbl -0x1b(%rbp),%eax
cmp    $0x68,%eax
je     1944 <metaphone+0x804>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x54,(%rax)
jmp    1949 <metaphone+0x809>
jmp    194e <metaphone+0x80e>
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x46,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    19b7 <metaphone+0x877>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
jne    19b7 <metaphone+0x877>
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)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x57,(%rax)
jmp    1a0f <metaphone+0x8cf>
movsbl -0x1a(%rbp),%eax
cmp    $0x61,%eax
je     19f8 <metaphone+0x8b8>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     19f8 <metaphone+0x8b8>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     19f8 <metaphone+0x8b8>
movsbl -0x1a(%rbp),%eax
cmp    $0x6f,%eax
je     19f8 <metaphone+0x8b8>
movsbl -0x1a(%rbp),%eax
cmp    $0x75,%eax
jne    1a0a <metaphone+0x8ca>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x57,(%rax)
jmp    1a0f <metaphone+0x8cf>
jmp    1b51 <metaphone+0xa11>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    1a84 <metaphone+0x944>
movsbl -0x1a(%rbp),%eax
cmp    $0x68,%eax
je     1a56 <metaphone+0x916>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
jne    1a6d <metaphone+0x92d>
movsbl -0x1b(%rbp),%eax
cmp    $0x6f,%eax
je     1a56 <metaphone+0x916>
movsbl -0x1b(%rbp),%eax
cmp    $0x61,%eax
jne    1a6d <metaphone+0x92d>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x58,(%rax)
jmp    1a7f <metaphone+0x93f>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1aa8 <metaphone+0x968>
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    1b51 <metaphone+0xa11>
movsbl -0x1a(%rbp),%eax
cmp    $0x61,%eax
je     1aee <metaphone+0x9ae>
movsbl -0x1a(%rbp),%eax
cmp    $0x65,%eax
je     1aee <metaphone+0x9ae>
movsbl -0x1a(%rbp),%eax
cmp    $0x69,%eax
je     1aee <metaphone+0x9ae>
movsbl -0x1a(%rbp),%eax
cmp    $0x6f,%eax
je     1aee <metaphone+0x9ae>
movsbl -0x1a(%rbp),%eax
cmp    $0x75,%eax
jne    1b00 <metaphone+0x9c0>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x59,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x53,(%rax)
jmp    1b51 <metaphone+0xa11>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
je     1b4c <metaphone+0xa0c>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     1b4c <metaphone+0xa0c>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x20,(%rax)
jmp    1b51 <metaphone+0xa11>
jmp    1b56 <metaphone+0xa16>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1262 <metaphone+0x122>
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,%rbp
call   1040 <strlen@plt>
lea    (%rax,%rax,1),%edi
add    $0x1,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,0x8(%rsp)
test   %rax,%rax
je     15c3 <metaphone+0x483>
movsbl 0x0(%rbp),%edi
call   1060 <tolower@plt>
test   %al,%al
je     11bd <metaphone+0x7d>
mov    %eax,%ebx
movsbl 0x1(%rbp),%edi
call   1060 <tolower@plt>
cmp    $0x6b,%bl
jne    1195 <metaphone+0x55>
cmp    $0x6e,%al
je     11b9 <metaphone+0x79>
cmp    $0x67,%bl
jne    119e <metaphone+0x5e>
cmp    $0x6e,%al
je     11b9 <metaphone+0x79>
cmp    $0x70,%bl
jne    11a7 <metaphone+0x67>
cmp    $0x6e,%al
je     11b9 <metaphone+0x79>
cmp    $0x77,%bl
jne    11b0 <metaphone+0x70>
cmp    $0x72,%al
je     11b9 <metaphone+0x79>
cmp    $0x61,%bl
jne    11bd <metaphone+0x7d>
cmp    $0x65,%al
jne    11bd <metaphone+0x7d>
add    $0x1,%rbp
movsbl 0x0(%rbp),%edi
call   1060 <tolower@plt>
test   %al,%al
je     15c3 <metaphone+0x483>
mov    %eax,%ebx
mov    0x8(%rsp),%r14
mov    %rbp,%r15
jmp    1204 <metaphone+0xc4>
call   1030 <toupper@plt>
mov    %al,(%r14)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r14
add    $0x1,%r15
mov    %r12d,%ebx
test   %r12b,%r12b
je     15c3 <metaphone+0x483>
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),%r13
lea    0xdb6(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
cmp    %rbp,%r15
je     11da <metaphone+0x9a>
cmpb   $0x20,-0x1(%r15)
je     11da <metaphone+0x9a>
jmp    11f4 <metaphone+0xb4>
movb   $0x46,(%r14)
jmp    11f0 <metaphone+0xb0>
mov    0x8(%rsp),%rax
cmp    %rax,%r14
je     14e6 <metaphone+0x3a6>
cmpb   $0x20,(%r14)
je     11f4 <metaphone+0xb4>
movb   $0x20,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %rbp,%r15
jbe    12a8 <metaphone+0x168>
movsbl -0x1(%r15),%edi
call   1060 <tolower@plt>
cmp    $0x6d,%al
jne    12a8 <metaphone+0x168>
test   %r12b,%r12b
je     15c3 <metaphone+0x483>
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     1408 <metaphone+0x2c8>
test   %al,%al
jne    1408 <metaphone+0x2c8>
mov    %r12d,%eax
add    $0x9b,%al
cmp    $0x14,%al
ja     159b <metaphone+0x45b>
movzbl %al,%eax
mov    $0x100011,%ecx
bt     %rax,%rcx
jae    159b <metaphone+0x45b>
movb   $0x53,(%r14)
add    $0x1,%r14
jmp    1570 <metaphone+0x430>
cmp    $0x67,%r12b
jne    155d <metaphone+0x41d>
add    $0x9b,%al
cmp    $0x14,%al
ja     155d <metaphone+0x41d>
movzbl %al,%eax
mov    $0x100011,%ecx
bt     %rax,%rcx
jae    155d <metaphone+0x41d>
movb   $0x4a,(%r14)
jmp    151f <metaphone+0x3df>
lea    -0x65(%r12),%ecx
cmp    $0x14,%cl
ja     1566 <metaphone+0x426>
movzbl %cl,%ecx
lea    0xe29(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movb   $0x4a,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %rbp,%r15
je     137b <metaphone+0x23b>
mov    %r12d,%eax
add    $0x9f,%al
ror    %al
cmp    $0xa,%al
ja     15b4 <metaphone+0x474>
movzbl %al,%eax
mov    $0x495,%ecx
bt     %rax,%rcx
jae    15b4 <metaphone+0x474>
movb   $0x48,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    %rbp,%r15
je     159b <metaphone+0x45b>
movsbl -0x1(%r15),%edi
call   1060 <tolower@plt>
cmp    $0x63,%al
je     11f4 <metaphone+0xb4>
jmp    159b <metaphone+0x45b>
movb   $0x4c,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x4d,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x4e,(%r14)
jmp    11f0 <metaphone+0xb0>
mov    %rbp,0x10(%rsp)
lea    0x1(%r14),%rbp
cmp    $0x68,%r12b
jne    14ab <metaphone+0x36b>
movb   $0x46,(%r14)
movsbl 0x0(%r13),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %rbx,%r15
jmp    14af <metaphone+0x36f>
movb   $0x52,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    $0x69,%r12b
je     1513 <metaphone+0x3d3>
cmp    $0x68,%r12b
jne    1538 <metaphone+0x3f8>
movb   $0x58,(%r14)
add    $0x1,%r14
jmp    1570 <metaphone+0x430>
cmp    $0x68,%r12b
je     1541 <metaphone+0x401>
cmp    $0x69,%r12b
jne    154b <metaphone+0x40b>
cmp    $0x6f,%al
je     1435 <metaphone+0x2f5>
cmp    $0x61,%al
jne    155d <metaphone+0x41d>
movb   $0x58,(%r14)
add    $0x1,%r14
mov    $0x69,%r12b
jmp    11f4 <metaphone+0xb4>
cmp    %rbp,%r15
jne    14bc <metaphone+0x37c>
cmp    $0x68,%r12b
jne    14bc <metaphone+0x37c>
movsbl 0x0(%r13),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
movb   $0x57,(%r14)
add    $0x1,%r14
mov    %rbx,%r15
jmp    11f4 <metaphone+0xb4>
cmp    %rbp,%r15
je     14ee <metaphone+0x3ae>
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    %rbp,%r14
mov    0x10(%rsp),%rbp
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   $0x57,(%r14)
jmp    11f0 <metaphone+0xb0>
mov    %rax,%r14
jmp    11f4 <metaphone+0xb4>
cmp    $0x68,%r12b
je     150a <metaphone+0x3ca>
cmp    $0x69,%r12b
jne    15a4 <metaphone+0x464>
cmp    $0x6f,%al
je     150a <metaphone+0x3ca>
cmp    $0x61,%al
jne    15a4 <metaphone+0x464>
movb   $0x58,(%r14)
jmp    15a8 <metaphone+0x468>
cmp    $0x6f,%al
je     151b <metaphone+0x3db>
cmp    $0x61,%al
jne    1538 <metaphone+0x3f8>
movb   $0x58,(%r14)
add    $0x1,%r14
movsbl 0x3(%r15),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %r13,%r15
jmp    11f4 <metaphone+0xb4>
movb   $0x53,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x30,(%r14)
add    $0x1,%r14
jmp    1570 <metaphone+0x430>
cmp    $0x63,%r12b
jne    155d <metaphone+0x41d>
cmp    $0x68,%al
jne    155d <metaphone+0x41d>
mov    $0x63,%r12b
jmp    11f4 <metaphone+0xb4>
movb   $0x54,(%r14)
jmp    11f0 <metaphone+0xb0>
cmp    $0x6e,%r12b
jne    159b <metaphone+0x45b>
test   %al,%al
jne    159b <metaphone+0x45b>
movsbl 0x0(%r13),%edi
call   1060 <tolower@plt>
mov    %eax,%r12d
mov    %rbx,%r15
jmp    11f4 <metaphone+0xb4>
add    $0x9f,%al
ror    %al
cmp    $0xa,%al
ja     1570 <metaphone+0x430>
movzbl %al,%eax
mov    $0x495,%ecx
bt     %rax,%rcx
jae    1570 <metaphone+0x430>
movb   $0x4b,(%r14)
jmp    11f0 <metaphone+0xb0>
movb   $0x53,(%r14)
add    $0x1,%r14
mov    %rbp,%r15
jmp    11f4 <metaphone+0xb4>
movsbl -0x1(%r15),%edi
call   1060 <tolower@plt>
jmp    11f4 <metaphone+0xb4>
mov    0x8(%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 %598
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 %73
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 %69, 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 %69, 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 %69, label %53
53: ; preds = %49, %45
%54 = load i8, i8* %5
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %55, 119
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, 114
br i1 %60, label %69, label %61
61: ; preds = %57, %53
%62 = load i8, i8* %5
%63 = sext i8 %62 to i32
%64 = icmp eq i32 %63, 97
br i1 %64, label %65, label %72
65: ; preds = %61
%66 = load i8, i8* %6
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %67, 101
br i1 %68, label %69, label %72
69: ; preds = %65, %57, %49, %41, %33
%70 = load i8*, i8** %3
%71 = getelementptr inbounds i8, i8* %70, i32 1
store i8* %71, i8** %3
br label %72
72: ; preds = %69, %65, %61
br label %73
73: ; preds = %72, %19
%74 = load i8*, i8** %3
%75 = load i8, i8* %74
%76 = call signext i8 @tolower(i8 signext %75)
store i8 %76, i8* %6
%77 = load i8*, i8** %3
store i8* %77, i8** %4
%78 = load i8*, i8** %9
store i8* %78, i8** %10
br label %79
79: ; preds = %593, %73
%80 = load i8, i8* %6
%81 = icmp ne i8 %80, 0
br i1 %81, label %82, label %596
82: ; preds = %79
%83 = load i8, i8* %6
store i8 %83, i8* %5
%84 = load i8*, i8** %4
%85 = getelementptr inbounds i8, i8* %84, i64 1
%86 = load i8, i8* %85
%87 = call signext i8 @tolower(i8 signext %86)
store i8 %87, i8* %6
%88 = load i8*, i8** %4
%89 = getelementptr inbounds i8, i8* %88, i64 2
%90 = load i8, i8* %89
%91 = call signext i8 @tolower(i8 signext %90)
store i8 %91, i8* %7
%92 = load i8, i8* %5
%93 = sext i8 %92 to i32
%94 = load i8, i8* %6
%95 = sext i8 %94 to i32
%96 = icmp eq i32 %93, %95
br i1 %96, label %97, label %102
97: ; preds = %82
%98 = load i8, i8* %5
%99 = sext i8 %98 to i32
%100 = icmp ne i32 %99, 99
br i1 %100, label %101, label %102
101: ; preds = %97
br label %593
102: ; preds = %97, %82
%103 = load i8, i8* %5
%104 = sext i8 %103 to i32
switch i32 %104, label %592 [
i32 97, label %105
i32 101, label %105
i32 105, label %105
i32 111, label %105
i32 117, label %105
i32 98, label %122
i32 99, label %141
i32 100, label %186
i32 102, label %215
i32 103, label %218
i32 104, label %284
i32 106, label %347
i32 107, label %350
i32 108, label %365
i32 109, label %368
i32 110, label %371
i32 112, label %374
i32 113, label %390
i32 114, label %393
i32 115, label %396
i32 116, label %434
i32 118, label %475
i32 119, label %478
i32 120, label %519
i32 121, label %552
i32 122, label %576
i32 32, label %579
]
105: ; preds = %102, %102, %102, %102, %102
%106 = load i8*, i8** %4
%107 = load i8*, i8** %3
%108 = icmp eq i8* %106, %107
br i1 %108, label %115, label %109
109: ; preds = %105
%110 = load i8*, i8** %4
%111 = getelementptr inbounds i8, i8* %110, i64 -1
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = icmp eq i32 %113, 32
br i1 %114, label %115, label %121
115: ; preds = %109, %105
%116 = load i8, i8* %5
%117 = call i32 @toupper(i8 signext %116)
%118 = trunc i32 %117 to i8
%119 = load i8*, i8** %10
%120 = getelementptr inbounds i8, i8* %119, i32 1
store i8* %120, i8** %10
store i8 %118, i8* %119
br label %121
121: ; preds = %115, %109
br label %592
122: ; preds = %102
%123 = load i8*, i8** %4
%124 = load i8*, i8** %3
%125 = icmp ugt i8* %123, %124
br i1 %125, label %126, label %137
126: ; preds = %122
%127 = load i8*, i8** %4
%128 = getelementptr inbounds i8, i8* %127, i64 -1
%129 = load i8, i8* %128
%130 = call signext i8 @tolower(i8 signext %129)
%131 = sext i8 %130 to i32
%132 = icmp eq i32 %131, 109
br i1 %132, label %133, label %137
133: ; preds = %126
%134 = load i8, i8* %6
%135 = sext i8 %134 to i32
%136 = icmp ne i32 %135, 0
br i1 %136, label %137, label %140
137: ; preds = %133, %126, %122
%138 = load i8*, i8** %10
%139 = getelementptr inbounds i8, i8* %138, i32 1
store i8* %139, i8** %10
store i8 66, i8* %138
br label %140
140: ; preds = %137, %133
br label %592
141: ; preds = %102
%142 = load i8, i8* %6
%143 = sext i8 %142 to i32
%144 = icmp eq i32 %143, 105
br i1 %144, label %145, label %149
145: ; preds = %141
%146 = load i8, i8* %7
%147 = sext i8 %146 to i32
%148 = icmp eq i32 %147, 97
br i1 %148, label %153, label %149
149: ; preds = %145, %141
%150 = load i8, i8* %6
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %151, 104
br i1 %152, label %153, label %161
153: ; preds = %149, %145
%154 = load i8*, i8** %10
%155 = getelementptr inbounds i8, i8* %154, i32 1
store i8* %155, i8** %10
store i8 88, i8* %154
%156 = load i8*, i8** %4
%157 = getelementptr inbounds i8, i8* %156, i32 1
store i8* %157, i8** %4
%158 = getelementptr inbounds i8, i8* %157, i64 1
%159 = load i8, i8* %158
%160 = call signext i8 @tolower(i8 signext %159)
store i8 %160, i8* %6
br label %185
161: ; preds = %149
%162 = load i8, i8* %6
%163 = sext i8 %162 to i32
%164 = icmp eq i32 %163, 105
br i1 %164, label %173, label %165
165: ; preds = %161
%166 = load i8, i8* %6
%167 = sext i8 %166 to i32
%168 = icmp eq i32 %167, 101
br i1 %168, label %173, label %169
169: ; preds = %165
%170 = load i8, i8* %6
%171 = sext i8 %170 to i32
%172 = icmp eq i32 %171, 121
br i1 %172, label %173, label %181
173: ; preds = %169, %165, %161
%174 = load i8*, i8** %10
%175 = getelementptr inbounds i8, i8* %174, i32 1
store i8* %175, i8** %10
store i8 83, i8* %174
%176 = load i8*, i8** %4
%177 = getelementptr inbounds i8, i8* %176, i32 1
store i8* %177, i8** %4
%178 = getelementptr inbounds i8, i8* %177, i64 1
%179 = load i8, i8* %178
%180 = call signext i8 @tolower(i8 signext %179)
store i8 %180, i8* %6
br label %184
181: ; preds = %169
%182 = load i8*, i8** %10
%183 = getelementptr inbounds i8, i8* %182, i32 1
store i8* %183, i8** %10
store i8 75, i8* %182
br label %184
184: ; preds = %181, %173
br label %185
185: ; preds = %184, %153
br label %592
186: ; preds = %102
%187 = load i8, i8* %6
%188 = sext i8 %187 to i32
%189 = icmp eq i32 %188, 103
br i1 %189, label %190, label %211
190: ; preds = %186
%191 = load i8, i8* %7
%192 = sext i8 %191 to i32
%193 = icmp eq i32 %192, 101
br i1 %193, label %202, label %194
194: ; preds = %190
%195 = load i8, i8* %7
%196 = sext i8 %195 to i32
%197 = icmp eq i32 %196, 121
br i1 %197, label %202, label %198
198: ; preds = %194
%199 = load i8, i8* %7
%200 = sext i8 %199 to i32
%201 = icmp eq i32 %200, 105
br i1 %201, label %202, label %211
202: ; preds = %198, %194, %190
%203 = load i8*, i8** %10
%204 = getelementptr inbounds i8, i8* %203, i32 1
store i8* %204, i8** %10
store i8 74, i8* %203
%205 = load i8*, i8** %4
%206 = getelementptr inbounds i8, i8* %205, i64 2
store i8* %206, i8** %4
%207 = load i8*, i8** %4
%208 = getelementptr inbounds i8, i8* %207, i64 1
%209 = load i8, i8* %208
%210 = call signext i8 @tolower(i8 signext %209)
store i8 %210, i8* %6
br label %214
211: ; preds = %198, %186
%212 = load i8*, i8** %10
%213 = getelementptr inbounds i8, i8* %212, i32 1
store i8* %213, i8** %10
store i8 84, i8* %212
br label %214
214: ; preds = %211, %202
br label %592
215: ; preds = %102
%216 = load i8*, i8** %10
%217 = getelementptr inbounds i8, i8* %216, i32 1
store i8* %217, i8** %10
store i8 70, i8* %216
br label %592
218: ; preds = %102
%219 = load i8, i8* %6
%220 = sext i8 %219 to i32
%221 = icmp eq i32 %220, 105
br i1 %221, label %230, label %222
222: ; preds = %218
%223 = load i8, i8* %6
%224 = sext i8 %223 to i32
%225 = icmp eq i32 %224, 101
br i1 %225, label %230, label %226
226: ; preds = %222
%227 = load i8, i8* %6
%228 = sext i8 %227 to i32
%229 = icmp eq i32 %228, 121
br i1 %229, label %230, label %233
230: ; preds = %226, %222, %218
%231 = load i8*, i8** %10
%232 = getelementptr inbounds i8, i8* %231, i32 1
store i8* %232, i8** %10
store i8 74, i8* %231
br label %283
233: ; preds = %226
%234 = load i8, i8* %6
%235 = sext i8 %234 to i32
%236 = icmp eq i32 %235, 104
br i1 %236, label %237, label %264
237: ; preds = %233
%238 = load i8, i8* %7
%239 = sext i8 %238 to i32
%240 = icmp eq i32 %239, 97
br i1 %240, label %264, label %241
241: ; preds = %237
%242 = load i8, i8* %7
%243 = sext i8 %242 to i32
%244 = icmp eq i32 %243, 101
br i1 %244, label %264, label %245
245: ; preds = %241
%246 = load i8, i8* %7
%247 = sext i8 %246 to i32
%248 = icmp eq i32 %247, 105
br i1 %248, label %264, label %249
249: ; preds = %245
%250 = load i8, i8* %7
%251 = sext i8 %250 to i32
%252 = icmp eq i32 %251, 111
br i1 %252, label %264, label %253
253: ; preds = %249
%254 = load i8, i8* %7
%255 = sext i8 %254 to i32
%256 = icmp eq i32 %255, 117
br i1 %256, label %264, label %257
257: ; preds = %253
%258 = load i8*, i8** %4
%259 = getelementptr inbounds i8, i8* %258, i32 1
store i8* %259, i8** %4
%260 = load i8*, i8** %4
%261 = getelementptr inbounds i8, i8* %260, i64 1
%262 = load i8, i8* %261
%263 = call signext i8 @tolower(i8 signext %262)
store i8 %263, i8* %6
br label %282
264: ; preds = %253, %249, %245, %241, %237, %233
%265 = load i8, i8* %6
%266 = sext i8 %265 to i32
%267 = icmp eq i32 %266, 110
br i1 %267, label %268, label %278
268: ; preds = %264
%269 = load i8, i8* %7
%270 = icmp ne i8 %269, 0
br i1 %270, label %278, label %271
271: ; preds = %268
%272 = load i8*, i8** %4
%273 = getelementptr inbounds i8, i8* %272, i32 1
store i8* %273, i8** %4
%274 = load i8*, i8** %4
%275 = getelementptr inbounds i8, i8* %274, i64 1
%276 = load i8, i8* %275
%277 = call signext i8 @tolower(i8 signext %276)
store i8 %277, i8* %6
br label %281
278: ; preds = %268, %264
%279 = load i8*, i8** %10
%280 = getelementptr inbounds i8, i8* %279, i32 1
store i8* %280, i8** %10
store i8 75, i8* %279
br label %281
281: ; preds = %278, %271
br label %282
282: ; preds = %281, %257
br label %283
283: ; preds = %282, %230
br label %592
284: ; preds = %102
%285 = load i8*, i8** %4
%286 = load i8*, i8** %3
%287 = icmp eq i8* %285, %286
br i1 %287, label %343, label %288
288: ; preds = %284
%289 = load i8, i8* %6
%290 = sext i8 %289 to i32
%291 = icmp eq i32 %290, 97
br i1 %291, label %343, label %292
292: ; preds = %288
%293 = load i8, i8* %6
%294 = sext i8 %293 to i32
%295 = icmp eq i32 %294, 101
br i1 %295, label %343, label %296
296: ; preds = %292
%297 = load i8, i8* %6
%298 = sext i8 %297 to i32
%299 = icmp eq i32 %298, 105
br i1 %299, label %343, label %300
300: ; preds = %296
%301 = load i8, i8* %6
%302 = sext i8 %301 to i32
%303 = icmp eq i32 %302, 111
br i1 %303, label %343, label %304
304: ; preds = %300
%305 = load i8, i8* %6
%306 = sext i8 %305 to i32
%307 = icmp eq i32 %306, 117
br i1 %307, label %343, label %308
308: ; preds = %304
%309 = load i8*, i8** %4
%310 = getelementptr inbounds i8, i8* %309, i64 -1
%311 = load i8, i8* %310
%312 = call signext i8 @tolower(i8 signext %311)
%313 = sext i8 %312 to i32
%314 = icmp ne i32 %313, 0
br i1 %314, label %315, label %337
315: ; preds = %308
%316 = load i8, i8* %8
%317 = sext i8 %316 to i32
%318 = icmp eq i32 %317, 97
br i1 %318, label %335, label %319
319: ; preds = %315
%320 = load i8, i8* %8
%321 = sext i8 %320 to i32
%322 = icmp eq i32 %321, 101
br i1 %322, label %335, label %323
323: ; preds = %319
%324 = load i8, i8* %8
%325 = sext i8 %324 to i32
%326 = icmp eq i32 %325, 105
br i1 %326, label %335, label %327
327: ; preds = %323
%328 = load i8, i8* %8
%329 = sext i8 %328 to i32
%330 = icmp eq i32 %329, 111
br i1 %330, label %335, label %331
331: ; preds = %327
%332 = load i8, i8* %8
%333 = sext i8 %332 to i32
%334 = icmp eq i32 %333, 117
br label %335
335: ; preds = %331, %327, %323, %319, %315
%336 = phi i1 [ true, %327 ], [ true, %323 ], [ true, %319 ], [ true, %315 ], [ %334, %331 ]
br label %337
337: ; preds = %335, %308
%338 = phi i1 [ false, %308 ], [ %336, %335 ]
%339 = zext i1 %338 to i32
%340 = trunc i32 %339 to i8
store i8 %340, i8* %8
%341 = sext i8 %340 to i32
%342 = icmp ne i32 %341, 0
br i1 %342, label %343, label %346
343: ; preds = %337, %304, %300, %296, %292, %288, %284
%344 = load i8*, i8** %10
%345 = getelementptr inbounds i8, i8* %344, i32 1
store i8* %345, i8** %10
store i8 72, i8* %344
br label %346
346: ; preds = %343, %337
br label %592
347: ; preds = %102
%348 = load i8*, i8** %10
%349 = getelementptr inbounds i8, i8* %348, i32 1
store i8* %349, i8** %10
store i8 74, i8* %348
br label %592
350: ; preds = %102
%351 = load i8*, i8** %4
%352 = load i8*, i8** %3
%353 = icmp eq i8* %351, %352
br i1 %353, label %361, label %354
354: ; preds = %350
%355 = load i8*, i8** %4
%356 = getelementptr inbounds i8, i8* %355, i64 -1
%357 = load i8, i8* %356
%358 = call signext i8 @tolower(i8 signext %357)
%359 = sext i8 %358 to i32
%360 = icmp ne i32 %359, 99
br i1 %360, label %361, label %364
361: ; preds = %354, %350
%362 = load i8*, i8** %10
%363 = getelementptr inbounds i8, i8* %362, i32 1
store i8* %363, i8** %10
store i8 75, i8* %362
br label %364
364: ; preds = %361, %354
br label %592
365: ; preds = %102
%366 = load i8*, i8** %10
%367 = getelementptr inbounds i8, i8* %366, i32 1
store i8* %367, i8** %10
store i8 76, i8* %366
br label %592
368: ; preds = %102
%369 = load i8*, i8** %10
%370 = getelementptr inbounds i8, i8* %369, i32 1
store i8* %370, i8** %10
store i8 77, i8* %369
br label %592
371: ; preds = %102
%372 = load i8*, i8** %10
%373 = getelementptr inbounds i8, i8* %372, i32 1
store i8* %373, i8** %10
store i8 78, i8* %372
br label %592
374: ; preds = %102
%375 = load i8, i8* %6
%376 = sext i8 %375 to i32
%377 = icmp eq i32 %376, 104
br i1 %377, label %378, label %386
378: ; preds = %374
%379 = load i8*, i8** %10
%380 = getelementptr inbounds i8, i8* %379, i32 1
store i8* %380, i8** %10
store i8 70, i8* %379
%381 = load i8*, i8** %4
%382 = getelementptr inbounds i8, i8* %381, i32 1
store i8* %382, i8** %4
%383 = getelementptr inbounds i8, i8* %382, i64 1
%384 = load i8, i8* %383
%385 = call signext i8 @tolower(i8 signext %384)
store i8 %385, i8* %6
br label %389
386: ; preds = %374
%387 = load i8*, i8** %10
%388 = getelementptr inbounds i8, i8* %387, i32 1
store i8* %388, i8** %10
store i8 80, i8* %387
br label %389
389: ; preds = %386, %378
br label %592
390: ; preds = %102
%391 = load i8*, i8** %10
%392 = getelementptr inbounds i8, i8* %391, i32 1
store i8* %392, i8** %10
store i8 75, i8* %391
br label %592
393: ; preds = %102
%394 = load i8*, i8** %10
%395 = getelementptr inbounds i8, i8* %394, i32 1
store i8* %395, i8** %10
store i8 82, i8* %394
br label %592
396: ; preds = %102
%397 = load i8, i8* %6
%398 = sext i8 %397 to i32
%399 = icmp eq i32 %398, 104
br i1 %399, label %400, label %408
400: ; preds = %396
%401 = load i8*, i8** %10
%402 = getelementptr inbounds i8, i8* %401, i32 1
store i8* %402, i8** %10
store i8 88, i8* %401
%403 = load i8*, i8** %4
%404 = getelementptr inbounds i8, i8* %403, i32 1
store i8* %404, i8** %4
%405 = getelementptr inbounds i8, i8* %404, i64 1
%406 = load i8, i8* %405
%407 = call signext i8 @tolower(i8 signext %406)
store i8 %407, i8* %6
br label %433
408: ; preds = %396
%409 = load i8, i8* %6
%410 = sext i8 %409 to i32
%411 = icmp eq i32 %410, 105
br i1 %411, label %412, label %429
412: ; preds = %408
%413 = load i8, i8* %7
%414 = sext i8 %413 to i32
%415 = icmp eq i32 %414, 111
br i1 %415, label %420, label %416
416: ; preds = %412
%417 = load i8, i8* %7
%418 = sext i8 %417 to i32
%419 = icmp eq i32 %418, 97
br i1 %419, label %420, label %429
420: ; preds = %416, %412
%421 = load i8*, i8** %10
%422 = getelementptr inbounds i8, i8* %421, i32 1
store i8* %422, i8** %10
store i8 88, i8* %421
%423 = load i8*, i8** %4
%424 = getelementptr inbounds i8, i8* %423, i64 2
store i8* %424, i8** %4
%425 = load i8*, i8** %4
%426 = getelementptr inbounds i8, i8* %425, i64 1
%427 = load i8, i8* %426
%428 = call signext i8 @tolower(i8 signext %427)
store i8 %428, i8* %6
br label %432
429: ; preds = %416, %408
%430 = load i8*, i8** %10
%431 = getelementptr inbounds i8, i8* %430, i32 1
store i8* %431, i8** %10
store i8 83, i8* %430
br label %432
432: ; preds = %429, %420
br label %433
433: ; preds = %432, %400
br label %592
434: ; preds = %102
%435 = load i8, i8* %6
%436 = sext i8 %435 to i32
%437 = icmp eq i32 %436, 105
br i1 %437, label %438, label %449
438: ; preds = %434
%439 = load i8, i8* %7
%440 = sext i8 %439 to i32
%441 = icmp eq i32 %440, 97
br i1 %441, label %446, label %442
442: ; preds = %438
%443 = load i8, i8* %7
%444 = sext i8 %443 to i32
%445 = icmp eq i32 %444, 111
br i1 %445, label %446, label %449
446: ; preds = %442, %438
%447 = load i8*, i8** %10
%448 = getelementptr inbounds i8, i8* %447, i32 1
store i8* %448, i8** %10
store i8 88, i8* %447
br label %474
449: ; preds = %442, %434
%450 = load i8, i8* %6
%451 = sext i8 %450 to i32
%452 = icmp eq i32 %451, 104
br i1 %452, label %453, label %461
453: ; preds = %449
%454 = load i8*, i8** %10
%455 = getelementptr inbounds i8, i8* %454, i32 1
store i8* %455, i8** %10
store i8 48, i8* %454
%456 = load i8*, i8** %4
%457 = getelementptr inbounds i8, i8* %456, i32 1
store i8* %457, i8** %4
%458 = getelementptr inbounds i8, i8* %457, i64 1
%459 = load i8, i8* %458
%460 = call signext i8 @tolower(i8 signext %459)
store i8 %460, i8* %6
br label %473
461: ; preds = %449
%462 = load i8, i8* %6
%463 = sext i8 %462 to i32
%464 = icmp ne i32 %463, 99
br i1 %464, label %469, label %465
465: ; preds = %461
%466 = load i8, i8* %7
%467 = sext i8 %466 to i32
%468 = icmp ne i32 %467, 104
br i1 %468, label %469, label %472
469: ; preds = %465, %461
%470 = load i8*, i8** %10
%471 = getelementptr inbounds i8, i8* %470, i32 1
store i8* %471, i8** %10
store i8 84, i8* %470
br label %472
472: ; preds = %469, %465
br label %473
473: ; preds = %472, %453
br label %474
474: ; preds = %473, %446
br label %592
475: ; preds = %102
%476 = load i8*, i8** %10
%477 = getelementptr inbounds i8, i8* %476, i32 1
store i8* %477, i8** %10
store i8 70, i8* %476
br label %592
478: ; preds = %102
%479 = load i8*, i8** %4
%480 = load i8*, i8** %3
%481 = icmp eq i8* %479, %480
br i1 %481, label %482, label %494
482: ; preds = %478
%483 = load i8, i8* %6
%484 = sext i8 %483 to i32
%485 = icmp eq i32 %484, 104
br i1 %485, label %486, label %494
486: ; preds = %482
%487 = load i8*, i8** %4
%488 = getelementptr inbounds i8, i8* %487, i32 1
store i8* %488, i8** %4
%489 = getelementptr inbounds i8, i8* %488, i64 1
%490 = load i8, i8* %489
%491 = call signext i8 @tolower(i8 signext %490)
store i8 %491, i8* %6
%492 = load i8*, i8** %10
%493 = getelementptr inbounds i8, i8* %492, i32 1
store i8* %493, i8** %10
store i8 87, i8* %492
br label %518
494: ; preds = %482, %478
%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 %518
518: ; preds = %517, %486
br label %592
519: ; preds = %102
%520 = load i8*, i8** %4
%521 = load i8*, i8** %3
%522 = icmp eq i8* %520, %521
br i1 %522, label %523, label %546
523: ; preds = %519
%524 = load i8, i8* %6
%525 = sext i8 %524 to i32
%526 = icmp eq i32 %525, 104
br i1 %526, label %539, label %527
527: ; preds = %523
%528 = load i8, i8* %6
%529 = sext i8 %528 to i32
%530 = icmp eq i32 %529, 105
br i1 %530, label %531, label %542
531: ; preds = %527
%532 = load i8, i8* %7
%533 = sext i8 %532 to i32
%534 = icmp eq i32 %533, 111
br i1 %534, label %539, label %535
535: ; preds = %531
%536 = load i8, i8* %7
%537 = sext i8 %536 to i32
%538 = icmp eq i32 %537, 97
br i1 %538, label %539, label %542
539: ; preds = %535, %531, %523
%540 = load i8*, i8** %10
%541 = getelementptr inbounds i8, i8* %540, i32 1
store i8* %541, i8** %10
store i8 88, i8* %540
br label %545
542: ; preds = %535, %527
%543 = load i8*, i8** %10
%544 = getelementptr inbounds i8, i8* %543, i32 1
store i8* %544, i8** %10
store i8 83, i8* %543
br label %545
545: ; preds = %542, %539
br label %551
546: ; preds = %519
%547 = load i8*, i8** %10
%548 = getelementptr inbounds i8, i8* %547, i32 1
store i8* %548, i8** %10
store i8 75, i8* %547
%549 = load i8*, i8** %10
%550 = getelementptr inbounds i8, i8* %549, i32 1
store i8* %550, i8** %10
store i8 83, i8* %549
br label %551
551: ; preds = %546, %545
br label %592
552: ; preds = %102
%553 = load i8, i8* %6
%554 = sext i8 %553 to i32
%555 = icmp eq i32 %554, 97
br i1 %555, label %572, label %556
556: ; preds = %552
%557 = load i8, i8* %6
%558 = sext i8 %557 to i32
%559 = icmp eq i32 %558, 101
br i1 %559, label %572, label %560
560: ; preds = %556
%561 = load i8, i8* %6
%562 = sext i8 %561 to i32
%563 = icmp eq i32 %562, 105
br i1 %563, label %572, label %564
564: ; preds = %560
%565 = load i8, i8* %6
%566 = sext i8 %565 to i32
%567 = icmp eq i32 %566, 111
br i1 %567, label %572, label %568
568: ; preds = %564
%569 = load i8, i8* %6
%570 = sext i8 %569 to i32
%571 = icmp eq i32 %570, 117
br i1 %571, label %572, label %575
572: ; preds = %568, %564, %560, %556, %552
%573 = load i8*, i8** %10
%574 = getelementptr inbounds i8, i8* %573, i32 1
store i8* %574, i8** %10
store i8 89, i8* %573
br label %575
575: ; preds = %572, %568
br label %592
576: ; preds = %102
%577 = load i8*, i8** %10
%578 = getelementptr inbounds i8, i8* %577, i32 1
store i8* %578, i8** %10
store i8 83, i8* %577
br label %592
579: ; preds = %102
%580 = load i8*, i8** %10
%581 = load i8*, i8** %9
%582 = icmp ne i8* %580, %581
br i1 %582, label %583, label %591
583: ; preds = %579
%584 = load i8*, i8** %10
%585 = load i8, i8* %584
%586 = sext i8 %585 to i32
%587 = icmp ne i32 %586, 32
br i1 %587, label %588, label %591
588: ; preds = %583
%589 = load i8*, i8** %10
%590 = getelementptr inbounds i8, i8* %589, i32 1
store i8* %590, i8** %10
store i8 32, i8* %589
br label %591
591: ; preds = %588, %583, %579
br label %592
592: ; preds = %102, %591, %576, %575, %551, %518, %475, %474, %433, %393, %390, %389, %371, %368, %365, %364, %347, %346, %283, %215, %214, %185, %140, %121
br label %593
593: ; preds = %592, %101
%594 = load i8*, i8** %4
%595 = getelementptr inbounds i8, i8* %594, i32 1
store i8* %595, i8** %4
br label %79
596: ; preds = %79
%597 = load i8*, i8** %9
store i8* %597, i8** %2
br label %598
598: ; preds = %596, %18
%599 = load i8*, i8** %2
ret i8* %599
}

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