int pnmatch(const char *s, const char *p, int unanch) {
  int c1;
  int c2;
  if (unanch == 1) {
    while (*s)
      if (pnmatch(s++, p, ++unanch))
        return (1);
    return (0);
  }
  while ((c2 = *p++) != 0) {
    c1 = *s++;
    switch (c2) {
    case '^':
      if (unanch == 2) {
        s--;
        continue;
      } else if (unanch == 0)
        break;
      else
        return (0);
    case '$':
      if (unanch)
        return (c1 == '\0');
      break;
    case '[':
      for (;;) {
        c2 = *p++;
        if (c2 == '\0' || c2 == ']')
          return (0);
        if (c2 == '\\' && *p == '-')
          c2 = *p++;
        if (c2 == c1)
          break;
        if (*p == '-')
          if (c1 <= *++p && c1 >= c2)
            break;
      }
      while (*p && *p++ != ']')
        ;
    case '?':
      if (c1)
        continue;
      return (0);
    case '*':
      if (!*p)
        return (1);
      s--;
      do {
        if (pnmatch(s, p, unanch))
          return (1);
      } while (*s++ != '\0');
      return (0);
    case '\\':
      if ((c2 = *p++) == '\0')
        return (0);
    }
    if (c1 != c2)
      return (0);
  }
  return (unanch ? 1 : !*s);
}


