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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
char EOF;
int /*<<< orphan*/ printf(char *, ...);
void decomment(int len, char text[10000]) {
  int i, j, k, p, p1, p2, ex, start, end, diff, st, et, count;
  i = j = k = p = p1 = p2 = ex = start = end = diff = st = et = count = 0;
  for (i = 1; i <= len; ++i) {
    if (text[i] == '/')
      if (text[i - 1] == '/') {
        j = (i);
        p = 1;
        start = (i - 1);
        p1 = ex = 0;
        while ((ex == 0) && (p1 == 0)) {
          if (text[j] == '"')
            p1 = 1;
          if ((j <= 0) || (text[j] == '\n'))
            ex = 1;
          --j;
        };
        if (p1 == 1) {
          j = (i);
          p2 = ex = 0;
          while ((ex == 0) && (p2 == 0)) {
            if (text[j] == '"')
              p2 = 1;
            if ((text[j] == '\n') || (text[j] == EOF) || (j == len))
              ex = 1;
            ++j;
          };
        };
        if ((p1 != 1) || (p2 != 1)) {
          p = 0;
          k = i;
          while (p == 0) {
            if ((text[k] == '\n') || (text[k] == EOF))
              p = 1;
            ++k;
          }
          if (p == 1)
            end = (k - 1);
          diff = end - start;
          if (text[end] == EOF)
            printf("The end)\n");
          for (k = start; (k + diff) <= len; ++k) {
            text[k] = text[k + diff];
          }
          ex = 0;
        }
      }
  };
  p1 = p2 = p = ex = start = end = 0;
  for (i = 1; i < len; ++i) {
    if (text[i] == '*')
      if (text[i - 1] == '/') {
        j = (i);
        p1 = ex = start = end = st = et = 0;
        while ((ex == 0) && (p1 == 0)) {
          if (text[j] == '"') {
            p1 = 1;
          }
          if ((j <= 0) || text[j] == '\n') {
            ex = 1;
          }
          --j;
        }
        if (p1 == 1) {
          j = (i + 1);
          p2 = ex = 0;
          while ((ex == 0) && (p2 == 0)) {
            if (text[j] == '"')
              p2 = 1;
            if ((text[j] == '\n') || (text[j] == EOF) || (j == len)) {
              ex = 1;
            }
            ++j;
          }
        }
        if ((p1 != 1) || (p2 != 1)) {
          start = (i - 1);
          st = 1;
          printf("start=i=%d;len=%d\n", start, len);
          p1 = p2 = ex = et = count = 0;
          for (j = i; j < len; ++j) {
            if (text[j] == '*')
              if (text[j + 1] == '/') {
                k = j;
                p1 = p = ex = 0;
                while ((ex == 0) && (p1 == 0)) {
                  if (text[k] == '"')
                    p1 = 1;
                  if ((k <= 0) || (text[k] == '\n'))
                    ex = 1;
                  --k;
                }
                k = j;
                p2 = ex = 0;
                if (p1 == 1) {
                  while ((ex == 0) && (p2 == 0)) {
                    if (text[k] == '"')
                      p2 = 1;
                    if ((text[k] == '\n') || (text[k] == EOF) || (k == len))
                      ex = 1;
                    ++k;
                  }
                }
                if ((p1 != 1) || (p2 != 1))
                  end = j + 1;
                et = 1;
                diff = end - start;
                printf("end=(j-1)=%d;diff=%d\n", end, diff);
              }
            if ((st == 1) && (et == 1)) {
              for (k = start; (k + diff) < len; ++k) {
                text[k] = text[k + diff];
                printf("text[k=%d]=%c;text[k+diff=%d]=%c\n", k, text[k],
                       (k + diff), text[k + diff]);
              }
              len = len - diff;
              ++count;
              printf("after moving len=%d;count=%d\n", len, count);
            }
          }
        }
      }
  };
}


