#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 size_t int32_t;

/* Variables and functions */
int MAP_SHARED;
int /*<<< orphan*/ PROT_READ;
size_t fsize(size_t);
char *mmap(int /*<<< orphan*/, size_t, int /*<<< orphan*/, int, size_t,
           int /*<<< orphan*/);
size_t open(char *, int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, ...);
size_t printll(char *);
void Snippet(char *x0) {
  printf("%s\n", "Word,Value,Word,Year,MatchCount,VolumeCount");
  int32_t x5 = 0;
  int32_t x2 = open("src/data/words.csv", 0);
  int32_t x3 = fsize(x2);
  char *x4 = mmap(0, x3, PROT_READ, MAP_SHARED | MAP_SHARED, x2, 0);
  for (;;) {
    int32_t x6 = x5;
    char x7 = x4[x6];
    bool x8 = x7 != ',';
    if (!x8)
      break;
    x5 += 1;
  }
  int32_t x13 = x5;
  x5 += 1;
  int32_t x16 = x5;
  int32_t x17 = 0;
  for (;;) {
    int32_t x18 = x5;
    char x19 = x4[x18];
    bool x20 = x19 != '\n';
    if (!x20)
      break;
    int32_t x22 = x17;
    int32_t x24 = x5;
    int32_t x23 = x22 * 10;
    char x25 = x4[x24];
    char x26 = x25 - '0';
    int32_t x27 = x23 + x26;
    x17 = x27;
    x5 += 1;
  }
  x5 += 1;
  int32_t x33 = x17;
  int32_t x67 = open(x0, 0);
  int32_t x68 = fsize(x67);
  char *x69 = mmap(0, x68, PROT_READ, MAP_SHARED | MAP_SHARED, x67, 0);
  for (;;) {
    int32_t x34 = x5;
    bool x35 = x34 < x3;
    if (!x35)
      break;
    int32_t x37 = x5;
    for (;;) {
      int32_t x38 = x5;
      char x39 = x4[x38];
      bool x40 = x39 != ',';
      if (!x40)
        break;
      x5 += 1;
    }
    int32_t x45 = x5;
    x5 += 1;
    int32_t x49 = x5;
    int32_t x50 = 0;
    for (;;) {
      int32_t x51 = x5;
      char x52 = x4[x51];
      bool x53 = x52 != '\n';
      if (!x53)
        break;
      int32_t x55 = x50;
      int32_t x57 = x5;
      int32_t x56 = x55 * 10;
      char x58 = x4[x57];
      char x59 = x58 - '0';
      int32_t x60 = x56 + x59;
      x50 = x60;
      x5 += 1;
    }
    x5 += 1;
    int32_t x66 = x50;
    int32_t x70 = 0;
    int32_t x46 = x45 - x37;
    char *x48 = x4 + x37;
    for (;;) {
      int32_t x71 = x70;
      bool x72 = x71 < x68;
      if (!x72)
        break;
      int32_t x74 = x70;
      for (;;) {
        int32_t x75 = x70;
        char x76 = x69[x75];
        bool x77 = x76 != '\t';
        if (!x77)
          break;
        x70 += 1;
      }
      int32_t x82 = x70;
      x70 += 1;
      int32_t x86 = x70;
      for (;;) {
        int32_t x87 = x70;
        char x88 = x69[x87];
        bool x89 = x88 != '\t';
        if (!x89)
          break;
        x70 += 1;
      }
      int32_t x94 = x70;
      x70 += 1;
      int32_t x98 = x70;
      for (;;) {
        int32_t x99 = x70;
        char x100 = x69[x99];
        bool x101 = x100 != '\t';
        if (!x101)
          break;
        x70 += 1;
      }
      int32_t x106 = x70;
      x70 += 1;
      int32_t x110 = x70;
      for (;;) {
        int32_t x111 = x70;
        char x112 = x69[x111];
        bool x113 = x112 != '\n';
        if (!x113)
          break;
        x70 += 1;
      }
      int32_t x118 = x70;
      x70 += 1;
      int32_t x83 = x82 - x74;
      bool x123 = x46 == x83;
      bool x138;
      if (x123) {
        int32_t x124 = 0;
        char *x85 = x69 + x74;
        for (;;) {
          int32_t x125 = x124;
          bool x126 = x125 < x46;
          bool x130;
          if (x126) {
            char x127 = x48[x125];
            char x128 = x85[x125];
            bool x129 = x127 == x128;
            x130 = x129;
          } else {
            x130 = false;
          }
          if (!x130)
            break;
          x124 += 1;
        }
        int32_t x135 = x124;
        bool x136 = x135 == x46;
        x138 = x136;
      } else {
        x138 = false;
      }
      if (x138) {
        int32_t x139 = printll(x48);
        printf(",");
        printf("%d", x66);
        printf(",");
        char *x85 = x69 + x74;
        int32_t x143 = printll(x85);
        printf(",");
        char *x97 = x69 + x86;
        int32_t x145 = printll(x97);
        printf(",");
        char *x109 = x69 + x98;
        int32_t x147 = printll(x109);
        printf(",");
        char *x121 = x69 + x110;
        int32_t x149 = printll(x121);
        printf("%s\n", "");
      } else {
      }
    }
  }
}


