#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 WRDE_BADCHAR;
int WRDE_CMDSUB;
int WRDE_NOCMD;
int WRDE_SYNTAX;
int we_check(const char *words, int flags) {
  char c;
  int dquote, level, quote, squote;
  quote = squote = dquote = 0;
  while ((c = *words++) != '\0') {
    switch (c) {
    case '\\':
      quote ^= 1;
      continue;
    case '\'':
      if (quote + dquote == 0)
        squote ^= 1;
      break;
    case '"':
      if (quote + squote == 0)
        dquote ^= 1;
      break;
    case '`':
      if (quote + squote == 0 && flags & WRDE_NOCMD)
        return (WRDE_CMDSUB);
      while ((c = *words++) != '\0' && c != '`')
        if (c == '\\' && (c = *words++) == '\0')
          break;
      if (c == '\0')
        return (WRDE_SYNTAX);
      break;
    case '|':
    case '&':
    case ';':
    case '<':
    case '>':
    case '{':
    case '}':
    case '(':
    case ')':
    case '\n':
      if (quote + squote + dquote == 0)
        return (WRDE_BADCHAR);
      break;
    case '$':
      if ((c = *words++) == '\0')
        break;
      else if (quote + squote == 0 && c == '(') {
        if (flags & WRDE_NOCMD && *words != '(')
          return (WRDE_CMDSUB);
        level = 1;
        while ((c = *words++) != '\0') {
          if (c == '\\') {
            if ((c = *words++) == '\0')
              break;
          } else if (c == '(')
            level++;
          else if (c == ')' && --level == 0)
            break;
        }
        if (c == '\0' || level != 0)
          return (WRDE_SYNTAX);
      } else if (quote + squote == 0 && c == '{') {
        level = 1;
        while ((c = *words++) != '\0') {
          if (c == '\\') {
            if ((c = *words++) == '\0')
              break;
          } else if (c == '{')
            level++;
          else if (c == '}' && --level == 0)
            break;
        }
        if (c == '\0' || level != 0)
          return (WRDE_SYNTAX);
      } else
        --words;
      break;
    default:
      break;
    }
    quote = 0;
  }
  if (quote + squote + dquote != 0)
    return (WRDE_SYNTAX);
  return (0);
}


