#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 /*<<< orphan*/ free(char *);
int /*<<< orphan*/ get_token_llvm(char *, char *);
int /*<<< orphan*/ strcat(char *, char *);
scalar_t__ strcmp(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
scalar_t__ strlen(char *);
int get_irtype_llvm(char *line, char *token) {
  char *result;
  int level = 0;
  result = calloc(1024, 1);
  get_token_llvm(line, token);
  strcpy(result, "");
  if (!strcmp(token, "nsw") || !strcmp(token, "nuw")) {
    get_token_llvm(line, token);
  }
  if (!strcmp(token, "nsw") || !strcmp(token, "nuw")) {
    get_token_llvm(line, token);
  }
  if (!strcmp(token, "<")) {
    strcat(result, token);
    level = 1;
    do {
      get_token_llvm(line, token);
      if (!strcmp(token, ""))
        break;
      if (strlen(result) > 0)
        strcat(result, " ");
      strcat(result, token);
      if (!strcmp(token, "<"))
        level++;
      if (!strcmp(token, ">"))
        level--;
      if (!strcmp(token, ">*"))
        level--;
    } while ((strcmp(token, ">") && strcmp(token, ">*")) || (level != 0));
    strcpy(token, result);
  } else if (!strcmp(token, "[")) {
    strcat(result, token);
    level = 1;
    do {
      get_token_llvm(line, token);
      if (!strcmp(token, ""))
        break;
      if (strlen(result) > 0)
        strcat(result, " ");
      strcat(result, token);
      if (!strcmp(token, "["))
        level++;
      if (!strcmp(token, "]"))
        level--;
      if (!strcmp(token, "]*"))
        level--;
    } while ((strcmp(token, "]") && strcmp(token, "]*")) || (level != 0));
    strcpy(token, result);
  } else if (!strcmp(token, "{")) {
    strcat(result, token);
    level = 1;
    do {
      get_token_llvm(line, token);
      if (!strcmp(token, ""))
        break;
      if (strlen(result) > 0)
        strcat(result, " ");
      strcat(result, token);
      if (!strcmp(token, "{"))
        level++;
      if (!strcmp(token, "}"))
        level--;
    } while (strcmp(token, "}") || (level != 0));
    strcpy(token, result);
  } else if (!strcmp(token, "getelementptr")) {
    strcat(result, token);
    if (strlen(result) > 0)
      strcat(result, " ");
    get_token_llvm(line, token);
    if (!strcmp(token, "inbounds")) {
      strcat(result, token);
      get_token_llvm(line, token);
    }
    if (!strcmp(token, "[")) {
      strcat(result, token);
      level = 1;
      do {
        get_token_llvm(line, token);
        if (!strcmp(token, ""))
          break;
        if (strlen(result) > 0)
          strcat(result, " ");
        strcat(result, token);
        if (!strcmp(token, "["))
          level++;
        if (!strcmp(token, "]"))
          level--;
      } while (strcmp(token, "]") && strcmp(token, "]*") && (level != 0));
    } else if (!strcmp(token, "(")) {
      strcat(result, token);
      level = 1;
      do {
        get_token_llvm(line, token);
        if (!strcmp(token, ""))
          break;
        if (strlen(result) > 0)
          strcat(result, " ");
        strcat(result, token);
        if (!strcmp(token, "("))
          level++;
        if (!strcmp(token, ")"))
          level--;
      } while (strcmp(token, ")") && strcmp(token, ")*") && (level != 0));
    } else {
      if (strlen(result) > 0)
        strcat(result, " ");
      strcat(result, token);
    }
    strcpy(token, result);
  } else {
    strcat(result, token);
    strcpy(token, result);
  }
  free(result);
  return 0;
}


x86 assembly (clang, -O0):
<get_irtype_llvm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    $0x400,%edi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x18(%rbp),%rdi
lea    0xe59(%rip),%rsi
call   1040 <strcpy@plt>
mov    -0x10(%rbp),%rdi
lea    0xe3e(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     11eb <get_irtype_llvm+0x7b>
mov    -0x10(%rbp),%rdi
lea    0xe28(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    11f8 <get_irtype_llvm+0x88>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0xdfd(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     122c <get_irtype_llvm+0xbc>
mov    -0x10(%rbp),%rdi
lea    0xde7(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1239 <get_irtype_llvm+0xc9>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0xdc4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1394 <get_irtype_llvm+0x224>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0xd8c(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1293 <get_irtype_llvm+0x123>
jmp    1382 <get_irtype_llvm+0x212>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    12b6 <get_irtype_llvm+0x146>
mov    -0x18(%rbp),%rdi
lea    0xd59(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x10(%rbp),%rdi
lea    0xd3a(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    12e6 <get_irtype_llvm+0x176>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xd1b(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1309 <get_irtype_llvm+0x199>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xcfa(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    132c <get_irtype_llvm+0x1bc>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1331 <get_irtype_llvm+0x1c1>
mov    -0x10(%rbp),%rdi
lea    0xcd0(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     136d <get_irtype_llvm+0x1fd>
mov    -0x10(%rbp),%rdi
lea    0xcb8(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x1d(%rbp)
jne    1377 <get_irtype_llvm+0x207>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    1267 <get_irtype_llvm+0xf7>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <strcpy@plt>
jmp    196e <get_irtype_llvm+0x7fe>
mov    -0x10(%rbp),%rdi
lea    0xc72(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    14ef <get_irtype_llvm+0x37f>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0xc31(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    13ee <get_irtype_llvm+0x27e>
jmp    14dd <get_irtype_llvm+0x36d>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    1411 <get_irtype_llvm+0x2a1>
mov    -0x18(%rbp),%rdi
lea    0xbfe(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x10(%rbp),%rdi
lea    0xbe8(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1441 <get_irtype_llvm+0x2d1>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xbc7(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1464 <get_irtype_llvm+0x2f4>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xba6(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1487 <get_irtype_llvm+0x317>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    148c <get_irtype_llvm+0x31c>
mov    -0x10(%rbp),%rdi
lea    0xb7c(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
je     14c8 <get_irtype_llvm+0x358>
mov    -0x10(%rbp),%rdi
lea    0xb64(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x1e(%rbp)
jne    14d2 <get_irtype_llvm+0x362>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    13c2 <get_irtype_llvm+0x252>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <strcpy@plt>
jmp    1969 <get_irtype_llvm+0x7f9>
mov    -0x10(%rbp),%rdi
lea    0xb1e(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    160d <get_irtype_llvm+0x49d>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0xad6(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1549 <get_irtype_llvm+0x3d9>
jmp    15fb <get_irtype_llvm+0x48b>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    156c <get_irtype_llvm+0x3fc>
mov    -0x18(%rbp),%rdi
lea    0xaa3(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x10(%rbp),%rdi
lea    0xa94(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    159c <get_irtype_llvm+0x42c>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xa73(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    15bf <get_irtype_llvm+0x44f>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    15c4 <get_irtype_llvm+0x454>
mov    -0x10(%rbp),%rdi
lea    0xa4b(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x1f(%rbp)
jne    15f0 <get_irtype_llvm+0x480>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
mov    %al,-0x1f(%rbp)
mov    -0x1f(%rbp),%al
test   $0x1,%al
jne    151d <get_irtype_llvm+0x3ad>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <strcpy@plt>
jmp    1964 <get_irtype_llvm+0x7f4>
mov    -0x10(%rbp),%rdi
lea    0xa04(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1945 <get_irtype_llvm+0x7d5>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    1657 <get_irtype_llvm+0x4e7>
mov    -0x18(%rbp),%rdi
lea    0x9b8(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0x9bb(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1698 <get_irtype_llvm+0x528>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0x96e(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    17cb <get_irtype_llvm+0x65b>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0x92d(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    16f2 <get_irtype_llvm+0x582>
jmp    17c6 <get_irtype_llvm+0x656>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    1715 <get_irtype_llvm+0x5a5>
mov    -0x18(%rbp),%rdi
lea    0x8fa(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x10(%rbp),%rdi
lea    0x8e4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1745 <get_irtype_llvm+0x5d5>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0x8c3(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1768 <get_irtype_llvm+0x5f8>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    176d <get_irtype_llvm+0x5fd>
mov    -0x10(%rbp),%rdi
lea    0x89b(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x20(%rbp)
je     17bb <get_irtype_llvm+0x64b>
mov    -0x10(%rbp),%rdi
lea    0x87b(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x20(%rbp)
je     17bb <get_irtype_llvm+0x64b>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
mov    %al,-0x20(%rbp)
mov    -0x20(%rbp),%al
test   $0x1,%al
jne    16c6 <get_irtype_llvm+0x556>
jmp    1933 <get_irtype_llvm+0x7c3>
mov    -0x10(%rbp),%rdi
lea    0x85d(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    18fe <get_irtype_llvm+0x78e>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <get_token_llvm@plt>
mov    -0x10(%rbp),%rdi
lea    0x7fa(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1825 <get_irtype_llvm+0x6b5>
jmp    18f9 <get_irtype_llvm+0x789>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    1848 <get_irtype_llvm+0x6d8>
mov    -0x18(%rbp),%rdi
lea    0x7c7(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x10(%rbp),%rdi
lea    0x7d3(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1878 <get_irtype_llvm+0x708>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rdi
lea    0x7b2(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    189b <get_irtype_llvm+0x72b>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    18a0 <get_irtype_llvm+0x730>
mov    -0x10(%rbp),%rdi
lea    0x78a(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x21(%rbp)
je     18ee <get_irtype_llvm+0x77e>
mov    -0x10(%rbp),%rdi
lea    0x76a(%rip),%rsi
call   1080 <strcmp@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x21(%rbp)
je     18ee <get_irtype_llvm+0x77e>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    17f9 <get_irtype_llvm+0x689>
jmp    192e <get_irtype_llvm+0x7be>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x0,%rax
jle    1921 <get_irtype_llvm+0x7b1>
mov    -0x18(%rbp),%rdi
lea    0x6ee(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
jmp    1933 <get_irtype_llvm+0x7c3>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <strcpy@plt>
jmp    195f <get_irtype_llvm+0x7ef>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <strcat@plt>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <strcpy@plt>
jmp    1964 <get_irtype_llvm+0x7f4>
jmp    1969 <get_irtype_llvm+0x7f9>
jmp    196e <get_irtype_llvm+0x7fe>
mov    -0x18(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_irtype_llvm>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rsi,%rbx
mov    %rdi,%rbp
mov    $0x400,%edi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,%r14
mov    %rbp,(%rsp)
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xe62(%rip),%rsi
mov    %r14,%rdi
call   1040 <strcpy@plt>
lea    0xe48(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     11d9 <get_irtype_llvm+0x69>
lea    0xe38(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
jne    11e5 <get_irtype_llvm+0x75>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xe14(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     120d <get_irtype_llvm+0x9d>
lea    0xe04(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
jne    1219 <get_irtype_llvm+0xa9>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xde8(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1336 <get_irtype_llvm+0x1c6>
lea    0xdd9(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     143f <get_irtype_llvm+0x2cf>
lea    0xdc8(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     154e <get_irtype_llvm+0x3de>
lea    0xdb4(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
mov    %rax,%rbp
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
test   %rbp,%rbp
jne    15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %rax,%rax
jle    12a3 <get_irtype_llvm+0x133>
lea    0xd6f(%rip),%rsi
mov    %r14,%rdi
call   1090 <strcat@plt>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xd74(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
jne    12da <get_irtype_llvm+0x16a>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xd30(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1622 <get_irtype_llvm+0x4b2>
lea    0xd3a(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
mov    %r14,%rdi
test   %rax,%rax
je     16f3 <get_irtype_llvm+0x583>
call   1050 <strlen@plt>
test   %rax,%rax
jle    1326 <get_irtype_llvm+0x1b6>
lea    0xcec(%rip),%rsi
mov    %r14,%rdi
call   1090 <strcat@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
jmp    15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xcb7(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    $0x1,%r13d
lea    0xc9a(%rip),%rbp
lea    0xc95(%rip),%r12
jmp    13ad <get_irtype_llvm+0x23d>
nopl   0x0(%rax,%rax,1)
test   %r13d,%r13d
je     15fe <get_irtype_llvm+0x48e>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
mov    %rbx,%rdi
lea    0xc6c(%rip),%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %rax,%rax
jle    13c9 <get_irtype_llvm+0x259>
mov    %r14,%rdi
lea    0xc46(%rip),%rsi
call   1090 <strcat@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    %rbx,%rdi
lea    0xc2a(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
adc    $0x0,%r13d
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1080 <strcmp@plt>
xor    %r15d,%r15d
test   %rax,%rax
sete   %r15b
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
sbb    %r15d,%r13d
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1380 <get_irtype_llvm+0x210>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1380 <get_irtype_llvm+0x210>
jmp    1389 <get_irtype_llvm+0x219>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
lea    0xbae(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    $0x1,%r13d
lea    0xb98(%rip),%r15
lea    0xb93(%rip),%r12
jmp    14bd <get_irtype_llvm+0x34d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
test   %r13d,%r13d
je     15fe <get_irtype_llvm+0x48e>
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
mov    %rbx,%rdi
lea    0xb5c(%rip),%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %rax,%rax
jle    14d9 <get_irtype_llvm+0x369>
mov    %r14,%rdi
lea    0xb36(%rip),%rsi
call   1090 <strcat@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    %rbx,%rdi
lea    0xb23(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
adc    $0x0,%r13d
mov    %rbx,%rdi
mov    %r15,%rsi
call   1080 <strcmp@plt>
xor    %ebp,%ebp
test   %rax,%rax
sete   %bpl
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
sbb    %ebp,%r13d
mov    %rbx,%rdi
mov    %r15,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1490 <get_irtype_llvm+0x320>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1490 <get_irtype_llvm+0x320>
jmp    1499 <get_irtype_llvm+0x329>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    $0x1,%r13d
lea    0xaa5(%rip),%rbp
lea    0xa9d(%rip),%r15
lea    0xaa6(%rip),%r12
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %rax,%rax
jle    15b4 <get_irtype_llvm+0x444>
mov    %r14,%rdi
mov    %r15,%rsi
call   1090 <strcat@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    %rbx,%rdi
lea    0xa4f(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
adc    $0x0,%r13d
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
sbb    $0x0,%r13d
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
jne    1580 <get_irtype_llvm+0x410>
test   %r13d,%r13d
jne    1580 <get_irtype_llvm+0x410>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1040 <strcpy@plt>
mov    %r14,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    $0x1,%r13d
lea    0x9d1(%rip),%rbp
lea    0x9c9(%rip),%r15
lea    0x9cb(%rip),%r12
nopl   0x0(%rax,%rax,1)
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %rax,%rax
jle    1684 <get_irtype_llvm+0x514>
mov    %r14,%rdi
mov    %r15,%rsi
call   1090 <strcat@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    %rbx,%rdi
lea    0x978(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
adc    $0x0,%r13d
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
sbb    $0x0,%r13d
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %rbx,%rdi
lea    0x93e(%rip),%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
test   %r13d,%r13d
jne    1650 <get_irtype_llvm+0x4e0>
jmp    15fe <get_irtype_llvm+0x48e>
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    $0x1,%r13d
lea    0x903(%rip),%rbp
lea    0x8fb(%rip),%r15
lea    0x91f(%rip),%r12
cs nopw 0x0(%rax,%rax,1)
mov    (%rsp),%rdi
mov    %rbx,%rsi
call   1060 <get_token_llvm@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %r14,%rdi
call   1050 <strlen@plt>
test   %rax,%rax
jle    1758 <get_irtype_llvm+0x5e8>
mov    %r14,%rdi
mov    %r15,%rsi
call   1090 <strcat@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1090 <strcat@plt>
mov    %rbx,%rdi
lea    0x8c6(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
adc    $0x0,%r13d
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
cmp    $0x1,%rax
sbb    $0x0,%r13d
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
mov    %rbx,%rdi
lea    0x88c(%rip),%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     15fe <get_irtype_llvm+0x48e>
test   %r13d,%r13d
jne    1720 <get_irtype_llvm+0x5b0>
jmp    15fe <get_irtype_llvm+0x48e>

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

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