#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
char EOF;
int /*<<< orphan*/ add(char, char **, int *, int);
int /*<<< orphan*/ feof(int /*<<< orphan*/ *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, int, ...);
char getc(int /*<<< orphan*/ *);
int /*<<< orphan*/ stderr;
int /*<<< orphan*/ ungetc(char, int /*<<< orphan*/ *);
int readFastq(FILE *fil, int *conv, char **seq, char **qval, char **id,
              char **desc, int *length) {
  char c, *cp;
  int n, m;
  static FILE *oldFil = 0;
  static int line;
  int buflen;
  if (fil != oldFil) {
    line = 1;
    oldFil = fil;
  }
  c = getc(fil);
  if (!feof(fil) && c != '@') {
    fprintf(stderr, "bad @ header line %d\n", line);
    return 0;
  }
  c = getc(fil);
  n = 0;
  buflen = -32;
  while (!feof(fil) && c != ' ' && c != '\n' && c != '\t') {
    if (id)
      add(c, id, &buflen, n++);
    c = getc(fil);
  }
  if (id)
    add(0, id, &buflen, n);
  while (!feof(fil) && (c == ' ' || c == '\t'))
    c = getc(fil);
  n = 0;
  buflen = -32;
  while (!feof(fil) && c != '\n') {
    if (desc)
      add(c, desc, &buflen, n++);
    c = getc(fil);
  }
  if (desc)
    add(0, desc, &buflen, n);
  if (!feof(fil) && c != '\n') {
    fprintf(stderr, "bad @ identifier line %n\n", line);
    return 0;
  }
  ++line;
  conv[' '] = conv['\t'] = -1;
  conv['\n'] = -3;
  n = 0;
  buflen = -1024;
  while (!feof(fil)) {
    c = getc(fil);
    if (c == '+') {
      ungetc(c, fil);
      break;
    }
    if (c == EOF || c == EOF + 256)
      break;
    switch (conv[c]) {
    case -2: {
      if (id)
        fprintf(stderr,
                "Bad char 0x%x = '%c' at line %d, base %d, sequence %s\n", c, c,
                line, n, *id);
      else
        fprintf(stderr, "Bad char 0x%x = '%c' at line %d, base %d\n", c, c,
                line, n);
      return 0;
    } break;
    case -3:
      ++line;
    case -1:
      break;
    default:
      if (seq)
        add(conv[c], seq, &buflen, n++);
      else
        ++n;
    }
  }
  if (seq)
    add(0, seq, &buflen, n);
  if (length)
    *length = n;
  c = getc(fil);
  if (!feof(fil) && c != '+') {
    fprintf(stderr, "bad + header line %d\n", line);
    return 0;
  }
  c = getc(fil);
  if (id)
    cp = *id;
  while (!feof(fil) && c != ' ' && c != '\n' && c != '\t') {
    if (id && c != *cp++) {
      fprintf(stderr, "mismatching + identifier line %d\n", line);
      return 0;
    }
    c = getc(fil);
  }
  while (!feof(fil) && c != '\n')
    c = getc(fil);
  ++line;
  m = 0;
  buflen = -(n + 1);
  while (!feof(fil)) {
    c = getc(fil);
    if (c == '@' && m == n) {
      ungetc(c, fil);
      break;
    } else if (m > n)
      break;
    if (c == EOF || c == EOF + 256)
      break;
    if (c == '\n')
      ++line;
    else if (qval)
      add(c - 33, qval, &buflen, m++);
    else
      ++m;
  }
  if (qval)
    add(0, qval, &buflen, m);
  if (m != n) {
    fprintf(stderr, "mismatching seq, q length line %n\n", line);
    return 0;
  }
  return n;
}


