int removeComments_execute(unsigned char *input, long int input_len,
                           unsigned char *changed) {
  long int i, j, incomment;
  changed[0] = '0';
  i = j = incomment = 0;
  while (i < input_len) {
    if (incomment == 0) {
      if ((input[i] == '/') && (i + 1 < input_len) && (input[i + 1] == '*')) {
        changed[0] = '1';
        incomment = 1;
        i += 2;
      } else if ((input[i] == '<') && (i + 1 < input_len) &&
                 (input[i + 1] == '!') && (i + 2 < input_len) &&
                 (input[i + 2] == '-') && (i + 3 < input_len) &&
                 (input[i + 3] == '-') && (incomment == 0)) {
        incomment = 1;
        changed[0] = '1';
        i += 4;
      } else if ((input[i] == '-') && (i + 1 < input_len) &&
                 (input[i + 1] == '-') && (incomment == 0)) {
        changed[0] = '1';
        input[i] = ' ';
        break;
      } else if (input[i] == '#' && (incomment == 0)) {
        changed[0] = '1';
        input[i] = ' ';
        break;
      } else {
        input[j] = input[i];
        i++;
        j++;
      }
    } else {
      if ((input[i] == '*') && (i + 1 < input_len) && (input[i + 1] == '/')) {
        incomment = 0;
        i += 2;
        input[j] = input[i];
        i++;
        j++;
      } else if ((input[i] == '-') && (i + 1 < input_len) &&
                 (input[i + 1] == '-') && (i + 2 < input_len) &&
                 (input[i + 2] == '>')) {
        incomment = 0;
        i += 3;
        input[j] = input[i];
        i++;
        j++;
      } else {
        i++;
      }
    }
  }
  if (incomment) {
    input[j++] = ' ';
  }
  return j;
}


