int drop_comment(char *linei) {
  char *p, *q;
  char inquote = '\0';
  for (p = linei; *p; p++) {
    if (*p == '\'') {
      if (inquote == *p) {
        inquote = '\0';
      } else {
        inquote = *p;
      }
    }
    if (*p == '"') {
      if (inquote == *p) {
        inquote = '\0';
      } else {
        inquote = *p;
      }
    }
    if (!inquote && *p == '!') {
      for (q = p; *q; q++) {
        if ((*q == '$') && (*(q + 1) == 'o' || *(q + 1) == 'O') &&
            (*(q + 2) == 'm' || *(q + 2) == 'M') &&
            (*(q + 3) == 'p' || *(q + 3) == 'P'))
          return (0);
        if ((*(q + 3) == '$') && (*(q) == 'd' || *(q) == 'D') &&
            (*(q + 1) == 'e' || *(q + 1) == 'E') &&
            (*(q + 2) == 'c' || *(q + 2) == 'C'))
          return (0);
        if ((*(q + 3) == '$') && (*(q) == 'd' || *(q) == 'D') &&
            (*(q + 1) == 'i' || *(q + 1) == 'I') &&
            (*(q + 2) == 'r' || *(q + 2) == 'R'))
          return (0);
        if ((*q == '$') && (*(q + 1) == 'a' || *(q + 1) == 'A') &&
            (*(q + 2) == 'c' || *(q + 2) == 'C') &&
            (*(q + 3) == 'c' || *(q + 3) == 'C'))
          return (0);
        if ((*(q + 1) == 'o' || *(q + 1) == 'O') &&
            (*(q + 2) == 'c' || *(q + 2) == 'C') &&
            (*(q + 3) == 'l' || *(q + 3) == 'L'))
          return (0);
      }
      *p = '\n';
      *(p + 1) = '\0';
      return (0);
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<drop_comment>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movb   $0x0,-0x21(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     1483 <drop_comment+0x383>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
jne    115b <drop_comment+0x5b>
movsbl -0x21(%rbp),%eax
mov    -0x18(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    114d <drop_comment+0x4d>
movb   $0x0,-0x21(%rbp)
jmp    1156 <drop_comment+0x56>
mov    -0x18(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x21(%rbp)
jmp    115b <drop_comment+0x5b>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1195 <drop_comment+0x95>
movsbl -0x21(%rbp),%eax
mov    -0x18(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    1187 <drop_comment+0x87>
movb   $0x0,-0x21(%rbp)
jmp    1190 <drop_comment+0x90>
mov    -0x18(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x21(%rbp)
jmp    1195 <drop_comment+0x95>
cmpb   $0x0,-0x21(%rbp)
jne    146d <drop_comment+0x36d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
jne    146d <drop_comment+0x36d>
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmpb   $0x0,(%rax)
je     1452 <drop_comment+0x352>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    1246 <drop_comment+0x146>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6f,%eax
je     11f6 <drop_comment+0xf6>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x4f,%eax
jne    1246 <drop_comment+0x146>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x6d,%eax
je     1218 <drop_comment+0x118>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x4d,%eax
jne    1246 <drop_comment+0x146>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x70,%eax
je     123a <drop_comment+0x13a>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x50,%eax
jne    1246 <drop_comment+0x146>
movl   $0x0,-0x4(%rbp)
jmp    148a <drop_comment+0x38a>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x24,%eax
jne    12c7 <drop_comment+0x1c7>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
je     1277 <drop_comment+0x177>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x44,%eax
jne    12c7 <drop_comment+0x1c7>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x65,%eax
je     1299 <drop_comment+0x199>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x45,%eax
jne    12c7 <drop_comment+0x1c7>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x63,%eax
je     12bb <drop_comment+0x1bb>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x43,%eax
jne    12c7 <drop_comment+0x1c7>
movl   $0x0,-0x4(%rbp)
jmp    148a <drop_comment+0x38a>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x24,%eax
jne    1348 <drop_comment+0x248>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
je     12f8 <drop_comment+0x1f8>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x44,%eax
jne    1348 <drop_comment+0x248>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x69,%eax
je     131a <drop_comment+0x21a>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x49,%eax
jne    1348 <drop_comment+0x248>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x72,%eax
je     133c <drop_comment+0x23c>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x52,%eax
jne    1348 <drop_comment+0x248>
movl   $0x0,-0x4(%rbp)
jmp    148a <drop_comment+0x38a>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    13ca <drop_comment+0x2ca>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x61,%eax
je     137a <drop_comment+0x27a>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x41,%eax
jne    13ca <drop_comment+0x2ca>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x63,%eax
je     139c <drop_comment+0x29c>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x43,%eax
jne    13ca <drop_comment+0x2ca>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x63,%eax
je     13be <drop_comment+0x2be>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x43,%eax
jne    13ca <drop_comment+0x2ca>
movl   $0x0,-0x4(%rbp)
jmp    148a <drop_comment+0x38a>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6f,%eax
je     13ec <drop_comment+0x2ec>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x4f,%eax
jne    143c <drop_comment+0x33c>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x63,%eax
je     140e <drop_comment+0x30e>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x43,%eax
jne    143c <drop_comment+0x33c>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x6c,%eax
je     1430 <drop_comment+0x330>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x4c,%eax
jne    143c <drop_comment+0x33c>
movl   $0x0,-0x4(%rbp)
jmp    148a <drop_comment+0x38a>
jmp    1441 <drop_comment+0x341>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    11b7 <drop_comment+0xb7>
mov    -0x18(%rbp),%rax
movb   $0xa,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x0,0x1(%rax)
movl   $0x0,-0x4(%rbp)
jmp    148a <drop_comment+0x38a>
jmp    1472 <drop_comment+0x372>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1114 <drop_comment+0x14>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<drop_comment>:
add    $0x3,%rdi
xor    %eax,%eax
xor    %ecx,%ecx
jmp    111f <drop_comment+0x1f>
nopw   0x0(%rax,%rax,1)
cmp    $0x27,%cl
mov    $0x27,%ecx
cmove  %eax,%ecx
add    $0x1,%rdi
movzbl -0x3(%rdi),%edx
cmp    $0x27,%dl
je     1110 <drop_comment+0x10>
test   %dl,%dl
je     1260 <drop_comment+0x160>
cmp    $0x22,%cl
mov    $0x22,%esi
cmove  %eax,%esi
cmp    $0x22,%dl
movzbl %cl,%ecx
cmove  %esi,%ecx
test   %cl,%cl
jne    111b <drop_comment+0x1b>
cmp    $0x21,%dl
je     1155 <drop_comment+0x55>
xor    %ecx,%ecx
add    $0x1,%rdi
jmp    111f <drop_comment+0x1f>
mov    $0x21,%cl
mov    %rdi,%rax
jmp    1164 <drop_comment+0x64>
nopl   0x0(%rax)
add    $0x1,%rax
cmp    $0x24,%cl
je     1180 <drop_comment+0x80>
test   %cl,%cl
jne    11a7 <drop_comment+0xa7>
jmp    1263 <drop_comment+0x163>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x2(%rax),%edx
or     $0x20,%dl
cmp    $0x6f,%dl
jne    11a7 <drop_comment+0xa7>
movzbl -0x1(%rax),%edx
or     $0x20,%dl
cmp    $0x6d,%dl
jne    11a7 <drop_comment+0xa7>
movzbl (%rax),%edx
or     $0x20,%dl
cmp    $0x70,%dl
je     1260 <drop_comment+0x160>
movzbl (%rax),%r8d
cmp    $0x24,%r8b
jne    1200 <drop_comment+0x100>
cmp    $0x24,%cl
je     1205 <drop_comment+0x105>
cmp    $0x64,%cl
je     11c0 <drop_comment+0xc0>
cmp    $0x44,%cl
jne    1230 <drop_comment+0x130>
movzbl -0x2(%rax),%esi
or     $0x20,%sil
cmp    $0x65,%sil
jne    11de <drop_comment+0xde>
movzbl -0x1(%rax),%edx
or     $0x20,%dl
cmp    $0x63,%dl
je     1260 <drop_comment+0x160>
or     $0x20,%cl
cmp    $0x64,%cl
jne    1230 <drop_comment+0x130>
cmp    $0x69,%sil
jne    1230 <drop_comment+0x130>
movzbl -0x1(%rax),%ecx
or     $0x20,%cl
cmp    $0x72,%cl
jne    1230 <drop_comment+0x130>
jmp    1260 <drop_comment+0x160>
nopw   0x0(%rax,%rax,1)
cmp    $0x24,%cl
jne    1230 <drop_comment+0x130>
movzbl -0x2(%rax),%ecx
or     $0x20,%cl
cmp    $0x61,%cl
jne    1230 <drop_comment+0x130>
movzbl -0x1(%rax),%ecx
or     $0x20,%cl
cmp    $0x63,%cl
jne    1230 <drop_comment+0x130>
mov    %r8d,%ecx
or     $0x20,%cl
cmp    $0x63,%cl
je     1260 <drop_comment+0x160>
nopl   0x0(%rax,%rax,1)
movzbl -0x2(%rax),%ecx
mov    %ecx,%edx
or     $0x20,%dl
cmp    $0x6f,%dl
jne    1160 <drop_comment+0x60>
movzbl -0x1(%rax),%edx
or     $0x20,%dl
cmp    $0x63,%dl
jne    1160 <drop_comment+0x60>
or     $0x20,%r8b
cmp    $0x6c,%r8b
jne    1160 <drop_comment+0x60>
xor    %eax,%eax
ret
movw   $0xa,-0x3(%rdi)
xor    %eax,%eax
ret

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

LLVM IR (-O2):
define i32 @drop_comment(i8* nocapture %0) {
br label %2
2: ; preds = %64, %1
%3 = phi i8* [ %0, %1 ], [ %66, %64 ]
%4 = phi i8 [ 0, %1 ], [ %65, %64 ]
%5 = load i8, i8* %3
switch i8 %5, label %6 [
i8 0, label %67
i8 39, label %12
]
6: ; preds = %2
%7 = icmp eq i8 %5, 34
%8 = icmp eq i8 %4, 34
%9 = select i1 %8, i8 0, i8 34
%10 = select i1 %7, i8 %9, i8 %4
%11 = icmp eq i8 %10, 0
br i1 %11, label %15, label %64
12: ; preds = %2
%13 = icmp eq i8 %4, 39
%14 = select i1 %13, i8 0, i8 39
br label %64
15: ; preds = %6
%16 = icmp eq i8 %5, 33
br i1 %16, label %17, label %64
17: ; preds = %15, %61
%18 = phi i8 [ %56, %61 ], [ 33, %15 ]
%19 = phi i8* [ %55, %61 ], [ %3, %15 ]
switch i8 %18, label %29 [
i8 0, label %62
i8 36, label %20
]
20: ; preds = %17
%21 = getelementptr inbounds i8, i8* %19, i64 1
%22 = load i8, i8* %21
switch i8 %22, label %29 [
i8 111, label %23
i8 79, label %23
]
23: ; preds = %20, %20
%24 = getelementptr inbounds i8, i8* %19, i64 2
%25 = load i8, i8* %24
switch i8 %25, label %29 [
i8 109, label %26
i8 77, label %26
]
26: ; preds = %23, %23
%27 = getelementptr inbounds i8, i8* %19, i64 3
%28 = load i8, i8* %27
switch i8 %28, label %29 [
i8 112, label %67
i8 80, label %67
]
29: ; preds = %26, %23, %20, %17
%30 = getelementptr inbounds i8, i8* %19, i64 3
%31 = load i8, i8* %30
%32 = icmp eq i8 %31, 36
br i1 %32, label %33, label %45
33: ; preds = %29
switch i8 %18, label %54 [
i8 100, label %34
i8 68, label %34
i8 36, label %47
]
34: ; preds = %33, %33
%35 = getelementptr inbounds i8, i8* %19, i64 1
%36 = load i8, i8* %35
switch i8 %36, label %40 [
i8 101, label %37
i8 69, label %37
]
37: ; preds = %34, %34
%38 = getelementptr inbounds i8, i8* %19, i64 2
%39 = load i8, i8* %38
switch i8 %39, label %40 [
i8 99, label %67
i8 67, label %67
]
40: ; preds = %37, %34
switch i8 %18, label %54 [
i8 100, label %41
i8 68, label %41
]
41: ; preds = %40, %40
switch i8 %36, label %54 [
i8 105, label %42
i8 73, label %42
]
42: ; preds = %41, %41
%43 = getelementptr inbounds i8, i8* %19, i64 2
%44 = load i8, i8* %43
switch i8 %44, label %54 [
i8 114, label %67
i8 82, label %67
]
45: ; preds = %29
%46 = icmp eq i8 %18, 36
br i1 %46, label %47, label %54
47: ; preds = %33, %45
%48 = getelementptr inbounds i8, i8* %19, i64 1
%49 = load i8, i8* %48
switch i8 %49, label %54 [
i8 97, label %50
i8 65, label %50
]
50: ; preds = %47, %47
%51 = getelementptr inbounds i8, i8* %19, i64 2
%52 = load i8, i8* %51
switch i8 %52, label %54 [
i8 99, label %53
i8 67, label %53
]
53: ; preds = %50, %50
switch i8 %31, label %54 [
i8 99, label %67
i8 67, label %67
]
54: ; preds = %33, %40, %41, %42, %53, %50, %47, %45
%55 = getelementptr inbounds i8, i8* %19, i64 1
%56 = load i8, i8* %55
switch i8 %56, label %61 [
i8 111, label %57
i8 79, label %57
]
57: ; preds = %54, %54
%58 = getelementptr inbounds i8, i8* %19, i64 2
%59 = load i8, i8* %58
switch i8 %59, label %61 [
i8 99, label %60
i8 67, label %60
]
60: ; preds = %57, %57
switch i8 %31, label %61 [
i8 108, label %67
i8 76, label %67
]
61: ; preds = %60, %57, %54
br label %17
62: ; preds = %17
store i8 10, i8* %3
%63 = getelementptr inbounds i8, i8* %3, i64 1
store i8 0, i8* %63
br label %67
64: ; preds = %12, %6, %15
%65 = phi i8 [ %10, %6 ], [ 0, %15 ], [ %14, %12 ]
%66 = getelementptr inbounds i8, i8* %3, i64 1
br label %2
67: ; preds = %2, %60, %60, %53, %53, %42, %42, %37, %37, %26, %26, %62
ret i32 0
}