x86 assembly (clang, -O0):
<pnmatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
cmpl   $0x1,-0x1c(%rbp)
jne    1186 <pnmatch+0x76>
jmp    1132 <pnmatch+0x22>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     117a <pnmatch+0x6a>
mov    -0x10(%rbp),%rdi
mov    %rdi,%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rsi
mov    -0x1c(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x1c(%rbp)
call   1030 <pnmatch@plt>
cmp    $0x0,%eax
je     1175 <pnmatch+0x65>
movl   $0x1,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
jmp    1132 <pnmatch+0x22>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
jmp    118b <pnmatch+0x7b>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmp    $0x0,%eax
je     142f <pnmatch+0x31f>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffdc,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x3a,%eax
ja     1412 <pnmatch+0x302>
mov    -0x30(%rbp),%rax
lea    0xe22(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0x2,-0x1c(%rbp)
jne    1202 <pnmatch+0xf2>
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
jmp    118b <pnmatch+0x7b>
cmpl   $0x0,-0x1c(%rbp)
jne    1211 <pnmatch+0x101>
jmp    1412 <pnmatch+0x302>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
cmpl   $0x0,-0x1c(%rbp)
je     123b <pnmatch+0x12b>
cmpl   $0x0,-0x20(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
jmp    1412 <pnmatch+0x302>
jmp    1245 <pnmatch+0x135>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     126e <pnmatch+0x15e>
cmpl   $0x5d,-0x24(%rbp)
jne    127a <pnmatch+0x16a>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
cmpl   $0x5c,-0x24(%rbp)
jne    12a9 <pnmatch+0x199>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    12a9 <pnmatch+0x199>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x20(%rbp),%eax
jne    12ba <pnmatch+0x1aa>
jmp    1303 <pnmatch+0x1f3>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    12fe <pnmatch+0x1ee>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
movsbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jg     12f9 <pnmatch+0x1e9>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
jl     12f9 <pnmatch+0x1e9>
jmp    1303 <pnmatch+0x1f3>
jmp    12fe <pnmatch+0x1ee>
jmp    1245 <pnmatch+0x135>
jmp    1308 <pnmatch+0x1f8>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x31(%rbp)
je     1338 <pnmatch+0x228>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
cmp    $0x5d,%eax
setne  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    1348 <pnmatch+0x238>
jmp    134d <pnmatch+0x23d>
jmp    1308 <pnmatch+0x1f8>
jmp    1352 <pnmatch+0x242>
cmpl   $0x0,-0x20(%rbp)
je     1361 <pnmatch+0x251>
jmp    118b <pnmatch+0x7b>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1386 <pnmatch+0x276>
movl   $0x1,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x1c(%rbp),%edx
call   1030 <pnmatch@plt>
cmp    $0x0,%eax
je     13b7 <pnmatch+0x2a7>
movl   $0x1,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
jmp    13bc <pnmatch+0x2ac>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1392 <pnmatch+0x282>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmp    $0x0,%eax
jne    140d <pnmatch+0x2fd>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
jmp    1412 <pnmatch+0x302>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     142a <pnmatch+0x31a>
movl   $0x0,-0x4(%rbp)
jmp    1460 <pnmatch+0x350>
jmp    118b <pnmatch+0x7b>
cmpl   $0x0,-0x1c(%rbp)
je     1446 <pnmatch+0x336>
mov    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    145a <pnmatch+0x34a>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pnmatch>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rsi,%r14
mov    %rdi,%r15
cmp    $0x1,%edx
jne    115d <pnmatch+0x4d>
mov    $0x2,%ebp
nopl   0x0(%rax,%rax,1)
movzbl (%r15),%ebx
test   %bl,%bl
je     1153 <pnmatch+0x43>
lea    0x1(%r15),%r12
mov    %r15,%rdi
mov    %r14,%rsi
mov    %ebp,%edx
call   1030 <pnmatch@plt>
add    $0x1,%ebp
mov    %r12,%r15
test   %eax,%eax
je     1130 <pnmatch+0x20>
test   %bl,%bl
setne  %al
jmp    12d4 <pnmatch+0x1c4>
mov    %edx,%ebp
mov    $0x2d,%esi
add    $0x1,%r14
mov    %r14,%rax
movsbl -0x1(%rax),%ecx
test   %ecx,%ecx
je     1299 <pnmatch+0x189>
mov    %rax,%r14
cmp    $0x5e,%ecx
jne    11a0 <pnmatch+0x90>
lea    0x1(%r14),%rax
cmp    $0x2,%ebp
je     116b <pnmatch+0x5b>
test   %ebp,%ebp
jne    1295 <pnmatch+0x185>
jmp    125a <pnmatch+0x14a>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x3e,%ecx
jle    1250 <pnmatch+0x140>
cmp    $0x3f,%ecx
je     125f <pnmatch+0x14f>
cmp    $0x5c,%ecx
je     1268 <pnmatch+0x158>
cmp    $0x5b,%ecx
jne    125a <pnmatch+0x14a>
mov    (%r15),%cl
movsbl %cl,%edx
mov    (%r14),%al
nopl   (%rax)
test   %al,%al
je     1295 <pnmatch+0x185>
cmp    $0x5d,%al
je     1295 <pnmatch+0x185>
lea    0x1(%r14),%rbx
cmp    $0x5c,%al
jne    1200 <pnmatch+0xf0>
lea    0x2(%r14),%rax
cmpb   $0x2d,0x1(%r14)
cmove  %rax,%rbx
mov    $0x5c,%edi
cmove  %esi,%edi
jmp    1203 <pnmatch+0xf3>
nop
movsbl %al,%edi
mov    %rbx,%r14
cmp    %edx,%edi
je     1230 <pnmatch+0x120>
movzbl (%r14),%eax
cmp    $0x2d,%al
jne    11d0 <pnmatch+0xc0>
movzbl 0x1(%r14),%eax
add    $0x1,%r14
cmp    %al,%cl
jg     11d0 <pnmatch+0xc0>
cmp    %edx,%edi
jg     11d0 <pnmatch+0xc0>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%r14),%eax
test   %al,%al
je     1262 <pnmatch+0x152>
add    $0x1,%r14
cmp    $0x5d,%al
jne    1230 <pnmatch+0x120>
jmp    1262 <pnmatch+0x152>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x24,%ecx
je     1279 <pnmatch+0x169>
cmp    $0x2a,%ecx
je     12a8 <pnmatch+0x198>
mov    (%r15),%al
jmp    1285 <pnmatch+0x175>
mov    (%r15),%cl
test   %cl,%cl
jne    128c <pnmatch+0x17c>
jmp    1295 <pnmatch+0x185>
movsbl (%r14),%ecx
test   %ecx,%ecx
je     1295 <pnmatch+0x185>
mov    (%r15),%al
add    $0x1,%r14
jmp    1285 <pnmatch+0x175>
mov    (%r15),%al
mov    $0x24,%ecx
test   %ebp,%ebp
jne    12e0 <pnmatch+0x1d0>
movsbl %al,%eax
cmp    %eax,%ecx
jne    1295 <pnmatch+0x185>
add    $0x1,%r15
jmp    1164 <pnmatch+0x54>
xor    %eax,%eax
jmp    12d4 <pnmatch+0x1c4>
mov    $0x1,%al
test   %ebp,%ebp
jne    12d4 <pnmatch+0x1c4>
cmpb   $0x0,(%r15)
sete   %al
jmp    12d4 <pnmatch+0x1c4>
cmpb   $0x0,(%r14)
je     12d2 <pnmatch+0x1c2>
xchg   %ax,%ax
mov    %r15,%rdi
mov    %r14,%rsi
mov    %ebp,%edx
call   1030 <pnmatch@plt>
test   %eax,%eax
jne    12cb <pnmatch+0x1bb>
cmpb   $0x0,(%r15)
lea    0x1(%r15),%r15
jne    12b0 <pnmatch+0x1a0>
test   %eax,%eax
setne  %al
jmp    12d4 <pnmatch+0x1c4>
mov    $0x1,%al
movzbl %al,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
test   %al,%al
jmp    12a3 <pnmatch+0x193>

LLVM IR (-O0):
define i32 @pnmatch(i8* %0, i8* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
%10 = load i32, i32* %7
%11 = icmp eq i32 %10, 1
br i1 %11, label %12, label %28
12: ; preds = %3
br label %13
13: ; preds = %26, %12
%14 = load i8*, i8** %5
%15 = load i8, i8* %14
%16 = icmp ne i8 %15, 0
br i1 %16, label %17, label %27
17: ; preds = %13
%18 = load i8*, i8** %5
%19 = getelementptr inbounds i8, i8* %18, i32 1
store i8* %19, i8** %5
%20 = load i8*, i8** %6
%21 = load i32, i32* %7
%22 = add nsw i32 %21, 1
store i32 %22, i32* %7
%23 = call i32 @pnmatch(i8* %18, i8* %20, i32 %22)
%24 = icmp ne i32 %23, 0
br i1 %24, label %25, label %26
25: ; preds = %17
store i32 1, i32* %4
br label %179
26: ; preds = %17
br label %13
27: ; preds = %13
store i32 0, i32* %4
br label %179
28: ; preds = %3
br label %29
29: ; preds = %166, %128, %44, %28
%30 = load i8*, i8** %6
%31 = getelementptr inbounds i8, i8* %30, i32 1
store i8* %31, i8** %6
%32 = load i8, i8* %30
%33 = sext i8 %32 to i32
store i32 %33, i32* %9
%34 = icmp ne i32 %33, 0
br i1 %34, label %35, label %167
35: ; preds = %29
%36 = load i8*, i8** %5
%37 = getelementptr inbounds i8, i8* %36, i32 1
store i8* %37, i8** %5
%38 = load i8, i8* %36
%39 = sext i8 %38 to i32
store i32 %39, i32* %8
%40 = load i32, i32* %9
switch i32 %40, label %161 [
i32 94, label %41
i32 36, label %52
i32 91, label %60
i32 63, label %125
i32 42, label %130
i32 92, label %153
]
41: ; preds = %35
%42 = load i32, i32* %7
%43 = icmp eq i32 %42, 2
br i1 %43, label %44, label %47
44: ; preds = %41
%45 = load i8*, i8** %5
%46 = getelementptr inbounds i8, i8* %45, i32 -1
store i8* %46, i8** %5
br label %29
47: ; preds = %41
%48 = load i32, i32* %7
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %51
50: ; preds = %47
br label %161
51: ; preds = %47
store i32 0, i32* %4
br label %179
52: ; preds = %35
%53 = load i32, i32* %7
%54 = icmp ne i32 %53, 0
br i1 %54, label %55, label %59
55: ; preds = %52
%56 = load i32, i32* %8
%57 = icmp eq i32 %56, 0
%58 = zext i1 %57 to i32
store i32 %58, i32* %4
br label %179
59: ; preds = %52
br label %161
60: ; preds = %35
br label %61
61: ; preds = %108, %60
%62 = load i8*, i8** %6
%63 = getelementptr inbounds i8, i8* %62, i32 1
store i8* %63, i8** %6
%64 = load i8, i8* %62
%65 = sext i8 %64 to i32
store i32 %65, i32* %9
%66 = load i32, i32* %9
%67 = icmp eq i32 %66, 0
br i1 %67, label %71, label %68
68: ; preds = %61
%69 = load i32, i32* %9
%70 = icmp eq i32 %69, 93
br i1 %70, label %71, label %72
71: ; preds = %68, %61
store i32 0, i32* %4
br label %179
72: ; preds = %68
%73 = load i32, i32* %9
%74 = icmp eq i32 %73, 92
br i1 %74, label %75, label %85
75: ; preds = %72
%76 = load i8*, i8** %6
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = icmp eq i32 %78, 45
br i1 %79, label %80, label %85
80: ; preds = %75
%81 = load i8*, i8** %6
%82 = getelementptr inbounds i8, i8* %81, i32 1
store i8* %82, i8** %6
%83 = load i8, i8* %81
%84 = sext i8 %83 to i32
store i32 %84, i32* %9
br label %85
85: ; preds = %80, %75, %72
%86 = load i32, i32* %9
%87 = load i32, i32* %8
%88 = icmp eq i32 %86, %87
br i1 %88, label %89, label %90
89: ; preds = %85
br label %109
90: ; preds = %85
%91 = load i8*, i8** %6
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = icmp eq i32 %93, 45
br i1 %94, label %95, label %108
95: ; preds = %90
%96 = load i32, i32* %8
%97 = load i8*, i8** %6
%98 = getelementptr inbounds i8, i8* %97, i32 1
store i8* %98, i8** %6
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = icmp sle i32 %96, %100
br i1 %101, label %102, label %107
102: ; preds = %95
%103 = load i32, i32* %8
%104 = load i32, i32* %9
%105 = icmp sge i32 %103, %104
br i1 %105, label %106, label %107
106: ; preds = %102
br label %109
107: ; preds = %102, %95
br label %108
108: ; preds = %107, %90
br label %61
109: ; preds = %106, %89
br label %110
110: ; preds = %123, %109
%111 = load i8*, i8** %6
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = icmp ne i32 %113, 0
br i1 %114, label %115, label %121
115: ; preds = %110
%116 = load i8*, i8** %6
%117 = getelementptr inbounds i8, i8* %116, i32 1
store i8* %117, i8** %6
%118 = load i8, i8* %116
%119 = sext i8 %118 to i32
%120 = icmp ne i32 %119, 93
br label %121
121: ; preds = %115, %110
%122 = phi i1 [ false, %110 ], [ %120, %115 ]
br i1 %122, label %123, label %124
123: ; preds = %121
br label %110
124: ; preds = %121
br label %125
125: ; preds = %35, %124
%126 = load i32, i32* %8
%127 = icmp ne i32 %126, 0
br i1 %127, label %128, label %129
128: ; preds = %125
br label %29
129: ; preds = %125
store i32 0, i32* %4
br label %179
130: ; preds = %35
%131 = load i8*, i8** %6
%132 = load i8, i8* %131
%133 = icmp ne i8 %132, 0
br i1 %133, label %135, label %134
134: ; preds = %130
store i32 1, i32* %4
br label %179
135: ; preds = %130
%136 = load i8*, i8** %5
%137 = getelementptr inbounds i8, i8* %136, i32 -1
store i8* %137, i8** %5
br label %138
138: ; preds = %146, %135
%139 = load i8*, i8** %5
%140 = load i8*, i8** %6
%141 = load i32, i32* %7
%142 = call i32 @pnmatch(i8* %139, i8* %140, i32 %141)
%143 = icmp ne i32 %142, 0
br i1 %143, label %144, label %145
144: ; preds = %138
store i32 1, i32* %4
br label %179
145: ; preds = %138
br label %146
146: ; preds = %145
%147 = load i8*, i8** %5
%148 = getelementptr inbounds i8, i8* %147, i32 1
store i8* %148, i8** %5
%149 = load i8, i8* %147
%150 = sext i8 %149 to i32
%151 = icmp ne i32 %150, 0
br i1 %151, label %138, label %152
152: ; preds = %146
store i32 0, i32* %4
br label %179
153: ; preds = %35
%154 = load i8*, i8** %6
%155 = getelementptr inbounds i8, i8* %154, i32 1
store i8* %155, i8** %6
%156 = load i8, i8* %154
%157 = sext i8 %156 to i32
store i32 %157, i32* %9
%158 = icmp eq i32 %157, 0
br i1 %158, label %159, label %160
159: ; preds = %153
store i32 0, i32* %4
br label %179
160: ; preds = %153
br label %161
161: ; preds = %160, %35, %59, %50
%162 = load i32, i32* %8
%163 = load i32, i32* %9
%164 = icmp ne i32 %162, %163
br i1 %164, label %165, label %166
165: ; preds = %161
store i32 0, i32* %4
br label %179
166: ; preds = %161
br label %29
167: ; preds = %29
%168 = load i32, i32* %7
%169 = icmp ne i32 %168, 0
br i1 %169, label %170, label %171
170: ; preds = %167
br label %177
171: ; preds = %167
%172 = load i8*, i8** %5
%173 = load i8, i8* %172
%174 = icmp ne i8 %173, 0
%175 = xor i1 %174, true
%176 = zext i1 %175 to i32
br label %177
177: ; preds = %171, %170
%178 = phi i32 [ 1, %170 ], [ %176, %171 ]
store i32 %178, i32* %4
br label %179
179: ; preds = %177, %165, %159, %152, %144, %134, %129, %71, %55, %51, %27, %25
%180 = load i32, i32* %4
ret i32 %180
}

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