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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int strlen(char *);
scalar_t__ strncasecmp(char *, char *, int);
long strtol(char const *, char **, int /*<<< orphan*/);
int bam_str2flag(const char *str) {
  char *end, *beg = (char *)str;
  long int flag = strtol(str, &end, 0);
  if (end != str)
    return flag;
  flag = 0;
  while (*str) {
    end = beg;
    while (*end && *end != ',')
      end++;
    if (!(strncasecmp(("PAIRED"), (beg), (end - beg)) ||
          strlen("PAIRED") != (end - beg)))
      flag |= 1;
    else if (!(strncasecmp(("PROPER_PAIR"), (beg), (end - beg)) ||
               strlen("PROPER_PAIR") != (end - beg)))
      flag |= 2;
    else if (!(strncasecmp(("UNMAP"), (beg), (end - beg)) ||
               strlen("UNMAP") != (end - beg)))
      flag |= 4;
    else if (!(strncasecmp(("MUNMAP"), (beg), (end - beg)) ||
               strlen("MUNMAP") != (end - beg)))
      flag |= 8;
    else if (!(strncasecmp(("REVERSE"), (beg), (end - beg)) ||
               strlen("REVERSE") != (end - beg)))
      flag |= 16;
    else if (!(strncasecmp(("MREVERSE"), (beg), (end - beg)) ||
               strlen("MREVERSE") != (end - beg)))
      flag |= 32;
    else if (!(strncasecmp(("READ1"), (beg), (end - beg)) ||
               strlen("READ1") != (end - beg)))
      flag |= 64;
    else if (!(strncasecmp(("READ2"), (beg), (end - beg)) ||
               strlen("READ2") != (end - beg)))
      flag |= 128;
    else if (!(strncasecmp(("SECONDARY"), (beg), (end - beg)) ||
               strlen("SECONDARY") != (end - beg)))
      flag |= 256;
    else if (!(strncasecmp(("QCFAIL"), (beg), (end - beg)) ||
               strlen("QCFAIL") != (end - beg)))
      flag |= 512;
    else if (!(strncasecmp(("DUP"), (beg), (end - beg)) ||
               strlen("DUP") != (end - beg)))
      flag |= 1024;
    else if (!(strncasecmp(("SUPPLEMENTARY"), (beg), (end - beg)) ||
               strlen("SUPPLEMENTARY") != (end - beg)))
      flag |= 2048;
    else
      return -1;
    if (!*end)
      break;
    beg = end + 1;
  }
  return flag;
}