x86 assembly (clang, -O0):
<readFastq>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x10(%rbp),%rax
cmp    0x2ed1(%rip),%rax
je     119a <readFastq+0x4a>
movl   $0x1,0x2ec9(%rip)
mov    -0x10(%rbp),%rax
mov    %rax,0x2eb6(%rip)
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
cmp    $0x0,%eax
jne    11ee <readFastq+0x9e>
movsbl -0x39(%rbp),%eax
cmp    $0x40,%eax
je     11ee <readFastq+0x9e>
mov    0x2e0c(%rip),%rax
mov    (%rax),%edi
mov    0x2e84(%rip),%edx
lea    0xe25(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1915 <readFastq+0x7c5>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0xffffffe0,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x55(%rbp)
jne    1252 <readFastq+0x102>
movsbl -0x39(%rbp),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x55(%rbp)
je     1252 <readFastq+0x102>
movsbl -0x39(%rbp),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x55(%rbp)
je     1252 <readFastq+0x102>
movsbl -0x39(%rbp),%eax
cmp    $0x9,%eax
setne  %al
mov    %al,-0x55(%rbp)
mov    -0x55(%rbp),%al
test   $0x1,%al
jne    1262 <readFastq+0x112>
jmp    129c <readFastq+0x14c>
cmpq   $0x0,-0x30(%rbp)
je     128b <readFastq+0x13b>
mov    -0x39(%rbp),%al
mov    -0x30(%rbp),%rsi
mov    -0x4c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x4c(%rbp)
lea    -0x54(%rbp),%rdx
movsbl %al,%edi
call   1030 <add@plt>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
jmp    1208 <readFastq+0xb8>
cmpq   $0x0,-0x30(%rbp)
je     12b9 <readFastq+0x169>
mov    -0x30(%rbp),%rsi
mov    -0x4c(%rbp),%ecx
xor    %edi,%edi
lea    -0x54(%rbp),%rdx
call   1030 <add@plt>
jmp    12be <readFastq+0x16e>
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x56(%rbp)
jne    12fc <readFastq+0x1ac>
movsbl -0x39(%rbp),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x57(%rbp)
je     12f6 <readFastq+0x1a6>
movsbl -0x39(%rbp),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x57(%rbp)
mov    -0x57(%rbp),%al
mov    %al,-0x56(%rbp)
mov    -0x56(%rbp),%al
test   $0x1,%al
jne    130c <readFastq+0x1bc>
jmp    131d <readFastq+0x1cd>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
jmp    12be <readFastq+0x16e>
movl   $0x0,-0x4c(%rbp)
movl   $0xffffffe0,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x58(%rbp)
jne    1351 <readFastq+0x201>
movsbl -0x39(%rbp),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x58(%rbp)
mov    -0x58(%rbp),%al
test   $0x1,%al
jne    1361 <readFastq+0x211>
jmp    139b <readFastq+0x24b>
cmpq   $0x0,-0x38(%rbp)
je     138a <readFastq+0x23a>
mov    -0x39(%rbp),%al
mov    -0x38(%rbp),%rsi
mov    -0x4c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x4c(%rbp)
lea    -0x54(%rbp),%rdx
movsbl %al,%edi
call   1030 <add@plt>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
jmp    132b <readFastq+0x1db>
cmpq   $0x0,-0x38(%rbp)
je     13b8 <readFastq+0x268>
mov    -0x38(%rbp),%rsi
mov    -0x4c(%rbp),%ecx
xor    %edi,%edi
lea    -0x54(%rbp),%rdx
call   1030 <add@plt>
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
cmp    $0x0,%eax
jne    1400 <readFastq+0x2b0>
movsbl -0x39(%rbp),%eax
cmp    $0xa,%eax
je     1400 <readFastq+0x2b0>
mov    0x2bfa(%rip),%rax
mov    (%rax),%edi
mov    0x2c72(%rip),%edx
lea    0xc29(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1915 <readFastq+0x7c5>
mov    0x2c52(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2c49(%rip)
mov    -0x18(%rbp),%rax
movl   $0xffffffff,0x24(%rax)
mov    -0x18(%rbp),%rax
movl   $0xffffffff,0x80(%rax)
ff ff ff
mov    -0x18(%rbp),%rax
movl   $0xfffffffd,0x28(%rax)
movl   $0x0,-0x4c(%rbp)
movl   $0xfffffc00,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    145f <readFastq+0x30f>
jmp    15db <readFastq+0x48b>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
movsbl -0x39(%rbp),%eax
cmp    $0x2b,%eax
jne    148c <readFastq+0x33c>
mov    -0x39(%rbp),%al
mov    -0x10(%rbp),%rsi
movsbl %al,%edi
call   1060 <ungetc@plt>
jmp    15db <readFastq+0x48b>
movsbl -0x39(%rbp),%eax
mov    0x2b51(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     14be <readFastq+0x36e>
movsbl -0x39(%rbp),%eax
mov    0x2b3b(%rip),%rcx
movsbl (%rcx),%ecx
add    $0x100,%ecx
cmp    %ecx,%eax
jne    14c3 <readFastq+0x373>
jmp    15db <readFastq+0x48b>
mov    -0x18(%rbp),%rax
movsbq -0x39(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
sub    $0xfffffffd,%eax
je     157d <readFastq+0x42d>
jmp    14e0 <readFastq+0x390>
mov    -0x5c(%rbp),%eax
sub    $0xfffffffe,%eax
je     1502 <readFastq+0x3b2>
jmp    14f1 <readFastq+0x3a1>
mov    -0x5c(%rbp),%eax
sub    $0xffffffff,%eax
je     158c <readFastq+0x43c>
jmp    1591 <readFastq+0x441>
cmpq   $0x0,-0x30(%rbp)
je     1547 <readFastq+0x3f7>
mov    0x2ac4(%rip),%rax
mov    (%rax),%edi
movsbl -0x39(%rbp),%edx
movsbl -0x39(%rbp),%ecx
mov    0x2b33(%rip),%r8d
mov    -0x4c(%rbp),%r9d
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
lea    0xaf9(%rip),%rsi
mov    %rax,(%rsp)
mov    $0x0,%al
call   1040 <fprintf@plt>
jmp    1571 <readFastq+0x421>
mov    0x2a8a(%rip),%rax
mov    (%rax),%edi
movsbl -0x39(%rbp),%edx
movsbl -0x39(%rbp),%ecx
mov    0x2af9(%rip),%r8d
mov    -0x4c(%rbp),%r9d
lea    0xafd(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1915 <readFastq+0x7c5>
mov    0x2ad5(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2acc(%rip)
jmp    15d6 <readFastq+0x486>
cmpq   $0x0,-0x20(%rbp)
je     15c8 <readFastq+0x478>
mov    -0x18(%rbp),%rax
movsbq -0x39(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rsi
mov    -0x4c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x4c(%rbp)
lea    -0x54(%rbp),%rdx
movsbl %al,%edi
call   1030 <add@plt>
jmp    15d1 <readFastq+0x481>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    15d6 <readFastq+0x486>
jmp    1441 <readFastq+0x2f1>
cmpq   $0x0,-0x20(%rbp)
je     15f8 <readFastq+0x4a8>
mov    -0x20(%rbp),%rsi
mov    -0x4c(%rbp),%ecx
xor    %edi,%edi
lea    -0x54(%rbp),%rdx
call   1030 <add@plt>
cmpq   $0x0,0x10(%rbp)
je     160c <readFastq+0x4bc>
mov    -0x4c(%rbp),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
cmp    $0x0,%eax
jne    1660 <readFastq+0x510>
movsbl -0x39(%rbp),%eax
cmp    $0x2b,%eax
je     1660 <readFastq+0x510>
mov    0x299a(%rip),%rax
mov    (%rax),%edi
mov    0x2a12(%rip),%edx
lea    0xa44(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1915 <readFastq+0x7c5>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     1682 <readFastq+0x532>
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x48(%rbp)
jmp    1687 <readFastq+0x537>
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x5d(%rbp)
jne    16d1 <readFastq+0x581>
movsbl -0x39(%rbp),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x5d(%rbp)
je     16d1 <readFastq+0x581>
movsbl -0x39(%rbp),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x5d(%rbp)
je     16d1 <readFastq+0x581>
movsbl -0x39(%rbp),%eax
cmp    $0x9,%eax
setne  %al
mov    %al,-0x5d(%rbp)
mov    -0x5d(%rbp),%al
test   $0x1,%al
jne    16e1 <readFastq+0x591>
jmp    1744 <readFastq+0x5f4>
cmpq   $0x0,-0x30(%rbp)
je     1733 <readFastq+0x5e3>
movsbl -0x39(%rbp),%eax
mov    -0x48(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x48(%rbp)
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     1733 <readFastq+0x5e3>
mov    0x28c7(%rip),%rax
mov    (%rax),%edi
mov    0x293f(%rip),%edx
lea    0x987(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1915 <readFastq+0x7c5>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
jmp    1687 <readFastq+0x537>
jmp    1749 <readFastq+0x5f9>
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x5e(%rbp)
jne    176f <readFastq+0x61f>
movsbl -0x39(%rbp),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x5e(%rbp)
mov    -0x5e(%rbp),%al
test   $0x1,%al
jne    177f <readFastq+0x62f>
jmp    1790 <readFastq+0x640>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
jmp    1749 <readFastq+0x5f9>
mov    0x28c2(%rip),%eax
add    $0x1,%eax
mov    %eax,0x28b9(%rip)
movl   $0x0,-0x50(%rbp)
mov    -0x4c(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <feof@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    17d1 <readFastq+0x681>
jmp    18bd <readFastq+0x76d>
mov    -0x10(%rbp),%rdi
call   1070 <getc@plt>
mov    %al,-0x39(%rbp)
movsbl -0x39(%rbp),%eax
cmp    $0x40,%eax
jne    180a <readFastq+0x6ba>
mov    -0x50(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jne    180a <readFastq+0x6ba>
mov    -0x39(%rbp),%al
mov    -0x10(%rbp),%rsi
movsbl %al,%edi
call   1060 <ungetc@plt>
jmp    18bd <readFastq+0x76d>
mov    -0x50(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jle    181b <readFastq+0x6cb>
jmp    18bd <readFastq+0x76d>
jmp    1820 <readFastq+0x6d0>
movsbl -0x39(%rbp),%eax
mov    0x27bd(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     1852 <readFastq+0x702>
movsbl -0x39(%rbp),%eax
mov    0x27a7(%rip),%rcx
movsbl (%rcx),%ecx
add    $0x100,%ecx
cmp    %ecx,%eax
jne    1857 <readFastq+0x707>
jmp    18bd <readFastq+0x76d>
movsbl -0x39(%rbp),%eax
cmp    $0xa,%eax
jne    1878 <readFastq+0x728>
mov    0x27ee(%rip),%eax
add    $0x1,%eax
mov    %eax,0x27e5(%rip)
jmp    18b8 <readFastq+0x768>
cmpq   $0x0,-0x28(%rbp)
je     18aa <readFastq+0x75a>
movsbl -0x39(%rbp),%eax
sub    $0x21,%eax
mov    -0x28(%rbp),%rsi
mov    -0x50(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x50(%rbp)
lea    -0x54(%rbp),%rdx
movsbl %al,%edi
call   1030 <add@plt>
jmp    18b3 <readFastq+0x763>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    18b8 <readFastq+0x768>
jmp    17b3 <readFastq+0x663>
cmpq   $0x0,-0x28(%rbp)
je     18da <readFastq+0x78a>
mov    -0x28(%rbp),%rsi
mov    -0x50(%rbp),%ecx
xor    %edi,%edi
lea    -0x54(%rbp),%rdx
call   1030 <add@plt>
mov    -0x50(%rbp),%eax
cmp    -0x4c(%rbp),%eax
je     190f <readFastq+0x7bf>
mov    0x26eb(%rip),%rax
mov    (%rax),%edi
mov    0x2763(%rip),%edx
lea    0x7cd(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1915 <readFastq+0x7c5>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<readFastq>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9,%r12
mov    %r8,%rbp
mov    %rcx,%r14
mov    %rdx,0x20(%rsp)
mov    %rsi,0x28(%rsp)
mov    %rdi,%r13
cmp    %rdi,0x2ed5(%rip)
je     118e <readFastq+0x3e>
movl   $0x1,0x2ed1(%rip)
mov    %r13,0x2ec2(%rip)
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
mov    %r13,%rdi
call   1050 <feof@plt>
cmp    $0x40,%bl
je     11c4 <readFastq+0x74>
test   %eax,%eax
jne    11c4 <readFastq+0x74>
mov    0x2e28(%rip),%rax
mov    (%rax),%edi
mov    0x2ea0(%rip),%edx
lea    0xe41(%rip),%rsi
jmp    1535 <readFastq+0x3e5>
mov    %r14,0x18(%rsp)
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
movl   $0xffffffe0,0x14(%rsp)
ff
mov    %r13,%rdi
call   1050 <feof@plt>
xor    %r14d,%r14d
test   %eax,%eax
je     1398 <readFastq+0x248>
test   %rbp,%rbp
je     1205 <readFastq+0xb5>
lea    0x14(%rsp),%rdx
xor    %edi,%edi
mov    %rbp,%rsi
mov    %r14d,%ecx
call   1030 <add@plt>
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
mov    %rbp,0x30(%rsp)
je     12ea <readFastq+0x19a>
movl   $0xffffffe0,0x14(%rsp)
ff
mov    %r13,%rdi
call   1050 <feof@plt>
xor    %r14d,%r14d
cmp    $0xa,%bl
setne  %r15b
je     127e <readFastq+0x12e>
test   %eax,%eax
jne    127e <readFastq+0x12e>
xor    %r14d,%r14d
nopl   (%rax)
test   %r12,%r12
je     125f <readFastq+0x10f>
lea    0x1(%r14),%ebp
movsbl %bl,%edi
mov    %r12,%rsi
lea    0x14(%rsp),%rdx
mov    %r14d,%ecx
call   1030 <add@plt>
mov    %ebp,%r14d
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
mov    %r13,%rdi
call   1050 <feof@plt>
cmp    $0xa,%bl
setne  %r15b
je     127e <readFastq+0x12e>
test   %eax,%eax
je     1240 <readFastq+0xf0>
test   %r12,%r12
je     1295 <readFastq+0x145>
lea    0x14(%rsp),%rdx
xor    %edi,%edi
mov    %r12,%rsi
mov    %r14d,%ecx
call   1030 <add@plt>
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
setne  %al
xor    $0x1,%r15b
or     %al,%r15b
mov    0x28(%rsp),%rbx
jne    12f9 <readFastq+0x1a9>
mov    0x2d21(%rip),%rax
mov    (%rax),%edi
mov    0x2d99(%rip),%edx
lea    0xd50(%rip),%rsi
jmp    1535 <readFastq+0x3e5>
nopl   0x0(%rax,%rax,1)
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
jne    121a <readFastq+0xca>
cmp    $0x20,%bl
je     12d0 <readFastq+0x180>
cmp    $0x9,%bl
je     12d0 <readFastq+0x180>
jmp    121a <readFastq+0xca>
addl   $0x1,0x2d58(%rip)
movabs $0xfffffffdffffffff,%rax
ff ff ff
mov    %rax,0x24(%rbx)
movl   $0xffffffff,0x80(%rbx)
ff ff ff
movl   $0xfffffc00,0x14(%rsp)
ff
mov    %r13,%rdi
call   1050 <feof@plt>
xor    %r12d,%r12d
test   %eax,%eax
mov    0x30(%rsp),%r15
je     1412 <readFastq+0x2c2>
mov    0x70(%rsp),%rbx
mov    0x20(%rsp),%rsi
test   %rsi,%rsi
je     1356 <readFastq+0x206>
lea    0x14(%rsp),%rdx
xor    %edi,%edi
mov    %r12d,%ecx
call   1030 <add@plt>
test   %rbx,%rbx
je     135e <readFastq+0x20e>
mov    %r12d,(%rbx)
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
mov    %r13,%rdi
call   1050 <feof@plt>
cmp    $0x2b,%bl
je     13f7 <readFastq+0x2a7>
test   %eax,%eax
jne    13f7 <readFastq+0x2a7>
mov    0x2c54(%rip),%rax
mov    (%rax),%edi
mov    0x2ccc(%rip),%edx
lea    0xcfe(%rip),%rsi
jmp    1535 <readFastq+0x3e5>
xor    %r14d,%r14d
jmp    13ba <readFastq+0x26a>
nopl   (%rax)
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
jne    11ee <readFastq+0x9e>
cmp    $0x20,%bl
ja     13d6 <readFastq+0x286>
movzbl %bl,%eax
movabs $0x100000600,%rcx
bt     %rax,%rcx
jb     11ee <readFastq+0x9e>
test   %rbp,%rbp
je     13a0 <readFastq+0x250>
lea    0x1(%r14),%r15d
movsbl %bl,%edi
mov    %rbp,%rsi
lea    0x14(%rsp),%rdx
mov    %r14d,%ecx
call   1030 <add@plt>
mov    %r15d,%r14d
jmp    13a0 <readFastq+0x250>
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
test   %r15,%r15
je     14a7 <readFastq+0x357>
mov    (%r15),%rbp
jmp    14a7 <readFastq+0x357>
xor    %r12d,%r12d
mov    0x2bcc(%rip),%rbp
lea    0x14(%rsp),%r14
jmp    1447 <readFastq+0x2f7>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addl   $0x1,0x2c21(%rip)
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
jne    1338 <readFastq+0x1e8>
mov    %r13,%rdi
call   1070 <getc@plt>
cmp    $0x2b,%al
je     1628 <readFastq+0x4d8>
cmp    0x0(%rbp),%al
je     1338 <readFastq+0x1e8>
movsbq %al,%rcx
mov    (%rbx,%rcx,4),%ecx
cmp    $0xfffffffd,%ecx
je     1430 <readFastq+0x2e0>
cmp    $0xffffffff,%ecx
je     1437 <readFastq+0x2e7>
cmp    $0xfffffffe,%ecx
je     164f <readFastq+0x4ff>
mov    0x20(%rsp),%rsi
test   %rsi,%rsi
je     14a1 <readFastq+0x351>
lea    0x1(%r12),%ebx
movsbl %cl,%edi
mov    %r14,%rdx
mov    %r12d,%ecx
call   1030 <add@plt>
mov    %ebx,%r12d
mov    0x28(%rsp),%rbx
jmp    1437 <readFastq+0x2e7>
add    $0x1,%r12d
jmp    1437 <readFastq+0x2e7>
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
je     1551 <readFastq+0x401>
nopw   0x0(%rax,%rax,1)
mov    %r13,%rdi
call   1050 <feof@plt>
cmp    $0xa,%bl
je     14dd <readFastq+0x38d>
test   %eax,%eax
jne    14dd <readFastq+0x38d>
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
jmp    14c0 <readFastq+0x370>
addl   $0x1,0x2b74(%rip)
mov    %r12d,%eax
not    %eax
mov    %eax,0x14(%rsp)
mov    %r13,%rdi
call   1050 <feof@plt>
xor    %ebx,%ebx
test   %eax,%eax
mov    0x18(%rsp),%rbp
je     15af <readFastq+0x45f>
test   %rbp,%rbp
je     151a <readFastq+0x3ca>
lea    0x14(%rsp),%rdx
xor    %edi,%edi
mov    %rbp,%rsi
mov    %ebx,%ecx
call   1030 <add@plt>
cmp    %r12d,%ebx
je     153f <readFastq+0x3ef>
mov    0x2ab2(%rip),%rax
mov    (%rax),%edi
mov    0x2b2a(%rip),%edx
lea    0xb94(%rip),%rsi
xor    %r12d,%r12d
xor    %eax,%eax
call   1040 <fprintf@plt>
mov    %r12d,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movabs $0x100000600,%r14
jmp    157b <readFastq+0x42b>
add    $0x1,%rbp
mov    %r13,%rdi
call   1070 <getc@plt>
mov    %eax,%ebx
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
jne    14c0 <readFastq+0x370>
cmp    $0x20,%bl
ja     158d <readFastq+0x43d>
movzbl %bl,%eax
bt     %rax,%r14
jb     14c0 <readFastq+0x370>
test   %r15,%r15
je     1561 <readFastq+0x411>
cmp    0x0(%rbp),%bl
je     155d <readFastq+0x40d>
mov    0x2a3a(%rip),%rax
mov    (%rax),%edi
mov    0x2ab2(%rip),%edx
lea    0xafa(%rip),%rsi
jmp    1535 <readFastq+0x3e5>
xor    %ebx,%ebx
mov    0x2a30(%rip),%r15
lea    0x14(%rsp),%r14
jmp    15d7 <readFastq+0x487>
nop
addl   $0x1,0x2a91(%rip)
mov    %r13,%rdi
call   1050 <feof@plt>
test   %eax,%eax
jne    1504 <readFastq+0x3b4>
mov    %r13,%rdi
call   1070 <getc@plt>
cmp    $0x40,%al
jne    15e8 <readFastq+0x498>
cmp    %r12d,%ebx
je     163a <readFastq+0x4ea>
cmp    %r12d,%ebx
jg     1504 <readFastq+0x3b4>
cmp    (%r15),%al
je     1504 <readFastq+0x3b4>
cmp    $0xa,%al
je     15c0 <readFastq+0x470>
test   %rbp,%rbp
je     1623 <readFastq+0x4d3>
add    $0xdf,%al
lea    0x1(%rbx),%ebp
movsbl %al,%edi
mov    0x18(%rsp),%rsi
mov    %r14,%rdx
mov    %ebx,%ecx
call   1030 <add@plt>
mov    %ebp,%ebx
mov    0x18(%rsp),%rbp
jmp    15c7 <readFastq+0x477>
add    $0x1,%ebx
jmp    15c7 <readFastq+0x477>
mov    $0x2b,%edi
mov    %r13,%rsi
call   1060 <ungetc@plt>
jmp    1338 <readFastq+0x1e8>
mov    $0x40,%edi
mov    %r13,%rsi
call   1060 <ungetc@plt>
mov    %r12d,%ebx
jmp    1504 <readFastq+0x3b4>
movsbl %al,%ecx
mov    0x297f(%rip),%rax
mov    (%rax),%edi
mov    0x29f6(%rip),%r8d
test   %r15,%r15
je     1677 <readFastq+0x527>
mov    (%r15),%rax
mov    %rax,(%rsp)
lea    0x9bb(%rip),%rsi
jmp    167e <readFastq+0x52e>
lea    0x9e9(%rip),%rsi
mov    %ecx,%edx
mov    %r12d,%r9d
xor    %eax,%eax
call   1040 <fprintf@plt>
xor    %r12d,%r12d
jmp    153f <readFastq+0x3ef>

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

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