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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ feof(int /*<<< orphan*/);
char fgetc(int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ fputc(char, int /*<<< orphan*/);
int /*<<< orphan*/ stdin;
int /*<<< orphan*/ stdout;
int main(void) {
  int countbraceopen, countparopen;
  int commentopen;
  char ch, ch2;
  char lastch = 'A';
  countbraceopen = countparopen = commentopen = 0;
  while (!feof(stdin)) {
    lastch = ch;
    ch = fgetc(stdin);
    if ((ch == '\n' || ch == '\r')) {
      ch2 = fgetc(stdin);
      if (ch2 == '{') {
        if (countbraceopen == 0 && countparopen == 0)
          fprintf(stdout, " FUNCBEGIN ");
        countbraceopen++;
      } else {
        if (ch2 == '{') {
          if (countbraceopen == 0)
            fprintf(stdout, " BRACEBEGIN ");
          countbraceopen++;
        } else if (ch2 == '}')
          countbraceopen--;
        else if (ch2 == '(') {
          if (countbraceopen == 0 && countparopen == 0)
            fprintf(stdout, " PARBEGIN ");
          countparopen++;
        } else if (ch2 == ')') {
          countparopen--;
        } else if (ch == '/' && ch2 == '*') {
          commentopen++;
        } else if (ch == '*' && ch2 == '/') {
          commentopen--;
        } else {
          if (countbraceopen == 0 && countparopen == 0 && commentopen == 0) {
            fputc(ch2, stdout);
          }
        }
      }
    } else if (ch == '{') {
      if (countbraceopen == 0)
        fprintf(stdout, " BRACEBEGIN ");
      countbraceopen++;
    } else if (ch == '}')
      countbraceopen--;
    else if (ch == '(') {
      if (countbraceopen == 0 && countparopen == 0)
        fprintf(stdout, " PARBEGIN ");
      countparopen++;
    } else if (ch == ')') {
      countparopen--;
    } else if (lastch == '/' && ch == '*') {
      commentopen++;
    } else if (lastch == '*' && ch == '/') {
      commentopen--;
    } else {
      if (countbraceopen == 0 && countparopen == 0 && commentopen == 0) {
        fputc(ch, stdout);
      }
    }
  }
  return (0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movb   $0x41,-0x13(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
mov    0x2e79(%rip),%rax
mov    (%rax),%edi
call   1060 <feof@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    118b <main+0x4b>
jmp    14cd <main+0x38d>
mov    -0x11(%rbp),%al
mov    %al,-0x13(%rbp)
mov    0x2e50(%rip),%rax
mov    (%rax),%edi
call   1030 <fgetc@plt>
mov    %al,-0x11(%rbp)
movsbl -0x11(%rbp),%eax
cmp    $0xa,%eax
je     11bc <main+0x7c>
movsbl -0x11(%rbp),%eax
cmp    $0xd,%eax
jne    136f <main+0x22f>
mov    0x2e25(%rip),%rax
mov    (%rax),%edi
call   1030 <fgetc@plt>
mov    %al,-0x12(%rbp)
movsbl -0x12(%rbp),%eax
cmp    $0x7b,%eax
jne    1211 <main+0xd1>
cmpl   $0x0,-0x8(%rbp)
jne    1203 <main+0xc3>
cmpl   $0x0,-0xc(%rbp)
jne    1203 <main+0xc3>
mov    0x2de3(%rip),%rax
mov    (%rax),%edi
lea    0xe02(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    136a <main+0x22a>
movsbl -0x12(%rbp),%eax
cmp    $0x7b,%eax
jne    124b <main+0x10b>
cmpl   $0x0,-0x8(%rbp)
jne    123d <main+0xfd>
mov    0x2da9(%rip),%rax
mov    (%rax),%edi
lea    0xdd4(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1365 <main+0x225>
movsbl -0x12(%rbp),%eax
cmp    $0x7d,%eax
jne    1266 <main+0x126>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
jmp    1360 <main+0x220>
movsbl -0x12(%rbp),%eax
cmp    $0x28,%eax
jne    12aa <main+0x16a>
cmpl   $0x0,-0x8(%rbp)
jne    129c <main+0x15c>
cmpl   $0x0,-0xc(%rbp)
jne    129c <main+0x15c>
mov    0x2d4a(%rip),%rax
mov    (%rax),%edi
lea    0xd82(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    135b <main+0x21b>
movsbl -0x12(%rbp),%eax
cmp    $0x29,%eax
jne    12c5 <main+0x185>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    1356 <main+0x216>
movsbl -0x11(%rbp),%eax
cmp    $0x2f,%eax
jne    12ed <main+0x1ad>
movsbl -0x12(%rbp),%eax
cmp    $0x2a,%eax
jne    12ed <main+0x1ad>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1351 <main+0x211>
movsbl -0x11(%rbp),%eax
cmp    $0x2a,%eax
jne    1315 <main+0x1d5>
movsbl -0x12(%rbp),%eax
cmp    $0x2f,%eax
jne    1315 <main+0x1d5>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    134c <main+0x20c>
cmpl   $0x0,-0x8(%rbp)
jne    1347 <main+0x207>
cmpl   $0x0,-0xc(%rbp)
jne    1347 <main+0x207>
cmpl   $0x0,-0x10(%rbp)
jne    1347 <main+0x207>
mov    -0x12(%rbp),%al
mov    0x2c9b(%rip),%rcx
mov    (%rcx),%esi
movsbl %al,%edi
call   1040 <fputc@plt>
jmp    134c <main+0x20c>
jmp    1351 <main+0x211>
jmp    1356 <main+0x216>
jmp    135b <main+0x21b>
jmp    1360 <main+0x220>
jmp    1365 <main+0x225>
jmp    136a <main+0x22a>
jmp    14c8 <main+0x388>
movsbl -0x11(%rbp),%eax
cmp    $0x7b,%eax
jne    13a9 <main+0x269>
cmpl   $0x0,-0x8(%rbp)
jne    139b <main+0x25b>
mov    0x2c4b(%rip),%rax
mov    (%rax),%edi
lea    0xc76(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14c3 <main+0x383>
movsbl -0x11(%rbp),%eax
cmp    $0x7d,%eax
jne    13c4 <main+0x284>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
jmp    14be <main+0x37e>
movsbl -0x11(%rbp),%eax
cmp    $0x28,%eax
jne    1408 <main+0x2c8>
cmpl   $0x0,-0x8(%rbp)
jne    13fa <main+0x2ba>
cmpl   $0x0,-0xc(%rbp)
jne    13fa <main+0x2ba>
mov    0x2bec(%rip),%rax
mov    (%rax),%edi
lea    0xc24(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    14b9 <main+0x379>
movsbl -0x11(%rbp),%eax
cmp    $0x29,%eax
jne    1423 <main+0x2e3>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    14b4 <main+0x374>
movsbl -0x13(%rbp),%eax
cmp    $0x2f,%eax
jne    144b <main+0x30b>
movsbl -0x11(%rbp),%eax
cmp    $0x2a,%eax
jne    144b <main+0x30b>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    14af <main+0x36f>
movsbl -0x13(%rbp),%eax
cmp    $0x2a,%eax
jne    1473 <main+0x333>
movsbl -0x11(%rbp),%eax
cmp    $0x2f,%eax
jne    1473 <main+0x333>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    14aa <main+0x36a>
cmpl   $0x0,-0x8(%rbp)
jne    14a5 <main+0x365>
cmpl   $0x0,-0xc(%rbp)
jne    14a5 <main+0x365>
cmpl   $0x0,-0x10(%rbp)
jne    14a5 <main+0x365>
mov    -0x11(%rbp),%al
mov    0x2b3d(%rip),%rcx
mov    (%rcx),%esi
movsbl %al,%edi
call   1040 <fputc@plt>
jmp    14aa <main+0x36a>
jmp    14af <main+0x36f>
jmp    14b4 <main+0x374>
jmp    14b9 <main+0x379>
jmp    14be <main+0x37e>
jmp    14c3 <main+0x383>
jmp    14c8 <main+0x388>
jmp    1168 <main+0x28>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    0x2e96(%rip),%r13
mov    0x0(%r13),%edi
call   1060 <feof@plt>
test   %eax,%eax
je     1170 <main+0x30>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movl   $0x0,0x4(%rsp)
lea    0xe81(%rip),%r15
xor    %ebp,%ebp
xor    %r12d,%r12d
jmp    11a3 <main+0x63>
cs nopw 0x0(%rax,%rax,1)
add    $0xffffffff,%ebp
mov    0x0(%r13),%edi
call   1060 <feof@plt>
mov    %ebx,%r14d
test   %eax,%eax
jne    115f <main+0x1f>
mov    0x0(%r13),%edi
call   1030 <fgetc@plt>
mov    %eax,%ebx
lea    -0xa(%rbx),%eax
cmp    $0x1f,%al
ja     11e0 <main+0xa0>
movzbl %al,%eax
movslq (%r15,%rax,4),%rax
add    %r15,%rax
jmp    *%rax
mov    0x0(%r13),%edi
call   1030 <fgetc@plt>
cmp    $0x7a,%al
jg     1224 <main+0xe4>
cmp    $0x28,%al
je     1200 <main+0xc0>
cmp    $0x29,%al
je     1190 <main+0x50>
jmp    1286 <main+0x146>
nopl   0x0(%rax,%rax,1)
cmp    $0x7b,%bl
je     124e <main+0x10e>
cmp    $0x7d,%bl
je     1245 <main+0x105>
cmp    $0x2f,%r14b
jne    1271 <main+0x131>
cmp    $0x2a,%bl
jne    1271 <main+0x131>
addl   $0x1,0x4(%rsp)
jmp    1193 <main+0x53>
mov    %r12d,%eax
or     %ebp,%eax
jne    121c <main+0xdc>
mov    0x2dca(%rip),%rax
mov    (%rax),%edi
lea    0xe82(%rip),%rsi
call   1050 <fprintf@plt>
add    $0x1,%ebp
jmp    1193 <main+0x53>
cmp    $0x7d,%al
je     1245 <main+0x105>
cmp    $0x7b,%al
jne    1286 <main+0x146>
mov    %r12d,%eax
or     %ebp,%eax
jne    1268 <main+0x128>
mov    0x2d9e(%rip),%rax
mov    (%rax),%edi
lea    0xe3d(%rip),%rsi
jmp    1263 <main+0x123>
add    $0xffffffff,%r12d
jmp    1193 <main+0x53>
test   %r12d,%r12d
jne    1268 <main+0x128>
mov    0x2d7e(%rip),%rax
mov    (%rax),%edi
lea    0xe29(%rip),%rsi
call   1050 <fprintf@plt>
add    $0x1,%r12d
jmp    1193 <main+0x53>
cmp    $0x2a,%r14b
jne    12b0 <main+0x170>
cmp    $0x2f,%bl
jne    12b0 <main+0x170>
addl   $0xffffffff,0x4(%rsp)
jmp    1193 <main+0x53>
test   %r12d,%r12d
jne    1193 <main+0x53>
test   %ebp,%ebp
jne    1193 <main+0x53>
cmpl   $0x0,0x4(%rsp)
jne    1193 <main+0x53>
mov    0x2d2f(%rip),%rcx
mov    (%rcx),%esi
movsbl %al,%edi
jmp    12d8 <main+0x198>
test   %r12d,%r12d
jne    1193 <main+0x53>
test   %ebp,%ebp
jne    1193 <main+0x53>
cmpl   $0x0,0x4(%rsp)
jne    1193 <main+0x53>
mov    0x2d05(%rip),%rax
mov    (%rax),%esi
movsbl %bl,%edi
call   1040 <fputc@plt>
xor    %r12d,%r12d
xor    %ebp,%ebp
movl   $0x0,0x4(%rsp)
jmp    1193 <main+0x53>

LLVM IR (-O0):
@stdin = global i32 0
@stdout = global i32 0
@.str = [12 x i8] c" FUNCBEGIN \00"
@.str.1 = [13 x i8] c" BRACEBEGIN \00"
@.str.2 = [11 x i8] c" PARBEGIN \00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
store i32 0, i32* %1
store i8 65, i8* %7
store i32 0, i32* %4
store i32 0, i32* %3
store i32 0, i32* %2
br label %8
8: ; preds = %213, %0
%9 = load i32, i32* @stdin
%10 = call i32 @feof(i32 %9)
%11 = icmp ne i32 %10, 0
%12 = xor i1 %11, true
br i1 %12, label %13, label %214
13: ; preds = %8
%14 = load i8, i8* %5
store i8 %14, i8* %7
%15 = load i32, i32* @stdin
%16 = call signext i8 @fgetc(i32 %15)
store i8 %16, i8* %5
%17 = load i8, i8* %5
%18 = sext i8 %17 to i32
%19 = icmp eq i32 %18, 10
br i1 %19, label %24, label %20
20: ; preds = %13
%21 = load i8, i8* %5
%22 = sext i8 %21 to i32
%23 = icmp eq i32 %22, 13
br i1 %23, label %24, label %128
24: ; preds = %20, %13
%25 = load i32, i32* @stdin
%26 = call signext i8 @fgetc(i32 %25)
store i8 %26, i8* %6
%27 = load i8, i8* %6
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 123
br i1 %29, label %30, label %42
30: ; preds = %24
%31 = load i32, i32* %2
%32 = icmp eq i32 %31, 0
br i1 %32, label %33, label %39
33: ; preds = %30
%34 = load i32, i32* %3
%35 = icmp eq i32 %34, 0
br i1 %35, label %36, label %39
36: ; preds = %33
%37 = load i32, i32* @stdout
%38 = call i32 @fprintf(i32 %37, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
br label %39
39: ; preds = %36, %33, %30
%40 = load i32, i32* %2
%41 = add nsw i32 %40, 1
store i32 %41, i32* %2
br label %127
42: ; preds = %24
%43 = load i8, i8* %6
%44 = sext i8 %43 to i32
%45 = icmp eq i32 %44, 123
br i1 %45, label %46, label %55
46: ; preds = %42
%47 = load i32, i32* %2
%48 = icmp eq i32 %47, 0
br i1 %48, label %49, label %52
49: ; preds = %46
%50 = load i32, i32* @stdout
%51 = call i32 @fprintf(i32 %50, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
br label %52
52: ; preds = %49, %46
%53 = load i32, i32* %2
%54 = add nsw i32 %53, 1
store i32 %54, i32* %2
br label %126
55: ; preds = %42
%56 = load i8, i8* %6
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 125
br i1 %58, label %59, label %62
59: ; preds = %55
%60 = load i32, i32* %2
%61 = add nsw i32 %60, -1
store i32 %61, i32* %2
br label %125
62: ; preds = %55
%63 = load i8, i8* %6
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 40
br i1 %65, label %66, label %78
66: ; preds = %62
%67 = load i32, i32* %2
%68 = icmp eq i32 %67, 0
br i1 %68, label %69, label %75
69: ; preds = %66
%70 = load i32, i32* %3
%71 = icmp eq i32 %70, 0
br i1 %71, label %72, label %75
72: ; preds = %69
%73 = load i32, i32* @stdout
%74 = call i32 @fprintf(i32 %73, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0))
br label %75
75: ; preds = %72, %69, %66
%76 = load i32, i32* %3
%77 = add nsw i32 %76, 1
store i32 %77, i32* %3
br label %124
78: ; preds = %62
%79 = load i8, i8* %6
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %80, 41
br i1 %81, label %82, label %85
82: ; preds = %78
%83 = load i32, i32* %3
%84 = add nsw i32 %83, -1
store i32 %84, i32* %3
br label %123
85: ; preds = %78
%86 = load i8, i8* %5
%87 = sext i8 %86 to i32
%88 = icmp eq i32 %87, 47
br i1 %88, label %89, label %96
89: ; preds = %85
%90 = load i8, i8* %6
%91 = sext i8 %90 to i32
%92 = icmp eq i32 %91, 42
br i1 %92, label %93, label %96
93: ; preds = %89
%94 = load i32, i32* %4
%95 = add nsw i32 %94, 1
store i32 %95, i32* %4
br label %122
96: ; preds = %89, %85
%97 = load i8, i8* %5
%98 = sext i8 %97 to i32
%99 = icmp eq i32 %98, 42
br i1 %99, label %100, label %107
100: ; preds = %96
%101 = load i8, i8* %6
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 47
br i1 %103, label %104, label %107
104: ; preds = %100
%105 = load i32, i32* %4
%106 = add nsw i32 %105, -1
store i32 %106, i32* %4
br label %121
107: ; preds = %100, %96
%108 = load i32, i32* %2
%109 = icmp eq i32 %108, 0
br i1 %109, label %110, label %120
110: ; preds = %107
%111 = load i32, i32* %3
%112 = icmp eq i32 %111, 0
br i1 %112, label %113, label %120
113: ; preds = %110
%114 = load i32, i32* %4
%115 = icmp eq i32 %114, 0
br i1 %115, label %116, label %120
116: ; preds = %113
%117 = load i8, i8* %6
%118 = load i32, i32* @stdout
%119 = call i32 @fputc(i8 signext %117, i32 %118)
br label %120
120: ; preds = %116, %113, %110, %107
br label %121
121: ; preds = %120, %104
br label %122
122: ; preds = %121, %93
br label %123
123: ; preds = %122, %82
br label %124
124: ; preds = %123, %75
br label %125
125: ; preds = %124, %59
br label %126
126: ; preds = %125, %52
br label %127
127: ; preds = %126, %39
br label %213
128: ; preds = %20
%129 = load i8, i8* %5
%130 = sext i8 %129 to i32
%131 = icmp eq i32 %130, 123
br i1 %131, label %132, label %141
132: ; preds = %128
%133 = load i32, i32* %2
%134 = icmp eq i32 %133, 0
br i1 %134, label %135, label %138
135: ; preds = %132
%136 = load i32, i32* @stdout
%137 = call i32 @fprintf(i32 %136, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
br label %138
138: ; preds = %135, %132
%139 = load i32, i32* %2
%140 = add nsw i32 %139, 1
store i32 %140, i32* %2
br label %212
141: ; preds = %128
%142 = load i8, i8* %5
%143 = sext i8 %142 to i32
%144 = icmp eq i32 %143, 125
br i1 %144, label %145, label %148
145: ; preds = %141
%146 = load i32, i32* %2
%147 = add nsw i32 %146, -1
store i32 %147, i32* %2
br label %211
148: ; preds = %141
%149 = load i8, i8* %5
%150 = sext i8 %149 to i32
%151 = icmp eq i32 %150, 40
br i1 %151, label %152, label %164
152: ; preds = %148
%153 = load i32, i32* %2
%154 = icmp eq i32 %153, 0
br i1 %154, label %155, label %161
155: ; preds = %152
%156 = load i32, i32* %3
%157 = icmp eq i32 %156, 0
br i1 %157, label %158, label %161
158: ; preds = %155
%159 = load i32, i32* @stdout
%160 = call i32 @fprintf(i32 %159, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0))
br label %161
161: ; preds = %158, %155, %152
%162 = load i32, i32* %3
%163 = add nsw i32 %162, 1
store i32 %163, i32* %3
br label %210
164: ; preds = %148
%165 = load i8, i8* %5
%166 = sext i8 %165 to i32
%167 = icmp eq i32 %166, 41
br i1 %167, label %168, label %171
168: ; preds = %164
%169 = load i32, i32* %3
%170 = add nsw i32 %169, -1
store i32 %170, i32* %3
br label %209
171: ; preds = %164
%172 = load i8, i8* %7
%173 = sext i8 %172 to i32
%174 = icmp eq i32 %173, 47
br i1 %174, label %175, label %182
175: ; preds = %171
%176 = load i8, i8* %5
%177 = sext i8 %176 to i32
%178 = icmp eq i32 %177, 42
br i1 %178, label %179, label %182
179: ; preds = %175
%180 = load i32, i32* %4
%181 = add nsw i32 %180, 1
store i32 %181, i32* %4
br label %208
182: ; preds = %175, %171
%183 = load i8, i8* %7
%184 = sext i8 %183 to i32
%185 = icmp eq i32 %184, 42
br i1 %185, label %186, label %193
186: ; preds = %182
%187 = load i8, i8* %5
%188 = sext i8 %187 to i32
%189 = icmp eq i32 %188, 47
br i1 %189, label %190, label %193
190: ; preds = %186
%191 = load i32, i32* %4
%192 = add nsw i32 %191, -1
store i32 %192, i32* %4
br label %207
193: ; preds = %186, %182
%194 = load i32, i32* %2
%195 = icmp eq i32 %194, 0
br i1 %195, label %196, label %206
196: ; preds = %193
%197 = load i32, i32* %3
%198 = icmp eq i32 %197, 0
br i1 %198, label %199, label %206
199: ; preds = %196
%200 = load i32, i32* %4
%201 = icmp eq i32 %200, 0
br i1 %201, label %202, label %206
202: ; preds = %199
%203 = load i8, i8* %5
%204 = load i32, i32* @stdout
%205 = call i32 @fputc(i8 signext %203, i32 %204)
br label %206
206: ; preds = %202, %199, %196, %193
br label %207
207: ; preds = %206, %190
br label %208
208: ; preds = %207, %179
br label %209
209: ; preds = %208, %168
br label %210
210: ; preds = %209, %161
br label %211
211: ; preds = %210, %145
br label %212
212: ; preds = %211, %138
br label %213
213: ; preds = %212, %127
br label %8
214: ; preds = %8
ret i32 0
}

LLVM IR (-O2):
@stdin = global i32 0
@stdout = global i32 0
@.str = [12 x i8] c" FUNCBEGIN \00"
@.str.1 = [13 x i8] c" BRACEBEGIN \00"
@.str.2 = [11 x i8] c" PARBEGIN \00"
define i32 @main() {
%1 = load i32, i32* @stdin
%2 = tail call i32 @feof(i32 %1)
%3 = icmp eq i32 %2, 0
br i1 %3, label %4, label %93
4: ; preds = %0, %86
%5 = phi i8 [ %10, %86 ], [ undef, %0 ]
%6 = phi i32 [ %89, %86 ], [ 0, %0 ]
%7 = phi i32 [ %88, %86 ], [ 0, %0 ]
%8 = phi i32 [ %87, %86 ], [ 0, %0 ]
%9 = load i32, i32* @stdin
%10 = tail call signext i8 @fgetc(i32 %9)
switch i8 %10, label %65 [
i8 13, label %11
i8 10, label %11
i8 123, label %45
i8 125, label %52
i8 40, label %54
i8 41, label %63
]
11: ; preds = %4, %4
%12 = load i32, i32* @stdin
%13 = tail call signext i8 @fgetc(i32 %12)
switch i8 %13, label %36 [
i8 123, label %14
i8 125, label %23
i8 40, label %25
i8 41, label %34
]
14: ; preds = %11
%15 = icmp eq i32 %8, 0
%16 = icmp eq i32 %7, 0
%17 = select i1 %15, i1 %16, i1 false
br i1 %17, label %18, label %21
18: ; preds = %14
%19 = load i32, i32* @stdout
%20 = tail call i32 @fprintf(i32 %19, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0))
br label %21
21: ; preds = %18, %14
%22 = add nsw i32 %8, 1
br label %86
23: ; preds = %11
%24 = add nsw i32 %8, -1
br label %86
25: ; preds = %11
%26 = icmp eq i32 %8, 0
%27 = icmp eq i32 %7, 0
%28 = select i1 %26, i1 %27, i1 false
br i1 %28, label %29, label %32
29: ; preds = %25
%30 = load i32, i32* @stdout
%31 = tail call i32 @fprintf(i32 %30, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0))
br label %32
32: ; preds = %29, %25
%33 = add nsw i32 %7, 1
br label %86
34: ; preds = %11
%35 = add nsw i32 %7, -1
br label %86
36: ; preds = %11
%37 = icmp eq i32 %8, 0
%38 = icmp eq i32 %7, 0
%39 = select i1 %37, i1 %38, i1 false
%40 = icmp eq i32 %6, 0
%41 = select i1 %39, i1 %40, i1 false
br i1 %41, label %42, label %86
42: ; preds = %36
%43 = load i32, i32* @stdout
%44 = tail call i32 @fputc(i8 signext %13, i32 %43)
br label %86
45: ; preds = %4
%46 = icmp eq i32 %8, 0
br i1 %46, label %47, label %50
47: ; preds = %45
%48 = load i32, i32* @stdout
%49 = tail call i32 @fprintf(i32 %48, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
br label %50
50: ; preds = %47, %45
%51 = add nsw i32 %8, 1
br label %86
52: ; preds = %4
%53 = add nsw i32 %8, -1
br label %86
54: ; preds = %4
%55 = icmp eq i32 %8, 0
%56 = icmp eq i32 %7, 0
%57 = select i1 %55, i1 %56, i1 false
br i1 %57, label %58, label %61
58: ; preds = %54
%59 = load i32, i32* @stdout
%60 = tail call i32 @fprintf(i32 %59, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0))
br label %61
61: ; preds = %58, %54
%62 = add nsw i32 %7, 1
br label %86
63: ; preds = %4
%64 = add nsw i32 %7, -1
br label %86
65: ; preds = %4
%66 = icmp eq i8 %5, 47
%67 = icmp eq i8 %10, 42
%68 = select i1 %66, i1 %67, i1 false
br i1 %68, label %69, label %71
69: ; preds = %65
%70 = add nsw i32 %6, 1
br label %86
71: ; preds = %65
%72 = icmp eq i8 %5, 42
%73 = icmp eq i8 %10, 47
%74 = select i1 %72, i1 %73, i1 false
br i1 %74, label %75, label %77
75: ; preds = %71
%76 = add nsw i32 %6, -1
br label %86
77: ; preds = %71
%78 = icmp eq i32 %8, 0
%79 = icmp eq i32 %7, 0
%80 = select i1 %78, i1 %79, i1 false
%81 = icmp eq i32 %6, 0
%82 = select i1 %80, i1 %81, i1 false
br i1 %82, label %83, label %86
83: ; preds = %77
%84 = load i32, i32* @stdout
%85 = tail call i32 @fputc(i8 signext %10, i32 %84)
br label %86
86: ; preds = %50, %61, %69, %77, %83, %75, %63, %52, %21, %23, %34, %42, %36, %32
%87 = phi i32 [ %22, %21 ], [ %24, %23 ], [ %8, %32 ], [ %8, %34 ], [ 0, %42 ], [ %8, %36 ], [ %51, %50 ], [ %53, %52 ], [ %8, %61 ], [ %8, %63 ], [ %8, %69 ], [ %8, %75 ], [ 0, %83 ], [ %8, %77 ]
%88 = phi i32 [ %7, %21 ], [ %7, %23 ], [ %33, %32 ], [ %35, %34 ], [ 0, %42 ], [ %7, %36 ], [ %7, %50 ], [ %7, %52 ], [ %62, %61 ], [ %64, %63 ], [ %7, %69 ], [ %7, %75 ], [ 0, %83 ], [ %7, %77 ]
%89 = phi i32 [ %6, %21 ], [ %6, %23 ], [ %6, %32 ], [ %6, %34 ], [ 0, %42 ], [ %6, %36 ], [ %6, %50 ], [ %6, %52 ], [ %6, %61 ], [ %6, %63 ], [ %70, %69 ], [ %76, %75 ], [ 0, %83 ], [ %6, %77 ]
%90 = load i32, i32* @stdin
%91 = tail call i32 @feof(i32 %90)
%92 = icmp eq i32 %91, 0
br i1 %92, label %4, label %93
93: ; preds = %86, %0
ret i32 0
}