x86 assembly (clang, -O0):
<bam_str2flag>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rdi
lea    -0x18(%rbp),%rsi
xor    %edx,%edx
call   1040 <strtol@plt>
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1171 <bam_str2flag+0x41>
mov    -0x28(%rbp),%rax
mov    %eax,-0x4(%rbp)
jmp    1683 <bam_str2flag+0x553>
movq   $0x0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     167c <bam_str2flag+0x54c>
mov    -0x20(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x29(%rbp)
je     11b3 <bam_str2flag+0x83>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
setne  %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    11c3 <bam_str2flag+0x93>
jmp    11d4 <bam_str2flag+0xa4>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    118e <bam_str2flag+0x5e>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe14(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    122e <bam_str2flag+0xfe>
lea    0xdfe(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    122e <bam_str2flag+0xfe>
mov    -0x28(%rbp),%rax
or     $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1659 <bam_str2flag+0x529>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xdc1(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    1288 <bam_str2flag+0x158>
lea    0xdab(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    1288 <bam_str2flag+0x158>
mov    -0x28(%rbp),%rax
or     $0x2,%rax
mov    %rax,-0x28(%rbp)
jmp    1654 <bam_str2flag+0x524>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xd74(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    12e2 <bam_str2flag+0x1b2>
lea    0xd5e(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    12e2 <bam_str2flag+0x1b2>
mov    -0x28(%rbp),%rax
or     $0x4,%rax
mov    %rax,-0x28(%rbp)
jmp    164f <bam_str2flag+0x51f>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xd19(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    133c <bam_str2flag+0x20c>
lea    0xd03(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    133c <bam_str2flag+0x20c>
mov    -0x28(%rbp),%rax
or     $0x8,%rax
mov    %rax,-0x28(%rbp)
jmp    164a <bam_str2flag+0x51a>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xcc7(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    1396 <bam_str2flag+0x266>
lea    0xcb1(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    1396 <bam_str2flag+0x266>
mov    -0x28(%rbp),%rax
or     $0x10,%rax
mov    %rax,-0x28(%rbp)
jmp    1645 <bam_str2flag+0x515>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xc6c(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    13f0 <bam_str2flag+0x2c0>
lea    0xc56(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    13f0 <bam_str2flag+0x2c0>
mov    -0x28(%rbp),%rax
or     $0x20,%rax
mov    %rax,-0x28(%rbp)
jmp    1640 <bam_str2flag+0x510>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xc1b(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    144a <bam_str2flag+0x31a>
lea    0xc05(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    144a <bam_str2flag+0x31a>
mov    -0x28(%rbp),%rax
or     $0x40,%rax
mov    %rax,-0x28(%rbp)
jmp    163b <bam_str2flag+0x50b>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xbc7(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    14a6 <bam_str2flag+0x376>
lea    0xbb1(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    14a6 <bam_str2flag+0x376>
mov    -0x28(%rbp),%rax
or     $0x80,%rax
mov    %rax,-0x28(%rbp)
jmp    1636 <bam_str2flag+0x506>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xb71(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    1502 <bam_str2flag+0x3d2>
lea    0xb5b(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    1502 <bam_str2flag+0x3d2>
mov    -0x28(%rbp),%rax
or     $0x100,%rax
mov    %rax,-0x28(%rbp)
jmp    1631 <bam_str2flag+0x501>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xb1f(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    155e <bam_str2flag+0x42e>
lea    0xb09(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    155e <bam_str2flag+0x42e>
mov    -0x28(%rbp),%rax
or     $0x200,%rax
mov    %rax,-0x28(%rbp)
jmp    162c <bam_str2flag+0x4fc>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xaca(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    15ba <bam_str2flag+0x48a>
lea    0xab4(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    15ba <bam_str2flag+0x48a>
mov    -0x28(%rbp),%rax
or     $0x400,%rax
mov    %rax,-0x28(%rbp)
jmp    1627 <bam_str2flag+0x4f7>
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xa72(%rip),%rdi
call   1050 <strncasecmp@plt>
cmp    $0x0,%rax
jne    1616 <bam_str2flag+0x4e6>
lea    0xa5c(%rip),%rdi
call   1030 <strlen@plt>
cltq
mov    -0x18(%rbp),%rcx
mov    -0x20(%rbp),%rdx
sub    %rdx,%rcx
cmp    %rcx,%rax
jne    1616 <bam_str2flag+0x4e6>
mov    -0x28(%rbp),%rax
or     $0x800,%rax
mov    %rax,-0x28(%rbp)
jmp    1622 <bam_str2flag+0x4f2>
movl   $0xffffffff,-0x4(%rbp)
jmp    1683 <bam_str2flag+0x553>
jmp    1627 <bam_str2flag+0x4f7>
jmp    162c <bam_str2flag+0x4fc>
jmp    1631 <bam_str2flag+0x501>
jmp    1636 <bam_str2flag+0x506>
jmp    163b <bam_str2flag+0x50b>
jmp    1640 <bam_str2flag+0x510>
jmp    1645 <bam_str2flag+0x515>
jmp    164a <bam_str2flag+0x51a>
jmp    164f <bam_str2flag+0x51f>
jmp    1654 <bam_str2flag+0x524>
jmp    1659 <bam_str2flag+0x529>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    166b <bam_str2flag+0x53b>
jmp    167c <bam_str2flag+0x54c>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1179 <bam_str2flag+0x49>
mov    -0x28(%rbp),%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bam_str2flag>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%r14
mov    %rsp,%rsi
xor    %r12d,%r12d
xor    %edx,%edx
call   1040 <strtol@plt>
cmp    %r14,(%rsp)
je     1159 <bam_str2flag+0x29>
mov    %eax,%r12d
jmp    143e <bam_str2flag+0x30e>
cmpb   $0x0,(%r14)
je     143e <bam_str2flag+0x30e>
xor    %r15d,%r15d
lea    0xe93(%rip),%rbp
mov    %r14,%rbx
mov    $0xffffffff,%r12d
cs nopw 0x0(%rax,%rax,1)
xor    %r13d,%r13d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    (%rbx,%r13,1),%rax
mov    %rax,(%rsp)
movzbl (%rbx,%r13,1),%eax
test   %al,%al
je     11b0 <bam_str2flag+0x80>
cmp    $0x2c,%al
je     11b0 <bam_str2flag+0x80>
add    $0x1,%r13
jmp    1190 <bam_str2flag+0x60>
nopl   0x0(%rax,%rax,1)
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    11dc <bam_str2flag+0xac>
mov    %rbp,%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x1,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xe24(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    1210 <bam_str2flag+0xe0>
lea    0xe0d(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x2,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xdfd(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    1244 <bam_str2flag+0x114>
lea    0xde6(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x4,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xdc8(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    1278 <bam_str2flag+0x148>
lea    0xdb1(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x8,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xd9c(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    12ac <bam_str2flag+0x17c>
lea    0xd85(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x10,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xd67(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    12e0 <bam_str2flag+0x1b0>
lea    0xd50(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x20,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xd3c(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    1314 <bam_str2flag+0x1e4>
lea    0xd25(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x40,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xd0e(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    1348 <bam_str2flag+0x218>
lea    0xcf7(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x80,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xce0(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    137c <bam_str2flag+0x24c>
lea    0xcc9(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x100,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xcb6(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    13ac <bam_str2flag+0x27c>
lea    0xc9f(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x200,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
lea    0xc8d(%rip),%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    13dc <bam_str2flag+0x2ac>
lea    0xc76(%rip),%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x400,%eax
cmp    %r13,%rcx
je     1420 <bam_str2flag+0x2f0>
mov    %r14,%rbp
lea    0xc5e(%rip),%r14
mov    %r14,%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1050 <strncasecmp@plt>
test   %rax,%rax
jne    143e <bam_str2flag+0x30e>
mov    %r14,%rdi
call   1030 <strlen@plt>
movslq %eax,%rcx
mov    $0x800,%eax
cmp    %r13,%rcx
mov    %rbp,%r14
lea    0xbea(%rip),%rbp
jne    143e <bam_str2flag+0x30e>
nopl   0x0(%rax,%rax,1)
or     %rax,%r15
cmpb   $0x0,(%rbx,%r13,1)
je     143b <bam_str2flag+0x30b>
add    %r13,%rbx
add    $0x1,%rbx
cmpb   $0x0,(%r14)
jne    1180 <bam_str2flag+0x50>
mov    %r15d,%r12d
mov    %r12d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [7 x i8] c"PAIRED\00"
@.str.1 = [12 x i8] c"PROPER_PAIR\00"
@.str.2 = [6 x i8] c"UNMAP\00"
@.str.3 = [7 x i8] c"MUNMAP\00"
@.str.4 = [8 x i8] c"REVERSE\00"
@.str.5 = [9 x i8] c"MREVERSE\00"
@.str.6 = [6 x i8] c"READ1\00"
@.str.7 = [6 x i8] c"READ2\00"
@.str.8 = [10 x i8] c"SECONDARY\00"
@.str.9 = [7 x i8] c"QCFAIL\00"
@.str.10 = [4 x i8] c"DUP\00"
@.str.11 = [14 x i8] c"SUPPLEMENTARY\00"
define i32 @bam_str2flag(i8* %0) {
%2 = alloca i8*
%3 = bitcast i8** %2 to i8*
%4 = call i64 @strtol(i8* %0, i8** %2, i32 0)
%5 = load i8*, i8** %2
%6 = icmp eq i8* %5, %0
br i1 %6, label %7, label %10
7: ; preds = %1
%8 = load i8, i8* %0
%9 = icmp eq i8 %8, 0
br i1 %9, label %119, label %16
10: ; preds = %1
%11 = trunc i64 %4 to i32
br label %119
12: ; preds = %112
%13 = getelementptr inbounds i8, i8* %20, i64 1
%14 = load i8, i8* %0
%15 = icmp eq i8 %14, 0
br i1 %15, label %117, label %16
16: ; preds = %7, %12
%17 = phi i64 [ %114, %12 ], [ 0, %7 ]
%18 = phi i8* [ %13, %12 ], [ %0, %7 ]
br label %19
19: ; preds = %16, %22
%20 = phi i8* [ %23, %22 ], [ %18, %16 ]
store i8* %20, i8** %2
%21 = load i8, i8* %20
switch i8 %21, label %22 [
i8 0, label %24
i8 44, label %24
]
22: ; preds = %19
%23 = getelementptr inbounds i8, i8* %20, i64 1
br label %19
24: ; preds = %19, %19
%25 = ptrtoint i8* %20 to i64
%26 = ptrtoint i8* %18 to i64
%27 = sub i64 %25, %26
%28 = trunc i64 %27 to i32
%29 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i8* %18, i32 %28)
%30 = icmp eq i64 %29, 0
br i1 %30, label %31, label %35
31: ; preds = %24
%32 = tail call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%33 = sext i32 %32 to i64
%34 = icmp eq i64 %27, %33
br i1 %34, label %112, label %35
35: ; preds = %31, %24
%36 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i8* %18, i32 %28)
%37 = icmp eq i64 %36, 0
br i1 %37, label %38, label %42
38: ; preds = %35
%39 = tail call i32 @strlen(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%40 = sext i32 %39 to i64
%41 = icmp eq i64 %27, %40
br i1 %41, label %112, label %42
42: ; preds = %38, %35
%43 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i8* %18, i32 %28)
%44 = icmp eq i64 %43, 0
br i1 %44, label %45, label %49
45: ; preds = %42
%46 = tail call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
%47 = sext i32 %46 to i64
%48 = icmp eq i64 %27, %47
br i1 %48, label %112, label %49
49: ; preds = %45, %42
%50 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i8* %18, i32 %28)
%51 = icmp eq i64 %50, 0
br i1 %51, label %52, label %56
52: ; preds = %49
%53 = tail call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0))
%54 = sext i32 %53 to i64
%55 = icmp eq i64 %27, %54
br i1 %55, label %112, label %56
56: ; preds = %52, %49
%57 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i8* %18, i32 %28)
%58 = icmp eq i64 %57, 0
br i1 %58, label %59, label %63
59: ; preds = %56
%60 = tail call i32 @strlen(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
%61 = sext i32 %60 to i64
%62 = icmp eq i64 %27, %61
br i1 %62, label %112, label %63
63: ; preds = %59, %56
%64 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0), i8* %18, i32 %28)
%65 = icmp eq i64 %64, 0
br i1 %65, label %66, label %70
66: ; preds = %63
%67 = tail call i32 @strlen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%68 = sext i32 %67 to i64
%69 = icmp eq i64 %27, %68
br i1 %69, label %112, label %70
70: ; preds = %66, %63
%71 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0), i8* %18, i32 %28)
%72 = icmp eq i64 %71, 0
br i1 %72, label %73, label %77
73: ; preds = %70
%74 = tail call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%75 = sext i32 %74 to i64
%76 = icmp eq i64 %27, %75
br i1 %76, label %112, label %77
77: ; preds = %73, %70
%78 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i64 0, i64 0), i8* %18, i32 %28)
%79 = icmp eq i64 %78, 0
br i1 %79, label %80, label %84
80: ; preds = %77
%81 = tail call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i64 0, i64 0))
%82 = sext i32 %81 to i64
%83 = icmp eq i64 %27, %82
br i1 %83, label %112, label %84
84: ; preds = %80, %77
%85 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0), i8* %18, i32 %28)
%86 = icmp eq i64 %85, 0
br i1 %86, label %87, label %91
87: ; preds = %84
%88 = tail call i32 @strlen(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0))
%89 = sext i32 %88 to i64
%90 = icmp eq i64 %27, %89
br i1 %90, label %112, label %91
91: ; preds = %87, %84
%92 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i8* %18, i32 %28)
%93 = icmp eq i64 %92, 0
br i1 %93, label %94, label %98
94: ; preds = %91
%95 = tail call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0))
%96 = sext i32 %95 to i64
%97 = icmp eq i64 %27, %96
br i1 %97, label %112, label %98
98: ; preds = %94, %91
%99 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0), i8* %18, i32 %28)
%100 = icmp eq i64 %99, 0
br i1 %100, label %101, label %105
101: ; preds = %98
%102 = tail call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0))
%103 = sext i32 %102 to i64
%104 = icmp eq i64 %27, %103
br i1 %104, label %112, label %105
105: ; preds = %101, %98
%106 = tail call i64 @strncasecmp(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0), i8* %18, i32 %28)
%107 = icmp eq i64 %106, 0
br i1 %107, label %108, label %119
108: ; preds = %105
%109 = tail call i32 @strlen(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0))
%110 = sext i32 %109 to i64
%111 = icmp eq i64 %27, %110
br i1 %111, label %112, label %119
112: ; preds = %108, %101, %94, %87, %80, %73, %66, %59, %52, %45, %38, %31
%113 = phi i64 [ 1, %31 ], [ 2, %38 ], [ 4, %45 ], [ 8, %52 ], [ 16, %59 ], [ 32, %66 ], [ 64, %73 ], [ 128, %80 ], [ 256, %87 ], [ 512, %94 ], [ 1024, %101 ], [ 2048, %108 ]
%114 = or i64 %17, %113
%115 = load i8, i8* %20
%116 = icmp eq i8 %115, 0
br i1 %116, label %117, label %12
117: ; preds = %112, %12
%118 = trunc i64 %114 to i32
br label %119
119: ; preds = %105, %108, %7, %117, %10
%120 = phi i32 [ %11, %10 ], [ 0, %7 ], [ %118, %117 ], [ -1, %108 ], [ -1, %105 ]
ret i32 %120
}