#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 eval_preprocessor_boolean(char *, int);
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, int);
scalar_t__ isspace(unsigned char);
int /*<<< orphan*/ stderr;
scalar_t__ strncmp(char *, char *, int);
void preprocess_input(char *z) {
  int i, j, k;
  int exclude = 0;
  int start = 0;
  int lineno = 1;
  int start_lineno = 1;
  for (i = 0; z[i]; i++) {
    if (z[i] == '\n')
      lineno++;
    if (z[i] != '%' || (i > 0 && z[i - 1] != '\n'))
      continue;
    if (strncmp(&z[i], "%endif", 6) == 0 &&
        isspace((unsigned char)(z[i + 6]))) {
      if (exclude) {
        exclude--;
        if (exclude == 0) {
          for (j = start; j < i; j++)
            if (z[j] != '\n')
              z[j] = ' ';
        }
      }
      for (j = i; z[j] && z[j] != '\n'; j++)
        z[j] = ' ';
    } else if (strncmp(&z[i], "%else", 5) == 0 &&
               isspace((unsigned char)(z[i + 5]))) {
      if (exclude == 1) {
        exclude = 0;
        for (j = start; j < i; j++)
          if (z[j] != '\n')
            z[j] = ' ';
      } else if (exclude == 0) {
        exclude = 1;
        start = i;
        start_lineno = lineno;
      }
      for (j = i; z[j] && z[j] != '\n'; j++)
        z[j] = ' ';
    } else if (strncmp(&z[i], "%ifdef ", 7) == 0 ||
               strncmp(&z[i], "%if ", 4) == 0 ||
               strncmp(&z[i], "%ifndef ", 8) == 0) {
      if (exclude) {
        exclude++;
      } else {
        int isNot;
        int iBool;
        for (j = i; z[j] && !isspace((unsigned char)(z[j])); j++) {
        }
        iBool = j;
        isNot = (j == i + 7);
        while (z[j] && z[j] != '\n') {
          j++;
        }
        k = z[j];
        z[j] = 0;
        exclude = eval_preprocessor_boolean(&z[iBool], lineno);
        z[j] = k;
        if (!isNot)
          exclude = !exclude;
        if (exclude) {
          start = i;
          start_lineno = lineno;
        }
      }
      for (j = i; z[j] && z[j] != '\n'; j++)
        z[j] = ' ';
    }
  }
  if (exclude) {
    fprintf(stderr, "unterminated %%ifdef starting on line %d\n", start_lineno);
    exit(1);
  }
}