x86 assembly (clang, -O0):
<we_check>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     1521 <we_check+0x421>
movsbl -0x15(%rbp),%eax
add    $0xfffffff6,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x73,%eax
ja     1510 <we_check+0x410>
mov    -0x30(%rbp),%rax
lea    0xe9f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x24(%rbp),%eax
xor    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1120 <we_check+0x20>
mov    -0x24(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0x0,%eax
jne    1190 <we_check+0x90>
mov    -0x28(%rbp),%eax
xor    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1515 <we_check+0x415>
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    11ad <we_check+0xad>
mov    -0x1c(%rbp),%eax
xor    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1515 <we_check+0x415>
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    11e7 <we_check+0xe7>
mov    -0x14(%rbp),%eax
mov    0x2e1d(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     11e7 <we_check+0xe7>
mov    0x2df3(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
jmp    11ec <we_check+0xec>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x31(%rbp)
je     121e <we_check+0x11e>
movsbl -0x15(%rbp),%eax
cmp    $0x60,%eax
setne  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    122e <we_check+0x12e>
jmp    1265 <we_check+0x165>
movsbl -0x15(%rbp),%eax
cmp    $0x5c,%eax
jne    1260 <we_check+0x160>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
jne    1260 <we_check+0x160>
jmp    1265 <we_check+0x165>
jmp    11ec <we_check+0xec>
movsbl -0x15(%rbp),%eax
cmp    $0x0,%eax
jne    1283 <we_check+0x183>
mov    0x2d67(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
jmp    1515 <we_check+0x415>
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0x0,%eax
jne    12ab <we_check+0x1ab>
mov    0x2d37(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
jmp    1515 <we_check+0x415>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
jne    12d5 <we_check+0x1d5>
jmp    1515 <we_check+0x415>
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    1400 <we_check+0x300>
movsbl -0x15(%rbp),%eax
cmp    $0x28,%eax
jne    1400 <we_check+0x300>
mov    -0x14(%rbp),%eax
mov    0x2ced(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1327 <we_check+0x227>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
je     1327 <we_check+0x227>
mov    0x2cb3(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
movl   $0x1,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     13d3 <we_check+0x2d3>
movsbl -0x15(%rbp),%eax
cmp    $0x5c,%eax
jne    1385 <we_check+0x285>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
jne    1380 <we_check+0x280>
jmp    13d3 <we_check+0x2d3>
jmp    13ce <we_check+0x2ce>
movsbl -0x15(%rbp),%eax
cmp    $0x28,%eax
jne    13a0 <we_check+0x2a0>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13c9 <we_check+0x2c9>
movsbl -0x15(%rbp),%eax
cmp    $0x29,%eax
jne    13c4 <we_check+0x2c4>
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
cmp    $0x0,%eax
jne    13c4 <we_check+0x2c4>
jmp    13d3 <we_check+0x2d3>
jmp    13c9 <we_check+0x2c9>
jmp    13ce <we_check+0x2ce>
jmp    132e <we_check+0x22e>
movsbl -0x15(%rbp),%eax
cmp    $0x0,%eax
je     13ea <we_check+0x2ea>
cmpl   $0x0,-0x20(%rbp)
je     13fb <we_check+0x2fb>
mov    0x2bef(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
jmp    1506 <we_check+0x406>
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    14f5 <we_check+0x3f5>
movsbl -0x15(%rbp),%eax
cmp    $0x7b,%eax
jne    14f5 <we_check+0x3f5>
movl   $0x1,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     14c8 <we_check+0x3c8>
movsbl -0x15(%rbp),%eax
cmp    $0x5c,%eax
jne    147a <we_check+0x37a>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
jne    1475 <we_check+0x375>
jmp    14c8 <we_check+0x3c8>
jmp    14c3 <we_check+0x3c3>
movsbl -0x15(%rbp),%eax
cmp    $0x7b,%eax
jne    1495 <we_check+0x395>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    14be <we_check+0x3be>
movsbl -0x15(%rbp),%eax
cmp    $0x7d,%eax
jne    14b9 <we_check+0x3b9>
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
cmp    $0x0,%eax
jne    14b9 <we_check+0x3b9>
jmp    14c8 <we_check+0x3c8>
jmp    14be <we_check+0x3be>
jmp    14c3 <we_check+0x3c3>
jmp    1423 <we_check+0x323>
movsbl -0x15(%rbp),%eax
cmp    $0x0,%eax
je     14df <we_check+0x3df>
cmpl   $0x0,-0x20(%rbp)
je     14f0 <we_check+0x3f0>
mov    0x2afa(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
jmp    1501 <we_check+0x401>
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
jmp    1506 <we_check+0x406>
jmp    150b <we_check+0x40b>
jmp    1515 <we_check+0x415>
jmp    1515 <we_check+0x415>
movl   $0x0,-0x24(%rbp)
jmp    1120 <we_check+0x20>
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0x0,%eax
je     1544 <we_check+0x444>
mov    0x2aa6(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    154b <we_check+0x44b>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<we_check>:
push   %rbx
mov    (%rdi),%cl
xor    %eax,%eax
mov    $0x0,%r9d
mov    $0x0,%r10d
mov    $0x0,%edx
test   %cl,%cl
je     1308 <we_check+0x208>
mov    0x2ec3(%rip),%rdx
and    (%rdx),%esi
xor    %r10d,%r10d
lea    0xecf(%rip),%r8
xor    %r9d,%r9d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x2,%rdi
xor    %edx,%edx
movsbl %cl,%ecx
cmp    $0x5c,%ecx
jne    1170 <we_check+0x70>
xor    $0x1,%edx
movzbl -0x1(%rdi),%ecx
add    $0x1,%rdi
test   %cl,%cl
jne    1146 <we_check+0x46>
jmp    1308 <we_check+0x208>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0xfffffff6,%ecx
cmp    $0x73,%ecx
ja     118d <we_check+0x8d>
movslq (%r8,%rcx,4),%rcx
add    %r8,%rcx
jmp    *%rcx
add    %r10d,%edx
add    %r9d,%edx
je     131b <we_check+0x21b>
add    $0xffffffffffffffff,%rdi
mov    (%rdi),%cl
test   %cl,%cl
jne    1140 <we_check+0x40>
jmp    1306 <we_check+0x206>
xor    %ecx,%ecx
add    %r10d,%edx
sete   %cl
xor    %ecx,%r9d
jmp    118d <we_check+0x8d>
mov    -0x1(%rdi),%r11b
test   %r11b,%r11b
je     1191 <we_check+0x91>
mov    %r10d,%ecx
neg    %ecx
cmp    %ecx,%edx
jne    128c <we_check+0x18c>
cmp    $0x28,%r11b
jne    128c <we_check+0x18c>
test   %esi,%esi
je     11d6 <we_check+0xd6>
cmpb   $0x28,(%rdi)
jne    1324 <we_check+0x224>
mov    $0x1,%r11d
nopl   0x0(%rax)
mov    %rdi,%rdx
add    $0x1,%rdi
movzbl (%rdx),%ecx
cmp    $0x5b,%cl
jle    1210 <we_check+0x110>
cmp    $0x5c,%cl
jne    11e0 <we_check+0xe0>
lea    0x2(%rdx),%rdi
cmpb   $0x0,0x1(%rdx)
jne    11e0 <we_check+0xe0>
jmp    1310 <we_check+0x210>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   %cl,%cl
je     1310 <we_check+0x210>
cmp    $0x28,%cl
je     122d <we_check+0x12d>
cmp    $0x29,%cl
jne    11e0 <we_check+0xe0>
add    $0xffffffff,%r11d
jne    11e0 <we_check+0xe0>
jmp    1191 <we_check+0x91>
add    $0x1,%r11d
jmp    11e0 <we_check+0xe0>
xor    %ecx,%ecx
add    %r9d,%edx
sete   %cl
xor    %ecx,%r10d
jmp    118d <we_check+0x8d>
add    $0xffffffffffffffff,%rdi
add    %r10d,%edx
jne    126e <we_check+0x16e>
test   %esi,%esi
je     126e <we_check+0x16e>
jmp    1324 <we_check+0x224>
cs nopw 0x0(%rax,%rax,1)
nop
cmpb   $0x0,0x1(%rdi)
lea    0x2(%rdi),%rdi
je     1310 <we_check+0x210>
movzbl (%rdi),%ecx
cmp    $0x5c,%cl
je     1260 <we_check+0x160>
test   %cl,%cl
je     1310 <we_check+0x210>
add    $0x1,%rdi
cmp    $0x60,%cl
jne    126e <we_check+0x16e>
jmp    1191 <we_check+0x91>
lea    -0x1(%rdi),%rbx
cmp    %ecx,%edx
jne    12fe <we_check+0x1fe>
cmp    $0x7b,%r11b
jne    12fe <we_check+0x1fe>
mov    $0x1,%r11d
mov    %rdi,%rcx
jmp    12b7 <we_check+0x1b7>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rdi,%rcx
test   %dl,%dl
je     1310 <we_check+0x210>
lea    0x1(%rcx),%rdi
movzbl (%rcx),%edx
cmp    $0x7a,%dl
jg     12e0 <we_check+0x1e0>
cmp    $0x5c,%dl
jne    12b0 <we_check+0x1b0>
cmpb   $0x0,0x1(%rcx)
lea    0x2(%rcx),%rcx
jne    12b7 <we_check+0x1b7>
jmp    1310 <we_check+0x210>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x7b,%dl
je     12f8 <we_check+0x1f8>
mov    %rdi,%rcx
cmp    $0x7d,%dl
jne    12b7 <we_check+0x1b7>
add    $0xffffffff,%r11d
jne    12a0 <we_check+0x1a0>
jmp    1191 <we_check+0x91>
add    $0x1,%r11d
jmp    12a0 <we_check+0x1a0>
mov    %rbx,%rdi
jmp    1191 <we_check+0x91>
xor    %edx,%edx
add    %edx,%r10d
add    %r9d,%r10d
je     1319 <we_check+0x219>
mov    0x2cc9(%rip),%rax
mov    (%rax),%eax
pop    %rbx
ret
mov    0x2cb6(%rip),%rax
jmp    1317 <we_check+0x217>
mov    0x2ca5(%rip),%rax
jmp    1317 <we_check+0x217>

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

LLVM IR (-O2):
@WRDE_NOCMD = global i32 0
@WRDE_CMDSUB = global i32 0
@WRDE_SYNTAX = global i32 0
@WRDE_BADCHAR = global i32 0
define i32 @we_check(i8* nocapture %0, i32 %1) {
%3 = load i8, i8* %0
%4 = icmp eq i8 %3, 0
br i1 %4, label %127, label %5
5: ; preds = %2
%6 = load i32, i32* @WRDE_NOCMD
%7 = and i32 %6, %1
%8 = icmp eq i32 %7, 0
br label %9
9: ; preds = %5, %121
%10 = phi i8 [ %3, %5 ], [ %125, %121 ]
%11 = phi i32 [ 0, %5 ], [ %124, %121 ]
%12 = phi i32 [ 0, %5 ], [ %123, %121 ]
%13 = phi i8* [ %0, %5 ], [ %122, %121 ]
br label %14
14: ; preds = %9, %20
%15 = phi i8 [ %10, %9 ], [ %22, %20 ]
%16 = phi i32 [ 0, %9 ], [ %21, %20 ]
%17 = phi i8* [ %13, %9 ], [ %18, %20 ]
%18 = getelementptr inbounds i8, i8* %17, i64 1
%19 = sext i8 %15 to i32
switch i32 %19, label %121 [
i32 92, label %20
i32 39, label %24
i32 34, label %29
i32 96, label %34
i32 124, label %52
i32 38, label %52
i32 59, label %52
i32 60, label %52
i32 62, label %52
i32 123, label %52
i32 125, label %52
i32 40, label %52
i32 41, label %52
i32 10, label %52
i32 36, label %58
]
20: ; preds = %14
%21 = xor i32 %16, 1
%22 = load i8, i8* %18
%23 = icmp eq i8 %22, 0
br i1 %23, label %127, label %14
24: ; preds = %14
%25 = sub i32 0, %12
%26 = icmp eq i32 %16, %25
%27 = zext i1 %26 to i32
%28 = xor i32 %11, %27
br label %121
29: ; preds = %14
%30 = sub i32 0, %11
%31 = icmp eq i32 %16, %30
%32 = zext i1 %31 to i32
%33 = xor i32 %12, %32
br label %121
34: ; preds = %14
%35 = sub i32 0, %11
%36 = icmp ne i32 %16, %35
%37 = select i1 %36, i1 true, i1 %8
br i1 %37, label %40, label %38
38: ; preds = %34
%39 = load i32, i32* @WRDE_CMDSUB
br label %136
40: ; preds = %34, %44
%41 = phi i8* [ %45, %44 ], [ %18, %34 ]
%42 = getelementptr inbounds i8, i8* %41, i64 1
%43 = load i8, i8* %41
switch i8 %43, label %44 [
i8 92, label %46
i8 0, label %50
i8 96, label %121
]
44: ; preds = %40, %46
%45 = phi i8* [ %47, %46 ], [ %42, %40 ]
br label %40
46: ; preds = %40
%47 = getelementptr inbounds i8, i8* %41, i64 2
%48 = load i8, i8* %42
%49 = icmp eq i8 %48, 0
br i1 %49, label %50, label %44
50: ; preds = %40, %46
%51 = load i32, i32* @WRDE_SYNTAX
br label %136
52: ; preds = %14, %14, %14, %14, %14, %14, %14, %14, %14, %14
%53 = add nsw i32 %11, %16
%54 = sub i32 0, %12
%55 = icmp eq i32 %53, %54
br i1 %55, label %56, label %121
56: ; preds = %52
%57 = load i32, i32* @WRDE_BADCHAR
br label %136
58: ; preds = %14
%59 = getelementptr inbounds i8, i8* %17, i64 2
%60 = load i8, i8* %18
%61 = icmp eq i8 %60, 0
br i1 %61, label %121, label %62
62: ; preds = %58
%63 = sub i32 0, %11
%64 = icmp eq i32 %16, %63
%65 = icmp eq i8 %60, 40
%66 = select i1 %64, i1 %65, i1 false
br i1 %66, label %67, label %96
67: ; preds = %62
br i1 %8, label %68, label %69
68: ; preds = %69, %67
br label %88
69: ; preds = %67
%70 = load i8, i8* %59
%71 = icmp eq i8 %70, 40
br i1 %71, label %68, label %72
72: ; preds = %69
%73 = load i32, i32* @WRDE_CMDSUB
br label %136
74: ; preds = %78, %88
%75 = phi i8* [ %89, %88 ], [ %79, %78 ]
%76 = getelementptr inbounds i8, i8* %75, i64 1
%77 = load i8, i8* %75
switch i8 %77, label %78 [
i8 0, label %94
i8 92, label %80
i8 40, label %84
i8 41, label %91
]
78: ; preds = %74, %80
%79 = phi i8* [ %81, %80 ], [ %76, %74 ]
br label %74
80: ; preds = %74
%81 = getelementptr inbounds i8, i8* %75, i64 2
%82 = load i8, i8* %76
%83 = icmp eq i8 %82, 0
br i1 %83, label %94, label %78
84: ; preds = %74
%85 = add nsw i32 %90, 1
br label %86
86: ; preds = %84, %91
%87 = phi i32 [ %92, %91 ], [ %85, %84 ]
br label %88
88: ; preds = %86, %68
%89 = phi i8* [ %59, %68 ], [ %76, %86 ]
%90 = phi i32 [ 1, %68 ], [ %87, %86 ]
br label %74
91: ; preds = %74
%92 = add nsw i32 %90, -1
%93 = icmp eq i32 %92, 0
br i1 %93, label %121, label %86
94: ; preds = %74, %80
%95 = load i32, i32* @WRDE_SYNTAX
br label %136
96: ; preds = %62
%97 = icmp eq i8 %60, 123
%98 = select i1 %64, i1 %97, i1 false
br i1 %98, label %99, label %121
99: ; preds = %96, %114
%100 = phi i8* [ %104, %114 ], [ %59, %96 ]
%101 = phi i32 [ %115, %114 ], [ 1, %96 ]
br label %102
102: ; preds = %106, %99
%103 = phi i8* [ %100, %99 ], [ %107, %106 ]
%104 = getelementptr inbounds i8, i8* %103, i64 1
%105 = load i8, i8* %103
switch i8 %105, label %106 [
i8 0, label %119
i8 92, label %108
i8 123, label %112
i8 125, label %116
]
106: ; preds = %102, %108
%107 = phi i8* [ %109, %108 ], [ %104, %102 ]
br label %102
108: ; preds = %102
%109 = getelementptr inbounds i8, i8* %103, i64 2
%110 = load i8, i8* %104
%111 = icmp eq i8 %110, 0
br i1 %111, label %119, label %106
112: ; preds = %102
%113 = add nsw i32 %101, 1
br label %114
114: ; preds = %112, %116
%115 = phi i32 [ %117, %116 ], [ %113, %112 ]
br label %99
116: ; preds = %102
%117 = add nsw i32 %101, -1
%118 = icmp eq i32 %117, 0
br i1 %118, label %121, label %114
119: ; preds = %102, %108
%120 = load i32, i32* @WRDE_SYNTAX
br label %136
121: ; preds = %14, %116, %91, %40, %96, %29, %24, %58, %52
%122 = phi i8* [ %59, %58 ], [ %18, %52 ], [ %18, %24 ], [ %18, %29 ], [ %18, %96 ], [ %42, %40 ], [ %76, %91 ], [ %104, %116 ], [ %18, %14 ]
%123 = phi i32 [ %12, %58 ], [ %12, %52 ], [ %12, %24 ], [ %33, %29 ], [ %12, %96 ], [ %12, %40 ], [ %12, %91 ], [ %12, %116 ], [ %12, %14 ]
%124 = phi i32 [ %11, %58 ], [ %11, %52 ], [ %28, %24 ], [ %11, %29 ], [ %11, %96 ], [ %11, %40 ], [ %11, %91 ], [ %11, %116 ], [ %11, %14 ]
%125 = load i8, i8* %122
%126 = icmp eq i8 %125, 0
br i1 %126, label %127, label %9
127: ; preds = %121, %20, %2
%128 = phi i32 [ 0, %2 ], [ %12, %20 ], [ %123, %121 ]
%129 = phi i32 [ 0, %2 ], [ %11, %20 ], [ %124, %121 ]
%130 = phi i32 [ 0, %2 ], [ %21, %20 ], [ 0, %121 ]
%131 = add nsw i32 %129, %130
%132 = sub i32 0, %128
%133 = icmp eq i32 %131, %132
%134 = load i32, i32* @WRDE_SYNTAX
%135 = select i1 %133, i32 0, i32 %134
br label %136
136: ; preds = %127, %119, %94, %72, %56, %50, %38
%137 = phi i32 [ %73, %72 ], [ %95, %94 ], [ %120, %119 ], [ %57, %56 ], [ %39, %38 ], [ %51, %50 ], [ %135, %127 ]
ret i32 %137
}