x86 assembly (clang, -O0):
<decomment>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1432 <decomment+0x322>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    141f <decomment+0x30f>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    141a <decomment+0x30a>
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x1,-0x20(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x24(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x45(%rbp)
jne    11f9 <decomment+0xe9>
cmpl   $0x0,-0x24(%rbp)
sete   %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
test   $0x1,%al
jne    1209 <decomment+0xf9>
jmp    1259 <decomment+0x149>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    1225 <decomment+0x115>
movl   $0x1,-0x24(%rbp)
cmpl   $0x0,-0x18(%rbp)
jle    1244 <decomment+0x134>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    124b <decomment+0x13b>
movl   $0x1,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    11e0 <decomment+0xd0>
cmpl   $0x1,-0x24(%rbp)
jne    1315 <decomment+0x205>
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x46(%rbp)
jne    1290 <decomment+0x180>
cmpl   $0x0,-0x28(%rbp)
sete   %al
mov    %al,-0x46(%rbp)
mov    -0x46(%rbp),%al
test   $0x1,%al
jne    12a0 <decomment+0x190>
jmp    1310 <decomment+0x200>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    12bc <decomment+0x1ac>
movl   $0x1,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     12fb <decomment+0x1eb>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    0x2d04(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     12fb <decomment+0x1eb>
mov    -0x18(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    1302 <decomment+0x1f2>
movl   $0x1,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1277 <decomment+0x167>
jmp    1315 <decomment+0x205>
cmpl   $0x1,-0x24(%rbp)
jne    1329 <decomment+0x219>
cmpl   $0x1,-0x28(%rbp)
je     1415 <decomment+0x305>
movl   $0x0,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x20(%rbp)
jne    1388 <decomment+0x278>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1373 <decomment+0x263>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    0x2c80(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    137a <decomment+0x26a>
movl   $0x1,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1336 <decomment+0x226>
cmpl   $0x1,-0x20(%rbp)
jne    139b <decomment+0x28b>
mov    -0x1c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    0x2c31(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    13d0 <decomment+0x2c0>
lea    0xc37(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x30(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     140e <decomment+0x2fe>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13d6 <decomment+0x2c6>
movl   $0x0,-0x2c(%rbp)
jmp    141a <decomment+0x30a>
jmp    141f <decomment+0x30f>
jmp    1424 <decomment+0x314>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1181 <decomment+0x71>
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    191f <decomment+0x80f>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    190c <decomment+0x7fc>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1907 <decomment+0x7f7>
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x24(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x47(%rbp)
jne    14e7 <decomment+0x3d7>
cmpl   $0x0,-0x24(%rbp)
sete   %al
mov    %al,-0x47(%rbp)
mov    -0x47(%rbp),%al
test   $0x1,%al
jne    14f7 <decomment+0x3e7>
jmp    1547 <decomment+0x437>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    1513 <decomment+0x403>
movl   $0x1,-0x24(%rbp)
cmpl   $0x0,-0x18(%rbp)
jle    1532 <decomment+0x422>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    1539 <decomment+0x429>
movl   $0x1,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    14ce <decomment+0x3be>
cmpl   $0x1,-0x24(%rbp)
jne    1606 <decomment+0x4f6>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x48(%rbp)
jne    1581 <decomment+0x471>
cmpl   $0x0,-0x28(%rbp)
sete   %al
mov    %al,-0x48(%rbp)
mov    -0x48(%rbp),%al
test   $0x1,%al
jne    1591 <decomment+0x481>
jmp    1601 <decomment+0x4f1>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    15ad <decomment+0x49d>
movl   $0x1,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     15ec <decomment+0x4dc>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    0x2a13(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     15ec <decomment+0x4dc>
mov    -0x18(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    15f3 <decomment+0x4e3>
movl   $0x1,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1568 <decomment+0x458>
jmp    1606 <decomment+0x4f6>
cmpl   $0x1,-0x24(%rbp)
jne    161a <decomment+0x50a>
cmpl   $0x1,-0x28(%rbp)
je     1902 <decomment+0x7f2>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
movl   $0x1,-0x3c(%rbp)
mov    -0x30(%rbp),%esi
mov    -0x4(%rbp),%edx
lea    0x9d3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    18fd <decomment+0x7ed>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    183d <decomment+0x72d>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1838 <decomment+0x728>
mov    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x49(%rbp)
jne    16d6 <decomment+0x5c6>
cmpl   $0x0,-0x24(%rbp)
sete   %al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
test   $0x1,%al
jne    16e6 <decomment+0x5d6>
jmp    1736 <decomment+0x626>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    1702 <decomment+0x5f2>
movl   $0x1,-0x24(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1721 <decomment+0x611>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    1728 <decomment+0x618>
movl   $0x1,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    16bd <decomment+0x5ad>
mov    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0x1,-0x24(%rbp)
jne    17f7 <decomment+0x6e7>
jmp    1759 <decomment+0x649>
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x4a(%rbp)
jne    1772 <decomment+0x662>
cmpl   $0x0,-0x28(%rbp)
sete   %al
mov    %al,-0x4a(%rbp)
mov    -0x4a(%rbp),%al
test   $0x1,%al
jne    1782 <decomment+0x672>
jmp    17f2 <decomment+0x6e2>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    179e <decomment+0x68e>
movl   $0x1,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     17dd <decomment+0x6cd>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    0x2822(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     17dd <decomment+0x6cd>
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jne    17e4 <decomment+0x6d4>
movl   $0x1,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1759 <decomment+0x649>
jmp    17f7 <decomment+0x6e7>
cmpl   $0x1,-0x24(%rbp)
jne    180b <decomment+0x6fb>
cmpl   $0x1,-0x28(%rbp)
je     1814 <decomment+0x704>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x34(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%esi
mov    -0x38(%rbp),%edx
lea    0x7ec(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    183d <decomment+0x72d>
cmpl   $0x1,-0x3c(%rbp)
jne    18ea <decomment+0x7da>
cmpl   $0x1,-0x40(%rbp)
jne    18ea <decomment+0x7da>
mov    -0x30(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    18c4 <decomment+0x7b4>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%esi
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    -0x1c(%rbp),%ecx
add    -0x38(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%edi
add    -0x38(%rbp),%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
lea    0x784(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1857 <decomment+0x747>
mov    -0x4(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x44(%rbp),%edx
lea    0x772(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    18ef <decomment+0x7df>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1667 <decomment+0x557>
jmp    1902 <decomment+0x7f2>
jmp    1907 <decomment+0x7f7>
jmp    190c <decomment+0x7fc>
jmp    1911 <decomment+0x801>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1463 <decomment+0x353>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<decomment>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
test   %edi,%edi
jle    17ee <decomment+0x6ce>
mov    %rsi,%rbx
mov    %edi,%r12d
mov    %edi,%r11d
lea    0x1(%r12),%eax
mov    %eax,0x28(%rsp)
lea    0x1(%rsi),%rax
mov    %rax,0x40(%rsp)
lea    0x30(%rsi),%r13
mov    $0x1,%r15d
xor    %r8d,%r8d
mov    %rsi,%rbp
xor    %r14d,%r14d
xor    %eax,%eax
mov    %rax,0x20(%rsp)
mov    %r11,0x48(%rsp)
mov    %r12,0x10(%rsp)
jmp    119d <decomment+0x7d>
mov    0x10(%rsp),%r12
nopl   0x0(%rax)
add    $0x1,%r15
add    $0x1,%r14
add    $0x1,%r13
add    $0x1,%rbp
add    $0xffffffff,%r8d
cmp    %r11,%r14
je     153c <decomment+0x41c>
cmpb   $0x2f,(%rbx,%r15,1)
jne    1180 <decomment+0x60>
cmpb   $0x2f,-0x1(%rbx,%r15,1)
jne    1180 <decomment+0x60>
lea    (%rbx,%r14,1),%rax
mov    %rax,0x30(%rsp)
lea    (%rbx,%r15,1),%r10
lea    -0x1(%r15),%r9
mov    $0x2f,%dl
xor    %eax,%eax
mov    %r15,%rcx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0xa,%dl
je     11ed <decomment+0xcd>
cmp    $0x22,%dl
je     11ed <decomment+0xcd>
add    $0xffffffffffffffff,%rcx
movzbl (%rbx,%rcx,1),%edx
cmp    $0x22,%dl
sete   %al
test   %rcx,%rcx
jg     11d0 <decomment+0xb0>
test   $0x1,%al
je     123a <decomment+0x11a>
mov    0x2df0(%rip),%rcx
mov    (%rcx),%dil
xor    %ecx,%ecx
cmp    $0x2f,%dil
je     1232 <decomment+0x112>
cmp    %r11,%r15
je     1232 <decomment+0x112>
lea    0x1(%r15),%rsi
nopl   0x0(%rax)
movzbl (%rbx,%rsi,1),%edx
cmp    $0x22,%dl
sete   %cl
cmp    $0xa,%dl
je     1232 <decomment+0x112>
cmp    %dil,%dl
je     1232 <decomment+0x112>
cmp    %rsi,%r11
je     1232 <decomment+0x112>
add    $0x1,%rsi
cmp    $0x22,%dl
jne    1210 <decomment+0xf0>
test   %cl,%al
jne    1180 <decomment+0x60>
mov    0x2da7(%rip),%rax
mov    (%rax),%al
mov    %r15,%r12
cmp    $0x2f,%al
je     1263 <decomment+0x143>
mov    %r15,%r12
nopl   (%rax)
movzbl 0x1(%rbx,%r12,1),%ecx
add    $0x1,%r12
cmp    $0xa,%cl
je     1263 <decomment+0x143>
cmp    %al,%cl
jne    1250 <decomment+0x130>
mov    %r12d,%ecx
cmp    %al,(%rbx,%rcx,1)
jne    12a0 <decomment+0x180>
lea    0xdf7(%rip),%rdi
mov    %r8,0x18(%rsp)
mov    %rbp,0x8(%rsp)
mov    %r10,%rbp
mov    %r9,0x20(%rsp)
call   1030 <puts@plt>
mov    0x20(%rsp),%r9
mov    %rbp,%r10
mov    0x8(%rsp),%rbp
mov    0x18(%rsp),%r8
mov    0x48(%rsp),%r11
mov    %r12d,%eax
sub    %r9d,%eax
mov    %rax,0x20(%rsp)
cmp    0x10(%rsp),%r12d
jg     1177 <decomment+0x57>
lea    0x1(%r12),%eax
mov    0x28(%rsp),%ecx
cmp    %eax,%ecx
mov    %eax,%r9d
cmovg  %ecx,%r9d
mov    %r12d,%edi
not    %edi
add    %edi,%r9d
mov    %r14,%rdx
mov    %r12d,%esi
cmp    $0x7,%r9d
jb     1505 <decomment+0x3e5>
mov    0x28(%rsp),%edx
cmp    %eax,%edx
mov    %eax,%ecx
cmovg  %edx,%ecx
add    $0xffffffff,%ecx
mov    %r14,%rdx
mov    %r12d,%esi
cmp    %r12d,%ecx
jl     1505 <decomment+0x3e5>
mov    0x28(%rsp),%ecx
cmp    %eax,%ecx
cmovg  %ecx,%eax
add    %edi,%eax
movslq %r12d,%rdi
lea    (%rdi,%rax,1),%rcx
add    0x40(%rsp),%rcx
cmp    %rcx,0x30(%rsp)
jae    1330 <decomment+0x210>
add    %rax,%r10
add    %rbx,%rdi
mov    %r14,%rdx
mov    %r12d,%esi
cmp    %r10,%rdi
jb     1505 <decomment+0x3e5>
cmp    $0x1f,%r9d
mov    %r8,0x18(%rsp)
mov    %rbp,0x8(%rsp)
jae    1352 <decomment+0x232>
xor    %r10d,%r10d
movabs $0x800000000,%rbp
jmp    144c <decomment+0x32c>
add    $0x1,%r9
mov    %r9,%r10
movabs $0x1ffffffe0,%rax
and    %rax,%r10
lea    -0x20(%r10),%rax
mov    %rax,%rcx
shr    $0x5,%rcx
add    $0x1,%rcx
test   %rax,%rax
mov    %rcx,0x30(%rsp)
je     14d5 <decomment+0x3b5>
mov    %rcx,%rdi
and    $0xfffffffffffffffe,%rdi
mov    %r12,%rdx
shl    $0x20,%rdx
xor    %esi,%esi
movabs $0x800000000,%rbp
movabs $0x2000000000,%rcx
movabs $0x4000000000,%r8
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rdx,%rax
sar    $0x20,%rax
movups (%rbx,%rax,1),%xmm0
movups 0x10(%rbx,%rax,1),%xmm1
movups %xmm0,-0x30(%r13,%rsi,1)
movups %xmm1,-0x20(%r13,%rsi,1)
lea    (%rdx,%rcx,1),%rax
sar    $0x20,%rax
movups (%rbx,%rax,1),%xmm0
movups 0x10(%rbx,%rax,1),%xmm1
movups %xmm0,-0x10(%r13,%rsi,1)
movups %xmm1,0x0(%r13,%rsi,1)
add    $0x40,%rsi
add    %r8,%rdx
add    $0xfffffffffffffffe,%rdi
jne    13c0 <decomment+0x2a0>
testb  $0x1,0x30(%rsp)
je     1429 <decomment+0x309>
lea    (%r14,%rsi,1),%rax
add    %r12d,%esi
movslq %esi,%rcx
movups (%rbx,%rcx,1),%xmm0
movups 0x10(%rbx,%rcx,1),%xmm1
movups %xmm0,(%rbx,%rax,1)
movups %xmm1,0x10(%rbx,%rax,1)
cmp    %r10,%r9
jne    1442 <decomment+0x322>
mov    0x10(%rsp),%r12
mov    0x18(%rsp),%r8
mov    0x8(%rsp),%rbp
jmp    1180 <decomment+0x60>
test   $0x18,%r9b
je     14f1 <decomment+0x3d1>
lea    0x1(%r12),%eax
mov    0x28(%rsp),%ecx
cmp    %eax,%ecx
cmovg  %ecx,%eax
mov    %r12d,%r9d
not    %r9d
add    %eax,%r9d
add    $0x1,%r9
movabs $0x1ffffffe0,%rax
lea    0x18(%rax),%r8
and    %r9,%r8
lea    (%r14,%r8,1),%rdx
lea    (%r12,%r8,1),%esi
lea    (%r10,%r12,1),%ecx
shl    $0x20,%rcx
mov    %r8,%r11
sub    %r10,%r11
add    0x8(%rsp),%r10
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rcx,%rdi
sar    $0x20,%rdi
mov    (%rbx,%rdi,1),%rdi
mov    %rdi,(%r10,%rax,1)
add    %rbp,%rcx
add    $0x8,%rax
cmp    %rax,%r11
jne    14a0 <decomment+0x380>
cmp    %r8,%r9
mov    0x48(%rsp),%r11
mov    0x18(%rsp),%r8
mov    0x8(%rsp),%rbp
je     1177 <decomment+0x57>
jmp    1505 <decomment+0x3e5>
xor    %esi,%esi
movabs $0x800000000,%rbp
testb  $0x1,0x30(%rsp)
jne    140d <decomment+0x2ed>
jmp    1429 <decomment+0x309>
lea    (%r12,%r10,1),%esi
add    %r14,%r10
mov    %r10,%rdx
mov    0x18(%rsp),%r8
mov    0x8(%rsp),%rbp
lea    (%rbx,%rdx,1),%rax
add    %r8d,%edx
add    %r12d,%edx
mov    0x10(%rsp),%r12
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq %esi,%rcx
movzbl (%rbx,%rcx,1),%ecx
mov    %cl,(%rax)
add    $0x1,%rax
add    $0x1,%edx
mov    %edx,%esi
cmp    %r12d,%edx
jle    1520 <decomment+0x400>
jmp    1180 <decomment+0x60>
cmp    $0x2,%r12d
jl     17ee <decomment+0x6ce>
mov    $0x1,%r14d
xor    %eax,%eax
mov    %rax,0x40(%rsp)
jmp    1576 <decomment+0x456>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r14
movslq %r12d,%rax
addq   $0x1,0x40(%rsp)
cmp    %rax,%r14
jge    17ee <decomment+0x6ce>
cmpb   $0x2a,(%rbx,%r14,1)
jne    1560 <decomment+0x440>
cmpb   $0x2f,-0x1(%rbx,%r14,1)
jne    1560 <decomment+0x440>
lea    -0x1(%r14),%rax
mov    %rax,0x50(%rsp)
lea    -0x1(%r14),%eax
mov    %rax,0x28(%rsp)
mov    $0x2a,%dl
xor    %eax,%eax
mov    %r14,%rcx
xchg   %ax,%ax
cmp    $0xa,%dl
je     15bd <decomment+0x49d>
cmp    $0x22,%dl
je     15bd <decomment+0x49d>
add    $0xffffffffffffffff,%rcx
movzbl (%rbx,%rcx,1),%edx
cmp    $0x22,%dl
sete   %al
test   %rcx,%rcx
jg     15a0 <decomment+0x480>
test   $0x1,%al
je     1602 <decomment+0x4e2>
mov    0x2a20(%rip),%rax
mov    (%rax),%sil
mov    %r12d,%ecx
lea    0x1(%r14),%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rbx,%rdx,1),%eax
cmp    $0xa,%al
je     15fa <decomment+0x4da>
cmp    %sil,%al
je     15fa <decomment+0x4da>
cmp    %rdx,%rcx
je     15fa <decomment+0x4da>
add    $0x1,%rdx
cmp    $0x22,%al
jne    15e0 <decomment+0x4c0>
cmp    $0x22,%al
je     1560 <decomment+0x440>
lea    0x9f7(%rip),%rdi
mov    0x50(%rsp),%rsi
mov    %r12d,%edx
xor    %eax,%eax
call   1040 <printf@plt>
movslq %r12d,%rax
cmp    %rax,%r14
jge    1560 <decomment+0x440>
xor    %r15d,%r15d
mov    %r14,%rbp
xor    %eax,%eax
movl   $0x0,0x3c(%rsp)
mov    %r14,0x48(%rsp)
jmp    1686 <decomment+0x566>
nopl   0x0(%rax,%rax,1)
mov    0x10(%rsp),%r12
sub    0x20(%rsp),%r12d
mov    0x8(%rsp),%r15d
add    $0x1,%r15d
lea    0x9f1(%rip),%rdi
mov    %r12d,%esi
mov    %r15d,%edx
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%eax
mov    0x48(%rsp),%r14
mov    %rbp,%rbx
mov    0x18(%rsp),%rbp
add    $0x1,%rbp
cmp    %ebp,%r12d
jle    1560 <decomment+0x440>
cmpb   $0x2a,(%rbx,%rbp,1)
jne    16d0 <decomment+0x5b0>
cmpb   $0x2f,0x1(%rbx,%rbp,1)
jne    16d0 <decomment+0x5b0>
xor    %edi,%edi
test   %rbp,%rbp
je     16d7 <decomment+0x5b7>
mov    $0x2a,%dl
xor    %eax,%eax
mov    %rbp,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    $0xa,%dl
je     16d9 <decomment+0x5b9>
cmp    $0x22,%dl
je     16d9 <decomment+0x5b9>
add    $0xffffffffffffffff,%rcx
movzbl (%rbx,%rcx,1),%edx
cmp    $0x22,%dl
sete   %al
test   %rcx,%rcx
jg     16b0 <decomment+0x590>
jmp    16d9 <decomment+0x5b9>
nop
cmp    $0x1,%eax
jne    1679 <decomment+0x559>
jmp    1752 <decomment+0x632>
xor    %eax,%eax
lea    0x1(%rbp),%r9
test   $0x1,%al
je     1725 <decomment+0x605>
mov    0x2900(%rip),%rcx
mov    (%rcx),%r8b
xor    %edx,%edx
cmp    $0x2a,%r8b
je     1722 <decomment+0x602>
mov    %r12d,%edi
cmp    %rdi,%rbp
je     1722 <decomment+0x602>
mov    %r9,%rsi
xchg   %ax,%ax
movzbl (%rbx,%rsi,1),%ecx
cmp    $0x22,%cl
sete   %dl
cmp    $0xa,%cl
je     1722 <decomment+0x602>
cmp    %r8b,%cl
je     1722 <decomment+0x602>
cmp    %rsi,%rdi
je     1722 <decomment+0x602>
add    $0x1,%rsi
cmp    $0x22,%cl
jne    1700 <decomment+0x5e0>
movzbl %dl,%edi
test   %edi,%edi
mov    0x3c(%rsp),%esi
cmove  %r9d,%esi
test   $0x1,%al
cmove  %r9d,%esi
mov    %esi,%edx
sub    0x50(%rsp),%edx
lea    0x8d1(%rip),%rdi
mov    %esi,0x3c(%rsp)
mov    %rdx,0x20(%rsp)
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbp,0x18(%rsp)
mov    %r15d,0x8(%rsp)
mov    0x20(%rsp),%rax
mov    0x28(%rsp),%rcx
add    %ecx,%eax
mov    %r12,0x10(%rsp)
cmp    %r12d,%eax
mov    %rbx,%rbp
lea    0x8af(%rip),%rbx
jge    1640 <decomment+0x520>
mov    0x20(%rsp),%rcx
mov    0x40(%rsp),%r15
lea    (%rcx,%r15,1),%eax
movslq %eax,%r12
movslq %ecx,%r13
movslq 0x10(%rsp),%rax
mov    %rax,0x30(%rsp)
mov    %r13d,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsbl 0x0(%rbp,%r12,1),%edx
mov    %dl,0x0(%rbp,%r15,1)
movsbl 0x0(%rbp,%r12,1),%r8d
lea    (%r14,%r15,1),%ecx
mov    %rbx,%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
add    $0x1,%r12
lea    (%r15,%r13,1),%rax
add    $0x1,%rax
add    $0x1,%r15
cmp    0x30(%rsp),%rax
jl     17b0 <decomment+0x690>
jmp    1640 <decomment+0x520>
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@EOF = global i8 0
@.str = [10 x i8] c"The end)\0A\00"
@.str.1 = [19 x i8] c"start=i=%d;len=%d\0A\00"
@.str.2 = [22 x i8] c"end=(j-1)=%d;diff=%d\0A\00"
@.str.3 = [34 x i8] c"text[k=%d]=%c;text[k+diff=%d]=%c\0A\00"
@.str.4 = [30 x i8] c"after moving len=%d;count=%d\0A\00"
define void @decomment(i32 %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
store i32 %0, i32* %3
store i8* %1, i8** %4
store i32 0, i32* %17
store i32 0, i32* %16
store i32 0, i32* %15
store i32 0, i32* %14
store i32 0, i32* %13
store i32 0, i32* %12
store i32 0, i32* %11
store i32 0, i32* %10
store i32 0, i32* %9
store i32 0, i32* %8
store i32 0, i32* %7
store i32 0, i32* %6
store i32 0, i32* %5
store i32 1, i32* %5
br label %18
18: ; preds = %205, %2
%19 = load i32, i32* %5
%20 = load i32, i32* %3
%21 = icmp sle i32 %19, %20
br i1 %21, label %22, label %208
22: ; preds = %18
%23 = load i8*, i8** %4
%24 = load i32, i32* %5
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %23, i64 %25
%27 = load i8, i8* %26
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 47
br i1 %29, label %30, label %204
30: ; preds = %22
%31 = load i8*, i8** %4
%32 = load i32, i32* %5
%33 = sub nsw i32 %32, 1
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds i8, i8* %31, i64 %34
%36 = load i8, i8* %35
%37 = sext i8 %36 to i32
%38 = icmp eq i32 %37, 47
br i1 %38, label %39, label %203
39: ; preds = %30
%40 = load i32, i32* %5
store i32 %40, i32* %6
store i32 1, i32* %8
%41 = load i32, i32* %5
%42 = sub nsw i32 %41, 1
store i32 %42, i32* %12
store i32 0, i32* %11
store i32 0, i32* %9
br label %43
43: ; preds = %72, %39
%44 = load i32, i32* %11
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %49
46: ; preds = %43
%47 = load i32, i32* %9
%48 = icmp eq i32 %47, 0
br label %49
49: ; preds = %46, %43
%50 = phi i1 [ false, %43 ], [ %48, %46 ]
br i1 %50, label %51, label %75
51: ; preds = %49
%52 = load i8*, i8** %4
%53 = load i32, i32* %6
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %52, i64 %54
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 34
br i1 %58, label %59, label %60
59: ; preds = %51
store i32 1, i32* %9
br label %60
60: ; preds = %59, %51
%61 = load i32, i32* %6
%62 = icmp sle i32 %61, 0
br i1 %62, label %71, label %63
63: ; preds = %60
%64 = load i8*, i8** %4
%65 = load i32, i32* %6
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %64, i64 %66
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = icmp eq i32 %69, 10
br i1 %70, label %71, label %72
71: ; preds = %63, %60
store i32 1, i32* %11
br label %72
72: ; preds = %71, %63
%73 = load i32, i32* %6
%74 = add nsw i32 %73, -1
store i32 %74, i32* %6
br label %43
75: ; preds = %49
%76 = load i32, i32* %9
%77 = icmp eq i32 %76, 1
br i1 %77, label %78, label %124
78: ; preds = %75
%79 = load i32, i32* %5
store i32 %79, i32* %6
store i32 0, i32* %11
store i32 0, i32* %10
br label %80
80: ; preds = %120, %78
%81 = load i32, i32* %11
%82 = icmp eq i32 %81, 0
br i1 %82, label %83, label %86
83: ; preds = %80
%84 = load i32, i32* %10
%85 = icmp eq i32 %84, 0
br label %86
86: ; preds = %83, %80
%87 = phi i1 [ false, %80 ], [ %85, %83 ]
br i1 %87, label %88, label %123
88: ; preds = %86
%89 = load i8*, i8** %4
%90 = load i32, i32* %6
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %89, i64 %91
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, 34
br i1 %95, label %96, label %97
96: ; preds = %88
store i32 1, i32* %10
br label %97
97: ; preds = %96, %88
%98 = load i8*, i8** %4
%99 = load i32, i32* %6
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds i8, i8* %98, i64 %100
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = icmp eq i32 %103, 10
br i1 %104, label %119, label %105
105: ; preds = %97
%106 = load i8*, i8** %4
%107 = load i32, i32* %6
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i8, i8* %106, i64 %108
%110 = load i8, i8* %109
%111 = sext i8 %110 to i32
%112 = load i8, i8* @EOF
%113 = sext i8 %112 to i32
%114 = icmp eq i32 %111, %113
br i1 %114, label %119, label %115
115: ; preds = %105
%116 = load i32, i32* %6
%117 = load i32, i32* %3
%118 = icmp eq i32 %116, %117
br i1 %118, label %119, label %120
119: ; preds = %115, %105, %97
store i32 1, i32* %11
br label %120
120: ; preds = %119, %115
%121 = load i32, i32* %6
%122 = add nsw i32 %121, 1
store i32 %122, i32* %6
br label %80
123: ; preds = %86
br label %124
124: ; preds = %123, %75
%125 = load i32, i32* %9
%126 = icmp ne i32 %125, 1
br i1 %126, label %130, label %127
127: ; preds = %124
%128 = load i32, i32* %10
%129 = icmp ne i32 %128, 1
br i1 %129, label %130, label %202
130: ; preds = %127, %124
store i32 0, i32* %8
%131 = load i32, i32* %5
store i32 %131, i32* %7
br label %132
132: ; preds = %154, %130
%133 = load i32, i32* %8
%134 = icmp eq i32 %133, 0
br i1 %134, label %135, label %157
135: ; preds = %132
%136 = load i8*, i8** %4
%137 = load i32, i32* %7
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8, i8* %136, i64 %138
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = icmp eq i32 %141, 10
br i1 %142, label %153, label %143
143: ; preds = %135
%144 = load i8*, i8** %4
%145 = load i32, i32* %7
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i8, i8* %144, i64 %146
%148 = load i8, i8* %147
%149 = sext i8 %148 to i32
%150 = load i8, i8* @EOF
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %149, %151
br i1 %152, label %153, label %154
153: ; preds = %143, %135
store i32 1, i32* %8
br label %154
154: ; preds = %153, %143
%155 = load i32, i32* %7
%156 = add nsw i32 %155, 1
store i32 %156, i32* %7
br label %132
157: ; preds = %132
%158 = load i32, i32* %8
%159 = icmp eq i32 %158, 1
br i1 %159, label %160, label %163
160: ; preds = %157
%161 = load i32, i32* %7
%162 = sub nsw i32 %161, 1
store i32 %162, i32* %13
br label %163
163: ; preds = %160, %157
%164 = load i32, i32* %13
%165 = load i32, i32* %12
%166 = sub nsw i32 %164, %165
store i32 %166, i32* %14
%167 = load i8*, i8** %4
%168 = load i32, i32* %13
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %167, i64 %169
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = load i8, i8* @EOF
%174 = sext i8 %173 to i32
%175 = icmp eq i32 %172, %174
br i1 %175, label %176, label %178
176: ; preds = %163
%177 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
br label %178
178: ; preds = %176, %163
%179 = load i32, i32* %12
store i32 %179, i32* %7
br label %180
180: ; preds = %198, %178
%181 = load i32, i32* %7
%182 = load i32, i32* %14
%183 = add nsw i32 %181, %182
%184 = load i32, i32* %3
%185 = icmp sle i32 %183, %184
br i1 %185, label %186, label %201
186: ; preds = %180
%187 = load i8*, i8** %4
%188 = load i32, i32* %7
%189 = load i32, i32* %14
%190 = add nsw i32 %188, %189
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds i8, i8* %187, i64 %191
%193 = load i8, i8* %192
%194 = load i8*, i8** %4
%195 = load i32, i32* %7
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds i8, i8* %194, i64 %196
store i8 %193, i8* %197
br label %198
198: ; preds = %186
%199 = load i32, i32* %7
%200 = add nsw i32 %199, 1
store i32 %200, i32* %7
br label %180
201: ; preds = %180
store i32 0, i32* %11
br label %202
202: ; preds = %201, %127
br label %203
203: ; preds = %202, %30
br label %204
204: ; preds = %203, %22
br label %205
205: ; preds = %204
%206 = load i32, i32* %5
%207 = add nsw i32 %206, 1
store i32 %207, i32* %5
br label %18
208: ; preds = %18
store i32 0, i32* %13
store i32 0, i32* %12
store i32 0, i32* %11
store i32 0, i32* %8
store i32 0, i32* %10
store i32 0, i32* %9
store i32 1, i32* %5
br label %209
209: ; preds = %513, %208
%210 = load i32, i32* %5
%211 = load i32, i32* %3
%212 = icmp slt i32 %210, %211
br i1 %212, label %213, label %516
213: ; preds = %209
%214 = load i8*, i8** %4
%215 = load i32, i32* %5
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %214, i64 %216
%218 = load i8, i8* %217
%219 = sext i8 %218 to i32
%220 = icmp eq i32 %219, 42
br i1 %220, label %221, label %512
221: ; preds = %213
%222 = load i8*, i8** %4
%223 = load i32, i32* %5
%224 = sub nsw i32 %223, 1
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds i8, i8* %222, i64 %225
%227 = load i8, i8* %226
%228 = sext i8 %227 to i32
%229 = icmp eq i32 %228, 47
br i1 %229, label %230, label %511
230: ; preds = %221
%231 = load i32, i32* %5
store i32 %231, i32* %6
store i32 0, i32* %16
store i32 0, i32* %15
store i32 0, i32* %13
store i32 0, i32* %12
store i32 0, i32* %11
store i32 0, i32* %9
br label %232
232: ; preds = %261, %230
%233 = load i32, i32* %11
%234 = icmp eq i32 %233, 0
br i1 %234, label %235, label %238
235: ; preds = %232
%236 = load i32, i32* %9
%237 = icmp eq i32 %236, 0
br label %238
238: ; preds = %235, %232
%239 = phi i1 [ false, %232 ], [ %237, %235 ]
br i1 %239, label %240, label %264
240: ; preds = %238
%241 = load i8*, i8** %4
%242 = load i32, i32* %6
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8, i8* %241, i64 %243
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = icmp eq i32 %246, 34
br i1 %247, label %248, label %249
248: ; preds = %240
store i32 1, i32* %9
br label %249
249: ; preds = %248, %240
%250 = load i32, i32* %6
%251 = icmp sle i32 %250, 0
br i1 %251, label %260, label %252
252: ; preds = %249
%253 = load i8*, i8** %4
%254 = load i32, i32* %6
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds i8, i8* %253, i64 %255
%257 = load i8, i8* %256
%258 = sext i8 %257 to i32
%259 = icmp eq i32 %258, 10
br i1 %259, label %260, label %261
260: ; preds = %252, %249
store i32 1, i32* %11
br label %261
261: ; preds = %260, %252
%262 = load i32, i32* %6
%263 = add nsw i32 %262, -1
store i32 %263, i32* %6
br label %232
264: ; preds = %238
%265 = load i32, i32* %9
%266 = icmp eq i32 %265, 1
br i1 %266, label %267, label %314
267: ; preds = %264
%268 = load i32, i32* %5
%269 = add nsw i32 %268, 1
store i32 %269, i32* %6
store i32 0, i32* %11
store i32 0, i32* %10
br label %270
270: ; preds = %310, %267
%271 = load i32, i32* %11
%272 = icmp eq i32 %271, 0
br i1 %272, label %273, label %276
273: ; preds = %270
%274 = load i32, i32* %10
%275 = icmp eq i32 %274, 0
br label %276
276: ; preds = %273, %270
%277 = phi i1 [ false, %270 ], [ %275, %273 ]
br i1 %277, label %278, label %313
278: ; preds = %276
%279 = load i8*, i8** %4
%280 = load i32, i32* %6
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds i8, i8* %279, i64 %281
%283 = load i8, i8* %282
%284 = sext i8 %283 to i32
%285 = icmp eq i32 %284, 34
br i1 %285, label %286, label %287
286: ; preds = %278
store i32 1, i32* %10
br label %287
287: ; preds = %286, %278
%288 = load i8*, i8** %4
%289 = load i32, i32* %6
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds i8, i8* %288, i64 %290
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp eq i32 %293, 10
br i1 %294, label %309, label %295
295: ; preds = %287
%296 = load i8*, i8** %4
%297 = load i32, i32* %6
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds i8, i8* %296, i64 %298
%300 = load i8, i8* %299
%301 = sext i8 %300 to i32
%302 = load i8, i8* @EOF
%303 = sext i8 %302 to i32
%304 = icmp eq i32 %301, %303
br i1 %304, label %309, label %305
305: ; preds = %295
%306 = load i32, i32* %6
%307 = load i32, i32* %3
%308 = icmp eq i32 %306, %307
br i1 %308, label %309, label %310
309: ; preds = %305, %295, %287
store i32 1, i32* %11
br label %310
310: ; preds = %309, %305
%311 = load i32, i32* %6
%312 = add nsw i32 %311, 1
store i32 %312, i32* %6
br label %270
313: ; preds = %276
br label %314
314: ; preds = %313, %264
%315 = load i32, i32* %9
%316 = icmp ne i32 %315, 1
br i1 %316, label %320, label %317
317: ; preds = %314
%318 = load i32, i32* %10
%319 = icmp ne i32 %318, 1
br i1 %319, label %320, label %510
320: ; preds = %317, %314
%321 = load i32, i32* %5
%322 = sub nsw i32 %321, 1
store i32 %322, i32* %12
store i32 1, i32* %15
%323 = load i32, i32* %12
%324 = load i32, i32* %3
%325 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.1, i64 0, i64 0), i32 %323, i32 %324)
store i32 0, i32* %17
store i32 0, i32* %16
store i32 0, i32* %11
store i32 0, i32* %10
store i32 0, i32* %9
%326 = load i32, i32* %5
store i32 %326, i32* %6
br label %327
327: ; preds = %506, %320
%328 = load i32, i32* %6
%329 = load i32, i32* %3
%330 = icmp slt i32 %328, %329
br i1 %330, label %331, label %509
331: ; preds = %327
%332 = load i8*, i8** %4
%333 = load i32, i32* %6
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds i8, i8* %332, i64 %334
%336 = load i8, i8* %335
%337 = sext i8 %336 to i32
%338 = icmp eq i32 %337, 42
br i1 %338, label %339, label %448
339: ; preds = %331
%340 = load i8*, i8** %4
%341 = load i32, i32* %6
%342 = add nsw i32 %341, 1
%343 = sext i32 %342 to i64
%344 = getelementptr inbounds i8, i8* %340, i64 %343
%345 = load i8, i8* %344
%346 = sext i8 %345 to i32
%347 = icmp eq i32 %346, 47
br i1 %347, label %348, label %447
348: ; preds = %339
%349 = load i32, i32* %6
store i32 %349, i32* %7
store i32 0, i32* %11
store i32 0, i32* %8
store i32 0, i32* %9
br label %350
350: ; preds = %379, %348
%351 = load i32, i32* %11
%352 = icmp eq i32 %351, 0
br i1 %352, label %353, label %356
353: ; preds = %350
%354 = load i32, i32* %9
%355 = icmp eq i32 %354, 0
br label %356
356: ; preds = %353, %350
%357 = phi i1 [ false, %350 ], [ %355, %353 ]
br i1 %357, label %358, label %382
358: ; preds = %356
%359 = load i8*, i8** %4
%360 = load i32, i32* %7
%361 = sext i32 %360 to i64
%362 = getelementptr inbounds i8, i8* %359, i64 %361
%363 = load i8, i8* %362
%364 = sext i8 %363 to i32
%365 = icmp eq i32 %364, 34
br i1 %365, label %366, label %367
366: ; preds = %358
store i32 1, i32* %9
br label %367
367: ; preds = %366, %358
%368 = load i32, i32* %7
%369 = icmp sle i32 %368, 0
br i1 %369, label %378, label %370
370: ; preds = %367
%371 = load i8*, i8** %4
%372 = load i32, i32* %7
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds i8, i8* %371, i64 %373
%375 = load i8, i8* %374
%376 = sext i8 %375 to i32
%377 = icmp eq i32 %376, 10
br i1 %377, label %378, label %379
378: ; preds = %370, %367
store i32 1, i32* %11
br label %379
379: ; preds = %378, %370
%380 = load i32, i32* %7
%381 = add nsw i32 %380, -1
store i32 %381, i32* %7
br label %350
382: ; preds = %356
%383 = load i32, i32* %6
store i32 %383, i32* %7
store i32 0, i32* %11
store i32 0, i32* %10
%384 = load i32, i32* %9
%385 = icmp eq i32 %384, 1
br i1 %385, label %386, label %431
386: ; preds = %382
br label %387
387: ; preds = %427, %386
%388 = load i32, i32* %11
%389 = icmp eq i32 %388, 0
br i1 %389, label %390, label %393
390: ; preds = %387
%391 = load i32, i32* %10
%392 = icmp eq i32 %391, 0
br label %393
393: ; preds = %390, %387
%394 = phi i1 [ false, %387 ], [ %392, %390 ]
br i1 %394, label %395, label %430
395: ; preds = %393
%396 = load i8*, i8** %4
%397 = load i32, i32* %7
%398 = sext i32 %397 to i64
%399 = getelementptr inbounds i8, i8* %396, i64 %398
%400 = load i8, i8* %399
%401 = sext i8 %400 to i32
%402 = icmp eq i32 %401, 34
br i1 %402, label %403, label %404
403: ; preds = %395
store i32 1, i32* %10
br label %404
404: ; preds = %403, %395
%405 = load i8*, i8** %4
%406 = load i32, i32* %7
%407 = sext i32 %406 to i64
%408 = getelementptr inbounds i8, i8* %405, i64 %407
%409 = load i8, i8* %408
%410 = sext i8 %409 to i32
%411 = icmp eq i32 %410, 10
br i1 %411, label %426, label %412
412: ; preds = %404
%413 = load i8*, i8** %4
%414 = load i32, i32* %7
%415 = sext i32 %414 to i64
%416 = getelementptr inbounds i8, i8* %413, i64 %415
%417 = load i8, i8* %416
%418 = sext i8 %417 to i32
%419 = load i8, i8* @EOF
%420 = sext i8 %419 to i32
%421 = icmp eq i32 %418, %420
br i1 %421, label %426, label %422
422: ; preds = %412
%423 = load i32, i32* %7
%424 = load i32, i32* %3
%425 = icmp eq i32 %423, %424
br i1 %425, label %426, label %427
426: ; preds = %422, %412, %404
store i32 1, i32* %11
br label %427
427: ; preds = %426, %422
%428 = load i32, i32* %7
%429 = add nsw i32 %428, 1
store i32 %429, i32* %7
br label %387
430: ; preds = %393
br label %431
431: ; preds = %430, %382
%432 = load i32, i32* %9
%433 = icmp ne i32 %432, 1
br i1 %433, label %437, label %434
434: ; preds = %431
%435 = load i32, i32* %10
%436 = icmp ne i32 %435, 1
br i1 %436, label %437, label %440
437: ; preds = %434, %431
%438 = load i32, i32* %6
%439 = add nsw i32 %438, 1
store i32 %439, i32* %13
br label %440
440: ; preds = %437, %434
store i32 1, i32* %16
%441 = load i32, i32* %13
%442 = load i32, i32* %12
%443 = sub nsw i32 %441, %442
store i32 %443, i32* %14
%444 = load i32, i32* %13
%445 = load i32, i32* %14
%446 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %444, i32 %445)
br label %447
447: ; preds = %440, %339
br label %448
448: ; preds = %447, %331
%449 = load i32, i32* %15
%450 = icmp eq i32 %449, 1
br i1 %450, label %451, label %505
451: ; preds = %448
%452 = load i32, i32* %16
%453 = icmp eq i32 %452, 1
br i1 %453, label %454, label %505
454: ; preds = %451
%455 = load i32, i32* %12
store i32 %455, i32* %7
br label %456
456: ; preds = %493, %454
%457 = load i32, i32* %7
%458 = load i32, i32* %14
%459 = add nsw i32 %457, %458
%460 = load i32, i32* %3
%461 = icmp slt i32 %459, %460
br i1 %461, label %462, label %496
462: ; preds = %456
%463 = load i8*, i8** %4
%464 = load i32, i32* %7
%465 = load i32, i32* %14
%466 = add nsw i32 %464, %465
%467 = sext i32 %466 to i64
%468 = getelementptr inbounds i8, i8* %463, i64 %467
%469 = load i8, i8* %468
%470 = load i8*, i8** %4
%471 = load i32, i32* %7
%472 = sext i32 %471 to i64
%473 = getelementptr inbounds i8, i8* %470, i64 %472
store i8 %469, i8* %473
%474 = load i32, i32* %7
%475 = load i8*, i8** %4
%476 = load i32, i32* %7
%477 = sext i32 %476 to i64
%478 = getelementptr inbounds i8, i8* %475, i64 %477
%479 = load i8, i8* %478
%480 = sext i8 %479 to i32
%481 = load i32, i32* %7
%482 = load i32, i32* %14
%483 = add nsw i32 %481, %482
%484 = load i8*, i8** %4
%485 = load i32, i32* %7
%486 = load i32, i32* %14
%487 = add nsw i32 %485, %486
%488 = sext i32 %487 to i64
%489 = getelementptr inbounds i8, i8* %484, i64 %488
%490 = load i8, i8* %489
%491 = sext i8 %490 to i32
%492 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.3, i64 0, i64 0), i32 %474, i32 %480, i32 %483, i32 %491)
br label %493
493: ; preds = %462
%494 = load i32, i32* %7
%495 = add nsw i32 %494, 1
store i32 %495, i32* %7
br label %456
496: ; preds = %456
%497 = load i32, i32* %3
%498 = load i32, i32* %14
%499 = sub nsw i32 %497, %498
store i32 %499, i32* %3
%500 = load i32, i32* %17
%501 = add nsw i32 %500, 1
store i32 %501, i32* %17
%502 = load i32, i32* %3
%503 = load i32, i32* %17
%504 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.4, i64 0, i64 0), i32 %502, i32 %503)
br label %505
505: ; preds = %496, %451, %448
br label %506
506: ; preds = %505
%507 = load i32, i32* %6
%508 = add nsw i32 %507, 1
store i32 %508, i32* %6
br label %327
509: ; preds = %327
br label %510
510: ; preds = %509, %317
br label %511
511: ; preds = %510, %221
br label %512
512: ; preds = %511, %213
br label %513
513: ; preds = %512
%514 = load i32, i32* %5
%515 = add nsw i32 %514, 1
store i32 %515, i32* %5
br label %209
516: ; preds = %209
ret void
}

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