#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 *re2post(const char *re) {
  char buffer[1024];
  static char out[8000], *outp = out;
  char *stackp = buffer;
  const char *s = re;
  char ch, c;
  int atom = 0;
  for (c = *s; *s;) {
    switch (c) {
    case '(':
      *stackp++ = c;
      break;
    case ')':
      while (!(stackp == buffer)) {
        ch = *--stackp;
        if ('(' == ch)
          break;
        *outp++ = ch;
      }
      if (ch != '(' && (stackp == buffer))
        goto fail;
      if ((*(s + 1) && (*(s + 1)) != '*' && (*(s + 1)) != '|' &&
           (*(s + 1)) != '+' && (*(s + 1)) != '?' && (*(s + 1)) != ')'))
        atom = 1;
      break;
    case '.':
      while (!(stackp == buffer) && *(stackp - 1) == '.')
        *outp++ = *--stackp;
      *stackp++ = c;
      break;
    case '|':
      while (!(stackp == buffer) && *(stackp - 1) != '(' &&
             *(stackp - 1) != '|')
        *outp++ = *--stackp;
      *stackp++ = c;
      break;
    case '*':
    case '+':
    case '?':
    default:
      *outp++ = c;
      if ((*(s + 1) && (*(s + 1)) != '*' && (*(s + 1)) != '|' &&
           (*(s + 1)) != '+' && (*(s + 1)) != '?' && (*(s + 1)) != ')'))
        atom = 1;
      break;
    }
    if (atom) {
      atom = 0;
      c = '.';
    } else {
      c = *++s;
    }
  }
  while (!(stackp == buffer)) {
    if (*(stackp - 1) == '(')
      goto fail;
    *outp++ = *--stackp;
  }
  *outp++ = '\0';
  return out;
fail:
  return NULL;
}