x86 assembly (clang, -O0):
<preprocess_input>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x1,-0x20(%rbp)
movl   $0x1,-0x24(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpb   $0x0,(%rax,%rcx,1)
je     1677 <preprocess_input+0x527>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    11af <preprocess_input+0x5f>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x25,%eax
jne    11e8 <preprocess_input+0x98>
cmpl   $0x0,-0xc(%rbp)
jle    11ed <preprocess_input+0x9d>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     11ed <preprocess_input+0x9d>
jmp    1669 <preprocess_input+0x519>
mov    -0x8(%rbp),%rdi
movslq -0xc(%rbp),%rax
add    %rax,%rdi
lea    0xe01(%rip),%rsi
mov    $0x6,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1304 <preprocess_input+0x1b4>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
je     1304 <preprocess_input+0x1b4>
cmpl   $0x0,-0x18(%rbp)
je     12a0 <preprocess_input+0x150>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jne    129b <preprocess_input+0x14b>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1296 <preprocess_input+0x146>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1283 <preprocess_input+0x133>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    1288 <preprocess_input+0x138>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1256 <preprocess_input+0x106>
jmp    129b <preprocess_input+0x14b>
jmp    12a0 <preprocess_input+0x150>
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2d(%rbp)
je     12d5 <preprocess_input+0x185>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    12e5 <preprocess_input+0x195>
jmp    12ff <preprocess_input+0x1af>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    12a6 <preprocess_input+0x156>
jmp    1664 <preprocess_input+0x514>
mov    -0x8(%rbp),%rdi
movslq -0xc(%rbp),%rax
add    %rax,%rdi
lea    0xcf1(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    142c <preprocess_input+0x2dc>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
je     142c <preprocess_input+0x2dc>
cmpl   $0x1,-0x18(%rbp)
jne    13a6 <preprocess_input+0x256>
movl   $0x0,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    13a1 <preprocess_input+0x251>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     138e <preprocess_input+0x23e>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    1393 <preprocess_input+0x243>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1361 <preprocess_input+0x211>
jmp    13c8 <preprocess_input+0x278>
cmpl   $0x0,-0x18(%rbp)
jne    13c3 <preprocess_input+0x273>
movl   $0x1,-0x18(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    13c8 <preprocess_input+0x278>
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2e(%rbp)
je     13fd <preprocess_input+0x2ad>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%al
test   $0x1,%al
jne    140d <preprocess_input+0x2bd>
jmp    1427 <preprocess_input+0x2d7>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    13ce <preprocess_input+0x27e>
jmp    165f <preprocess_input+0x50f>
mov    -0x8(%rbp),%rdi
movslq -0xc(%rbp),%rax
add    %rax,%rdi
lea    0xbcf(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     149e <preprocess_input+0x34e>
mov    -0x8(%rbp),%rdi
movslq -0xc(%rbp),%rax
add    %rax,%rdi
lea    0xbb1(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     149e <preprocess_input+0x34e>
mov    -0x8(%rbp),%rdi
movslq -0xc(%rbp),%rax
add    %rax,%rdi
lea    0xb90(%rip),%rsi
mov    $0x8,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    165a <preprocess_input+0x50a>
cmpl   $0x0,-0x18(%rbp)
je     14b6 <preprocess_input+0x366>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    15f6 <preprocess_input+0x4a6>
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2f(%rbp)
je     14f3 <preprocess_input+0x3a3>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movzbl (%rax,%rcx,1),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
setne  %al
xor    $0xff,%al
mov    %al,-0x2f(%rbp)
mov    -0x2f(%rbp),%al
test   $0x1,%al
jne    1503 <preprocess_input+0x3b3>
jmp    1516 <preprocess_input+0x3c6>
jmp    1508 <preprocess_input+0x3b8>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    14bc <preprocess_input+0x36c>
mov    -0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    $0x7,%ecx
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x30(%rbp)
je     1561 <preprocess_input+0x411>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x30(%rbp)
mov    -0x30(%rbp),%al
test   $0x1,%al
jne    1571 <preprocess_input+0x421>
jmp    157f <preprocess_input+0x42f>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1532 <preprocess_input+0x3e2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x8(%rbp),%rdi
movslq -0x2c(%rbp),%rax
add    %rax,%rdi
mov    -0x20(%rbp),%esi
call   1060 <eval_preprocessor_boolean@plt>
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
cmpl   $0x0,-0x28(%rbp)
jne    15db <preprocess_input+0x48b>
cmpl   $0x0,-0x18(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     15f1 <preprocess_input+0x4a1>
mov    -0xc(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    15f6 <preprocess_input+0x4a6>
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x31(%rbp)
je     162b <preprocess_input+0x4db>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    163b <preprocess_input+0x4eb>
jmp    1655 <preprocess_input+0x505>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    15fc <preprocess_input+0x4ac>
jmp    165a <preprocess_input+0x50a>
jmp    165f <preprocess_input+0x50f>
jmp    1664 <preprocess_input+0x514>
jmp    1669 <preprocess_input+0x519>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    117f <preprocess_input+0x2f>
cmpl   $0x0,-0x18(%rbp)
je     16a3 <preprocess_input+0x553>
mov    0x2958(%rip),%rax
mov    (%rax),%edi
mov    -0x24(%rbp),%edx
lea    0x98f(%rip),%rsi
call   1050 <fprintf@plt>
mov    $0x1,%edi
call   1070 <exit@plt>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<preprocess_input>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rdi,%r14
lea    0x1(%rdi),%rbx
mov    $0x1,%ebp
xor    %r13d,%r13d
mov    %rdi,%r15
movl   $0x0,0x8(%rsp)
movl   $0x0,0x10(%rsp)
movl   $0x1,0x14(%rsp)
jmp    11a4 <preprocess_input+0x54>
nopw   0x0(%rax,%rax,1)
test   %al,%al
je     1877 <preprocess_input+0x727>
add    $0x1,%r13
add    $0x1,%r15
add    $0x1,%rbx
mov    (%r14,%r13,1),%al
cmp    $0xa,%al
je     1270 <preprocess_input+0x120>
cmp    $0x25,%al
jne    1190 <preprocess_input+0x40>
test   %r13,%r13
je     11c4 <preprocess_input+0x74>
lea    -0x1(%r13),%eax
cmpb   $0xa,(%r14,%rax,1)
jne    1198 <preprocess_input+0x48>
lea    (%r14,%r13,1),%r12
mov    %r12,%rdi
lea    0xe4e(%rip),%rsi
mov    $0x6,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1278 <preprocess_input+0x128>
mov    %r12,%rdi
lea    0xe38(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     12d3 <preprocess_input+0x183>
mov    %r12,%rdi
lea    0xe21(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1251 <preprocess_input+0x101>
mov    %r12,%rdi
lea    0xe10(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1251 <preprocess_input+0x101>
mov    %r12,%rdi
lea    0xdfc(%rip),%rsi
mov    $0x8,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
jne    1198 <preprocess_input+0x48>
mov    0x8(%rsp),%eax
test   %eax,%eax
je     1336 <preprocess_input+0x1e6>
add    $0x1,%eax
mov    %eax,0x8(%rsp)
jmp    13df <preprocess_input+0x28f>
nopl   0x0(%rax)
add    $0x1,%ebp
jmp    1198 <preprocess_input+0x48>
lea    0x6(%r13),%eax
movzbl (%r14,%rax,1),%edi
call   1040 <isspace@plt>
test   %rax,%rax
je     11e5 <preprocess_input+0x95>
mov    0x8(%rsp),%eax
test   %eax,%eax
je     1834 <preprocess_input+0x6e4>
add    $0xffffffff,%eax
movdqa 0xd5a(%rip),%xmm3
pcmpeqd %xmm4,%xmm4
jne    1836 <preprocess_input+0x6e6>
movslq 0x10(%rsp),%rcx
mov    %r13,%rdx
sub    %rcx,%rdx
jle    1834 <preprocess_input+0x6e4>
cmp    $0x10,%rdx
jae    1657 <preprocess_input+0x507>
mov    %rcx,%rax
jmp    1869 <preprocess_input+0x719>
lea    0x5(%r13),%eax
movzbl (%r14,%rax,1),%edi
call   1040 <isspace@plt>
test   %rax,%rax
je     1202 <preprocess_input+0xb2>
mov    0x8(%rsp),%eax
test   %eax,%eax
je     140d <preprocess_input+0x2bd>
cmp    $0x1,%eax
movdqa 0xcff(%rip),%xmm3
pcmpeqd %xmm4,%xmm4
jne    1614 <preprocess_input+0x4c4>
movslq 0x10(%rsp),%rcx
mov    %r13,%rdx
sub    %rcx,%rdx
jle    1426 <preprocess_input+0x2d6>
movl   $0x0,0x8(%rsp)
cmp    $0x10,%rdx
jae    1433 <preprocess_input+0x2e3>
mov    %rcx,%rax
jmp    1649 <preprocess_input+0x4f9>
mov    %ebp,0x1c(%rsp)
mov    (%r12),%al
mov    %rbx,0x20(%rsp)
mov    %r13d,%ebp
test   %al,%al
je     136b <preprocess_input+0x21b>
nopw   0x0(%rax,%rax,1)
movzbl %al,%edi
call   1040 <isspace@plt>
test   %rax,%rax
jne    136b <preprocess_input+0x21b>
add    $0x1,%ebp
movzbl (%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    1350 <preprocess_input+0x200>
mov    %ebp,%eax
lea    (%r14,%rax,1),%rdi
lea    0x7(%r13),%ecx
mov    %ecx,0x18(%rsp)
mov    %rax,0x8(%rsp)
xchg   %ax,%ax
movzbl (%r14,%rax,1),%ebx
test   %bl,%bl
je     1394 <preprocess_input+0x244>
cmp    $0xa,%bl
je     1394 <preprocess_input+0x244>
add    $0x1,%rax
jmp    1380 <preprocess_input+0x230>
mov    %eax,%r12d
movb   $0x0,(%r14,%r12,1)
mov    0x1c(%rsp),%ebp
mov    %ebp,%esi
call   1060 <eval_preprocessor_boolean@plt>
xor    %ecx,%ecx
test   %eax,%eax
sete   %cl
mov    0x18(%rsp),%edx
cmp    %edx,0x8(%rsp)
mov    %bl,(%r14,%r12,1)
cmove  %eax,%ecx
mov    %ecx,0x8(%rsp)
test   %ecx,%ecx
mov    0x10(%rsp),%eax
cmovne %r13d,%eax
mov    %eax,0x10(%rsp)
mov    0x14(%rsp),%eax
cmovne %ebp,%eax
mov    %eax,0x14(%rsp)
mov    0x20(%rsp),%rbx
mov    %r15,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rax),%ecx
test   %cl,%cl
je     1198 <preprocess_input+0x48>
cmp    $0xa,%cl
je     1198 <preprocess_input+0x48>
movb   $0x20,(%rax)
add    $0x1,%rax
jmp    13f0 <preprocess_input+0x2a0>
movl   $0x1,0x8(%rsp)
mov    %r13d,%eax
mov    %r13d,0x10(%rsp)
mov    %ebp,0x14(%rsp)
jmp    1614 <preprocess_input+0x4c4>
movl   $0x0,0x8(%rsp)
jmp    1614 <preprocess_input+0x4c4>
mov    %ebp,%r8d
mov    %rdx,%rsi
and    $0xfffffffffffffff0,%rsi
lea    (%rsi,%rcx,1),%rax
add    %r14,%rcx
xor    %edi,%edi
jmp    145d <preprocess_input+0x30d>
nopl   0x0(%rax,%rax,1)
add    $0x10,%rdi
cmp    %rdi,%rsi
je     160c <preprocess_input+0x4bc>
movq   (%rcx,%rdi,1),%xmm1
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
movd   %xmm0,%ebp
not    %bpl
test   $0x1,%bpl
je     147b <preprocess_input+0x32b>
movb   $0x20,(%rcx,%rdi,1)
pxor   %xmm4,%xmm0
movdqa %xmm0,%xmm2
pslld  $0x8,%xmm2
movd   %xmm2,%ebp
shr    $0x10,%ebp
test   $0x1,%bpl
je     149a <preprocess_input+0x34a>
movb   $0x20,0x1(%rcx,%rdi,1)
pshuflw $0x55,%xmm1,%xmm2
pcmpeqb %xmm3,%xmm2
pxor   %xmm4,%xmm2
pextrw $0x2,%xmm2,%ebp
test   $0x1,%bpl
je     14b7 <preprocess_input+0x367>
movb   $0x20,0x2(%rcx,%rdi,1)
movdqa %xmm0,%xmm2
psllq  $0x18,%xmm2
pextrw $0x3,%xmm2,%ebp
test   $0x1,%bpl
je     14d0 <preprocess_input+0x380>
movb   $0x20,0x3(%rcx,%rdi,1)
pshufd $0x55,%xmm1,%xmm1
pcmpeqb 0xb33(%rip),%xmm1
pxor   %xmm4,%xmm1
pextrw $0x4,%xmm1,%ebp
test   $0x1,%bpl
je     14f1 <preprocess_input+0x3a1>
movb   $0x20,0x4(%rcx,%rdi,1)
movdqa %xmm0,%xmm1
pslldq $0x5,%xmm1
pextrw $0x5,%xmm1,%ebp
test   $0x1,%bpl
je     150a <preprocess_input+0x3ba>
movb   $0x20,0x5(%rcx,%rdi,1)
pextrw $0x3,%xmm0,%ebp
test   $0x1,%bpl
je     151a <preprocess_input+0x3ca>
movb   $0x20,0x6(%rcx,%rdi,1)
pslldq $0x7,%xmm0
pextrw $0x7,%xmm0,%ebp
test   $0x1,%bpl
je     152f <preprocess_input+0x3df>
movb   $0x20,0x7(%rcx,%rdi,1)
movq   0x8(%rcx,%rdi,1),%xmm1
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
movd   %xmm0,%ebp
not    %bpl
test   $0x1,%bpl
je     154f <preprocess_input+0x3ff>
movb   $0x20,0x8(%rcx,%rdi,1)
pxor   %xmm4,%xmm0
movdqa %xmm0,%xmm2
pslld  $0x8,%xmm2
movd   %xmm2,%ebp
shr    $0x10,%ebp
test   $0x1,%bpl
je     156e <preprocess_input+0x41e>
movb   $0x20,0x9(%rcx,%rdi,1)
pshuflw $0x55,%xmm1,%xmm2
pcmpeqb %xmm3,%xmm2
pxor   %xmm4,%xmm2
pextrw $0x2,%xmm2,%ebp
test   $0x1,%bpl
je     158b <preprocess_input+0x43b>
movb   $0x20,0xa(%rcx,%rdi,1)
movdqa %xmm0,%xmm2
psllq  $0x18,%xmm2
pextrw $0x3,%xmm2,%ebp
test   $0x1,%bpl
je     15a4 <preprocess_input+0x454>
movb   $0x20,0xb(%rcx,%rdi,1)
pshufd $0x55,%xmm1,%xmm1
pcmpeqb 0xa5f(%rip),%xmm1
pxor   %xmm4,%xmm1
pextrw $0x4,%xmm1,%ebp
test   $0x1,%bpl
je     15c5 <preprocess_input+0x475>
movb   $0x20,0xc(%rcx,%rdi,1)
movdqa %xmm0,%xmm1
pslldq $0x5,%xmm1
pextrw $0x5,%xmm1,%ebp
test   $0x1,%bpl
je     15de <preprocess_input+0x48e>
movb   $0x20,0xd(%rcx,%rdi,1)
pextrw $0x3,%xmm0,%ebp
test   $0x1,%bpl
je     15ee <preprocess_input+0x49e>
movb   $0x20,0xe(%rcx,%rdi,1)
pslldq $0x7,%xmm0
pextrw $0x7,%xmm0,%ebp
test   $0x1,%bpl
je     1450 <preprocess_input+0x300>
movb   $0x20,0xf(%rcx,%rdi,1)
jmp    1450 <preprocess_input+0x300>
cmp    %rsi,%rdx
mov    %r8d,%ebp
jne    1649 <preprocess_input+0x4f9>
mov    %r15,%rax
nopw   0x0(%rax,%rax,1)
movzbl (%rax),%ecx
test   %cl,%cl
je     1198 <preprocess_input+0x48>
cmp    $0xa,%cl
je     1198 <preprocess_input+0x48>
movb   $0x20,(%rax)
add    $0x1,%rax
jmp    1620 <preprocess_input+0x4d0>
nopl   (%rax)
add    $0x1,%rax
cmp    %rax,%r13
je     1614 <preprocess_input+0x4c4>
cmpb   $0xa,(%r14,%rax,1)
je     1640 <preprocess_input+0x4f0>
movb   $0x20,(%r14,%rax,1)
jmp    1640 <preprocess_input+0x4f0>
mov    %ebp,%r8d
mov    %rdx,%rsi
and    $0xfffffffffffffff0,%rsi
lea    (%rsi,%rcx,1),%rax
add    %r14,%rcx
xor    %edi,%edi
jmp    167d <preprocess_input+0x52d>
nopl   0x0(%rax)
add    $0x10,%rdi
cmp    %rdi,%rsi
je     182c <preprocess_input+0x6dc>
movq   (%rcx,%rdi,1),%xmm1
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
movd   %xmm0,%ebp
not    %bpl
test   $0x1,%bpl
je     169b <preprocess_input+0x54b>
movb   $0x20,(%rcx,%rdi,1)
pxor   %xmm4,%xmm0
movdqa %xmm0,%xmm2
pslld  $0x8,%xmm2
movd   %xmm2,%ebp
shr    $0x10,%ebp
test   $0x1,%bpl
je     16ba <preprocess_input+0x56a>
movb   $0x20,0x1(%rcx,%rdi,1)
pshuflw $0x55,%xmm1,%xmm2
pcmpeqb %xmm3,%xmm2
pxor   %xmm4,%xmm2
pextrw $0x2,%xmm2,%ebp
test   $0x1,%bpl
je     16d7 <preprocess_input+0x587>
movb   $0x20,0x2(%rcx,%rdi,1)
movdqa %xmm0,%xmm2
psllq  $0x18,%xmm2
pextrw $0x3,%xmm2,%ebp
test   $0x1,%bpl
je     16f0 <preprocess_input+0x5a0>
movb   $0x20,0x3(%rcx,%rdi,1)
pshufd $0x55,%xmm1,%xmm1
pcmpeqb 0x913(%rip),%xmm1
pxor   %xmm4,%xmm1
pextrw $0x4,%xmm1,%ebp
test   $0x1,%bpl
je     1711 <preprocess_input+0x5c1>
movb   $0x20,0x4(%rcx,%rdi,1)
movdqa %xmm0,%xmm1
pslldq $0x5,%xmm1
pextrw $0x5,%xmm1,%ebp
test   $0x1,%bpl
je     172a <preprocess_input+0x5da>
movb   $0x20,0x5(%rcx,%rdi,1)
pextrw $0x3,%xmm0,%ebp
test   $0x1,%bpl
je     173a <preprocess_input+0x5ea>
movb   $0x20,0x6(%rcx,%rdi,1)
pslldq $0x7,%xmm0
pextrw $0x7,%xmm0,%ebp
test   $0x1,%bpl
je     174f <preprocess_input+0x5ff>
movb   $0x20,0x7(%rcx,%rdi,1)
movq   0x8(%rcx,%rdi,1),%xmm1
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
movd   %xmm0,%ebp
not    %bpl
test   $0x1,%bpl
je     176f <preprocess_input+0x61f>
movb   $0x20,0x8(%rcx,%rdi,1)
pxor   %xmm4,%xmm0
movdqa %xmm0,%xmm2
pslld  $0x8,%xmm2
movd   %xmm2,%ebp
shr    $0x10,%ebp
test   $0x1,%bpl
je     178e <preprocess_input+0x63e>
movb   $0x20,0x9(%rcx,%rdi,1)
pshuflw $0x55,%xmm1,%xmm2
pcmpeqb %xmm3,%xmm2
pxor   %xmm4,%xmm2
pextrw $0x2,%xmm2,%ebp
test   $0x1,%bpl
je     17ab <preprocess_input+0x65b>
movb   $0x20,0xa(%rcx,%rdi,1)
movdqa %xmm0,%xmm2
psllq  $0x18,%xmm2
pextrw $0x3,%xmm2,%ebp
test   $0x1,%bpl
je     17c4 <preprocess_input+0x674>
movb   $0x20,0xb(%rcx,%rdi,1)
pshufd $0x55,%xmm1,%xmm1
pcmpeqb 0x83f(%rip),%xmm1
pxor   %xmm4,%xmm1
pextrw $0x4,%xmm1,%ebp
test   $0x1,%bpl
je     17e5 <preprocess_input+0x695>
movb   $0x20,0xc(%rcx,%rdi,1)
movdqa %xmm0,%xmm1
pslldq $0x5,%xmm1
pextrw $0x5,%xmm1,%ebp
test   $0x1,%bpl
je     17fe <preprocess_input+0x6ae>
movb   $0x20,0xd(%rcx,%rdi,1)
pextrw $0x3,%xmm0,%ebp
test   $0x1,%bpl
je     180e <preprocess_input+0x6be>
movb   $0x20,0xe(%rcx,%rdi,1)
pslldq $0x7,%xmm0
pextrw $0x7,%xmm0,%ebp
test   $0x1,%bpl
je     1670 <preprocess_input+0x520>
movb   $0x20,0xf(%rcx,%rdi,1)
jmp    1670 <preprocess_input+0x520>
cmp    %rsi,%rdx
mov    %r8d,%ebp
jne    1869 <preprocess_input+0x719>
xor    %eax,%eax
mov    %eax,0x8(%rsp)
mov    %r15,%rax
nopl   (%rax)
movzbl (%rax),%ecx
test   %cl,%cl
je     1198 <preprocess_input+0x48>
cmp    $0xa,%cl
je     1198 <preprocess_input+0x48>
movb   $0x20,(%rax)
add    $0x1,%rax
jmp    1840 <preprocess_input+0x6f0>
nopl   (%rax)
add    $0x1,%rax
cmp    %rax,%r13
je     1834 <preprocess_input+0x6e4>
cmpb   $0xa,(%r14,%rax,1)
je     1860 <preprocess_input+0x710>
movb   $0x20,(%r14,%rax,1)
jmp    1860 <preprocess_input+0x710>
cmpl   $0x0,0x8(%rsp)
jne    188d <preprocess_input+0x73d>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x274c(%rip),%rax
mov    (%rax),%edi
lea    0x7a6(%rip),%rsi
mov    0x14(%rsp),%edx
call   1050 <fprintf@plt>
mov    $0x1,%edi
call   1070 <exit@plt>

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

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