x86 assembly (clang, -O0):
<removeComments_execute>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movb   $0x30,(%rax)
movq   $0x0,-0x30(%rbp)
movq   $0x0,-0x28(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    1482 <removeComments_execute+0x382>
cmpq   $0x0,-0x30(%rbp)
jne    1337 <removeComments_execute+0x237>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    11a5 <removeComments_execute+0xa5>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x10(%rbp),%rax
jge    11a5 <removeComments_execute+0xa5>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x1(%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    11a5 <removeComments_execute+0xa5>
mov    -0x18(%rbp),%rax
movb   $0x31,(%rax)
movq   $0x1,-0x30(%rbp)
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    1332 <removeComments_execute+0x232>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x3c,%eax
jne    125d <removeComments_execute+0x15d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x10(%rbp),%rax
jge    125d <removeComments_execute+0x15d>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x1(%rax,%rcx,1),%eax
cmp    $0x21,%eax
jne    125d <removeComments_execute+0x15d>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
cmp    -0x10(%rbp),%rax
jge    125d <removeComments_execute+0x15d>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x2(%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    125d <removeComments_execute+0x15d>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x10(%rbp),%rax
jge    125d <removeComments_execute+0x15d>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x3(%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    125d <removeComments_execute+0x15d>
cmpq   $0x0,-0x30(%rbp)
jne    125d <removeComments_execute+0x15d>
movq   $0x1,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movb   $0x31,(%rax)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
jmp    132d <removeComments_execute+0x22d>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    12bd <removeComments_execute+0x1bd>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x10(%rbp),%rax
jge    12bd <removeComments_execute+0x1bd>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x1(%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    12bd <removeComments_execute+0x1bd>
cmpq   $0x0,-0x30(%rbp)
jne    12bd <removeComments_execute+0x1bd>
mov    -0x18(%rbp),%rax
movb   $0x31,(%rax)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    1482 <removeComments_execute+0x382>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    12f5 <removeComments_execute+0x1f5>
cmpq   $0x0,-0x30(%rbp)
jne    12f5 <removeComments_execute+0x1f5>
mov    -0x18(%rbp),%rax
movb   $0x31,(%rax)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
jmp    1482 <removeComments_execute+0x382>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1328 <removeComments_execute+0x228>
jmp    132d <removeComments_execute+0x22d>
jmp    1332 <removeComments_execute+0x232>
jmp    147d <removeComments_execute+0x37d>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    13bb <removeComments_execute+0x2bb>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x10(%rbp),%rax
jge    13bb <removeComments_execute+0x2bb>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x1(%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    13bb <removeComments_execute+0x2bb>
movq   $0x0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1478 <removeComments_execute+0x378>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1467 <removeComments_execute+0x367>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x10(%rbp),%rax
jge    1467 <removeComments_execute+0x367>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x1(%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1467 <removeComments_execute+0x367>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
cmp    -0x10(%rbp),%rax
jge    1467 <removeComments_execute+0x367>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movzbl 0x2(%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    1467 <removeComments_execute+0x367>
movq   $0x0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1473 <removeComments_execute+0x373>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1478 <removeComments_execute+0x378>
jmp    147d <removeComments_execute+0x37d>
jmp    112f <removeComments_execute+0x2f>
cmpq   $0x0,-0x30(%rbp)
je     14a4 <removeComments_execute+0x3a4>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<removeComments_execute>:
push   %rbx
movb   $0x30,(%rdx)
test   %rsi,%rsi
jle    1291 <removeComments_execute+0x191>
xor    %r10d,%r10d
lea    0xee9(%rip),%r8
xor    %eax,%eax
xor    %ebx,%ebx
jmp    112f <removeComments_execute+0x2f>
nopl   (%rax)
xor    %r11d,%r11d
mov    %r9,%rbx
cmp    %rsi,%r9
jge    1283 <removeComments_execute+0x183>
movzbl (%rdi,%rbx,1),%r11d
test   %r10,%r10
je     1180 <removeComments_execute+0x80>
cmp    $0x2a,%r11b
je     11c0 <removeComments_execute+0xc0>
cmp    $0x2d,%r11b
jne    1200 <removeComments_execute+0x100>
lea    0x1(%rbx),%r9
mov    $0x1,%r10d
cmp    %rsi,%r9
jge    1120 <removeComments_execute+0x20>
cmpb   $0x2d,(%rdi,%r9,1)
jne    1120 <removeComments_execute+0x20>
lea    0x2(%rbx),%rcx
cmp    %rsi,%rcx
jge    1120 <removeComments_execute+0x20>
cmpb   $0x3e,(%rdi,%rcx,1)
jne    1120 <removeComments_execute+0x20>
movzbl 0x3(%rbx,%rdi,1),%ecx
mov    %cl,(%rdi,%rax,1)
add    $0x4,%rbx
jmp    11ea <removeComments_execute+0xea>
lea    -0x23(%r11),%ecx
cmp    $0x19,%cl
ja     122e <removeComments_execute+0x12e>
movzbl %cl,%ecx
movslq (%r8,%rcx,4),%rcx
add    %r8,%rcx
jmp    *%rcx
lea    0x1(%rbx),%r9
cmp    %rsi,%r9
jge    1270 <removeComments_execute+0x170>
cmpb   $0x2d,(%rdi,%r9,1)
jne    1270 <removeComments_execute+0x170>
jmp    1295 <removeComments_execute+0x195>
cs nopw 0x0(%rax,%rax,1)
lea    0x1(%rbx),%r9
mov    $0x1,%r10d
cmp    %rsi,%r9
jge    1120 <removeComments_execute+0x20>
cmpb   $0x2f,(%rdi,%r9,1)
jne    1120 <removeComments_execute+0x20>
movzbl 0x2(%rbx,%rdi,1),%ecx
mov    %cl,(%rdi,%rax,1)
add    $0x3,%rbx
add    $0x1,%rax
mov    $0x1,%r11b
mov    %rbx,%r9
jmp    127b <removeComments_execute+0x17b>
nopl   0x0(%rax)
add    $0x1,%rbx
mov    $0x1,%r10d
xor    %r11d,%r11d
mov    %rbx,%r9
jmp    1123 <removeComments_execute+0x23>
lea    0x1(%rbx),%r9
cmp    %rsi,%r9
jge    1270 <removeComments_execute+0x170>
cmpb   $0x2a,(%rdi,%r9,1)
jne    1270 <removeComments_execute+0x170>
movb   $0x31,(%rdx)
add    $0x2,%rbx
jmp    1204 <removeComments_execute+0x104>
add    $0x1,%rbx
mov    %rbx,%r9
jmp    1270 <removeComments_execute+0x170>
lea    0x1(%rbx),%r9
cmp    %rsi,%r9
jge    1270 <removeComments_execute+0x170>
cmpb   $0x21,(%rdi,%r9,1)
jne    1270 <removeComments_execute+0x170>
lea    0x2(%rbx),%rcx
cmp    %rsi,%rcx
jge    1270 <removeComments_execute+0x170>
cmpb   $0x2d,(%rdi,%rcx,1)
jne    1270 <removeComments_execute+0x170>
lea    0x3(%rbx),%rcx
cmp    %rsi,%rcx
jge    1270 <removeComments_execute+0x170>
cmpb   $0x2d,(%rdi,%rcx,1)
jne    1270 <removeComments_execute+0x170>
movb   $0x31,(%rdx)
add    $0x4,%rbx
jmp    1204 <removeComments_execute+0x104>
xchg   %ax,%ax
mov    %r11b,(%rdi,%rax,1)
add    $0x1,%rax
mov    $0x1,%r11b
xor    %r10d,%r10d
jmp    1123 <removeComments_execute+0x23>
test   %r11b,%r11b
jne    1293 <removeComments_execute+0x193>
mov    %rax,%rbx
add    $0x1,%rax
jmp    1298 <removeComments_execute+0x198>
xor    %eax,%eax
pop    %rbx
ret
movb   $0x31,(%rdx)
movb   $0x20,(%rdi,%rbx,1)
pop    %rbx
ret

LLVM IR (-O0):
define i32 @removeComments_execute(i8* %0, i64 %1, i8* %2) {
%4 = alloca i8*
%5 = alloca i64
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
store i8* %0, i8** %4
store i64 %1, i64* %5
store i8* %2, i8** %6
%10 = load i8*, i8** %6
%11 = getelementptr inbounds i8, i8* %10, i64 0
store i8 48, i8* %11
store i64 0, i64* %9
store i64 0, i64* %8
store i64 0, i64* %7
br label %12
12: ; preds = %245, %3
%13 = load i64, i64* %7
%14 = load i64, i64* %5
%15 = icmp slt i64 %13, %14
br i1 %15, label %16, label %246
16: ; preds = %12
%17 = load i64, i64* %9
%18 = icmp eq i64 %17, 0
br i1 %18, label %19, label %159
19: ; preds = %16
%20 = load i8*, i8** %4
%21 = load i64, i64* %7
%22 = getelementptr inbounds i8, i8* %20, i64 %21
%23 = load i8, i8* %22
%24 = zext i8 %23 to i32
%25 = icmp eq i32 %24, 47
br i1 %25, label %26, label %44
26: ; preds = %19
%27 = load i64, i64* %7
%28 = add nsw i64 %27, 1
%29 = load i64, i64* %5
%30 = icmp slt i64 %28, %29
br i1 %30, label %31, label %44
31: ; preds = %26
%32 = load i8*, i8** %4
%33 = load i64, i64* %7
%34 = add nsw i64 %33, 1
%35 = getelementptr inbounds i8, i8* %32, i64 %34
%36 = load i8, i8* %35
%37 = zext i8 %36 to i32
%38 = icmp eq i32 %37, 42
br i1 %38, label %39, label %44
39: ; preds = %31
%40 = load i8*, i8** %6
%41 = getelementptr inbounds i8, i8* %40, i64 0
store i8 49, i8* %41
store i64 1, i64* %9
%42 = load i64, i64* %7
%43 = add nsw i64 %42, 2
store i64 %43, i64* %7
br label %158
44: ; preds = %31, %26, %19
%45 = load i8*, i8** %4
%46 = load i64, i64* %7
%47 = getelementptr inbounds i8, i8* %45, i64 %46
%48 = load i8, i8* %47
%49 = zext i8 %48 to i32
%50 = icmp eq i32 %49, 60
br i1 %50, label %51, label %98
51: ; preds = %44
%52 = load i64, i64* %7
%53 = add nsw i64 %52, 1
%54 = load i64, i64* %5
%55 = icmp slt i64 %53, %54
br i1 %55, label %56, label %98
56: ; preds = %51
%57 = load i8*, i8** %4
%58 = load i64, i64* %7
%59 = add nsw i64 %58, 1
%60 = getelementptr inbounds i8, i8* %57, i64 %59
%61 = load i8, i8* %60
%62 = zext i8 %61 to i32
%63 = icmp eq i32 %62, 33
br i1 %63, label %64, label %98
64: ; preds = %56
%65 = load i64, i64* %7
%66 = add nsw i64 %65, 2
%67 = load i64, i64* %5
%68 = icmp slt i64 %66, %67
br i1 %68, label %69, label %98
69: ; preds = %64
%70 = load i8*, i8** %4
%71 = load i64, i64* %7
%72 = add nsw i64 %71, 2
%73 = getelementptr inbounds i8, i8* %70, i64 %72
%74 = load i8, i8* %73
%75 = zext i8 %74 to i32
%76 = icmp eq i32 %75, 45
br i1 %76, label %77, label %98
77: ; preds = %69
%78 = load i64, i64* %7
%79 = add nsw i64 %78, 3
%80 = load i64, i64* %5
%81 = icmp slt i64 %79, %80
br i1 %81, label %82, label %98
82: ; preds = %77
%83 = load i8*, i8** %4
%84 = load i64, i64* %7
%85 = add nsw i64 %84, 3
%86 = getelementptr inbounds i8, i8* %83, i64 %85
%87 = load i8, i8* %86
%88 = zext i8 %87 to i32
%89 = icmp eq i32 %88, 45
br i1 %89, label %90, label %98
90: ; preds = %82
%91 = load i64, i64* %9
%92 = icmp eq i64 %91, 0
br i1 %92, label %93, label %98
93: ; preds = %90
store i64 1, i64* %9
%94 = load i8*, i8** %6
%95 = getelementptr inbounds i8, i8* %94, i64 0
store i8 49, i8* %95
%96 = load i64, i64* %7
%97 = add nsw i64 %96, 4
store i64 %97, i64* %7
br label %157
98: ; preds = %90, %82, %77, %69, %64, %56, %51, %44
%99 = load i8*, i8** %4
%100 = load i64, i64* %7
%101 = getelementptr inbounds i8, i8* %99, i64 %100
%102 = load i8, i8* %101
%103 = zext i8 %102 to i32
%104 = icmp eq i32 %103, 45
br i1 %104, label %105, label %127
105: ; preds = %98
%106 = load i64, i64* %7
%107 = add nsw i64 %106, 1
%108 = load i64, i64* %5
%109 = icmp slt i64 %107, %108
br i1 %109, label %110, label %127
110: ; preds = %105
%111 = load i8*, i8** %4
%112 = load i64, i64* %7
%113 = add nsw i64 %112, 1
%114 = getelementptr inbounds i8, i8* %111, i64 %113
%115 = load i8, i8* %114
%116 = zext i8 %115 to i32
%117 = icmp eq i32 %116, 45
br i1 %117, label %118, label %127
118: ; preds = %110
%119 = load i64, i64* %9
%120 = icmp eq i64 %119, 0
br i1 %120, label %121, label %127
121: ; preds = %118
%122 = load i8*, i8** %6
%123 = getelementptr inbounds i8, i8* %122, i64 0
store i8 49, i8* %123
%124 = load i8*, i8** %4
%125 = load i64, i64* %7
%126 = getelementptr inbounds i8, i8* %124, i64 %125
store i8 32, i8* %126
br label %246
127: ; preds = %118, %110, %105, %98
%128 = load i8*, i8** %4
%129 = load i64, i64* %7
%130 = getelementptr inbounds i8, i8* %128, i64 %129
%131 = load i8, i8* %130
%132 = zext i8 %131 to i32
%133 = icmp eq i32 %132, 35
br i1 %133, label %134, label %143
134: ; preds = %127
%135 = load i64, i64* %9
%136 = icmp eq i64 %135, 0
br i1 %136, label %137, label %143
137: ; preds = %134
%138 = load i8*, i8** %6
%139 = getelementptr inbounds i8, i8* %138, i64 0
store i8 49, i8* %139
%140 = load i8*, i8** %4
%141 = load i64, i64* %7
%142 = getelementptr inbounds i8, i8* %140, i64 %141
store i8 32, i8* %142
br label %246
143: ; preds = %134, %127
%144 = load i8*, i8** %4
%145 = load i64, i64* %7
%146 = getelementptr inbounds i8, i8* %144, i64 %145
%147 = load i8, i8* %146
%148 = load i8*, i8** %4
%149 = load i64, i64* %8
%150 = getelementptr inbounds i8, i8* %148, i64 %149
store i8 %147, i8* %150
%151 = load i64, i64* %7
%152 = add nsw i64 %151, 1
store i64 %152, i64* %7
%153 = load i64, i64* %8
%154 = add nsw i64 %153, 1
store i64 %154, i64* %8
br label %155
155: ; preds = %143
br label %156
156: ; preds = %155
br label %157
157: ; preds = %156, %93
br label %158
158: ; preds = %157, %39
br label %245
159: ; preds = %16
%160 = load i8*, i8** %4
%161 = load i64, i64* %7
%162 = getelementptr inbounds i8, i8* %160, i64 %161
%163 = load i8, i8* %162
%164 = zext i8 %163 to i32
%165 = icmp eq i32 %164, 42
br i1 %165, label %166, label %193
166: ; preds = %159
%167 = load i64, i64* %7
%168 = add nsw i64 %167, 1
%169 = load i64, i64* %5
%170 = icmp slt i64 %168, %169
br i1 %170, label %171, label %193
171: ; preds = %166
%172 = load i8*, i8** %4
%173 = load i64, i64* %7
%174 = add nsw i64 %173, 1
%175 = getelementptr inbounds i8, i8* %172, i64 %174
%176 = load i8, i8* %175
%177 = zext i8 %176 to i32
%178 = icmp eq i32 %177, 47
br i1 %178, label %179, label %193
179: ; preds = %171
store i64 0, i64* %9
%180 = load i64, i64* %7
%181 = add nsw i64 %180, 2
store i64 %181, i64* %7
%182 = load i8*, i8** %4
%183 = load i64, i64* %7
%184 = getelementptr inbounds i8, i8* %182, i64 %183
%185 = load i8, i8* %184
%186 = load i8*, i8** %4
%187 = load i64, i64* %8
%188 = getelementptr inbounds i8, i8* %186, i64 %187
store i8 %185, i8* %188
%189 = load i64, i64* %7
%190 = add nsw i64 %189, 1
store i64 %190, i64* %7
%191 = load i64, i64* %8
%192 = add nsw i64 %191, 1
store i64 %192, i64* %8
br label %244
193: ; preds = %171, %166, %159
%194 = load i8*, i8** %4
%195 = load i64, i64* %7
%196 = getelementptr inbounds i8, i8* %194, i64 %195
%197 = load i8, i8* %196
%198 = zext i8 %197 to i32
%199 = icmp eq i32 %198, 45
br i1 %199, label %200, label %240
200: ; preds = %193
%201 = load i64, i64* %7
%202 = add nsw i64 %201, 1
%203 = load i64, i64* %5
%204 = icmp slt i64 %202, %203
br i1 %204, label %205, label %240
205: ; preds = %200
%206 = load i8*, i8** %4
%207 = load i64, i64* %7
%208 = add nsw i64 %207, 1
%209 = getelementptr inbounds i8, i8* %206, i64 %208
%210 = load i8, i8* %209
%211 = zext i8 %210 to i32
%212 = icmp eq i32 %211, 45
br i1 %212, label %213, label %240
213: ; preds = %205
%214 = load i64, i64* %7
%215 = add nsw i64 %214, 2
%216 = load i64, i64* %5
%217 = icmp slt i64 %215, %216
br i1 %217, label %218, label %240
218: ; preds = %213
%219 = load i8*, i8** %4
%220 = load i64, i64* %7
%221 = add nsw i64 %220, 2
%222 = getelementptr inbounds i8, i8* %219, i64 %221
%223 = load i8, i8* %222
%224 = zext i8 %223 to i32
%225 = icmp eq i32 %224, 62
br i1 %225, label %226, label %240
226: ; preds = %218
store i64 0, i64* %9
%227 = load i64, i64* %7
%228 = add nsw i64 %227, 3
store i64 %228, i64* %7
%229 = load i8*, i8** %4
%230 = load i64, i64* %7
%231 = getelementptr inbounds i8, i8* %229, i64 %230
%232 = load i8, i8* %231
%233 = load i8*, i8** %4
%234 = load i64, i64* %8
%235 = getelementptr inbounds i8, i8* %233, i64 %234
store i8 %232, i8* %235
%236 = load i64, i64* %7
%237 = add nsw i64 %236, 1
store i64 %237, i64* %7
%238 = load i64, i64* %8
%239 = add nsw i64 %238, 1
store i64 %239, i64* %8
br label %243
240: ; preds = %218, %213, %205, %200, %193
%241 = load i64, i64* %7
%242 = add nsw i64 %241, 1
store i64 %242, i64* %7
br label %243
243: ; preds = %240, %226
br label %244
244: ; preds = %243, %179
br label %245
245: ; preds = %244, %158
br label %12
246: ; preds = %137, %121, %12
%247 = load i64, i64* %9
%248 = icmp ne i64 %247, 0
br i1 %248, label %249, label %254
249: ; preds = %246
%250 = load i8*, i8** %4
%251 = load i64, i64* %8
%252 = add nsw i64 %251, 1
store i64 %252, i64* %8
%253 = getelementptr inbounds i8, i8* %250, i64 %251
store i8 32, i8* %253
br label %254
254: ; preds = %249, %246
%255 = load i64, i64* %8
%256 = trunc i64 %255 to i32
ret i32 %256
}

LLVM IR (-O2):
define i32 @removeComments_execute(i8* nocapture %0, i64 %1, i8* nocapture writeonly %2) {
store i8 48, i8* %2
%4 = icmp sgt i64 %1, 0
br i1 %4, label %5, label %111
5: ; preds = %3, %98
%6 = phi i64 [ %102, %98 ], [ 0, %3 ]
%7 = phi i64 [ %100, %98 ], [ 0, %3 ]
%8 = phi i64 [ %99, %98 ], [ 0, %3 ]
%9 = icmp eq i64 %6, 0
%10 = getelementptr inbounds i8, i8* %0, i64 %8
%11 = load i8, i8* %10
br i1 %9, label %12, label %60
12: ; preds = %5
switch i8 %11, label %13 [
i8 47, label %15
i8 60, label %24
i8 45, label %47
i8 35, label %55
]
13: ; preds = %12
%14 = add nsw i64 %8, 1
br label %56
15: ; preds = %12
%16 = add nsw i64 %8, 1
%17 = icmp slt i64 %16, %1
br i1 %17, label %18, label %56
18: ; preds = %15
%19 = getelementptr inbounds i8, i8* %0, i64 %16
%20 = load i8, i8* %19
%21 = icmp eq i8 %20, 42
br i1 %21, label %22, label %56
22: ; preds = %18
store i8 49, i8* %2
%23 = add nsw i64 %8, 2
br label %98
24: ; preds = %12
%25 = add nsw i64 %8, 1
%26 = icmp slt i64 %25, %1
br i1 %26, label %27, label %56
27: ; preds = %24
%28 = getelementptr inbounds i8, i8* %0, i64 %25
%29 = load i8, i8* %28
%30 = icmp eq i8 %29, 33
br i1 %30, label %31, label %56
31: ; preds = %27
%32 = add nsw i64 %8, 2
%33 = icmp slt i64 %32, %1
br i1 %33, label %34, label %56
34: ; preds = %31
%35 = getelementptr inbounds i8, i8* %0, i64 %32
%36 = load i8, i8* %35
%37 = icmp eq i8 %36, 45
br i1 %37, label %38, label %56
38: ; preds = %34
%39 = add nsw i64 %8, 3
%40 = icmp slt i64 %39, %1
br i1 %40, label %41, label %56
41: ; preds = %38
%42 = getelementptr inbounds i8, i8* %0, i64 %39
%43 = load i8, i8* %42
%44 = icmp eq i8 %43, 45
br i1 %44, label %45, label %56
45: ; preds = %41
store i8 49, i8* %2
%46 = add nsw i64 %8, 4
br label %98
47: ; preds = %12
%48 = add nsw i64 %8, 1
%49 = icmp slt i64 %48, %1
br i1 %49, label %50, label %56
50: ; preds = %47
%51 = getelementptr inbounds i8, i8* %0, i64 %48
%52 = load i8, i8* %51
%53 = icmp eq i8 %52, 45
br i1 %53, label %54, label %56
54: ; preds = %50
store i8 49, i8* %2
br label %107
55: ; preds = %12
store i8 49, i8* %2
br label %107
56: ; preds = %13, %15, %18, %24, %27, %31, %34, %38, %41, %47, %50
%57 = phi i64 [ %14, %13 ], [ %16, %15 ], [ %16, %18 ], [ %25, %24 ], [ %25, %27 ], [ %25, %31 ], [ %25, %34 ], [ %25, %38 ], [ %25, %41 ], [ %48, %47 ], [ %48, %50 ]
%58 = getelementptr inbounds i8, i8* %0, i64 %7
store i8 %11, i8* %58
%59 = add nsw i64 %7, 1
br label %98
60: ; preds = %5
switch i8 %11, label %61 [
i8 42, label %63
i8 45, label %77
]
61: ; preds = %60
%62 = add nsw i64 %8, 1
br label %98
63: ; preds = %60
%64 = add nsw i64 %8, 1
%65 = icmp slt i64 %64, %1
br i1 %65, label %66, label %98
66: ; preds = %63
%67 = getelementptr inbounds i8, i8* %0, i64 %64
%68 = load i8, i8* %67
%69 = icmp eq i8 %68, 47
br i1 %69, label %70, label %98
70: ; preds = %66
%71 = add nsw i64 %8, 2
%72 = getelementptr inbounds i8, i8* %0, i64 %71
%73 = load i8, i8* %72
%74 = getelementptr inbounds i8, i8* %0, i64 %7
store i8 %73, i8* %74
%75 = add nsw i64 %8, 3
%76 = add nsw i64 %7, 1
br label %98
77: ; preds = %60
%78 = add nsw i64 %8, 1
%79 = icmp slt i64 %78, %1
br i1 %79, label %80, label %98
80: ; preds = %77
%81 = getelementptr inbounds i8, i8* %0, i64 %78
%82 = load i8, i8* %81
%83 = icmp eq i8 %82, 45
br i1 %83, label %84, label %98
84: ; preds = %80
%85 = add nsw i64 %8, 2
%86 = icmp slt i64 %85, %1
br i1 %86, label %87, label %98
87: ; preds = %84
%88 = getelementptr inbounds i8, i8* %0, i64 %85
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 62
br i1 %90, label %91, label %98
91: ; preds = %87
%92 = add nsw i64 %8, 3
%93 = getelementptr inbounds i8, i8* %0, i64 %92
%94 = load i8, i8* %93
%95 = getelementptr inbounds i8, i8* %0, i64 %7
store i8 %94, i8* %95
%96 = add nsw i64 %8, 4
%97 = add nsw i64 %7, 1
br label %98
98: ; preds = %77, %80, %84, %87, %66, %63, %61, %70, %91, %22, %56, %45
%99 = phi i64 [ %23, %22 ], [ %46, %45 ], [ %57, %56 ], [ %75, %70 ], [ %96, %91 ], [ %62, %61 ], [ %64, %63 ], [ %64, %66 ], [ %78, %87 ], [ %78, %84 ], [ %78, %80 ], [ %78, %77 ]
%100 = phi i64 [ %7, %22 ], [ %7, %45 ], [ %59, %56 ], [ %76, %70 ], [ %97, %91 ], [ %7, %61 ], [ %7, %63 ], [ %7, %66 ], [ %7, %87 ], [ %7, %84 ], [ %7, %80 ], [ %7, %77 ]
%101 = phi i1 [ false, %22 ], [ false, %45 ], [ true, %56 ], [ true, %70 ], [ true, %91 ], [ false, %61 ], [ false, %63 ], [ false, %66 ], [ false, %87 ], [ false, %84 ], [ false, %80 ], [ false, %77 ]
%102 = phi i64 [ 1, %22 ], [ 1, %45 ], [ 0, %56 ], [ 0, %70 ], [ 0, %91 ], [ 1, %61 ], [ 1, %63 ], [ 1, %66 ], [ 1, %87 ], [ 1, %84 ], [ 1, %80 ], [ 1, %77 ]
%103 = icmp slt i64 %99, %1
br i1 %103, label %5, label %104
104: ; preds = %98
br i1 %101, label %111, label %105
105: ; preds = %104
%106 = add nsw i64 %100, 1
br label %107
107: ; preds = %105, %55, %54
%108 = phi i64 [ %8, %54 ], [ %8, %55 ], [ %100, %105 ]
%109 = phi i64 [ %7, %54 ], [ %7, %55 ], [ %106, %105 ]
%110 = getelementptr inbounds i8, i8* %0, i64 %108
store i8 32, i8* %110
br label %111
111: ; preds = %107, %3, %104
%112 = phi i64 [ %100, %104 ], [ 0, %3 ], [ %109, %107 ]
%113 = trunc i64 %112 to i32
ret i32 %113
}