x86 assembly (clang, -O0):
<Snippet>:
push   %rbp
mov    %rsp,%rbp
sub    $0x260,%rsp
mov    %rdi,-0x8(%rbp)
lea    0xe9a(%rip),%rdi
lea    0xe97(%rip),%rsi
mov    $0x0,%al
call   1040 <printf@plt>
movq   $0x0,-0x10(%rbp)
lea    0xead(%rip),%rdi
xor    %esi,%esi
call   1070 <open@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
call   1060 <fsize@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rsi
mov    0x2e52(%rip),%rax
mov    (%rax),%edx
mov    0x2e39(%rip),%rax
mov    (%rax),%ecx
mov    0x2e30(%rip),%rax
or     (%rax),%ecx
mov    -0x18(%rbp),%r8
xor    %r9d,%r9d
mov    %r9d,%edi
call   1030 <mmap@plt>
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x2c,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
jne    1204 <Snippet+0xb4>
jmp    1215 <Snippet+0xc5>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11cd <Snippet+0x7d>
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x48(%rbp)
movq   $0x0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x58(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x59(%rbp)
movsbl -0x59(%rbp),%eax
cmp    $0xa,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x60(%rbp)
cmpl   $0x0,-0x60(%rbp)
jne    1270 <Snippet+0x120>
jmp    12d0 <Snippet+0x180>
mov    -0x50(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x70(%rbp)
imul   $0xa,-0x68(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x70(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x79(%rbp)
movsbl -0x79(%rbp),%eax
sub    $0x30,%eax
mov    %al,-0x7a(%rbp)
mov    -0x78(%rbp),%rax
movsbq -0x7a(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1239 <Snippet+0xe9>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x8(%rbp),%rdi
xor    %esi,%esi
call   1070 <open@plt>
mov    %rax,-0x98(%rbp)
mov    -0x98(%rbp),%rdi
call   1060 <fsize@plt>
mov    %rax,-0xa0(%rbp)
mov    -0xa0(%rbp),%rsi
mov    0x2cde(%rip),%rax
mov    (%rax),%edx
mov    0x2cc5(%rip),%rax
mov    (%rax),%ecx
mov    0x2cbc(%rip),%rax
or     (%rax),%ecx
mov    -0x98(%rbp),%r8
xor    %r9d,%r9d
mov    %r9d,%edi
call   1030 <mmap@plt>
mov    %rax,-0xa8(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0xb0(%rbp)
mov    -0xb0(%rbp),%rax
cmp    -0x20(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xb4(%rbp)
cmpl   $0x0,-0xb4(%rbp)
jne    137d <Snippet+0x22d>
jmp    1a62 <Snippet+0x912>
mov    -0x10(%rbp),%rax
mov    %rax,-0xc0(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0xc8(%rbp)
mov    -0x28(%rbp),%rax
mov    -0xc8(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0xc9(%rbp)
movsbl -0xc9(%rbp),%eax
cmp    $0x2c,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xd0(%rbp)
cmpl   $0x0,-0xd0(%rbp)
jne    13d1 <Snippet+0x281>
jmp    13e2 <Snippet+0x292>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1388 <Snippet+0x238>
mov    -0x10(%rbp),%rax
mov    %rax,-0xd8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0xe0(%rbp)
movq   $0x0,-0xe8(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0xf0(%rbp)
mov    -0x28(%rbp),%rax
mov    -0xf0(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0xf1(%rbp)
movsbl -0xf1(%rbp),%eax
cmp    $0xa,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xf8(%rbp)
cmpl   $0x0,-0xf8(%rbp)
jne    1458 <Snippet+0x308>
jmp    14dc <Snippet+0x38c>
mov    -0xe8(%rbp),%rax
mov    %rax,-0x100(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x108(%rbp)
imul   $0xa,-0x100(%rbp),%rax
0a
mov    %rax,-0x110(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x108(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x111(%rbp)
movsbl -0x111(%rbp),%eax
sub    $0x30,%eax
mov    %al,-0x112(%rbp)
mov    -0x110(%rbp),%rax
movsbq -0x112(%rbp),%rcx
ff
add    %rcx,%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
mov    %rax,-0xe8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    140f <Snippet+0x2bf>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0xe8(%rbp),%rax
mov    %rax,-0x128(%rbp)
movq   $0x0,-0x130(%rbp)
mov    -0xd8(%rbp),%rax
sub    -0xc0(%rbp),%rax
mov    %rax,-0x138(%rbp)
mov    -0x28(%rbp),%rax
add    -0xc0(%rbp),%rax
mov    %rax,-0x140(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0x148(%rbp),%rax
cmp    -0xa0(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x14c(%rbp)
cmpl   $0x0,-0x14c(%rbp)
jne    1564 <Snippet+0x414>
jmp    1a5d <Snippet+0x90d>
mov    -0x130(%rbp),%rax
mov    %rax,-0x158(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x160(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0x160(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x161(%rbp)
movsbl -0x161(%rbp),%eax
cmp    $0x9,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x168(%rbp)
cmpl   $0x0,-0x168(%rbp)
jne    15c1 <Snippet+0x471>
jmp    15d8 <Snippet+0x488>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
jmp    1572 <Snippet+0x422>
mov    -0x130(%rbp),%rax
mov    %rax,-0x170(%rbp)
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x178(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x180(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0x180(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x181(%rbp)
movsbl -0x181(%rbp),%eax
cmp    $0x9,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x188(%rbp)
cmpl   $0x0,-0x188(%rbp)
jne    1655 <Snippet+0x505>
jmp    166c <Snippet+0x51c>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
jmp    1606 <Snippet+0x4b6>
mov    -0x130(%rbp),%rax
mov    %rax,-0x190(%rbp)
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x198(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x1a0(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0x1a0(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a1(%rbp)
movsbl -0x1a1(%rbp),%eax
cmp    $0x9,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1a8(%rbp)
cmpl   $0x0,-0x1a8(%rbp)
jne    16e9 <Snippet+0x599>
jmp    1700 <Snippet+0x5b0>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
jmp    169a <Snippet+0x54a>
mov    -0x130(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x1b8(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,-0x1c0(%rbp)
mov    -0xa8(%rbp),%rax
mov    -0x1c0(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1c1(%rbp)
movsbl -0x1c1(%rbp),%eax
cmp    $0xa,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1c8(%rbp)
cmpl   $0x0,-0x1c8(%rbp)
jne    177d <Snippet+0x62d>
jmp    1794 <Snippet+0x644>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
jmp    172e <Snippet+0x5de>
mov    -0x130(%rbp),%rax
mov    %rax,-0x1d0(%rbp)
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x170(%rbp),%rax
sub    -0x158(%rbp),%rax
mov    %rax,-0x1d8(%rbp)
mov    -0x138(%rbp),%rax
cmp    -0x1d8(%rbp),%rax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1dc(%rbp)
cmpl   $0x0,-0x1dc(%rbp)
je     1914 <Snippet+0x7c4>
movq   $0x0,-0x1e8(%rbp)
mov    -0xa8(%rbp),%rax
add    -0x158(%rbp),%rax
mov    %rax,-0x1f0(%rbp)
mov    -0x1e8(%rbp),%rax
mov    %rax,-0x1f8(%rbp)
mov    -0x1f8(%rbp),%rax
cmp    -0x138(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1fc(%rbp)
cmpl   $0x0,-0x1fc(%rbp)
je     18a6 <Snippet+0x756>
mov    -0x140(%rbp),%rax
mov    -0x1f8(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x201(%rbp)
mov    -0x1f0(%rbp),%rax
mov    -0x1f8(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x202(%rbp)
movsbl -0x201(%rbp),%eax
movsbl -0x202(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x208(%rbp)
mov    -0x208(%rbp),%eax
mov    %eax,-0x200(%rbp)
jmp    18b0 <Snippet+0x760>
movl   $0x0,-0x200(%rbp)
cmpl   $0x0,-0x200(%rbp)
jne    18c2 <Snippet+0x772>
jmp    18d9 <Snippet+0x789>
mov    -0x1e8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x1e8(%rbp)
jmp    1812 <Snippet+0x6c2>
mov    -0x1e8(%rbp),%rax
mov    %rax,-0x210(%rbp)
mov    -0x210(%rbp),%rax
cmp    -0x138(%rbp),%rax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x214(%rbp)
mov    -0x214(%rbp),%eax
mov    %eax,-0x1e0(%rbp)
jmp    191e <Snippet+0x7ce>
movl   $0x0,-0x1e0(%rbp)
cmpl   $0x0,-0x1e0(%rbp)
je     1a53 <Snippet+0x903>
mov    -0x140(%rbp),%rdi
call   1050 <printll@plt>
mov    %rax,-0x220(%rbp)
lea    0x6fe(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x128(%rbp),%rsi
lea    0x6eb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x6db(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0xa8(%rbp),%rax
add    -0x158(%rbp),%rax
mov    %rax,-0x228(%rbp)
mov    -0x228(%rbp),%rdi
call   1050 <printll@plt>
mov    %rax,-0x230(%rbp)
lea    0x6a5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0xa8(%rbp),%rax
add    -0x178(%rbp),%rax
mov    %rax,-0x238(%rbp)
mov    -0x238(%rbp),%rdi
call   1050 <printll@plt>
mov    %rax,-0x240(%rbp)
lea    0x66f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0xa8(%rbp),%rax
add    -0x198(%rbp),%rax
mov    %rax,-0x248(%rbp)
mov    -0x248(%rbp),%rdi
call   1050 <printll@plt>
mov    %rax,-0x250(%rbp)
lea    0x639(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0xa8(%rbp),%rax
add    -0x1b8(%rbp),%rax
mov    %rax,-0x258(%rbp)
mov    -0x258(%rbp),%rdi
call   1050 <printll@plt>
mov    %rax,-0x260(%rbp)
lea    0x5c0(%rip),%rdi
lea    0x5bc(%rip),%rsi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1a58 <Snippet+0x908>
jmp    1a58 <Snippet+0x908>
jmp    1528 <Snippet+0x3d8>
jmp    1347 <Snippet+0x1f7>
add    $0x260,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Snippet>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rdi,%rbx
lea    0xe78(%rip),%rdi
call   1040 <puts@plt>
lea    0xe98(%rip),%rdi
xor    %esi,%esi
call   1090 <open@plt>
mov    %rax,%rbp
mov    %rax,%rdi
call   1080 <fsize@plt>
mov    0x2e4b(%rip),%r14
mov    (%r14),%edx
mov    0x2e31(%rip),%r15
mov    (%r15),%ecx
xor    %edi,%edi
mov    %rax,0x8(%rsp)
mov    %rax,%rsi
mov    %rbp,%r8
xor    %r9d,%r9d
call   1050 <mmap@plt>
mov    %rax,%rbp
mov    $0xffffffffffffffff,%rax
nopl   0x0(%rax)
cmpb   $0x2c,0x1(%rbp,%rax,1)
lea    0x1(%rax),%rax
jne    11e0 <Snippet+0x70>
cmpb   $0xa,0x1(%rbp,%rax,1)
jne    1200 <Snippet+0x90>
mov    %rax,%rcx
jmp    120e <Snippet+0x9e>
nopw   0x0(%rax,%rax,1)
lea    0x1(%rax),%rcx
cmpb   $0xa,0x2(%rbp,%rax,1)
mov    %rcx,%rax
jne    1200 <Snippet+0x90>
mov    %rbx,%rdi
xor    %esi,%esi
mov    %rcx,%r12
call   1090 <open@plt>
mov    %rax,%r13
mov    %rax,%rdi
call   1080 <fsize@plt>
mov    %rax,%rbx
mov    (%r14),%edx
mov    (%r15),%ecx
xor    %edi,%edi
mov    %rax,%rsi
mov    %r13,%r8
xor    %r9d,%r9d
call   1050 <mmap@plt>
mov    %r12,%rdi
add    $0x2,%rdi
cmp    0x8(%rsp),%rdi
jae    14af <Snippet+0x33f>
mov    %rbx,%r8
mov    %rax,%rbx
lea    0x2(%rax),%r9
lea    0x3(%rax),%r10
mov    %rbp,0x10(%rsp)
mov    %r8,0x30(%rsp)
mov    %r9,0x28(%rsp)
mov    %r10,0x20(%rsp)
jmp    129c <Snippet+0x12c>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x18(%rsp),%rax
add    $0x2,%rax
mov    %rax,%rdi
cmp    0x8(%rsp),%rax
mov    0x10(%rsp),%rbp
jae    14af <Snippet+0x33f>
mov    %rbp,%rax
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rdx,%r11
add    $0xffffffffffffffff,%rdx
cmpb   $0x2c,(%rax,%rdi,1)
lea    0x1(%rax),%rax
jne    12b0 <Snippet+0x140>
mov    (%rax,%rdi,1),%al
cmp    $0xa,%al
jne    12e0 <Snippet+0x170>
not    %rdx
add    %rdi,%rdx
xor    %ecx,%ecx
jmp    130b <Snippet+0x19b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %rdi,%rdx
sub    %r11,%rdx
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
lea    (%rcx,%rcx,4),%rcx
add    $0xd0,%al
movsbq %al,%rax
lea    (%rax,%rcx,2),%rcx
movzbl 0x2(%rbp,%rdx,1),%eax
add    $0x1,%rdx
cmp    $0xa,%al
jne    12f0 <Snippet+0x180>
mov    %rcx,0x48(%rsp)
mov    %rdx,0x18(%rsp)
test   %r8,%r8
je     1280 <Snippet+0x110>
add    0x10(%rsp),%rdi
mov    $0x1,%eax
sub    %r11,%rax
mov    %rax,0x50(%rsp)
xor    %r14d,%r14d
mov    %rdi,0x40(%rsp)
mov    %r11,0x38(%rsp)
jmp    13ec <Snippet+0x27c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
call   1070 <printll@plt>
mov    $0x2c,%edi
call   1030 <putchar@plt>
lea    0xcd9(%rip),%rdi
mov    0x48(%rsp),%rsi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0x2c,%edi
call   1030 <putchar@plt>
mov    %r13,%rdi
call   1070 <printll@plt>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    %rbx,%r15
mov    %r15,%rdi
call   1070 <printll@plt>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    %rbx,%rbp
mov    %rbp,%rdi
call   1070 <printll@plt>
mov    $0x2c,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
call   1070 <printll@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x38(%rsp),%r11
mov    0x20(%rsp),%r10
mov    0x28(%rsp),%r9
mov    0x30(%rsp),%r8
mov    0x40(%rsp),%rdi
cmp    %r8,%r14
jae    1280 <Snippet+0x110>
mov    %r14,%r13
lea    (%r9,%r14,1),%rdx
lea    (%r10,%r14,1),%rbp
mov    0x50(%rsp),%rax
mov    %r14,%r15
nop
add    $0xffffffffffffffff,%rax
cmpb   $0x9,(%rbx,%r15,1)
mov    %rdx,%rcx
mov    %rbp,%rsi
lea    0x1(%r15),%r15
lea    0x1(%rdx),%rdx
lea    0x1(%rbp),%rbp
jne    1400 <Snippet+0x290>
mov    %r15,%rbp
cmpb   $0x9,(%rbx,%rbp,1)
mov    %rcx,%r12
mov    %rsi,%rdx
lea    0x1(%rbp),%rbp
lea    0x1(%rcx),%rcx
lea    0x1(%rsi),%rsi
jne    1420 <Snippet+0x2b0>
mov    %rbp,%r14
nopl   0x0(%rax,%rax,1)
mov    %rdx,%rcx
add    $0x1,%r14
cmpb   $0x9,(%r12)
lea    0x1(%r12),%r12
lea    0x1(%rdx),%rdx
jne    1440 <Snippet+0x2d0>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r14
cmpb   $0xa,(%rcx)
lea    0x1(%rcx),%rcx
jne    1460 <Snippet+0x2f0>
test   %rax,%rax
jne    13e3 <Snippet+0x273>
add    %rbx,%r13
mov    $0xffffffffffffffff,%rax
lea    (%r11,%rax,1),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1350 <Snippet+0x1e0>
movzbl 0x1(%rdi,%rax,1),%edx
lea    0x1(%rax),%rcx
cmp    0x1(%r13,%rax,1),%dl
mov    %rcx,%rax
je     1480 <Snippet+0x310>
add    %r11,%rcx
jne    13e3 <Snippet+0x273>
jmp    1350 <Snippet+0x1e0>
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str.1 = [44 x i8] c"Word,Value,Word,Year,MatchCount,VolumeCount\00"
@.str.2 = [19 x i8] c"src/data/words.csv\00"
@PROT_READ = global i32 0
@MAP_SHARED = global i32 0
@.str.4 = [3 x i8] c"%d\00"
define void @Snippet(i8* nocapture %0) {
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i64 @open(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0), i32 0)
%4 = tail call i64 @fsize(i64 %3)
%5 = load i32, i32* @PROT_READ
%6 = load i32, i32* @MAP_SHARED
%7 = tail call i8* @mmap(i32 0, i64 %4, i32 %5, i32 %6, i64 %3, i32 0)
br label %8
8: ; preds = %8, %1
%9 = phi i64 [ 0, %1 ], [ %13, %8 ]
%10 = getelementptr inbounds i8, i8* %7, i64 %9
%11 = load i8, i8* %10
%12 = icmp eq i8 %11, 44
%13 = add i64 %9, 1
br i1 %12, label %14, label %8
14: ; preds = %8
%15 = getelementptr inbounds i8, i8* %7, i64 %13
%16 = load i8, i8* %15
%17 = icmp eq i8 %16, 10
br i1 %17, label %24, label %18
18: ; preds = %14, %18
%19 = phi i64 [ %20, %18 ], [ %13, %14 ]
%20 = add i64 %19, 1
%21 = getelementptr inbounds i8, i8* %7, i64 %20
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 10
br i1 %23, label %24, label %18
24: ; preds = %18, %14
%25 = phi i64 [ %9, %14 ], [ %19, %18 ]
%26 = tail call i64 @open(i8* %0, i32 0)
%27 = tail call i64 @fsize(i64 %26)
%28 = load i32, i32* @PROT_READ
%29 = load i32, i32* @MAP_SHARED
%30 = tail call i8* @mmap(i32 0, i64 %27, i32 %28, i32 %29, i64 %26, i32 0)
%31 = add i64 %25, 2
%32 = icmp ult i64 %31, %4
br i1 %32, label %33, label %128
33: ; preds = %24
%34 = icmp eq i64 %27, 0
br label %38
35: ; preds = %126, %62
%36 = add i64 %64, 2
%37 = icmp ult i64 %36, %4
br i1 %37, label %38, label %128
38: ; preds = %33, %35
%39 = phi i64 [ %31, %33 ], [ %36, %35 ]
br label %40
40: ; preds = %38, %40
%41 = phi i64 [ %45, %40 ], [ %39, %38 ]
%42 = getelementptr inbounds i8, i8* %7, i64 %41
%43 = load i8, i8* %42
%44 = icmp eq i8 %43, 44
%45 = add i64 %41, 1
br i1 %44, label %46, label %40
46: ; preds = %40
%47 = getelementptr inbounds i8, i8* %7, i64 %45
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 10
br i1 %49, label %62, label %50
50: ; preds = %46, %50
%51 = phi i8 [ %60, %50 ], [ %48, %46 ]
%52 = phi i64 [ %58, %50 ], [ %45, %46 ]
%53 = phi i64 [ %57, %50 ], [ 0, %46 ]
%54 = mul i64 %53, 10
%55 = add i8 %51, -48
%56 = sext i8 %55 to i64
%57 = add i64 %54, %56
%58 = add i64 %52, 1
%59 = getelementptr inbounds i8, i8* %7, i64 %58
%60 = load i8, i8* %59
%61 = icmp eq i8 %60, 10
br i1 %61, label %62, label %50
62: ; preds = %50, %46
%63 = phi i64 [ 0, %46 ], [ %57, %50 ]
%64 = phi i64 [ %41, %46 ], [ %52, %50 ]
%65 = sub i64 %41, %39
%66 = getelementptr inbounds i8, i8* %7, i64 %39
br i1 %34, label %35, label %67
67: ; preds = %62, %126
%68 = phi i64 [ %92, %126 ], [ 0, %62 ]
br label %69
69: ; preds = %67, %69
%70 = phi i64 [ %74, %69 ], [ %68, %67 ]
%71 = getelementptr inbounds i8, i8* %30, i64 %70
%72 = load i8, i8* %71
%73 = icmp eq i8 %72, 9
%74 = add i64 %70, 1
br i1 %73, label %75, label %69
75: ; preds = %69, %75
%76 = phi i64 [ %80, %75 ], [ %74, %69 ]
%77 = getelementptr inbounds i8, i8* %30, i64 %76
%78 = load i8, i8* %77
%79 = icmp eq i8 %78, 9
%80 = add i64 %76, 1
br i1 %79, label %81, label %75
81: ; preds = %75, %81
%82 = phi i64 [ %86, %81 ], [ %80, %75 ]
%83 = getelementptr inbounds i8, i8* %30, i64 %82
%84 = load i8, i8* %83
%85 = icmp eq i8 %84, 9
%86 = add i64 %82, 1
br i1 %85, label %87, label %81
87: ; preds = %81, %87
%88 = phi i64 [ %92, %87 ], [ %86, %81 ]
%89 = getelementptr inbounds i8, i8* %30, i64 %88
%90 = load i8, i8* %89
%91 = icmp eq i8 %90, 10
%92 = add i64 %88, 1
br i1 %91, label %93, label %87
93: ; preds = %87
%94 = sub i64 %70, %68
%95 = icmp eq i64 %65, %94
br i1 %95, label %96, label %126
96: ; preds = %93
%97 = getelementptr inbounds i8, i8* %30, i64 %68
br label %98
98: ; preds = %101, %96
%99 = phi i64 [ 0, %96 ], [ %107, %101 ]
%100 = icmp eq i64 %99, %65
br i1 %100, label %110, label %101
101: ; preds = %98
%102 = getelementptr inbounds i8, i8* %66, i64 %99
%103 = load i8, i8* %102
%104 = getelementptr inbounds i8, i8* %97, i64 %99
%105 = load i8, i8* %104
%106 = icmp eq i8 %103, %105
%107 = add i64 %99, 1
br i1 %106, label %98, label %108
108: ; preds = %101
%109 = icmp eq i64 %99, %65
br i1 %109, label %110, label %126
110: ; preds = %98, %108
%111 = tail call i64 @printll(i8* %66)
%112 = tail call i32 @putchar(i32 44)
%113 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i64 %63)
%114 = tail call i32 @putchar(i32 44)
%115 = tail call i64 @printll(i8* %97)
%116 = tail call i32 @putchar(i32 44)
%117 = getelementptr inbounds i8, i8* %30, i64 %74
%118 = tail call i64 @printll(i8* %117)
%119 = tail call i32 @putchar(i32 44)
%120 = getelementptr inbounds i8, i8* %30, i64 %80
%121 = tail call i64 @printll(i8* %120)
%122 = tail call i32 @putchar(i32 44)
%123 = getelementptr inbounds i8, i8* %30, i64 %86
%124 = tail call i64 @printll(i8* %123)
%125 = tail call i32 @putchar(i32 10)
br label %126
126: ; preds = %93, %110, %108
%127 = icmp ult i64 %92, %27
br i1 %127, label %67, label %35
128: ; preds = %35, %24
ret void
}