x86 assembly (clang, -O0):
<re2post>:
push   %rbp
mov    %rsp,%rbp
sub    $0x3b0,%rsp
mov    %rdi,-0x10(%rbp)
lea    -0x410(%rbp),%rax
mov    %rax,-0x418(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x420(%rbp)
movl   $0x0,-0x428(%rbp)
mov    -0x420(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x422(%rbp)
mov    -0x420(%rbp),%rax
cmpb   $0x0,(%rax)
je     157c <re2post+0x47c>
movsbl -0x422(%rbp),%eax
mov    %eax,-0x42c(%rbp)
sub    $0x28,%eax
je     11d3 <re2post+0xd3>
jmp    116c <re2post+0x6c>
mov    -0x42c(%rbp),%eax
sub    $0x29,%eax
je     11f5 <re2post+0xf5>
jmp    1180 <re2post+0x80>
mov    -0x42c(%rbp),%eax
add    $0xffffffd6,%eax
sub    $0x2,%eax
jb     148d <re2post+0x38d>
jmp    1197 <re2post+0x97>
mov    -0x42c(%rbp),%eax
sub    $0x2e,%eax
je     1329 <re2post+0x229>
jmp    11ab <re2post+0xab>
mov    -0x42c(%rbp),%eax
sub    $0x3f,%eax
je     148d <re2post+0x38d>
jmp    11bf <re2post+0xbf>
mov    -0x42c(%rbp),%eax
sub    $0x7c,%eax
je     13cd <re2post+0x2cd>
jmp    1492 <re2post+0x392>
mov    -0x422(%rbp),%cl
mov    -0x418(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x418(%rbp)
mov    %cl,(%rax)
jmp    1536 <re2post+0x436>
jmp    11fa <re2post+0xfa>
mov    -0x418(%rbp),%rax
lea    -0x410(%rbp),%rcx
cmp    %rcx,%rax
sete   %al
xor    $0xff,%al
test   $0x1,%al
jne    121d <re2post+0x11d>
jmp    1276 <re2post+0x176>
mov    -0x418(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x418(%rbp)
mov    -0x1(%rax),%al
mov    %al,-0x421(%rbp)
movsbl -0x421(%rbp),%ecx
mov    $0x28,%eax
cmp    %ecx,%eax
jne    1254 <re2post+0x154>
jmp    1276 <re2post+0x176>
mov    -0x421(%rbp),%cl
mov    0x2dbf(%rip),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,0x2db1(%rip)
mov    %cl,(%rax)
jmp    11fa <re2post+0xfa>
movsbl -0x421(%rbp),%eax
cmp    $0x28,%eax
je     12a2 <re2post+0x1a2>
mov    -0x418(%rbp),%rax
lea    -0x410(%rbp),%rcx
cmp    %rcx,%rax
jne    12a2 <re2post+0x1a2>
jmp    1619 <re2post+0x519>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1324 <re2post+0x224>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2a,%eax
je     1324 <re2post+0x224>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x7c,%eax
je     1324 <re2post+0x224>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2b,%eax
je     1324 <re2post+0x224>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3f,%eax
je     1324 <re2post+0x224>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x29,%eax
je     1324 <re2post+0x224>
movl   $0x1,-0x428(%rbp)
jmp    1536 <re2post+0x436>
jmp    132e <re2post+0x22e>
mov    -0x418(%rbp),%rcx
lea    -0x410(%rbp),%rdx
xor    %eax,%eax
cmp    %rdx,%rcx
mov    %al,-0x42d(%rbp)
je     1364 <re2post+0x264>
mov    -0x418(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
sete   %al
mov    %al,-0x42d(%rbp)
mov    -0x42d(%rbp),%al
test   $0x1,%al
jne    1377 <re2post+0x277>
jmp    13ab <re2post+0x2ab>
mov    -0x418(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x418(%rbp)
mov    -0x1(%rax),%cl
mov    0x2c8a(%rip),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,0x2c7c(%rip)
mov    %cl,(%rax)
jmp    132e <re2post+0x22e>
mov    -0x422(%rbp),%cl
mov    -0x418(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x418(%rbp)
mov    %cl,(%rax)
jmp    1536 <re2post+0x436>
jmp    13d2 <re2post+0x2d2>
mov    -0x418(%rbp),%rcx
lea    -0x410(%rbp),%rdx
xor    %eax,%eax
cmp    %rdx,%rcx
mov    %al,-0x42e(%rbp)
je     1424 <re2post+0x324>
mov    -0x418(%rbp),%rax
movsbl -0x1(%rax),%ecx
xor    %eax,%eax
cmp    $0x28,%ecx
mov    %al,-0x42e(%rbp)
je     1424 <re2post+0x324>
mov    -0x418(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x7c,%eax
setne  %al
mov    %al,-0x42e(%rbp)
mov    -0x42e(%rbp),%al
test   $0x1,%al
jne    1437 <re2post+0x337>
jmp    146b <re2post+0x36b>
mov    -0x418(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x418(%rbp)
mov    -0x1(%rax),%cl
mov    0x2bca(%rip),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,0x2bbc(%rip)
mov    %cl,(%rax)
jmp    13d2 <re2post+0x2d2>
mov    -0x422(%rbp),%cl
mov    -0x418(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x418(%rbp)
mov    %cl,(%rax)
jmp    1536 <re2post+0x436>
jmp    1492 <re2post+0x392>
mov    -0x422(%rbp),%cl
mov    0x2b81(%rip),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,0x2b73(%rip)
mov    %cl,(%rax)
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1531 <re2post+0x431>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2a,%eax
je     1531 <re2post+0x431>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x7c,%eax
je     1531 <re2post+0x431>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2b,%eax
je     1531 <re2post+0x431>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3f,%eax
je     1531 <re2post+0x431>
mov    -0x420(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x29,%eax
je     1531 <re2post+0x431>
movl   $0x1,-0x428(%rbp)
jmp    1536 <re2post+0x436>
cmpl   $0x0,-0x428(%rbp)
je     1559 <re2post+0x459>
movl   $0x0,-0x428(%rbp)
movb   $0x2e,-0x422(%rbp)
jmp    1577 <re2post+0x477>
mov    -0x420(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x420(%rbp)
mov    0x1(%rax),%al
mov    %al,-0x422(%rbp)
jmp    1141 <re2post+0x41>
jmp    1581 <re2post+0x481>
mov    -0x418(%rbp),%rax
lea    -0x410(%rbp),%rcx
cmp    %rcx,%rax
sete   %al
xor    $0xff,%al
test   $0x1,%al
jne    15a4 <re2post+0x4a4>
jmp    15f1 <re2post+0x4f1>
mov    -0x418(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x28,%eax
jne    15bd <re2post+0x4bd>
jmp    1619 <re2post+0x519>
mov    -0x418(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x418(%rbp)
mov    -0x1(%rax),%cl
mov    0x2a44(%rip),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,0x2a36(%rip)
mov    %cl,(%rax)
jmp    1581 <re2post+0x481>
mov    0x2a28(%rip),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,0x2a1a(%rip)
movb   $0x0,(%rax)
lea    0x2a30(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1621 <re2post+0x521>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x3b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<re2post>:
sub    $0x388,%rsp
mov    (%rdi),%r10b
test   %r10b,%r10b
je     12e8 <re2post+0x1e8>
lea    -0x80(%rsp),%r9
movabs $0x80000e0000000001,%r8
xor    %eax,%eax
mov    %r9,%rsi
nopw   0x0(%rax,%rax,1)
movsbl %r10b,%ecx
cmp    $0x2d,%ecx
jg     11a0 <re2post+0xa0>
cmp    $0x28,%ecx
je     1230 <re2post+0x130>
cmp    $0x29,%ecx
jne    1260 <re2post+0x160>
mov    %r9,%r11
cmp    %r9,%rsi
je     128a <re2post+0x18a>
add    $0xffffffffffffffff,%rsi
mov    %rsi,%r11
xchg   %ax,%ax
movzbl (%r11),%edx
cmp    $0x28,%dl
je     128a <re2post+0x18a>
mov    0x2eac(%rip),%rsi
lea    0x1(%rsi),%rcx
mov    %rcx,0x2ea1(%rip)
mov    %dl,(%rsi)
lea    -0x1(%r11),%rcx
cmp    %r9,%r11
mov    %rcx,%r11
jne    1160 <re2post+0x60>
jmp    1304 <re2post+0x204>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x2e,%ecx
je     11f0 <re2post+0xf0>
cmp    $0x7c,%ecx
jne    1260 <re2post+0x160>
mov    %r9,%r11
cmp    %r9,%rsi
je     1233 <re2post+0x133>
nopw   0x0(%rax,%rax,1)
movzbl -0x1(%rsi),%ecx
cmp    $0x28,%cl
je     1230 <re2post+0x130>
cmp    $0x7c,%cl
je     1230 <re2post+0x130>
add    $0xffffffffffffffff,%rsi
mov    0x2e47(%rip),%r11
lea    0x1(%r11),%rdx
mov    %rdx,0x2e3c(%rip)
mov    %cl,(%r11)
cmp    %r9,%rsi
jne    11c0 <re2post+0xc0>
jmp    1224 <re2post+0x124>
xchg   %ax,%ax
mov    %r9,%r11
cmp    %r9,%rsi
je     1233 <re2post+0x133>
nopl   0x0(%rax,%rax,1)
cmpb   $0x2e,-0x1(%rsi)
jne    1230 <re2post+0x130>
add    $0xffffffffffffffff,%rsi
mov    0x2e0f(%rip),%rcx
lea    0x1(%rcx),%rdx
mov    %rdx,0x2e04(%rip)
movb   $0x2e,(%rcx)
cmp    %r9,%rsi
jne    1200 <re2post+0x100>
mov    %r9,%r11
jmp    1233 <re2post+0x133>
nopl   0x0(%rax)
mov    %rsi,%r11
mov    %r10b,(%r11)
add    $0x1,%r11
mov    0x1(%rdi),%dl
add    $0x1,%rdi
mov    %r11,%rsi
mov    %edx,%r10d
test   %dl,%dl
jne    1130 <re2post+0x30>
jmp    12b4 <re2post+0x1b4>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x2db9(%rip),%rcx
lea    0x1(%rcx),%rdx
mov    %rdx,0x2dae(%rip)
mov    %r10b,(%rcx)
movzbl 0x1(%rdi),%edx
cmp    $0x3f,%rdx
ja     129c <re2post+0x19c>
bt     %rdx,%r8
jae    129c <re2post+0x19c>
mov    %rsi,%r11
jmp    123a <re2post+0x13a>
movzbl 0x1(%rdi),%edx
cmp    $0x3f,%rdx
ja     129f <re2post+0x19f>
bt     %rdx,%r8
jb     123a <re2post+0x13a>
jmp    129f <re2post+0x19f>
mov    %rsi,%r11
cmp    $0x7c,%dl
je     123a <re2post+0x13a>
mov    (%rdi),%dl
mov    $0x2e,%r10b
mov    %r11,%rsi
test   %dl,%dl
jne    1130 <re2post+0x30>
lea    -0x80(%rsp),%r8
cmp    %r8,%rsi
je     12e8 <re2post+0x1e8>
xor    %eax,%eax
movzbl -0x1(%rsi),%ecx
cmp    $0x28,%cl
je     1304 <re2post+0x204>
add    $0xffffffffffffffff,%rsi
mov    0x2d4c(%rip),%rdi
lea    0x1(%rdi),%rdx
mov    %rdx,0x2d41(%rip)
mov    %cl,(%rdi)
cmp    %r8,%rsi
jne    12c0 <re2post+0x1c0>
jmp    12ef <re2post+0x1ef>
mov    0x2d31(%rip),%rdx
lea    0x1(%rdx),%rax
mov    %rax,0x2d26(%rip)
movb   $0x0,(%rdx)
lea    0x2d3c(%rip),%rax
add    $0x388,%rsp
ret

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

LLVM IR (-O2):
@re2post.out = internal global [8000 x i8] zeroinitializer
@re2post.outp = internal unnamed_addr global i8* getelementptr inbounds ([8000 x i8], [8000 x i8]* @re2post.out, i64 0, i64 0)
define i8* @re2post(i8* nocapture %0) {
%2 = alloca [1024 x i8]
%3 = getelementptr inbounds [1024 x i8], [1024 x i8]* %2, i64 0, i64 0
%4 = load i8, i8* %0
%5 = icmp eq i8 %4, 0
br i1 %5, label %8, label %10
6: ; preds = %66
%7 = icmp eq i8* %68, %3
br i1 %7, label %8, label %72
8: ; preds = %1, %6
%9 = load i8*, i8** @re2post.outp
br label %83
10: ; preds = %1, %66
%11 = phi i8 [ %70, %66 ], [ %4, %1 ]
%12 = phi i8* [ %69, %66 ], [ %0, %1 ]
%13 = phi i8* [ %68, %66 ], [ %3, %1 ]
%14 = sext i8 %11 to i32
switch i32 %14, label %51 [
i32 40, label %56
i32 41, label %19
i32 46, label %17
i32 124, label %15
]
15: ; preds = %10
%16 = icmp eq i8* %13, %3
br i1 %16, label %56, label %43
17: ; preds = %10
%18 = icmp eq i8* %13, %3
br i1 %18, label %56, label %34
19: ; preds = %10
%20 = icmp eq i8* %13, %3
br i1 %20, label %30, label %21
21: ; preds = %19, %26
%22 = phi i8* [ %23, %26 ], [ %13, %19 ]
%23 = getelementptr inbounds i8, i8* %22, i64 -1
%24 = load i8, i8* %23
%25 = icmp eq i8 %24, 40
br i1 %25, label %30, label %26
26: ; preds = %21
%27 = load i8*, i8** @re2post.outp
%28 = getelementptr inbounds i8, i8* %27, i64 1
store i8* %28, i8** @re2post.outp
store i8 %24, i8* %27
%29 = icmp eq i8* %23, %3
br i1 %29, label %86, label %21
30: ; preds = %21, %19
%31 = phi i8* [ %3, %19 ], [ %23, %21 ]
%32 = getelementptr inbounds i8, i8* %12, i64 1
%33 = load i8, i8* %32
switch i8 %33, label %63 [
i8 0, label %59
i8 42, label %59
i8 124, label %59
i8 43, label %59
i8 63, label %59
i8 41, label %59
]
34: ; preds = %17, %39
%35 = phi i8* [ %36, %39 ], [ %13, %17 ]
%36 = getelementptr inbounds i8, i8* %35, i64 -1
%37 = load i8, i8* %36
%38 = icmp eq i8 %37, 46
br i1 %38, label %39, label %56
39: ; preds = %34
%40 = load i8*, i8** @re2post.outp
%41 = getelementptr inbounds i8, i8* %40, i64 1
store i8* %41, i8** @re2post.outp
store i8 46, i8* %40
%42 = icmp eq i8* %36, %3
br i1 %42, label %56, label %34
43: ; preds = %15, %47
%44 = phi i8* [ %45, %47 ], [ %13, %15 ]
%45 = getelementptr inbounds i8, i8* %44, i64 -1
%46 = load i8, i8* %45
switch i8 %46, label %47 [
i8 40, label %56
i8 124, label %56
]
47: ; preds = %43
%48 = load i8*, i8** @re2post.outp
%49 = getelementptr inbounds i8, i8* %48, i64 1
store i8* %49, i8** @re2post.outp
store i8 %46, i8* %48
%50 = icmp eq i8* %45, %3
br i1 %50, label %56, label %43
51: ; preds = %10
%52 = load i8*, i8** @re2post.outp
%53 = getelementptr inbounds i8, i8* %52, i64 1
store i8* %53, i8** @re2post.outp
store i8 %11, i8* %52
%54 = getelementptr inbounds i8, i8* %12, i64 1
%55 = load i8, i8* %54
switch i8 %55, label %63 [
i8 0, label %59
i8 42, label %59
i8 124, label %59
i8 43, label %59
i8 63, label %59
i8 41, label %59
]
56: ; preds = %43, %43, %47, %39, %34, %15, %17, %10
%57 = phi i8* [ %13, %10 ], [ %3, %17 ], [ %3, %15 ], [ %3, %39 ], [ %35, %34 ], [ %44, %43 ], [ %44, %43 ], [ %3, %47 ]
%58 = getelementptr inbounds i8, i8* %57, i64 1
store i8 %11, i8* %57
br label %59
59: ; preds = %56, %51, %51, %51, %51, %51, %51, %30, %30, %30, %30, %30, %30
%60 = phi i8* [ %13, %51 ], [ %13, %51 ], [ %13, %51 ], [ %13, %51 ], [ %13, %51 ], [ %31, %30 ], [ %31, %30 ], [ %31, %30 ], [ %31, %30 ], [ %31, %30 ], [ %31, %30 ], [ %13, %51 ], [ %58, %56 ]
%61 = getelementptr inbounds i8, i8* %12, i64 1
%62 = load i8, i8* %61
br label %66
63: ; preds = %30, %51
%64 = phi i8* [ %13, %51 ], [ %31, %30 ]
%65 = load i8, i8* %12
br label %66
66: ; preds = %63, %59
%67 = phi i8 [ %65, %63 ], [ %62, %59 ]
%68 = phi i8* [ %64, %63 ], [ %60, %59 ]
%69 = phi i8* [ %12, %63 ], [ %61, %59 ]
%70 = phi i8 [ 46, %63 ], [ %62, %59 ]
%71 = icmp eq i8 %67, 0
br i1 %71, label %6, label %10
72: ; preds = %6, %77
%73 = phi i8* [ %74, %77 ], [ %68, %6 ]
%74 = getelementptr inbounds i8, i8* %73, i64 -1
%75 = load i8, i8* %74
%76 = icmp eq i8 %75, 40
br i1 %76, label %86, label %77
77: ; preds = %72
%78 = load i8*, i8** @re2post.outp
%79 = getelementptr inbounds i8, i8* %78, i64 1
store i8* %79, i8** @re2post.outp
store i8 %75, i8* %78
%80 = icmp eq i8* %74, %3
br i1 %80, label %81, label %72
81: ; preds = %77
%82 = getelementptr inbounds i8, i8* %78, i64 1
br label %83
83: ; preds = %81, %8
%84 = phi i8* [ %9, %8 ], [ %82, %81 ]
%85 = getelementptr inbounds i8, i8* %84, i64 1
store i8* %85, i8** @re2post.outp
store i8 0, i8* %84
br label %86
86: ; preds = %26, %72, %83
%87 = phi i8* [ getelementptr inbounds ([8000 x i8], [8000 x i8]* @re2post.out, i64 0, i64 0), %83 ], [ null, %72 ], [ null, %26 ]
ret i8* %87
}